@lv-x-software-house/x_view 1.2.6-dev.19 → 1.2.6-dev.20
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 +86 -38
- package/dist/index.mjs +86 -38
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -13282,12 +13282,19 @@ function RichGroupEditor({
|
|
|
13282
13282
|
}
|
|
13283
13283
|
|
|
13284
13284
|
// src/components/AncestryBoard.jsx
|
|
13285
|
+
var Tooltip = ({ text, children }) => {
|
|
13286
|
+
if (!text) return children;
|
|
13287
|
+
return /* @__PURE__ */ import_react29.default.createElement("div", { className: "relative group/tooltip" }, children, /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-slate-900 border border-white/10 text-white text-[10px] rounded opacity-0 group-hover/tooltip:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-[3000] shadow-2xl" }, text));
|
|
13288
|
+
};
|
|
13285
13289
|
var BoardItem = ({
|
|
13286
13290
|
item,
|
|
13287
13291
|
index,
|
|
13292
|
+
prevItem,
|
|
13293
|
+
nextItem,
|
|
13288
13294
|
onUpdate,
|
|
13289
13295
|
onDelete,
|
|
13290
13296
|
onIndent,
|
|
13297
|
+
onIndentDown,
|
|
13291
13298
|
onOutdent,
|
|
13292
13299
|
onMoveUp,
|
|
13293
13300
|
onMoveDown,
|
|
@@ -13298,9 +13305,21 @@ var BoardItem = ({
|
|
|
13298
13305
|
}) => {
|
|
13299
13306
|
var _a;
|
|
13300
13307
|
const isFolder = item.type === "folder";
|
|
13301
|
-
const canIndent = index > 0;
|
|
13302
13308
|
const canMoveUp = index > 0;
|
|
13303
|
-
const
|
|
13309
|
+
const canMoveDown = nextItem !== void 0;
|
|
13310
|
+
const isNested = onOutdent !== void 0;
|
|
13311
|
+
const getIndentUpTooltip = () => {
|
|
13312
|
+
if (!prevItem) return null;
|
|
13313
|
+
const typeLabel = prevItem.type === "folder" ? "folder" : "text_group";
|
|
13314
|
+
return isFolder ? prevItem.type === "folder" ? "Aninhar na pasta acima" : null : `Mover para dentro do ${typeLabel} acima`;
|
|
13315
|
+
};
|
|
13316
|
+
const getIndentDownTooltip = () => {
|
|
13317
|
+
if (!nextItem) return null;
|
|
13318
|
+
const typeLabel = nextItem.type === "folder" ? "folder" : "text_group";
|
|
13319
|
+
return isFolder ? nextItem.type === "folder" ? "Aninhar na pasta abaixo" : null : `Mover para dentro do ${typeLabel} abaixo`;
|
|
13320
|
+
};
|
|
13321
|
+
const showIndentUp = !!getIndentUpTooltip();
|
|
13322
|
+
const showIndentDown = !!getIndentDownTooltip();
|
|
13304
13323
|
const handleContentChange = (content) => {
|
|
13305
13324
|
onUpdate(item.id, { ...item, content });
|
|
13306
13325
|
};
|
|
@@ -13326,7 +13345,7 @@ var BoardItem = ({
|
|
|
13326
13345
|
placeholder: "Nome da pasta..."
|
|
13327
13346
|
}
|
|
13328
13347
|
) : /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-sm font-medium text-slate-200" }, item.name), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-2 mt-0.5" }, /* @__PURE__ */ import_react29.default.createElement("span", { className: "text-[10px] text-slate-500 uppercase tracking-wider font-semibold" }, ((_a = item.children) == null ? void 0 : _a.length) || 0, " itens"))),
|
|
13329
|
-
/* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-1.5 opacity-0 group-item/item:opacity-100 group-hover/folder:opacity-100 transition-opacity" }, canEdit && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-0.5 bg-slate-900/80 backdrop-blur-sm p-1 rounded-lg border border-white/5 shadow-xl" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13348
|
+
/* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-1.5 opacity-0 group-item/item:opacity-100 group-hover/folder:opacity-100 transition-opacity" }, canEdit && /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-0.5 bg-slate-900/80 backdrop-blur-sm p-1 rounded-lg border border-white/5 shadow-xl" }, /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: "Subir" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13330
13349
|
"button",
|
|
13331
13350
|
{
|
|
13332
13351
|
onClick: (e) => {
|
|
@@ -13334,56 +13353,62 @@ var BoardItem = ({
|
|
|
13334
13353
|
onMoveUp(item.id);
|
|
13335
13354
|
},
|
|
13336
13355
|
disabled: !canMoveUp,
|
|
13337
|
-
className: `p-1.5 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}
|
|
13338
|
-
title: "Subir"
|
|
13356
|
+
className: `p-1.5 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
13339
13357
|
},
|
|
13340
13358
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiArrowUp, { size: 14 })
|
|
13341
|
-
), /* @__PURE__ */ import_react29.default.createElement(
|
|
13359
|
+
)), /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13342
13360
|
"button",
|
|
13343
13361
|
{
|
|
13344
13362
|
onClick: (e) => {
|
|
13345
13363
|
e.stopPropagation();
|
|
13346
13364
|
onMoveDown(item.id);
|
|
13347
13365
|
},
|
|
13348
|
-
|
|
13349
|
-
|
|
13366
|
+
disabled: !canMoveDown,
|
|
13367
|
+
className: `p-1.5 rounded transition-colors ${!canMoveDown ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
13350
13368
|
},
|
|
13351
13369
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiArrowDown, { size: 14 })
|
|
13352
|
-
), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-px h-3 bg-white/10 mx-0.5" }), /* @__PURE__ */ import_react29.default.createElement(
|
|
13370
|
+
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-px h-3 bg-white/10 mx-0.5" }), showIndentUp && /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: getIndentUpTooltip() }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13353
13371
|
"button",
|
|
13354
13372
|
{
|
|
13355
13373
|
onClick: (e) => {
|
|
13356
13374
|
e.stopPropagation();
|
|
13357
13375
|
onIndent(item.id);
|
|
13358
13376
|
},
|
|
13359
|
-
|
|
13360
|
-
className: `p-1.5 rounded transition-colors ${!canIndent ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`,
|
|
13361
|
-
title: "Aninhar"
|
|
13377
|
+
className: "p-1.5 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13362
13378
|
},
|
|
13363
13379
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiArrowRight, { size: 14 })
|
|
13364
|
-
), /* @__PURE__ */ import_react29.default.createElement(
|
|
13380
|
+
)), showIndentDown && /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13365
13381
|
"button",
|
|
13366
13382
|
{
|
|
13367
13383
|
onClick: (e) => {
|
|
13368
13384
|
e.stopPropagation();
|
|
13369
|
-
|
|
13385
|
+
onIndentDown(item.id);
|
|
13370
13386
|
},
|
|
13371
|
-
className: "p-1.5 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13372
|
-
title: "Desaninhar"
|
|
13387
|
+
className: "p-1.5 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13373
13388
|
},
|
|
13374
13389
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiArrowLeft, { size: 14 })
|
|
13375
|
-
), /* @__PURE__ */ import_react29.default.createElement(
|
|
13390
|
+
)), (isNested || !showIndentUp && !showIndentDown) && /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: "Desaninhar / Recuar n\xEDvel" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13391
|
+
"button",
|
|
13392
|
+
{
|
|
13393
|
+
onClick: (e) => {
|
|
13394
|
+
e.stopPropagation();
|
|
13395
|
+
onOutdent(item.id);
|
|
13396
|
+
},
|
|
13397
|
+
disabled: !onOutdent,
|
|
13398
|
+
className: `p-1.5 rounded transition-colors ${!onOutdent ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
13399
|
+
},
|
|
13400
|
+
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiCornerUpRight, { size: 14 })
|
|
13401
|
+
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-px h-3 bg-white/10 mx-0.5" }), /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: "Remover Pasta" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13376
13402
|
"button",
|
|
13377
13403
|
{
|
|
13378
13404
|
onClick: (e) => {
|
|
13379
13405
|
e.stopPropagation();
|
|
13380
13406
|
onDelete(item.id);
|
|
13381
13407
|
},
|
|
13382
|
-
className: "p-1.5 text-slate-500 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
13383
|
-
title: "Remover Pasta"
|
|
13408
|
+
className: "p-1.5 text-slate-500 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
13384
13409
|
},
|
|
13385
13410
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiTrash2, { size: 14 })
|
|
13386
|
-
)), /* @__PURE__ */ import_react29.default.createElement(import_fi23.FiChevronRight, { className: "text-slate-500 group-hover/folder:translate-x-1 transition-transform" }))
|
|
13411
|
+
))), /* @__PURE__ */ import_react29.default.createElement(import_fi23.FiChevronRight, { className: "text-slate-500 group-hover/folder:translate-x-1 transition-transform" }))
|
|
13387
13412
|
));
|
|
13388
13413
|
}
|
|
13389
13414
|
return /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-2 mb-3 pl-3 border-l border-white/10 relative group/item animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ import_react29.default.createElement("div", { className: "absolute -left-[1px] top-4 w-2 h-px bg-white/20" }), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex flex-col gap-2 py-2 px-3 transition-all duration-200 hover:bg-white/5 border-l-2 border-transparent hover:border-white/20" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
@@ -13405,58 +13430,64 @@ var BoardItem = ({
|
|
|
13405
13430
|
},
|
|
13406
13431
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiPlus, { size: 12 }),
|
|
13407
13432
|
/* @__PURE__ */ import_react29.default.createElement("span", null, "Subgrupo")
|
|
13408
|
-
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13433
|
+
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: "Subir" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13409
13434
|
"button",
|
|
13410
13435
|
{
|
|
13411
13436
|
onClick: () => onMoveUp(item.id),
|
|
13412
13437
|
disabled: !canMoveUp,
|
|
13413
|
-
className: `p-1.5 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}
|
|
13414
|
-
title: "Subir"
|
|
13438
|
+
className: `p-1.5 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`
|
|
13415
13439
|
},
|
|
13416
13440
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiArrowUp, { size: 14 })
|
|
13417
|
-
), /* @__PURE__ */ import_react29.default.createElement(
|
|
13441
|
+
)), /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13418
13442
|
"button",
|
|
13419
13443
|
{
|
|
13420
13444
|
onClick: () => onMoveDown(item.id),
|
|
13421
|
-
|
|
13422
|
-
|
|
13445
|
+
disabled: !canMoveDown,
|
|
13446
|
+
className: `p-1.5 rounded transition-colors ${!canMoveDown ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`
|
|
13423
13447
|
},
|
|
13424
13448
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiArrowDown, { size: 14 })
|
|
13425
|
-
), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), /* @__PURE__ */ import_react29.default.createElement(
|
|
13449
|
+
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), showIndentUp && /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: getIndentUpTooltip() }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13426
13450
|
"button",
|
|
13427
13451
|
{
|
|
13428
13452
|
onClick: () => onIndent(item.id),
|
|
13429
|
-
|
|
13430
|
-
className: `p-1.5 rounded transition-colors ${!canIndent ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`,
|
|
13431
|
-
title: "Aninhar no grupo acima"
|
|
13453
|
+
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13432
13454
|
},
|
|
13433
13455
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiArrowRight, { size: 14 })
|
|
13434
|
-
), /* @__PURE__ */ import_react29.default.createElement(
|
|
13456
|
+
)), showIndentDown && /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13435
13457
|
"button",
|
|
13436
13458
|
{
|
|
13437
|
-
onClick: () =>
|
|
13438
|
-
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13439
|
-
title: "Desaninhar"
|
|
13459
|
+
onClick: () => onIndentDown(item.id),
|
|
13460
|
+
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13440
13461
|
},
|
|
13441
13462
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiArrowLeft, { size: 14 })
|
|
13442
|
-
), /* @__PURE__ */ import_react29.default.createElement(
|
|
13463
|
+
)), (isNested || !showIndentUp && !showIndentDown) && /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: "Desaninhar / Recuar n\xEDvel" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13464
|
+
"button",
|
|
13465
|
+
{
|
|
13466
|
+
onClick: () => onOutdent(item.id),
|
|
13467
|
+
disabled: !onOutdent,
|
|
13468
|
+
className: `p-1.5 rounded transition-colors ${!onOutdent ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`
|
|
13469
|
+
},
|
|
13470
|
+
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiCornerUpRight, { size: 14 })
|
|
13471
|
+
)), /* @__PURE__ */ import_react29.default.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), /* @__PURE__ */ import_react29.default.createElement(Tooltip, { text: "Remover Grupo" }, /* @__PURE__ */ import_react29.default.createElement(
|
|
13443
13472
|
"button",
|
|
13444
13473
|
{
|
|
13445
13474
|
onClick: () => onDelete(item.id),
|
|
13446
|
-
className: "p-1.5 text-slate-600 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
13447
|
-
title: "Remover Grupo"
|
|
13475
|
+
className: "p-1.5 text-slate-600 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
13448
13476
|
},
|
|
13449
13477
|
/* @__PURE__ */ import_react29.default.createElement(import_fi23.FiTrash2, { size: 14 })
|
|
13450
|
-
)))), item.children && item.children.length > 0 && /* @__PURE__ */ import_react29.default.createElement("div", { className: "ml-2" }, item.children.map((child, idx) => /* @__PURE__ */ import_react29.default.createElement(
|
|
13478
|
+
))))), item.children && item.children.length > 0 && /* @__PURE__ */ import_react29.default.createElement("div", { className: "ml-2" }, item.children.map((child, idx) => /* @__PURE__ */ import_react29.default.createElement(
|
|
13451
13479
|
BoardItem,
|
|
13452
13480
|
{
|
|
13453
13481
|
key: child.id,
|
|
13454
13482
|
index: idx,
|
|
13483
|
+
prevItem: item.children[idx - 1],
|
|
13484
|
+
nextItem: item.children[idx + 1],
|
|
13455
13485
|
item: child,
|
|
13456
13486
|
onUpdate,
|
|
13457
13487
|
onDelete,
|
|
13458
13488
|
onAddSubgroup,
|
|
13459
13489
|
onIndent,
|
|
13490
|
+
onIndentDown,
|
|
13460
13491
|
onOutdent,
|
|
13461
13492
|
onMoveUp,
|
|
13462
13493
|
onMoveDown,
|
|
@@ -13673,6 +13704,20 @@ function AncestryBoard({
|
|
|
13673
13704
|
setGroups(next);
|
|
13674
13705
|
triggerInstantSave(next);
|
|
13675
13706
|
};
|
|
13707
|
+
const handleIndentDown = (id) => {
|
|
13708
|
+
const next = JSON.parse(JSON.stringify(groups));
|
|
13709
|
+
const found = findGroupAndParent(next, id);
|
|
13710
|
+
if (!found || found.index === found.siblings.length - 1) return;
|
|
13711
|
+
const { group, siblings, index } = found;
|
|
13712
|
+
const targetParent = siblings[index + 1];
|
|
13713
|
+
if (group.type === "folder" && targetParent.type === "group") {
|
|
13714
|
+
return;
|
|
13715
|
+
}
|
|
13716
|
+
siblings.splice(index, 1);
|
|
13717
|
+
targetParent.children.push(group);
|
|
13718
|
+
setGroups(next);
|
|
13719
|
+
triggerInstantSave(next);
|
|
13720
|
+
};
|
|
13676
13721
|
const handleOutdent = (id) => {
|
|
13677
13722
|
const next = JSON.parse(JSON.stringify(groups));
|
|
13678
13723
|
const found = findGroupAndParent(next, id);
|
|
@@ -13778,11 +13823,14 @@ function AncestryBoard({
|
|
|
13778
13823
|
{
|
|
13779
13824
|
key: item.id,
|
|
13780
13825
|
index,
|
|
13826
|
+
prevItem: currentGroups[index - 1],
|
|
13827
|
+
nextItem: currentGroups[index + 1],
|
|
13781
13828
|
item,
|
|
13782
13829
|
onUpdate: handleUpdateItem,
|
|
13783
13830
|
onDelete: handleDeleteItem,
|
|
13784
13831
|
onAddSubgroup: handleAddSubgroup,
|
|
13785
13832
|
onIndent: handleIndent,
|
|
13833
|
+
onIndentDown: handleIndentDown,
|
|
13786
13834
|
onOutdent: handleOutdent,
|
|
13787
13835
|
onMoveUp: handleMoveUp,
|
|
13788
13836
|
onMoveDown: handleMoveDown,
|
package/dist/index.mjs
CHANGED
|
@@ -13332,12 +13332,19 @@ function RichGroupEditor({
|
|
|
13332
13332
|
}
|
|
13333
13333
|
|
|
13334
13334
|
// src/components/AncestryBoard.jsx
|
|
13335
|
+
var Tooltip = ({ text, children }) => {
|
|
13336
|
+
if (!text) return children;
|
|
13337
|
+
return /* @__PURE__ */ React28.createElement("div", { className: "relative group/tooltip" }, children, /* @__PURE__ */ React28.createElement("div", { className: "absolute bottom-full left-1/2 -translate-x-1/2 mb-2 px-2 py-1 bg-slate-900 border border-white/10 text-white text-[10px] rounded opacity-0 group-hover/tooltip:opacity-100 transition-opacity pointer-events-none whitespace-nowrap z-[3000] shadow-2xl" }, text));
|
|
13338
|
+
};
|
|
13335
13339
|
var BoardItem = ({
|
|
13336
13340
|
item,
|
|
13337
13341
|
index,
|
|
13342
|
+
prevItem,
|
|
13343
|
+
nextItem,
|
|
13338
13344
|
onUpdate,
|
|
13339
13345
|
onDelete,
|
|
13340
13346
|
onIndent,
|
|
13347
|
+
onIndentDown,
|
|
13341
13348
|
onOutdent,
|
|
13342
13349
|
onMoveUp,
|
|
13343
13350
|
onMoveDown,
|
|
@@ -13348,9 +13355,21 @@ var BoardItem = ({
|
|
|
13348
13355
|
}) => {
|
|
13349
13356
|
var _a;
|
|
13350
13357
|
const isFolder = item.type === "folder";
|
|
13351
|
-
const canIndent = index > 0;
|
|
13352
13358
|
const canMoveUp = index > 0;
|
|
13353
|
-
const
|
|
13359
|
+
const canMoveDown = nextItem !== void 0;
|
|
13360
|
+
const isNested = onOutdent !== void 0;
|
|
13361
|
+
const getIndentUpTooltip = () => {
|
|
13362
|
+
if (!prevItem) return null;
|
|
13363
|
+
const typeLabel = prevItem.type === "folder" ? "folder" : "text_group";
|
|
13364
|
+
return isFolder ? prevItem.type === "folder" ? "Aninhar na pasta acima" : null : `Mover para dentro do ${typeLabel} acima`;
|
|
13365
|
+
};
|
|
13366
|
+
const getIndentDownTooltip = () => {
|
|
13367
|
+
if (!nextItem) return null;
|
|
13368
|
+
const typeLabel = nextItem.type === "folder" ? "folder" : "text_group";
|
|
13369
|
+
return isFolder ? nextItem.type === "folder" ? "Aninhar na pasta abaixo" : null : `Mover para dentro do ${typeLabel} abaixo`;
|
|
13370
|
+
};
|
|
13371
|
+
const showIndentUp = !!getIndentUpTooltip();
|
|
13372
|
+
const showIndentDown = !!getIndentDownTooltip();
|
|
13354
13373
|
const handleContentChange = (content) => {
|
|
13355
13374
|
onUpdate(item.id, { ...item, content });
|
|
13356
13375
|
};
|
|
@@ -13376,7 +13395,7 @@ var BoardItem = ({
|
|
|
13376
13395
|
placeholder: "Nome da pasta..."
|
|
13377
13396
|
}
|
|
13378
13397
|
) : /* @__PURE__ */ React28.createElement("span", { className: "text-sm font-medium text-slate-200" }, item.name), /* @__PURE__ */ React28.createElement("div", { className: "flex items-center gap-2 mt-0.5" }, /* @__PURE__ */ React28.createElement("span", { className: "text-[10px] text-slate-500 uppercase tracking-wider font-semibold" }, ((_a = item.children) == null ? void 0 : _a.length) || 0, " itens"))),
|
|
13379
|
-
/* @__PURE__ */ React28.createElement("div", { className: "flex items-center gap-1.5 opacity-0 group-item/item:opacity-100 group-hover/folder:opacity-100 transition-opacity" }, canEdit && /* @__PURE__ */ React28.createElement("div", { className: "flex items-center gap-0.5 bg-slate-900/80 backdrop-blur-sm p-1 rounded-lg border border-white/5 shadow-xl" }, /* @__PURE__ */ React28.createElement(
|
|
13398
|
+
/* @__PURE__ */ React28.createElement("div", { className: "flex items-center gap-1.5 opacity-0 group-item/item:opacity-100 group-hover/folder:opacity-100 transition-opacity" }, canEdit && /* @__PURE__ */ React28.createElement("div", { className: "flex items-center gap-0.5 bg-slate-900/80 backdrop-blur-sm p-1 rounded-lg border border-white/5 shadow-xl" }, /* @__PURE__ */ React28.createElement(Tooltip, { text: "Subir" }, /* @__PURE__ */ React28.createElement(
|
|
13380
13399
|
"button",
|
|
13381
13400
|
{
|
|
13382
13401
|
onClick: (e) => {
|
|
@@ -13384,56 +13403,62 @@ var BoardItem = ({
|
|
|
13384
13403
|
onMoveUp(item.id);
|
|
13385
13404
|
},
|
|
13386
13405
|
disabled: !canMoveUp,
|
|
13387
|
-
className: `p-1.5 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}
|
|
13388
|
-
title: "Subir"
|
|
13406
|
+
className: `p-1.5 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
13389
13407
|
},
|
|
13390
13408
|
/* @__PURE__ */ React28.createElement(FiArrowUp, { size: 14 })
|
|
13391
|
-
), /* @__PURE__ */ React28.createElement(
|
|
13409
|
+
)), /* @__PURE__ */ React28.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ React28.createElement(
|
|
13392
13410
|
"button",
|
|
13393
13411
|
{
|
|
13394
13412
|
onClick: (e) => {
|
|
13395
13413
|
e.stopPropagation();
|
|
13396
13414
|
onMoveDown(item.id);
|
|
13397
13415
|
},
|
|
13398
|
-
|
|
13399
|
-
|
|
13416
|
+
disabled: !canMoveDown,
|
|
13417
|
+
className: `p-1.5 rounded transition-colors ${!canMoveDown ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
13400
13418
|
},
|
|
13401
13419
|
/* @__PURE__ */ React28.createElement(FiArrowDown, { size: 14 })
|
|
13402
|
-
), /* @__PURE__ */ React28.createElement("div", { className: "w-px h-3 bg-white/10 mx-0.5" }), /* @__PURE__ */ React28.createElement(
|
|
13420
|
+
)), /* @__PURE__ */ React28.createElement("div", { className: "w-px h-3 bg-white/10 mx-0.5" }), showIndentUp && /* @__PURE__ */ React28.createElement(Tooltip, { text: getIndentUpTooltip() }, /* @__PURE__ */ React28.createElement(
|
|
13403
13421
|
"button",
|
|
13404
13422
|
{
|
|
13405
13423
|
onClick: (e) => {
|
|
13406
13424
|
e.stopPropagation();
|
|
13407
13425
|
onIndent(item.id);
|
|
13408
13426
|
},
|
|
13409
|
-
|
|
13410
|
-
className: `p-1.5 rounded transition-colors ${!canIndent ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`,
|
|
13411
|
-
title: "Aninhar"
|
|
13427
|
+
className: "p-1.5 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13412
13428
|
},
|
|
13413
13429
|
/* @__PURE__ */ React28.createElement(FiArrowRight2, { size: 14 })
|
|
13414
|
-
), /* @__PURE__ */ React28.createElement(
|
|
13430
|
+
)), showIndentDown && /* @__PURE__ */ React28.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ React28.createElement(
|
|
13415
13431
|
"button",
|
|
13416
13432
|
{
|
|
13417
13433
|
onClick: (e) => {
|
|
13418
13434
|
e.stopPropagation();
|
|
13419
|
-
|
|
13435
|
+
onIndentDown(item.id);
|
|
13420
13436
|
},
|
|
13421
|
-
className: "p-1.5 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13422
|
-
title: "Desaninhar"
|
|
13437
|
+
className: "p-1.5 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13423
13438
|
},
|
|
13424
13439
|
/* @__PURE__ */ React28.createElement(FiArrowLeft3, { size: 14 })
|
|
13425
|
-
), /* @__PURE__ */ React28.createElement(
|
|
13440
|
+
)), (isNested || !showIndentUp && !showIndentDown) && /* @__PURE__ */ React28.createElement(Tooltip, { text: "Desaninhar / Recuar n\xEDvel" }, /* @__PURE__ */ React28.createElement(
|
|
13441
|
+
"button",
|
|
13442
|
+
{
|
|
13443
|
+
onClick: (e) => {
|
|
13444
|
+
e.stopPropagation();
|
|
13445
|
+
onOutdent(item.id);
|
|
13446
|
+
},
|
|
13447
|
+
disabled: !onOutdent,
|
|
13448
|
+
className: `p-1.5 rounded transition-colors ${!onOutdent ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
13449
|
+
},
|
|
13450
|
+
/* @__PURE__ */ React28.createElement(FiCornerUpRight4, { size: 14 })
|
|
13451
|
+
)), /* @__PURE__ */ React28.createElement("div", { className: "w-px h-3 bg-white/10 mx-0.5" }), /* @__PURE__ */ React28.createElement(Tooltip, { text: "Remover Pasta" }, /* @__PURE__ */ React28.createElement(
|
|
13426
13452
|
"button",
|
|
13427
13453
|
{
|
|
13428
13454
|
onClick: (e) => {
|
|
13429
13455
|
e.stopPropagation();
|
|
13430
13456
|
onDelete(item.id);
|
|
13431
13457
|
},
|
|
13432
|
-
className: "p-1.5 text-slate-500 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
13433
|
-
title: "Remover Pasta"
|
|
13458
|
+
className: "p-1.5 text-slate-500 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
13434
13459
|
},
|
|
13435
13460
|
/* @__PURE__ */ React28.createElement(FiTrash23, { size: 14 })
|
|
13436
|
-
)), /* @__PURE__ */ React28.createElement(FiChevronRight7, { className: "text-slate-500 group-hover/folder:translate-x-1 transition-transform" }))
|
|
13461
|
+
))), /* @__PURE__ */ React28.createElement(FiChevronRight7, { className: "text-slate-500 group-hover/folder:translate-x-1 transition-transform" }))
|
|
13437
13462
|
));
|
|
13438
13463
|
}
|
|
13439
13464
|
return /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col gap-2 mb-3 pl-3 border-l border-white/10 relative group/item animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ React28.createElement("div", { className: "absolute -left-[1px] top-4 w-2 h-px bg-white/20" }), /* @__PURE__ */ React28.createElement("div", { className: "flex flex-col gap-2 py-2 px-3 transition-all duration-200 hover:bg-white/5 border-l-2 border-transparent hover:border-white/20" }, /* @__PURE__ */ React28.createElement(
|
|
@@ -13455,58 +13480,64 @@ var BoardItem = ({
|
|
|
13455
13480
|
},
|
|
13456
13481
|
/* @__PURE__ */ React28.createElement(FiPlus10, { size: 12 }),
|
|
13457
13482
|
/* @__PURE__ */ React28.createElement("span", null, "Subgrupo")
|
|
13458
|
-
)), /* @__PURE__ */ React28.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React28.createElement(
|
|
13483
|
+
)), /* @__PURE__ */ React28.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React28.createElement(Tooltip, { text: "Subir" }, /* @__PURE__ */ React28.createElement(
|
|
13459
13484
|
"button",
|
|
13460
13485
|
{
|
|
13461
13486
|
onClick: () => onMoveUp(item.id),
|
|
13462
13487
|
disabled: !canMoveUp,
|
|
13463
|
-
className: `p-1.5 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}
|
|
13464
|
-
title: "Subir"
|
|
13488
|
+
className: `p-1.5 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`
|
|
13465
13489
|
},
|
|
13466
13490
|
/* @__PURE__ */ React28.createElement(FiArrowUp, { size: 14 })
|
|
13467
|
-
), /* @__PURE__ */ React28.createElement(
|
|
13491
|
+
)), /* @__PURE__ */ React28.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ React28.createElement(
|
|
13468
13492
|
"button",
|
|
13469
13493
|
{
|
|
13470
13494
|
onClick: () => onMoveDown(item.id),
|
|
13471
|
-
|
|
13472
|
-
|
|
13495
|
+
disabled: !canMoveDown,
|
|
13496
|
+
className: `p-1.5 rounded transition-colors ${!canMoveDown ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`
|
|
13473
13497
|
},
|
|
13474
13498
|
/* @__PURE__ */ React28.createElement(FiArrowDown, { size: 14 })
|
|
13475
|
-
), /* @__PURE__ */ React28.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), /* @__PURE__ */ React28.createElement(
|
|
13499
|
+
)), /* @__PURE__ */ React28.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), showIndentUp && /* @__PURE__ */ React28.createElement(Tooltip, { text: getIndentUpTooltip() }, /* @__PURE__ */ React28.createElement(
|
|
13476
13500
|
"button",
|
|
13477
13501
|
{
|
|
13478
13502
|
onClick: () => onIndent(item.id),
|
|
13479
|
-
|
|
13480
|
-
className: `p-1.5 rounded transition-colors ${!canIndent ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`,
|
|
13481
|
-
title: "Aninhar no grupo acima"
|
|
13503
|
+
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13482
13504
|
},
|
|
13483
13505
|
/* @__PURE__ */ React28.createElement(FiArrowRight2, { size: 14 })
|
|
13484
|
-
), /* @__PURE__ */ React28.createElement(
|
|
13506
|
+
)), showIndentDown && /* @__PURE__ */ React28.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ React28.createElement(
|
|
13485
13507
|
"button",
|
|
13486
13508
|
{
|
|
13487
|
-
onClick: () =>
|
|
13488
|
-
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13489
|
-
title: "Desaninhar"
|
|
13509
|
+
onClick: () => onIndentDown(item.id),
|
|
13510
|
+
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13490
13511
|
},
|
|
13491
13512
|
/* @__PURE__ */ React28.createElement(FiArrowLeft3, { size: 14 })
|
|
13492
|
-
), /* @__PURE__ */ React28.createElement(
|
|
13513
|
+
)), (isNested || !showIndentUp && !showIndentDown) && /* @__PURE__ */ React28.createElement(Tooltip, { text: "Desaninhar / Recuar n\xEDvel" }, /* @__PURE__ */ React28.createElement(
|
|
13514
|
+
"button",
|
|
13515
|
+
{
|
|
13516
|
+
onClick: () => onOutdent(item.id),
|
|
13517
|
+
disabled: !onOutdent,
|
|
13518
|
+
className: `p-1.5 rounded transition-colors ${!onOutdent ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`
|
|
13519
|
+
},
|
|
13520
|
+
/* @__PURE__ */ React28.createElement(FiCornerUpRight4, { size: 14 })
|
|
13521
|
+
)), /* @__PURE__ */ React28.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), /* @__PURE__ */ React28.createElement(Tooltip, { text: "Remover Grupo" }, /* @__PURE__ */ React28.createElement(
|
|
13493
13522
|
"button",
|
|
13494
13523
|
{
|
|
13495
13524
|
onClick: () => onDelete(item.id),
|
|
13496
|
-
className: "p-1.5 text-slate-600 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
13497
|
-
title: "Remover Grupo"
|
|
13525
|
+
className: "p-1.5 text-slate-600 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
13498
13526
|
},
|
|
13499
13527
|
/* @__PURE__ */ React28.createElement(FiTrash23, { size: 14 })
|
|
13500
|
-
)))), item.children && item.children.length > 0 && /* @__PURE__ */ React28.createElement("div", { className: "ml-2" }, item.children.map((child, idx) => /* @__PURE__ */ React28.createElement(
|
|
13528
|
+
))))), item.children && item.children.length > 0 && /* @__PURE__ */ React28.createElement("div", { className: "ml-2" }, item.children.map((child, idx) => /* @__PURE__ */ React28.createElement(
|
|
13501
13529
|
BoardItem,
|
|
13502
13530
|
{
|
|
13503
13531
|
key: child.id,
|
|
13504
13532
|
index: idx,
|
|
13533
|
+
prevItem: item.children[idx - 1],
|
|
13534
|
+
nextItem: item.children[idx + 1],
|
|
13505
13535
|
item: child,
|
|
13506
13536
|
onUpdate,
|
|
13507
13537
|
onDelete,
|
|
13508
13538
|
onAddSubgroup,
|
|
13509
13539
|
onIndent,
|
|
13540
|
+
onIndentDown,
|
|
13510
13541
|
onOutdent,
|
|
13511
13542
|
onMoveUp,
|
|
13512
13543
|
onMoveDown,
|
|
@@ -13723,6 +13754,20 @@ function AncestryBoard({
|
|
|
13723
13754
|
setGroups(next);
|
|
13724
13755
|
triggerInstantSave(next);
|
|
13725
13756
|
};
|
|
13757
|
+
const handleIndentDown = (id) => {
|
|
13758
|
+
const next = JSON.parse(JSON.stringify(groups));
|
|
13759
|
+
const found = findGroupAndParent(next, id);
|
|
13760
|
+
if (!found || found.index === found.siblings.length - 1) return;
|
|
13761
|
+
const { group, siblings, index } = found;
|
|
13762
|
+
const targetParent = siblings[index + 1];
|
|
13763
|
+
if (group.type === "folder" && targetParent.type === "group") {
|
|
13764
|
+
return;
|
|
13765
|
+
}
|
|
13766
|
+
siblings.splice(index, 1);
|
|
13767
|
+
targetParent.children.push(group);
|
|
13768
|
+
setGroups(next);
|
|
13769
|
+
triggerInstantSave(next);
|
|
13770
|
+
};
|
|
13726
13771
|
const handleOutdent = (id) => {
|
|
13727
13772
|
const next = JSON.parse(JSON.stringify(groups));
|
|
13728
13773
|
const found = findGroupAndParent(next, id);
|
|
@@ -13828,11 +13873,14 @@ function AncestryBoard({
|
|
|
13828
13873
|
{
|
|
13829
13874
|
key: item.id,
|
|
13830
13875
|
index,
|
|
13876
|
+
prevItem: currentGroups[index - 1],
|
|
13877
|
+
nextItem: currentGroups[index + 1],
|
|
13831
13878
|
item,
|
|
13832
13879
|
onUpdate: handleUpdateItem,
|
|
13833
13880
|
onDelete: handleDeleteItem,
|
|
13834
13881
|
onAddSubgroup: handleAddSubgroup,
|
|
13835
13882
|
onIndent: handleIndent,
|
|
13883
|
+
onIndentDown: handleIndentDown,
|
|
13836
13884
|
onOutdent: handleOutdent,
|
|
13837
13885
|
onMoveUp: handleMoveUp,
|
|
13838
13886
|
onMoveDown: handleMoveDown,
|
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.
|
|
3
|
+
"version": "1.2.6-dev.20",
|
|
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",
|