@lv-x-software-house/x_view 1.2.6-dev.60 → 1.2.6-dev.62
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 +1061 -843
- package/dist/index.mjs +748 -530
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/XViewScene.jsx
|
|
2
|
-
import
|
|
2
|
+
import React31, {
|
|
3
3
|
useCallback as useCallback6,
|
|
4
4
|
useEffect as useEffect24,
|
|
5
5
|
useRef as useRef21,
|
|
@@ -8757,7 +8757,7 @@ function ImageViewer({ data, onClose }) {
|
|
|
8757
8757
|
}
|
|
8758
8758
|
|
|
8759
8759
|
// src/components/InSceneCreationForm.jsx
|
|
8760
|
-
import
|
|
8760
|
+
import React14, { useState as useState14, useEffect as useEffect13, useRef as useRef10 } from "react";
|
|
8761
8761
|
import { v4 as uuidv45 } from "uuid";
|
|
8762
8762
|
|
|
8763
8763
|
// src/components/ColorPicker.jsx
|
|
@@ -8943,6 +8943,29 @@ import {
|
|
|
8943
8943
|
FiSun,
|
|
8944
8944
|
FiChevronDown as FiChevronDown4
|
|
8945
8945
|
} from "react-icons/fi";
|
|
8946
|
+
import { AiOutlineLoading3Quarters } from "react-icons/ai";
|
|
8947
|
+
|
|
8948
|
+
// src/components/GoogleDocsIcon.jsx
|
|
8949
|
+
import React13 from "react";
|
|
8950
|
+
var GoogleDocsIcon = ({ size = 16, className = "" }) => /* @__PURE__ */ React13.createElement(
|
|
8951
|
+
"svg",
|
|
8952
|
+
{
|
|
8953
|
+
width: size,
|
|
8954
|
+
height: size,
|
|
8955
|
+
viewBox: "0 0 24 24",
|
|
8956
|
+
fill: "none",
|
|
8957
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
8958
|
+
className
|
|
8959
|
+
},
|
|
8960
|
+
/* @__PURE__ */ React13.createElement("path", { d: "M14.5 2H6C5.17157 2 4.5 2.67157 4.5 3.5V20.5C4.5 21.3284 5.17157 22 6 22H18C18.8284 22 19.5 21.3284 19.5 20.5V7L14.5 2Z", fill: "#4285F4" }),
|
|
8961
|
+
/* @__PURE__ */ React13.createElement("path", { d: "M14.5 2V7H19.5L14.5 2Z", fill: "#A1C2FA" }),
|
|
8962
|
+
/* @__PURE__ */ React13.createElement("path", { d: "M7.5 13H16.5", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round" }),
|
|
8963
|
+
/* @__PURE__ */ React13.createElement("path", { d: "M7.5 10H16.5", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round" }),
|
|
8964
|
+
/* @__PURE__ */ React13.createElement("path", { d: "M7.5 16H13.5", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round" })
|
|
8965
|
+
);
|
|
8966
|
+
var GoogleDocsIcon_default = GoogleDocsIcon;
|
|
8967
|
+
|
|
8968
|
+
// src/components/InSceneCreationForm.jsx
|
|
8946
8969
|
function InSceneCreationForm({
|
|
8947
8970
|
onSave,
|
|
8948
8971
|
onCancel,
|
|
@@ -8963,7 +8986,8 @@ function InSceneCreationForm({
|
|
|
8963
8986
|
onUploadFile,
|
|
8964
8987
|
availableDatasets = [],
|
|
8965
8988
|
sourceNodeDatasetId,
|
|
8966
|
-
viewType
|
|
8989
|
+
viewType,
|
|
8990
|
+
create_google_doc_action
|
|
8967
8991
|
}) {
|
|
8968
8992
|
var _a;
|
|
8969
8993
|
const [name, setName] = useState14("");
|
|
@@ -8983,6 +9007,7 @@ function InSceneCreationForm({
|
|
|
8983
9007
|
sourceNodeDatasetId || ""
|
|
8984
9008
|
);
|
|
8985
9009
|
const [isDatasetDropdownOpen, setIsDatasetDropdownOpen] = useState14(false);
|
|
9010
|
+
const [isLoadingDocs, setIsLoadingDocs] = useState14(false);
|
|
8986
9011
|
const datasetDropdownRef = useRef10(null);
|
|
8987
9012
|
useEffect13(() => {
|
|
8988
9013
|
if (sourceNodeDatasetId) setTargetDatasetId(sourceNodeDatasetId);
|
|
@@ -9121,6 +9146,36 @@ function InSceneCreationForm({
|
|
|
9121
9146
|
setSelectedImageUrl(url);
|
|
9122
9147
|
onImageChange == null ? void 0 : onImageChange(true, url);
|
|
9123
9148
|
};
|
|
9149
|
+
const handleCreateGoogleDoc = async () => {
|
|
9150
|
+
if (!name.trim()) {
|
|
9151
|
+
alert("Por favor, insira um nome para o node antes de criar o documento.");
|
|
9152
|
+
return;
|
|
9153
|
+
}
|
|
9154
|
+
if (!create_google_doc_action) return;
|
|
9155
|
+
try {
|
|
9156
|
+
setIsLoadingDocs(true);
|
|
9157
|
+
const res = await create_google_doc_action(name);
|
|
9158
|
+
if (res.success) {
|
|
9159
|
+
const newProp = {
|
|
9160
|
+
id: uuidv45(),
|
|
9161
|
+
key: "Google Docs",
|
|
9162
|
+
type: "links",
|
|
9163
|
+
value: [{ id: uuidv45(), name: "Abrir Documento", value: res.link }]
|
|
9164
|
+
};
|
|
9165
|
+
setCustomProps((prev) => [...prev, newProp]);
|
|
9166
|
+
if (res.link) {
|
|
9167
|
+
window.open(res.link, "_blank");
|
|
9168
|
+
}
|
|
9169
|
+
} else {
|
|
9170
|
+
alert("Erro ao criar documento: " + res.error);
|
|
9171
|
+
}
|
|
9172
|
+
} catch (error) {
|
|
9173
|
+
console.error(error);
|
|
9174
|
+
alert("Erro ao processar cria\xE7\xE3o do documento.");
|
|
9175
|
+
} finally {
|
|
9176
|
+
setIsLoadingDocs(false);
|
|
9177
|
+
}
|
|
9178
|
+
};
|
|
9124
9179
|
const handleSubmit = (e) => {
|
|
9125
9180
|
e.preventDefault();
|
|
9126
9181
|
if (!name.trim() || types.length === 0) {
|
|
@@ -9163,7 +9218,7 @@ function InSceneCreationForm({
|
|
|
9163
9218
|
}
|
|
9164
9219
|
};
|
|
9165
9220
|
const selectedDatasetName = ((_a = availableDatasets.find((ds) => ds.id === targetDatasetId)) == null ? void 0 : _a.name) || "Selecione um Dataset...";
|
|
9166
|
-
return /* @__PURE__ */
|
|
9221
|
+
return /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(
|
|
9167
9222
|
"div",
|
|
9168
9223
|
{
|
|
9169
9224
|
ref: refEl,
|
|
@@ -9177,25 +9232,25 @@ function InSceneCreationForm({
|
|
|
9177
9232
|
onContextMenu: swallow,
|
|
9178
9233
|
onDoubleClick: swallow
|
|
9179
9234
|
},
|
|
9180
|
-
/* @__PURE__ */
|
|
9181
|
-
/* @__PURE__ */
|
|
9182
|
-
/* @__PURE__ */
|
|
9235
|
+
/* @__PURE__ */ React14.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
9236
|
+
/* @__PURE__ */ React14.createElement("div", { className: "px-6 pt-5 pb-3" }, /* @__PURE__ */ React14.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React14.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-indigo-400/80 shadow-[0_0_18px_2px_rgba(99,102,241,0.55)]" }), /* @__PURE__ */ React14.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Criar & Conectar")), /* @__PURE__ */ React14.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Novo Node")),
|
|
9237
|
+
/* @__PURE__ */ React14.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col max-h-[68vh]" }, /* @__PURE__ */ React14.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, /* @__PURE__ */ React14.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React14.createElement("label", { className: "text-xs text-slate-300" }, "Tipo(s) do Node"), /* @__PURE__ */ React14.createElement("div", { className: "relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 focus-within:ring-2 focus-within:ring-indigo-400/60 transition-all" }, types.map((t, index) => /* @__PURE__ */ React14.createElement(
|
|
9183
9238
|
"span",
|
|
9184
9239
|
{
|
|
9185
9240
|
key: index,
|
|
9186
9241
|
className: "flex items-center gap-1 bg-indigo-500/30 text-indigo-100 px-1.5 py-0.5 rounded-md text-xs font-medium border border-indigo-500/20"
|
|
9187
9242
|
},
|
|
9188
9243
|
t,
|
|
9189
|
-
/* @__PURE__ */
|
|
9244
|
+
/* @__PURE__ */ React14.createElement(
|
|
9190
9245
|
"button",
|
|
9191
9246
|
{
|
|
9192
9247
|
type: "button",
|
|
9193
9248
|
onClick: () => handleRemoveType(index),
|
|
9194
9249
|
className: "hover:text-white transition-colors"
|
|
9195
9250
|
},
|
|
9196
|
-
/* @__PURE__ */
|
|
9251
|
+
/* @__PURE__ */ React14.createElement(FiX3, { size: 12 })
|
|
9197
9252
|
)
|
|
9198
|
-
)), /* @__PURE__ */
|
|
9253
|
+
)), /* @__PURE__ */ React14.createElement(
|
|
9199
9254
|
"input",
|
|
9200
9255
|
{
|
|
9201
9256
|
type: "text",
|
|
@@ -9217,7 +9272,7 @@ function InSceneCreationForm({
|
|
|
9217
9272
|
autoComplete: "off",
|
|
9218
9273
|
autoFocus: true
|
|
9219
9274
|
}
|
|
9220
|
-
), showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */
|
|
9275
|
+
), showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */ React14.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-10 w-full mt-1 max-h-40 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, filteredTypes.map((suggestedType, index) => /* @__PURE__ */ React14.createElement(
|
|
9221
9276
|
"li",
|
|
9222
9277
|
{
|
|
9223
9278
|
key: index,
|
|
@@ -9228,7 +9283,7 @@ function InSceneCreationForm({
|
|
|
9228
9283
|
}
|
|
9229
9284
|
},
|
|
9230
9285
|
suggestedType
|
|
9231
|
-
))))), /* @__PURE__ */
|
|
9286
|
+
))))), /* @__PURE__ */ React14.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React14.createElement("label", { className: "text-xs text-slate-300" }, "Nome do Node"), /* @__PURE__ */ React14.createElement(
|
|
9232
9287
|
"input",
|
|
9233
9288
|
{
|
|
9234
9289
|
required: true,
|
|
@@ -9238,21 +9293,21 @@ function InSceneCreationForm({
|
|
|
9238
9293
|
onChange: handleNameInputChange,
|
|
9239
9294
|
className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-2 focus:ring-indigo-400/60"
|
|
9240
9295
|
}
|
|
9241
|
-
)), viewType === "view" && availableDatasets.length > 0 && /* @__PURE__ */
|
|
9296
|
+
)), viewType === "view" && availableDatasets.length > 0 && /* @__PURE__ */ React14.createElement("div", { className: "space-y-1.5 relative", ref: datasetDropdownRef }, /* @__PURE__ */ React14.createElement("label", { className: "text-xs text-slate-300" }, "Criar Node no Dataset:"), /* @__PURE__ */ React14.createElement(
|
|
9242
9297
|
"button",
|
|
9243
9298
|
{
|
|
9244
9299
|
type: "button",
|
|
9245
9300
|
onClick: () => setIsDatasetDropdownOpen(!isDatasetDropdownOpen),
|
|
9246
9301
|
className: "w-full flex items-center justify-between bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 hover:bg-slate-700/70 transition-colors text-slate-200 text-left"
|
|
9247
9302
|
},
|
|
9248
|
-
/* @__PURE__ */
|
|
9249
|
-
/* @__PURE__ */
|
|
9303
|
+
/* @__PURE__ */ React14.createElement("span", { className: "truncate pr-2" }, selectedDatasetName),
|
|
9304
|
+
/* @__PURE__ */ React14.createElement(
|
|
9250
9305
|
FiChevronDown4,
|
|
9251
9306
|
{
|
|
9252
9307
|
className: `flex-shrink-0 text-slate-400 transition-transform ${isDatasetDropdownOpen ? "rotate-180" : ""}`
|
|
9253
9308
|
}
|
|
9254
9309
|
)
|
|
9255
|
-
), isDatasetDropdownOpen && /* @__PURE__ */
|
|
9310
|
+
), isDatasetDropdownOpen && /* @__PURE__ */ React14.createElement("ul", { className: "custom-scrollbar absolute top-[66px] left-0 z-20 w-full max-h-48 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-xl py-1" }, availableDatasets.map((ds) => /* @__PURE__ */ React14.createElement(
|
|
9256
9311
|
"li",
|
|
9257
9312
|
{
|
|
9258
9313
|
key: ds.id,
|
|
@@ -9263,7 +9318,7 @@ function InSceneCreationForm({
|
|
|
9263
9318
|
className: `px-3 py-2 text-sm cursor-pointer transition-colors ${targetDatasetId === ds.id ? "bg-indigo-600/40 text-indigo-200 font-medium" : "text-slate-300 hover:bg-white/5"}`
|
|
9264
9319
|
},
|
|
9265
9320
|
ds.name
|
|
9266
|
-
)))), /* @__PURE__ */
|
|
9321
|
+
)))), /* @__PURE__ */ React14.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React14.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React14.createElement("div", { className: "relative group min-h-[80px] bg-slate-800/70 p-2.5 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React14.createElement(
|
|
9267
9322
|
DescriptionDisplay,
|
|
9268
9323
|
{
|
|
9269
9324
|
description,
|
|
@@ -9274,7 +9329,7 @@ function InSceneCreationForm({
|
|
|
9274
9329
|
onImageClick: handleImageClickFromText,
|
|
9275
9330
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
9276
9331
|
}
|
|
9277
|
-
), /* @__PURE__ */
|
|
9332
|
+
), /* @__PURE__ */ React14.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React14.createElement(
|
|
9278
9333
|
"button",
|
|
9279
9334
|
{
|
|
9280
9335
|
type: "button",
|
|
@@ -9282,17 +9337,17 @@ function InSceneCreationForm({
|
|
|
9282
9337
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
9283
9338
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
9284
9339
|
},
|
|
9285
|
-
/* @__PURE__ */
|
|
9286
|
-
)), !description && /* @__PURE__ */
|
|
9340
|
+
/* @__PURE__ */ React14.createElement(FiEdit24, { size: 14 })
|
|
9341
|
+
)), !description && /* @__PURE__ */ React14.createElement(
|
|
9287
9342
|
"div",
|
|
9288
9343
|
{
|
|
9289
9344
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
9290
9345
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
9291
9346
|
},
|
|
9292
9347
|
"Adicionar descri\xE7\xE3o..."
|
|
9293
|
-
))), /* @__PURE__ */
|
|
9348
|
+
))), /* @__PURE__ */ React14.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React14.createElement("label", { className: "text-xs text-slate-300" }, "Size"), /* @__PURE__ */ React14.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => {
|
|
9294
9349
|
const isSelected = size === s;
|
|
9295
|
-
return /* @__PURE__ */
|
|
9350
|
+
return /* @__PURE__ */ React14.createElement(
|
|
9296
9351
|
"button",
|
|
9297
9352
|
{
|
|
9298
9353
|
key: s,
|
|
@@ -9300,14 +9355,14 @@ function InSceneCreationForm({
|
|
|
9300
9355
|
onClick: () => handleSizeChange(s),
|
|
9301
9356
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
9302
9357
|
},
|
|
9303
|
-
/* @__PURE__ */
|
|
9358
|
+
/* @__PURE__ */ React14.createElement(
|
|
9304
9359
|
"div",
|
|
9305
9360
|
{
|
|
9306
9361
|
className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent group-hover:border-slate-500"}`
|
|
9307
9362
|
},
|
|
9308
|
-
isSelected && /* @__PURE__ */
|
|
9363
|
+
isSelected && /* @__PURE__ */ React14.createElement(FiCheck7, { size: 12, className: "text-white" })
|
|
9309
9364
|
),
|
|
9310
|
-
/* @__PURE__ */
|
|
9365
|
+
/* @__PURE__ */ React14.createElement(
|
|
9311
9366
|
"span",
|
|
9312
9367
|
{
|
|
9313
9368
|
className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
@@ -9315,13 +9370,13 @@ function InSceneCreationForm({
|
|
|
9315
9370
|
s
|
|
9316
9371
|
)
|
|
9317
9372
|
);
|
|
9318
|
-
}))), /* @__PURE__ */
|
|
9373
|
+
}))), /* @__PURE__ */ React14.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React14.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React14.createElement("label", { className: "text-xs text-slate-300" }, "Cor e Brilho"), hasImages && /* @__PURE__ */ React14.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" }, /* @__PURE__ */ React14.createElement(
|
|
9319
9374
|
"div",
|
|
9320
9375
|
{
|
|
9321
9376
|
className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${useImageAsTexture ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}`
|
|
9322
9377
|
},
|
|
9323
|
-
useImageAsTexture && /* @__PURE__ */
|
|
9324
|
-
), /* @__PURE__ */
|
|
9378
|
+
useImageAsTexture && /* @__PURE__ */ React14.createElement(FiCheck7, { size: 12, className: "text-white" })
|
|
9379
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9325
9380
|
"input",
|
|
9326
9381
|
{
|
|
9327
9382
|
type: "checkbox",
|
|
@@ -9329,20 +9384,20 @@ function InSceneCreationForm({
|
|
|
9329
9384
|
onChange: handleToggleImageMode,
|
|
9330
9385
|
className: "hidden"
|
|
9331
9386
|
}
|
|
9332
|
-
), /* @__PURE__ */
|
|
9387
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9333
9388
|
"span",
|
|
9334
9389
|
{
|
|
9335
9390
|
className: `text-xs ${useImageAsTexture ? "text-indigo-300" : "text-slate-400 group-hover:text-slate-300"}`
|
|
9336
9391
|
},
|
|
9337
9392
|
"Usar imagem para representar o node"
|
|
9338
|
-
))), /* @__PURE__ */
|
|
9393
|
+
))), /* @__PURE__ */ React14.createElement(
|
|
9339
9394
|
ColorPicker,
|
|
9340
9395
|
{
|
|
9341
9396
|
color,
|
|
9342
9397
|
onChange: handleColorInputChange,
|
|
9343
9398
|
disabled: useImageAsTexture
|
|
9344
9399
|
}
|
|
9345
|
-
), /* @__PURE__ */
|
|
9400
|
+
), /* @__PURE__ */ React14.createElement("div", { className: "mt-3 flex items-center gap-3" }, /* @__PURE__ */ React14.createElement(FiSun, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ React14.createElement(
|
|
9346
9401
|
"input",
|
|
9347
9402
|
{
|
|
9348
9403
|
type: "range",
|
|
@@ -9354,22 +9409,33 @@ function InSceneCreationForm({
|
|
|
9354
9409
|
className: "w-full h-1.5 bg-slate-700 rounded-lg appearance-none cursor-pointer accent-indigo-500 hover:accent-indigo-400",
|
|
9355
9410
|
title: `Intensidade do brilho: ${intensity}`
|
|
9356
9411
|
}
|
|
9357
|
-
), /* @__PURE__ */
|
|
9412
|
+
), /* @__PURE__ */ React14.createElement("span", { className: "text-xs text-slate-400 w-6 text-right" }, intensity)), /* @__PURE__ */ React14.createElement(
|
|
9358
9413
|
"span",
|
|
9359
9414
|
{
|
|
9360
9415
|
className: `text-xs block mt-1 transition-opacity ${useImageAsTexture ? "opacity-40" : "text-slate-400"}`
|
|
9361
9416
|
},
|
|
9362
9417
|
useImageAsTexture ? "Cor da borda (definida pela imagem)" : "Selecione a cor e ajuste o brilho."
|
|
9363
|
-
)), /* @__PURE__ */
|
|
9418
|
+
)), /* @__PURE__ */ React14.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React14.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React14.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), /* @__PURE__ */ React14.createElement("div", { className: "flex items-center gap-2" }, create_google_doc_action && /* @__PURE__ */ React14.createElement(
|
|
9419
|
+
"button",
|
|
9420
|
+
{
|
|
9421
|
+
type: "button",
|
|
9422
|
+
onClick: handleCreateGoogleDoc,
|
|
9423
|
+
disabled: isLoadingDocs,
|
|
9424
|
+
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-transparent hover:bg-white/5 text-slate-300 border border-white/10 transition-all disabled:opacity-50 disabled:cursor-not-allowed group",
|
|
9425
|
+
title: "Criar Documento no Google Docs"
|
|
9426
|
+
},
|
|
9427
|
+
isLoadingDocs ? /* @__PURE__ */ React14.createElement(AiOutlineLoading3Quarters, { className: "animate-spin", size: 14 }) : /* @__PURE__ */ React14.createElement(GoogleDocsIcon_default, { size: 14, className: "group-hover:scale-110 transition-transform" }),
|
|
9428
|
+
isLoadingDocs ? "Criando..." : "Google Doc"
|
|
9429
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9364
9430
|
"button",
|
|
9365
9431
|
{
|
|
9366
9432
|
type: "button",
|
|
9367
9433
|
onClick: handleAddProp,
|
|
9368
9434
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
|
|
9369
9435
|
},
|
|
9370
|
-
/* @__PURE__ */
|
|
9436
|
+
/* @__PURE__ */ React14.createElement(FiPlus3, { size: 14 }),
|
|
9371
9437
|
" Adicionar"
|
|
9372
|
-
)), /* @__PURE__ */
|
|
9438
|
+
))), /* @__PURE__ */ React14.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React14.createElement(
|
|
9373
9439
|
CustomPropertyDisplay,
|
|
9374
9440
|
{
|
|
9375
9441
|
key: prop.id,
|
|
@@ -9385,7 +9451,7 @@ function InSceneCreationForm({
|
|
|
9385
9451
|
onSelectTexture: handleSelectTexture,
|
|
9386
9452
|
onUploadFile
|
|
9387
9453
|
}
|
|
9388
|
-
)), /* @__PURE__ */
|
|
9454
|
+
)), /* @__PURE__ */ React14.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ React14.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React14.createElement(
|
|
9389
9455
|
"button",
|
|
9390
9456
|
{
|
|
9391
9457
|
type: "button",
|
|
@@ -9393,7 +9459,7 @@ function InSceneCreationForm({
|
|
|
9393
9459
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
9394
9460
|
},
|
|
9395
9461
|
"Cancelar"
|
|
9396
|
-
), /* @__PURE__ */
|
|
9462
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9397
9463
|
"button",
|
|
9398
9464
|
{
|
|
9399
9465
|
type: "submit",
|
|
@@ -9401,7 +9467,7 @@ function InSceneCreationForm({
|
|
|
9401
9467
|
},
|
|
9402
9468
|
"Salvar"
|
|
9403
9469
|
)))
|
|
9404
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
9470
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React14.createElement(
|
|
9405
9471
|
DescriptionEditModal,
|
|
9406
9472
|
{
|
|
9407
9473
|
isOpen: isDescriptionModalOpen,
|
|
@@ -9419,7 +9485,7 @@ function InSceneCreationForm({
|
|
|
9419
9485
|
}
|
|
9420
9486
|
|
|
9421
9487
|
// src/components/InSceneVersionForm.jsx
|
|
9422
|
-
import
|
|
9488
|
+
import React15, { useState as useState15, useEffect as useEffect14, useRef as useRef11 } from "react";
|
|
9423
9489
|
import { v4 as uuidv46 } from "uuid";
|
|
9424
9490
|
import { FiPlus as FiPlus4, FiMaximize2 as FiMaximize22, FiCheck as FiCheck8, FiEdit2 as FiEdit25 } from "react-icons/fi";
|
|
9425
9491
|
function InSceneVersionForm({
|
|
@@ -9557,7 +9623,7 @@ function InSceneVersionForm({
|
|
|
9557
9623
|
onOpenImageViewer([{ name: name2 || "Imagem", value: url }], 0);
|
|
9558
9624
|
}
|
|
9559
9625
|
};
|
|
9560
|
-
return /* @__PURE__ */
|
|
9626
|
+
return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(
|
|
9561
9627
|
"div",
|
|
9562
9628
|
{
|
|
9563
9629
|
ref: refEl,
|
|
@@ -9571,9 +9637,9 @@ function InSceneVersionForm({
|
|
|
9571
9637
|
onContextMenu: swallow,
|
|
9572
9638
|
onDoubleClick: swallow
|
|
9573
9639
|
},
|
|
9574
|
-
/* @__PURE__ */
|
|
9575
|
-
/* @__PURE__ */
|
|
9576
|
-
/* @__PURE__ */
|
|
9640
|
+
/* @__PURE__ */ React15.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
9641
|
+
/* @__PURE__ */ React15.createElement("div", { className: "px-6 pt-5 pb-3" }, /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React15.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-indigo-400/80 shadow-[0_0_18px_2px_rgba(99,102,241,0.55)]" }), /* @__PURE__ */ React15.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Criar Versionamento")), /* @__PURE__ */ React15.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Nova Vers\xE3o")),
|
|
9642
|
+
/* @__PURE__ */ React15.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col max-h-[68vh]" }, /* @__PURE__ */ React15.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, /* @__PURE__ */ React15.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React15.createElement("label", { className: "text-xs text-slate-300" }, "Tipo do Node (Fixo)"), /* @__PURE__ */ React15.createElement(
|
|
9577
9643
|
"input",
|
|
9578
9644
|
{
|
|
9579
9645
|
type: "text",
|
|
@@ -9581,7 +9647,7 @@ function InSceneVersionForm({
|
|
|
9581
9647
|
disabled: true,
|
|
9582
9648
|
className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 text-slate-400 cursor-not-allowed"
|
|
9583
9649
|
}
|
|
9584
|
-
)), /* @__PURE__ */
|
|
9650
|
+
)), /* @__PURE__ */ React15.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React15.createElement("label", { className: "text-xs text-slate-300" }, "Nome do Node"), /* @__PURE__ */ React15.createElement(
|
|
9585
9651
|
"input",
|
|
9586
9652
|
{
|
|
9587
9653
|
required: true,
|
|
@@ -9591,7 +9657,7 @@ function InSceneVersionForm({
|
|
|
9591
9657
|
onChange: handleNameInputChange,
|
|
9592
9658
|
className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-2 focus:ring-indigo-400/60"
|
|
9593
9659
|
}
|
|
9594
|
-
)), /* @__PURE__ */
|
|
9660
|
+
)), /* @__PURE__ */ React15.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React15.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React15.createElement("div", { className: "relative group min-h-[80px] bg-slate-800/70 p-2.5 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React15.createElement(
|
|
9595
9661
|
DescriptionDisplay,
|
|
9596
9662
|
{
|
|
9597
9663
|
description,
|
|
@@ -9602,7 +9668,7 @@ function InSceneVersionForm({
|
|
|
9602
9668
|
onImageClick: handleImageClickFromText,
|
|
9603
9669
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
9604
9670
|
}
|
|
9605
|
-
), /* @__PURE__ */
|
|
9671
|
+
), /* @__PURE__ */ React15.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React15.createElement(
|
|
9606
9672
|
"button",
|
|
9607
9673
|
{
|
|
9608
9674
|
type: "button",
|
|
@@ -9610,17 +9676,17 @@ function InSceneVersionForm({
|
|
|
9610
9676
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
9611
9677
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
9612
9678
|
},
|
|
9613
|
-
/* @__PURE__ */
|
|
9614
|
-
)), !description && /* @__PURE__ */
|
|
9679
|
+
/* @__PURE__ */ React15.createElement(FiEdit25, { size: 14 })
|
|
9680
|
+
)), !description && /* @__PURE__ */ React15.createElement(
|
|
9615
9681
|
"div",
|
|
9616
9682
|
{
|
|
9617
9683
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
9618
9684
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
9619
9685
|
},
|
|
9620
9686
|
"Adicionar descri\xE7\xE3o..."
|
|
9621
|
-
))), /* @__PURE__ */
|
|
9687
|
+
))), /* @__PURE__ */ React15.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React15.createElement("label", { className: "text-xs text-slate-300" }, "Size"), /* @__PURE__ */ React15.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => {
|
|
9622
9688
|
const isSelected = size === s;
|
|
9623
|
-
return /* @__PURE__ */
|
|
9689
|
+
return /* @__PURE__ */ React15.createElement(
|
|
9624
9690
|
"button",
|
|
9625
9691
|
{
|
|
9626
9692
|
key: s,
|
|
@@ -9628,14 +9694,14 @@ function InSceneVersionForm({
|
|
|
9628
9694
|
onClick: () => handleSizeChange(s),
|
|
9629
9695
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
9630
9696
|
},
|
|
9631
|
-
/* @__PURE__ */
|
|
9697
|
+
/* @__PURE__ */ React15.createElement(
|
|
9632
9698
|
"div",
|
|
9633
9699
|
{
|
|
9634
9700
|
className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent group-hover:border-slate-500"}`
|
|
9635
9701
|
},
|
|
9636
|
-
isSelected && /* @__PURE__ */
|
|
9702
|
+
isSelected && /* @__PURE__ */ React15.createElement(FiCheck8, { size: 12, className: "text-white" })
|
|
9637
9703
|
),
|
|
9638
|
-
/* @__PURE__ */
|
|
9704
|
+
/* @__PURE__ */ React15.createElement(
|
|
9639
9705
|
"span",
|
|
9640
9706
|
{
|
|
9641
9707
|
className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
@@ -9643,13 +9709,13 @@ function InSceneVersionForm({
|
|
|
9643
9709
|
s
|
|
9644
9710
|
)
|
|
9645
9711
|
);
|
|
9646
|
-
}))), /* @__PURE__ */
|
|
9712
|
+
}))), /* @__PURE__ */ React15.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React15.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React15.createElement("label", { className: "text-xs text-slate-300" }, "Cor do Node (Fixa)"), hasImages && /* @__PURE__ */ React15.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" }, /* @__PURE__ */ React15.createElement(
|
|
9647
9713
|
"div",
|
|
9648
9714
|
{
|
|
9649
9715
|
className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${useImageAsTexture ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}`
|
|
9650
9716
|
},
|
|
9651
|
-
useImageAsTexture && /* @__PURE__ */
|
|
9652
|
-
), /* @__PURE__ */
|
|
9717
|
+
useImageAsTexture && /* @__PURE__ */ React15.createElement(FiCheck8, { size: 12, className: "text-white" })
|
|
9718
|
+
), /* @__PURE__ */ React15.createElement(
|
|
9653
9719
|
"input",
|
|
9654
9720
|
{
|
|
9655
9721
|
type: "checkbox",
|
|
@@ -9657,35 +9723,35 @@ function InSceneVersionForm({
|
|
|
9657
9723
|
onChange: handleToggleImageMode,
|
|
9658
9724
|
className: "hidden"
|
|
9659
9725
|
}
|
|
9660
|
-
), /* @__PURE__ */
|
|
9726
|
+
), /* @__PURE__ */ React15.createElement(
|
|
9661
9727
|
"span",
|
|
9662
9728
|
{
|
|
9663
9729
|
className: `text-xs ${useImageAsTexture ? "text-indigo-300" : "text-slate-400 group-hover:text-slate-300"}`
|
|
9664
9730
|
},
|
|
9665
9731
|
"Usar imagem"
|
|
9666
|
-
))), /* @__PURE__ */
|
|
9732
|
+
))), /* @__PURE__ */ React15.createElement(
|
|
9667
9733
|
"div",
|
|
9668
9734
|
{
|
|
9669
9735
|
className: `flex items-center gap-3 bg-slate-900/60 p-2.5 rounded-lg border border-white/10 transition-opacity duration-200 ${useImageAsTexture ? "opacity-40 pointer-events-none grayscale" : "opacity-100"}`
|
|
9670
9736
|
},
|
|
9671
|
-
/* @__PURE__ */
|
|
9737
|
+
/* @__PURE__ */ React15.createElement(
|
|
9672
9738
|
"div",
|
|
9673
9739
|
{
|
|
9674
9740
|
className: "h-8 w-12 rounded-md border border-white/10",
|
|
9675
9741
|
style: { backgroundColor: fixedColor }
|
|
9676
9742
|
}
|
|
9677
9743
|
),
|
|
9678
|
-
/* @__PURE__ */
|
|
9679
|
-
)), /* @__PURE__ */
|
|
9744
|
+
/* @__PURE__ */ React15.createElement("span", { className: "text-xs text-slate-300" }, useImageAsTexture ? "Cor definida pela imagem." : "Cor herdada do node original.")
|
|
9745
|
+
)), /* @__PURE__ */ React15.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React15.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React15.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais (*Date obrigat\xF3rio)"), /* @__PURE__ */ React15.createElement(
|
|
9680
9746
|
"button",
|
|
9681
9747
|
{
|
|
9682
9748
|
type: "button",
|
|
9683
9749
|
onClick: handleAddProp,
|
|
9684
9750
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
|
|
9685
9751
|
},
|
|
9686
|
-
/* @__PURE__ */
|
|
9752
|
+
/* @__PURE__ */ React15.createElement(FiPlus4, { size: 14 }),
|
|
9687
9753
|
" Adicionar"
|
|
9688
|
-
)), /* @__PURE__ */
|
|
9754
|
+
)), /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React15.createElement(
|
|
9689
9755
|
CustomPropertyDisplay,
|
|
9690
9756
|
{
|
|
9691
9757
|
key: prop.id,
|
|
@@ -9701,7 +9767,7 @@ function InSceneVersionForm({
|
|
|
9701
9767
|
onSelectTexture: handleSelectTexture,
|
|
9702
9768
|
onUploadFile
|
|
9703
9769
|
}
|
|
9704
|
-
)), /* @__PURE__ */
|
|
9770
|
+
)), /* @__PURE__ */ React15.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ React15.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React15.createElement(
|
|
9705
9771
|
"button",
|
|
9706
9772
|
{
|
|
9707
9773
|
type: "button",
|
|
@@ -9709,7 +9775,7 @@ function InSceneVersionForm({
|
|
|
9709
9775
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
9710
9776
|
},
|
|
9711
9777
|
"Cancelar"
|
|
9712
|
-
), /* @__PURE__ */
|
|
9778
|
+
), /* @__PURE__ */ React15.createElement(
|
|
9713
9779
|
"button",
|
|
9714
9780
|
{
|
|
9715
9781
|
type: "submit",
|
|
@@ -9717,7 +9783,7 @@ function InSceneVersionForm({
|
|
|
9717
9783
|
},
|
|
9718
9784
|
"Salvar"
|
|
9719
9785
|
)))
|
|
9720
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
9786
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React15.createElement(
|
|
9721
9787
|
DescriptionEditModal,
|
|
9722
9788
|
{
|
|
9723
9789
|
isOpen: isDescriptionModalOpen,
|
|
@@ -9735,7 +9801,7 @@ function InSceneVersionForm({
|
|
|
9735
9801
|
}
|
|
9736
9802
|
|
|
9737
9803
|
// src/components/InSceneQuestForm.jsx
|
|
9738
|
-
import
|
|
9804
|
+
import React17, { useState as useState17, useRef as useRef12 } from "react";
|
|
9739
9805
|
import { v4 as uuidv47 } from "uuid";
|
|
9740
9806
|
import {
|
|
9741
9807
|
FiPlus as FiPlus6,
|
|
@@ -9750,9 +9816,10 @@ import {
|
|
|
9750
9816
|
FiRepeat,
|
|
9751
9817
|
FiCopy as FiCopy3
|
|
9752
9818
|
} from "react-icons/fi";
|
|
9819
|
+
import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters2 } from "react-icons/ai";
|
|
9753
9820
|
|
|
9754
9821
|
// src/components/QuestReviewStackEditor.jsx
|
|
9755
|
-
import
|
|
9822
|
+
import React16, { useState as useState16 } from "react";
|
|
9756
9823
|
import {
|
|
9757
9824
|
FiPlus as FiPlus5,
|
|
9758
9825
|
FiX as FiX4,
|
|
@@ -9805,22 +9872,22 @@ function QuestReviewStackEditor({
|
|
|
9805
9872
|
const search = searchQuery.toLowerCase();
|
|
9806
9873
|
return (m.name || "").toLowerCase().includes(search) || (m.email || "").toLowerCase().includes(search);
|
|
9807
9874
|
});
|
|
9808
|
-
return /* @__PURE__ */
|
|
9875
|
+
return /* @__PURE__ */ React16.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React16.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Review Stack"), !readOnly && !isAdding && /* @__PURE__ */ React16.createElement(
|
|
9809
9876
|
"button",
|
|
9810
9877
|
{
|
|
9811
9878
|
type: "button",
|
|
9812
9879
|
onClick: () => setIsAdding(true),
|
|
9813
9880
|
className: "flex items-center gap-1 px-2 py-1 text-[10px] bg-sky-500/20 text-sky-300 border border-sky-500/30 rounded hover:bg-sky-500/30 transition-colors"
|
|
9814
9881
|
},
|
|
9815
|
-
/* @__PURE__ */
|
|
9882
|
+
/* @__PURE__ */ React16.createElement(FiPlus5, { size: 10 }),
|
|
9816
9883
|
" Adicionar Camada"
|
|
9817
|
-
)), isAdding && /* @__PURE__ */
|
|
9884
|
+
)), isAdding && /* @__PURE__ */ React16.createElement("div", { className: "bg-slate-900/50 border border-sky-500/30 rounded-lg p-2 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200" }, /* @__PURE__ */ React16.createElement("div", { className: "relative" }, /* @__PURE__ */ React16.createElement(
|
|
9818
9885
|
FiSearch4,
|
|
9819
9886
|
{
|
|
9820
9887
|
className: "absolute left-2 top-1/2 -translate-y-1/2 text-slate-500",
|
|
9821
9888
|
size: 12
|
|
9822
9889
|
}
|
|
9823
|
-
), /* @__PURE__ */
|
|
9890
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9824
9891
|
"input",
|
|
9825
9892
|
{
|
|
9826
9893
|
autoFocus: true,
|
|
@@ -9830,32 +9897,32 @@ function QuestReviewStackEditor({
|
|
|
9830
9897
|
onChange: (e) => setSearchQuery(e.target.value),
|
|
9831
9898
|
className: "w-full bg-slate-800 border border-white/10 rounded p-1.5 pl-7 text-xs focus:outline-none focus:ring-1 focus:ring-sky-400"
|
|
9832
9899
|
}
|
|
9833
|
-
), /* @__PURE__ */
|
|
9900
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9834
9901
|
"button",
|
|
9835
9902
|
{
|
|
9836
9903
|
onClick: () => setIsAdding(false),
|
|
9837
9904
|
className: "absolute right-2 top-1/2 -translate-y-1/2 text-slate-500 hover:text-white"
|
|
9838
9905
|
},
|
|
9839
|
-
/* @__PURE__ */
|
|
9840
|
-
)), /* @__PURE__ */
|
|
9906
|
+
/* @__PURE__ */ React16.createElement(FiX4, { size: 14 })
|
|
9907
|
+
)), /* @__PURE__ */ React16.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar space-y-1" }, filteredMembers.map((m) => /* @__PURE__ */ React16.createElement(
|
|
9841
9908
|
"li",
|
|
9842
9909
|
{
|
|
9843
9910
|
key: m.id,
|
|
9844
9911
|
onClick: () => handleAddReviewer(m.id),
|
|
9845
9912
|
className: "px-2 py-1.5 hover:bg-white/5 rounded cursor-pointer text-xs flex items-center gap-2"
|
|
9846
9913
|
},
|
|
9847
|
-
/* @__PURE__ */
|
|
9848
|
-
/* @__PURE__ */
|
|
9849
|
-
)), filteredMembers.length === 0 && /* @__PURE__ */
|
|
9914
|
+
/* @__PURE__ */ React16.createElement(FiUser, { size: 12, className: "text-slate-400" }),
|
|
9915
|
+
/* @__PURE__ */ React16.createElement("span", { className: "truncate" }, m.name || m.email)
|
|
9916
|
+
)), filteredMembers.length === 0 && /* @__PURE__ */ React16.createElement("li", { className: "text-[10px] text-slate-500 text-center py-2 italic font-light" }, "Nenhum membro encontrado"))), /* @__PURE__ */ React16.createElement("div", { className: "space-y-1.5" }, reviewStack.map((item, index) => {
|
|
9850
9917
|
const member = viewMembers.find((m) => m.id === item.userId);
|
|
9851
9918
|
const isCompleted = item.status === "completed";
|
|
9852
|
-
return /* @__PURE__ */
|
|
9919
|
+
return /* @__PURE__ */ React16.createElement(
|
|
9853
9920
|
"div",
|
|
9854
9921
|
{
|
|
9855
9922
|
key: index,
|
|
9856
9923
|
className: `group relative flex items-center gap-3 p-2 rounded-lg border ${isCompleted ? "bg-green-500/5 border-green-500/20" : "bg-white/5 border-white/10"} hover:border-white/20 transition-all`
|
|
9857
9924
|
},
|
|
9858
|
-
/* @__PURE__ */
|
|
9925
|
+
/* @__PURE__ */ React16.createElement("div", { className: "flex flex-col items-center gap-0.5 text-slate-500" }, /* @__PURE__ */ React16.createElement("span", { className: "text-[10px] font-bold opacity-50" }, index + 1), !readOnly && /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement(
|
|
9859
9926
|
"button",
|
|
9860
9927
|
{
|
|
9861
9928
|
type: "button",
|
|
@@ -9863,8 +9930,8 @@ function QuestReviewStackEditor({
|
|
|
9863
9930
|
disabled: index === 0,
|
|
9864
9931
|
className: "hover:text-sky-400 disabled:opacity-20"
|
|
9865
9932
|
},
|
|
9866
|
-
/* @__PURE__ */
|
|
9867
|
-
), /* @__PURE__ */
|
|
9933
|
+
/* @__PURE__ */ React16.createElement(FiChevronUp, { size: 12 })
|
|
9934
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9868
9935
|
"button",
|
|
9869
9936
|
{
|
|
9870
9937
|
type: "button",
|
|
@@ -9872,16 +9939,16 @@ function QuestReviewStackEditor({
|
|
|
9872
9939
|
disabled: index === reviewStack.length - 1,
|
|
9873
9940
|
className: "hover:text-sky-400 disabled:opacity-20"
|
|
9874
9941
|
},
|
|
9875
|
-
/* @__PURE__ */
|
|
9942
|
+
/* @__PURE__ */ React16.createElement(FiChevronDown5, { size: 12 })
|
|
9876
9943
|
))),
|
|
9877
|
-
/* @__PURE__ */
|
|
9944
|
+
/* @__PURE__ */ React16.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React16.createElement(
|
|
9878
9945
|
"span",
|
|
9879
9946
|
{
|
|
9880
9947
|
className: `truncate text-sm font-medium ${isCompleted ? "text-green-300" : "text-slate-200"}`
|
|
9881
9948
|
},
|
|
9882
9949
|
(member == null ? void 0 : member.name) || (member == null ? void 0 : member.email) || "Unknown User"
|
|
9883
|
-
), item.mandatory && /* @__PURE__ */
|
|
9884
|
-
!readOnly && /* @__PURE__ */
|
|
9950
|
+
), item.mandatory && /* @__PURE__ */ React16.createElement("span", { className: "flex-shrink-0 px-1.5 py-0.5 rounded-full bg-amber-500/20 text-amber-300 text-[8px] font-bold uppercase tracking-tighter border border-amber-500/30" }, "Obrigat\xF3rio")), /* @__PURE__ */ React16.createElement("p", { className: "text-[10px] text-slate-500 flex items-center gap-1" }, isCompleted ? "\u2713 Review Conclu\xEDda" : "\u23F3 Pendente")),
|
|
9951
|
+
!readOnly && /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ React16.createElement(
|
|
9885
9952
|
"button",
|
|
9886
9953
|
{
|
|
9887
9954
|
type: "button",
|
|
@@ -9889,18 +9956,18 @@ function QuestReviewStackEditor({
|
|
|
9889
9956
|
title: item.mandatory ? "Remover obrigatoriedade" : "Tornar obrigat\xF3rio",
|
|
9890
9957
|
className: `p-1.5 rounded hover:bg-white/10 transition-colors ${item.mandatory ? "text-amber-400" : "text-slate-500"}`
|
|
9891
9958
|
},
|
|
9892
|
-
/* @__PURE__ */
|
|
9893
|
-
), /* @__PURE__ */
|
|
9959
|
+
/* @__PURE__ */ React16.createElement(FiStar, { size: 14 })
|
|
9960
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9894
9961
|
"button",
|
|
9895
9962
|
{
|
|
9896
9963
|
type: "button",
|
|
9897
9964
|
onClick: () => handleRemoveReviewer(index),
|
|
9898
9965
|
className: "p-1.5 rounded hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-colors"
|
|
9899
9966
|
},
|
|
9900
|
-
/* @__PURE__ */
|
|
9967
|
+
/* @__PURE__ */ React16.createElement(FiX4, { size: 14 })
|
|
9901
9968
|
))
|
|
9902
9969
|
);
|
|
9903
|
-
}), reviewStack.length === 0 && !isAdding && /* @__PURE__ */
|
|
9970
|
+
}), reviewStack.length === 0 && !isAdding && /* @__PURE__ */ React16.createElement("div", { className: "py-6 border-2 border-dashed border-white/5 rounded-xl flex flex-col items-center justify-center gap-2" }, /* @__PURE__ */ React16.createElement("p", { className: "text-xs text-slate-500 font-light italic" }, "Nenhum revisor definido"), !readOnly && /* @__PURE__ */ React16.createElement(
|
|
9904
9971
|
"button",
|
|
9905
9972
|
{
|
|
9906
9973
|
type: "button",
|
|
@@ -9939,7 +10006,8 @@ function InSceneQuestForm({
|
|
|
9939
10006
|
session = null,
|
|
9940
10007
|
milestones = [],
|
|
9941
10008
|
onUpdateMilestones = () => {
|
|
9942
|
-
}
|
|
10009
|
+
},
|
|
10010
|
+
create_google_doc_action
|
|
9943
10011
|
}) {
|
|
9944
10012
|
var _a, _b;
|
|
9945
10013
|
const [name, setName] = useState17("");
|
|
@@ -9967,16 +10035,17 @@ function InSceneQuestForm({
|
|
|
9967
10035
|
const [isAssigneeDropdownOpen, setIsAssigneeDropdownOpen] = useState17(false);
|
|
9968
10036
|
const [assigneeSearchQuery, setAssigneeSearchQuery] = useState17("");
|
|
9969
10037
|
const [isNameCopied, setIsNameCopied] = useState17(false);
|
|
10038
|
+
const [isLoadingDocs, setIsLoadingDocs] = useState17(false);
|
|
9970
10039
|
const [customProps, setCustomProps] = useState17([]);
|
|
9971
10040
|
const [isDescriptionModalOpen, setIsDescriptionModalOpen] = useState17(false);
|
|
9972
10041
|
const propsEndRef = useRef12(null);
|
|
9973
10042
|
const [milestoneInput, setMilestoneInput] = useState17("");
|
|
9974
10043
|
const [showMilestoneSuggestions, setShowMilestoneSuggestions] = useState17(false);
|
|
9975
|
-
const activeMilestones =
|
|
10044
|
+
const activeMilestones = React17.useMemo(
|
|
9976
10045
|
() => (milestones || []).filter((ms) => ms.status === "active"),
|
|
9977
10046
|
[milestones]
|
|
9978
10047
|
);
|
|
9979
|
-
const filteredMilestones =
|
|
10048
|
+
const filteredMilestones = React17.useMemo(() => {
|
|
9980
10049
|
const search = milestoneInput.toLowerCase().trim();
|
|
9981
10050
|
return activeMilestones.filter(
|
|
9982
10051
|
(ms) => ms.name.toLowerCase().includes(search) && !milestoneIds.includes(ms.id)
|
|
@@ -10013,11 +10082,11 @@ function InSceneQuestForm({
|
|
|
10013
10082
|
handleRemoveMilestone(milestoneIds[milestoneIds.length - 1]);
|
|
10014
10083
|
}
|
|
10015
10084
|
};
|
|
10016
|
-
const dependencyQuests =
|
|
10085
|
+
const dependencyQuests = React17.useMemo(
|
|
10017
10086
|
() => availableNodes.filter((n) => n.is_quest),
|
|
10018
10087
|
[availableNodes]
|
|
10019
10088
|
);
|
|
10020
|
-
const filteredDependencies =
|
|
10089
|
+
const filteredDependencies = React17.useMemo(() => {
|
|
10021
10090
|
const search = dependencyInput.toLowerCase().trim();
|
|
10022
10091
|
return dependencyQuests.filter((q) => {
|
|
10023
10092
|
var _a2;
|
|
@@ -10054,6 +10123,36 @@ function InSceneQuestForm({
|
|
|
10054
10123
|
console.error("Erro ao copiar nome:", err);
|
|
10055
10124
|
});
|
|
10056
10125
|
};
|
|
10126
|
+
const handleCreateGoogleDoc = async () => {
|
|
10127
|
+
if (!name.trim()) {
|
|
10128
|
+
alert("Por favor, insira um t\xEDtulo para a quest antes de criar o documento.");
|
|
10129
|
+
return;
|
|
10130
|
+
}
|
|
10131
|
+
if (!create_google_doc_action) return;
|
|
10132
|
+
try {
|
|
10133
|
+
setIsLoadingDocs(true);
|
|
10134
|
+
const res = await create_google_doc_action(standardizedName);
|
|
10135
|
+
if (res.success) {
|
|
10136
|
+
const newProp = {
|
|
10137
|
+
id: uuidv47(),
|
|
10138
|
+
key: "Google Docs",
|
|
10139
|
+
type: "links",
|
|
10140
|
+
value: [{ id: uuidv47(), name: "Abrir Documento", value: res.link }]
|
|
10141
|
+
};
|
|
10142
|
+
setCustomProps((prev) => [...prev, newProp]);
|
|
10143
|
+
if (res.link) {
|
|
10144
|
+
window.open(res.link, "_blank");
|
|
10145
|
+
}
|
|
10146
|
+
} else {
|
|
10147
|
+
alert("Erro ao criar documento: " + res.error);
|
|
10148
|
+
}
|
|
10149
|
+
} catch (error) {
|
|
10150
|
+
console.error(error);
|
|
10151
|
+
alert("Erro ao processar cria\xE7\xE3o do documento.");
|
|
10152
|
+
} finally {
|
|
10153
|
+
setIsLoadingDocs(false);
|
|
10154
|
+
}
|
|
10155
|
+
};
|
|
10057
10156
|
const handleAddProp = () => {
|
|
10058
10157
|
const newProp = createNewCustomProperty(customProps);
|
|
10059
10158
|
setCustomProps([...customProps, newProp]);
|
|
@@ -10128,7 +10227,7 @@ function InSceneQuestForm({
|
|
|
10128
10227
|
const swallow = (e) => e.stopPropagation();
|
|
10129
10228
|
const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
|
|
10130
10229
|
const availableImages = customProps.filter((p) => p.type === "images").flatMap((p) => Array.isArray(p.value) ? p.value : []).filter((img) => img.value && img.value.trim() !== "");
|
|
10131
|
-
return /* @__PURE__ */
|
|
10230
|
+
return /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
10132
10231
|
"div",
|
|
10133
10232
|
{
|
|
10134
10233
|
ref: refEl,
|
|
@@ -10140,7 +10239,7 @@ function InSceneQuestForm({
|
|
|
10140
10239
|
onContextMenu: swallow,
|
|
10141
10240
|
onDoubleClick: swallow
|
|
10142
10241
|
},
|
|
10143
|
-
/* @__PURE__ */
|
|
10242
|
+
/* @__PURE__ */ React17.createElement(
|
|
10144
10243
|
"div",
|
|
10145
10244
|
{
|
|
10146
10245
|
className: "h-[2px]",
|
|
@@ -10149,7 +10248,7 @@ function InSceneQuestForm({
|
|
|
10149
10248
|
}
|
|
10150
10249
|
}
|
|
10151
10250
|
),
|
|
10152
|
-
/* @__PURE__ */
|
|
10251
|
+
/* @__PURE__ */ React17.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React17.createElement("div", null, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React17.createElement(FiTarget, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ React17.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Nova quest")), /* @__PURE__ */ React17.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, "Criar Quest")), /* @__PURE__ */ React17.createElement(
|
|
10153
10252
|
"button",
|
|
10154
10253
|
{
|
|
10155
10254
|
type: "button",
|
|
@@ -10159,7 +10258,7 @@ function InSceneQuestForm({
|
|
|
10159
10258
|
},
|
|
10160
10259
|
"\xD7"
|
|
10161
10260
|
)),
|
|
10162
|
-
/* @__PURE__ */
|
|
10261
|
+
/* @__PURE__ */ React17.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col max-h-[68vh]" }, /* @__PURE__ */ React17.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "T\xEDtulo da Quest"), /* @__PURE__ */ React17.createElement(
|
|
10163
10262
|
"input",
|
|
10164
10263
|
{
|
|
10165
10264
|
required: true,
|
|
@@ -10173,14 +10272,14 @@ function InSceneQuestForm({
|
|
|
10173
10272
|
},
|
|
10174
10273
|
className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-2 focus:ring-indigo-400/60"
|
|
10175
10274
|
}
|
|
10176
|
-
), /* @__PURE__ */
|
|
10275
|
+
), /* @__PURE__ */ React17.createElement("div", { className: "pt-1 flex items-center gap-1.5 min-w-0" }, /* @__PURE__ */ React17.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ React17.createElement(
|
|
10177
10276
|
"p",
|
|
10178
10277
|
{
|
|
10179
10278
|
className: "text-xs text-indigo-300 font-medium truncate",
|
|
10180
10279
|
title: standardizedName
|
|
10181
10280
|
},
|
|
10182
10281
|
standardizedName
|
|
10183
|
-
), /* @__PURE__ */
|
|
10282
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10184
10283
|
"button",
|
|
10185
10284
|
{
|
|
10186
10285
|
type: "button",
|
|
@@ -10188,34 +10287,34 @@ function InSceneQuestForm({
|
|
|
10188
10287
|
className: `p-1 rounded-md transition-all hover:bg-white/5 ${isNameCopied ? "text-green-400 scale-110" : "text-slate-500 hover:text-indigo-400"} flex-shrink-0`,
|
|
10189
10288
|
title: isNameCopied ? "Nome Copiado!" : "Copiar nome formatado"
|
|
10190
10289
|
},
|
|
10191
|
-
isNameCopied ? /* @__PURE__ */
|
|
10192
|
-
))), /* @__PURE__ */
|
|
10290
|
+
isNameCopied ? /* @__PURE__ */ React17.createElement(FiCheck9, { size: 10 }) : /* @__PURE__ */ React17.createElement(FiCopy3, { size: 10 })
|
|
10291
|
+
))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Status da Quest"), /* @__PURE__ */ React17.createElement("div", { className: "relative" }, /* @__PURE__ */ React17.createElement(
|
|
10193
10292
|
"button",
|
|
10194
10293
|
{
|
|
10195
10294
|
type: "button",
|
|
10196
10295
|
onClick: () => setIsStatusDropdownOpen(!isStatusDropdownOpen),
|
|
10197
10296
|
className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 transition-colors flex items-center justify-between"
|
|
10198
10297
|
},
|
|
10199
|
-
/* @__PURE__ */
|
|
10298
|
+
/* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React17.createElement(
|
|
10200
10299
|
"span",
|
|
10201
10300
|
{
|
|
10202
10301
|
className: "w-3 h-3 rounded-full shadow-[0_0_8px_rgba(0,0,0,0.5)]",
|
|
10203
10302
|
style: { backgroundColor: QUEST_STATUS_COLORS2[status] }
|
|
10204
10303
|
}
|
|
10205
|
-
), /* @__PURE__ */
|
|
10206
|
-
/* @__PURE__ */
|
|
10304
|
+
), /* @__PURE__ */ React17.createElement("span", { className: "text-slate-200 font-medium" }, status)),
|
|
10305
|
+
/* @__PURE__ */ React17.createElement(
|
|
10207
10306
|
FiChevronDown6,
|
|
10208
10307
|
{
|
|
10209
10308
|
className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}`
|
|
10210
10309
|
}
|
|
10211
10310
|
)
|
|
10212
|
-
), isStatusDropdownOpen && /* @__PURE__ */
|
|
10311
|
+
), isStatusDropdownOpen && /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
10213
10312
|
"div",
|
|
10214
10313
|
{
|
|
10215
10314
|
className: "fixed inset-0 z-40",
|
|
10216
10315
|
onClick: () => setIsStatusDropdownOpen(false)
|
|
10217
10316
|
}
|
|
10218
|
-
), /* @__PURE__ */
|
|
10317
|
+
), /* @__PURE__ */ React17.createElement("ul", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-800 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden" }, Object.keys(QUEST_STATUS_COLORS2).map((s) => /* @__PURE__ */ React17.createElement(
|
|
10219
10318
|
"li",
|
|
10220
10319
|
{
|
|
10221
10320
|
key: s,
|
|
@@ -10226,7 +10325,7 @@ function InSceneQuestForm({
|
|
|
10226
10325
|
},
|
|
10227
10326
|
className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${status === s ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
|
|
10228
10327
|
},
|
|
10229
|
-
/* @__PURE__ */
|
|
10328
|
+
/* @__PURE__ */ React17.createElement(
|
|
10230
10329
|
"span",
|
|
10231
10330
|
{
|
|
10232
10331
|
className: "w-3 h-3 rounded-full",
|
|
@@ -10234,11 +10333,11 @@ function InSceneQuestForm({
|
|
|
10234
10333
|
}
|
|
10235
10334
|
),
|
|
10236
10335
|
s
|
|
10237
|
-
)))))), /* @__PURE__ */
|
|
10336
|
+
)))))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Milestones"), /* @__PURE__ */ React17.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 focus-within:ring-2 focus-within:ring-indigo-400/60 transition-all cursor-text` }, milestoneIds.map((id) => {
|
|
10238
10337
|
const ms = (milestones || []).find((m) => m.id === id);
|
|
10239
10338
|
if (!ms) return null;
|
|
10240
|
-
return /* @__PURE__ */
|
|
10241
|
-
}), /* @__PURE__ */
|
|
10339
|
+
return /* @__PURE__ */ React17.createElement("span", { key: id, className: "flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-medium border bg-sky-500/20 text-sky-200 border-sky-500/30" }, ms.name, /* @__PURE__ */ React17.createElement("button", { type: "button", onClick: () => handleRemoveMilestone(id), className: "hover:text-white transition-colors" }, /* @__PURE__ */ React17.createElement(FiX5, { size: 12 })));
|
|
10340
|
+
}), /* @__PURE__ */ React17.createElement(
|
|
10242
10341
|
"input",
|
|
10243
10342
|
{
|
|
10244
10343
|
type: "text",
|
|
@@ -10257,7 +10356,7 @@ function InSceneQuestForm({
|
|
|
10257
10356
|
placeholder: milestoneIds.length === 0 ? "Adicionar milestone..." : "",
|
|
10258
10357
|
autoComplete: "off"
|
|
10259
10358
|
}
|
|
10260
|
-
), showMilestoneSuggestions && filteredMilestones.length > 0 && /* @__PURE__ */
|
|
10359
|
+
), showMilestoneSuggestions && filteredMilestones.length > 0 && /* @__PURE__ */ React17.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-[100] w-full mt-1 max-h-40 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, filteredMilestones.map((ms) => /* @__PURE__ */ React17.createElement(
|
|
10261
10360
|
"li",
|
|
10262
10361
|
{
|
|
10263
10362
|
key: ms.id,
|
|
@@ -10268,7 +10367,7 @@ function InSceneQuestForm({
|
|
|
10268
10367
|
}
|
|
10269
10368
|
},
|
|
10270
10369
|
ms.name
|
|
10271
|
-
))), showMilestoneSuggestions && milestoneInput.trim() && !filteredMilestones.some((m) => m.name.toLowerCase() === milestoneInput.toLowerCase().trim()) && /* @__PURE__ */
|
|
10370
|
+
))), showMilestoneSuggestions && milestoneInput.trim() && !filteredMilestones.some((m) => m.name.toLowerCase() === milestoneInput.toLowerCase().trim()) && /* @__PURE__ */ React17.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-[100] w-full mt-1 rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, /* @__PURE__ */ React17.createElement(
|
|
10272
10371
|
"li",
|
|
10273
10372
|
{
|
|
10274
10373
|
className: "px-3 py-3 text-sm cursor-pointer hover:bg-indigo-600/50 flex flex-col gap-0.5",
|
|
@@ -10277,13 +10376,13 @@ function InSceneQuestForm({
|
|
|
10277
10376
|
handleAddMilestone({ name: milestoneInput });
|
|
10278
10377
|
}
|
|
10279
10378
|
},
|
|
10280
|
-
/* @__PURE__ */
|
|
10281
|
-
/* @__PURE__ */
|
|
10282
|
-
)))), /* @__PURE__ */
|
|
10379
|
+
/* @__PURE__ */ React17.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500" }, "Criar novo milestone"),
|
|
10380
|
+
/* @__PURE__ */ React17.createElement("span", { className: "text-white" }, '"', milestoneInput, '"')
|
|
10381
|
+
)))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Depend\xEAncias (Quest Chain)"), /* @__PURE__ */ React17.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 focus-within:ring-2 focus-within:ring-indigo-400/60 transition-all cursor-text` }, dependencyIds.map((id) => {
|
|
10283
10382
|
const depNode = availableNodes.find((n) => String(n.id) === String(id));
|
|
10284
10383
|
if (!depNode) return null;
|
|
10285
|
-
return /* @__PURE__ */
|
|
10286
|
-
}), /* @__PURE__ */
|
|
10384
|
+
return /* @__PURE__ */ React17.createElement("span", { key: id, className: "flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-medium border bg-amber-500/20 text-amber-200 border-amber-500/30" }, depNode.raw_title || depNode.name, /* @__PURE__ */ React17.createElement("button", { type: "button", onClick: () => handleRemoveDependency(id), className: "hover:text-white transition-colors" }, /* @__PURE__ */ React17.createElement(FiX5, { size: 12 })));
|
|
10385
|
+
}), /* @__PURE__ */ React17.createElement(
|
|
10287
10386
|
"input",
|
|
10288
10387
|
{
|
|
10289
10388
|
type: "text",
|
|
@@ -10302,7 +10401,7 @@ function InSceneQuestForm({
|
|
|
10302
10401
|
placeholder: dependencyIds.length === 0 ? "Adicionar quest pr\xE9-requisito..." : "",
|
|
10303
10402
|
autoComplete: "off"
|
|
10304
10403
|
}
|
|
10305
|
-
), showDependencySuggestions && filteredDependencies.length > 0 && /* @__PURE__ */
|
|
10404
|
+
), showDependencySuggestions && filteredDependencies.length > 0 && /* @__PURE__ */ React17.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-[100] w-full mt-1 max-h-40 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, filteredDependencies.map((q) => /* @__PURE__ */ React17.createElement(
|
|
10306
10405
|
"li",
|
|
10307
10406
|
{
|
|
10308
10407
|
key: q.id,
|
|
@@ -10312,23 +10411,23 @@ function InSceneQuestForm({
|
|
|
10312
10411
|
handleAddDependency(q);
|
|
10313
10412
|
}
|
|
10314
10413
|
},
|
|
10315
|
-
/* @__PURE__ */
|
|
10316
|
-
/* @__PURE__ */
|
|
10317
|
-
))))), /* @__PURE__ */
|
|
10414
|
+
/* @__PURE__ */ React17.createElement("span", { className: "truncate" }, q.raw_title || q.name),
|
|
10415
|
+
/* @__PURE__ */ React17.createElement("span", { className: "text-[10px] text-slate-500" }, q.status || "Backlog")
|
|
10416
|
+
))))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Assignee (Respons\xE1vel)"), /* @__PURE__ */ React17.createElement("div", { className: "relative" }, /* @__PURE__ */ React17.createElement(
|
|
10318
10417
|
"button",
|
|
10319
10418
|
{
|
|
10320
10419
|
type: "button",
|
|
10321
10420
|
onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
|
|
10322
10421
|
className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 transition-colors flex items-center justify-between"
|
|
10323
10422
|
},
|
|
10324
|
-
/* @__PURE__ */
|
|
10325
|
-
/* @__PURE__ */
|
|
10423
|
+
/* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React17.createElement(FiUser2, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ React17.createElement("span", { className: "text-slate-200 font-medium" }, ((_a = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _a.name) || ((_b = viewMembers.find((m) => m.id === assigneeId)) == null ? void 0 : _b.email) || "Nenhum")),
|
|
10424
|
+
/* @__PURE__ */ React17.createElement(
|
|
10326
10425
|
FiChevronDown6,
|
|
10327
10426
|
{
|
|
10328
10427
|
className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}`
|
|
10329
10428
|
}
|
|
10330
10429
|
)
|
|
10331
|
-
), isAssigneeDropdownOpen && /* @__PURE__ */
|
|
10430
|
+
), isAssigneeDropdownOpen && /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
10332
10431
|
"div",
|
|
10333
10432
|
{
|
|
10334
10433
|
className: "fixed inset-0 z-40",
|
|
@@ -10337,7 +10436,7 @@ function InSceneQuestForm({
|
|
|
10337
10436
|
setAssigneeSearchQuery("");
|
|
10338
10437
|
}
|
|
10339
10438
|
}
|
|
10340
|
-
), /* @__PURE__ */
|
|
10439
|
+
), /* @__PURE__ */ React17.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ React17.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ React17.createElement(FiSearch5, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ React17.createElement(
|
|
10341
10440
|
"input",
|
|
10342
10441
|
{
|
|
10343
10442
|
type: "text",
|
|
@@ -10348,7 +10447,7 @@ function InSceneQuestForm({
|
|
|
10348
10447
|
className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
|
|
10349
10448
|
onClick: (e) => e.stopPropagation()
|
|
10350
10449
|
}
|
|
10351
|
-
)), /* @__PURE__ */
|
|
10450
|
+
)), /* @__PURE__ */ React17.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ React17.createElement(
|
|
10352
10451
|
"li",
|
|
10353
10452
|
{
|
|
10354
10453
|
onClick: () => {
|
|
@@ -10362,7 +10461,7 @@ function InSceneQuestForm({
|
|
|
10362
10461
|
), viewMembers.filter((member) => {
|
|
10363
10462
|
const search = assigneeSearchQuery.toLowerCase();
|
|
10364
10463
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
10365
|
-
}).map((member) => /* @__PURE__ */
|
|
10464
|
+
}).map((member) => /* @__PURE__ */ React17.createElement(
|
|
10366
10465
|
"li",
|
|
10367
10466
|
{
|
|
10368
10467
|
key: member.id,
|
|
@@ -10377,7 +10476,7 @@ function InSceneQuestForm({
|
|
|
10377
10476
|
)), viewMembers.filter((member) => {
|
|
10378
10477
|
const search = assigneeSearchQuery.toLowerCase();
|
|
10379
10478
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
10380
|
-
}).length === 0 && assigneeSearchQuery && /* @__PURE__ */
|
|
10479
|
+
}).length === 0 && assigneeSearchQuery && /* @__PURE__ */ React17.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado")))))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Prazo / Data"), !questDate && /* @__PURE__ */ React17.createElement(
|
|
10381
10480
|
"button",
|
|
10382
10481
|
{
|
|
10383
10482
|
type: "button",
|
|
@@ -10385,7 +10484,7 @@ function InSceneQuestForm({
|
|
|
10385
10484
|
className: "text-[10px] text-indigo-400 hover:text-indigo-300 font-bold uppercase transition-colors"
|
|
10386
10485
|
},
|
|
10387
10486
|
"+ Adicionar"
|
|
10388
|
-
)), questDate && /* @__PURE__ */
|
|
10487
|
+
)), questDate && /* @__PURE__ */ React17.createElement("div", { className: "p-3 bg-slate-900/60 rounded-xl border border-white/10 space-y-3 relative group" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ React17.createElement("div", { className: "flex-1 flex items-center gap-1 rounded-lg bg-slate-800/50 p-1" }, !questDate.confirmed ? ["Data", "Date Interval"].map((t) => /* @__PURE__ */ React17.createElement(
|
|
10389
10488
|
"button",
|
|
10390
10489
|
{
|
|
10391
10490
|
key: t,
|
|
@@ -10403,7 +10502,7 @@ function InSceneQuestForm({
|
|
|
10403
10502
|
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"}`
|
|
10404
10503
|
},
|
|
10405
10504
|
t === "Date Interval" ? "Intervalo" : t
|
|
10406
|
-
)) : /* @__PURE__ */
|
|
10505
|
+
)) : /* @__PURE__ */ React17.createElement("div", { className: "flex-1 flex items-center gap-2 px-2 py-1.5" }, /* @__PURE__ */ React17.createElement(FiCalendar, { className: "text-indigo-400", size: 12 }), /* @__PURE__ */ React17.createElement("span", { className: "text-xs font-medium text-slate-200" }, questDate.type === "Data" ? questDate.value || "Sem data" : `${questDate.start || "In\xEDcio"} - ${questDate.end || "Fim"}`))), /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-1" }, !questDate.confirmed ? /* @__PURE__ */ React17.createElement(
|
|
10407
10506
|
"button",
|
|
10408
10507
|
{
|
|
10409
10508
|
type: "button",
|
|
@@ -10411,8 +10510,8 @@ function InSceneQuestForm({
|
|
|
10411
10510
|
className: "w-8 h-8 grid place-items-center rounded-lg bg-green-500/10 text-green-400 hover:bg-green-500/20 transition-colors",
|
|
10412
10511
|
title: "Confirmar data"
|
|
10413
10512
|
},
|
|
10414
|
-
/* @__PURE__ */
|
|
10415
|
-
) : /* @__PURE__ */
|
|
10513
|
+
/* @__PURE__ */ React17.createElement(FiCheck9, { size: 14 })
|
|
10514
|
+
) : /* @__PURE__ */ React17.createElement(
|
|
10416
10515
|
"button",
|
|
10417
10516
|
{
|
|
10418
10517
|
type: "button",
|
|
@@ -10420,8 +10519,8 @@ function InSceneQuestForm({
|
|
|
10420
10519
|
className: "w-8 h-8 grid place-items-center rounded-lg bg-indigo-500/10 text-indigo-400 hover:bg-indigo-500/20 transition-colors",
|
|
10421
10520
|
title: "Editar data"
|
|
10422
10521
|
},
|
|
10423
|
-
/* @__PURE__ */
|
|
10424
|
-
), /* @__PURE__ */
|
|
10522
|
+
/* @__PURE__ */ React17.createElement(FiEdit26, { size: 14 })
|
|
10523
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10425
10524
|
"button",
|
|
10426
10525
|
{
|
|
10427
10526
|
type: "button",
|
|
@@ -10429,8 +10528,8 @@ function InSceneQuestForm({
|
|
|
10429
10528
|
className: "w-8 h-8 grid place-items-center rounded-lg bg-red-500/10 text-red-400 hover:bg-red-500/20 transition-colors",
|
|
10430
10529
|
title: "Remover data"
|
|
10431
10530
|
},
|
|
10432
|
-
/* @__PURE__ */
|
|
10433
|
-
))), !questDate.confirmed && /* @__PURE__ */
|
|
10531
|
+
/* @__PURE__ */ React17.createElement(FiX5, { size: 14 })
|
|
10532
|
+
))), !questDate.confirmed && /* @__PURE__ */ React17.createElement("div", { className: "animate-in fade-in slide-in-from-top-1 duration-200" }, questDate.type === "Data" && /* @__PURE__ */ React17.createElement(
|
|
10434
10533
|
"input",
|
|
10435
10534
|
{
|
|
10436
10535
|
type: "text",
|
|
@@ -10450,7 +10549,7 @@ function InSceneQuestForm({
|
|
|
10450
10549
|
maxLength: "10",
|
|
10451
10550
|
className: "w-full bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-400/60"
|
|
10452
10551
|
}
|
|
10453
|
-
), questDate.type === "Date Interval" && /* @__PURE__ */
|
|
10552
|
+
), questDate.type === "Date Interval" && /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React17.createElement(
|
|
10454
10553
|
"input",
|
|
10455
10554
|
{
|
|
10456
10555
|
type: "text",
|
|
@@ -10470,7 +10569,7 @@ function InSceneQuestForm({
|
|
|
10470
10569
|
maxLength: "10",
|
|
10471
10570
|
className: "flex-1 bg-slate-800/70 p-2 text-xs rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-400/60"
|
|
10472
10571
|
}
|
|
10473
|
-
), /* @__PURE__ */
|
|
10572
|
+
), /* @__PURE__ */ React17.createElement("span", { className: "text-slate-500" }, "-"), /* @__PURE__ */ React17.createElement(
|
|
10474
10573
|
"input",
|
|
10475
10574
|
{
|
|
10476
10575
|
type: "text",
|
|
@@ -10490,39 +10589,39 @@ function InSceneQuestForm({
|
|
|
10490
10589
|
maxLength: "10",
|
|
10491
10590
|
className: "flex-1 bg-slate-800/70 p-2 text-xs rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-400/60"
|
|
10492
10591
|
}
|
|
10493
|
-
))))), /* @__PURE__ */
|
|
10592
|
+
))))), /* @__PURE__ */ React17.createElement("div", { className: "pt-4 border-t border-white/5 mt-2" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center justify-between mb-3" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React17.createElement(FiRepeat, { className: `w-3.5 h-3.5 ${recurrenceConfig.enabled ? "text-indigo-400" : "text-slate-500"}` }), /* @__PURE__ */ React17.createElement("span", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Recorr\xEAncia")), /* @__PURE__ */ React17.createElement(
|
|
10494
10593
|
"button",
|
|
10495
10594
|
{
|
|
10496
10595
|
type: "button",
|
|
10497
10596
|
onClick: () => setRecurrenceConfig((prev) => ({ ...prev, enabled: !prev.enabled })),
|
|
10498
10597
|
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"} cursor-pointer`
|
|
10499
10598
|
},
|
|
10500
|
-
/* @__PURE__ */
|
|
10501
|
-
)), recurrenceConfig.enabled && /* @__PURE__ */
|
|
10599
|
+
/* @__PURE__ */ React17.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"}` })
|
|
10600
|
+
)), recurrenceConfig.enabled && /* @__PURE__ */ React17.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__ */ React17.createElement("div", { className: "grid grid-cols-2 gap-3" }, /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React17.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Tipo"), /* @__PURE__ */ React17.createElement(
|
|
10502
10601
|
"select",
|
|
10503
10602
|
{
|
|
10504
10603
|
value: recurrenceConfig.type,
|
|
10505
10604
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, type: e.target.value })),
|
|
10506
10605
|
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 focus:ring-1 focus:ring-indigo-500/50"
|
|
10507
10606
|
},
|
|
10508
|
-
/* @__PURE__ */
|
|
10509
|
-
/* @__PURE__ */
|
|
10510
|
-
/* @__PURE__ */
|
|
10511
|
-
)), recurrenceConfig.type === "weekly" && /* @__PURE__ */
|
|
10607
|
+
/* @__PURE__ */ React17.createElement("option", { value: "daily" }, "Di\xE1ria"),
|
|
10608
|
+
/* @__PURE__ */ React17.createElement("option", { value: "weekly" }, "Semanal"),
|
|
10609
|
+
/* @__PURE__ */ React17.createElement("option", { value: "custom" }, "Data Espec\xEDfica")
|
|
10610
|
+
)), recurrenceConfig.type === "weekly" && /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React17.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Dia da Semana"), /* @__PURE__ */ React17.createElement(
|
|
10512
10611
|
"select",
|
|
10513
10612
|
{
|
|
10514
10613
|
value: recurrenceConfig.day_of_week,
|
|
10515
10614
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, day_of_week: parseInt(e.target.value, 10) })),
|
|
10516
10615
|
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 focus:ring-1 focus:ring-indigo-500/50"
|
|
10517
10616
|
},
|
|
10518
|
-
/* @__PURE__ */
|
|
10519
|
-
/* @__PURE__ */
|
|
10520
|
-
/* @__PURE__ */
|
|
10521
|
-
/* @__PURE__ */
|
|
10522
|
-
/* @__PURE__ */
|
|
10523
|
-
/* @__PURE__ */
|
|
10524
|
-
/* @__PURE__ */
|
|
10525
|
-
)), recurrenceConfig.type === "custom" && /* @__PURE__ */
|
|
10617
|
+
/* @__PURE__ */ React17.createElement("option", { value: 1 }, "Segunda-feira"),
|
|
10618
|
+
/* @__PURE__ */ React17.createElement("option", { value: 2 }, "Ter\xE7a-feira"),
|
|
10619
|
+
/* @__PURE__ */ React17.createElement("option", { value: 3 }, "Quarta-feira"),
|
|
10620
|
+
/* @__PURE__ */ React17.createElement("option", { value: 4 }, "Quinta-feira"),
|
|
10621
|
+
/* @__PURE__ */ React17.createElement("option", { value: 5 }, "Sexta-feira"),
|
|
10622
|
+
/* @__PURE__ */ React17.createElement("option", { value: 6 }, "S\xE1bado"),
|
|
10623
|
+
/* @__PURE__ */ React17.createElement("option", { value: 0 }, "Domingo")
|
|
10624
|
+
)), recurrenceConfig.type === "custom" && /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React17.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Pr\xF3xima Data"), /* @__PURE__ */ React17.createElement(
|
|
10526
10625
|
"input",
|
|
10527
10626
|
{
|
|
10528
10627
|
type: "text",
|
|
@@ -10531,23 +10630,23 @@ function InSceneQuestForm({
|
|
|
10531
10630
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, custom_date: e.target.value })),
|
|
10532
10631
|
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 focus:ring-1 focus:ring-indigo-500/50"
|
|
10533
10632
|
}
|
|
10534
|
-
))), /* @__PURE__ */
|
|
10633
|
+
))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React17.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Pr\xF3ximo Respons\xE1vel"), /* @__PURE__ */ React17.createElement("div", { className: "relative" }, /* @__PURE__ */ React17.createElement(
|
|
10535
10634
|
"select",
|
|
10536
10635
|
{
|
|
10537
10636
|
value: recurrenceConfig.next_assignee_id,
|
|
10538
10637
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, next_assignee_id: e.target.value })),
|
|
10539
10638
|
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 focus:ring-1 focus:ring-indigo-500/50"
|
|
10540
10639
|
},
|
|
10541
|
-
/* @__PURE__ */
|
|
10542
|
-
viewMembers.map((member) => /* @__PURE__ */
|
|
10543
|
-
), /* @__PURE__ */
|
|
10640
|
+
/* @__PURE__ */ React17.createElement("option", { value: "" }, "Sem respons\xE1vel"),
|
|
10641
|
+
viewMembers.map((member) => /* @__PURE__ */ React17.createElement("option", { key: member.id, value: member.id }, member.name || member.email))
|
|
10642
|
+
), /* @__PURE__ */ React17.createElement(FiUser2, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-slate-500" }), /* @__PURE__ */ React17.createElement(FiChevronDown6, { className: "absolute right-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-slate-500 pointer-events-none" }))))), /* @__PURE__ */ React17.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React17.createElement(
|
|
10544
10643
|
QuestReviewStackEditor,
|
|
10545
10644
|
{
|
|
10546
10645
|
reviewStack,
|
|
10547
10646
|
onChange: setReviewStack,
|
|
10548
10647
|
viewMembers
|
|
10549
10648
|
}
|
|
10550
|
-
)), /* @__PURE__ */
|
|
10649
|
+
)), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React17.createElement("div", { className: "relative group min-h-[80px] bg-slate-800/70 p-2.5 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React17.createElement(
|
|
10551
10650
|
DescriptionDisplay,
|
|
10552
10651
|
{
|
|
10553
10652
|
description,
|
|
@@ -10557,31 +10656,42 @@ function InSceneQuestForm({
|
|
|
10557
10656
|
onMentionClick,
|
|
10558
10657
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
10559
10658
|
}
|
|
10560
|
-
), /* @__PURE__ */
|
|
10659
|
+
), /* @__PURE__ */ React17.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React17.createElement(
|
|
10561
10660
|
"button",
|
|
10562
10661
|
{
|
|
10563
10662
|
type: "button",
|
|
10564
10663
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
10565
10664
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors"
|
|
10566
10665
|
},
|
|
10567
|
-
/* @__PURE__ */
|
|
10568
|
-
)), !description && /* @__PURE__ */
|
|
10666
|
+
/* @__PURE__ */ React17.createElement(FiEdit26, { size: 14 })
|
|
10667
|
+
)), !description && /* @__PURE__ */ React17.createElement(
|
|
10569
10668
|
"div",
|
|
10570
10669
|
{
|
|
10571
10670
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
10572
10671
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
10573
10672
|
},
|
|
10574
10673
|
"Adicionar descri\xE7\xE3o..."
|
|
10575
|
-
))), /* @__PURE__ */
|
|
10674
|
+
))), /* @__PURE__ */ React17.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React17.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React17.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider" }, "Propriedades Adicionais"), /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2" }, create_google_doc_action && /* @__PURE__ */ React17.createElement(
|
|
10675
|
+
"button",
|
|
10676
|
+
{
|
|
10677
|
+
type: "button",
|
|
10678
|
+
onClick: handleCreateGoogleDoc,
|
|
10679
|
+
disabled: isLoadingDocs,
|
|
10680
|
+
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-transparent hover:bg-white/5 text-slate-300 border border-white/10 transition-all disabled:opacity-50 disabled:cursor-not-allowed group",
|
|
10681
|
+
title: "Criar Documento no Google Docs"
|
|
10682
|
+
},
|
|
10683
|
+
isLoadingDocs ? /* @__PURE__ */ React17.createElement(AiOutlineLoading3Quarters2, { className: "animate-spin", size: 14 }) : /* @__PURE__ */ React17.createElement(GoogleDocsIcon_default, { size: 14, className: "group-hover:scale-110 transition-transform" }),
|
|
10684
|
+
isLoadingDocs ? "Criando..." : "Google Doc"
|
|
10685
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10576
10686
|
"button",
|
|
10577
10687
|
{
|
|
10578
10688
|
type: "button",
|
|
10579
10689
|
onClick: handleAddProp,
|
|
10580
10690
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
|
|
10581
10691
|
},
|
|
10582
|
-
/* @__PURE__ */
|
|
10692
|
+
/* @__PURE__ */ React17.createElement(FiPlus6, { size: 14 }),
|
|
10583
10693
|
" Adicionar"
|
|
10584
|
-
)), /* @__PURE__ */
|
|
10694
|
+
))), /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React17.createElement(
|
|
10585
10695
|
CustomPropertyDisplay,
|
|
10586
10696
|
{
|
|
10587
10697
|
key: prop.id,
|
|
@@ -10594,7 +10704,7 @@ function InSceneQuestForm({
|
|
|
10594
10704
|
),
|
|
10595
10705
|
onUploadFile
|
|
10596
10706
|
}
|
|
10597
|
-
)), /* @__PURE__ */
|
|
10707
|
+
)), /* @__PURE__ */ React17.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Tamanho no Node (Size)"), /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => /* @__PURE__ */ React17.createElement(
|
|
10598
10708
|
"button",
|
|
10599
10709
|
{
|
|
10600
10710
|
key: s,
|
|
@@ -10605,37 +10715,37 @@ function InSceneQuestForm({
|
|
|
10605
10715
|
},
|
|
10606
10716
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
10607
10717
|
},
|
|
10608
|
-
/* @__PURE__ */
|
|
10718
|
+
/* @__PURE__ */ React17.createElement(
|
|
10609
10719
|
"div",
|
|
10610
10720
|
{
|
|
10611
10721
|
className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${size === s ? "bg-indigo-500 border-indigo-500" : "border-slate-600 bg-transparent group-hover:border-slate-500"}`
|
|
10612
10722
|
},
|
|
10613
|
-
size === s && /* @__PURE__ */
|
|
10723
|
+
size === s && /* @__PURE__ */ React17.createElement(FiCheck9, { size: 12, className: "text-white" })
|
|
10614
10724
|
),
|
|
10615
|
-
/* @__PURE__ */
|
|
10725
|
+
/* @__PURE__ */ React17.createElement(
|
|
10616
10726
|
"span",
|
|
10617
10727
|
{
|
|
10618
10728
|
className: `text-sm capitalize transition-colors ${size === s ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
10619
10729
|
},
|
|
10620
10730
|
s
|
|
10621
10731
|
)
|
|
10622
|
-
)))), /* @__PURE__ */
|
|
10732
|
+
)))), /* @__PURE__ */ React17.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React17.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Tipos Adicionais"), /* @__PURE__ */ React17.createElement("div", { className: "relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 focus-within:ring-2 focus-within:ring-indigo-400/60 transition-all" }, types.map((t, index) => /* @__PURE__ */ React17.createElement(
|
|
10623
10733
|
"span",
|
|
10624
10734
|
{
|
|
10625
10735
|
key: index,
|
|
10626
10736
|
className: `flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-medium border ${t === "quest" ? "bg-sky-500/20 text-sky-200 border-sky-500/30" : "bg-indigo-500/30 text-indigo-100 border-indigo-500/20"}`
|
|
10627
10737
|
},
|
|
10628
10738
|
t,
|
|
10629
|
-
t !== "quest" && /* @__PURE__ */
|
|
10739
|
+
t !== "quest" && /* @__PURE__ */ React17.createElement(
|
|
10630
10740
|
"button",
|
|
10631
10741
|
{
|
|
10632
10742
|
type: "button",
|
|
10633
10743
|
onClick: () => handleRemoveType(index),
|
|
10634
10744
|
className: "hover:text-white transition-colors"
|
|
10635
10745
|
},
|
|
10636
|
-
/* @__PURE__ */
|
|
10746
|
+
/* @__PURE__ */ React17.createElement(FiX5, { size: 12 })
|
|
10637
10747
|
)
|
|
10638
|
-
)), /* @__PURE__ */
|
|
10748
|
+
)), /* @__PURE__ */ React17.createElement(
|
|
10639
10749
|
"input",
|
|
10640
10750
|
{
|
|
10641
10751
|
type: "text",
|
|
@@ -10648,7 +10758,7 @@ function InSceneQuestForm({
|
|
|
10648
10758
|
className: "flex-1 bg-transparent text-sm min-w-[80px] focus:outline-none text-slate-200",
|
|
10649
10759
|
autoComplete: "off"
|
|
10650
10760
|
}
|
|
10651
|
-
)))), /* @__PURE__ */
|
|
10761
|
+
)))), /* @__PURE__ */ React17.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React17.createElement(
|
|
10652
10762
|
"button",
|
|
10653
10763
|
{
|
|
10654
10764
|
type: "button",
|
|
@@ -10656,7 +10766,7 @@ function InSceneQuestForm({
|
|
|
10656
10766
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
10657
10767
|
},
|
|
10658
10768
|
"Cancelar"
|
|
10659
|
-
), /* @__PURE__ */
|
|
10769
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10660
10770
|
"button",
|
|
10661
10771
|
{
|
|
10662
10772
|
type: "submit",
|
|
@@ -10664,7 +10774,7 @@ function InSceneQuestForm({
|
|
|
10664
10774
|
},
|
|
10665
10775
|
"Salvar Quest"
|
|
10666
10776
|
)))
|
|
10667
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
10777
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React17.createElement(
|
|
10668
10778
|
DescriptionEditModal,
|
|
10669
10779
|
{
|
|
10670
10780
|
isOpen: isDescriptionModalOpen,
|
|
@@ -10680,9 +10790,10 @@ function InSceneQuestForm({
|
|
|
10680
10790
|
}
|
|
10681
10791
|
|
|
10682
10792
|
// src/components/NodeDetailsPanel.jsx
|
|
10683
|
-
import
|
|
10793
|
+
import React18, { useState as useState18, useEffect as useEffect15, useRef as useRef13 } from "react";
|
|
10684
10794
|
import { v4 as uuidv48 } from "uuid";
|
|
10685
10795
|
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";
|
|
10796
|
+
import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters3 } from "react-icons/ai";
|
|
10686
10797
|
function NodeDetailsPanel({
|
|
10687
10798
|
node,
|
|
10688
10799
|
onClose,
|
|
@@ -10701,7 +10812,8 @@ function NodeDetailsPanel({
|
|
|
10701
10812
|
onIntensityChange,
|
|
10702
10813
|
onUploadFile,
|
|
10703
10814
|
userRole,
|
|
10704
|
-
currentDatasetName
|
|
10815
|
+
currentDatasetName,
|
|
10816
|
+
create_google_doc_action
|
|
10705
10817
|
}) {
|
|
10706
10818
|
const [name, setName] = useState18((node == null ? void 0 : node.name) ?? "");
|
|
10707
10819
|
const [types, setTypes] = useState18([]);
|
|
@@ -10717,6 +10829,7 @@ function NodeDetailsPanel({
|
|
|
10717
10829
|
const [isReadMode, setIsReadMode] = useState18(false);
|
|
10718
10830
|
const [existingSections, setExistingSections] = useState18((node == null ? void 0 : node.description_sections) || []);
|
|
10719
10831
|
const [isSaving, setIsSaving] = useState18(false);
|
|
10832
|
+
const [isLoadingDocs, setIsLoadingDocs] = useState18(false);
|
|
10720
10833
|
const [isLinkCopied, setIsLinkCopied] = useState18(false);
|
|
10721
10834
|
const [useImageAsTexture, setUseImageAsTexture] = useState18(() => {
|
|
10722
10835
|
if ((node == null ? void 0 : node.useImageAsTexture) === "true") return true;
|
|
@@ -10871,6 +10984,39 @@ function NodeDetailsPanel({
|
|
|
10871
10984
|
triggerAutoSave({ customProps: newProps });
|
|
10872
10985
|
}
|
|
10873
10986
|
};
|
|
10987
|
+
const handleCreateGoogleDoc = async () => {
|
|
10988
|
+
if (!name.trim()) {
|
|
10989
|
+
alert("Por favor, insira um nome para o node antes de criar o documento.");
|
|
10990
|
+
return;
|
|
10991
|
+
}
|
|
10992
|
+
if (!create_google_doc_action) return;
|
|
10993
|
+
try {
|
|
10994
|
+
setIsLoadingDocs(true);
|
|
10995
|
+
const res = await create_google_doc_action(name);
|
|
10996
|
+
if (res.success) {
|
|
10997
|
+
const newProp = {
|
|
10998
|
+
id: uuidv48(),
|
|
10999
|
+
key: "Google Docs",
|
|
11000
|
+
type: "links",
|
|
11001
|
+
value: [{ id: uuidv48(), name: "Abrir Documento", value: res.link }]
|
|
11002
|
+
};
|
|
11003
|
+
const updatedProps = [...customProps, newProp];
|
|
11004
|
+
setCustomProps(updatedProps);
|
|
11005
|
+
setHasUnsavedChanges(true);
|
|
11006
|
+
triggerAutoSave({ customProps: updatedProps });
|
|
11007
|
+
if (res.link) {
|
|
11008
|
+
window.open(res.link, "_blank");
|
|
11009
|
+
}
|
|
11010
|
+
} else {
|
|
11011
|
+
alert("Erro ao criar documento: " + res.error);
|
|
11012
|
+
}
|
|
11013
|
+
} catch (error) {
|
|
11014
|
+
console.error(error);
|
|
11015
|
+
alert("Erro ao processar cria\xE7\xE3o do documento.");
|
|
11016
|
+
} finally {
|
|
11017
|
+
setIsLoadingDocs(false);
|
|
11018
|
+
}
|
|
11019
|
+
};
|
|
10874
11020
|
const handleToggleImageMode = () => {
|
|
10875
11021
|
setUseImageAsTexture(newValue);
|
|
10876
11022
|
setHasUnsavedChanges(true);
|
|
@@ -10967,7 +11113,7 @@ function NodeDetailsPanel({
|
|
|
10967
11113
|
onClose();
|
|
10968
11114
|
};
|
|
10969
11115
|
const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
|
|
10970
|
-
return /* @__PURE__ */
|
|
11116
|
+
return /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(
|
|
10971
11117
|
"div",
|
|
10972
11118
|
{
|
|
10973
11119
|
className: `ui-overlay absolute group rounded-2xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden flex flex-col ${isResizing ? "transition-none" : "transition-all duration-300 ease-out"}`,
|
|
@@ -10980,7 +11126,7 @@ function NodeDetailsPanel({
|
|
|
10980
11126
|
onContextMenu: swallow,
|
|
10981
11127
|
onDoubleClick: swallow
|
|
10982
11128
|
},
|
|
10983
|
-
/* @__PURE__ */
|
|
11129
|
+
/* @__PURE__ */ React18.createElement(
|
|
10984
11130
|
"div",
|
|
10985
11131
|
{
|
|
10986
11132
|
onPointerDown: (e) => {
|
|
@@ -10991,7 +11137,7 @@ function NodeDetailsPanel({
|
|
|
10991
11137
|
title: "Arraste para redimensionar"
|
|
10992
11138
|
}
|
|
10993
11139
|
),
|
|
10994
|
-
isReadMode ? /* @__PURE__ */
|
|
11140
|
+
isReadMode ? /* @__PURE__ */ React18.createElement(
|
|
10995
11141
|
DescriptionReadModePanel,
|
|
10996
11142
|
{
|
|
10997
11143
|
title: name || (node == null ? void 0 : node.name),
|
|
@@ -11012,23 +11158,23 @@ function NodeDetailsPanel({
|
|
|
11012
11158
|
onImageClick: handleImageClickFromText,
|
|
11013
11159
|
onSaveDescription: handleSaveDescriptionInline
|
|
11014
11160
|
}
|
|
11015
|
-
) : /* @__PURE__ */
|
|
11161
|
+
) : /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }), /* @__PURE__ */ React18.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React18.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React18.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-indigo-400/80 shadow-[0_0_18px_2px_rgba(99,102,241,0.55)]" }), /* @__PURE__ */ React18.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes do Node"), /* @__PURE__ */ React18.createElement(
|
|
11016
11162
|
"button",
|
|
11017
11163
|
{
|
|
11018
11164
|
onClick: handleCopyLink,
|
|
11019
11165
|
className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-indigo-400"}`,
|
|
11020
11166
|
title: isLinkCopied ? "Link Copiado!" : "Copiar link para este Node"
|
|
11021
11167
|
},
|
|
11022
|
-
isLinkCopied ? /* @__PURE__ */
|
|
11023
|
-
)), /* @__PURE__ */
|
|
11168
|
+
isLinkCopied ? /* @__PURE__ */ React18.createElement(FiCheck10, { size: 12 }) : /* @__PURE__ */ React18.createElement(FiLink5, { size: 12 })
|
|
11169
|
+
)), /* @__PURE__ */ React18.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, name || (node == null ? void 0 : node.name))), /* @__PURE__ */ React18.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl disabled:opacity-50", title: "Cancelar" }, "\xD7")), /* @__PURE__ */ React18.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Tipos"), /* @__PURE__ */ React18.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/60" : ""} transition-all` }, types.map((t, index) => /* @__PURE__ */ React18.createElement("span", { key: index, className: "flex items-center gap-1 bg-indigo-500/30 text-indigo-100 px-1.5 py-0.5 rounded-md text-xs font-medium border border-indigo-500/20" }, t, canEdit && /* @__PURE__ */ React18.createElement(
|
|
11024
11170
|
"button",
|
|
11025
11171
|
{
|
|
11026
11172
|
type: "button",
|
|
11027
11173
|
onClick: () => handleRemoveType(index),
|
|
11028
11174
|
className: "hover:text-white transition-colors"
|
|
11029
11175
|
},
|
|
11030
|
-
/* @__PURE__ */
|
|
11031
|
-
))), canEdit && /* @__PURE__ */
|
|
11176
|
+
/* @__PURE__ */ React18.createElement(FiX6, { size: 12 })
|
|
11177
|
+
))), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11032
11178
|
"input",
|
|
11033
11179
|
{
|
|
11034
11180
|
type: "text",
|
|
@@ -11049,7 +11195,7 @@ function NodeDetailsPanel({
|
|
|
11049
11195
|
placeholder: types.length === 0 ? "Ex.: Cliente" : "",
|
|
11050
11196
|
autoComplete: "off"
|
|
11051
11197
|
}
|
|
11052
|
-
), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */
|
|
11198
|
+
), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */ React18.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-10 w-full mt-1 max-h-40 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, filteredTypes.map((suggestedType, index) => /* @__PURE__ */ React18.createElement(
|
|
11053
11199
|
"li",
|
|
11054
11200
|
{
|
|
11055
11201
|
key: index,
|
|
@@ -11060,7 +11206,7 @@ function NodeDetailsPanel({
|
|
|
11060
11206
|
}
|
|
11061
11207
|
},
|
|
11062
11208
|
suggestedType
|
|
11063
|
-
))))), /* @__PURE__ */
|
|
11209
|
+
))))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Nome"), /* @__PURE__ */ React18.createElement(
|
|
11064
11210
|
"input",
|
|
11065
11211
|
{
|
|
11066
11212
|
type: "text",
|
|
@@ -11069,7 +11215,7 @@ function NodeDetailsPanel({
|
|
|
11069
11215
|
readOnly: !canEdit,
|
|
11070
11216
|
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"}`
|
|
11071
11217
|
}
|
|
11072
|
-
)), /* @__PURE__ */
|
|
11218
|
+
)), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React18.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React18.createElement(
|
|
11073
11219
|
DescriptionDisplay,
|
|
11074
11220
|
{
|
|
11075
11221
|
description,
|
|
@@ -11081,7 +11227,7 @@ function NodeDetailsPanel({
|
|
|
11081
11227
|
onImageClick: handleImageClickFromText,
|
|
11082
11228
|
onSaveDescription: handleSaveDescriptionInline
|
|
11083
11229
|
}
|
|
11084
|
-
), /* @__PURE__ */
|
|
11230
|
+
), /* @__PURE__ */ React18.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React18.createElement(
|
|
11085
11231
|
"button",
|
|
11086
11232
|
{
|
|
11087
11233
|
type: "button",
|
|
@@ -11089,8 +11235,8 @@ function NodeDetailsPanel({
|
|
|
11089
11235
|
className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`,
|
|
11090
11236
|
title: "Modo de Leitura"
|
|
11091
11237
|
},
|
|
11092
|
-
/* @__PURE__ */
|
|
11093
|
-
), canEdit && /* @__PURE__ */
|
|
11238
|
+
/* @__PURE__ */ React18.createElement(FiBookOpen3, { size: 14 })
|
|
11239
|
+
), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11094
11240
|
"button",
|
|
11095
11241
|
{
|
|
11096
11242
|
type: "button",
|
|
@@ -11098,17 +11244,17 @@ function NodeDetailsPanel({
|
|
|
11098
11244
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
11099
11245
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
11100
11246
|
},
|
|
11101
|
-
/* @__PURE__ */
|
|
11102
|
-
)), canEdit && !description && /* @__PURE__ */
|
|
11247
|
+
/* @__PURE__ */ React18.createElement(FiEdit27, { size: 14 })
|
|
11248
|
+
)), canEdit && !description && /* @__PURE__ */ React18.createElement(
|
|
11103
11249
|
"div",
|
|
11104
11250
|
{
|
|
11105
11251
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
11106
11252
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
11107
11253
|
},
|
|
11108
11254
|
"Adicionar descri\xE7\xE3o..."
|
|
11109
|
-
))), /* @__PURE__ */
|
|
11255
|
+
))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Size"), /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => {
|
|
11110
11256
|
const isSelected = size === s;
|
|
11111
|
-
return /* @__PURE__ */
|
|
11257
|
+
return /* @__PURE__ */ React18.createElement(
|
|
11112
11258
|
"button",
|
|
11113
11259
|
{
|
|
11114
11260
|
key: s,
|
|
@@ -11116,10 +11262,10 @@ function NodeDetailsPanel({
|
|
|
11116
11262
|
onClick: () => canEdit && handleSizeChange(s),
|
|
11117
11263
|
className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}`
|
|
11118
11264
|
},
|
|
11119
|
-
/* @__PURE__ */
|
|
11120
|
-
/* @__PURE__ */
|
|
11265
|
+
/* @__PURE__ */ React18.createElement("div", { className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent " + (canEdit ? "group-hover:border-slate-500" : "")}` }, isSelected && /* @__PURE__ */ React18.createElement(FiCheck10, { size: 12, className: "text-white" })),
|
|
11266
|
+
/* @__PURE__ */ React18.createElement("span", { className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 " + (canEdit ? "group-hover:text-slate-300" : "")}` }, s)
|
|
11121
11267
|
);
|
|
11122
|
-
}))), /* @__PURE__ */
|
|
11268
|
+
}))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Cor e Brilho"), canEdit && hasImages && /* @__PURE__ */ React18.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" }, /* @__PURE__ */ React18.createElement("div", { className: `w-4 h-4 rounded border flex items-center justify-center transition-colors ${useImageAsTexture ? "bg-indigo-500 border-indigo-500" : "border-slate-500 bg-transparent"}` }, useImageAsTexture && /* @__PURE__ */ React18.createElement(FiCheck10, { size: 12, className: "text-white" })), /* @__PURE__ */ React18.createElement(
|
|
11123
11269
|
"input",
|
|
11124
11270
|
{
|
|
11125
11271
|
type: "checkbox",
|
|
@@ -11127,14 +11273,14 @@ function NodeDetailsPanel({
|
|
|
11127
11273
|
onChange: handleToggleImageMode,
|
|
11128
11274
|
className: "hidden"
|
|
11129
11275
|
}
|
|
11130
|
-
), /* @__PURE__ */
|
|
11276
|
+
), /* @__PURE__ */ React18.createElement("span", { className: `text-xs ${useImageAsTexture ? "text-indigo-300" : "text-slate-400 group-hover:text-slate-300"}` }, "Usar imagem para representar o node"))), /* @__PURE__ */ React18.createElement(
|
|
11131
11277
|
ColorPicker,
|
|
11132
11278
|
{
|
|
11133
11279
|
color,
|
|
11134
11280
|
onChange: handleColorChange,
|
|
11135
11281
|
disabled: !canEdit || useImageAsTexture
|
|
11136
11282
|
}
|
|
11137
|
-
), /* @__PURE__ */
|
|
11283
|
+
), /* @__PURE__ */ React18.createElement("div", { className: "mt-3 flex items-center gap-3" }, /* @__PURE__ */ React18.createElement(FiSun2, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ React18.createElement(
|
|
11138
11284
|
"input",
|
|
11139
11285
|
{
|
|
11140
11286
|
type: "range",
|
|
@@ -11147,7 +11293,27 @@ function NodeDetailsPanel({
|
|
|
11147
11293
|
className: `w-full h-1.5 bg-slate-700 rounded-lg appearance-none ${canEdit ? "cursor-pointer accent-indigo-500 hover:accent-indigo-400" : "cursor-default accent-slate-500"}`,
|
|
11148
11294
|
title: `Intensidade do brilho: ${intensity}`
|
|
11149
11295
|
}
|
|
11150
|
-
), /* @__PURE__ */
|
|
11296
|
+
), /* @__PURE__ */ React18.createElement("span", { className: "text-xs text-slate-400 w-6 text-right" }, intensity)), /* @__PURE__ */ React18.createElement("span", { className: `text-xs block mt-1 transition-opacity ${useImageAsTexture ? "opacity-40" : "text-slate-400"}` }, useImageAsTexture ? "Cor da borda (definida pela imagem)" : "Ajuste a cor e a intensidade do brilho.")), /* @__PURE__ */ React18.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React18.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React18.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), /* @__PURE__ */ React18.createElement("div", { className: "flex items-center gap-2" }, canEdit && create_google_doc_action && /* @__PURE__ */ React18.createElement(
|
|
11297
|
+
"button",
|
|
11298
|
+
{
|
|
11299
|
+
type: "button",
|
|
11300
|
+
onClick: handleCreateGoogleDoc,
|
|
11301
|
+
disabled: isLoadingDocs,
|
|
11302
|
+
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-transparent hover:bg-white/5 text-slate-300 border border-white/10 transition-all disabled:opacity-50 disabled:cursor-not-allowed group",
|
|
11303
|
+
title: "Criar Documento no Google Docs"
|
|
11304
|
+
},
|
|
11305
|
+
isLoadingDocs ? /* @__PURE__ */ React18.createElement(AiOutlineLoading3Quarters3, { className: "animate-spin", size: 14 }) : /* @__PURE__ */ React18.createElement(GoogleDocsIcon_default, { size: 14, className: "group-hover:scale-110 transition-transform" }),
|
|
11306
|
+
isLoadingDocs ? "Criando..." : "Google Doc"
|
|
11307
|
+
), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11308
|
+
"button",
|
|
11309
|
+
{
|
|
11310
|
+
type: "button",
|
|
11311
|
+
onClick: handleAddProp,
|
|
11312
|
+
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
|
|
11313
|
+
},
|
|
11314
|
+
/* @__PURE__ */ React18.createElement(FiPlus7, { size: 14 }),
|
|
11315
|
+
" Adicionar"
|
|
11316
|
+
))), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React18.createElement(
|
|
11151
11317
|
CustomPropertyDisplay,
|
|
11152
11318
|
{
|
|
11153
11319
|
key: prop.id,
|
|
@@ -11162,7 +11328,7 @@ function NodeDetailsPanel({
|
|
|
11162
11328
|
onUploadFile: canEdit ? onUploadFile : void 0,
|
|
11163
11329
|
readOnly: !canEdit
|
|
11164
11330
|
}
|
|
11165
|
-
)), /* @__PURE__ */
|
|
11331
|
+
)), /* @__PURE__ */ React18.createElement("div", { ref: propsEndRef }))), currentDatasetName && /* @__PURE__ */ React18.createElement("div", { className: "pt-3 mt-4 border-t border-white/10 flex items-center justify-end gap-2 text-xs text-slate-400" }, /* @__PURE__ */ React18.createElement("span", { className: "truncate text-right" }, /* @__PURE__ */ React18.createElement("span", { className: "text-slate-200 font-medium" }, currentDatasetName)))), /* @__PURE__ */ React18.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React18.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm disabled:opacity-50" }, canEdit ? "Cancelar" : "Fechar"), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11166
11332
|
"button",
|
|
11167
11333
|
{
|
|
11168
11334
|
onClick: () => handleSave(false),
|
|
@@ -11171,10 +11337,10 @@ function NodeDetailsPanel({
|
|
|
11171
11337
|
${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 text-white"}
|
|
11172
11338
|
`
|
|
11173
11339
|
},
|
|
11174
|
-
isSaving && /* @__PURE__ */
|
|
11340
|
+
isSaving && /* @__PURE__ */ React18.createElement(FiLoader2, { className: "animate-spin" }),
|
|
11175
11341
|
isSaving ? "Salvando..." : "Salvar"
|
|
11176
11342
|
)))
|
|
11177
|
-
), isDescriptionModalOpen && canEdit && /* @__PURE__ */
|
|
11343
|
+
), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React18.createElement(
|
|
11178
11344
|
DescriptionEditModal,
|
|
11179
11345
|
{
|
|
11180
11346
|
isOpen: isDescriptionModalOpen,
|
|
@@ -11195,12 +11361,12 @@ function NodeDetailsPanel({
|
|
|
11195
11361
|
}
|
|
11196
11362
|
|
|
11197
11363
|
// src/components/QuestDetailsPanel.jsx
|
|
11198
|
-
import
|
|
11364
|
+
import React20, { useState as useState19, useEffect as useEffect16, useRef as useRef14 } from "react";
|
|
11199
11365
|
import { v4 as uuidv49 } from "uuid";
|
|
11200
11366
|
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, FiCopy as FiCopy4 } from "react-icons/fi";
|
|
11201
11367
|
|
|
11202
11368
|
// src/components/QuestTimeline.jsx
|
|
11203
|
-
import
|
|
11369
|
+
import React19 from "react";
|
|
11204
11370
|
import {
|
|
11205
11371
|
FiGitCommit,
|
|
11206
11372
|
FiUserPlus,
|
|
@@ -11239,25 +11405,25 @@ function QuestTimeline({
|
|
|
11239
11405
|
}).format(date);
|
|
11240
11406
|
};
|
|
11241
11407
|
if (timeline.length === 0) {
|
|
11242
|
-
return /* @__PURE__ */
|
|
11408
|
+
return /* @__PURE__ */ React19.createElement("div", { className: "py-6 flex flex-col items-center justify-center gap-2 border border-white/5 bg-white/5 rounded-xl" }, /* @__PURE__ */ React19.createElement(FiAlertCircle, { className: "text-slate-600", size: 16 }), /* @__PURE__ */ React19.createElement("p", { className: "text-[10px] text-slate-500 font-light uppercase tracking-widest" }, "Nenhum hist\xF3rico dispon\xEDvel"));
|
|
11243
11409
|
}
|
|
11244
|
-
return /* @__PURE__ */
|
|
11410
|
+
return /* @__PURE__ */ React19.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React19.createElement("h3", { className: "text-xs text-slate-400 font-medium uppercase tracking-wider flex items-center gap-2" }, "Hist\xF3rico (Timeline)"), /* @__PURE__ */ React19.createElement("div", { className: "relative pl-10 space-y-6 before:content-[''] before:absolute before:left-[21px] before:top-2 before:bottom-2 before:w-[2px] before:bg-white/5" }, sortedTimeline.map((event, index) => {
|
|
11245
11411
|
const config = DEFAULT_ICON_CONFIG;
|
|
11246
11412
|
const Icon = config.icon;
|
|
11247
11413
|
const actorName = getMemberName(event.actorId);
|
|
11248
|
-
return /* @__PURE__ */
|
|
11414
|
+
return /* @__PURE__ */ React19.createElement("div", { key: event.id || index, className: "relative animate-in fade-in slide-in-from-left-2 duration-300", style: { animationDelay: `${index * 50}ms` } }, /* @__PURE__ */ React19.createElement("div", { className: `absolute -left-[35px] top-0 w-8 h-8 rounded-full ${config.bg} flex items-center justify-center ring-4 ring-slate-950 border border-white/5` }, /* @__PURE__ */ React19.createElement(Icon, { className: config.iconColor || config.color, size: 14 })), /* @__PURE__ */ React19.createElement("div", { className: "group space-y-1" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between gap-4" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React19.createElement("span", { className: "text-xs font-semibold text-slate-200" }, actorName), canEdit && onAddNote && /* @__PURE__ */ React19.createElement(
|
|
11249
11415
|
"button",
|
|
11250
11416
|
{
|
|
11251
11417
|
onClick: () => onAddNote(event),
|
|
11252
11418
|
className: "opacity-0 group-hover:opacity-100 p-1 rounded-md hover:bg-white/5 text-slate-500 hover:text-indigo-400 transition-all",
|
|
11253
11419
|
title: "Adicionar detalhe/anexo a esta etapa"
|
|
11254
11420
|
},
|
|
11255
|
-
/* @__PURE__ */
|
|
11256
|
-
)), /* @__PURE__ */
|
|
11421
|
+
/* @__PURE__ */ React19.createElement(FiPlusCircle, { size: 12 })
|
|
11422
|
+
)), /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] text-slate-500 tabular-nums" }, formatDate(event.timestamp))), /* @__PURE__ */ React19.createElement("p", { className: "text-sm text-slate-400 leading-relaxed" }, event.description), event.notes && /* @__PURE__ */ React19.createElement("div", { className: "mt-1 py-1 px-2 rounded bg-indigo-500/5 border-l-2 border-indigo-500/30" }, /* @__PURE__ */ React19.createElement("p", { className: "text-[11px] text-slate-300 italic whitespace-pre-wrap" }, event.notes)), (event.from_status || event.to_status) && /* @__PURE__ */ React19.createElement("div", { className: "flex items-center gap-1.5 py-1 px-2 rounded-md bg-white/5 border border-white/5 w-fit mt-2" }, /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] text-slate-500" }, event.from_status || "?"), /* @__PURE__ */ React19.createElement(FiArrowRight, { size: 10, className: "text-slate-600" }), /* @__PURE__ */ React19.createElement("span", { className: "text-[10px] text-indigo-300 font-bold" }, event.to_status || "?")), event.metadata && Object.keys(event.metadata).length > 0 && /* @__PURE__ */ React19.createElement("div", { className: "mt-2 text-[10px] grid grid-cols-2 gap-2 p-2 bg-slate-900/50 rounded border border-white/5" }, Object.entries(event.metadata).map(([key, value]) => {
|
|
11257
11423
|
const isAssigneeId = key.toLowerCase().includes("assignee_id") || key.toLowerCase().includes("respons\xE1vel") || key.toLowerCase().includes("assignee id");
|
|
11258
11424
|
const displayValue = isAssigneeId && typeof value === "string" ? getMemberName(value) : typeof value === "string" ? value : JSON.stringify(value);
|
|
11259
|
-
return /* @__PURE__ */
|
|
11260
|
-
})), event.links && event.links.length > 0 && /* @__PURE__ */
|
|
11425
|
+
return /* @__PURE__ */ React19.createElement("div", { key, className: "flex flex-col gap-0.5" }, /* @__PURE__ */ React19.createElement("span", { className: "text-slate-500 capitalize" }, key.replace(/_/g, " ")), /* @__PURE__ */ React19.createElement("span", { className: `${isAssigneeId ? "text-indigo-300 font-medium" : "text-slate-300"} truncate font-mono` }, displayValue));
|
|
11426
|
+
})), event.links && event.links.length > 0 && /* @__PURE__ */ React19.createElement("div", { className: "flex flex-wrap gap-2 mt-2" }, event.links.map((link, lIdx) => /* @__PURE__ */ React19.createElement(
|
|
11261
11427
|
"a",
|
|
11262
11428
|
{
|
|
11263
11429
|
key: lIdx,
|
|
@@ -11266,9 +11432,9 @@ function QuestTimeline({
|
|
|
11266
11432
|
rel: "noopener noreferrer",
|
|
11267
11433
|
className: "flex items-center gap-1.5 px-2 py-1 rounded bg-white/5 border border-white/5 hover:bg-white/10 transition-colors text-[10px] text-sky-400 font-medium"
|
|
11268
11434
|
},
|
|
11269
|
-
/* @__PURE__ */
|
|
11435
|
+
/* @__PURE__ */ React19.createElement(FiLink6, { size: 10 }),
|
|
11270
11436
|
link.name || "Link"
|
|
11271
|
-
))), event.images && event.images.length > 0 && /* @__PURE__ */
|
|
11437
|
+
))), event.images && event.images.length > 0 && /* @__PURE__ */ React19.createElement("div", { className: "flex flex-wrap gap-2 mt-2" }, event.images.map((img, iIdx) => /* @__PURE__ */ React19.createElement(
|
|
11272
11438
|
"button",
|
|
11273
11439
|
{
|
|
11274
11440
|
key: iIdx,
|
|
@@ -11276,13 +11442,14 @@ function QuestTimeline({
|
|
|
11276
11442
|
onClick: () => onOpenImageViewer == null ? void 0 : onOpenImageViewer(event.images, iIdx),
|
|
11277
11443
|
className: "relative w-12 h-12 rounded border border-white/10 overflow-hidden hover:border-sky-500/50 transition-colors group/img"
|
|
11278
11444
|
},
|
|
11279
|
-
/* @__PURE__ */
|
|
11280
|
-
/* @__PURE__ */
|
|
11445
|
+
/* @__PURE__ */ React19.createElement("img", { src: img.value, alt: img.name, className: "w-full h-full object-cover" }),
|
|
11446
|
+
/* @__PURE__ */ React19.createElement("div", { className: "absolute inset-0 bg-slate-900/40 opacity-0 group-hover/img:opacity-100 flex items-center justify-center transition-opacity" }, /* @__PURE__ */ React19.createElement(FiSearch6, { size: 12, className: "text-white" }))
|
|
11281
11447
|
)))));
|
|
11282
11448
|
})));
|
|
11283
11449
|
}
|
|
11284
11450
|
|
|
11285
11451
|
// src/components/QuestDetailsPanel.jsx
|
|
11452
|
+
import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters4 } from "react-icons/ai";
|
|
11286
11453
|
var QUEST_STATUS_COLORS3 = {
|
|
11287
11454
|
"Backlog": "#64748b",
|
|
11288
11455
|
"In Progress": "#eab308",
|
|
@@ -11311,7 +11478,8 @@ function QuestDetailsPanel({
|
|
|
11311
11478
|
milestones = [],
|
|
11312
11479
|
onUpdateMilestones = () => {
|
|
11313
11480
|
},
|
|
11314
|
-
onFocusNode
|
|
11481
|
+
onFocusNode,
|
|
11482
|
+
create_google_doc_action
|
|
11315
11483
|
}) {
|
|
11316
11484
|
var _a, _b;
|
|
11317
11485
|
const initialRawTitle = (node == null ? void 0 : node.raw_title) || (((_a = node == null ? void 0 : node.name) == null ? void 0 : _a.includes(" - \xBB ")) ? node.name.split(" - \xBB ")[1] : node == null ? void 0 : node.name) || "";
|
|
@@ -11345,6 +11513,7 @@ function QuestDetailsPanel({
|
|
|
11345
11513
|
const [isSaving, setIsSaving] = useState19(false);
|
|
11346
11514
|
const [isLinkCopied, setIsLinkCopied] = useState19(false);
|
|
11347
11515
|
const [isNameCopied, setIsNameCopied] = useState19(false);
|
|
11516
|
+
const [isLoadingDocs, setIsLoadingDocs] = useState19(false);
|
|
11348
11517
|
const [hasUnsavedChanges, setHasUnsavedChanges] = useState19(false);
|
|
11349
11518
|
const [questDate, setQuestDate] = useState19((node == null ? void 0 : node.Date) || null);
|
|
11350
11519
|
const [noteText, setNoteText] = useState19("");
|
|
@@ -11370,11 +11539,11 @@ function QuestDetailsPanel({
|
|
|
11370
11539
|
const [showMilestoneSuggestions, setShowMilestoneSuggestions] = useState19(false);
|
|
11371
11540
|
const [dependencyInput, setDependencyInput] = useState19("");
|
|
11372
11541
|
const [showDependencySuggestions, setShowDependencySuggestions] = useState19(false);
|
|
11373
|
-
const activeMilestones =
|
|
11542
|
+
const activeMilestones = React20.useMemo(
|
|
11374
11543
|
() => (milestones || []).filter((ms) => ms.status === "active"),
|
|
11375
11544
|
[milestones]
|
|
11376
11545
|
);
|
|
11377
|
-
const filteredMilestones =
|
|
11546
|
+
const filteredMilestones = React20.useMemo(() => {
|
|
11378
11547
|
const search = milestoneInput.toLowerCase().trim();
|
|
11379
11548
|
return activeMilestones.filter(
|
|
11380
11549
|
(ms) => ms.name.toLowerCase().includes(search) && !milestoneIds.includes(ms.id)
|
|
@@ -11413,11 +11582,11 @@ function QuestDetailsPanel({
|
|
|
11413
11582
|
handleRemoveMilestone(milestoneIds[milestoneIds.length - 1]);
|
|
11414
11583
|
}
|
|
11415
11584
|
};
|
|
11416
|
-
const dependencyQuests =
|
|
11585
|
+
const dependencyQuests = React20.useMemo(
|
|
11417
11586
|
() => availableNodes.filter((n) => n.is_quest && String(n.id) !== String(node == null ? void 0 : node.id)),
|
|
11418
11587
|
[availableNodes, node == null ? void 0 : node.id]
|
|
11419
11588
|
);
|
|
11420
|
-
const filteredDependencies =
|
|
11589
|
+
const filteredDependencies = React20.useMemo(() => {
|
|
11421
11590
|
const search = dependencyInput.toLowerCase().trim();
|
|
11422
11591
|
return dependencyQuests.filter((q) => {
|
|
11423
11592
|
var _a2;
|
|
@@ -11447,7 +11616,7 @@ function QuestDetailsPanel({
|
|
|
11447
11616
|
handleRemoveDependency(dependencyIds[dependencyIds.length - 1]);
|
|
11448
11617
|
}
|
|
11449
11618
|
};
|
|
11450
|
-
const blockedStatus =
|
|
11619
|
+
const blockedStatus = React20.useMemo(
|
|
11451
11620
|
() => isQuestBlocked({ ...node, dependency_ids: dependencyIds }, availableNodes),
|
|
11452
11621
|
[node, dependencyIds, availableNodes]
|
|
11453
11622
|
);
|
|
@@ -11745,6 +11914,39 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11745
11914
|
triggerAutoSave({ customProps: newProps });
|
|
11746
11915
|
}
|
|
11747
11916
|
};
|
|
11917
|
+
const handleCreateGoogleDoc = async () => {
|
|
11918
|
+
if (!rawTitle.trim()) {
|
|
11919
|
+
alert("Por favor, insira um t\xEDtulo para a quest antes de criar o documento.");
|
|
11920
|
+
return;
|
|
11921
|
+
}
|
|
11922
|
+
if (!create_google_doc_action) return;
|
|
11923
|
+
try {
|
|
11924
|
+
setIsLoadingDocs(true);
|
|
11925
|
+
const res = await create_google_doc_action(standardizedName);
|
|
11926
|
+
if (res.success) {
|
|
11927
|
+
const newProp = {
|
|
11928
|
+
id: uuidv49(),
|
|
11929
|
+
key: "Google Docs",
|
|
11930
|
+
type: "links",
|
|
11931
|
+
value: [{ id: uuidv49(), name: "Abrir Documento", value: res.link }]
|
|
11932
|
+
};
|
|
11933
|
+
const updatedProps = [...customProps, newProp];
|
|
11934
|
+
setCustomProps(updatedProps);
|
|
11935
|
+
setHasUnsavedChanges(true);
|
|
11936
|
+
triggerAutoSave({ customProps: updatedProps });
|
|
11937
|
+
if (res.link) {
|
|
11938
|
+
window.open(res.link, "_blank");
|
|
11939
|
+
}
|
|
11940
|
+
} else {
|
|
11941
|
+
alert("Erro ao criar documento: " + res.error);
|
|
11942
|
+
}
|
|
11943
|
+
} catch (error) {
|
|
11944
|
+
console.error(error);
|
|
11945
|
+
alert("Erro ao processar cria\xE7\xE3o do documento.");
|
|
11946
|
+
} finally {
|
|
11947
|
+
setIsLoadingDocs(false);
|
|
11948
|
+
}
|
|
11949
|
+
};
|
|
11748
11950
|
const handleSaveDescriptionInline = (newDescription) => {
|
|
11749
11951
|
setDescription(newDescription);
|
|
11750
11952
|
setHasUnsavedChanges(true);
|
|
@@ -11825,7 +12027,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11825
12027
|
const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
|
|
11826
12028
|
const assigneeMember = viewMembers.find((m) => m.id === assigneeId);
|
|
11827
12029
|
const isAssigneeUndefined = assigneeId && !assigneeMember;
|
|
11828
|
-
return /* @__PURE__ */
|
|
12030
|
+
return /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement(
|
|
11829
12031
|
"div",
|
|
11830
12032
|
{
|
|
11831
12033
|
className: `ui-overlay absolute group rounded-2xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden flex flex-col ${isResizing ? "transition-none" : "transition-all duration-300 ease-out"}`,
|
|
@@ -11838,11 +12040,11 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11838
12040
|
onContextMenu: swallow,
|
|
11839
12041
|
onDoubleClick: swallow
|
|
11840
12042
|
},
|
|
11841
|
-
/* @__PURE__ */
|
|
12043
|
+
/* @__PURE__ */ React20.createElement("div", { onPointerDown: (e) => {
|
|
11842
12044
|
e.stopPropagation();
|
|
11843
12045
|
handleResize(e);
|
|
11844
12046
|
}, className: "absolute left-0 top-0 bottom-0 w-2 cursor-col-resize hover:bg-indigo-500/50 z-[2000] transition-colors", title: "Arraste para redimensionar" }),
|
|
11845
|
-
isReadMode ? /* @__PURE__ */
|
|
12047
|
+
isReadMode ? /* @__PURE__ */ React20.createElement(
|
|
11846
12048
|
DescriptionReadModePanel,
|
|
11847
12049
|
{
|
|
11848
12050
|
title: standardizedName || (node == null ? void 0 : node.name),
|
|
@@ -11863,7 +12065,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11863
12065
|
onImageClick: handleImageClickFromText,
|
|
11864
12066
|
onSaveDescription: handleSaveDescriptionInline
|
|
11865
12067
|
}
|
|
11866
|
-
) : /* @__PURE__ */
|
|
12068
|
+
) : /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "h-[2px]", style: { background: `linear-gradient(to right, transparent, ${QUEST_STATUS_COLORS3[status]}, transparent)` } }), /* @__PURE__ */ React20.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React20.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React20.createElement(FiTarget3, { className: "text-sky-400", size: 14 }), /* @__PURE__ */ React20.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Quest"), /* @__PURE__ */ React20.createElement("button", { onClick: handleCopyLink, className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-sky-400"}`, title: isLinkCopied ? "Link Copiado!" : "Copiar link para esta Quest" }, isLinkCopied ? /* @__PURE__ */ React20.createElement(FiCheck11, { size: 12 }) : /* @__PURE__ */ React20.createElement(FiLink7, { size: 12 }))), /* @__PURE__ */ React20.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, standardizedName || (node == null ? void 0 : node.name))), /* @__PURE__ */ React20.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl disabled:opacity-50", title: "Cancelar" }, "\xD7")), /* @__PURE__ */ React20.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300" }, "T\xEDtulo da Quest"), /* @__PURE__ */ React20.createElement(
|
|
11867
12069
|
"input",
|
|
11868
12070
|
{
|
|
11869
12071
|
type: "text",
|
|
@@ -11872,7 +12074,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11872
12074
|
readOnly: !canEdit,
|
|
11873
12075
|
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"}`
|
|
11874
12076
|
}
|
|
11875
|
-
), /* @__PURE__ */
|
|
12077
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "pt-1 flex items-center gap-1.5 min-w-0" }, /* @__PURE__ */ React20.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500 tracking-wider" }), /* @__PURE__ */ React20.createElement("p", { className: "text-xs text-indigo-300 font-medium truncate", title: standardizedName }, standardizedName), /* @__PURE__ */ React20.createElement(
|
|
11876
12078
|
"button",
|
|
11877
12079
|
{
|
|
11878
12080
|
type: "button",
|
|
@@ -11880,8 +12082,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11880
12082
|
className: `p-1 rounded-md transition-all hover:bg-white/5 ${isNameCopied ? "text-green-400 scale-110" : "text-slate-500 hover:text-indigo-400"} flex-shrink-0`,
|
|
11881
12083
|
title: isNameCopied ? "Nome Copiado!" : "Copiar nome formatado"
|
|
11882
12084
|
},
|
|
11883
|
-
isNameCopied ? /* @__PURE__ */
|
|
11884
|
-
))), /* @__PURE__ */
|
|
12085
|
+
isNameCopied ? /* @__PURE__ */ React20.createElement(FiCheck11, { size: 10 }) : /* @__PURE__ */ React20.createElement(FiCopy4, { size: 10 })
|
|
12086
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5 mt-2" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Prazo / Data"), canEdit && !questDate && /* @__PURE__ */ React20.createElement(
|
|
11885
12087
|
"button",
|
|
11886
12088
|
{
|
|
11887
12089
|
type: "button",
|
|
@@ -11892,7 +12094,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11892
12094
|
className: "text-[10px] text-indigo-400 hover:text-indigo-300 font-bold uppercase transition-colors"
|
|
11893
12095
|
},
|
|
11894
12096
|
"+ Adicionar"
|
|
11895
|
-
)), questDate && /* @__PURE__ */
|
|
12097
|
+
)), questDate && /* @__PURE__ */ React20.createElement("div", { className: "p-3 bg-slate-900/60 rounded-xl border border-white/10 space-y-3 relative group" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ React20.createElement("div", { className: `flex-1 flex items-center gap-1 rounded-lg bg-slate-800/50 p-1 ${!canEdit ? "opacity-70 pointer-events-none" : ""}` }, !questDate.confirmed ? ["Data", "Date Interval"].map((t) => /* @__PURE__ */ React20.createElement(
|
|
11896
12098
|
"button",
|
|
11897
12099
|
{
|
|
11898
12100
|
key: t,
|
|
@@ -11911,7 +12113,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11911
12113
|
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"}`
|
|
11912
12114
|
},
|
|
11913
12115
|
t === "Date Interval" ? "Intervalo" : t
|
|
11914
|
-
)) : /* @__PURE__ */
|
|
12116
|
+
)) : /* @__PURE__ */ React20.createElement("div", { className: "flex-1 flex items-center gap-2 px-2 py-1.5" }, /* @__PURE__ */ React20.createElement(FiCalendar2, { className: "text-indigo-400", size: 12 }), /* @__PURE__ */ React20.createElement("span", { className: "text-xs font-medium text-slate-200" }, questDate.type === "Data" ? questDate.value || "Sem data" : `${questDate.start || "In\xEDcio"} - ${questDate.end || "Fim"}`))), canEdit && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-1" }, !questDate.confirmed ? /* @__PURE__ */ React20.createElement(
|
|
11915
12117
|
"button",
|
|
11916
12118
|
{
|
|
11917
12119
|
type: "button",
|
|
@@ -11922,8 +12124,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11922
12124
|
className: "w-8 h-8 grid place-items-center rounded-lg bg-green-500/10 text-green-400 hover:bg-green-500/20 transition-colors",
|
|
11923
12125
|
title: "Confirmar data"
|
|
11924
12126
|
},
|
|
11925
|
-
/* @__PURE__ */
|
|
11926
|
-
) : /* @__PURE__ */
|
|
12127
|
+
/* @__PURE__ */ React20.createElement(FiCheck11, { size: 14 })
|
|
12128
|
+
) : /* @__PURE__ */ React20.createElement(
|
|
11927
12129
|
"button",
|
|
11928
12130
|
{
|
|
11929
12131
|
type: "button",
|
|
@@ -11934,8 +12136,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11934
12136
|
className: "w-8 h-8 grid place-items-center rounded-lg bg-indigo-500/10 text-indigo-400 hover:bg-indigo-500/20 transition-colors",
|
|
11935
12137
|
title: "Editar data"
|
|
11936
12138
|
},
|
|
11937
|
-
/* @__PURE__ */
|
|
11938
|
-
), /* @__PURE__ */
|
|
12139
|
+
/* @__PURE__ */ React20.createElement(FiEdit28, { size: 14 })
|
|
12140
|
+
), /* @__PURE__ */ React20.createElement(
|
|
11939
12141
|
"button",
|
|
11940
12142
|
{
|
|
11941
12143
|
type: "button",
|
|
@@ -11946,8 +12148,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11946
12148
|
className: "w-8 h-8 grid place-items-center rounded-lg bg-red-500/10 text-red-400 hover:bg-red-500/20 transition-colors",
|
|
11947
12149
|
title: "Remover data"
|
|
11948
12150
|
},
|
|
11949
|
-
/* @__PURE__ */
|
|
11950
|
-
))), !questDate.confirmed && canEdit && /* @__PURE__ */
|
|
12151
|
+
/* @__PURE__ */ React20.createElement(FiX7, { size: 14 })
|
|
12152
|
+
))), !questDate.confirmed && canEdit && /* @__PURE__ */ React20.createElement("div", { className: "animate-in fade-in slide-in-from-top-1 duration-200" }, questDate.type === "Data" && /* @__PURE__ */ React20.createElement(
|
|
11951
12153
|
"input",
|
|
11952
12154
|
{
|
|
11953
12155
|
type: "text",
|
|
@@ -11968,7 +12170,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11968
12170
|
maxLength: "10",
|
|
11969
12171
|
className: "w-full bg-slate-800/70 p-2 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-400/60"
|
|
11970
12172
|
}
|
|
11971
|
-
), questDate.type === "Date Interval" && /* @__PURE__ */
|
|
12173
|
+
), questDate.type === "Date Interval" && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(
|
|
11972
12174
|
"input",
|
|
11973
12175
|
{
|
|
11974
12176
|
type: "text",
|
|
@@ -11989,7 +12191,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11989
12191
|
maxLength: "10",
|
|
11990
12192
|
className: "flex-1 bg-slate-800/70 p-2 text-xs rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-400/60"
|
|
11991
12193
|
}
|
|
11992
|
-
), /* @__PURE__ */
|
|
12194
|
+
), /* @__PURE__ */ React20.createElement("span", { className: "text-slate-500" }, "-"), /* @__PURE__ */ React20.createElement(
|
|
11993
12195
|
"input",
|
|
11994
12196
|
{
|
|
11995
12197
|
type: "text",
|
|
@@ -12010,11 +12212,11 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12010
12212
|
maxLength: "10",
|
|
12011
12213
|
className: "flex-1 bg-slate-800/70 p-2 text-xs rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-400/60"
|
|
12012
12214
|
}
|
|
12013
|
-
))))), /* @__PURE__ */
|
|
12215
|
+
))))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300" }, "Milestones"), /* @__PURE__ */ React20.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/60" : ""} transition-all` }, milestoneIds.map((id) => {
|
|
12014
12216
|
const ms = (milestones || []).find((m) => m.id === id);
|
|
12015
12217
|
if (!ms) return null;
|
|
12016
|
-
return /* @__PURE__ */
|
|
12017
|
-
}), canEdit && /* @__PURE__ */
|
|
12218
|
+
return /* @__PURE__ */ React20.createElement("span", { key: id, className: "flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-medium border bg-sky-500/20 text-sky-200 border-sky-500/30" }, ms.name, canEdit && /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: () => handleRemoveMilestone(id), className: "hover:text-white transition-colors" }, /* @__PURE__ */ React20.createElement(FiX7, { size: 12 })));
|
|
12219
|
+
}), canEdit && /* @__PURE__ */ React20.createElement(
|
|
12018
12220
|
"input",
|
|
12019
12221
|
{
|
|
12020
12222
|
type: "text",
|
|
@@ -12035,7 +12237,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12035
12237
|
placeholder: milestoneIds.length === 0 ? "Adicionar milestone..." : "",
|
|
12036
12238
|
autoComplete: "off"
|
|
12037
12239
|
}
|
|
12038
|
-
), canEdit && showMilestoneSuggestions && filteredMilestones.length > 0 && /* @__PURE__ */
|
|
12240
|
+
), canEdit && showMilestoneSuggestions && filteredMilestones.length > 0 && /* @__PURE__ */ React20.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-[100] w-full mt-1 max-h-40 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, filteredMilestones.map((ms) => /* @__PURE__ */ React20.createElement(
|
|
12039
12241
|
"li",
|
|
12040
12242
|
{
|
|
12041
12243
|
key: ms.id,
|
|
@@ -12046,7 +12248,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12046
12248
|
}
|
|
12047
12249
|
},
|
|
12048
12250
|
ms.name
|
|
12049
|
-
))), canEdit && showMilestoneSuggestions && milestoneInput.trim() && !filteredMilestones.some((m) => m.name.toLowerCase() === milestoneInput.toLowerCase().trim()) && /* @__PURE__ */
|
|
12251
|
+
))), canEdit && showMilestoneSuggestions && milestoneInput.trim() && !filteredMilestones.some((m) => m.name.toLowerCase() === milestoneInput.toLowerCase().trim()) && /* @__PURE__ */ React20.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-[100] w-full mt-1 rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, /* @__PURE__ */ React20.createElement(
|
|
12050
12252
|
"li",
|
|
12051
12253
|
{
|
|
12052
12254
|
className: "px-3 py-3 text-sm cursor-pointer hover:bg-indigo-600/50 flex flex-col gap-0.5",
|
|
@@ -12055,9 +12257,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12055
12257
|
handleAddMilestone({ name: milestoneInput });
|
|
12056
12258
|
}
|
|
12057
12259
|
},
|
|
12058
|
-
/* @__PURE__ */
|
|
12059
|
-
/* @__PURE__ */
|
|
12060
|
-
)))), /* @__PURE__ */
|
|
12260
|
+
/* @__PURE__ */ React20.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500" }, "Criar novo milestone"),
|
|
12261
|
+
/* @__PURE__ */ React20.createElement("span", { className: "text-white" }, '"', milestoneInput, '"')
|
|
12262
|
+
)))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300" }, "Status da Quest"), /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
12061
12263
|
"button",
|
|
12062
12264
|
{
|
|
12063
12265
|
type: "button",
|
|
@@ -12065,12 +12267,12 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12065
12267
|
disabled: !canEdit,
|
|
12066
12268
|
className: `w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 transition-colors flex items-center justify-between ${canEdit ? "hover:border-white/20 focus:ring-2 focus:ring-indigo-400/60 cursor-pointer" : "cursor-default opacity-80"}`
|
|
12067
12269
|
},
|
|
12068
|
-
/* @__PURE__ */
|
|
12069
|
-
canEdit && /* @__PURE__ */
|
|
12070
|
-
), isStatusDropdownOpen && canEdit && /* @__PURE__ */
|
|
12270
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement("span", { className: "w-3 h-3 rounded-full shadow-[0_0_8px_rgba(0,0,0,0.5)]", style: { backgroundColor: QUEST_STATUS_COLORS3[status] } }), /* @__PURE__ */ React20.createElement("span", { className: "text-slate-200 font-medium" }, status)),
|
|
12271
|
+
canEdit && /* @__PURE__ */ React20.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}` })
|
|
12272
|
+
), isStatusDropdownOpen && canEdit && /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "fixed inset-0 z-40", onClick: () => setIsStatusDropdownOpen(false) }), /* @__PURE__ */ React20.createElement("ul", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-800 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden" }, Object.keys(QUEST_STATUS_COLORS3).map((s) => {
|
|
12071
12273
|
const isBacklog = s === "Backlog";
|
|
12072
12274
|
const isDisabled = !isBacklog && blockedStatus.isBlocked;
|
|
12073
|
-
return /* @__PURE__ */
|
|
12275
|
+
return /* @__PURE__ */ React20.createElement(
|
|
12074
12276
|
"li",
|
|
12075
12277
|
{
|
|
12076
12278
|
key: s,
|
|
@@ -12083,22 +12285,22 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12083
12285
|
className: `px-3 py-2.5 text-sm transition-colors flex items-center justify-between ${status === s ? "bg-indigo-500/20 text-white" : "text-slate-300"} ${isDisabled ? "opacity-40 cursor-not-allowed grayscale" : "cursor-pointer hover:bg-white/5 hover:text-white"}`,
|
|
12084
12286
|
title: isDisabled ? `Bloqueado por depend\xEAncias: ${blockedStatus.pendingDependencies.map((d) => d.raw_title || d.name).join(", ")}` : ""
|
|
12085
12287
|
},
|
|
12086
|
-
/* @__PURE__ */
|
|
12087
|
-
isDisabled && /* @__PURE__ */
|
|
12288
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement("span", { className: "w-3 h-3 rounded-full", style: { backgroundColor: QUEST_STATUS_COLORS3[s] } }), s),
|
|
12289
|
+
isDisabled && /* @__PURE__ */ React20.createElement(FiRepeat2, { className: "text-amber-400/60 rotate-180", size: 12 })
|
|
12088
12290
|
);
|
|
12089
|
-
}))))), /* @__PURE__ */
|
|
12291
|
+
}))))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5 relative mt-2" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300" }, "Assignee (Respons\xE1vel)"), canEdit ? /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
12090
12292
|
"button",
|
|
12091
12293
|
{
|
|
12092
12294
|
type: "button",
|
|
12093
12295
|
onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
|
|
12094
12296
|
className: "w-full bg-slate-800/70 p-2.5 text-sm rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-2 focus:ring-indigo-400/60 transition-colors flex items-center justify-between"
|
|
12095
12297
|
},
|
|
12096
|
-
/* @__PURE__ */
|
|
12097
|
-
/* @__PURE__ */
|
|
12098
|
-
), isAssigneeDropdownOpen && /* @__PURE__ */
|
|
12298
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(FiUser3, { className: "text-slate-400", size: 14 }), /* @__PURE__ */ React20.createElement("span", { className: "text-slate-200 font-medium" }, isAssigneeUndefined ? "Undefined" : (assigneeMember == null ? void 0 : assigneeMember.name) || (assigneeMember == null ? void 0 : assigneeMember.email) || "Nenhum")),
|
|
12299
|
+
/* @__PURE__ */ React20.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
|
|
12300
|
+
), isAssigneeDropdownOpen && /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
|
|
12099
12301
|
setIsAssigneeDropdownOpen(false);
|
|
12100
12302
|
setAssigneeSearchQuery("");
|
|
12101
|
-
} }), /* @__PURE__ */
|
|
12303
|
+
} }), /* @__PURE__ */ React20.createElement("div", { className: "absolute top-full left-0 mt-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ React20.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(FiSearch7, { className: "text-slate-500", size: 14 }), /* @__PURE__ */ React20.createElement(
|
|
12102
12304
|
"input",
|
|
12103
12305
|
{
|
|
12104
12306
|
type: "text",
|
|
@@ -12109,7 +12311,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12109
12311
|
className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
|
|
12110
12312
|
onClick: (e) => e.stopPropagation()
|
|
12111
12313
|
}
|
|
12112
|
-
)), /* @__PURE__ */
|
|
12314
|
+
)), /* @__PURE__ */ React20.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ React20.createElement(
|
|
12113
12315
|
"li",
|
|
12114
12316
|
{
|
|
12115
12317
|
onClick: () => {
|
|
@@ -12127,7 +12329,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12127
12329
|
className: `px-3 py-2.5 text-sm cursor-pointer transition-colors flex items-center gap-2 ${!assigneeId ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5 hover:text-white"}`
|
|
12128
12330
|
},
|
|
12129
12331
|
"Nenhum"
|
|
12130
|
-
), isAssigneeUndefined && /* @__PURE__ */
|
|
12332
|
+
), isAssigneeUndefined && /* @__PURE__ */ React20.createElement(
|
|
12131
12333
|
"li",
|
|
12132
12334
|
{
|
|
12133
12335
|
onClick: () => {
|
|
@@ -12140,7 +12342,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12140
12342
|
), viewMembers.filter((member) => {
|
|
12141
12343
|
const search = assigneeSearchQuery.toLowerCase();
|
|
12142
12344
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12143
|
-
}).map((member) => /* @__PURE__ */
|
|
12345
|
+
}).map((member) => /* @__PURE__ */ React20.createElement(
|
|
12144
12346
|
"li",
|
|
12145
12347
|
{
|
|
12146
12348
|
key: member.id,
|
|
@@ -12162,7 +12364,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12162
12364
|
)), viewMembers.filter((member) => {
|
|
12163
12365
|
const search = assigneeSearchQuery.toLowerCase();
|
|
12164
12366
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12165
|
-
}).length === 0 && assigneeSearchQuery && /* @__PURE__ */
|
|
12367
|
+
}).length === 0 && assigneeSearchQuery && /* @__PURE__ */ React20.createElement("li", { className: "px-3 py-4 text-xs text-slate-500 text-center italic" }, "Nenhum membro encontrado"))))) : /* @__PURE__ */ React20.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__ */ React20.createElement(FiUser3, { className: "opacity-50", size: 14 }), assigneeId ? assigneeMember ? assigneeMember.name || assigneeMember.email : "Undefined" : "Nenhum")), /* @__PURE__ */ React20.createElement("div", { className: "pt-4 border-t border-white/5 mt-2" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between mb-3" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(FiRepeat2, { className: `w-3.5 h-3.5 ${recurrenceConfig.enabled ? "text-indigo-400" : "text-slate-500"}` }), /* @__PURE__ */ React20.createElement("span", { className: "text-xs text-slate-300 font-medium uppercase tracking-wider" }, "Recorr\xEAncia")), /* @__PURE__ */ React20.createElement(
|
|
12166
12368
|
"button",
|
|
12167
12369
|
{
|
|
12168
12370
|
type: "button",
|
|
@@ -12173,8 +12375,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12173
12375
|
},
|
|
12174
12376
|
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"}`
|
|
12175
12377
|
},
|
|
12176
|
-
/* @__PURE__ */
|
|
12177
|
-
)), recurrenceConfig.enabled && /* @__PURE__ */
|
|
12378
|
+
/* @__PURE__ */ React20.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"}` })
|
|
12379
|
+
)), recurrenceConfig.enabled && /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "grid grid-cols-2 gap-3" }, /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React20.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Tipo"), /* @__PURE__ */ React20.createElement(
|
|
12178
12380
|
"select",
|
|
12179
12381
|
{
|
|
12180
12382
|
disabled: !canEdit,
|
|
@@ -12185,10 +12387,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12185
12387
|
},
|
|
12186
12388
|
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"}`
|
|
12187
12389
|
},
|
|
12188
|
-
/* @__PURE__ */
|
|
12189
|
-
/* @__PURE__ */
|
|
12190
|
-
/* @__PURE__ */
|
|
12191
|
-
)), recurrenceConfig.type === "weekly" && /* @__PURE__ */
|
|
12390
|
+
/* @__PURE__ */ React20.createElement("option", { value: "daily" }, "Di\xE1ria"),
|
|
12391
|
+
/* @__PURE__ */ React20.createElement("option", { value: "weekly" }, "Semanal"),
|
|
12392
|
+
/* @__PURE__ */ React20.createElement("option", { value: "custom" }, "Data Espec\xEDfica")
|
|
12393
|
+
)), recurrenceConfig.type === "weekly" && /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React20.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Dia da Semana"), /* @__PURE__ */ React20.createElement(
|
|
12192
12394
|
"select",
|
|
12193
12395
|
{
|
|
12194
12396
|
disabled: !canEdit,
|
|
@@ -12199,14 +12401,14 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12199
12401
|
},
|
|
12200
12402
|
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"}`
|
|
12201
12403
|
},
|
|
12202
|
-
/* @__PURE__ */
|
|
12203
|
-
/* @__PURE__ */
|
|
12204
|
-
/* @__PURE__ */
|
|
12205
|
-
/* @__PURE__ */
|
|
12206
|
-
/* @__PURE__ */
|
|
12207
|
-
/* @__PURE__ */
|
|
12208
|
-
/* @__PURE__ */
|
|
12209
|
-
)), recurrenceConfig.type === "custom" && /* @__PURE__ */
|
|
12404
|
+
/* @__PURE__ */ React20.createElement("option", { value: 1 }, "Segunda-feira"),
|
|
12405
|
+
/* @__PURE__ */ React20.createElement("option", { value: 2 }, "Ter\xE7a-feira"),
|
|
12406
|
+
/* @__PURE__ */ React20.createElement("option", { value: 3 }, "Quarta-feira"),
|
|
12407
|
+
/* @__PURE__ */ React20.createElement("option", { value: 4 }, "Quinta-feira"),
|
|
12408
|
+
/* @__PURE__ */ React20.createElement("option", { value: 5 }, "Sexta-feira"),
|
|
12409
|
+
/* @__PURE__ */ React20.createElement("option", { value: 6 }, "S\xE1bado"),
|
|
12410
|
+
/* @__PURE__ */ React20.createElement("option", { value: 0 }, "Domingo")
|
|
12411
|
+
)), recurrenceConfig.type === "custom" && /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React20.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Pr\xF3xima Data"), /* @__PURE__ */ React20.createElement(
|
|
12210
12412
|
"input",
|
|
12211
12413
|
{
|
|
12212
12414
|
readOnly: !canEdit,
|
|
@@ -12219,7 +12421,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12219
12421
|
},
|
|
12220
12422
|
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"}`
|
|
12221
12423
|
}
|
|
12222
|
-
))), /* @__PURE__ */
|
|
12424
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React20.createElement("label", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Pr\xF3ximo Respons\xE1vel"), /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
12223
12425
|
"select",
|
|
12224
12426
|
{
|
|
12225
12427
|
disabled: !canEdit,
|
|
@@ -12230,9 +12432,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12230
12432
|
},
|
|
12231
12433
|
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"}`
|
|
12232
12434
|
},
|
|
12233
|
-
/* @__PURE__ */
|
|
12234
|
-
viewMembers.map((member) => /* @__PURE__ */
|
|
12235
|
-
), /* @__PURE__ */
|
|
12435
|
+
/* @__PURE__ */ React20.createElement("option", { value: "" }, "Sem respons\xE1vel"),
|
|
12436
|
+
viewMembers.map((member) => /* @__PURE__ */ React20.createElement("option", { key: member.id, value: member.id }, member.name || member.email))
|
|
12437
|
+
), /* @__PURE__ */ React20.createElement(FiUser3, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3 h-3 text-slate-500" }), /* @__PURE__ */ React20.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__ */ React20.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React20.createElement(
|
|
12236
12438
|
QuestReviewStackEditor,
|
|
12237
12439
|
{
|
|
12238
12440
|
reviewStack,
|
|
@@ -12243,19 +12445,19 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12243
12445
|
viewMembers,
|
|
12244
12446
|
readOnly: !canEdit
|
|
12245
12447
|
}
|
|
12246
|
-
)), status === "Review" && canEdit && /* @__PURE__ */
|
|
12448
|
+
)), status === "Review" && canEdit && /* @__PURE__ */ React20.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React20.createElement("div", { className: "bg-slate-900/40 rounded-xl p-4 border border-white/5 space-y-3" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "A\xE7\xF5es de Review"), /* @__PURE__ */ React20.createElement("span", { className: "px-2 py-0.5 rounded-full bg-purple-500/10 text-purple-300 text-[10px] font-medium border border-purple-500/20" }, "Em Revis\xE3o")), /* @__PURE__ */ React20.createElement("p", { className: "text-xs text-slate-400 leading-relaxed" }, "Selecione o respons\xE1vel abaixo para retornar o ciclo para opera\xE7\xE3o."), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5 flex flex-col" }, /* @__PURE__ */ React20.createElement("label", { className: "text-[10px] text-slate-400 font-medium ml-0.5" }, "Retornar para:"), /* @__PURE__ */ React20.createElement("div", { className: "relative" }, /* @__PURE__ */ React20.createElement(
|
|
12247
12449
|
"button",
|
|
12248
12450
|
{
|
|
12249
12451
|
type: "button",
|
|
12250
12452
|
onClick: () => setIsReturnDropdownOpen(!isReturnDropdownOpen),
|
|
12251
12453
|
className: "w-full bg-slate-800/80 p-2 text-xs rounded-lg border border-white/10 hover:border-white/20 focus:outline-none focus:ring-1 focus:ring-purple-400/50 transition-colors flex items-center justify-between"
|
|
12252
12454
|
},
|
|
12253
|
-
/* @__PURE__ */
|
|
12254
|
-
/* @__PURE__ */
|
|
12255
|
-
), isReturnDropdownOpen && /* @__PURE__ */
|
|
12455
|
+
/* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(FiUser3, { className: "text-slate-400", size: 12 }), /* @__PURE__ */ React20.createElement("span", { className: "text-slate-200 font-medium" }, ((_b = viewMembers.find((m) => String(m.id) === String(returnAssigneeId))) == null ? void 0 : _b.name) || "Selecionar respons\xE1vel...")),
|
|
12456
|
+
/* @__PURE__ */ React20.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isReturnDropdownOpen ? "rotate-180" : ""}`, size: 14 })
|
|
12457
|
+
), isReturnDropdownOpen && /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
|
|
12256
12458
|
setIsReturnDropdownOpen(false);
|
|
12257
12459
|
setReturnSearchQuery("");
|
|
12258
|
-
} }), /* @__PURE__ */
|
|
12460
|
+
} }), /* @__PURE__ */ React20.createElement("div", { className: "absolute bottom-full left-0 mb-1.5 w-full bg-slate-900 border border-white/10 rounded-lg shadow-[0_8px_30px_rgba(0,0,0,0.5)] z-50 overflow-hidden flex flex-col" }, /* @__PURE__ */ React20.createElement("div", { className: "p-2 border-b border-white/5 bg-white/5 flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(FiSearch7, { className: "text-slate-500", size: 12 }), /* @__PURE__ */ React20.createElement(
|
|
12259
12461
|
"input",
|
|
12260
12462
|
{
|
|
12261
12463
|
type: "text",
|
|
@@ -12266,10 +12468,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12266
12468
|
className: "bg-transparent border-none outline-none text-[10px] text-white placeholder-slate-500 w-full",
|
|
12267
12469
|
onClick: (e) => e.stopPropagation()
|
|
12268
12470
|
}
|
|
12269
|
-
)), /* @__PURE__ */
|
|
12471
|
+
)), /* @__PURE__ */ React20.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar" }, viewMembers.filter((member) => {
|
|
12270
12472
|
const search = returnSearchQuery.toLowerCase();
|
|
12271
12473
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12272
|
-
}).map((member) => /* @__PURE__ */
|
|
12474
|
+
}).map((member) => /* @__PURE__ */ React20.createElement(
|
|
12273
12475
|
"li",
|
|
12274
12476
|
{
|
|
12275
12477
|
key: member.id,
|
|
@@ -12284,7 +12486,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12284
12486
|
)), viewMembers.filter((member) => {
|
|
12285
12487
|
const search = returnSearchQuery.toLowerCase();
|
|
12286
12488
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12287
|
-
}).length === 0 && /* @__PURE__ */
|
|
12489
|
+
}).length === 0 && /* @__PURE__ */ React20.createElement("li", { className: "px-3 py-4 text-[10px] text-slate-500 text-center italic" }, "Nenhum membro encontrado")))))), /* @__PURE__ */ React20.createElement(
|
|
12288
12490
|
"button",
|
|
12289
12491
|
{
|
|
12290
12492
|
type: "button",
|
|
@@ -12292,13 +12494,13 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12292
12494
|
disabled: isSaving || !returnAssigneeId,
|
|
12293
12495
|
className: `w-full h-10 flex items-center justify-center gap-2 rounded-lg text-xs font-semibold border transition-all active:scale-[0.98] disabled:opacity-40 disabled:grayscale-[0.5] disabled:cursor-not-allowed ${!returnAssigneeId ? "bg-slate-800 text-slate-500 border-white/5" : "bg-slate-800 hover:bg-slate-700 text-purple-300 border-purple-500/20 hover:border-purple-500/40"}`
|
|
12294
12496
|
},
|
|
12295
|
-
/* @__PURE__ */
|
|
12497
|
+
/* @__PURE__ */ React20.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React20.createElement("path", { d: "M12 19V5M5 12l7 7 7-7" })),
|
|
12296
12498
|
"Retornar para Opera\xE7\xE3o"
|
|
12297
|
-
))), /* @__PURE__ */
|
|
12499
|
+
))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React20.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React20.createElement(DescriptionDisplay, { description, savedSections: existingSections, availableNodes, availableAncestries, onOpenReference, onMentionClick, onImageClick: handleImageClickFromText, onSaveDescription: handleSaveDescriptionInline }), /* @__PURE__ */ React20.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: () => setIsReadMode(true), className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`, title: "Modo de Leitura" }, /* @__PURE__ */ React20.createElement(FiBookOpen4, { size: 14 })), canEdit && /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: () => setIsDescriptionModalOpen(true), className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors", title: "Editar descri\xE7\xE3o (Modo de Escrita)" }, /* @__PURE__ */ React20.createElement(FiEdit28, { size: 14 }))), canEdit && !description && /* @__PURE__ */ React20.createElement("div", { onClick: () => setIsDescriptionModalOpen(true), className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text" }, "Adicionar descri\xE7\xE3o..."))), /* @__PURE__ */ React20.createElement("div", { className: "pt-2 border-t border-white/5 space-y-3" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(FiLink7, { className: "text-indigo-400", size: 14 }), /* @__PURE__ */ React20.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Depend\xEAncias (Quest Chain)"))), /* @__PURE__ */ React20.createElement("div", { className: `relative w-full bg-slate-900/60 p-2 min-h-[42px] flex flex-wrap gap-2 rounded-xl border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/40" : ""} transition-all` }, dependencyIds.map((depId) => {
|
|
12298
12500
|
const depNode = availableNodes.find((n) => String(n.id) === String(depId));
|
|
12299
12501
|
if (!depNode) return null;
|
|
12300
12502
|
const isDone = depNode.status === "Done";
|
|
12301
|
-
return /* @__PURE__ */
|
|
12503
|
+
return /* @__PURE__ */ React20.createElement(
|
|
12302
12504
|
"span",
|
|
12303
12505
|
{
|
|
12304
12506
|
key: depId,
|
|
@@ -12306,9 +12508,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12306
12508
|
className: `flex items-center gap-2 px-2 py-1 rounded-lg text-xs font-medium border cursor-pointer hover:brightness-110 transition-all ${isDone ? "bg-green-500/10 text-green-300 border-green-500/20" : "bg-amber-500/10 text-amber-300 border-amber-500/20"}`,
|
|
12307
12509
|
title: isDone ? `Pronta - Clique para focar` : `Pendente - Clique para focar`
|
|
12308
12510
|
},
|
|
12309
|
-
/* @__PURE__ */
|
|
12511
|
+
/* @__PURE__ */ React20.createElement("span", { className: `w-1.5 h-1.5 rounded-full ${isDone ? "bg-green-400" : "bg-amber-400 animate-pulse"}` }),
|
|
12310
12512
|
depNode.raw_title || depNode.name,
|
|
12311
|
-
canEdit && /* @__PURE__ */
|
|
12513
|
+
canEdit && /* @__PURE__ */ React20.createElement(
|
|
12312
12514
|
"button",
|
|
12313
12515
|
{
|
|
12314
12516
|
type: "button",
|
|
@@ -12318,10 +12520,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12318
12520
|
},
|
|
12319
12521
|
className: "hover:text-white transition-colors opacity-60 hover:opacity-100 Ml-1"
|
|
12320
12522
|
},
|
|
12321
|
-
/* @__PURE__ */
|
|
12523
|
+
/* @__PURE__ */ React20.createElement(FiX7, { size: 12 })
|
|
12322
12524
|
)
|
|
12323
12525
|
);
|
|
12324
|
-
}), canEdit && /* @__PURE__ */
|
|
12526
|
+
}), canEdit && /* @__PURE__ */ React20.createElement("div", { className: "flex-1 min-w-[120px] relative" }, /* @__PURE__ */ React20.createElement(
|
|
12325
12527
|
"input",
|
|
12326
12528
|
{
|
|
12327
12529
|
type: "text",
|
|
@@ -12338,7 +12540,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12338
12540
|
placeholder: dependencyIds.length === 0 ? "Adicionar Quest de Origem..." : "",
|
|
12339
12541
|
autoComplete: "off"
|
|
12340
12542
|
}
|
|
12341
|
-
), showDependencySuggestions && /* @__PURE__ */
|
|
12543
|
+
), showDependencySuggestions && /* @__PURE__ */ React20.createElement("ul", { className: "absolute top-full left-0 z-[100] w-full mt-2 max-h-48 overflow-y-auto rounded-xl bg-slate-900 border border-white/10 shadow-2xl custom-scrollbar py-1" }, filteredDependencies.length > 0 ? filteredDependencies.map((q) => /* @__PURE__ */ React20.createElement(
|
|
12342
12544
|
"li",
|
|
12343
12545
|
{
|
|
12344
12546
|
key: q.id,
|
|
@@ -12348,9 +12550,20 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12348
12550
|
handleAddDependency(q);
|
|
12349
12551
|
}
|
|
12350
12552
|
},
|
|
12351
|
-
/* @__PURE__ */
|
|
12352
|
-
/* @__PURE__ */
|
|
12353
|
-
)) : /* @__PURE__ */
|
|
12553
|
+
/* @__PURE__ */ React20.createElement("span", { className: "truncate" }, q.raw_title || q.name),
|
|
12554
|
+
/* @__PURE__ */ React20.createElement("span", { className: `text-[10px] px-1.5 py-0.5 rounded border ${q.status === "Done" ? "text-green-400 border-green-500/30" : "text-slate-500 border-white/5"}` }, q.status || "Backlog")
|
|
12555
|
+
)) : /* @__PURE__ */ React20.createElement("li", { className: "px-3 py-3 text-[10px] text-slate-500 italic text-center" }, "Nenhuma outra quest dispon\xEDvel")))), blockedStatus.isBlocked && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2 px-3 py-2 bg-amber-500/5 rounded-lg border border-amber-500/10 animate-in fade-in slide-in-from-top-1" }, /* @__PURE__ */ React20.createElement(FiRepeat2, { className: "text-amber-400 animate-spin-slow", size: 12 }), /* @__PURE__ */ React20.createElement("p", { className: "text-[10px] text-amber-200/80 font-medium" }, "Esta quest est\xE1 bloqueada por ", blockedStatus.pendingDependencies.length, " tarefa(s) pendente(s)."))), /* @__PURE__ */ React20.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, canEdit && create_google_doc_action && /* @__PURE__ */ React20.createElement(
|
|
12556
|
+
"button",
|
|
12557
|
+
{
|
|
12558
|
+
type: "button",
|
|
12559
|
+
onClick: handleCreateGoogleDoc,
|
|
12560
|
+
disabled: isLoadingDocs,
|
|
12561
|
+
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-transparent hover:bg-white/5 text-slate-300 border border-white/10 transition-all disabled:opacity-50 disabled:cursor-not-allowed group",
|
|
12562
|
+
title: "Criar Documento no Google Docs"
|
|
12563
|
+
},
|
|
12564
|
+
isLoadingDocs ? /* @__PURE__ */ React20.createElement(AiOutlineLoading3Quarters4, { className: "animate-spin", size: 14 }) : /* @__PURE__ */ React20.createElement(GoogleDocsIcon_default, { size: 14, className: "group-hover:scale-110 transition-transform" }),
|
|
12565
|
+
isLoadingDocs ? "Criando..." : "Google Doc"
|
|
12566
|
+
), canEdit && /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: handleAddProp, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors" }, /* @__PURE__ */ React20.createElement(FiPlus8, { size: 14 }), " Adicionar"))), /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React20.createElement(CustomPropertyDisplay, { key: prop.id, prop, onUpdate: canEdit ? (updatedProp) => handleUpdateProp(idx, updatedProp) : void 0, onRemove: canEdit ? () => handleRemoveProp(idx) : void 0, onOpenImageViewer, unavailableTypes: currentUsedTypes.filter((t) => t !== prop.type), isTextureMode: false, onUploadFile: canEdit ? onUploadFile : void 0, readOnly: !canEdit })), /* @__PURE__ */ React20.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ React20.createElement("div", { className: "pt-6 border-t border-white/10 mt-6" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ React20.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Hist\xF3rico & Notas"), /* @__PURE__ */ React20.createElement(
|
|
12354
12567
|
"button",
|
|
12355
12568
|
{
|
|
12356
12569
|
type: "button",
|
|
@@ -12369,12 +12582,12 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12369
12582
|
},
|
|
12370
12583
|
className: "flex items-center gap-1.5 px-2 py-1 text-[10px] rounded-md bg-white/5 hover:bg-white/10 border border-white/10 transition-colors text-slate-300"
|
|
12371
12584
|
},
|
|
12372
|
-
isNoteFormOpen && !editingEntryId ? /* @__PURE__ */
|
|
12585
|
+
isNoteFormOpen && !editingEntryId ? /* @__PURE__ */ React20.createElement(FiX7, { size: 12 }) : /* @__PURE__ */ React20.createElement(FiPlus8, { size: 12 }),
|
|
12373
12586
|
isNoteFormOpen && !editingEntryId ? "Cancelar" : "Nova Nota"
|
|
12374
|
-
)), isNoteFormOpen && /* @__PURE__ */
|
|
12587
|
+
)), isNoteFormOpen && /* @__PURE__ */ React20.createElement("div", { id: "quest-note-form", className: "mb-6 p-4 rounded-xl bg-white/5 border border-white/5 space-y-3 animate-in fade-in slide-in-from-top-2 border-l-4 border-l-indigo-500/40" }, editingEntryId && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between mb-2 pb-2 border-b border-white/5" }, /* @__PURE__ */ React20.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React20.createElement("span", { className: "text-[10px] text-indigo-400 font-bold uppercase tracking-wider" }, "Adicionando \xE0 etapa:"), /* @__PURE__ */ React20.createElement("span", { className: "text-xs text-slate-300 italic truncate max-w-[250px]" }, editingEntryLabel)), /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: () => {
|
|
12375
12588
|
setIsNoteFormOpen(false);
|
|
12376
12589
|
setEditingEntryId(null);
|
|
12377
|
-
}, className: "text-slate-500 hover:text-white" }, /* @__PURE__ */
|
|
12590
|
+
}, className: "text-slate-500 hover:text-white" }, /* @__PURE__ */ React20.createElement(FiX7, { size: 14 }))), /* @__PURE__ */ React20.createElement(
|
|
12378
12591
|
"textarea",
|
|
12379
12592
|
{
|
|
12380
12593
|
value: noteText,
|
|
@@ -12382,7 +12595,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12382
12595
|
placeholder: editingEntryId ? "Adicione uma observa\xE7\xE3o a esta etapa..." : "Escreva uma observa\xE7\xE3o no hist\xF3rico...",
|
|
12383
12596
|
className: "w-full bg-slate-900/50 p-3 text-sm rounded-lg border border-white/10 focus:outline-none focus:ring-1 focus:ring-indigo-500/50 min-h-[80px] resize-none"
|
|
12384
12597
|
}
|
|
12385
|
-
), /* @__PURE__ */
|
|
12598
|
+
), /* @__PURE__ */ React20.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("span", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Links"), /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: addLinkToNote, className: "text-indigo-400 hover:text-indigo-300 text-[10px] flex items-center gap-1 font-medium" }, /* @__PURE__ */ React20.createElement(FiPlus8, { size: 10 }), " Adicionar Link")), noteLinks.length > 0 && /* @__PURE__ */ React20.createElement("div", { className: "space-y-2" }, noteLinks.map((link) => /* @__PURE__ */ React20.createElement("div", { key: link.id, className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-1" }, /* @__PURE__ */ React20.createElement(
|
|
12386
12599
|
"input",
|
|
12387
12600
|
{
|
|
12388
12601
|
type: "text",
|
|
@@ -12391,7 +12604,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12391
12604
|
onChange: (e) => updateLinkInNote(link.id, "name", e.target.value),
|
|
12392
12605
|
className: "w-1/3 bg-slate-950/50 border border-white/5 rounded px-2 py-1 text-[10px] focus:outline-none focus:border-indigo-500/50"
|
|
12393
12606
|
}
|
|
12394
|
-
), /* @__PURE__ */
|
|
12607
|
+
), /* @__PURE__ */ React20.createElement(
|
|
12395
12608
|
"input",
|
|
12396
12609
|
{
|
|
12397
12610
|
type: "text",
|
|
@@ -12400,7 +12613,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12400
12613
|
onChange: (e) => updateLinkInNote(link.id, "value", e.target.value),
|
|
12401
12614
|
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"
|
|
12402
12615
|
}
|
|
12403
|
-
), /* @__PURE__ */
|
|
12616
|
+
), /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: () => removeLinkFromNote(link.id), className: "text-slate-600 hover:text-red-400 transition-colors" }, /* @__PURE__ */ React20.createElement(FiX7, { size: 12 })))))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React20.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React20.createElement("span", { className: "text-[10px] text-slate-500 uppercase font-bold tracking-tight" }, "Imagens (URLs)"), /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: addImageToNote, className: "text-indigo-400 hover:text-indigo-300 text-[10px] flex items-center gap-1 font-medium" }, /* @__PURE__ */ React20.createElement(FiPlus8, { size: 10 }), " Adicionar Imagem")), noteImages.length > 0 && /* @__PURE__ */ React20.createElement("div", { className: "space-y-2" }, noteImages.map((img) => /* @__PURE__ */ React20.createElement("div", { key: img.id, className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-1" }, /* @__PURE__ */ React20.createElement("div", { className: "flex-1 flex items-center gap-2 bg-slate-950/50 border border-white/5 rounded px-2 py-1" }, /* @__PURE__ */ React20.createElement(FiImage4, { size: 10, className: "text-slate-600" }), /* @__PURE__ */ React20.createElement(
|
|
12404
12617
|
"input",
|
|
12405
12618
|
{
|
|
12406
12619
|
type: "text",
|
|
@@ -12409,7 +12622,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12409
12622
|
onChange: (e) => updateImageInNote(img.id, e.target.value),
|
|
12410
12623
|
className: "flex-1 bg-transparent text-[10px] focus:outline-none"
|
|
12411
12624
|
}
|
|
12412
|
-
)), /* @__PURE__ */
|
|
12625
|
+
)), /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: () => removeImageFromNote(img.id), className: "text-slate-600 hover:text-red-400 transition-colors" }, /* @__PURE__ */ React20.createElement(FiX7, { size: 12 })))))), /* @__PURE__ */ React20.createElement("div", { className: "flex justify-end gap-2 pt-2" }, /* @__PURE__ */ React20.createElement(
|
|
12413
12626
|
"button",
|
|
12414
12627
|
{
|
|
12415
12628
|
type: "button",
|
|
@@ -12418,7 +12631,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12418
12631
|
className: "px-3 py-1.5 rounded-lg bg-indigo-600 hover:bg-indigo-500 text-white text-xs font-semibold transition-colors disabled:opacity-50"
|
|
12419
12632
|
},
|
|
12420
12633
|
editingEntryId ? "Salvar nesta Etapa" : "Adicionar ao Hist\xF3rico"
|
|
12421
|
-
))), /* @__PURE__ */
|
|
12634
|
+
))), /* @__PURE__ */ React20.createElement(
|
|
12422
12635
|
QuestTimeline,
|
|
12423
12636
|
{
|
|
12424
12637
|
timeline,
|
|
@@ -12427,10 +12640,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12427
12640
|
canEdit,
|
|
12428
12641
|
onAddNote: handleOpenNoteForEntry
|
|
12429
12642
|
}
|
|
12430
|
-
)), /* @__PURE__ */
|
|
12643
|
+
)), /* @__PURE__ */ React20.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300" }, "Tamanho no Node (Size)"), /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-5" }, ["small", "medium", "large"].map((s) => {
|
|
12431
12644
|
const isSelected = size === s;
|
|
12432
|
-
return /* @__PURE__ */
|
|
12433
|
-
}))), /* @__PURE__ */
|
|
12645
|
+
return /* @__PURE__ */ React20.createElement("button", { key: s, type: "button", onClick: () => canEdit && handleSizeChange(s), className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}` }, /* @__PURE__ */ React20.createElement("div", { className: `w-4 h-4 rounded-[4px] border flex items-center justify-center transition-all duration-200 ${isSelected ? "bg-indigo-500 border-indigo-500 shadow-[0_0_10px_rgba(99,102,241,0.4)]" : "border-slate-600 bg-transparent " + (canEdit ? "group-hover:border-slate-500" : "")}` }, isSelected && /* @__PURE__ */ React20.createElement(FiCheck11, { size: 12, className: "text-white" })), /* @__PURE__ */ React20.createElement("span", { className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 " + (canEdit ? "group-hover:text-slate-300" : "")}` }, s));
|
|
12646
|
+
}))), /* @__PURE__ */ React20.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React20.createElement("label", { className: "text-xs text-slate-300" }, "Tipos Adicionais"), /* @__PURE__ */ React20.createElement("div", { className: `relative w-full bg-slate-800/70 p-1.5 min-h-[42px] flex flex-wrap gap-1.5 rounded-lg border border-white/10 ${canEdit ? "focus-within:ring-2 focus-within:ring-indigo-400/60" : ""} transition-all` }, types.map((t, index) => /* @__PURE__ */ React20.createElement("span", { key: index, className: `flex items-center gap-1 px-1.5 py-0.5 rounded-md text-xs font-medium border ${t === "quest" ? "bg-sky-500/20 text-sky-200 border-sky-500/30" : "bg-indigo-500/30 text-indigo-100 border-indigo-500/20"}` }, t, canEdit && t !== "quest" && /* @__PURE__ */ React20.createElement("button", { type: "button", onClick: () => handleRemoveType(index), className: "hover:text-white transition-colors" }, /* @__PURE__ */ React20.createElement(FiX7, { size: 12 })))), canEdit && /* @__PURE__ */ React20.createElement(
|
|
12434
12647
|
"input",
|
|
12435
12648
|
{
|
|
12436
12649
|
type: "text",
|
|
@@ -12451,11 +12664,11 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12451
12664
|
placeholder: "",
|
|
12452
12665
|
autoComplete: "off"
|
|
12453
12666
|
}
|
|
12454
|
-
), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */
|
|
12667
|
+
), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */ React20.createElement("ul", { className: "custom-scrollbar absolute top-full left-0 z-10 w-full mt-1 max-h-40 overflow-y-auto rounded-lg bg-slate-800 border border-white/10 shadow-lg" }, filteredTypes.map((suggestedType, index) => /* @__PURE__ */ React20.createElement("li", { key: index, className: "px-3 py-2 text-sm text-slate-200 cursor-pointer hover:bg-indigo-600/50", onMouseDown: (e) => {
|
|
12455
12668
|
e.preventDefault();
|
|
12456
12669
|
handleAddType(suggestedType);
|
|
12457
|
-
} }, suggestedType))))), currentDatasetName && /* @__PURE__ */
|
|
12458
|
-
), isDescriptionModalOpen && canEdit && /* @__PURE__ */
|
|
12670
|
+
} }, suggestedType))))), currentDatasetName && /* @__PURE__ */ React20.createElement("div", { className: "pt-3 mt-4 border-t border-white/10 flex items-center justify-end gap-2 text-xs text-slate-400" }, /* @__PURE__ */ React20.createElement("span", { className: "truncate text-right" }, /* @__PURE__ */ React20.createElement("span", { className: "text-slate-200 font-medium" }, currentDatasetName)))), /* @__PURE__ */ React20.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React20.createElement("button", { onClick: handleCancel, disabled: isSaving, className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm disabled:opacity-50" }, canEdit ? "Cancelar" : "Fechar"), canEdit && /* @__PURE__ */ React20.createElement("button", { onClick: () => handleSave(false), disabled: isSaving, className: `px-4 py-2 rounded-lg transition-all font-semibold text-sm shadow-[0_8px_24px_rgba(99,102,241,0.35)] flex items-center gap-2 ${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-indigo-600 to-indigo-400 hover:from-indigo-500 hover:to-indigo-300 text-white"}` }, isSaving && /* @__PURE__ */ React20.createElement(FiLoader3, { className: "animate-spin" }), isSaving ? "Salvando..." : "Salvar Quest")))
|
|
12671
|
+
), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React20.createElement(
|
|
12459
12672
|
DescriptionEditModal,
|
|
12460
12673
|
{
|
|
12461
12674
|
isOpen: isDescriptionModalOpen,
|
|
@@ -12475,7 +12688,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12475
12688
|
}
|
|
12476
12689
|
|
|
12477
12690
|
// src/components/MultiNodeContextMenu.jsx
|
|
12478
|
-
import
|
|
12691
|
+
import React21, { useLayoutEffect as useLayoutEffect3, useRef as useRef15, useState as useState20, useEffect as useEffect17 } from "react";
|
|
12479
12692
|
function MultiNodeContextMenu({
|
|
12480
12693
|
data,
|
|
12481
12694
|
userRole,
|
|
@@ -12517,7 +12730,7 @@ function MultiNodeContextMenu({
|
|
|
12517
12730
|
const baseButtonClass = "w-full flex items-center gap-2.5 px-2 py-1.5 text-left text-sm rounded-md hover:bg-indigo-500/20 text-slate-200 hover:text-white transition-colors duration-150 truncate";
|
|
12518
12731
|
const deleteButtonClass = "w-full flex items-center gap-2.5 px-2 py-1.5 text-left text-sm rounded-md hover:bg-red-500/25 text-red-400 hover:text-red-300 transition-colors duration-150 truncate";
|
|
12519
12732
|
const nodeCount = data.nodeIds.size;
|
|
12520
|
-
return /* @__PURE__ */
|
|
12733
|
+
return /* @__PURE__ */ React21.createElement(
|
|
12521
12734
|
"div",
|
|
12522
12735
|
{
|
|
12523
12736
|
ref: menuRef,
|
|
@@ -12531,27 +12744,27 @@ function MultiNodeContextMenu({
|
|
|
12531
12744
|
onContextMenu: swallow,
|
|
12532
12745
|
onDoubleClick: swallow
|
|
12533
12746
|
},
|
|
12534
|
-
/* @__PURE__ */
|
|
12535
|
-
/* @__PURE__ */
|
|
12747
|
+
/* @__PURE__ */ React21.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
12748
|
+
/* @__PURE__ */ React21.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ React21.createElement("div", { className: "w-10 h-10 rounded-full bg-red-500/20 flex items-center justify-center text-red-400 mb-1" }, /* @__PURE__ */ React21.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React21.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React21.createElement("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }))), /* @__PURE__ */ React21.createElement("p", { className: "text-sm text-slate-200" }, "Excluir ", /* @__PURE__ */ React21.createElement("strong", null, nodeCount, " Nodes"), "?"), /* @__PURE__ */ React21.createElement("p", { className: "text-[11px] text-slate-400 leading-tight" }, "Esta a\xE7\xE3o \xE9 irrevers\xEDvel. Todas as conex\xF5es associadas a eles ser\xE3o apagadas.")), /* @__PURE__ */ React21.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ React21.createElement(
|
|
12536
12749
|
"button",
|
|
12537
12750
|
{
|
|
12538
12751
|
onClick: () => setIsConfirmingDelete(false),
|
|
12539
12752
|
className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
|
|
12540
12753
|
},
|
|
12541
12754
|
"Cancelar"
|
|
12542
|
-
), /* @__PURE__ */
|
|
12755
|
+
), /* @__PURE__ */ React21.createElement(
|
|
12543
12756
|
"button",
|
|
12544
12757
|
{
|
|
12545
12758
|
onClick: () => onDeleteNodes(data.nodeIds),
|
|
12546
12759
|
className: "flex-1 px-2 py-2 text-xs font-medium bg-red-500 hover:bg-red-600 rounded-md text-white transition-colors"
|
|
12547
12760
|
},
|
|
12548
12761
|
"Excluir"
|
|
12549
|
-
))) : /* @__PURE__ */
|
|
12762
|
+
))) : /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ React21.createElement("span", { className: "inline-flex h-2 w-2 rounded-full bg-indigo-400/80 shadow-[0_0_12px_1px_rgba(99,102,241,0.5)]" }), /* @__PURE__ */ React21.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "A\xE7\xF5es em Grupo (", nodeCount, " Nodes)")), /* @__PURE__ */ React21.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React21.createElement("button", { onClick: () => onDismissNodes(data.nodeIds), className: baseButtonClass, title: "Remover da visualiza\xE7\xE3o" }, /* @__PURE__ */ React21.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React21.createElement("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }), /* @__PURE__ */ React21.createElement("path", { d: "M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68" }), /* @__PURE__ */ React21.createElement("path", { d: "M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61" }), /* @__PURE__ */ React21.createElement("line", { x1: "2", y1: "2", x2: "22", y2: "22" })), /* @__PURE__ */ React21.createElement("span", null, "Dismiss (", nodeCount, ")")), /* @__PURE__ */ React21.createElement("button", { onClick: () => onDismissOtherNodes(data.nodeIds), className: baseButtonClass, title: "Remover outros da visualiza\xE7\xE3o" }, /* @__PURE__ */ React21.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React21.createElement("circle", { cx: "12", cy: "12", r: "3" }), /* @__PURE__ */ React21.createElement("path", { d: "M3 7V5a2 2 0 0 1 2-2h2" }), /* @__PURE__ */ React21.createElement("path", { d: "M17 3h2a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ React21.createElement("path", { d: "M21 17v2a2 2 0 0 1-2 2h-2" }), /* @__PURE__ */ React21.createElement("path", { d: "M7 21H5a2 2 0 0 1-2-2v-2" })), /* @__PURE__ */ React21.createElement("span", null, "Dismiss other nodes")), canDelete && /* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement("div", { className: "my-1 h-px w-full bg-white/10" }), /* @__PURE__ */ React21.createElement("button", { onClick: () => setIsConfirmingDelete(true), className: deleteButtonClass, title: "Excluir Nodes" }, /* @__PURE__ */ React21.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React21.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React21.createElement("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }), /* @__PURE__ */ React21.createElement("line", { x1: "10", y1: "11", x2: "10", y2: "17" }), /* @__PURE__ */ React21.createElement("line", { x1: "14", y1: "11", x2: "14", y2: "17" })), /* @__PURE__ */ React21.createElement("span", null, "Excluir Nodes (", nodeCount, ")"))))))
|
|
12550
12763
|
);
|
|
12551
12764
|
}
|
|
12552
12765
|
|
|
12553
12766
|
// src/components/RelationshipDetailsPanel.jsx
|
|
12554
|
-
import
|
|
12767
|
+
import React22, { useState as useState21, useEffect as useEffect18, useRef as useRef16, useMemo as useMemo9 } from "react";
|
|
12555
12768
|
import { v4 as uuidv410 } from "uuid";
|
|
12556
12769
|
import { FiPlus as FiPlus9, FiEdit2 as FiEdit29, FiLoader as FiLoader4, FiBookOpen as FiBookOpen5 } from "react-icons/fi";
|
|
12557
12770
|
function RelationshipDetailsPanel({
|
|
@@ -12691,7 +12904,7 @@ function RelationshipDetailsPanel({
|
|
|
12691
12904
|
onOpenImageViewer([{ name: name2 || "Imagem", value: url }], 0);
|
|
12692
12905
|
}
|
|
12693
12906
|
};
|
|
12694
|
-
return /* @__PURE__ */
|
|
12907
|
+
return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement(
|
|
12695
12908
|
"div",
|
|
12696
12909
|
{
|
|
12697
12910
|
className: `ui-overlay absolute group rounded-2xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden transition-all duration-300 ease-out
|
|
@@ -12706,7 +12919,7 @@ function RelationshipDetailsPanel({
|
|
|
12706
12919
|
onContextMenu: swallow,
|
|
12707
12920
|
onDoubleClick: swallow
|
|
12708
12921
|
},
|
|
12709
|
-
isReadMode ? /* @__PURE__ */
|
|
12922
|
+
isReadMode ? /* @__PURE__ */ React22.createElement(
|
|
12710
12923
|
DescriptionReadModePanel,
|
|
12711
12924
|
{
|
|
12712
12925
|
title: name || "Rela\xE7\xE3o",
|
|
@@ -12727,7 +12940,7 @@ function RelationshipDetailsPanel({
|
|
|
12727
12940
|
onImageClick: handleImageClickFromText,
|
|
12728
12941
|
onSaveDescription: handleSaveDescriptionInline
|
|
12729
12942
|
}
|
|
12730
|
-
) : /* @__PURE__ */
|
|
12943
|
+
) : /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }), /* @__PURE__ */ React22.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React22.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React22.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React22.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-teal-400/80 shadow-[0_0_18px_2px_rgba(45,212,191,0.55)]" }), /* @__PURE__ */ React22.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Rela\xE7\xE3o")), /* @__PURE__ */ React22.createElement("h2", { className: "text-xl sm:text-2xl font-semibold tracking-tight" }, name || "Rela\xE7\xE3o")), /* @__PURE__ */ React22.createElement(
|
|
12731
12944
|
"button",
|
|
12732
12945
|
{
|
|
12733
12946
|
onClick: onClose,
|
|
@@ -12736,7 +12949,7 @@ function RelationshipDetailsPanel({
|
|
|
12736
12949
|
title: "Fechar"
|
|
12737
12950
|
},
|
|
12738
12951
|
"\xD7"
|
|
12739
|
-
)), /* @__PURE__ */
|
|
12952
|
+
)), /* @__PURE__ */ React22.createElement("div", { className: "px-6 pb-28 overflow-y-auto overscroll-contain space-y-4 max-h-[68vh] custom-scrollbar" }, /* @__PURE__ */ React22.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React22.createElement("label", { className: "text-xs text-slate-300" }, "Nome da Rela\xE7\xE3o"), /* @__PURE__ */ React22.createElement(
|
|
12740
12953
|
"input",
|
|
12741
12954
|
{
|
|
12742
12955
|
type: "text",
|
|
@@ -12751,7 +12964,7 @@ function RelationshipDetailsPanel({
|
|
|
12751
12964
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
12752
12965
|
`
|
|
12753
12966
|
}
|
|
12754
|
-
)), /* @__PURE__ */
|
|
12967
|
+
)), /* @__PURE__ */ React22.createElement("div", { className: "rounded-xl border border-white/8 bg-slate-800/30 p-3 space-y-3" }, /* @__PURE__ */ React22.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React22.createElement(
|
|
12755
12968
|
"svg",
|
|
12756
12969
|
{
|
|
12757
12970
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -12765,9 +12978,9 @@ function RelationshipDetailsPanel({
|
|
|
12765
12978
|
strokeLinejoin: "round",
|
|
12766
12979
|
className: "text-violet-400 flex-shrink-0"
|
|
12767
12980
|
},
|
|
12768
|
-
/* @__PURE__ */
|
|
12769
|
-
/* @__PURE__ */
|
|
12770
|
-
), /* @__PURE__ */
|
|
12981
|
+
/* @__PURE__ */ React22.createElement("path", { d: "M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z" }),
|
|
12982
|
+
/* @__PURE__ */ React22.createElement("line", { x1: "7", y1: "7", x2: "7.01", y2: "7" })
|
|
12983
|
+
), /* @__PURE__ */ React22.createElement("p", { className: "text-xs font-medium text-violet-300/80 uppercase tracking-wider" }, "Labels de Agrupamento")), /* @__PURE__ */ React22.createElement("p", { className: "text-[11px] text-slate-400 leading-relaxed" }, "Labels agrupam conex\xF5es no menu de Conex\xF5es. Cada lado da conex\xE3o pode ter sua pr\xF3pria label."), /* @__PURE__ */ React22.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ React22.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React22.createElement("label", { className: "text-[11px] text-slate-400" }, "Label do Source"), /* @__PURE__ */ React22.createElement(
|
|
12771
12984
|
"input",
|
|
12772
12985
|
{
|
|
12773
12986
|
type: "text",
|
|
@@ -12784,7 +12997,7 @@ function RelationshipDetailsPanel({
|
|
|
12784
12997
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
12785
12998
|
`
|
|
12786
12999
|
}
|
|
12787
|
-
)), /* @__PURE__ */
|
|
13000
|
+
)), /* @__PURE__ */ React22.createElement("div", { className: "space-y-1" }, /* @__PURE__ */ React22.createElement("label", { className: "text-[11px] text-slate-400" }, "Label do Target"), /* @__PURE__ */ React22.createElement(
|
|
12788
13001
|
"input",
|
|
12789
13002
|
{
|
|
12790
13003
|
type: "text",
|
|
@@ -12801,7 +13014,7 @@ function RelationshipDetailsPanel({
|
|
|
12801
13014
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
12802
13015
|
`
|
|
12803
13016
|
}
|
|
12804
|
-
)))), /* @__PURE__ */
|
|
13017
|
+
)))), /* @__PURE__ */ React22.createElement("div", { className: "space-y-1.5 relative" }, /* @__PURE__ */ React22.createElement("label", { className: "text-xs text-slate-300" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React22.createElement("div", { className: "relative group min-h-[60px] bg-slate-800/40 rounded-lg border border-white/10 hover:border-white/20 transition-colors" }, /* @__PURE__ */ React22.createElement(
|
|
12805
13018
|
DescriptionDisplay,
|
|
12806
13019
|
{
|
|
12807
13020
|
description,
|
|
@@ -12813,7 +13026,7 @@ function RelationshipDetailsPanel({
|
|
|
12813
13026
|
onImageClick: handleImageClickFromText,
|
|
12814
13027
|
onSaveDescription: handleSaveDescriptionInline
|
|
12815
13028
|
}
|
|
12816
|
-
), /* @__PURE__ */
|
|
13029
|
+
), /* @__PURE__ */ React22.createElement("div", { className: "absolute top-0 right-0 flex bg-slate-900/50 rounded-bl-lg backdrop-blur-sm opacity-0 group-hover:opacity-100 focus-within:opacity-100 transition-opacity overflow-hidden border-b border-l border-white/5" }, /* @__PURE__ */ React22.createElement(
|
|
12817
13030
|
"button",
|
|
12818
13031
|
{
|
|
12819
13032
|
type: "button",
|
|
@@ -12821,8 +13034,8 @@ function RelationshipDetailsPanel({
|
|
|
12821
13034
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors border-r border-white/5",
|
|
12822
13035
|
title: "Modo de Leitura"
|
|
12823
13036
|
},
|
|
12824
|
-
/* @__PURE__ */
|
|
12825
|
-
), canEdit && /* @__PURE__ */
|
|
13037
|
+
/* @__PURE__ */ React22.createElement(FiBookOpen5, { size: 14 })
|
|
13038
|
+
), canEdit && /* @__PURE__ */ React22.createElement(
|
|
12826
13039
|
"button",
|
|
12827
13040
|
{
|
|
12828
13041
|
type: "button",
|
|
@@ -12830,24 +13043,24 @@ function RelationshipDetailsPanel({
|
|
|
12830
13043
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
12831
13044
|
title: "Editar descri\xE7\xE3o"
|
|
12832
13045
|
},
|
|
12833
|
-
/* @__PURE__ */
|
|
12834
|
-
)), !description && canEdit && /* @__PURE__ */
|
|
13046
|
+
/* @__PURE__ */ React22.createElement(FiEdit29, { size: 14 })
|
|
13047
|
+
)), !description && canEdit && /* @__PURE__ */ React22.createElement(
|
|
12835
13048
|
"div",
|
|
12836
13049
|
{
|
|
12837
13050
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
12838
13051
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
12839
13052
|
},
|
|
12840
13053
|
"Adicionar descri\xE7\xE3o..."
|
|
12841
|
-
))), /* @__PURE__ */
|
|
13054
|
+
))), /* @__PURE__ */ React22.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React22.createElement("div", { className: "flex items-center justify-between mb-2" }, /* @__PURE__ */ React22.createElement("h3", { className: "text-sm font-medium" }, "Propriedades Adicionais"), canEdit && /* @__PURE__ */ React22.createElement(
|
|
12842
13055
|
"button",
|
|
12843
13056
|
{
|
|
12844
13057
|
type: "button",
|
|
12845
13058
|
onClick: handleAddProp,
|
|
12846
13059
|
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-slate-800/70 hover:bg-slate-700/70 border border-white/10 transition-colors"
|
|
12847
13060
|
},
|
|
12848
|
-
/* @__PURE__ */
|
|
13061
|
+
/* @__PURE__ */ React22.createElement(FiPlus9, { size: 14 }),
|
|
12849
13062
|
" Adicionar"
|
|
12850
|
-
)), /* @__PURE__ */
|
|
13063
|
+
)), /* @__PURE__ */ React22.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React22.createElement(
|
|
12851
13064
|
CustomPropertyDisplay,
|
|
12852
13065
|
{
|
|
12853
13066
|
key: prop.id,
|
|
@@ -12861,7 +13074,7 @@ function RelationshipDetailsPanel({
|
|
|
12861
13074
|
onUploadFile,
|
|
12862
13075
|
disabled: !canEdit
|
|
12863
13076
|
}
|
|
12864
|
-
)), /* @__PURE__ */
|
|
13077
|
+
)), /* @__PURE__ */ React22.createElement("div", { ref: propsEndRef })))), /* @__PURE__ */ React22.createElement("div", { className: "sticky bottom-0 z-10 bg-gradient-to-t from-slate-950/80 via-slate-950/50 to-transparent px-6 py-4 border-t border-white/10 flex justify-end gap-3" }, /* @__PURE__ */ React22.createElement(
|
|
12865
13078
|
"button",
|
|
12866
13079
|
{
|
|
12867
13080
|
onClick: onClose,
|
|
@@ -12869,7 +13082,7 @@ function RelationshipDetailsPanel({
|
|
|
12869
13082
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm disabled:opacity-50"
|
|
12870
13083
|
},
|
|
12871
13084
|
canEdit ? "Cancelar" : "Fechar"
|
|
12872
|
-
), canEdit && /* @__PURE__ */
|
|
13085
|
+
), canEdit && /* @__PURE__ */ React22.createElement(
|
|
12873
13086
|
"button",
|
|
12874
13087
|
{
|
|
12875
13088
|
onClick: () => handleSave(false),
|
|
@@ -12878,10 +13091,10 @@ function RelationshipDetailsPanel({
|
|
|
12878
13091
|
${isSaving ? "bg-slate-700 text-slate-300 cursor-wait" : "bg-gradient-to-tr from-teal-600 to-teal-400 hover:from-teal-500 hover:to-teal-300 text-white"}
|
|
12879
13092
|
`
|
|
12880
13093
|
},
|
|
12881
|
-
isSaving && /* @__PURE__ */
|
|
13094
|
+
isSaving && /* @__PURE__ */ React22.createElement(FiLoader4, { className: "animate-spin" }),
|
|
12882
13095
|
isSaving ? "Salvando..." : "Salvar"
|
|
12883
13096
|
)))
|
|
12884
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
13097
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React22.createElement(
|
|
12885
13098
|
DescriptionEditModal,
|
|
12886
13099
|
{
|
|
12887
13100
|
isOpen: isDescriptionModalOpen,
|
|
@@ -12903,7 +13116,7 @@ function RelationshipDetailsPanel({
|
|
|
12903
13116
|
}
|
|
12904
13117
|
|
|
12905
13118
|
// src/components/RelationshipContextMenu.jsx
|
|
12906
|
-
import
|
|
13119
|
+
import React23, { useLayoutEffect as useLayoutEffect4, useRef as useRef17, useState as useState22, useEffect as useEffect19, useMemo as useMemo10 } from "react";
|
|
12907
13120
|
function RelationshipContextMenu({
|
|
12908
13121
|
data,
|
|
12909
13122
|
userRole,
|
|
@@ -12960,7 +13173,7 @@ function RelationshipContextMenu({
|
|
|
12960
13173
|
const dangerButtonClass = "w-full flex items-center gap-2.5 px-2 py-1.5 text-left text-sm rounded-md hover:bg-rose-500/20 text-rose-300 hover:text-rose-100 transition-colors duration-150 truncate";
|
|
12961
13174
|
const canUpdate = ability.can("update", "Connection");
|
|
12962
13175
|
const canDelete = ability.can("delete", "Connection");
|
|
12963
|
-
return /* @__PURE__ */
|
|
13176
|
+
return /* @__PURE__ */ React23.createElement(
|
|
12964
13177
|
"div",
|
|
12965
13178
|
{
|
|
12966
13179
|
ref: menuRef,
|
|
@@ -12974,29 +13187,29 @@ function RelationshipContextMenu({
|
|
|
12974
13187
|
onContextMenu: swallow,
|
|
12975
13188
|
onDoubleClick: swallow
|
|
12976
13189
|
},
|
|
12977
|
-
/* @__PURE__ */
|
|
12978
|
-
/* @__PURE__ */
|
|
13190
|
+
/* @__PURE__ */ React23.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }),
|
|
13191
|
+
/* @__PURE__ */ React23.createElement("div", { className: "p-1.5" }, isConfirmingDelete ? /* @__PURE__ */ React23.createElement("div", { className: "flex flex-col gap-3 p-2" }, /* @__PURE__ */ React23.createElement("div", { className: "flex flex-col items-center text-center gap-2" }, /* @__PURE__ */ React23.createElement("div", { className: "w-10 h-10 rounded-full bg-rose-500/20 flex items-center justify-center text-rose-400 mb-1" }, /* @__PURE__ */ React23.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ React23.createElement("polyline", { points: "3 6 5 6 21 6" }), /* @__PURE__ */ React23.createElement("path", { d: "M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6" }), /* @__PURE__ */ React23.createElement("path", { d: "M10 11v6" }), /* @__PURE__ */ React23.createElement("path", { d: "M14 11v6" }), /* @__PURE__ */ React23.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" }))), /* @__PURE__ */ React23.createElement("p", { className: "text-sm text-slate-200" }, "Excluir rela\xE7\xE3o?"), /* @__PURE__ */ React23.createElement("p", { className: "text-[11px] text-slate-400 leading-tight break-words" }, "Desconectar ", /* @__PURE__ */ React23.createElement("strong", null, sourceName), " de ", /* @__PURE__ */ React23.createElement("strong", null, targetName), ".")), /* @__PURE__ */ React23.createElement("div", { className: "flex gap-2 mt-1" }, /* @__PURE__ */ React23.createElement(
|
|
12979
13192
|
"button",
|
|
12980
13193
|
{
|
|
12981
13194
|
onClick: () => setIsConfirmingDelete(false),
|
|
12982
13195
|
className: "flex-1 px-2 py-2 text-xs font-medium bg-white/10 hover:bg-white/20 rounded-md text-white transition-colors"
|
|
12983
13196
|
},
|
|
12984
13197
|
"Cancelar"
|
|
12985
|
-
), /* @__PURE__ */
|
|
13198
|
+
), /* @__PURE__ */ React23.createElement(
|
|
12986
13199
|
"button",
|
|
12987
13200
|
{
|
|
12988
13201
|
onClick: () => onDelete == null ? void 0 : onDelete(data.linkObject),
|
|
12989
13202
|
className: "flex-1 px-2 py-2 text-xs font-medium bg-rose-600 hover:bg-rose-500 rounded-md text-white transition-colors"
|
|
12990
13203
|
},
|
|
12991
13204
|
"Excluir"
|
|
12992
|
-
))) : /* @__PURE__ */
|
|
13205
|
+
))) : /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement("div", { className: "flex items-center gap-2 px-2 pt-1 pb-2" }, /* @__PURE__ */ React23.createElement("span", { className: "inline-flex h-2 w-2 rounded-full bg-teal-400/80 shadow-[0_0_12px_1px_rgba(45,212,191,0.5)]" }), /* @__PURE__ */ React23.createElement("p", { className: "text-[11px] uppercase tracking-wider text-slate-400" }, "Rela\xE7\xE3o")), /* @__PURE__ */ React23.createElement("div", { className: "flex flex-col gap-1" }, canUpdate && /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement(
|
|
12993
13206
|
"button",
|
|
12994
13207
|
{
|
|
12995
13208
|
onClick: () => onRelinkSource == null ? void 0 : onRelinkSource(data.linkObject),
|
|
12996
13209
|
className: baseButtonClass,
|
|
12997
13210
|
title: "Desconectar ponta ligada ao Source"
|
|
12998
13211
|
},
|
|
12999
|
-
/* @__PURE__ */
|
|
13212
|
+
/* @__PURE__ */ React23.createElement(
|
|
13000
13213
|
"svg",
|
|
13001
13214
|
{
|
|
13002
13215
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13009,18 +13222,18 @@ function RelationshipContextMenu({
|
|
|
13009
13222
|
strokeLinecap: "round",
|
|
13010
13223
|
strokeLinejoin: "round"
|
|
13011
13224
|
},
|
|
13012
|
-
/* @__PURE__ */
|
|
13013
|
-
/* @__PURE__ */
|
|
13225
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.72" }),
|
|
13226
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.72-1.72" })
|
|
13014
13227
|
),
|
|
13015
|
-
/* @__PURE__ */
|
|
13016
|
-
), /* @__PURE__ */
|
|
13228
|
+
/* @__PURE__ */ React23.createElement("span", null, "Desconectar Source (", sourceName, ")")
|
|
13229
|
+
), /* @__PURE__ */ React23.createElement(
|
|
13017
13230
|
"button",
|
|
13018
13231
|
{
|
|
13019
13232
|
onClick: () => onRelinkTarget == null ? void 0 : onRelinkTarget(data.linkObject),
|
|
13020
13233
|
className: baseButtonClass,
|
|
13021
13234
|
title: "Desconectar ponta ligada ao Target"
|
|
13022
13235
|
},
|
|
13023
|
-
/* @__PURE__ */
|
|
13236
|
+
/* @__PURE__ */ React23.createElement(
|
|
13024
13237
|
"svg",
|
|
13025
13238
|
{
|
|
13026
13239
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13033,21 +13246,21 @@ function RelationshipContextMenu({
|
|
|
13033
13246
|
strokeLinecap: "round",
|
|
13034
13247
|
strokeLinejoin: "round"
|
|
13035
13248
|
},
|
|
13036
|
-
/* @__PURE__ */
|
|
13037
|
-
/* @__PURE__ */
|
|
13038
|
-
/* @__PURE__ */
|
|
13039
|
-
/* @__PURE__ */
|
|
13040
|
-
/* @__PURE__ */
|
|
13249
|
+
/* @__PURE__ */ React23.createElement("polyline", { points: "16 3 21 3 21 8" }),
|
|
13250
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "4", y1: "20", x2: "21", y2: "3" }),
|
|
13251
|
+
/* @__PURE__ */ React23.createElement("polyline", { points: "21 16 21 21 16 21" }),
|
|
13252
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "15", y1: "15", x2: "21", y2: "21" }),
|
|
13253
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "4", y1: "4", x2: "9", y2: "9" })
|
|
13041
13254
|
),
|
|
13042
|
-
/* @__PURE__ */
|
|
13043
|
-
), /* @__PURE__ */
|
|
13255
|
+
/* @__PURE__ */ React23.createElement("span", null, "Desconectar Target (", targetName, ")")
|
|
13256
|
+
), /* @__PURE__ */ React23.createElement("div", { className: "h-[1px] my-1 mx-1 bg-white/10" })), /* @__PURE__ */ React23.createElement(
|
|
13044
13257
|
"button",
|
|
13045
13258
|
{
|
|
13046
13259
|
onClick: () => onOpenDetails == null ? void 0 : onOpenDetails(data.linkObject),
|
|
13047
13260
|
className: baseButtonClass,
|
|
13048
13261
|
title: "Abrir detalhes da rela\xE7\xE3o"
|
|
13049
13262
|
},
|
|
13050
|
-
/* @__PURE__ */
|
|
13263
|
+
/* @__PURE__ */ React23.createElement(
|
|
13051
13264
|
"svg",
|
|
13052
13265
|
{
|
|
13053
13266
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13060,19 +13273,19 @@ function RelationshipContextMenu({
|
|
|
13060
13273
|
strokeLinecap: "round",
|
|
13061
13274
|
strokeLinejoin: "round"
|
|
13062
13275
|
},
|
|
13063
|
-
/* @__PURE__ */
|
|
13064
|
-
/* @__PURE__ */
|
|
13065
|
-
/* @__PURE__ */
|
|
13276
|
+
/* @__PURE__ */ React23.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
13277
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
|
|
13278
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "8" })
|
|
13066
13279
|
),
|
|
13067
|
-
/* @__PURE__ */
|
|
13068
|
-
), canDelete && /* @__PURE__ */
|
|
13280
|
+
/* @__PURE__ */ React23.createElement("span", null, "Abrir Detalhes")
|
|
13281
|
+
), canDelete && /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement("div", { className: "h-[1px] my-1 mx-1 bg-white/10" }), /* @__PURE__ */ React23.createElement(
|
|
13069
13282
|
"button",
|
|
13070
13283
|
{
|
|
13071
13284
|
onClick: () => setIsConfirmingDelete(true),
|
|
13072
13285
|
className: dangerButtonClass,
|
|
13073
13286
|
title: "Excluir esta conex\xE3o"
|
|
13074
13287
|
},
|
|
13075
|
-
/* @__PURE__ */
|
|
13288
|
+
/* @__PURE__ */ React23.createElement(
|
|
13076
13289
|
"svg",
|
|
13077
13290
|
{
|
|
13078
13291
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13085,19 +13298,19 @@ function RelationshipContextMenu({
|
|
|
13085
13298
|
strokeLinecap: "round",
|
|
13086
13299
|
strokeLinejoin: "round"
|
|
13087
13300
|
},
|
|
13088
|
-
/* @__PURE__ */
|
|
13089
|
-
/* @__PURE__ */
|
|
13090
|
-
/* @__PURE__ */
|
|
13091
|
-
/* @__PURE__ */
|
|
13092
|
-
/* @__PURE__ */
|
|
13301
|
+
/* @__PURE__ */ React23.createElement("polyline", { points: "3 6 5 6 21 6" }),
|
|
13302
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6" }),
|
|
13303
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M10 11v6" }),
|
|
13304
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M14 11v6" }),
|
|
13305
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" })
|
|
13093
13306
|
),
|
|
13094
|
-
/* @__PURE__ */
|
|
13307
|
+
/* @__PURE__ */ React23.createElement("span", null, "Excluir conex\xE3o (", sourceName, " \u2192 ", targetName, ")")
|
|
13095
13308
|
)))))
|
|
13096
13309
|
);
|
|
13097
13310
|
}
|
|
13098
13311
|
|
|
13099
13312
|
// src/components/LoadingScreen.jsx
|
|
13100
|
-
import
|
|
13313
|
+
import React24 from "react";
|
|
13101
13314
|
var styles = {
|
|
13102
13315
|
loadingOverlay: {
|
|
13103
13316
|
position: "fixed",
|
|
@@ -13129,11 +13342,11 @@ var styles = {
|
|
|
13129
13342
|
`
|
|
13130
13343
|
};
|
|
13131
13344
|
function LoadingScreen() {
|
|
13132
|
-
return /* @__PURE__ */
|
|
13345
|
+
return /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement("style", null, styles.keyframes), /* @__PURE__ */ React24.createElement("div", { style: styles.loadingOverlay }, /* @__PURE__ */ React24.createElement("div", { style: styles.spinner })));
|
|
13133
13346
|
}
|
|
13134
13347
|
|
|
13135
13348
|
// src/components/ImportParentFileModal.jsx
|
|
13136
|
-
import
|
|
13349
|
+
import React25, { useEffect as useEffect20, useState as useState23 } from "react";
|
|
13137
13350
|
function ImportParentFileModal({
|
|
13138
13351
|
isOpen,
|
|
13139
13352
|
onClose,
|
|
@@ -13214,13 +13427,13 @@ function ImportParentFileModal({
|
|
|
13214
13427
|
const swallow = (e) => e.stopPropagation();
|
|
13215
13428
|
const currentList = activeTab === "databases" ? availableDbs : availableViews;
|
|
13216
13429
|
const emptyMessage = activeTab === "databases" ? "Nenhum novo arquivo parent dispon\xEDvel." : "Nenhuma view dispon\xEDvel para importa\xE7\xE3o.";
|
|
13217
|
-
return /* @__PURE__ */
|
|
13430
|
+
return /* @__PURE__ */ React25.createElement(
|
|
13218
13431
|
"div",
|
|
13219
13432
|
{
|
|
13220
13433
|
className: "ui-overlay fixed inset-0 z-[1200] flex items-center justify-center bg-black/60 backdrop-blur-sm",
|
|
13221
13434
|
onClick: onClose
|
|
13222
13435
|
},
|
|
13223
|
-
/* @__PURE__ */
|
|
13436
|
+
/* @__PURE__ */ React25.createElement(
|
|
13224
13437
|
"div",
|
|
13225
13438
|
{
|
|
13226
13439
|
className: "ui-overlay relative rounded-2xl border border-white/10 bg-slate-950/80 shadow-[0_20px_80px_rgba(0,0,0,0.6)] text-white w-[min(92vw,500px)] flex flex-col max-h-[85vh]",
|
|
@@ -13232,14 +13445,14 @@ function ImportParentFileModal({
|
|
|
13232
13445
|
onContextMenu: swallow,
|
|
13233
13446
|
onDoubleClick: swallow
|
|
13234
13447
|
},
|
|
13235
|
-
/* @__PURE__ */
|
|
13448
|
+
/* @__PURE__ */ React25.createElement("div", { className: "flex items-center justify-between px-6 py-4 border-b border-white/10 flex-shrink-0" }, /* @__PURE__ */ React25.createElement("h2", { className: "text-lg font-semibold" }, "Importar"), /* @__PURE__ */ React25.createElement(
|
|
13236
13449
|
"button",
|
|
13237
13450
|
{
|
|
13238
13451
|
onClick: onClose,
|
|
13239
13452
|
className: "p-2 rounded-md text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
13240
13453
|
title: "Fechar"
|
|
13241
13454
|
},
|
|
13242
|
-
/* @__PURE__ */
|
|
13455
|
+
/* @__PURE__ */ React25.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-5 w-5", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React25.createElement(
|
|
13243
13456
|
"path",
|
|
13244
13457
|
{
|
|
13245
13458
|
fillRule: "evenodd",
|
|
@@ -13248,14 +13461,14 @@ function ImportParentFileModal({
|
|
|
13248
13461
|
}
|
|
13249
13462
|
))
|
|
13250
13463
|
)),
|
|
13251
|
-
/* @__PURE__ */
|
|
13464
|
+
/* @__PURE__ */ React25.createElement("div", { className: "flex px-6 border-b border-white/10 bg-white/5 flex-shrink-0" }, /* @__PURE__ */ React25.createElement(
|
|
13252
13465
|
"button",
|
|
13253
13466
|
{
|
|
13254
13467
|
onClick: () => setActiveTab("databases"),
|
|
13255
13468
|
className: `flex-1 py-3 text-sm font-medium border-b-2 transition-colors ${activeTab === "databases" ? "border-indigo-500 text-white" : "border-transparent text-slate-400 hover:text-slate-200"}`
|
|
13256
13469
|
},
|
|
13257
13470
|
"Arquivos Parent"
|
|
13258
|
-
), /* @__PURE__ */
|
|
13471
|
+
), /* @__PURE__ */ React25.createElement(
|
|
13259
13472
|
"button",
|
|
13260
13473
|
{
|
|
13261
13474
|
onClick: () => setActiveTab("views"),
|
|
@@ -13263,24 +13476,24 @@ function ImportParentFileModal({
|
|
|
13263
13476
|
},
|
|
13264
13477
|
"Views (Ancestralidades)"
|
|
13265
13478
|
)),
|
|
13266
|
-
/* @__PURE__ */
|
|
13479
|
+
/* @__PURE__ */ React25.createElement("div", { className: "p-6 overflow-y-auto custom-scrollbar flex-grow min-h-[200px]" }, isLoading ? /* @__PURE__ */ React25.createElement("div", { className: "flex items-center justify-center h-40" }, /* @__PURE__ */ React25.createElement("div", { className: "w-8 h-8 border-4 border-t-indigo-500 border-slate-700 rounded-full animate-spin" })) : /* @__PURE__ */ React25.createElement("div", { className: "space-y-2" }, currentList.length > 0 ? currentList.map((item) => /* @__PURE__ */ React25.createElement(
|
|
13267
13480
|
"div",
|
|
13268
13481
|
{
|
|
13269
13482
|
key: item.id,
|
|
13270
13483
|
onClick: () => setSelectedItem(item),
|
|
13271
13484
|
className: `px-4 py-3 rounded-lg border cursor-pointer transition-all duration-150 flex flex-col gap-1 ${(selectedItem == null ? void 0 : selectedItem.id) === item.id ? "bg-indigo-600 border-indigo-500 shadow-lg" : "bg-slate-800/60 border-white/10 hover:border-white/20 hover:bg-slate-800"}`
|
|
13272
13485
|
},
|
|
13273
|
-
/* @__PURE__ */
|
|
13274
|
-
item.description && /* @__PURE__ */
|
|
13275
|
-
)) : /* @__PURE__ */
|
|
13276
|
-
/* @__PURE__ */
|
|
13486
|
+
/* @__PURE__ */ React25.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React25.createElement("span", { className: "font-medium text-slate-100" }, item.name), activeTab === "views" && /* @__PURE__ */ React25.createElement("span", { className: "text-[10px] px-1.5 py-0.5 rounded bg-black/30 text-indigo-300 border border-indigo-500/30" }, "VIEW")),
|
|
13487
|
+
item.description && /* @__PURE__ */ React25.createElement("p", { className: `text-xs ${(selectedItem == null ? void 0 : selectedItem.id) === item.id ? "text-indigo-200" : "text-slate-400"}` }, item.description)
|
|
13488
|
+
)) : /* @__PURE__ */ React25.createElement("p", { className: "text-slate-400 text-center py-10" }, emptyMessage))),
|
|
13489
|
+
/* @__PURE__ */ React25.createElement("div", { className: "px-6 py-4 border-t border-white/10 flex justify-end gap-3 flex-shrink-0 bg-slate-900/50" }, /* @__PURE__ */ React25.createElement(
|
|
13277
13490
|
"button",
|
|
13278
13491
|
{
|
|
13279
13492
|
onClick: onClose,
|
|
13280
13493
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm text-slate-300"
|
|
13281
13494
|
},
|
|
13282
13495
|
"Cancelar"
|
|
13283
|
-
), /* @__PURE__ */
|
|
13496
|
+
), /* @__PURE__ */ React25.createElement(
|
|
13284
13497
|
"button",
|
|
13285
13498
|
{
|
|
13286
13499
|
onClick: handleConfirm,
|
|
@@ -13294,7 +13507,7 @@ function ImportParentFileModal({
|
|
|
13294
13507
|
}
|
|
13295
13508
|
|
|
13296
13509
|
// src/components/AncestryLinkDetailsPanel.jsx
|
|
13297
|
-
import
|
|
13510
|
+
import React26, { useState as useState24 } from "react";
|
|
13298
13511
|
import { FiBookOpen as FiBookOpen6 } from "react-icons/fi";
|
|
13299
13512
|
function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenReference, onMentionClick, onUploadFile, onHighlight }) {
|
|
13300
13513
|
var _a, _b, _c, _d;
|
|
@@ -13305,7 +13518,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13305
13518
|
const sourceName = ((_b = (_a = data.sourceNode) == null ? void 0 : _a.userData) == null ? void 0 : _b.name) || "Origem";
|
|
13306
13519
|
const targetName = ((_d = (_c = data.targetNode) == null ? void 0 : _c.userData) == null ? void 0 : _d.name) || "Destino";
|
|
13307
13520
|
const [isReadMode, setIsReadMode] = useState24(false);
|
|
13308
|
-
|
|
13521
|
+
React26.useEffect(() => {
|
|
13309
13522
|
return () => {
|
|
13310
13523
|
if (onHighlight) onHighlight(null);
|
|
13311
13524
|
};
|
|
@@ -13316,14 +13529,14 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13316
13529
|
onOpenImageViewer([{ name: name || "Imagem", value: url }], 0);
|
|
13317
13530
|
}
|
|
13318
13531
|
};
|
|
13319
|
-
return /* @__PURE__ */
|
|
13532
|
+
return /* @__PURE__ */ React26.createElement(
|
|
13320
13533
|
"div",
|
|
13321
13534
|
{
|
|
13322
13535
|
className: "ui-overlay fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-[1200]",
|
|
13323
13536
|
onClick: onClose,
|
|
13324
13537
|
onPointerDown: swallow
|
|
13325
13538
|
},
|
|
13326
|
-
/* @__PURE__ */
|
|
13539
|
+
/* @__PURE__ */ React26.createElement(
|
|
13327
13540
|
"div",
|
|
13328
13541
|
{
|
|
13329
13542
|
className: `relative group rounded-2xl border border-white/10 bg-slate-950/80 shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden flex flex-col max-h-[calc(100vh-4rem)] transition-all duration-300 ease-out
|
|
@@ -13331,7 +13544,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13331
13544
|
`,
|
|
13332
13545
|
onClick: swallow
|
|
13333
13546
|
},
|
|
13334
|
-
isReadMode ? /* @__PURE__ */
|
|
13547
|
+
isReadMode ? /* @__PURE__ */ React26.createElement(
|
|
13335
13548
|
DescriptionReadModePanel,
|
|
13336
13549
|
{
|
|
13337
13550
|
title: `${sourceName} \u2794 ${targetName}`,
|
|
@@ -13343,7 +13556,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13343
13556
|
onMentionClick,
|
|
13344
13557
|
onImageClick: handleImageClickFromText
|
|
13345
13558
|
}
|
|
13346
|
-
) : /* @__PURE__ */
|
|
13559
|
+
) : /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement("div", { className: "h-[2px] bg-gradient-to-r from-blue-500/0 via-blue-500/70 to-blue-500/0" }), /* @__PURE__ */ React26.createElement("div", { className: "px-6 pt-5 pb-3 flex items-start justify-between gap-4" }, /* @__PURE__ */ React26.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ React26.createElement("div", { className: "flex items-center gap-2 mb-1" }, /* @__PURE__ */ React26.createElement("span", { className: "inline-flex h-2.5 w-2.5 rounded-full bg-blue-500/80 shadow-[0_0_18px_2px_rgba(59,130,246,0.55)]" }), /* @__PURE__ */ React26.createElement("p", { className: "text-xs/relaxed text-slate-300" }, "Detalhes da Ancestralidade")), /* @__PURE__ */ React26.createElement("h2", { className: "text-lg font-semibold tracking-tight flex items-center gap-2" }, /* @__PURE__ */ React26.createElement(
|
|
13347
13560
|
"span",
|
|
13348
13561
|
{
|
|
13349
13562
|
className: "truncate max-w-[150px] cursor-help hover:text-blue-400 transition-colors",
|
|
@@ -13351,7 +13564,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13351
13564
|
onMouseLeave: () => onHighlight == null ? void 0 : onHighlight(null)
|
|
13352
13565
|
},
|
|
13353
13566
|
sourceName
|
|
13354
|
-
), /* @__PURE__ */
|
|
13567
|
+
), /* @__PURE__ */ React26.createElement("span", { className: "text-slate-500 text-sm" }, "\u2794"), /* @__PURE__ */ React26.createElement(
|
|
13355
13568
|
"span",
|
|
13356
13569
|
{
|
|
13357
13570
|
className: "truncate max-w-[150px] cursor-help hover:text-blue-400 transition-colors",
|
|
@@ -13359,15 +13572,15 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13359
13572
|
onMouseLeave: () => onHighlight == null ? void 0 : onHighlight(null)
|
|
13360
13573
|
},
|
|
13361
13574
|
targetName
|
|
13362
|
-
))), /* @__PURE__ */
|
|
13575
|
+
))), /* @__PURE__ */ React26.createElement("button", { onClick: onClose, className: "w-9 h-9 flex-shrink-0 grid place-content-center rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-xl", title: "Fechar" }, "\xD7")), /* @__PURE__ */ React26.createElement("div", { className: "px-6 pb-6 overflow-y-auto overscroll-contain space-y-4 custom-scrollbar" }, description && /* @__PURE__ */ React26.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React26.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React26.createElement("label", { className: "text-xs text-slate-300 font-medium" }, "Descri\xE7\xE3o"), /* @__PURE__ */ React26.createElement(
|
|
13363
13576
|
"button",
|
|
13364
13577
|
{
|
|
13365
13578
|
onClick: () => setIsReadMode(true),
|
|
13366
13579
|
className: "p-1 text-slate-400 hover:text-white transition-colors",
|
|
13367
13580
|
title: "Modo de Leitura"
|
|
13368
13581
|
},
|
|
13369
|
-
/* @__PURE__ */
|
|
13370
|
-
)), /* @__PURE__ */
|
|
13582
|
+
/* @__PURE__ */ React26.createElement(FiBookOpen6, { size: 14 })
|
|
13583
|
+
)), /* @__PURE__ */ React26.createElement("div", { className: "bg-slate-800/40 rounded-lg border border-white/10 p-1 relative group" }, /* @__PURE__ */ React26.createElement(
|
|
13371
13584
|
DescriptionDisplay,
|
|
13372
13585
|
{
|
|
13373
13586
|
description,
|
|
@@ -13376,7 +13589,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13376
13589
|
onMentionClick,
|
|
13377
13590
|
onImageClick: handleImageClickFromText
|
|
13378
13591
|
}
|
|
13379
|
-
))), customProps.length > 0 && /* @__PURE__ */
|
|
13592
|
+
))), customProps.length > 0 && /* @__PURE__ */ React26.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React26.createElement("label", { className: "text-xs text-slate-300 font-medium mb-2 block" }, "Propriedades"), /* @__PURE__ */ React26.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop) => /* @__PURE__ */ React26.createElement(
|
|
13380
13593
|
CustomPropertyDisplay,
|
|
13381
13594
|
{
|
|
13382
13595
|
key: prop.id,
|
|
@@ -13385,13 +13598,13 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13385
13598
|
onOpenImageViewer,
|
|
13386
13599
|
onUploadFile
|
|
13387
13600
|
}
|
|
13388
|
-
)))), !description && customProps.length === 0 && /* @__PURE__ */
|
|
13601
|
+
)))), !description && customProps.length === 0 && /* @__PURE__ */ React26.createElement("div", { className: "py-8 text-center text-slate-500 text-sm italic border border-dashed border-white/10 rounded-lg" }, "Nenhum detalhe adicional dispon\xEDvel para esta conex\xE3o."), /* @__PURE__ */ React26.createElement("div", { className: "mt-4 p-3 bg-blue-500/10 border border-blue-500/20 rounded-lg text-xs text-blue-200/80 text-center" }, 'Para editar esta conex\xE3o, utilize o menu "Editar Ancestralidade".')))
|
|
13389
13602
|
)
|
|
13390
13603
|
);
|
|
13391
13604
|
}
|
|
13392
13605
|
|
|
13393
13606
|
// src/components/Boards.jsx
|
|
13394
|
-
import
|
|
13607
|
+
import React29, {
|
|
13395
13608
|
useState as useState27,
|
|
13396
13609
|
useMemo as useMemo12,
|
|
13397
13610
|
useEffect as useEffect23,
|
|
@@ -13421,10 +13634,10 @@ import {
|
|
|
13421
13634
|
import { v4 as uuidv411 } from "uuid";
|
|
13422
13635
|
|
|
13423
13636
|
// src/components/RichGroupEditor.jsx
|
|
13424
|
-
import
|
|
13637
|
+
import React28, { useEffect as useEffect22, useRef as useRef19, useState as useState26, useCallback as useCallback4 } from "react";
|
|
13425
13638
|
|
|
13426
13639
|
// src/components/MentionPopover.jsx
|
|
13427
|
-
import
|
|
13640
|
+
import React27, { useEffect as useEffect21, useRef as useRef18, useState as useState25, useMemo as useMemo11 } from "react";
|
|
13428
13641
|
import { FiLayers as FiLayers6, FiCheckSquare as FiCheckSquare3, FiGitBranch as FiGitBranch3, FiBox } from "react-icons/fi";
|
|
13429
13642
|
var TYPE_CONFIG = {
|
|
13430
13643
|
ancestry: { Icon: FiLayers6, color: "text-indigo-400", label: "Ancestralidade" },
|
|
@@ -13472,7 +13685,7 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
|
|
|
13472
13685
|
if (el) el.scrollIntoView({ block: "nearest" });
|
|
13473
13686
|
}
|
|
13474
13687
|
}, [activeIndex]);
|
|
13475
|
-
return /* @__PURE__ */
|
|
13688
|
+
return /* @__PURE__ */ React27.createElement(
|
|
13476
13689
|
"div",
|
|
13477
13690
|
{
|
|
13478
13691
|
style: { top: position.top, left: position.left, position: "fixed", zIndex: 9999 },
|
|
@@ -13480,10 +13693,10 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
|
|
|
13480
13693
|
ref: listRef,
|
|
13481
13694
|
onMouseDown: (e) => e.preventDefault()
|
|
13482
13695
|
},
|
|
13483
|
-
filtered.length === 0 ? /* @__PURE__ */
|
|
13696
|
+
filtered.length === 0 ? /* @__PURE__ */ React27.createElement("div", { className: "px-4 py-3 text-xs text-slate-500" }, "Nenhum resultado para", " ", /* @__PURE__ */ React27.createElement("span", { className: "text-slate-300 font-medium" }, '"', query, '"')) : filtered.map((item, idx) => {
|
|
13484
13697
|
const config = TYPE_CONFIG[item.type] || TYPE_CONFIG.node;
|
|
13485
13698
|
const { Icon } = config;
|
|
13486
|
-
return /* @__PURE__ */
|
|
13699
|
+
return /* @__PURE__ */ React27.createElement(
|
|
13487
13700
|
"div",
|
|
13488
13701
|
{
|
|
13489
13702
|
key: item.id,
|
|
@@ -13494,9 +13707,9 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
|
|
|
13494
13707
|
onMouseEnter: () => setActiveIndex(idx),
|
|
13495
13708
|
className: `flex items-center gap-2.5 px-3 py-2 cursor-pointer text-sm transition-colors duration-100 ${idx === activeIndex ? "bg-indigo-500/20 text-white" : "text-slate-300 hover:bg-white/5"}`
|
|
13496
13709
|
},
|
|
13497
|
-
/* @__PURE__ */
|
|
13498
|
-
/* @__PURE__ */
|
|
13499
|
-
/* @__PURE__ */
|
|
13710
|
+
/* @__PURE__ */ React27.createElement(Icon, { size: 13, className: config.color }),
|
|
13711
|
+
/* @__PURE__ */ React27.createElement("span", { className: "flex-1 truncate font-medium" }, item.searchLabel || "Sem Nome"),
|
|
13712
|
+
/* @__PURE__ */ React27.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-wide shrink-0" }, config.label)
|
|
13500
13713
|
);
|
|
13501
13714
|
})
|
|
13502
13715
|
);
|
|
@@ -13566,7 +13779,7 @@ function domToContent(el) {
|
|
|
13566
13779
|
el.childNodes.forEach(walk);
|
|
13567
13780
|
return segments;
|
|
13568
13781
|
}
|
|
13569
|
-
var RichGroupEditor =
|
|
13782
|
+
var RichGroupEditor = React28.memo(function RichGroupEditor2({
|
|
13570
13783
|
content,
|
|
13571
13784
|
onChange,
|
|
13572
13785
|
onMentionClick,
|
|
@@ -13752,7 +13965,7 @@ var RichGroupEditor = React27.memo(function RichGroupEditor2({
|
|
|
13752
13965
|
}
|
|
13753
13966
|
setMentionState(null);
|
|
13754
13967
|
}, []);
|
|
13755
|
-
return /* @__PURE__ */
|
|
13968
|
+
return /* @__PURE__ */ React28.createElement("div", { className: "relative" }, isEmpty && !readOnly && /* @__PURE__ */ React28.createElement("div", { className: "absolute top-0 left-0 text-sm text-slate-600 pointer-events-none select-none" }, placeholder || "Escreva sobre este grupo\u2026 ou digite @ para mencionar"), /* @__PURE__ */ React28.createElement(
|
|
13756
13969
|
"div",
|
|
13757
13970
|
{
|
|
13758
13971
|
ref: editorRef,
|
|
@@ -13766,7 +13979,7 @@ var RichGroupEditor = React27.memo(function RichGroupEditor2({
|
|
|
13766
13979
|
className: `w-full min-h-[1.5rem] max-h-[250px] overflow-y-auto text-sm text-slate-200 focus:outline-none leading-relaxed ${!readOnly ? "cursor-text" : "cursor-default"}`,
|
|
13767
13980
|
style: { overflowWrap: "break-word", wordBreak: "break-word" }
|
|
13768
13981
|
}
|
|
13769
|
-
), mentionState && !readOnly && /* @__PURE__ */
|
|
13982
|
+
), mentionState && !readOnly && /* @__PURE__ */ React28.createElement(
|
|
13770
13983
|
MentionPopover,
|
|
13771
13984
|
{
|
|
13772
13985
|
query: mentionState.query,
|
|
@@ -13784,9 +13997,9 @@ var RichGroupEditor_default = RichGroupEditor;
|
|
|
13784
13997
|
// src/components/Boards.jsx
|
|
13785
13998
|
var Tooltip = ({ text, children }) => {
|
|
13786
13999
|
if (!text) return children;
|
|
13787
|
-
return /* @__PURE__ */
|
|
14000
|
+
return /* @__PURE__ */ React29.createElement("div", { className: "relative group/tooltip" }, children, /* @__PURE__ */ React29.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));
|
|
13788
14001
|
};
|
|
13789
|
-
var BoardItem =
|
|
14002
|
+
var BoardItem = React29.memo(
|
|
13790
14003
|
({
|
|
13791
14004
|
item,
|
|
13792
14005
|
index,
|
|
@@ -13832,20 +14045,20 @@ var BoardItem = React28.memo(
|
|
|
13832
14045
|
onUpdate(item.id, { ...item, color: newColor });
|
|
13833
14046
|
};
|
|
13834
14047
|
if (isFolder) {
|
|
13835
|
-
return /* @__PURE__ */
|
|
14048
|
+
return /* @__PURE__ */ React29.createElement("div", { className: "relative group/item animate-in fade-in zoom-in duration-300 w-[calc(16.66%-14px)] min-w-[160px] h-14 flex-shrink-0" }, /* @__PURE__ */ React29.createElement(
|
|
13836
14049
|
"div",
|
|
13837
14050
|
{
|
|
13838
14051
|
onClick: () => onEnterFolder(item.id),
|
|
13839
14052
|
className: "h-full flex items-center gap-3 px-3 py-2 bg-white/5 hover:bg-white/10 border border-white/10 hover:border-white/20 rounded-xl cursor-pointer transition-all duration-300 group/folder relative"
|
|
13840
14053
|
},
|
|
13841
|
-
/* @__PURE__ */
|
|
14054
|
+
/* @__PURE__ */ React29.createElement(
|
|
13842
14055
|
"div",
|
|
13843
14056
|
{
|
|
13844
14057
|
className: "absolute inset-y-0 left-0 w-1 opacity-0 group-hover/folder:opacity-100 transition-opacity rounded-l-xl",
|
|
13845
14058
|
style: { background: `linear-gradient(to right, ${item.color || "#6366f1"}33, transparent)` }
|
|
13846
14059
|
}
|
|
13847
14060
|
),
|
|
13848
|
-
/* @__PURE__ */
|
|
14061
|
+
/* @__PURE__ */ React29.createElement(
|
|
13849
14062
|
"div",
|
|
13850
14063
|
{
|
|
13851
14064
|
className: "w-9 h-9 rounded-lg flex items-center justify-center group-hover/folder:scale-105 transition-all duration-300 shadow-inner shrink-0",
|
|
@@ -13855,9 +14068,9 @@ var BoardItem = React28.memo(
|
|
|
13855
14068
|
color: item.color || "#6366f1"
|
|
13856
14069
|
}
|
|
13857
14070
|
},
|
|
13858
|
-
/* @__PURE__ */
|
|
14071
|
+
/* @__PURE__ */ React29.createElement(FiFolder3, { size: 18 })
|
|
13859
14072
|
),
|
|
13860
|
-
/* @__PURE__ */
|
|
14073
|
+
/* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-0 flex flex-col justify-center" }, canEdit ? /* @__PURE__ */ React29.createElement(
|
|
13861
14074
|
"input",
|
|
13862
14075
|
{
|
|
13863
14076
|
type: "text",
|
|
@@ -13867,8 +14080,8 @@ var BoardItem = React28.memo(
|
|
|
13867
14080
|
className: "bg-transparent border-none outline-none text-xs font-semibold text-slate-200 w-full focus:text-white placeholder:text-slate-600 truncate",
|
|
13868
14081
|
placeholder: "Nome..."
|
|
13869
14082
|
}
|
|
13870
|
-
) : /* @__PURE__ */
|
|
13871
|
-
canEdit && /* @__PURE__ */
|
|
14083
|
+
) : /* @__PURE__ */ React29.createElement("span", { className: "text-xs font-semibold text-slate-200 block truncate" }, item.name), /* @__PURE__ */ React29.createElement("span", { className: "text-[9px] text-slate-500 uppercase tracking-widest font-bold" }, ((_a = item.children) == null ? void 0 : _a.length) || 0, " itens")),
|
|
14084
|
+
canEdit && /* @__PURE__ */ React29.createElement("div", { className: "absolute inset-y-0 right-1.5 opacity-0 group-hover/folder:opacity-100 transition-all duration-300 z-10 flex items-center" }, /* @__PURE__ */ React29.createElement("div", { className: "flex bg-slate-950/90 backdrop-blur-md p-1 rounded-lg border border-white/10 shadow-2xl items-center" }, /* @__PURE__ */ React29.createElement("div", { className: "px-1", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React29.createElement(
|
|
13872
14085
|
ColorPicker,
|
|
13873
14086
|
{
|
|
13874
14087
|
isCompact: true,
|
|
@@ -13876,7 +14089,7 @@ var BoardItem = React28.memo(
|
|
|
13876
14089
|
onChange: handleColorChange,
|
|
13877
14090
|
disabled: !canEdit
|
|
13878
14091
|
}
|
|
13879
|
-
)), /* @__PURE__ */
|
|
14092
|
+
)), /* @__PURE__ */ React29.createElement("div", { className: "w-px h-4 bg-white/5 mx-0.5 self-center" }), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Subir" }, /* @__PURE__ */ React29.createElement(
|
|
13880
14093
|
"button",
|
|
13881
14094
|
{
|
|
13882
14095
|
onClick: (e) => {
|
|
@@ -13886,8 +14099,8 @@ var BoardItem = React28.memo(
|
|
|
13886
14099
|
disabled: !canMoveUp,
|
|
13887
14100
|
className: `p-1 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
13888
14101
|
},
|
|
13889
|
-
/* @__PURE__ */
|
|
13890
|
-
)), /* @__PURE__ */
|
|
14102
|
+
/* @__PURE__ */ React29.createElement(FiArrowUp, { size: 14 })
|
|
14103
|
+
)), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ React29.createElement(
|
|
13891
14104
|
"button",
|
|
13892
14105
|
{
|
|
13893
14106
|
onClick: (e) => {
|
|
@@ -13897,8 +14110,8 @@ var BoardItem = React28.memo(
|
|
|
13897
14110
|
disabled: !canMoveDown,
|
|
13898
14111
|
className: `p-1 rounded transition-colors ${!canMoveDown ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
13899
14112
|
},
|
|
13900
|
-
/* @__PURE__ */
|
|
13901
|
-
)), /* @__PURE__ */
|
|
14113
|
+
/* @__PURE__ */ React29.createElement(FiArrowDown, { size: 14 })
|
|
14114
|
+
)), /* @__PURE__ */ React29.createElement("div", { className: "w-px h-4 bg-white/5 mx-0.5 self-center" }), showIndentUp && /* @__PURE__ */ React29.createElement(Tooltip, { text: getIndentUpTooltip() }, /* @__PURE__ */ React29.createElement(
|
|
13902
14115
|
"button",
|
|
13903
14116
|
{
|
|
13904
14117
|
onClick: (e) => {
|
|
@@ -13907,8 +14120,8 @@ var BoardItem = React28.memo(
|
|
|
13907
14120
|
},
|
|
13908
14121
|
className: "p-1 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13909
14122
|
},
|
|
13910
|
-
/* @__PURE__ */
|
|
13911
|
-
)), showIndentDown && /* @__PURE__ */
|
|
14123
|
+
/* @__PURE__ */ React29.createElement(FiArrowLeft3, { size: 14 })
|
|
14124
|
+
)), showIndentDown && /* @__PURE__ */ React29.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ React29.createElement(
|
|
13912
14125
|
"button",
|
|
13913
14126
|
{
|
|
13914
14127
|
onClick: (e) => {
|
|
@@ -13917,8 +14130,8 @@ var BoardItem = React28.memo(
|
|
|
13917
14130
|
},
|
|
13918
14131
|
className: "p-1 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13919
14132
|
},
|
|
13920
|
-
/* @__PURE__ */
|
|
13921
|
-
)), !isAtRoot && /* @__PURE__ */
|
|
14133
|
+
/* @__PURE__ */ React29.createElement(FiArrowRight2, { size: 14 })
|
|
14134
|
+
)), !isAtRoot && /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement("div", { className: "w-px h-4 bg-white/5 mx-0.5 self-center" }), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Desaninhar / Recuar n\xEDvel" }, /* @__PURE__ */ React29.createElement(
|
|
13922
14135
|
"button",
|
|
13923
14136
|
{
|
|
13924
14137
|
onClick: (e) => {
|
|
@@ -13927,8 +14140,8 @@ var BoardItem = React28.memo(
|
|
|
13927
14140
|
},
|
|
13928
14141
|
className: `p-1 rounded text-slate-400 hover:text-white hover:bg-white/10 transition-colors`
|
|
13929
14142
|
},
|
|
13930
|
-
/* @__PURE__ */
|
|
13931
|
-
))), /* @__PURE__ */
|
|
14143
|
+
/* @__PURE__ */ React29.createElement(FiCornerUpLeft3, { size: 14 })
|
|
14144
|
+
))), /* @__PURE__ */ React29.createElement("div", { className: "w-px h-4 bg-white/5 mx-0.5 self-center" }), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Remover Pasta" }, /* @__PURE__ */ React29.createElement(
|
|
13932
14145
|
"button",
|
|
13933
14146
|
{
|
|
13934
14147
|
onClick: (e) => {
|
|
@@ -13937,11 +14150,11 @@ var BoardItem = React28.memo(
|
|
|
13937
14150
|
},
|
|
13938
14151
|
className: "p-1 text-slate-500 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
13939
14152
|
},
|
|
13940
|
-
/* @__PURE__ */
|
|
14153
|
+
/* @__PURE__ */ React29.createElement(FiTrash23, { size: 14 })
|
|
13941
14154
|
))))
|
|
13942
14155
|
));
|
|
13943
14156
|
}
|
|
13944
|
-
return /* @__PURE__ */
|
|
14157
|
+
return /* @__PURE__ */ React29.createElement("div", { className: "w-full flex flex-col gap-2 mb-3 pl-4 border-l border-white/10 relative group/item animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ React29.createElement("div", { className: "absolute -left-[1px] top-4 w-2 h-px bg-white/20" }), /* @__PURE__ */ React29.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__ */ React29.createElement(
|
|
13945
14158
|
RichGroupEditor_default,
|
|
13946
14159
|
{
|
|
13947
14160
|
content: item.content,
|
|
@@ -13951,61 +14164,61 @@ var BoardItem = React28.memo(
|
|
|
13951
14164
|
readOnly: !canEdit,
|
|
13952
14165
|
placeholder: "Escreva sobre este grupo de texto\u2026 ou @ para mencionar"
|
|
13953
14166
|
}
|
|
13954
|
-
), canEdit && /* @__PURE__ */
|
|
14167
|
+
), canEdit && /* @__PURE__ */ React29.createElement("div", { className: "flex items-center justify-between pt-2 mt-1 border-t border-white/5 opacity-40 group-hover/item:opacity-100 transition-opacity" }, /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React29.createElement(
|
|
13955
14168
|
"button",
|
|
13956
14169
|
{
|
|
13957
14170
|
onClick: () => onAddSubgroup(item.id, "text_group"),
|
|
13958
14171
|
className: "flex items-center gap-1 px-1.5 py-1 text-[10px] uppercase font-bold tracking-wider text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors",
|
|
13959
14172
|
title: "Criar Subgrupo de Texto"
|
|
13960
14173
|
},
|
|
13961
|
-
/* @__PURE__ */
|
|
13962
|
-
/* @__PURE__ */
|
|
13963
|
-
)), /* @__PURE__ */
|
|
14174
|
+
/* @__PURE__ */ React29.createElement(FiPlus10, { size: 12 }),
|
|
14175
|
+
/* @__PURE__ */ React29.createElement("span", null, "Subgrupo")
|
|
14176
|
+
)), /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React29.createElement(Tooltip, { text: "Subir" }, /* @__PURE__ */ React29.createElement(
|
|
13964
14177
|
"button",
|
|
13965
14178
|
{
|
|
13966
14179
|
onClick: () => onMoveUp(item.id),
|
|
13967
14180
|
disabled: !canMoveUp,
|
|
13968
14181
|
className: `p-1.5 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`
|
|
13969
14182
|
},
|
|
13970
|
-
/* @__PURE__ */
|
|
13971
|
-
)), /* @__PURE__ */
|
|
14183
|
+
/* @__PURE__ */ React29.createElement(FiArrowUp, { size: 14 })
|
|
14184
|
+
)), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ React29.createElement(
|
|
13972
14185
|
"button",
|
|
13973
14186
|
{
|
|
13974
14187
|
onClick: () => onMoveDown(item.id),
|
|
13975
14188
|
disabled: !canMoveDown,
|
|
13976
14189
|
className: `p-1.5 rounded transition-colors ${!canMoveDown ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`
|
|
13977
14190
|
},
|
|
13978
|
-
/* @__PURE__ */
|
|
13979
|
-
)), /* @__PURE__ */
|
|
14191
|
+
/* @__PURE__ */ React29.createElement(FiArrowDown, { size: 14 })
|
|
14192
|
+
)), /* @__PURE__ */ React29.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), showIndentUp && /* @__PURE__ */ React29.createElement(Tooltip, { text: getIndentUpTooltip() }, /* @__PURE__ */ React29.createElement(
|
|
13980
14193
|
"button",
|
|
13981
14194
|
{
|
|
13982
14195
|
onClick: () => onIndent(item.id),
|
|
13983
14196
|
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13984
14197
|
},
|
|
13985
|
-
/* @__PURE__ */
|
|
13986
|
-
)), showIndentDown && /* @__PURE__ */
|
|
14198
|
+
/* @__PURE__ */ React29.createElement(FiArrowLeft3, { size: 14 })
|
|
14199
|
+
)), showIndentDown && /* @__PURE__ */ React29.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ React29.createElement(
|
|
13987
14200
|
"button",
|
|
13988
14201
|
{
|
|
13989
14202
|
onClick: () => onIndentDown(item.id),
|
|
13990
14203
|
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
13991
14204
|
},
|
|
13992
|
-
/* @__PURE__ */
|
|
13993
|
-
)), !isAtRoot && /* @__PURE__ */
|
|
14205
|
+
/* @__PURE__ */ React29.createElement(FiArrowRight2, { size: 14 })
|
|
14206
|
+
)), !isAtRoot && /* @__PURE__ */ React29.createElement(Tooltip, { text: "Desaninhar / Recuar n\xEDvel" }, /* @__PURE__ */ React29.createElement(
|
|
13994
14207
|
"button",
|
|
13995
14208
|
{
|
|
13996
14209
|
onClick: () => onOutdent(item.id),
|
|
13997
14210
|
disabled: !onOutdent,
|
|
13998
14211
|
className: `p-1.5 rounded transition-colors ${!onOutdent ? "text-slate-800 cursor-not-allowed" : "text-slate-500 hover:text-white hover:bg-white/10"}`
|
|
13999
14212
|
},
|
|
14000
|
-
/* @__PURE__ */
|
|
14001
|
-
)), /* @__PURE__ */
|
|
14213
|
+
/* @__PURE__ */ React29.createElement(FiCornerUpLeft3, { size: 14 })
|
|
14214
|
+
)), /* @__PURE__ */ React29.createElement("div", { className: "w-px h-3 bg-white/10 mx-1" }), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Remover Grupo de Texto" }, /* @__PURE__ */ React29.createElement(
|
|
14002
14215
|
"button",
|
|
14003
14216
|
{
|
|
14004
14217
|
onClick: () => onDelete(item.id),
|
|
14005
14218
|
className: "p-1.5 text-slate-600 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
14006
14219
|
},
|
|
14007
|
-
/* @__PURE__ */
|
|
14008
|
-
))))), item.children && item.children.length > 0 && /* @__PURE__ */
|
|
14220
|
+
/* @__PURE__ */ React29.createElement(FiTrash23, { size: 14 })
|
|
14221
|
+
))))), item.children && item.children.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "ml-2" }, item.children.map((child, idx) => /* @__PURE__ */ React29.createElement(
|
|
14009
14222
|
BoardItem,
|
|
14010
14223
|
{
|
|
14011
14224
|
key: child.id,
|
|
@@ -14331,72 +14544,72 @@ function Boards({
|
|
|
14331
14544
|
setNavigationStack([]);
|
|
14332
14545
|
}, []);
|
|
14333
14546
|
if (!isOpen) return null;
|
|
14334
|
-
return /* @__PURE__ */
|
|
14547
|
+
return /* @__PURE__ */ React29.createElement(
|
|
14335
14548
|
"div",
|
|
14336
14549
|
{
|
|
14337
14550
|
className: "fixed inset-0 z-[2200] bg-black/80 backdrop-blur-sm flex items-center justify-center p-2",
|
|
14338
14551
|
onClick: onClose
|
|
14339
14552
|
},
|
|
14340
|
-
/* @__PURE__ */
|
|
14553
|
+
/* @__PURE__ */ React29.createElement(
|
|
14341
14554
|
"div",
|
|
14342
14555
|
{
|
|
14343
14556
|
className: "bg-slate-950 border border-white/10 rounded-xl w-full max-w-[calc(100vw-32px)] h-[97vh] flex flex-col shadow-2xl overflow-hidden animate-in fade-in zoom-in-95 duration-200",
|
|
14344
14557
|
onClick: (e) => e.stopPropagation()
|
|
14345
14558
|
},
|
|
14346
|
-
/* @__PURE__ */
|
|
14559
|
+
/* @__PURE__ */ React29.createElement("div", { className: "h-14 px-4 border-b border-white/10 bg-slate-900/90 flex items-center justify-between shrink-0" }, /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-4" }, /* @__PURE__ */ React29.createElement("h3", { className: "text-base font-semibold text-white flex items-center gap-2 whitespace-nowrap" }, /* @__PURE__ */ React29.createElement(FiLayers7, { className: "text-indigo-400" }), "Boards"), saveStatus !== "idle" && /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-2 animate-in fade-in slide-in-from-left-2 duration-300" }, /* @__PURE__ */ React29.createElement("div", { className: "w-px h-4 bg-white/10 mx-1" }), /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-slate-900/50 border border-white/5" }, saveStatus === "saving" && /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement(
|
|
14347
14560
|
FiLoader5,
|
|
14348
14561
|
{
|
|
14349
14562
|
className: "animate-spin text-indigo-400",
|
|
14350
14563
|
size: 12
|
|
14351
14564
|
}
|
|
14352
|
-
), /* @__PURE__ */
|
|
14565
|
+
), /* @__PURE__ */ React29.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-indigo-300" }, "Salvando")), saveStatus === "saved" && /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement(FiCheckCircle, { className: "text-emerald-400", size: 12 }), /* @__PURE__ */ React29.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-slate-400" }, "Salvo")), saveStatus === "error" && /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement("span", { className: "w-2 h-2 rounded-full bg-red-500" }), /* @__PURE__ */ React29.createElement("span", { className: "text-[10px] uppercase tracking-wide font-medium text-red-400" }, "Erro"))))), /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-3" }, canEdit && /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement(
|
|
14353
14566
|
"button",
|
|
14354
14567
|
{
|
|
14355
14568
|
onClick: () => handleAddItem("folder"),
|
|
14356
14569
|
className: "flex items-center gap-2 px-3 py-1.5 bg-white/5 hover:bg-white/10 border border-white/10 hover:border-white/20 backdrop-blur-sm text-slate-200 hover:text-white rounded-md transition-all duration-200 text-xs font-medium shadow-sm"
|
|
14357
14570
|
},
|
|
14358
|
-
/* @__PURE__ */
|
|
14359
|
-
/* @__PURE__ */
|
|
14360
|
-
), /* @__PURE__ */
|
|
14571
|
+
/* @__PURE__ */ React29.createElement(FiPlus10, { size: 14, className: "text-amber-400" }),
|
|
14572
|
+
/* @__PURE__ */ React29.createElement("span", { className: "hidden sm:inline" }, "Pasta")
|
|
14573
|
+
), /* @__PURE__ */ React29.createElement(
|
|
14361
14574
|
"button",
|
|
14362
14575
|
{
|
|
14363
14576
|
onClick: () => handleAddItem("text_group"),
|
|
14364
14577
|
className: "flex items-center gap-2 px-3 py-1.5 bg-white/5 hover:bg-white/10 border border-white/10 hover:border-white/20 backdrop-blur-sm text-slate-200 hover:text-white rounded-md transition-all duration-200 text-xs font-medium shadow-sm"
|
|
14365
14578
|
},
|
|
14366
|
-
/* @__PURE__ */
|
|
14367
|
-
/* @__PURE__ */
|
|
14368
|
-
)), /* @__PURE__ */
|
|
14579
|
+
/* @__PURE__ */ React29.createElement(FiPlus10, { size: 14, className: "text-indigo-400" }),
|
|
14580
|
+
/* @__PURE__ */ React29.createElement("span", { className: "hidden sm:inline" }, "Texto")
|
|
14581
|
+
)), /* @__PURE__ */ React29.createElement(
|
|
14369
14582
|
"button",
|
|
14370
14583
|
{
|
|
14371
14584
|
onClick: onClose,
|
|
14372
14585
|
className: "w-8 h-8 rounded-lg flex items-center justify-center text-slate-400 hover:text-white hover:bg-white/10 transition-colors"
|
|
14373
14586
|
},
|
|
14374
|
-
/* @__PURE__ */
|
|
14587
|
+
/* @__PURE__ */ React29.createElement(FiX8, { size: 16 })
|
|
14375
14588
|
))),
|
|
14376
|
-
/* @__PURE__ */
|
|
14589
|
+
/* @__PURE__ */ React29.createElement("div", { className: "h-10 px-6 bg-slate-900/40 border-b border-white/5 flex items-center gap-2 text-[10px] uppercase font-bold tracking-widest text-slate-500 overflow-x-auto no-scrollbar whitespace-nowrap" }, /* @__PURE__ */ React29.createElement(
|
|
14377
14590
|
"button",
|
|
14378
14591
|
{
|
|
14379
14592
|
onClick: navigateHome,
|
|
14380
14593
|
className: `hover:text-white transition-colors flex items-center gap-1 ${navigationStack.length === 0 ? "text-indigo-400" : ""}`
|
|
14381
14594
|
},
|
|
14382
14595
|
"Home"
|
|
14383
|
-
), currentPath.map((folder, idx) => /* @__PURE__ */
|
|
14596
|
+
), currentPath.map((folder, idx) => /* @__PURE__ */ React29.createElement(React29.Fragment, { key: folder.id }, /* @__PURE__ */ React29.createElement(FiChevronRight7, { size: 10, className: "shrink-0" }), /* @__PURE__ */ React29.createElement(
|
|
14384
14597
|
"button",
|
|
14385
14598
|
{
|
|
14386
14599
|
onClick: () => navigateToBreadcrumb(idx),
|
|
14387
14600
|
className: `hover:text-white transition-colors ${idx === currentPath.length - 1 ? "text-indigo-400" : ""}`
|
|
14388
14601
|
},
|
|
14389
14602
|
folder.name || "Sem Nome"
|
|
14390
|
-
))), navigationStack.length > 0 && /* @__PURE__ */
|
|
14603
|
+
))), navigationStack.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "ml-auto" }, /* @__PURE__ */ React29.createElement(
|
|
14391
14604
|
"button",
|
|
14392
14605
|
{
|
|
14393
14606
|
onClick: navigateUp,
|
|
14394
14607
|
className: "flex items-center gap-1 px-2 py-1 rounded bg-white/5 hover:bg-white/10 text-slate-400 hover:text-white transition-all"
|
|
14395
14608
|
},
|
|
14396
|
-
/* @__PURE__ */
|
|
14397
|
-
/* @__PURE__ */
|
|
14609
|
+
/* @__PURE__ */ React29.createElement(FiArrowLeft3, { size: 10 }),
|
|
14610
|
+
/* @__PURE__ */ React29.createElement("span", null, "Voltar")
|
|
14398
14611
|
))),
|
|
14399
|
-
/* @__PURE__ */
|
|
14612
|
+
/* @__PURE__ */ React29.createElement("div", { className: "flex-1 overflow-y-auto overflow-x-hidden custom-scrollbar bg-slate-950/30 p-6 flex flex-wrap gap-4 items-start content-start" }, currentBoardItems.length === 0 ? /* @__PURE__ */ React29.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 bg-slate-900/20" }, /* @__PURE__ */ React29.createElement(FiLayers7, { size: 24, className: "opacity-20" }), /* @__PURE__ */ React29.createElement("p", { className: "text-xs text-center px-4" }, canEdit ? /* @__PURE__ */ React29.createElement(React29.Fragment, null, "Esta pasta est\xE1 vazia.", /* @__PURE__ */ React29.createElement("br", null), "Use os bot\xF5es acima para criar conte\xFAdo.") : /* @__PURE__ */ React29.createElement(React29.Fragment, null, "Nenhum conte\xFAdo dispon\xEDvel nesta pasta."))) : currentBoardItems.map((item, index) => /* @__PURE__ */ React29.createElement(
|
|
14400
14613
|
BoardItem,
|
|
14401
14614
|
{
|
|
14402
14615
|
key: item.id,
|
|
@@ -14419,13 +14632,13 @@ function Boards({
|
|
|
14419
14632
|
isAtRoot: navigationStack.length === 0
|
|
14420
14633
|
}
|
|
14421
14634
|
))),
|
|
14422
|
-
/* @__PURE__ */
|
|
14635
|
+
/* @__PURE__ */ React29.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__ */ React29.createElement("span", null, currentBoardItems.length, " itens nesta visualiza\xE7\xE3o"))
|
|
14423
14636
|
)
|
|
14424
14637
|
);
|
|
14425
14638
|
}
|
|
14426
14639
|
|
|
14427
14640
|
// src/components/MilestoneManager.jsx
|
|
14428
|
-
import
|
|
14641
|
+
import React30, { useState as useState28 } from "react";
|
|
14429
14642
|
import { FiTarget as FiTarget4, FiPlus as FiPlus11, FiTrash2 as FiTrash24, FiX as FiX9, FiCheck as FiCheck12, FiPauseCircle, FiPlayCircle } from "react-icons/fi";
|
|
14430
14643
|
function MilestoneManager({
|
|
14431
14644
|
isOpen,
|
|
@@ -14459,27 +14672,27 @@ function MilestoneManager({
|
|
|
14459
14672
|
};
|
|
14460
14673
|
if (!isOpen) return null;
|
|
14461
14674
|
const swallow = (e) => e.stopPropagation();
|
|
14462
|
-
return /* @__PURE__ */
|
|
14675
|
+
return /* @__PURE__ */ React30.createElement(
|
|
14463
14676
|
"div",
|
|
14464
14677
|
{
|
|
14465
14678
|
className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-slate-950/40 backdrop-blur-sm animate-in fade-in duration-300",
|
|
14466
14679
|
onClick: onClose
|
|
14467
14680
|
},
|
|
14468
|
-
/* @__PURE__ */
|
|
14681
|
+
/* @__PURE__ */ React30.createElement(
|
|
14469
14682
|
"div",
|
|
14470
14683
|
{
|
|
14471
14684
|
className: "w-full max-w-lg bg-slate-900/90 backdrop-blur-xl border border-white/10 rounded-2xl shadow-2xl flex flex-col max-h-[85vh] animate-in zoom-in-95 duration-300",
|
|
14472
14685
|
onClick: swallow
|
|
14473
14686
|
},
|
|
14474
|
-
/* @__PURE__ */
|
|
14687
|
+
/* @__PURE__ */ React30.createElement("div", { className: "px-6 py-4 border-b border-white/10 flex items-center justify-between" }, /* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React30.createElement("div", { className: "p-2 rounded-lg bg-indigo-500/20 text-indigo-400" }, /* @__PURE__ */ React30.createElement(FiTarget4, { size: 20 })), /* @__PURE__ */ React30.createElement("div", null, /* @__PURE__ */ React30.createElement("h2", { className: "text-lg font-semibold text-slate-100" }, "Milestones"), /* @__PURE__ */ React30.createElement("p", { className: "text-xs text-slate-400" }, "Gerencie os marcos do seu cen\xE1rio"))), /* @__PURE__ */ React30.createElement(
|
|
14475
14688
|
"button",
|
|
14476
14689
|
{
|
|
14477
14690
|
onClick: onClose,
|
|
14478
14691
|
className: "p-2 rounded-full hover:bg-white/10 text-slate-400 hover:text-white transition-colors"
|
|
14479
14692
|
},
|
|
14480
|
-
/* @__PURE__ */
|
|
14693
|
+
/* @__PURE__ */ React30.createElement(FiX9, { size: 20 })
|
|
14481
14694
|
)),
|
|
14482
|
-
/* @__PURE__ */
|
|
14695
|
+
/* @__PURE__ */ React30.createElement("div", { className: "px-6 py-5 bg-white/5 border-b border-white/5" }, /* @__PURE__ */ React30.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React30.createElement(
|
|
14483
14696
|
"input",
|
|
14484
14697
|
{
|
|
14485
14698
|
type: "text",
|
|
@@ -14489,47 +14702,47 @@ function MilestoneManager({
|
|
|
14489
14702
|
placeholder: "Adicionar novo milestone...",
|
|
14490
14703
|
className: "flex-1 bg-slate-800/50 border border-white/10 rounded-xl px-4 py-2.5 text-sm text-slate-100 placeholder:text-slate-500 focus:outline-none focus:ring-2 focus:ring-indigo-500/40 focus:border-indigo-500/50 transition-all shadow-inner"
|
|
14491
14704
|
}
|
|
14492
|
-
), /* @__PURE__ */
|
|
14705
|
+
), /* @__PURE__ */ React30.createElement(
|
|
14493
14706
|
"button",
|
|
14494
14707
|
{
|
|
14495
14708
|
onClick: handleAddMilestone,
|
|
14496
14709
|
disabled: !newMilestoneName.trim(),
|
|
14497
14710
|
className: "px-4 py-2.5 rounded-xl bg-indigo-600 hover:bg-indigo-500 disabled:opacity-30 disabled:cursor-not-allowed text-white text-sm font-medium transition-all flex items-center gap-2 shadow-lg shadow-indigo-500/20 active:scale-95"
|
|
14498
14711
|
},
|
|
14499
|
-
/* @__PURE__ */
|
|
14712
|
+
/* @__PURE__ */ React30.createElement(FiPlus11, { size: 18 }),
|
|
14500
14713
|
"Adicionar"
|
|
14501
14714
|
))),
|
|
14502
|
-
/* @__PURE__ */
|
|
14715
|
+
/* @__PURE__ */ React30.createElement("div", { className: "flex-1 overflow-y-auto px-6 py-4 custom-scrollbar" }, milestones.length > 0 ? /* @__PURE__ */ React30.createElement("div", { className: "space-y-3" }, milestones.map((ms) => /* @__PURE__ */ React30.createElement(
|
|
14503
14716
|
"div",
|
|
14504
14717
|
{
|
|
14505
14718
|
key: ms.id,
|
|
14506
14719
|
className: `group flex items-center justify-between p-4 rounded-xl border transition-all duration-200 ${ms.status === "active" ? "bg-slate-800/40 border-indigo-500/20 hover:border-indigo-500/40" : "bg-slate-900/40 border-white/5 opacity-60 grayscale-[0.3]"}`
|
|
14507
14720
|
},
|
|
14508
|
-
/* @__PURE__ */
|
|
14721
|
+
/* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ React30.createElement(
|
|
14509
14722
|
"div",
|
|
14510
14723
|
{
|
|
14511
14724
|
className: `w-2 h-2 rounded-full shrink-0 ${ms.status === "active" ? "bg-indigo-400 shadow-[0_0_8px_rgba(129,140,248,0.6)]" : "bg-slate-600"}`
|
|
14512
14725
|
}
|
|
14513
|
-
), /* @__PURE__ */
|
|
14514
|
-
/* @__PURE__ */
|
|
14726
|
+
), /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col min-w-0" }, /* @__PURE__ */ React30.createElement("span", { className: `text-sm font-medium truncate ${ms.status === "active" ? "text-slate-100" : "text-slate-400 line-through"}` }, ms.name), /* @__PURE__ */ React30.createElement("span", { className: "text-[10px] text-slate-500 uppercase tracking-wider" }, ms.status === "active" ? "Ativo" : "Inativo"))),
|
|
14727
|
+
/* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React30.createElement(
|
|
14515
14728
|
"button",
|
|
14516
14729
|
{
|
|
14517
14730
|
onClick: () => handleToggleMilestoneStatus(ms.id),
|
|
14518
14731
|
className: `p-2 rounded-lg transition-all ${ms.status === "active" ? "hover:bg-slate-700 text-slate-400" : "hover:bg-indigo-500/20 text-indigo-400"}`,
|
|
14519
14732
|
title: ms.status === "active" ? "Inativar" : "Ativar"
|
|
14520
14733
|
},
|
|
14521
|
-
ms.status === "active" ? /* @__PURE__ */
|
|
14522
|
-
), /* @__PURE__ */
|
|
14734
|
+
ms.status === "active" ? /* @__PURE__ */ React30.createElement(FiPauseCircle, { size: 18 }) : /* @__PURE__ */ React30.createElement(FiPlayCircle, { size: 18 })
|
|
14735
|
+
), /* @__PURE__ */ React30.createElement(
|
|
14523
14736
|
"button",
|
|
14524
14737
|
{
|
|
14525
14738
|
onClick: () => handleRemoveMilestone(ms.id),
|
|
14526
14739
|
className: "p-2 rounded-lg hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-all",
|
|
14527
14740
|
title: "Remover"
|
|
14528
14741
|
},
|
|
14529
|
-
/* @__PURE__ */
|
|
14742
|
+
/* @__PURE__ */ React30.createElement(FiTrash24, { size: 18 })
|
|
14530
14743
|
))
|
|
14531
|
-
))) : /* @__PURE__ */
|
|
14532
|
-
/* @__PURE__ */
|
|
14744
|
+
))) : /* @__PURE__ */ React30.createElement("div", { className: "flex flex-col items-center justify-center py-12 text-center" }, /* @__PURE__ */ React30.createElement("div", { className: "p-4 rounded-full bg-slate-800/30 text-slate-600 mb-4" }, /* @__PURE__ */ React30.createElement(FiTarget4, { size: 40 })), /* @__PURE__ */ React30.createElement("h3", { className: "text-slate-400 font-medium" }, "Nenhum milestone definido"), /* @__PURE__ */ React30.createElement("p", { className: "text-xs text-slate-600 max-w-[200px] mt-1 italic" }, "Defina marcos importantes para orientar o progresso do projeto."))),
|
|
14745
|
+
/* @__PURE__ */ React30.createElement("div", { className: "px-6 py-4 border-t border-white/5 bg-slate-900/50 flex items-center justify-between rounded-b-2xl" }, /* @__PURE__ */ React30.createElement("div", { className: "flex gap-4" }, /* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React30.createElement("span", { className: "text-[10px] text-slate-500 uppercase tracking-widest" }, "Total:"), /* @__PURE__ */ React30.createElement("span", { className: "text-xs font-bold text-slate-300" }, milestones.length)), /* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ React30.createElement("span", { className: "text-[10px] text-slate-500 uppercase tracking-widest" }, "Ativos:"), /* @__PURE__ */ React30.createElement("span", { className: "text-xs font-bold text-indigo-400" }, milestones.filter((m) => m.status === "active").length))))
|
|
14533
14746
|
)
|
|
14534
14747
|
);
|
|
14535
14748
|
}
|
|
@@ -14613,7 +14826,8 @@ function XViewScene({
|
|
|
14613
14826
|
upload_file_action,
|
|
14614
14827
|
delete_file_action,
|
|
14615
14828
|
check_user_permission,
|
|
14616
|
-
get_view_members
|
|
14829
|
+
get_view_members,
|
|
14830
|
+
create_google_doc_action
|
|
14617
14831
|
}) {
|
|
14618
14832
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
14619
14833
|
const { data: session, status } = useSession();
|
|
@@ -19218,10 +19432,10 @@ function XViewScene({
|
|
|
19218
19432
|
// <-- handleCancelQuest adicionado aqui
|
|
19219
19433
|
]);
|
|
19220
19434
|
if (isLoading || status === "loading" || permissionStatus === "loading") {
|
|
19221
|
-
return /* @__PURE__ */
|
|
19435
|
+
return /* @__PURE__ */ React31.createElement(LoadingScreen, null);
|
|
19222
19436
|
}
|
|
19223
19437
|
if (permissionStatus === "denied") {
|
|
19224
|
-
return /* @__PURE__ */
|
|
19438
|
+
return /* @__PURE__ */ React31.createElement("div", { className: "flex flex-col items-center justify-center min-h-screen w-full bg-slate-950 text-white" }, /* @__PURE__ */ React31.createElement("div", { className: "bg-slate-900/50 p-8 rounded-2xl border border-slate-800 shadow-2xl text-center max-w-md" }, /* @__PURE__ */ React31.createElement("div", { className: "mb-4 text-red-500" }, /* @__PURE__ */ React31.createElement(
|
|
19225
19439
|
"svg",
|
|
19226
19440
|
{
|
|
19227
19441
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -19231,7 +19445,7 @@ function XViewScene({
|
|
|
19231
19445
|
stroke: "currentColor",
|
|
19232
19446
|
className: "w-16 h-16 mx-auto"
|
|
19233
19447
|
},
|
|
19234
|
-
/* @__PURE__ */
|
|
19448
|
+
/* @__PURE__ */ React31.createElement(
|
|
19235
19449
|
"path",
|
|
19236
19450
|
{
|
|
19237
19451
|
strokeLinecap: "round",
|
|
@@ -19239,13 +19453,13 @@ function XViewScene({
|
|
|
19239
19453
|
d: "M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z"
|
|
19240
19454
|
}
|
|
19241
19455
|
)
|
|
19242
|
-
)), /* @__PURE__ */
|
|
19456
|
+
)), /* @__PURE__ */ React31.createElement("h2", { className: "text-2xl font-bold mb-2" }, "Acesso Negado"), /* @__PURE__ */ React31.createElement("p", { className: "text-slate-400 mb-6" }, "Voc\xEA n\xE3o tem permiss\xE3o para acessar este conte\xFAdo. Solicite acesso ao propriet\xE1rio ou verifique se est\xE1 na conta correta."), /* @__PURE__ */ React31.createElement(
|
|
19243
19457
|
"button",
|
|
19244
19458
|
{
|
|
19245
19459
|
onClick: handleNavigateBack,
|
|
19246
19460
|
className: "flex items-center justify-center gap-2 w-full py-3 px-4 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition-colors font-medium"
|
|
19247
19461
|
},
|
|
19248
|
-
/* @__PURE__ */
|
|
19462
|
+
/* @__PURE__ */ React31.createElement(
|
|
19249
19463
|
"svg",
|
|
19250
19464
|
{
|
|
19251
19465
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -19255,7 +19469,7 @@ function XViewScene({
|
|
|
19255
19469
|
stroke: "currentColor",
|
|
19256
19470
|
className: "w-5 h-5"
|
|
19257
19471
|
},
|
|
19258
|
-
/* @__PURE__ */
|
|
19472
|
+
/* @__PURE__ */ React31.createElement(
|
|
19259
19473
|
"path",
|
|
19260
19474
|
{
|
|
19261
19475
|
strokeLinecap: "round",
|
|
@@ -19267,7 +19481,7 @@ function XViewScene({
|
|
|
19267
19481
|
"Voltar para o X.View"
|
|
19268
19482
|
)));
|
|
19269
19483
|
}
|
|
19270
|
-
return /* @__PURE__ */
|
|
19484
|
+
return /* @__PURE__ */ React31.createElement(
|
|
19271
19485
|
"div",
|
|
19272
19486
|
{
|
|
19273
19487
|
ref: mountRef,
|
|
@@ -19279,7 +19493,7 @@ function XViewScene({
|
|
|
19279
19493
|
cursor: stateRef.current.connection.isActive || stateRef.current.relink.isActive || ancestryMode.isActive ? "crosshair" : creationMode.isActive ? "default" : "grab"
|
|
19280
19494
|
}
|
|
19281
19495
|
},
|
|
19282
|
-
userPermissionRole !== "link_viewer" && /* @__PURE__ */
|
|
19496
|
+
userPermissionRole !== "link_viewer" && /* @__PURE__ */ React31.createElement(
|
|
19283
19497
|
XViewSidebar,
|
|
19284
19498
|
{
|
|
19285
19499
|
dbNodes: searchableDbNodes,
|
|
@@ -19304,7 +19518,7 @@ function XViewScene({
|
|
|
19304
19518
|
onOpenMilestoneManager: () => setIsMilestoneManagerOpen(true)
|
|
19305
19519
|
}
|
|
19306
19520
|
),
|
|
19307
|
-
creationMode.isActive && /* @__PURE__ */
|
|
19521
|
+
creationMode.isActive && /* @__PURE__ */ React31.createElement(
|
|
19308
19522
|
InSceneCreationForm,
|
|
19309
19523
|
{
|
|
19310
19524
|
onSave: (data) => userActionHandlers.handleSaveNode(actionHandlerContext, data),
|
|
@@ -19333,10 +19547,11 @@ function XViewScene({
|
|
|
19333
19547
|
sourceNodeDatasetId,
|
|
19334
19548
|
viewType: viewParams == null ? void 0 : viewParams.type,
|
|
19335
19549
|
availableNodes: allAvailableNodes,
|
|
19336
|
-
availableAncestries: allAvailableAncestries
|
|
19550
|
+
availableAncestries: allAvailableAncestries,
|
|
19551
|
+
create_google_doc_action
|
|
19337
19552
|
}
|
|
19338
19553
|
),
|
|
19339
|
-
versionMode.isActive && /* @__PURE__ */
|
|
19554
|
+
versionMode.isActive && /* @__PURE__ */ React31.createElement(
|
|
19340
19555
|
InSceneVersionForm,
|
|
19341
19556
|
{
|
|
19342
19557
|
onSave: (data) => userActionHandlers.handleSaveVersionNode(actionHandlerContext, data),
|
|
@@ -19362,7 +19577,7 @@ function XViewScene({
|
|
|
19362
19577
|
availableAncestries: allAvailableAncestries
|
|
19363
19578
|
}
|
|
19364
19579
|
),
|
|
19365
|
-
questMode.isActive && /* @__PURE__ */
|
|
19580
|
+
questMode.isActive && /* @__PURE__ */ React31.createElement(
|
|
19366
19581
|
InSceneQuestForm,
|
|
19367
19582
|
{
|
|
19368
19583
|
onSave: (data) => handleSaveQuestNode(actionHandlerContext, data),
|
|
@@ -19387,10 +19602,11 @@ function XViewScene({
|
|
|
19387
19602
|
questCounter: ((_h = sceneDataRef.current) == null ? void 0 : _h.quest_counter) || 1,
|
|
19388
19603
|
viewMembers,
|
|
19389
19604
|
milestones: ((_i = sceneDataRef.current) == null ? void 0 : _i.milestones) || [],
|
|
19390
|
-
onUpdateMilestones: handleUpdateMilestones
|
|
19605
|
+
onUpdateMilestones: handleUpdateMilestones,
|
|
19606
|
+
create_google_doc_action
|
|
19391
19607
|
}
|
|
19392
19608
|
),
|
|
19393
|
-
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */
|
|
19609
|
+
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ React31.createElement(
|
|
19394
19610
|
"div",
|
|
19395
19611
|
{
|
|
19396
19612
|
className: `ui-overlay absolute group rounded-2xl border border-white/10 bg-slate-950/70 backdrop-blur-xl shadow-[0_20px_80px_rgba(0,0,0,0.6)] ring-1 ring-white/10 text-white overflow-hidden flex flex-col ${isReadModeResizing ? "transition-none" : "transition-all duration-300 ease-out"}`,
|
|
@@ -19403,7 +19619,7 @@ function XViewScene({
|
|
|
19403
19619
|
maxWidth: "92vw"
|
|
19404
19620
|
}
|
|
19405
19621
|
},
|
|
19406
|
-
/* @__PURE__ */
|
|
19622
|
+
/* @__PURE__ */ React31.createElement(
|
|
19407
19623
|
"div",
|
|
19408
19624
|
{
|
|
19409
19625
|
onPointerDown: (e) => {
|
|
@@ -19414,7 +19630,7 @@ function XViewScene({
|
|
|
19414
19630
|
title: "Arraste para redimensionar"
|
|
19415
19631
|
}
|
|
19416
19632
|
),
|
|
19417
|
-
/* @__PURE__ */
|
|
19633
|
+
/* @__PURE__ */ React31.createElement(
|
|
19418
19634
|
DescriptionReadModePanel,
|
|
19419
19635
|
{
|
|
19420
19636
|
key: readingMode.branchStack.length > 0 ? readingMode.branchStack[readingMode.branchStack.length - 1].branchId : readingMode.ancestry.ancestry_id,
|
|
@@ -19449,7 +19665,7 @@ function XViewScene({
|
|
|
19449
19665
|
}
|
|
19450
19666
|
)
|
|
19451
19667
|
),
|
|
19452
|
-
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */
|
|
19668
|
+
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */ React31.createElement(
|
|
19453
19669
|
CreateAncestryPanel,
|
|
19454
19670
|
{
|
|
19455
19671
|
ancestryMode,
|
|
@@ -19485,7 +19701,7 @@ function XViewScene({
|
|
|
19485
19701
|
onRenderAbstractionTree: (data, targetId) => handleRenderAbstractionTree(data, targetId)
|
|
19486
19702
|
}
|
|
19487
19703
|
),
|
|
19488
|
-
editingAncestryRel.visible && /* @__PURE__ */
|
|
19704
|
+
editingAncestryRel.visible && /* @__PURE__ */ React31.createElement(
|
|
19489
19705
|
AncestryRelationshipPanel,
|
|
19490
19706
|
{
|
|
19491
19707
|
data: editingAncestryRel.data,
|
|
@@ -19499,7 +19715,7 @@ function XViewScene({
|
|
|
19499
19715
|
onUploadFile: upload_file_action
|
|
19500
19716
|
}
|
|
19501
19717
|
),
|
|
19502
|
-
detailsNode && detailsNode.is_quest && /* @__PURE__ */
|
|
19718
|
+
detailsNode && detailsNode.is_quest && /* @__PURE__ */ React31.createElement(
|
|
19503
19719
|
QuestDetailsPanel,
|
|
19504
19720
|
{
|
|
19505
19721
|
node: detailsNode,
|
|
@@ -19522,10 +19738,11 @@ function XViewScene({
|
|
|
19522
19738
|
viewMembers,
|
|
19523
19739
|
currentUser: session == null ? void 0 : session.user,
|
|
19524
19740
|
milestones: ((_j = sceneDataRef.current) == null ? void 0 : _j.milestones) || [],
|
|
19525
|
-
onUpdateMilestones: handleUpdateMilestones
|
|
19741
|
+
onUpdateMilestones: handleUpdateMilestones,
|
|
19742
|
+
create_google_doc_action
|
|
19526
19743
|
}
|
|
19527
19744
|
),
|
|
19528
|
-
detailsNode && !detailsNode.is_quest && /* @__PURE__ */
|
|
19745
|
+
detailsNode && !detailsNode.is_quest && /* @__PURE__ */ React31.createElement(
|
|
19529
19746
|
NodeDetailsPanel,
|
|
19530
19747
|
{
|
|
19531
19748
|
node: detailsNode,
|
|
@@ -19554,10 +19771,11 @@ function XViewScene({
|
|
|
19554
19771
|
onIntensityChange: handleDetailNodeIntensityChange,
|
|
19555
19772
|
onUploadFile: upload_file_action,
|
|
19556
19773
|
userRole: userPermissionRole,
|
|
19557
|
-
currentDatasetName: detailsNodeDatasetInfo == null ? void 0 : detailsNodeDatasetInfo.datasetName
|
|
19774
|
+
currentDatasetName: detailsNodeDatasetInfo == null ? void 0 : detailsNodeDatasetInfo.datasetName,
|
|
19775
|
+
create_google_doc_action
|
|
19558
19776
|
}
|
|
19559
19777
|
),
|
|
19560
|
-
detailsLink && /* @__PURE__ */
|
|
19778
|
+
detailsLink && /* @__PURE__ */ React31.createElement(
|
|
19561
19779
|
RelationshipDetailsPanel,
|
|
19562
19780
|
{
|
|
19563
19781
|
link: detailsLink,
|
|
@@ -19572,7 +19790,7 @@ function XViewScene({
|
|
|
19572
19790
|
onHighlight: handleReadModeHighlight
|
|
19573
19791
|
}
|
|
19574
19792
|
),
|
|
19575
|
-
ancestryLinkDetails && /* @__PURE__ */
|
|
19793
|
+
ancestryLinkDetails && /* @__PURE__ */ React31.createElement(
|
|
19576
19794
|
AncestryLinkDetailsPanel,
|
|
19577
19795
|
{
|
|
19578
19796
|
data: ancestryLinkDetails,
|
|
@@ -19584,7 +19802,7 @@ function XViewScene({
|
|
|
19584
19802
|
onHighlight: handleReadModeHighlight
|
|
19585
19803
|
}
|
|
19586
19804
|
),
|
|
19587
|
-
/* @__PURE__ */
|
|
19805
|
+
/* @__PURE__ */ React31.createElement(
|
|
19588
19806
|
"div",
|
|
19589
19807
|
{
|
|
19590
19808
|
ref: tooltipRef,
|
|
@@ -19611,7 +19829,7 @@ function XViewScene({
|
|
|
19611
19829
|
}
|
|
19612
19830
|
}
|
|
19613
19831
|
),
|
|
19614
|
-
/* @__PURE__ */
|
|
19832
|
+
/* @__PURE__ */ React31.createElement(
|
|
19615
19833
|
ContextMenu,
|
|
19616
19834
|
{
|
|
19617
19835
|
data: contextMenu,
|
|
@@ -19649,7 +19867,7 @@ function XViewScene({
|
|
|
19649
19867
|
onFinishQuest: handleFinishQuestQuick
|
|
19650
19868
|
}
|
|
19651
19869
|
),
|
|
19652
|
-
/* @__PURE__ */
|
|
19870
|
+
/* @__PURE__ */ React31.createElement(
|
|
19653
19871
|
MultiNodeContextMenu,
|
|
19654
19872
|
{
|
|
19655
19873
|
data: multiContextMenu,
|
|
@@ -19669,7 +19887,7 @@ function XViewScene({
|
|
|
19669
19887
|
)
|
|
19670
19888
|
}
|
|
19671
19889
|
),
|
|
19672
|
-
/* @__PURE__ */
|
|
19890
|
+
/* @__PURE__ */ React31.createElement(
|
|
19673
19891
|
RelationshipContextMenu,
|
|
19674
19892
|
{
|
|
19675
19893
|
data: relationshipMenu,
|
|
@@ -19687,14 +19905,14 @@ function XViewScene({
|
|
|
19687
19905
|
onDelete: (data) => userActionHandlers.handleDeleteLink(actionHandlerContext, data)
|
|
19688
19906
|
}
|
|
19689
19907
|
),
|
|
19690
|
-
/* @__PURE__ */
|
|
19908
|
+
/* @__PURE__ */ React31.createElement(
|
|
19691
19909
|
ImageViewer,
|
|
19692
19910
|
{
|
|
19693
19911
|
data: imageViewer,
|
|
19694
19912
|
onClose: () => setImageViewer({ ...imageViewer, visible: false })
|
|
19695
19913
|
}
|
|
19696
19914
|
),
|
|
19697
|
-
/* @__PURE__ */
|
|
19915
|
+
/* @__PURE__ */ React31.createElement(
|
|
19698
19916
|
Boards,
|
|
19699
19917
|
{
|
|
19700
19918
|
isOpen: isBoardsOpen,
|
|
@@ -19707,7 +19925,7 @@ function XViewScene({
|
|
|
19707
19925
|
userRole: userPermissionRole
|
|
19708
19926
|
}
|
|
19709
19927
|
),
|
|
19710
|
-
/* @__PURE__ */
|
|
19928
|
+
/* @__PURE__ */ React31.createElement(
|
|
19711
19929
|
MilestoneManager,
|
|
19712
19930
|
{
|
|
19713
19931
|
isOpen: isMilestoneManagerOpen,
|
|
@@ -19716,7 +19934,7 @@ function XViewScene({
|
|
|
19716
19934
|
onUpdateMilestones: handleUpdateMilestones
|
|
19717
19935
|
}
|
|
19718
19936
|
),
|
|
19719
|
-
/* @__PURE__ */
|
|
19937
|
+
/* @__PURE__ */ React31.createElement(
|
|
19720
19938
|
ImportParentFileModal,
|
|
19721
19939
|
{
|
|
19722
19940
|
isOpen: isImportModalOpen,
|
|
@@ -19729,7 +19947,7 @@ function XViewScene({
|
|
|
19729
19947
|
currentAncestries: ancestryDataRef.current || []
|
|
19730
19948
|
}
|
|
19731
19949
|
),
|
|
19732
|
-
invalidTargetError && /* @__PURE__ */
|
|
19950
|
+
invalidTargetError && /* @__PURE__ */ React31.createElement(
|
|
19733
19951
|
"div",
|
|
19734
19952
|
{
|
|
19735
19953
|
className: "ui-overlay",
|
|
@@ -19754,13 +19972,13 @@ function XViewScene({
|
|
|
19754
19972
|
animation: "fadeInDown 0.5s cubic-bezier(0.16, 1, 0.3, 1)"
|
|
19755
19973
|
}
|
|
19756
19974
|
},
|
|
19757
|
-
/* @__PURE__ */
|
|
19975
|
+
/* @__PURE__ */ React31.createElement("style", null, `
|
|
19758
19976
|
@keyframes fadeInDown {
|
|
19759
19977
|
from { opacity: 0; transform: translate(-50%, -20px); }
|
|
19760
19978
|
to { opacity: 1; transform: translate(-50%, 0); }
|
|
19761
19979
|
}
|
|
19762
19980
|
`),
|
|
19763
|
-
/* @__PURE__ */
|
|
19981
|
+
/* @__PURE__ */ React31.createElement(
|
|
19764
19982
|
"svg",
|
|
19765
19983
|
{
|
|
19766
19984
|
width: "20",
|
|
@@ -19772,12 +19990,12 @@ function XViewScene({
|
|
|
19772
19990
|
strokeLinecap: "round",
|
|
19773
19991
|
strokeLinejoin: "round"
|
|
19774
19992
|
},
|
|
19775
|
-
/* @__PURE__ */
|
|
19776
|
-
/* @__PURE__ */
|
|
19777
|
-
/* @__PURE__ */
|
|
19993
|
+
/* @__PURE__ */ React31.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
19994
|
+
/* @__PURE__ */ React31.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
19995
|
+
/* @__PURE__ */ React31.createElement("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
19778
19996
|
),
|
|
19779
|
-
/* @__PURE__ */
|
|
19780
|
-
/* @__PURE__ */
|
|
19997
|
+
/* @__PURE__ */ React31.createElement("span", { style: { fontSize: "14px", fontWeight: 500 } }, invalidTargetError),
|
|
19998
|
+
/* @__PURE__ */ React31.createElement(
|
|
19781
19999
|
"button",
|
|
19782
20000
|
{
|
|
19783
20001
|
onClick: () => setInvalidTargetError(null),
|