@lv-x-software-house/x_view 1.2.5-dev.39 → 1.2.5-dev.40
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 +199 -10
- package/dist/index.mjs +205 -16
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2884,13 +2884,18 @@ var userActionHandlers = {
|
|
|
2884
2884
|
const nextDateObj = calculateNextRecurrenceDate(nodeToSave.recurrence_config);
|
|
2885
2885
|
if (nextDateObj) {
|
|
2886
2886
|
const currentCounter = sceneDataRef.current.quest_counter || 1;
|
|
2887
|
+
const usedCounter = currentCounter;
|
|
2887
2888
|
const nextCounter = currentCounter + 1;
|
|
2888
2889
|
sceneDataRef.current.quest_counter = nextCounter;
|
|
2889
2890
|
let nextName = nodeToSave.raw_title || nodeToSave.name;
|
|
2890
2891
|
const prefixParts = (nodeToSave.name || "").split(" - \xBB ");
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2892
|
+
const questPrefix = prefixParts.length > 1 ? prefixParts[0] : "";
|
|
2893
|
+
if (questPrefix) {
|
|
2894
|
+
const baseParts = questPrefix.split(" - ");
|
|
2895
|
+
const prefixBase = baseParts[0];
|
|
2896
|
+
nextName = `${prefixBase} - ${usedCounter} - \xBB ${nodeToSave.raw_title || prefixParts[1]}`;
|
|
2897
|
+
} else {
|
|
2898
|
+
nextName = `${usedCounter} - \xBB ${nodeToSave.raw_title || nodeToSave.name}`;
|
|
2894
2899
|
}
|
|
2895
2900
|
const nextRecurrenceConfig = { ...nodeToSave.recurrence_config };
|
|
2896
2901
|
if (nextRecurrenceConfig.type === "custom") {
|
|
@@ -10254,7 +10259,9 @@ function QuestDetailsPanel({
|
|
|
10254
10259
|
types: types.includes("quest") ? types : [...types, "quest"],
|
|
10255
10260
|
intensity: intensity || 0,
|
|
10256
10261
|
useImageAsTexture: node.useImageAsTexture || false,
|
|
10257
|
-
textureImageUrl: node.textureImageUrl || null
|
|
10262
|
+
textureImageUrl: node.textureImageUrl || null,
|
|
10263
|
+
Date: questDate,
|
|
10264
|
+
recurrence_config: recurrenceConfig
|
|
10258
10265
|
};
|
|
10259
10266
|
try {
|
|
10260
10267
|
await onSave(nodeToSave, false);
|
|
@@ -10300,7 +10307,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10300
10307
|
try {
|
|
10301
10308
|
const nodeToSave = {
|
|
10302
10309
|
...node,
|
|
10303
|
-
timeline: updatedTimeline
|
|
10310
|
+
timeline: updatedTimeline,
|
|
10311
|
+
Date: questDate,
|
|
10312
|
+
recurrence_config: recurrenceConfig
|
|
10304
10313
|
};
|
|
10305
10314
|
await onSave(nodeToSave, true);
|
|
10306
10315
|
setTimeline(updatedTimeline);
|
|
@@ -10362,7 +10371,14 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10362
10371
|
const newTimeline = [...timeline, newEvent];
|
|
10363
10372
|
setTimeline(newTimeline);
|
|
10364
10373
|
onColorChange == null ? void 0 : onColorChange(node.id, newColor);
|
|
10365
|
-
onDataUpdate == null ? void 0 : onDataUpdate({
|
|
10374
|
+
onDataUpdate == null ? void 0 : onDataUpdate({
|
|
10375
|
+
...node,
|
|
10376
|
+
status: newStatus,
|
|
10377
|
+
color: newColor,
|
|
10378
|
+
timeline: newTimeline,
|
|
10379
|
+
Date: questDate,
|
|
10380
|
+
recurrence_config: recurrenceConfig
|
|
10381
|
+
});
|
|
10366
10382
|
setHasUnsavedChanges(true);
|
|
10367
10383
|
};
|
|
10368
10384
|
const handleAddType = (newType) => {
|
|
@@ -10536,7 +10552,110 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10536
10552
|
readOnly: !canEdit,
|
|
10537
10553
|
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"}`
|
|
10538
10554
|
}
|
|
10539
|
-
), /* @__PURE__ */ import_react20.default.createElement("div", { className: "pt-1 flex items-center gap-1.5" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ import_react20.default.createElement("p", { className: "text-xs text-indigo-300 font-medium truncate", title: standardizedName }, standardizedName))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5
|
|
10555
|
+
), /* @__PURE__ */ import_react20.default.createElement("div", { className: "pt-1 flex items-center gap-1.5" }, /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ import_react20.default.createElement("p", { className: "text-xs text-indigo-300 font-medium truncate", title: standardizedName }, standardizedName))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Prazo / Data"), canEdit && !questDate && /* @__PURE__ */ import_react20.default.createElement(
|
|
10556
|
+
"button",
|
|
10557
|
+
{
|
|
10558
|
+
type: "button",
|
|
10559
|
+
onClick: () => {
|
|
10560
|
+
setQuestDate({ type: "Data", value: "" });
|
|
10561
|
+
setHasUnsavedChanges(true);
|
|
10562
|
+
},
|
|
10563
|
+
className: "text-[10px] text-indigo-400 hover:text-indigo-300 font-bold uppercase transition-colors"
|
|
10564
|
+
},
|
|
10565
|
+
"+ Adicionar"
|
|
10566
|
+
)), questDate && /* @__PURE__ */ import_react20.default.createElement("div", { className: "p-3 bg-slate-900/60 rounded-xl border border-white/10 space-y-3 relative group" }, canEdit && /* @__PURE__ */ import_react20.default.createElement(
|
|
10567
|
+
"button",
|
|
10568
|
+
{
|
|
10569
|
+
type: "button",
|
|
10570
|
+
onClick: () => {
|
|
10571
|
+
setQuestDate(null);
|
|
10572
|
+
setHasUnsavedChanges(true);
|
|
10573
|
+
},
|
|
10574
|
+
className: "absolute top-2 right-2 w-6 h-6 grid place-items-center rounded-full bg-red-500/10 text-red-400 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
10575
|
+
title: "Remover data"
|
|
10576
|
+
},
|
|
10577
|
+
/* @__PURE__ */ import_react20.default.createElement(import_fi18.FiX, { size: 12 })
|
|
10578
|
+
), /* @__PURE__ */ import_react20.default.createElement("div", { className: `flex items-center gap-1 rounded-lg bg-slate-800/50 p-1 ${!canEdit ? "opacity-70 pointer-events-none" : ""}` }, ["Data", "Ano", "Date Interval"].map((t) => /* @__PURE__ */ import_react20.default.createElement(
|
|
10579
|
+
"button",
|
|
10580
|
+
{
|
|
10581
|
+
key: t,
|
|
10582
|
+
type: "button",
|
|
10583
|
+
onClick: () => {
|
|
10584
|
+
const newDate = { type: t };
|
|
10585
|
+
if (t === "Date Interval") {
|
|
10586
|
+
newDate.start = "";
|
|
10587
|
+
newDate.end = "";
|
|
10588
|
+
} else {
|
|
10589
|
+
newDate.value = "";
|
|
10590
|
+
}
|
|
10591
|
+
setQuestDate(newDate);
|
|
10592
|
+
setHasUnsavedChanges(true);
|
|
10593
|
+
},
|
|
10594
|
+
className: `flex-1 text-[10px] px-2 py-1.5 rounded-md transition-colors ${questDate.type === t ? "bg-indigo-600 text-white font-semibold shadow" : "text-slate-400 hover:bg-slate-700/50"}`
|
|
10595
|
+
},
|
|
10596
|
+
t === "Date Interval" ? "Intervalo" : t
|
|
10597
|
+
))), questDate.type === "Data" && /* @__PURE__ */ import_react20.default.createElement(
|
|
10598
|
+
"input",
|
|
10599
|
+
{
|
|
10600
|
+
type: "text",
|
|
10601
|
+
readOnly: !canEdit,
|
|
10602
|
+
placeholder: "DD/MM/AAAA",
|
|
10603
|
+
value: questDate.value || "",
|
|
10604
|
+
onChange: (e) => {
|
|
10605
|
+
const rawValue = e.target.value;
|
|
10606
|
+
const digits = rawValue.replace(/\D/g, "");
|
|
10607
|
+
const len = digits.length;
|
|
10608
|
+
let formattedValue = digits;
|
|
10609
|
+
if (len > 2 && len <= 4)
|
|
10610
|
+
formattedValue = `${digits.slice(0, 2)}/${digits.slice(2)}`;
|
|
10611
|
+
else if (len > 4)
|
|
10612
|
+
formattedValue = `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4, 8)}`;
|
|
10613
|
+
setQuestDate({ ...questDate, value: formattedValue });
|
|
10614
|
+
setHasUnsavedChanges(true);
|
|
10615
|
+
},
|
|
10616
|
+
maxLength: "10",
|
|
10617
|
+
className: `w-full bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-400/60" : "text-slate-400 cursor-default"}`
|
|
10618
|
+
}
|
|
10619
|
+
), questDate.type === "Ano" && /* @__PURE__ */ import_react20.default.createElement(
|
|
10620
|
+
"input",
|
|
10621
|
+
{
|
|
10622
|
+
type: "number",
|
|
10623
|
+
readOnly: !canEdit,
|
|
10624
|
+
placeholder: "AAAA",
|
|
10625
|
+
value: questDate.value || "",
|
|
10626
|
+
onChange: (e) => {
|
|
10627
|
+
setQuestDate({ ...questDate, value: e.target.value });
|
|
10628
|
+
setHasUnsavedChanges(true);
|
|
10629
|
+
},
|
|
10630
|
+
className: `w-full bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none ${canEdit ? "focus:ring-1 focus:ring-indigo-400/60" : "text-slate-400 cursor-default"}`
|
|
10631
|
+
}
|
|
10632
|
+
), questDate.type === "Date Interval" && /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(
|
|
10633
|
+
"input",
|
|
10634
|
+
{
|
|
10635
|
+
type: "number",
|
|
10636
|
+
readOnly: !canEdit,
|
|
10637
|
+
placeholder: "In\xEDcio (Ano)",
|
|
10638
|
+
value: questDate.start || "",
|
|
10639
|
+
onChange: (e) => {
|
|
10640
|
+
setQuestDate({ ...questDate, start: e.target.value });
|
|
10641
|
+
setHasUnsavedChanges(true);
|
|
10642
|
+
},
|
|
10643
|
+
className: `flex-1 bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none ${canEdit ? "focus:ring-1 focus:ring-indigo-400/60" : "text-slate-400 cursor-default"}`
|
|
10644
|
+
}
|
|
10645
|
+
), /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-slate-500" }, "-"), /* @__PURE__ */ import_react20.default.createElement(
|
|
10646
|
+
"input",
|
|
10647
|
+
{
|
|
10648
|
+
type: "number",
|
|
10649
|
+
readOnly: !canEdit,
|
|
10650
|
+
placeholder: "Fim (Ano)",
|
|
10651
|
+
value: questDate.end || "",
|
|
10652
|
+
onChange: (e) => {
|
|
10653
|
+
setQuestDate({ ...questDate, end: e.target.value });
|
|
10654
|
+
setHasUnsavedChanges(true);
|
|
10655
|
+
},
|
|
10656
|
+
className: `flex-1 bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none ${canEdit ? "focus:ring-1 focus:ring-indigo-400/60" : "text-slate-400 cursor-default"}`
|
|
10657
|
+
}
|
|
10658
|
+
)))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-xs text-slate-300" }, "Status da Quest"), /* @__PURE__ */ import_react20.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react20.default.createElement(
|
|
10540
10659
|
"button",
|
|
10541
10660
|
{
|
|
10542
10661
|
type: "button",
|
|
@@ -10634,7 +10753,77 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10634
10753
|
)), viewMembers.filter((member) => {
|
|
10635
10754
|
const search = assigneeSearchQuery.toLowerCase();
|
|
10636
10755
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
10637
|
-
}).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(
|
|
10756
|
+
}).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-4 border-t border-white/5 mt-2" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center justify-between mb-3" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiRepeat, { className: `w-3.5 h-3.5 ${recurrenceConfig.enabled ? "text-indigo-400" : "text-slate-500"}` }), /* @__PURE__ */ import_react20.default.createElement("span", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Recorr\xEAncia")), /* @__PURE__ */ import_react20.default.createElement(
|
|
10757
|
+
"button",
|
|
10758
|
+
{
|
|
10759
|
+
type: "button",
|
|
10760
|
+
disabled: !canEdit,
|
|
10761
|
+
onClick: () => {
|
|
10762
|
+
setRecurrenceConfig((prev) => ({ ...prev, enabled: !prev.enabled }));
|
|
10763
|
+
setHasUnsavedChanges(true);
|
|
10764
|
+
},
|
|
10765
|
+
className: `relative inline-flex h-5 w-9 items-center rounded-full transition-colors focus:outline-none ${recurrenceConfig.enabled ? "bg-indigo-600" : "bg-slate-700"} ${canEdit ? "cursor-pointer" : "cursor-default opacity-60"}`
|
|
10766
|
+
},
|
|
10767
|
+
/* @__PURE__ */ import_react20.default.createElement("span", { className: `inline-block h-3.5 w-3.5 transform rounded-full bg-white transition-transform ${recurrenceConfig.enabled ? "translate-x-4.5" : "translate-x-1"}` })
|
|
10768
|
+
)), recurrenceConfig.enabled && /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-4 p-3 rounded-xl bg-white/5 border border-white/5 animate-in fade-in slide-in-from-top-1" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "grid grid-cols-2 gap-3" }, /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Tipo"), /* @__PURE__ */ import_react20.default.createElement(
|
|
10769
|
+
"select",
|
|
10770
|
+
{
|
|
10771
|
+
disabled: !canEdit,
|
|
10772
|
+
value: recurrenceConfig.type,
|
|
10773
|
+
onChange: (e) => {
|
|
10774
|
+
setRecurrenceConfig((prev) => ({ ...prev, type: e.target.value }));
|
|
10775
|
+
setHasUnsavedChanges(true);
|
|
10776
|
+
},
|
|
10777
|
+
className: `w-full bg-slate-900/50 border border-white/10 rounded-lg px-2 py-1.5 text-xs text-slate-200 focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-500/50" : "opacity-70"}`
|
|
10778
|
+
},
|
|
10779
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: "daily" }, "Di\xE1ria"),
|
|
10780
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: "weekly" }, "Semanal"),
|
|
10781
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: "custom" }, "Data Espec\xEDfica")
|
|
10782
|
+
)), recurrenceConfig.type === "weekly" && /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Dia da Semana"), /* @__PURE__ */ import_react20.default.createElement(
|
|
10783
|
+
"select",
|
|
10784
|
+
{
|
|
10785
|
+
disabled: !canEdit,
|
|
10786
|
+
value: recurrenceConfig.day_of_week,
|
|
10787
|
+
onChange: (e) => {
|
|
10788
|
+
setRecurrenceConfig((prev) => ({ ...prev, day_of_week: parseInt(e.target.value, 10) }));
|
|
10789
|
+
setHasUnsavedChanges(true);
|
|
10790
|
+
},
|
|
10791
|
+
className: `w-full bg-slate-900/50 border border-white/10 rounded-lg px-2 py-1.5 text-xs text-slate-200 focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-500/50" : "opacity-70"}`
|
|
10792
|
+
},
|
|
10793
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: 1 }, "Segunda-feira"),
|
|
10794
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: 2 }, "Ter\xE7a-feira"),
|
|
10795
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: 3 }, "Quarta-feira"),
|
|
10796
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: 4 }, "Quinta-feira"),
|
|
10797
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: 5 }, "Sexta-feira"),
|
|
10798
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: 6 }, "S\xE1bado"),
|
|
10799
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: 0 }, "Domingo")
|
|
10800
|
+
)), recurrenceConfig.type === "custom" && /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Pr\xF3xima Data"), /* @__PURE__ */ import_react20.default.createElement(
|
|
10801
|
+
"input",
|
|
10802
|
+
{
|
|
10803
|
+
readOnly: !canEdit,
|
|
10804
|
+
type: "text",
|
|
10805
|
+
placeholder: "DD/MM/AAAA",
|
|
10806
|
+
value: recurrenceConfig.custom_date,
|
|
10807
|
+
onChange: (e) => {
|
|
10808
|
+
setRecurrenceConfig((prev) => ({ ...prev, custom_date: e.target.value }));
|
|
10809
|
+
setHasUnsavedChanges(true);
|
|
10810
|
+
},
|
|
10811
|
+
className: `w-full bg-slate-900/50 border border-white/10 rounded-lg px-2 py-1.5 text-xs text-slate-200 focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-500/50" : "text-slate-400"}`
|
|
10812
|
+
}
|
|
10813
|
+
))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ import_react20.default.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Pr\xF3ximo Respons\xE1vel"), /* @__PURE__ */ import_react20.default.createElement("div", { className: "relative" }, /* @__PURE__ */ import_react20.default.createElement(
|
|
10814
|
+
"select",
|
|
10815
|
+
{
|
|
10816
|
+
disabled: !canEdit,
|
|
10817
|
+
value: recurrenceConfig.next_assignee_id,
|
|
10818
|
+
onChange: (e) => {
|
|
10819
|
+
setRecurrenceConfig((prev) => ({ ...prev, next_assignee_id: e.target.value }));
|
|
10820
|
+
setHasUnsavedChanges(true);
|
|
10821
|
+
},
|
|
10822
|
+
className: `w-full bg-slate-900/50 border border-white/10 rounded-lg pl-8 pr-2 py-1.5 text-xs text-slate-200 appearance-none focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-500/50" : "opacity-70"}`
|
|
10823
|
+
},
|
|
10824
|
+
/* @__PURE__ */ import_react20.default.createElement("option", { value: "" }, "Sem respons\xE1vel"),
|
|
10825
|
+
viewMembers.map((member) => /* @__PURE__ */ import_react20.default.createElement("option", { key: member.id, value: member.id }, member.name || member.email))
|
|
10826
|
+
), /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiUser, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-slate-500" }), /* @__PURE__ */ import_react20.default.createElement(import_fi18.FiChevronDown, { className: "absolute right-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-slate-500 pointer-events-none" }))))), /* @__PURE__ */ import_react20.default.createElement("div", { className: "pt-2" }, /* @__PURE__ */ import_react20.default.createElement(
|
|
10638
10827
|
QuestReviewStackEditor,
|
|
10639
10828
|
{
|
|
10640
10829
|
reviewStack,
|
|
@@ -10746,7 +10935,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10746
10935
|
onChange: (e) => updateLinkInNote(link.id, "value", e.target.value),
|
|
10747
10936
|
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"
|
|
10748
10937
|
}
|
|
10749
|
-
), /* @__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(
|
|
10938
|
+
), /* @__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(import_fi18.FiImage, { size: 10, className: "text-slate-600" }), /* @__PURE__ */ import_react20.default.createElement(
|
|
10750
10939
|
"input",
|
|
10751
10940
|
{
|
|
10752
10941
|
type: "text",
|
|
@@ -13388,7 +13577,7 @@ function XViewScene({
|
|
|
13388
13577
|
if (!timeInfo.isUndated && timeInfo.label) {
|
|
13389
13578
|
const dateSprite = createTextSprite(timeInfo.label, 36);
|
|
13390
13579
|
dateSprite.name = "questDateLabel";
|
|
13391
|
-
dateSprite.position.set(0,
|
|
13580
|
+
dateSprite.position.set(0, -5.5, 0);
|
|
13392
13581
|
mesh.add(dateSprite);
|
|
13393
13582
|
}
|
|
13394
13583
|
if (mesh.userData.labelObject) {
|
package/dist/index.mjs
CHANGED
|
@@ -2845,13 +2845,18 @@ var userActionHandlers = {
|
|
|
2845
2845
|
const nextDateObj = calculateNextRecurrenceDate(nodeToSave.recurrence_config);
|
|
2846
2846
|
if (nextDateObj) {
|
|
2847
2847
|
const currentCounter = sceneDataRef.current.quest_counter || 1;
|
|
2848
|
+
const usedCounter = currentCounter;
|
|
2848
2849
|
const nextCounter = currentCounter + 1;
|
|
2849
2850
|
sceneDataRef.current.quest_counter = nextCounter;
|
|
2850
2851
|
let nextName = nodeToSave.raw_title || nodeToSave.name;
|
|
2851
2852
|
const prefixParts = (nodeToSave.name || "").split(" - \xBB ");
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2853
|
+
const questPrefix = prefixParts.length > 1 ? prefixParts[0] : "";
|
|
2854
|
+
if (questPrefix) {
|
|
2855
|
+
const baseParts = questPrefix.split(" - ");
|
|
2856
|
+
const prefixBase = baseParts[0];
|
|
2857
|
+
nextName = `${prefixBase} - ${usedCounter} - \xBB ${nodeToSave.raw_title || prefixParts[1]}`;
|
|
2858
|
+
} else {
|
|
2859
|
+
nextName = `${usedCounter} - \xBB ${nodeToSave.raw_title || nodeToSave.name}`;
|
|
2855
2860
|
}
|
|
2856
2861
|
const nextRecurrenceConfig = { ...nodeToSave.recurrence_config };
|
|
2857
2862
|
if (nextRecurrenceConfig.type === "custom") {
|
|
@@ -4158,7 +4163,7 @@ import { FiPlus, FiEdit2 as FiEdit22, FiBookOpen } from "react-icons/fi";
|
|
|
4158
4163
|
|
|
4159
4164
|
// src/components/DescriptionEditModal.jsx
|
|
4160
4165
|
import React5, { useState as useState6, useEffect as useEffect5, useRef as useRef5, useMemo as useMemo4 } from "react";
|
|
4161
|
-
import { FiType, FiList, FiCode, FiLink as FiLink2, FiAtSign, FiSearch as FiSearch2, FiHexagon as FiHexagon2, FiGlobe, FiImage
|
|
4166
|
+
import { FiType, FiList, FiCode, FiLink as FiLink2, FiAtSign, FiSearch as FiSearch2, FiHexagon as FiHexagon2, FiGlobe, FiImage, FiCheckSquare } from "react-icons/fi";
|
|
4162
4167
|
|
|
4163
4168
|
// src/components/SectionImportModal.jsx
|
|
4164
4169
|
import React4, { useState as useState5, useMemo as useMemo3, useRef as useRef4, useEffect as useEffect4 } from "react";
|
|
@@ -4905,7 +4910,7 @@ ${space}${bullet} `);
|
|
|
4905
4910
|
className: "flex items-center gap-1 px-3 py-1.5 rounded bg-indigo-600/30 hover:bg-indigo-600/50 border border-indigo-500/30 text-indigo-200 text-xs font-medium transition-colors whitespace-nowrap",
|
|
4906
4911
|
title: "Inserir Imagem (Propriedade ou URL)"
|
|
4907
4912
|
},
|
|
4908
|
-
/* @__PURE__ */ React5.createElement(
|
|
4913
|
+
/* @__PURE__ */ React5.createElement(FiImage, { size: 12 }),
|
|
4909
4914
|
" Imagem"
|
|
4910
4915
|
), /* @__PURE__ */ React5.createElement(
|
|
4911
4916
|
"button",
|
|
@@ -5044,7 +5049,7 @@ ${space}${bullet} `);
|
|
|
5044
5049
|
|
|
5045
5050
|
// src/components/DescriptionDisplay.jsx
|
|
5046
5051
|
import React6, { useMemo as useMemo5, useState as useState7, useEffect as useEffect6, useRef as useRef6 } from "react";
|
|
5047
|
-
import { FiCopy as FiCopy2, FiCheck as FiCheck3, FiChevronDown as FiChevronDown3, FiChevronRight as FiChevronRight2, FiTerminal as FiTerminal2, FiCornerDownRight, FiExternalLink as FiExternalLink2, FiImage as
|
|
5052
|
+
import { FiCopy as FiCopy2, FiCheck as FiCheck3, FiChevronDown as FiChevronDown3, FiChevronRight as FiChevronRight2, FiTerminal as FiTerminal2, FiCornerDownRight, FiExternalLink as FiExternalLink2, FiImage as FiImage2, FiSave } from "react-icons/fi";
|
|
5048
5053
|
var CodeBlock2 = ({ content, isActive, onClick }) => {
|
|
5049
5054
|
const [isExpanded, setIsExpanded] = useState7(false);
|
|
5050
5055
|
const [copied, setCopied] = useState7(false);
|
|
@@ -5141,7 +5146,7 @@ var renderTextWithImages = (text, onImageClick) => {
|
|
|
5141
5146
|
},
|
|
5142
5147
|
className: "inline-flex items-center gap-1 text-emerald-400 hover:text-emerald-300 hover:underline decoration-emerald-500/50 underline-offset-2 transition-colors cursor-pointer align-baseline mx-0.5"
|
|
5143
5148
|
},
|
|
5144
|
-
/* @__PURE__ */ React6.createElement(
|
|
5149
|
+
/* @__PURE__ */ React6.createElement(FiImage2, { size: 11 }),
|
|
5145
5150
|
/* @__PURE__ */ React6.createElement("span", null, name)
|
|
5146
5151
|
);
|
|
5147
5152
|
}
|
|
@@ -9494,7 +9499,7 @@ function InSceneQuestForm({
|
|
|
9494
9499
|
|
|
9495
9500
|
// src/components/NodeDetailsPanel.jsx
|
|
9496
9501
|
import React17, { useState as useState18, useEffect as useEffect15, useRef as useRef13 } from "react";
|
|
9497
|
-
import { FiPlus as FiPlus7, FiMaximize2 as FiMaximize23, FiX as FiX6, FiCheck as FiCheck10, FiImage as
|
|
9502
|
+
import { FiPlus as FiPlus7, FiMaximize2 as FiMaximize23, FiX as FiX6, FiCheck as FiCheck10, FiImage as FiImage3, FiEdit2 as FiEdit27, FiLoader as FiLoader2, FiBookOpen as FiBookOpen3, FiSun as FiSun2, FiLink as FiLink5, FiDatabase } from "react-icons/fi";
|
|
9498
9503
|
function NodeDetailsPanel({
|
|
9499
9504
|
node,
|
|
9500
9505
|
onClose,
|
|
@@ -10008,7 +10013,7 @@ function NodeDetailsPanel({
|
|
|
10008
10013
|
|
|
10009
10014
|
// src/components/QuestDetailsPanel.jsx
|
|
10010
10015
|
import React19, { useState as useState19, useEffect as useEffect16, useRef as useRef14 } from "react";
|
|
10011
|
-
import { FiPlus as FiPlus8, FiX as FiX7, FiCheck as FiCheck11, FiEdit2 as FiEdit28, FiLoader as FiLoader3, FiBookOpen as FiBookOpen4, FiLink as FiLink7, FiTarget as FiTarget3, FiChevronDown as FiChevronDown7, FiUser as FiUser3, FiSearch as FiSearch7, FiRepeat as FiRepeat2 } from "react-icons/fi";
|
|
10016
|
+
import { FiPlus as FiPlus8, FiX as FiX7, FiCheck as FiCheck11, FiEdit2 as FiEdit28, FiLoader as FiLoader3, FiBookOpen as FiBookOpen4, FiLink as FiLink7, FiTarget as FiTarget3, FiChevronDown as FiChevronDown7, FiUser as FiUser3, FiSearch as FiSearch7, FiRepeat as FiRepeat2, FiCalendar as FiCalendar2, FiImage as FiImage4 } from "react-icons/fi";
|
|
10012
10017
|
|
|
10013
10018
|
// src/components/QuestTimeline.jsx
|
|
10014
10019
|
import React18 from "react";
|
|
@@ -10285,7 +10290,9 @@ function QuestDetailsPanel({
|
|
|
10285
10290
|
types: types.includes("quest") ? types : [...types, "quest"],
|
|
10286
10291
|
intensity: intensity || 0,
|
|
10287
10292
|
useImageAsTexture: node.useImageAsTexture || false,
|
|
10288
|
-
textureImageUrl: node.textureImageUrl || null
|
|
10293
|
+
textureImageUrl: node.textureImageUrl || null,
|
|
10294
|
+
Date: questDate,
|
|
10295
|
+
recurrence_config: recurrenceConfig
|
|
10289
10296
|
};
|
|
10290
10297
|
try {
|
|
10291
10298
|
await onSave(nodeToSave, false);
|
|
@@ -10331,7 +10338,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10331
10338
|
try {
|
|
10332
10339
|
const nodeToSave = {
|
|
10333
10340
|
...node,
|
|
10334
|
-
timeline: updatedTimeline
|
|
10341
|
+
timeline: updatedTimeline,
|
|
10342
|
+
Date: questDate,
|
|
10343
|
+
recurrence_config: recurrenceConfig
|
|
10335
10344
|
};
|
|
10336
10345
|
await onSave(nodeToSave, true);
|
|
10337
10346
|
setTimeline(updatedTimeline);
|
|
@@ -10393,7 +10402,14 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10393
10402
|
const newTimeline = [...timeline, newEvent];
|
|
10394
10403
|
setTimeline(newTimeline);
|
|
10395
10404
|
onColorChange == null ? void 0 : onColorChange(node.id, newColor);
|
|
10396
|
-
onDataUpdate == null ? void 0 : onDataUpdate({
|
|
10405
|
+
onDataUpdate == null ? void 0 : onDataUpdate({
|
|
10406
|
+
...node,
|
|
10407
|
+
status: newStatus,
|
|
10408
|
+
color: newColor,
|
|
10409
|
+
timeline: newTimeline,
|
|
10410
|
+
Date: questDate,
|
|
10411
|
+
recurrence_config: recurrenceConfig
|
|
10412
|
+
});
|
|
10397
10413
|
setHasUnsavedChanges(true);
|
|
10398
10414
|
};
|
|
10399
10415
|
const handleAddType = (newType) => {
|
|
@@ -10567,7 +10583,110 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10567
10583
|
readOnly: !canEdit,
|
|
10568
10584
|
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"}`
|
|
10569
10585
|
}
|
|
10570
|
-
), /* @__PURE__ */ React19.createElement("div", { className: "pt-1 flex items-center gap-1.5" }, /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ React19.createElement("p", { className: "text-xs text-indigo-300 font-medium truncate", title: standardizedName }, standardizedName))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5
|
|
10586
|
+
), /* @__PURE__ */ React19.createElement("div", { className: "pt-1 flex items-center gap-1.5" }, /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ React19.createElement("p", { className: "text-xs text-indigo-300 font-medium truncate", title: standardizedName }, standardizedName))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React19.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Prazo / Data"), canEdit && !questDate && /* @__PURE__ */ React19.createElement(
|
|
10587
|
+
"button",
|
|
10588
|
+
{
|
|
10589
|
+
type: "button",
|
|
10590
|
+
onClick: () => {
|
|
10591
|
+
setQuestDate({ type: "Data", value: "" });
|
|
10592
|
+
setHasUnsavedChanges(true);
|
|
10593
|
+
},
|
|
10594
|
+
className: "text-[10px] text-indigo-400 hover:text-indigo-300 font-bold uppercase transition-colors"
|
|
10595
|
+
},
|
|
10596
|
+
"+ Adicionar"
|
|
10597
|
+
)), questDate && /* @__PURE__ */ React19.createElement("div", { className: "p-3 bg-slate-900/60 rounded-xl border border-white/10 space-y-3 relative group" }, canEdit && /* @__PURE__ */ React19.createElement(
|
|
10598
|
+
"button",
|
|
10599
|
+
{
|
|
10600
|
+
type: "button",
|
|
10601
|
+
onClick: () => {
|
|
10602
|
+
setQuestDate(null);
|
|
10603
|
+
setHasUnsavedChanges(true);
|
|
10604
|
+
},
|
|
10605
|
+
className: "absolute top-2 right-2 w-6 h-6 grid place-items-center rounded-full bg-red-500/10 text-red-400 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
10606
|
+
title: "Remover data"
|
|
10607
|
+
},
|
|
10608
|
+
/* @__PURE__ */ React19.createElement(FiX7, { size: 12 })
|
|
10609
|
+
), /* @__PURE__ */ React19.createElement("div", { className: `flex items-center gap-1 rounded-lg bg-slate-800/50 p-1 ${!canEdit ? "opacity-70 pointer-events-none" : ""}` }, ["Data", "Ano", "Date Interval"].map((t) => /* @__PURE__ */ React19.createElement(
|
|
10610
|
+
"button",
|
|
10611
|
+
{
|
|
10612
|
+
key: t,
|
|
10613
|
+
type: "button",
|
|
10614
|
+
onClick: () => {
|
|
10615
|
+
const newDate = { type: t };
|
|
10616
|
+
if (t === "Date Interval") {
|
|
10617
|
+
newDate.start = "";
|
|
10618
|
+
newDate.end = "";
|
|
10619
|
+
} else {
|
|
10620
|
+
newDate.value = "";
|
|
10621
|
+
}
|
|
10622
|
+
setQuestDate(newDate);
|
|
10623
|
+
setHasUnsavedChanges(true);
|
|
10624
|
+
},
|
|
10625
|
+
className: `flex-1 text-[10px] px-2 py-1.5 rounded-md transition-colors ${questDate.type === t ? "bg-indigo-600 text-white font-semibold shadow" : "text-slate-400 hover:bg-slate-700/50"}`
|
|
10626
|
+
},
|
|
10627
|
+
t === "Date Interval" ? "Intervalo" : t
|
|
10628
|
+
))), questDate.type === "Data" && /* @__PURE__ */ React19.createElement(
|
|
10629
|
+
"input",
|
|
10630
|
+
{
|
|
10631
|
+
type: "text",
|
|
10632
|
+
readOnly: !canEdit,
|
|
10633
|
+
placeholder: "DD/MM/AAAA",
|
|
10634
|
+
value: questDate.value || "",
|
|
10635
|
+
onChange: (e) => {
|
|
10636
|
+
const rawValue = e.target.value;
|
|
10637
|
+
const digits = rawValue.replace(/\D/g, "");
|
|
10638
|
+
const len = digits.length;
|
|
10639
|
+
let formattedValue = digits;
|
|
10640
|
+
if (len > 2 && len <= 4)
|
|
10641
|
+
formattedValue = `${digits.slice(0, 2)}/${digits.slice(2)}`;
|
|
10642
|
+
else if (len > 4)
|
|
10643
|
+
formattedValue = `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4, 8)}`;
|
|
10644
|
+
setQuestDate({ ...questDate, value: formattedValue });
|
|
10645
|
+
setHasUnsavedChanges(true);
|
|
10646
|
+
},
|
|
10647
|
+
maxLength: "10",
|
|
10648
|
+
className: `w-full bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-400/60" : "text-slate-400 cursor-default"}`
|
|
10649
|
+
}
|
|
10650
|
+
), questDate.type === "Ano" && /* @__PURE__ */ React19.createElement(
|
|
10651
|
+
"input",
|
|
10652
|
+
{
|
|
10653
|
+
type: "number",
|
|
10654
|
+
readOnly: !canEdit,
|
|
10655
|
+
placeholder: "AAAA",
|
|
10656
|
+
value: questDate.value || "",
|
|
10657
|
+
onChange: (e) => {
|
|
10658
|
+
setQuestDate({ ...questDate, value: e.target.value });
|
|
10659
|
+
setHasUnsavedChanges(true);
|
|
10660
|
+
},
|
|
10661
|
+
className: `w-full bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none ${canEdit ? "focus:ring-1 focus:ring-indigo-400/60" : "text-slate-400 cursor-default"}`
|
|
10662
|
+
}
|
|
10663
|
+
), questDate.type === "Date Interval" && /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(
|
|
10664
|
+
"input",
|
|
10665
|
+
{
|
|
10666
|
+
type: "number",
|
|
10667
|
+
readOnly: !canEdit,
|
|
10668
|
+
placeholder: "In\xEDcio (Ano)",
|
|
10669
|
+
value: questDate.start || "",
|
|
10670
|
+
onChange: (e) => {
|
|
10671
|
+
setQuestDate({ ...questDate, start: e.target.value });
|
|
10672
|
+
setHasUnsavedChanges(true);
|
|
10673
|
+
},
|
|
10674
|
+
className: `flex-1 bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none ${canEdit ? "focus:ring-1 focus:ring-indigo-400/60" : "text-slate-400 cursor-default"}`
|
|
10675
|
+
}
|
|
10676
|
+
), /* @__PURE__ */ React19.createElement("span", { className: "text-slate-500" }, "-"), /* @__PURE__ */ React19.createElement(
|
|
10677
|
+
"input",
|
|
10678
|
+
{
|
|
10679
|
+
type: "number",
|
|
10680
|
+
readOnly: !canEdit,
|
|
10681
|
+
placeholder: "Fim (Ano)",
|
|
10682
|
+
value: questDate.end || "",
|
|
10683
|
+
onChange: (e) => {
|
|
10684
|
+
setQuestDate({ ...questDate, end: e.target.value });
|
|
10685
|
+
setHasUnsavedChanges(true);
|
|
10686
|
+
},
|
|
10687
|
+
className: `flex-1 bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none ${canEdit ? "focus:ring-1 focus:ring-indigo-400/60" : "text-slate-400 cursor-default"}`
|
|
10688
|
+
}
|
|
10689
|
+
)))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React19.createElement("label", { className: "text-xs text-slate-300" }, "Status da Quest"), /* @__PURE__ */ React19.createElement("div", { className: "relative" }, /* @__PURE__ */ React19.createElement(
|
|
10571
10690
|
"button",
|
|
10572
10691
|
{
|
|
10573
10692
|
type: "button",
|
|
@@ -10665,7 +10784,77 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10665
10784
|
)), viewMembers.filter((member) => {
|
|
10666
10785
|
const search = assigneeSearchQuery.toLowerCase();
|
|
10667
10786
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
10668
|
-
}).length === 0 && assigneeSearchQuery && /* @__PURE__ */ React19.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado"))))) : /* @__PURE__ */ React19.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__ */ React19.createElement(FiUser3, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ React19.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React19.createElement(
|
|
10787
|
+
}).length === 0 && assigneeSearchQuery && /* @__PURE__ */ React19.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado"))))) : /* @__PURE__ */ React19.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__ */ React19.createElement(FiUser3, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ React19.createElement("div", { className: "pt-4 border-t border-white/5 mt-2" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between mb-3" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement(FiRepeat2, { className: `w-3.5 h-3.5 ${recurrenceConfig.enabled ? "text-indigo-400" : "text-slate-500"}` }), /* @__PURE__ */ React19.createElement("span", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Recorr\xEAncia")), /* @__PURE__ */ React19.createElement(
|
|
10788
|
+
"button",
|
|
10789
|
+
{
|
|
10790
|
+
type: "button",
|
|
10791
|
+
disabled: !canEdit,
|
|
10792
|
+
onClick: () => {
|
|
10793
|
+
setRecurrenceConfig((prev) => ({ ...prev, enabled: !prev.enabled }));
|
|
10794
|
+
setHasUnsavedChanges(true);
|
|
10795
|
+
},
|
|
10796
|
+
className: `relative inline-flex h-5 w-9 items-center rounded-full transition-colors focus:outline-none ${recurrenceConfig.enabled ? "bg-indigo-600" : "bg-slate-700"} ${canEdit ? "cursor-pointer" : "cursor-default opacity-60"}`
|
|
10797
|
+
},
|
|
10798
|
+
/* @__PURE__ */ React19.createElement("span", { className: `inline-block h-3.5 w-3.5 transform rounded-full bg-white transition-transform ${recurrenceConfig.enabled ? "translate-x-4.5" : "translate-x-1"}` })
|
|
10799
|
+
)), recurrenceConfig.enabled && /* @__PURE__ */ React19.createElement("div", { className: "space-y-4 p-3 rounded-xl bg-white/5 border border-white/5 animate-in fade-in slide-in-from-top-1" }, /* @__PURE__ */ React19.createElement("div", { className: "grid grid-cols-2 gap-3" }, /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React19.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Tipo"), /* @__PURE__ */ React19.createElement(
|
|
10800
|
+
"select",
|
|
10801
|
+
{
|
|
10802
|
+
disabled: !canEdit,
|
|
10803
|
+
value: recurrenceConfig.type,
|
|
10804
|
+
onChange: (e) => {
|
|
10805
|
+
setRecurrenceConfig((prev) => ({ ...prev, type: e.target.value }));
|
|
10806
|
+
setHasUnsavedChanges(true);
|
|
10807
|
+
},
|
|
10808
|
+
className: `w-full bg-slate-900/50 border border-white/10 rounded-lg px-2 py-1.5 text-xs text-slate-200 focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-500/50" : "opacity-70"}`
|
|
10809
|
+
},
|
|
10810
|
+
/* @__PURE__ */ React19.createElement("option", { value: "daily" }, "Di\xE1ria"),
|
|
10811
|
+
/* @__PURE__ */ React19.createElement("option", { value: "weekly" }, "Semanal"),
|
|
10812
|
+
/* @__PURE__ */ React19.createElement("option", { value: "custom" }, "Data Espec\xEDfica")
|
|
10813
|
+
)), recurrenceConfig.type === "weekly" && /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React19.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Dia da Semana"), /* @__PURE__ */ React19.createElement(
|
|
10814
|
+
"select",
|
|
10815
|
+
{
|
|
10816
|
+
disabled: !canEdit,
|
|
10817
|
+
value: recurrenceConfig.day_of_week,
|
|
10818
|
+
onChange: (e) => {
|
|
10819
|
+
setRecurrenceConfig((prev) => ({ ...prev, day_of_week: parseInt(e.target.value, 10) }));
|
|
10820
|
+
setHasUnsavedChanges(true);
|
|
10821
|
+
},
|
|
10822
|
+
className: `w-full bg-slate-900/50 border border-white/10 rounded-lg px-2 py-1.5 text-xs text-slate-200 focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-500/50" : "opacity-70"}`
|
|
10823
|
+
},
|
|
10824
|
+
/* @__PURE__ */ React19.createElement("option", { value: 1 }, "Segunda-feira"),
|
|
10825
|
+
/* @__PURE__ */ React19.createElement("option", { value: 2 }, "Ter\xE7a-feira"),
|
|
10826
|
+
/* @__PURE__ */ React19.createElement("option", { value: 3 }, "Quarta-feira"),
|
|
10827
|
+
/* @__PURE__ */ React19.createElement("option", { value: 4 }, "Quinta-feira"),
|
|
10828
|
+
/* @__PURE__ */ React19.createElement("option", { value: 5 }, "Sexta-feira"),
|
|
10829
|
+
/* @__PURE__ */ React19.createElement("option", { value: 6 }, "S\xE1bado"),
|
|
10830
|
+
/* @__PURE__ */ React19.createElement("option", { value: 0 }, "Domingo")
|
|
10831
|
+
)), recurrenceConfig.type === "custom" && /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React19.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Pr\xF3xima Data"), /* @__PURE__ */ React19.createElement(
|
|
10832
|
+
"input",
|
|
10833
|
+
{
|
|
10834
|
+
readOnly: !canEdit,
|
|
10835
|
+
type: "text",
|
|
10836
|
+
placeholder: "DD/MM/AAAA",
|
|
10837
|
+
value: recurrenceConfig.custom_date,
|
|
10838
|
+
onChange: (e) => {
|
|
10839
|
+
setRecurrenceConfig((prev) => ({ ...prev, custom_date: e.target.value }));
|
|
10840
|
+
setHasUnsavedChanges(true);
|
|
10841
|
+
},
|
|
10842
|
+
className: `w-full bg-slate-900/50 border border-white/10 rounded-lg px-2 py-1.5 text-xs text-slate-200 focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-500/50" : "text-slate-400"}`
|
|
10843
|
+
}
|
|
10844
|
+
))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React19.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Pr\xF3ximo Respons\xE1vel"), /* @__PURE__ */ React19.createElement("div", { className: "relative" }, /* @__PURE__ */ React19.createElement(
|
|
10845
|
+
"select",
|
|
10846
|
+
{
|
|
10847
|
+
disabled: !canEdit,
|
|
10848
|
+
value: recurrenceConfig.next_assignee_id,
|
|
10849
|
+
onChange: (e) => {
|
|
10850
|
+
setRecurrenceConfig((prev) => ({ ...prev, next_assignee_id: e.target.value }));
|
|
10851
|
+
setHasUnsavedChanges(true);
|
|
10852
|
+
},
|
|
10853
|
+
className: `w-full bg-slate-900/50 border border-white/10 rounded-lg pl-8 pr-2 py-1.5 text-xs text-slate-200 appearance-none focus:outline-none ${canEdit ? "focus:ring-1 focus:ring-indigo-500/50" : "opacity-70"}`
|
|
10854
|
+
},
|
|
10855
|
+
/* @__PURE__ */ React19.createElement("option", { value: "" }, "Sem respons\xE1vel"),
|
|
10856
|
+
viewMembers.map((member) => /* @__PURE__ */ React19.createElement("option", { key: member.id, value: member.id }, member.name || member.email))
|
|
10857
|
+
), /* @__PURE__ */ React19.createElement(FiUser3, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-slate-500" }), /* @__PURE__ */ React19.createElement(FiChevronDown7, { className: "absolute right-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-slate-500 pointer-events-none" }))))), /* @__PURE__ */ React19.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React19.createElement(
|
|
10669
10858
|
QuestReviewStackEditor,
|
|
10670
10859
|
{
|
|
10671
10860
|
reviewStack,
|
|
@@ -10777,7 +10966,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
10777
10966
|
onChange: (e) => updateLinkInNote(link.id, "value", e.target.value),
|
|
10778
10967
|
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"
|
|
10779
10968
|
}
|
|
10780
|
-
), /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: () => removeLinkFromNote(link.id), className: "text-slate-600 hover:text-red-400 transition-colors" }, /* @__PURE__ */ React19.createElement(FiX7, { size: 12 })))))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Imagens (URLs)"), /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: addImageToNote, className: "text-indigo-400 hover:text-indigo-300 text-[10px] flex items-center gap-1 font-medium" }, /* @__PURE__ */ React19.createElement(FiPlus8, { size: 10 }), " Adicionar Imagem")), noteImages.length > 0 && /* @__PURE__ */ React19.createElement("div", { className: "space-y-2" }, noteImages.map((img) => /* @__PURE__ */ React19.createElement("div", { key: img.id, className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-1" }, /* @__PURE__ */ React19.createElement("div", { className: "flex-1 flex items-center gap-2 bg-slate-950/50 border border-white/5 rounded px-2 py-1" }, /* @__PURE__ */ React19.createElement(
|
|
10969
|
+
), /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: () => removeLinkFromNote(link.id), className: "text-slate-600 hover:text-red-400 transition-colors" }, /* @__PURE__ */ React19.createElement(FiX7, { size: 12 })))))), /* @__PURE__ */ React19.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Imagens (URLs)"), /* @__PURE__ */ React19.createElement("button", { type: "button", onClick: addImageToNote, className: "text-indigo-400 hover:text-indigo-300 text-[10px] flex items-center gap-1 font-medium" }, /* @__PURE__ */ React19.createElement(FiPlus8, { size: 10 }), " Adicionar Imagem")), noteImages.length > 0 && /* @__PURE__ */ React19.createElement("div", { className: "space-y-2" }, noteImages.map((img) => /* @__PURE__ */ React19.createElement("div", { key: img.id, className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-1" }, /* @__PURE__ */ React19.createElement("div", { className: "flex-1 flex items-center gap-2 bg-slate-950/50 border border-white/5 rounded px-2 py-1" }, /* @__PURE__ */ React19.createElement(FiImage4, { size: 10, className: "text-slate-600" }), /* @__PURE__ */ React19.createElement(
|
|
10781
10970
|
"input",
|
|
10782
10971
|
{
|
|
10783
10972
|
type: "text",
|
|
@@ -13432,7 +13621,7 @@ function XViewScene({
|
|
|
13432
13621
|
if (!timeInfo.isUndated && timeInfo.label) {
|
|
13433
13622
|
const dateSprite = createTextSprite(timeInfo.label, 36);
|
|
13434
13623
|
dateSprite.name = "questDateLabel";
|
|
13435
|
-
dateSprite.position.set(0,
|
|
13624
|
+
dateSprite.position.set(0, -5.5, 0);
|
|
13436
13625
|
mesh.add(dateSprite);
|
|
13437
13626
|
}
|
|
13438
13627
|
if (mesh.userData.labelObject) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lv-x-software-house/x_view",
|
|
3
|
-
"version": "1.2.5-dev.
|
|
3
|
+
"version": "1.2.5-dev.40",
|
|
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",
|