@lv-x-software-house/x_view 1.2.6-dev.61 → 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 +886 -856
- package/dist/index.mjs +569 -539
- 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,8 +8943,29 @@ import {
|
|
|
8943
8943
|
FiSun,
|
|
8944
8944
|
FiChevronDown as FiChevronDown4
|
|
8945
8945
|
} from "react-icons/fi";
|
|
8946
|
-
import { SiGoogledocs } from "react-icons/si";
|
|
8947
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
|
|
8948
8969
|
function InSceneCreationForm({
|
|
8949
8970
|
onSave,
|
|
8950
8971
|
onCancel,
|
|
@@ -9142,6 +9163,9 @@ function InSceneCreationForm({
|
|
|
9142
9163
|
value: [{ id: uuidv45(), name: "Abrir Documento", value: res.link }]
|
|
9143
9164
|
};
|
|
9144
9165
|
setCustomProps((prev) => [...prev, newProp]);
|
|
9166
|
+
if (res.link) {
|
|
9167
|
+
window.open(res.link, "_blank");
|
|
9168
|
+
}
|
|
9145
9169
|
} else {
|
|
9146
9170
|
alert("Erro ao criar documento: " + res.error);
|
|
9147
9171
|
}
|
|
@@ -9194,7 +9218,7 @@ function InSceneCreationForm({
|
|
|
9194
9218
|
}
|
|
9195
9219
|
};
|
|
9196
9220
|
const selectedDatasetName = ((_a = availableDatasets.find((ds) => ds.id === targetDatasetId)) == null ? void 0 : _a.name) || "Selecione um Dataset...";
|
|
9197
|
-
return /* @__PURE__ */
|
|
9221
|
+
return /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(
|
|
9198
9222
|
"div",
|
|
9199
9223
|
{
|
|
9200
9224
|
ref: refEl,
|
|
@@ -9208,25 +9232,25 @@ function InSceneCreationForm({
|
|
|
9208
9232
|
onContextMenu: swallow,
|
|
9209
9233
|
onDoubleClick: swallow
|
|
9210
9234
|
},
|
|
9211
|
-
/* @__PURE__ */
|
|
9212
|
-
/* @__PURE__ */
|
|
9213
|
-
/* @__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(
|
|
9214
9238
|
"span",
|
|
9215
9239
|
{
|
|
9216
9240
|
key: index,
|
|
9217
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"
|
|
9218
9242
|
},
|
|
9219
9243
|
t,
|
|
9220
|
-
/* @__PURE__ */
|
|
9244
|
+
/* @__PURE__ */ React14.createElement(
|
|
9221
9245
|
"button",
|
|
9222
9246
|
{
|
|
9223
9247
|
type: "button",
|
|
9224
9248
|
onClick: () => handleRemoveType(index),
|
|
9225
9249
|
className: "hover:text-white transition-colors"
|
|
9226
9250
|
},
|
|
9227
|
-
/* @__PURE__ */
|
|
9251
|
+
/* @__PURE__ */ React14.createElement(FiX3, { size: 12 })
|
|
9228
9252
|
)
|
|
9229
|
-
)), /* @__PURE__ */
|
|
9253
|
+
)), /* @__PURE__ */ React14.createElement(
|
|
9230
9254
|
"input",
|
|
9231
9255
|
{
|
|
9232
9256
|
type: "text",
|
|
@@ -9248,7 +9272,7 @@ function InSceneCreationForm({
|
|
|
9248
9272
|
autoComplete: "off",
|
|
9249
9273
|
autoFocus: true
|
|
9250
9274
|
}
|
|
9251
|
-
), 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(
|
|
9252
9276
|
"li",
|
|
9253
9277
|
{
|
|
9254
9278
|
key: index,
|
|
@@ -9259,7 +9283,7 @@ function InSceneCreationForm({
|
|
|
9259
9283
|
}
|
|
9260
9284
|
},
|
|
9261
9285
|
suggestedType
|
|
9262
|
-
))))), /* @__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(
|
|
9263
9287
|
"input",
|
|
9264
9288
|
{
|
|
9265
9289
|
required: true,
|
|
@@ -9269,21 +9293,21 @@ function InSceneCreationForm({
|
|
|
9269
9293
|
onChange: handleNameInputChange,
|
|
9270
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"
|
|
9271
9295
|
}
|
|
9272
|
-
)), 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(
|
|
9273
9297
|
"button",
|
|
9274
9298
|
{
|
|
9275
9299
|
type: "button",
|
|
9276
9300
|
onClick: () => setIsDatasetDropdownOpen(!isDatasetDropdownOpen),
|
|
9277
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"
|
|
9278
9302
|
},
|
|
9279
|
-
/* @__PURE__ */
|
|
9280
|
-
/* @__PURE__ */
|
|
9303
|
+
/* @__PURE__ */ React14.createElement("span", { className: "truncate pr-2" }, selectedDatasetName),
|
|
9304
|
+
/* @__PURE__ */ React14.createElement(
|
|
9281
9305
|
FiChevronDown4,
|
|
9282
9306
|
{
|
|
9283
9307
|
className: `flex-shrink-0 text-slate-400 transition-transform ${isDatasetDropdownOpen ? "rotate-180" : ""}`
|
|
9284
9308
|
}
|
|
9285
9309
|
)
|
|
9286
|
-
), 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(
|
|
9287
9311
|
"li",
|
|
9288
9312
|
{
|
|
9289
9313
|
key: ds.id,
|
|
@@ -9294,7 +9318,7 @@ function InSceneCreationForm({
|
|
|
9294
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"}`
|
|
9295
9319
|
},
|
|
9296
9320
|
ds.name
|
|
9297
|
-
)))), /* @__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(
|
|
9298
9322
|
DescriptionDisplay,
|
|
9299
9323
|
{
|
|
9300
9324
|
description,
|
|
@@ -9305,7 +9329,7 @@ function InSceneCreationForm({
|
|
|
9305
9329
|
onImageClick: handleImageClickFromText,
|
|
9306
9330
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
9307
9331
|
}
|
|
9308
|
-
), /* @__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(
|
|
9309
9333
|
"button",
|
|
9310
9334
|
{
|
|
9311
9335
|
type: "button",
|
|
@@ -9313,17 +9337,17 @@ function InSceneCreationForm({
|
|
|
9313
9337
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
9314
9338
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
9315
9339
|
},
|
|
9316
|
-
/* @__PURE__ */
|
|
9317
|
-
)), !description && /* @__PURE__ */
|
|
9340
|
+
/* @__PURE__ */ React14.createElement(FiEdit24, { size: 14 })
|
|
9341
|
+
)), !description && /* @__PURE__ */ React14.createElement(
|
|
9318
9342
|
"div",
|
|
9319
9343
|
{
|
|
9320
9344
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
9321
9345
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
9322
9346
|
},
|
|
9323
9347
|
"Adicionar descri\xE7\xE3o..."
|
|
9324
|
-
))), /* @__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) => {
|
|
9325
9349
|
const isSelected = size === s;
|
|
9326
|
-
return /* @__PURE__ */
|
|
9350
|
+
return /* @__PURE__ */ React14.createElement(
|
|
9327
9351
|
"button",
|
|
9328
9352
|
{
|
|
9329
9353
|
key: s,
|
|
@@ -9331,14 +9355,14 @@ function InSceneCreationForm({
|
|
|
9331
9355
|
onClick: () => handleSizeChange(s),
|
|
9332
9356
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
9333
9357
|
},
|
|
9334
|
-
/* @__PURE__ */
|
|
9358
|
+
/* @__PURE__ */ React14.createElement(
|
|
9335
9359
|
"div",
|
|
9336
9360
|
{
|
|
9337
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"}`
|
|
9338
9362
|
},
|
|
9339
|
-
isSelected && /* @__PURE__ */
|
|
9363
|
+
isSelected && /* @__PURE__ */ React14.createElement(FiCheck7, { size: 12, className: "text-white" })
|
|
9340
9364
|
),
|
|
9341
|
-
/* @__PURE__ */
|
|
9365
|
+
/* @__PURE__ */ React14.createElement(
|
|
9342
9366
|
"span",
|
|
9343
9367
|
{
|
|
9344
9368
|
className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
@@ -9346,13 +9370,13 @@ function InSceneCreationForm({
|
|
|
9346
9370
|
s
|
|
9347
9371
|
)
|
|
9348
9372
|
);
|
|
9349
|
-
}))), /* @__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(
|
|
9350
9374
|
"div",
|
|
9351
9375
|
{
|
|
9352
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"}`
|
|
9353
9377
|
},
|
|
9354
|
-
useImageAsTexture && /* @__PURE__ */
|
|
9355
|
-
), /* @__PURE__ */
|
|
9378
|
+
useImageAsTexture && /* @__PURE__ */ React14.createElement(FiCheck7, { size: 12, className: "text-white" })
|
|
9379
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9356
9380
|
"input",
|
|
9357
9381
|
{
|
|
9358
9382
|
type: "checkbox",
|
|
@@ -9360,20 +9384,20 @@ function InSceneCreationForm({
|
|
|
9360
9384
|
onChange: handleToggleImageMode,
|
|
9361
9385
|
className: "hidden"
|
|
9362
9386
|
}
|
|
9363
|
-
), /* @__PURE__ */
|
|
9387
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9364
9388
|
"span",
|
|
9365
9389
|
{
|
|
9366
9390
|
className: `text-xs ${useImageAsTexture ? "text-indigo-300" : "text-slate-400 group-hover:text-slate-300"}`
|
|
9367
9391
|
},
|
|
9368
9392
|
"Usar imagem para representar o node"
|
|
9369
|
-
))), /* @__PURE__ */
|
|
9393
|
+
))), /* @__PURE__ */ React14.createElement(
|
|
9370
9394
|
ColorPicker,
|
|
9371
9395
|
{
|
|
9372
9396
|
color,
|
|
9373
9397
|
onChange: handleColorInputChange,
|
|
9374
9398
|
disabled: useImageAsTexture
|
|
9375
9399
|
}
|
|
9376
|
-
), /* @__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(
|
|
9377
9401
|
"input",
|
|
9378
9402
|
{
|
|
9379
9403
|
type: "range",
|
|
@@ -9385,33 +9409,33 @@ function InSceneCreationForm({
|
|
|
9385
9409
|
className: "w-full h-1.5 bg-slate-700 rounded-lg appearance-none cursor-pointer accent-indigo-500 hover:accent-indigo-400",
|
|
9386
9410
|
title: `Intensidade do brilho: ${intensity}`
|
|
9387
9411
|
}
|
|
9388
|
-
), /* @__PURE__ */
|
|
9412
|
+
), /* @__PURE__ */ React14.createElement("span", { className: "text-xs text-slate-400 w-6 text-right" }, intensity)), /* @__PURE__ */ React14.createElement(
|
|
9389
9413
|
"span",
|
|
9390
9414
|
{
|
|
9391
9415
|
className: `text-xs block mt-1 transition-opacity ${useImageAsTexture ? "opacity-40" : "text-slate-400"}`
|
|
9392
9416
|
},
|
|
9393
9417
|
useImageAsTexture ? "Cor da borda (definida pela imagem)" : "Selecione a cor e ajuste o brilho."
|
|
9394
|
-
)), /* @__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(
|
|
9395
9419
|
"button",
|
|
9396
9420
|
{
|
|
9397
9421
|
type: "button",
|
|
9398
9422
|
onClick: handleCreateGoogleDoc,
|
|
9399
9423
|
disabled: isLoadingDocs,
|
|
9400
|
-
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-
|
|
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",
|
|
9401
9425
|
title: "Criar Documento no Google Docs"
|
|
9402
9426
|
},
|
|
9403
|
-
isLoadingDocs ? /* @__PURE__ */
|
|
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" }),
|
|
9404
9428
|
isLoadingDocs ? "Criando..." : "Google Doc"
|
|
9405
|
-
), /* @__PURE__ */
|
|
9429
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9406
9430
|
"button",
|
|
9407
9431
|
{
|
|
9408
9432
|
type: "button",
|
|
9409
9433
|
onClick: handleAddProp,
|
|
9410
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"
|
|
9411
9435
|
},
|
|
9412
|
-
/* @__PURE__ */
|
|
9436
|
+
/* @__PURE__ */ React14.createElement(FiPlus3, { size: 14 }),
|
|
9413
9437
|
" Adicionar"
|
|
9414
|
-
))), /* @__PURE__ */
|
|
9438
|
+
))), /* @__PURE__ */ React14.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React14.createElement(
|
|
9415
9439
|
CustomPropertyDisplay,
|
|
9416
9440
|
{
|
|
9417
9441
|
key: prop.id,
|
|
@@ -9427,7 +9451,7 @@ function InSceneCreationForm({
|
|
|
9427
9451
|
onSelectTexture: handleSelectTexture,
|
|
9428
9452
|
onUploadFile
|
|
9429
9453
|
}
|
|
9430
|
-
)), /* @__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(
|
|
9431
9455
|
"button",
|
|
9432
9456
|
{
|
|
9433
9457
|
type: "button",
|
|
@@ -9435,7 +9459,7 @@ function InSceneCreationForm({
|
|
|
9435
9459
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
9436
9460
|
},
|
|
9437
9461
|
"Cancelar"
|
|
9438
|
-
), /* @__PURE__ */
|
|
9462
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9439
9463
|
"button",
|
|
9440
9464
|
{
|
|
9441
9465
|
type: "submit",
|
|
@@ -9443,7 +9467,7 @@ function InSceneCreationForm({
|
|
|
9443
9467
|
},
|
|
9444
9468
|
"Salvar"
|
|
9445
9469
|
)))
|
|
9446
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
9470
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React14.createElement(
|
|
9447
9471
|
DescriptionEditModal,
|
|
9448
9472
|
{
|
|
9449
9473
|
isOpen: isDescriptionModalOpen,
|
|
@@ -9461,7 +9485,7 @@ function InSceneCreationForm({
|
|
|
9461
9485
|
}
|
|
9462
9486
|
|
|
9463
9487
|
// src/components/InSceneVersionForm.jsx
|
|
9464
|
-
import
|
|
9488
|
+
import React15, { useState as useState15, useEffect as useEffect14, useRef as useRef11 } from "react";
|
|
9465
9489
|
import { v4 as uuidv46 } from "uuid";
|
|
9466
9490
|
import { FiPlus as FiPlus4, FiMaximize2 as FiMaximize22, FiCheck as FiCheck8, FiEdit2 as FiEdit25 } from "react-icons/fi";
|
|
9467
9491
|
function InSceneVersionForm({
|
|
@@ -9599,7 +9623,7 @@ function InSceneVersionForm({
|
|
|
9599
9623
|
onOpenImageViewer([{ name: name2 || "Imagem", value: url }], 0);
|
|
9600
9624
|
}
|
|
9601
9625
|
};
|
|
9602
|
-
return /* @__PURE__ */
|
|
9626
|
+
return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(
|
|
9603
9627
|
"div",
|
|
9604
9628
|
{
|
|
9605
9629
|
ref: refEl,
|
|
@@ -9613,9 +9637,9 @@ function InSceneVersionForm({
|
|
|
9613
9637
|
onContextMenu: swallow,
|
|
9614
9638
|
onDoubleClick: swallow
|
|
9615
9639
|
},
|
|
9616
|
-
/* @__PURE__ */
|
|
9617
|
-
/* @__PURE__ */
|
|
9618
|
-
/* @__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(
|
|
9619
9643
|
"input",
|
|
9620
9644
|
{
|
|
9621
9645
|
type: "text",
|
|
@@ -9623,7 +9647,7 @@ function InSceneVersionForm({
|
|
|
9623
9647
|
disabled: true,
|
|
9624
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"
|
|
9625
9649
|
}
|
|
9626
|
-
)), /* @__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(
|
|
9627
9651
|
"input",
|
|
9628
9652
|
{
|
|
9629
9653
|
required: true,
|
|
@@ -9633,7 +9657,7 @@ function InSceneVersionForm({
|
|
|
9633
9657
|
onChange: handleNameInputChange,
|
|
9634
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"
|
|
9635
9659
|
}
|
|
9636
|
-
)), /* @__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(
|
|
9637
9661
|
DescriptionDisplay,
|
|
9638
9662
|
{
|
|
9639
9663
|
description,
|
|
@@ -9644,7 +9668,7 @@ function InSceneVersionForm({
|
|
|
9644
9668
|
onImageClick: handleImageClickFromText,
|
|
9645
9669
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
9646
9670
|
}
|
|
9647
|
-
), /* @__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(
|
|
9648
9672
|
"button",
|
|
9649
9673
|
{
|
|
9650
9674
|
type: "button",
|
|
@@ -9652,17 +9676,17 @@ function InSceneVersionForm({
|
|
|
9652
9676
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
9653
9677
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
9654
9678
|
},
|
|
9655
|
-
/* @__PURE__ */
|
|
9656
|
-
)), !description && /* @__PURE__ */
|
|
9679
|
+
/* @__PURE__ */ React15.createElement(FiEdit25, { size: 14 })
|
|
9680
|
+
)), !description && /* @__PURE__ */ React15.createElement(
|
|
9657
9681
|
"div",
|
|
9658
9682
|
{
|
|
9659
9683
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
9660
9684
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
9661
9685
|
},
|
|
9662
9686
|
"Adicionar descri\xE7\xE3o..."
|
|
9663
|
-
))), /* @__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) => {
|
|
9664
9688
|
const isSelected = size === s;
|
|
9665
|
-
return /* @__PURE__ */
|
|
9689
|
+
return /* @__PURE__ */ React15.createElement(
|
|
9666
9690
|
"button",
|
|
9667
9691
|
{
|
|
9668
9692
|
key: s,
|
|
@@ -9670,14 +9694,14 @@ function InSceneVersionForm({
|
|
|
9670
9694
|
onClick: () => handleSizeChange(s),
|
|
9671
9695
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
9672
9696
|
},
|
|
9673
|
-
/* @__PURE__ */
|
|
9697
|
+
/* @__PURE__ */ React15.createElement(
|
|
9674
9698
|
"div",
|
|
9675
9699
|
{
|
|
9676
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"}`
|
|
9677
9701
|
},
|
|
9678
|
-
isSelected && /* @__PURE__ */
|
|
9702
|
+
isSelected && /* @__PURE__ */ React15.createElement(FiCheck8, { size: 12, className: "text-white" })
|
|
9679
9703
|
),
|
|
9680
|
-
/* @__PURE__ */
|
|
9704
|
+
/* @__PURE__ */ React15.createElement(
|
|
9681
9705
|
"span",
|
|
9682
9706
|
{
|
|
9683
9707
|
className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
@@ -9685,13 +9709,13 @@ function InSceneVersionForm({
|
|
|
9685
9709
|
s
|
|
9686
9710
|
)
|
|
9687
9711
|
);
|
|
9688
|
-
}))), /* @__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(
|
|
9689
9713
|
"div",
|
|
9690
9714
|
{
|
|
9691
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"}`
|
|
9692
9716
|
},
|
|
9693
|
-
useImageAsTexture && /* @__PURE__ */
|
|
9694
|
-
), /* @__PURE__ */
|
|
9717
|
+
useImageAsTexture && /* @__PURE__ */ React15.createElement(FiCheck8, { size: 12, className: "text-white" })
|
|
9718
|
+
), /* @__PURE__ */ React15.createElement(
|
|
9695
9719
|
"input",
|
|
9696
9720
|
{
|
|
9697
9721
|
type: "checkbox",
|
|
@@ -9699,35 +9723,35 @@ function InSceneVersionForm({
|
|
|
9699
9723
|
onChange: handleToggleImageMode,
|
|
9700
9724
|
className: "hidden"
|
|
9701
9725
|
}
|
|
9702
|
-
), /* @__PURE__ */
|
|
9726
|
+
), /* @__PURE__ */ React15.createElement(
|
|
9703
9727
|
"span",
|
|
9704
9728
|
{
|
|
9705
9729
|
className: `text-xs ${useImageAsTexture ? "text-indigo-300" : "text-slate-400 group-hover:text-slate-300"}`
|
|
9706
9730
|
},
|
|
9707
9731
|
"Usar imagem"
|
|
9708
|
-
))), /* @__PURE__ */
|
|
9732
|
+
))), /* @__PURE__ */ React15.createElement(
|
|
9709
9733
|
"div",
|
|
9710
9734
|
{
|
|
9711
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"}`
|
|
9712
9736
|
},
|
|
9713
|
-
/* @__PURE__ */
|
|
9737
|
+
/* @__PURE__ */ React15.createElement(
|
|
9714
9738
|
"div",
|
|
9715
9739
|
{
|
|
9716
9740
|
className: "h-8 w-12 rounded-md border border-white/10",
|
|
9717
9741
|
style: { backgroundColor: fixedColor }
|
|
9718
9742
|
}
|
|
9719
9743
|
),
|
|
9720
|
-
/* @__PURE__ */
|
|
9721
|
-
)), /* @__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(
|
|
9722
9746
|
"button",
|
|
9723
9747
|
{
|
|
9724
9748
|
type: "button",
|
|
9725
9749
|
onClick: handleAddProp,
|
|
9726
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"
|
|
9727
9751
|
},
|
|
9728
|
-
/* @__PURE__ */
|
|
9752
|
+
/* @__PURE__ */ React15.createElement(FiPlus4, { size: 14 }),
|
|
9729
9753
|
" Adicionar"
|
|
9730
|
-
)), /* @__PURE__ */
|
|
9754
|
+
)), /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React15.createElement(
|
|
9731
9755
|
CustomPropertyDisplay,
|
|
9732
9756
|
{
|
|
9733
9757
|
key: prop.id,
|
|
@@ -9743,7 +9767,7 @@ function InSceneVersionForm({
|
|
|
9743
9767
|
onSelectTexture: handleSelectTexture,
|
|
9744
9768
|
onUploadFile
|
|
9745
9769
|
}
|
|
9746
|
-
)), /* @__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(
|
|
9747
9771
|
"button",
|
|
9748
9772
|
{
|
|
9749
9773
|
type: "button",
|
|
@@ -9751,7 +9775,7 @@ function InSceneVersionForm({
|
|
|
9751
9775
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
9752
9776
|
},
|
|
9753
9777
|
"Cancelar"
|
|
9754
|
-
), /* @__PURE__ */
|
|
9778
|
+
), /* @__PURE__ */ React15.createElement(
|
|
9755
9779
|
"button",
|
|
9756
9780
|
{
|
|
9757
9781
|
type: "submit",
|
|
@@ -9759,7 +9783,7 @@ function InSceneVersionForm({
|
|
|
9759
9783
|
},
|
|
9760
9784
|
"Salvar"
|
|
9761
9785
|
)))
|
|
9762
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
9786
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React15.createElement(
|
|
9763
9787
|
DescriptionEditModal,
|
|
9764
9788
|
{
|
|
9765
9789
|
isOpen: isDescriptionModalOpen,
|
|
@@ -9777,7 +9801,7 @@ function InSceneVersionForm({
|
|
|
9777
9801
|
}
|
|
9778
9802
|
|
|
9779
9803
|
// src/components/InSceneQuestForm.jsx
|
|
9780
|
-
import
|
|
9804
|
+
import React17, { useState as useState17, useRef as useRef12 } from "react";
|
|
9781
9805
|
import { v4 as uuidv47 } from "uuid";
|
|
9782
9806
|
import {
|
|
9783
9807
|
FiPlus as FiPlus6,
|
|
@@ -9792,11 +9816,10 @@ import {
|
|
|
9792
9816
|
FiRepeat,
|
|
9793
9817
|
FiCopy as FiCopy3
|
|
9794
9818
|
} from "react-icons/fi";
|
|
9795
|
-
import { SiGoogledocs as SiGoogledocs2 } from "react-icons/si";
|
|
9796
9819
|
import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters2 } from "react-icons/ai";
|
|
9797
9820
|
|
|
9798
9821
|
// src/components/QuestReviewStackEditor.jsx
|
|
9799
|
-
import
|
|
9822
|
+
import React16, { useState as useState16 } from "react";
|
|
9800
9823
|
import {
|
|
9801
9824
|
FiPlus as FiPlus5,
|
|
9802
9825
|
FiX as FiX4,
|
|
@@ -9849,22 +9872,22 @@ function QuestReviewStackEditor({
|
|
|
9849
9872
|
const search = searchQuery.toLowerCase();
|
|
9850
9873
|
return (m.name || "").toLowerCase().includes(search) || (m.email || "").toLowerCase().includes(search);
|
|
9851
9874
|
});
|
|
9852
|
-
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(
|
|
9853
9876
|
"button",
|
|
9854
9877
|
{
|
|
9855
9878
|
type: "button",
|
|
9856
9879
|
onClick: () => setIsAdding(true),
|
|
9857
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"
|
|
9858
9881
|
},
|
|
9859
|
-
/* @__PURE__ */
|
|
9882
|
+
/* @__PURE__ */ React16.createElement(FiPlus5, { size: 10 }),
|
|
9860
9883
|
" Adicionar Camada"
|
|
9861
|
-
)), 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(
|
|
9862
9885
|
FiSearch4,
|
|
9863
9886
|
{
|
|
9864
9887
|
className: "absolute left-2 top-1/2 -translate-y-1/2 text-slate-500",
|
|
9865
9888
|
size: 12
|
|
9866
9889
|
}
|
|
9867
|
-
), /* @__PURE__ */
|
|
9890
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9868
9891
|
"input",
|
|
9869
9892
|
{
|
|
9870
9893
|
autoFocus: true,
|
|
@@ -9874,32 +9897,32 @@ function QuestReviewStackEditor({
|
|
|
9874
9897
|
onChange: (e) => setSearchQuery(e.target.value),
|
|
9875
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"
|
|
9876
9899
|
}
|
|
9877
|
-
), /* @__PURE__ */
|
|
9900
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9878
9901
|
"button",
|
|
9879
9902
|
{
|
|
9880
9903
|
onClick: () => setIsAdding(false),
|
|
9881
9904
|
className: "absolute right-2 top-1/2 -translate-y-1/2 text-slate-500 hover:text-white"
|
|
9882
9905
|
},
|
|
9883
|
-
/* @__PURE__ */
|
|
9884
|
-
)), /* @__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(
|
|
9885
9908
|
"li",
|
|
9886
9909
|
{
|
|
9887
9910
|
key: m.id,
|
|
9888
9911
|
onClick: () => handleAddReviewer(m.id),
|
|
9889
9912
|
className: "px-2 py-1.5 hover:bg-white/5 rounded cursor-pointer text-xs flex items-center gap-2"
|
|
9890
9913
|
},
|
|
9891
|
-
/* @__PURE__ */
|
|
9892
|
-
/* @__PURE__ */
|
|
9893
|
-
)), 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) => {
|
|
9894
9917
|
const member = viewMembers.find((m) => m.id === item.userId);
|
|
9895
9918
|
const isCompleted = item.status === "completed";
|
|
9896
|
-
return /* @__PURE__ */
|
|
9919
|
+
return /* @__PURE__ */ React16.createElement(
|
|
9897
9920
|
"div",
|
|
9898
9921
|
{
|
|
9899
9922
|
key: index,
|
|
9900
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`
|
|
9901
9924
|
},
|
|
9902
|
-
/* @__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(
|
|
9903
9926
|
"button",
|
|
9904
9927
|
{
|
|
9905
9928
|
type: "button",
|
|
@@ -9907,8 +9930,8 @@ function QuestReviewStackEditor({
|
|
|
9907
9930
|
disabled: index === 0,
|
|
9908
9931
|
className: "hover:text-sky-400 disabled:opacity-20"
|
|
9909
9932
|
},
|
|
9910
|
-
/* @__PURE__ */
|
|
9911
|
-
), /* @__PURE__ */
|
|
9933
|
+
/* @__PURE__ */ React16.createElement(FiChevronUp, { size: 12 })
|
|
9934
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9912
9935
|
"button",
|
|
9913
9936
|
{
|
|
9914
9937
|
type: "button",
|
|
@@ -9916,16 +9939,16 @@ function QuestReviewStackEditor({
|
|
|
9916
9939
|
disabled: index === reviewStack.length - 1,
|
|
9917
9940
|
className: "hover:text-sky-400 disabled:opacity-20"
|
|
9918
9941
|
},
|
|
9919
|
-
/* @__PURE__ */
|
|
9942
|
+
/* @__PURE__ */ React16.createElement(FiChevronDown5, { size: 12 })
|
|
9920
9943
|
))),
|
|
9921
|
-
/* @__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(
|
|
9922
9945
|
"span",
|
|
9923
9946
|
{
|
|
9924
9947
|
className: `truncate text-sm font-medium ${isCompleted ? "text-green-300" : "text-slate-200"}`
|
|
9925
9948
|
},
|
|
9926
9949
|
(member == null ? void 0 : member.name) || (member == null ? void 0 : member.email) || "Unknown User"
|
|
9927
|
-
), item.mandatory && /* @__PURE__ */
|
|
9928
|
-
!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(
|
|
9929
9952
|
"button",
|
|
9930
9953
|
{
|
|
9931
9954
|
type: "button",
|
|
@@ -9933,18 +9956,18 @@ function QuestReviewStackEditor({
|
|
|
9933
9956
|
title: item.mandatory ? "Remover obrigatoriedade" : "Tornar obrigat\xF3rio",
|
|
9934
9957
|
className: `p-1.5 rounded hover:bg-white/10 transition-colors ${item.mandatory ? "text-amber-400" : "text-slate-500"}`
|
|
9935
9958
|
},
|
|
9936
|
-
/* @__PURE__ */
|
|
9937
|
-
), /* @__PURE__ */
|
|
9959
|
+
/* @__PURE__ */ React16.createElement(FiStar, { size: 14 })
|
|
9960
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9938
9961
|
"button",
|
|
9939
9962
|
{
|
|
9940
9963
|
type: "button",
|
|
9941
9964
|
onClick: () => handleRemoveReviewer(index),
|
|
9942
9965
|
className: "p-1.5 rounded hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-colors"
|
|
9943
9966
|
},
|
|
9944
|
-
/* @__PURE__ */
|
|
9967
|
+
/* @__PURE__ */ React16.createElement(FiX4, { size: 14 })
|
|
9945
9968
|
))
|
|
9946
9969
|
);
|
|
9947
|
-
}), 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(
|
|
9948
9971
|
"button",
|
|
9949
9972
|
{
|
|
9950
9973
|
type: "button",
|
|
@@ -10018,11 +10041,11 @@ function InSceneQuestForm({
|
|
|
10018
10041
|
const propsEndRef = useRef12(null);
|
|
10019
10042
|
const [milestoneInput, setMilestoneInput] = useState17("");
|
|
10020
10043
|
const [showMilestoneSuggestions, setShowMilestoneSuggestions] = useState17(false);
|
|
10021
|
-
const activeMilestones =
|
|
10044
|
+
const activeMilestones = React17.useMemo(
|
|
10022
10045
|
() => (milestones || []).filter((ms) => ms.status === "active"),
|
|
10023
10046
|
[milestones]
|
|
10024
10047
|
);
|
|
10025
|
-
const filteredMilestones =
|
|
10048
|
+
const filteredMilestones = React17.useMemo(() => {
|
|
10026
10049
|
const search = milestoneInput.toLowerCase().trim();
|
|
10027
10050
|
return activeMilestones.filter(
|
|
10028
10051
|
(ms) => ms.name.toLowerCase().includes(search) && !milestoneIds.includes(ms.id)
|
|
@@ -10059,11 +10082,11 @@ function InSceneQuestForm({
|
|
|
10059
10082
|
handleRemoveMilestone(milestoneIds[milestoneIds.length - 1]);
|
|
10060
10083
|
}
|
|
10061
10084
|
};
|
|
10062
|
-
const dependencyQuests =
|
|
10085
|
+
const dependencyQuests = React17.useMemo(
|
|
10063
10086
|
() => availableNodes.filter((n) => n.is_quest),
|
|
10064
10087
|
[availableNodes]
|
|
10065
10088
|
);
|
|
10066
|
-
const filteredDependencies =
|
|
10089
|
+
const filteredDependencies = React17.useMemo(() => {
|
|
10067
10090
|
const search = dependencyInput.toLowerCase().trim();
|
|
10068
10091
|
return dependencyQuests.filter((q) => {
|
|
10069
10092
|
var _a2;
|
|
@@ -10117,6 +10140,9 @@ function InSceneQuestForm({
|
|
|
10117
10140
|
value: [{ id: uuidv47(), name: "Abrir Documento", value: res.link }]
|
|
10118
10141
|
};
|
|
10119
10142
|
setCustomProps((prev) => [...prev, newProp]);
|
|
10143
|
+
if (res.link) {
|
|
10144
|
+
window.open(res.link, "_blank");
|
|
10145
|
+
}
|
|
10120
10146
|
} else {
|
|
10121
10147
|
alert("Erro ao criar documento: " + res.error);
|
|
10122
10148
|
}
|
|
@@ -10201,7 +10227,7 @@ function InSceneQuestForm({
|
|
|
10201
10227
|
const swallow = (e) => e.stopPropagation();
|
|
10202
10228
|
const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
|
|
10203
10229
|
const availableImages = customProps.filter((p) => p.type === "images").flatMap((p) => Array.isArray(p.value) ? p.value : []).filter((img) => img.value && img.value.trim() !== "");
|
|
10204
|
-
return /* @__PURE__ */
|
|
10230
|
+
return /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
10205
10231
|
"div",
|
|
10206
10232
|
{
|
|
10207
10233
|
ref: refEl,
|
|
@@ -10213,7 +10239,7 @@ function InSceneQuestForm({
|
|
|
10213
10239
|
onContextMenu: swallow,
|
|
10214
10240
|
onDoubleClick: swallow
|
|
10215
10241
|
},
|
|
10216
|
-
/* @__PURE__ */
|
|
10242
|
+
/* @__PURE__ */ React17.createElement(
|
|
10217
10243
|
"div",
|
|
10218
10244
|
{
|
|
10219
10245
|
className: "h-[2px]",
|
|
@@ -10222,7 +10248,7 @@ function InSceneQuestForm({
|
|
|
10222
10248
|
}
|
|
10223
10249
|
}
|
|
10224
10250
|
),
|
|
10225
|
-
/* @__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(
|
|
10226
10252
|
"button",
|
|
10227
10253
|
{
|
|
10228
10254
|
type: "button",
|
|
@@ -10232,7 +10258,7 @@ function InSceneQuestForm({
|
|
|
10232
10258
|
},
|
|
10233
10259
|
"\xD7"
|
|
10234
10260
|
)),
|
|
10235
|
-
/* @__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(
|
|
10236
10262
|
"input",
|
|
10237
10263
|
{
|
|
10238
10264
|
required: true,
|
|
@@ -10246,14 +10272,14 @@ function InSceneQuestForm({
|
|
|
10246
10272
|
},
|
|
10247
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"
|
|
10248
10274
|
}
|
|
10249
|
-
), /* @__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(
|
|
10250
10276
|
"p",
|
|
10251
10277
|
{
|
|
10252
10278
|
className: "text-xs text-indigo-300 font-medium truncate",
|
|
10253
10279
|
title: standardizedName
|
|
10254
10280
|
},
|
|
10255
10281
|
standardizedName
|
|
10256
|
-
), /* @__PURE__ */
|
|
10282
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10257
10283
|
"button",
|
|
10258
10284
|
{
|
|
10259
10285
|
type: "button",
|
|
@@ -10261,34 +10287,34 @@ function InSceneQuestForm({
|
|
|
10261
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`,
|
|
10262
10288
|
title: isNameCopied ? "Nome Copiado!" : "Copiar nome formatado"
|
|
10263
10289
|
},
|
|
10264
|
-
isNameCopied ? /* @__PURE__ */
|
|
10265
|
-
))), /* @__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(
|
|
10266
10292
|
"button",
|
|
10267
10293
|
{
|
|
10268
10294
|
type: "button",
|
|
10269
10295
|
onClick: () => setIsStatusDropdownOpen(!isStatusDropdownOpen),
|
|
10270
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"
|
|
10271
10297
|
},
|
|
10272
|
-
/* @__PURE__ */
|
|
10298
|
+
/* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React17.createElement(
|
|
10273
10299
|
"span",
|
|
10274
10300
|
{
|
|
10275
10301
|
className: "w-3 h-3 rounded-full shadow-[0_0_8px_rgba(0,0,0,0.5)]",
|
|
10276
10302
|
style: { backgroundColor: QUEST_STATUS_COLORS2[status] }
|
|
10277
10303
|
}
|
|
10278
|
-
), /* @__PURE__ */
|
|
10279
|
-
/* @__PURE__ */
|
|
10304
|
+
), /* @__PURE__ */ React17.createElement("span", { className: "text-slate-200 font-medium" }, status)),
|
|
10305
|
+
/* @__PURE__ */ React17.createElement(
|
|
10280
10306
|
FiChevronDown6,
|
|
10281
10307
|
{
|
|
10282
10308
|
className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}`
|
|
10283
10309
|
}
|
|
10284
10310
|
)
|
|
10285
|
-
), isStatusDropdownOpen && /* @__PURE__ */
|
|
10311
|
+
), isStatusDropdownOpen && /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
10286
10312
|
"div",
|
|
10287
10313
|
{
|
|
10288
10314
|
className: "fixed inset-0 z-40",
|
|
10289
10315
|
onClick: () => setIsStatusDropdownOpen(false)
|
|
10290
10316
|
}
|
|
10291
|
-
), /* @__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(
|
|
10292
10318
|
"li",
|
|
10293
10319
|
{
|
|
10294
10320
|
key: s,
|
|
@@ -10299,7 +10325,7 @@ function InSceneQuestForm({
|
|
|
10299
10325
|
},
|
|
10300
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"}`
|
|
10301
10327
|
},
|
|
10302
|
-
/* @__PURE__ */
|
|
10328
|
+
/* @__PURE__ */ React17.createElement(
|
|
10303
10329
|
"span",
|
|
10304
10330
|
{
|
|
10305
10331
|
className: "w-3 h-3 rounded-full",
|
|
@@ -10307,11 +10333,11 @@ function InSceneQuestForm({
|
|
|
10307
10333
|
}
|
|
10308
10334
|
),
|
|
10309
10335
|
s
|
|
10310
|
-
)))))), /* @__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) => {
|
|
10311
10337
|
const ms = (milestones || []).find((m) => m.id === id);
|
|
10312
10338
|
if (!ms) return null;
|
|
10313
|
-
return /* @__PURE__ */
|
|
10314
|
-
}), /* @__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(
|
|
10315
10341
|
"input",
|
|
10316
10342
|
{
|
|
10317
10343
|
type: "text",
|
|
@@ -10330,7 +10356,7 @@ function InSceneQuestForm({
|
|
|
10330
10356
|
placeholder: milestoneIds.length === 0 ? "Adicionar milestone..." : "",
|
|
10331
10357
|
autoComplete: "off"
|
|
10332
10358
|
}
|
|
10333
|
-
), 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(
|
|
10334
10360
|
"li",
|
|
10335
10361
|
{
|
|
10336
10362
|
key: ms.id,
|
|
@@ -10341,7 +10367,7 @@ function InSceneQuestForm({
|
|
|
10341
10367
|
}
|
|
10342
10368
|
},
|
|
10343
10369
|
ms.name
|
|
10344
|
-
))), 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(
|
|
10345
10371
|
"li",
|
|
10346
10372
|
{
|
|
10347
10373
|
className: "px-3 py-3 text-sm cursor-pointer hover:bg-indigo-600/50 flex flex-col gap-0.5",
|
|
@@ -10350,13 +10376,13 @@ function InSceneQuestForm({
|
|
|
10350
10376
|
handleAddMilestone({ name: milestoneInput });
|
|
10351
10377
|
}
|
|
10352
10378
|
},
|
|
10353
|
-
/* @__PURE__ */
|
|
10354
|
-
/* @__PURE__ */
|
|
10355
|
-
)))), /* @__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) => {
|
|
10356
10382
|
const depNode = availableNodes.find((n) => String(n.id) === String(id));
|
|
10357
10383
|
if (!depNode) return null;
|
|
10358
|
-
return /* @__PURE__ */
|
|
10359
|
-
}), /* @__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(
|
|
10360
10386
|
"input",
|
|
10361
10387
|
{
|
|
10362
10388
|
type: "text",
|
|
@@ -10375,7 +10401,7 @@ function InSceneQuestForm({
|
|
|
10375
10401
|
placeholder: dependencyIds.length === 0 ? "Adicionar quest pr\xE9-requisito..." : "",
|
|
10376
10402
|
autoComplete: "off"
|
|
10377
10403
|
}
|
|
10378
|
-
), 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(
|
|
10379
10405
|
"li",
|
|
10380
10406
|
{
|
|
10381
10407
|
key: q.id,
|
|
@@ -10385,23 +10411,23 @@ function InSceneQuestForm({
|
|
|
10385
10411
|
handleAddDependency(q);
|
|
10386
10412
|
}
|
|
10387
10413
|
},
|
|
10388
|
-
/* @__PURE__ */
|
|
10389
|
-
/* @__PURE__ */
|
|
10390
|
-
))))), /* @__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(
|
|
10391
10417
|
"button",
|
|
10392
10418
|
{
|
|
10393
10419
|
type: "button",
|
|
10394
10420
|
onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
|
|
10395
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"
|
|
10396
10422
|
},
|
|
10397
|
-
/* @__PURE__ */
|
|
10398
|
-
/* @__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(
|
|
10399
10425
|
FiChevronDown6,
|
|
10400
10426
|
{
|
|
10401
10427
|
className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}`
|
|
10402
10428
|
}
|
|
10403
10429
|
)
|
|
10404
|
-
), isAssigneeDropdownOpen && /* @__PURE__ */
|
|
10430
|
+
), isAssigneeDropdownOpen && /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
10405
10431
|
"div",
|
|
10406
10432
|
{
|
|
10407
10433
|
className: "fixed inset-0 z-40",
|
|
@@ -10410,7 +10436,7 @@ function InSceneQuestForm({
|
|
|
10410
10436
|
setAssigneeSearchQuery("");
|
|
10411
10437
|
}
|
|
10412
10438
|
}
|
|
10413
|
-
), /* @__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(
|
|
10414
10440
|
"input",
|
|
10415
10441
|
{
|
|
10416
10442
|
type: "text",
|
|
@@ -10421,7 +10447,7 @@ function InSceneQuestForm({
|
|
|
10421
10447
|
className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
|
|
10422
10448
|
onClick: (e) => e.stopPropagation()
|
|
10423
10449
|
}
|
|
10424
|
-
)), /* @__PURE__ */
|
|
10450
|
+
)), /* @__PURE__ */ React17.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ React17.createElement(
|
|
10425
10451
|
"li",
|
|
10426
10452
|
{
|
|
10427
10453
|
onClick: () => {
|
|
@@ -10435,7 +10461,7 @@ function InSceneQuestForm({
|
|
|
10435
10461
|
), viewMembers.filter((member) => {
|
|
10436
10462
|
const search = assigneeSearchQuery.toLowerCase();
|
|
10437
10463
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
10438
|
-
}).map((member) => /* @__PURE__ */
|
|
10464
|
+
}).map((member) => /* @__PURE__ */ React17.createElement(
|
|
10439
10465
|
"li",
|
|
10440
10466
|
{
|
|
10441
10467
|
key: member.id,
|
|
@@ -10450,7 +10476,7 @@ function InSceneQuestForm({
|
|
|
10450
10476
|
)), viewMembers.filter((member) => {
|
|
10451
10477
|
const search = assigneeSearchQuery.toLowerCase();
|
|
10452
10478
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
10453
|
-
}).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(
|
|
10454
10480
|
"button",
|
|
10455
10481
|
{
|
|
10456
10482
|
type: "button",
|
|
@@ -10458,7 +10484,7 @@ function InSceneQuestForm({
|
|
|
10458
10484
|
className: "text-[10px] text-indigo-400 hover:text-indigo-300 font-bold uppercase transition-colors"
|
|
10459
10485
|
},
|
|
10460
10486
|
"+ Adicionar"
|
|
10461
|
-
)), 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(
|
|
10462
10488
|
"button",
|
|
10463
10489
|
{
|
|
10464
10490
|
key: t,
|
|
@@ -10476,7 +10502,7 @@ function InSceneQuestForm({
|
|
|
10476
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"}`
|
|
10477
10503
|
},
|
|
10478
10504
|
t === "Date Interval" ? "Intervalo" : t
|
|
10479
|
-
)) : /* @__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(
|
|
10480
10506
|
"button",
|
|
10481
10507
|
{
|
|
10482
10508
|
type: "button",
|
|
@@ -10484,8 +10510,8 @@ function InSceneQuestForm({
|
|
|
10484
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",
|
|
10485
10511
|
title: "Confirmar data"
|
|
10486
10512
|
},
|
|
10487
|
-
/* @__PURE__ */
|
|
10488
|
-
) : /* @__PURE__ */
|
|
10513
|
+
/* @__PURE__ */ React17.createElement(FiCheck9, { size: 14 })
|
|
10514
|
+
) : /* @__PURE__ */ React17.createElement(
|
|
10489
10515
|
"button",
|
|
10490
10516
|
{
|
|
10491
10517
|
type: "button",
|
|
@@ -10493,8 +10519,8 @@ function InSceneQuestForm({
|
|
|
10493
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",
|
|
10494
10520
|
title: "Editar data"
|
|
10495
10521
|
},
|
|
10496
|
-
/* @__PURE__ */
|
|
10497
|
-
), /* @__PURE__ */
|
|
10522
|
+
/* @__PURE__ */ React17.createElement(FiEdit26, { size: 14 })
|
|
10523
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10498
10524
|
"button",
|
|
10499
10525
|
{
|
|
10500
10526
|
type: "button",
|
|
@@ -10502,8 +10528,8 @@ function InSceneQuestForm({
|
|
|
10502
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",
|
|
10503
10529
|
title: "Remover data"
|
|
10504
10530
|
},
|
|
10505
|
-
/* @__PURE__ */
|
|
10506
|
-
))), !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(
|
|
10507
10533
|
"input",
|
|
10508
10534
|
{
|
|
10509
10535
|
type: "text",
|
|
@@ -10523,7 +10549,7 @@ function InSceneQuestForm({
|
|
|
10523
10549
|
maxLength: "10",
|
|
10524
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"
|
|
10525
10551
|
}
|
|
10526
|
-
), questDate.type === "Date Interval" && /* @__PURE__ */
|
|
10552
|
+
), questDate.type === "Date Interval" && /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React17.createElement(
|
|
10527
10553
|
"input",
|
|
10528
10554
|
{
|
|
10529
10555
|
type: "text",
|
|
@@ -10543,7 +10569,7 @@ function InSceneQuestForm({
|
|
|
10543
10569
|
maxLength: "10",
|
|
10544
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"
|
|
10545
10571
|
}
|
|
10546
|
-
), /* @__PURE__ */
|
|
10572
|
+
), /* @__PURE__ */ React17.createElement("span", { className: "text-slate-500" }, "-"), /* @__PURE__ */ React17.createElement(
|
|
10547
10573
|
"input",
|
|
10548
10574
|
{
|
|
10549
10575
|
type: "text",
|
|
@@ -10563,39 +10589,39 @@ function InSceneQuestForm({
|
|
|
10563
10589
|
maxLength: "10",
|
|
10564
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"
|
|
10565
10591
|
}
|
|
10566
|
-
))))), /* @__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(
|
|
10567
10593
|
"button",
|
|
10568
10594
|
{
|
|
10569
10595
|
type: "button",
|
|
10570
10596
|
onClick: () => setRecurrenceConfig((prev) => ({ ...prev, enabled: !prev.enabled })),
|
|
10571
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`
|
|
10572
10598
|
},
|
|
10573
|
-
/* @__PURE__ */
|
|
10574
|
-
)), 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(
|
|
10575
10601
|
"select",
|
|
10576
10602
|
{
|
|
10577
10603
|
value: recurrenceConfig.type,
|
|
10578
10604
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, type: e.target.value })),
|
|
10579
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"
|
|
10580
10606
|
},
|
|
10581
|
-
/* @__PURE__ */
|
|
10582
|
-
/* @__PURE__ */
|
|
10583
|
-
/* @__PURE__ */
|
|
10584
|
-
)), 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(
|
|
10585
10611
|
"select",
|
|
10586
10612
|
{
|
|
10587
10613
|
value: recurrenceConfig.day_of_week,
|
|
10588
10614
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, day_of_week: parseInt(e.target.value, 10) })),
|
|
10589
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"
|
|
10590
10616
|
},
|
|
10591
|
-
/* @__PURE__ */
|
|
10592
|
-
/* @__PURE__ */
|
|
10593
|
-
/* @__PURE__ */
|
|
10594
|
-
/* @__PURE__ */
|
|
10595
|
-
/* @__PURE__ */
|
|
10596
|
-
/* @__PURE__ */
|
|
10597
|
-
/* @__PURE__ */
|
|
10598
|
-
)), 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(
|
|
10599
10625
|
"input",
|
|
10600
10626
|
{
|
|
10601
10627
|
type: "text",
|
|
@@ -10604,23 +10630,23 @@ function InSceneQuestForm({
|
|
|
10604
10630
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, custom_date: e.target.value })),
|
|
10605
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"
|
|
10606
10632
|
}
|
|
10607
|
-
))), /* @__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(
|
|
10608
10634
|
"select",
|
|
10609
10635
|
{
|
|
10610
10636
|
value: recurrenceConfig.next_assignee_id,
|
|
10611
10637
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, next_assignee_id: e.target.value })),
|
|
10612
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"
|
|
10613
10639
|
},
|
|
10614
|
-
/* @__PURE__ */
|
|
10615
|
-
viewMembers.map((member) => /* @__PURE__ */
|
|
10616
|
-
), /* @__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(
|
|
10617
10643
|
QuestReviewStackEditor,
|
|
10618
10644
|
{
|
|
10619
10645
|
reviewStack,
|
|
10620
10646
|
onChange: setReviewStack,
|
|
10621
10647
|
viewMembers
|
|
10622
10648
|
}
|
|
10623
|
-
)), /* @__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(
|
|
10624
10650
|
DescriptionDisplay,
|
|
10625
10651
|
{
|
|
10626
10652
|
description,
|
|
@@ -10630,42 +10656,42 @@ function InSceneQuestForm({
|
|
|
10630
10656
|
onMentionClick,
|
|
10631
10657
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
10632
10658
|
}
|
|
10633
|
-
), /* @__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(
|
|
10634
10660
|
"button",
|
|
10635
10661
|
{
|
|
10636
10662
|
type: "button",
|
|
10637
10663
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
10638
10664
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors"
|
|
10639
10665
|
},
|
|
10640
|
-
/* @__PURE__ */
|
|
10641
|
-
)), !description && /* @__PURE__ */
|
|
10666
|
+
/* @__PURE__ */ React17.createElement(FiEdit26, { size: 14 })
|
|
10667
|
+
)), !description && /* @__PURE__ */ React17.createElement(
|
|
10642
10668
|
"div",
|
|
10643
10669
|
{
|
|
10644
10670
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
10645
10671
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
10646
10672
|
},
|
|
10647
10673
|
"Adicionar descri\xE7\xE3o..."
|
|
10648
|
-
))), /* @__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(
|
|
10649
10675
|
"button",
|
|
10650
10676
|
{
|
|
10651
10677
|
type: "button",
|
|
10652
10678
|
onClick: handleCreateGoogleDoc,
|
|
10653
10679
|
disabled: isLoadingDocs,
|
|
10654
|
-
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-
|
|
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",
|
|
10655
10681
|
title: "Criar Documento no Google Docs"
|
|
10656
10682
|
},
|
|
10657
|
-
isLoadingDocs ? /* @__PURE__ */
|
|
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" }),
|
|
10658
10684
|
isLoadingDocs ? "Criando..." : "Google Doc"
|
|
10659
|
-
), /* @__PURE__ */
|
|
10685
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10660
10686
|
"button",
|
|
10661
10687
|
{
|
|
10662
10688
|
type: "button",
|
|
10663
10689
|
onClick: handleAddProp,
|
|
10664
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"
|
|
10665
10691
|
},
|
|
10666
|
-
/* @__PURE__ */
|
|
10692
|
+
/* @__PURE__ */ React17.createElement(FiPlus6, { size: 14 }),
|
|
10667
10693
|
" Adicionar"
|
|
10668
|
-
))), /* @__PURE__ */
|
|
10694
|
+
))), /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React17.createElement(
|
|
10669
10695
|
CustomPropertyDisplay,
|
|
10670
10696
|
{
|
|
10671
10697
|
key: prop.id,
|
|
@@ -10678,7 +10704,7 @@ function InSceneQuestForm({
|
|
|
10678
10704
|
),
|
|
10679
10705
|
onUploadFile
|
|
10680
10706
|
}
|
|
10681
|
-
)), /* @__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(
|
|
10682
10708
|
"button",
|
|
10683
10709
|
{
|
|
10684
10710
|
key: s,
|
|
@@ -10689,37 +10715,37 @@ function InSceneQuestForm({
|
|
|
10689
10715
|
},
|
|
10690
10716
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
10691
10717
|
},
|
|
10692
|
-
/* @__PURE__ */
|
|
10718
|
+
/* @__PURE__ */ React17.createElement(
|
|
10693
10719
|
"div",
|
|
10694
10720
|
{
|
|
10695
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"}`
|
|
10696
10722
|
},
|
|
10697
|
-
size === s && /* @__PURE__ */
|
|
10723
|
+
size === s && /* @__PURE__ */ React17.createElement(FiCheck9, { size: 12, className: "text-white" })
|
|
10698
10724
|
),
|
|
10699
|
-
/* @__PURE__ */
|
|
10725
|
+
/* @__PURE__ */ React17.createElement(
|
|
10700
10726
|
"span",
|
|
10701
10727
|
{
|
|
10702
10728
|
className: `text-sm capitalize transition-colors ${size === s ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
10703
10729
|
},
|
|
10704
10730
|
s
|
|
10705
10731
|
)
|
|
10706
|
-
)))), /* @__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(
|
|
10707
10733
|
"span",
|
|
10708
10734
|
{
|
|
10709
10735
|
key: index,
|
|
10710
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"}`
|
|
10711
10737
|
},
|
|
10712
10738
|
t,
|
|
10713
|
-
t !== "quest" && /* @__PURE__ */
|
|
10739
|
+
t !== "quest" && /* @__PURE__ */ React17.createElement(
|
|
10714
10740
|
"button",
|
|
10715
10741
|
{
|
|
10716
10742
|
type: "button",
|
|
10717
10743
|
onClick: () => handleRemoveType(index),
|
|
10718
10744
|
className: "hover:text-white transition-colors"
|
|
10719
10745
|
},
|
|
10720
|
-
/* @__PURE__ */
|
|
10746
|
+
/* @__PURE__ */ React17.createElement(FiX5, { size: 12 })
|
|
10721
10747
|
)
|
|
10722
|
-
)), /* @__PURE__ */
|
|
10748
|
+
)), /* @__PURE__ */ React17.createElement(
|
|
10723
10749
|
"input",
|
|
10724
10750
|
{
|
|
10725
10751
|
type: "text",
|
|
@@ -10732,7 +10758,7 @@ function InSceneQuestForm({
|
|
|
10732
10758
|
className: "flex-1 bg-transparent text-sm min-w-[80px] focus:outline-none text-slate-200",
|
|
10733
10759
|
autoComplete: "off"
|
|
10734
10760
|
}
|
|
10735
|
-
)))), /* @__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(
|
|
10736
10762
|
"button",
|
|
10737
10763
|
{
|
|
10738
10764
|
type: "button",
|
|
@@ -10740,7 +10766,7 @@ function InSceneQuestForm({
|
|
|
10740
10766
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
10741
10767
|
},
|
|
10742
10768
|
"Cancelar"
|
|
10743
|
-
), /* @__PURE__ */
|
|
10769
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10744
10770
|
"button",
|
|
10745
10771
|
{
|
|
10746
10772
|
type: "submit",
|
|
@@ -10748,7 +10774,7 @@ function InSceneQuestForm({
|
|
|
10748
10774
|
},
|
|
10749
10775
|
"Salvar Quest"
|
|
10750
10776
|
)))
|
|
10751
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
10777
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React17.createElement(
|
|
10752
10778
|
DescriptionEditModal,
|
|
10753
10779
|
{
|
|
10754
10780
|
isOpen: isDescriptionModalOpen,
|
|
@@ -10764,10 +10790,9 @@ function InSceneQuestForm({
|
|
|
10764
10790
|
}
|
|
10765
10791
|
|
|
10766
10792
|
// src/components/NodeDetailsPanel.jsx
|
|
10767
|
-
import
|
|
10793
|
+
import React18, { useState as useState18, useEffect as useEffect15, useRef as useRef13 } from "react";
|
|
10768
10794
|
import { v4 as uuidv48 } from "uuid";
|
|
10769
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";
|
|
10770
|
-
import { SiGoogledocs as SiGoogledocs3 } from "react-icons/si";
|
|
10771
10796
|
import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters3 } from "react-icons/ai";
|
|
10772
10797
|
function NodeDetailsPanel({
|
|
10773
10798
|
node,
|
|
@@ -10979,6 +11004,9 @@ function NodeDetailsPanel({
|
|
|
10979
11004
|
setCustomProps(updatedProps);
|
|
10980
11005
|
setHasUnsavedChanges(true);
|
|
10981
11006
|
triggerAutoSave({ customProps: updatedProps });
|
|
11007
|
+
if (res.link) {
|
|
11008
|
+
window.open(res.link, "_blank");
|
|
11009
|
+
}
|
|
10982
11010
|
} else {
|
|
10983
11011
|
alert("Erro ao criar documento: " + res.error);
|
|
10984
11012
|
}
|
|
@@ -11085,7 +11113,7 @@ function NodeDetailsPanel({
|
|
|
11085
11113
|
onClose();
|
|
11086
11114
|
};
|
|
11087
11115
|
const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
|
|
11088
|
-
return /* @__PURE__ */
|
|
11116
|
+
return /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(
|
|
11089
11117
|
"div",
|
|
11090
11118
|
{
|
|
11091
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"}`,
|
|
@@ -11098,7 +11126,7 @@ function NodeDetailsPanel({
|
|
|
11098
11126
|
onContextMenu: swallow,
|
|
11099
11127
|
onDoubleClick: swallow
|
|
11100
11128
|
},
|
|
11101
|
-
/* @__PURE__ */
|
|
11129
|
+
/* @__PURE__ */ React18.createElement(
|
|
11102
11130
|
"div",
|
|
11103
11131
|
{
|
|
11104
11132
|
onPointerDown: (e) => {
|
|
@@ -11109,7 +11137,7 @@ function NodeDetailsPanel({
|
|
|
11109
11137
|
title: "Arraste para redimensionar"
|
|
11110
11138
|
}
|
|
11111
11139
|
),
|
|
11112
|
-
isReadMode ? /* @__PURE__ */
|
|
11140
|
+
isReadMode ? /* @__PURE__ */ React18.createElement(
|
|
11113
11141
|
DescriptionReadModePanel,
|
|
11114
11142
|
{
|
|
11115
11143
|
title: name || (node == null ? void 0 : node.name),
|
|
@@ -11130,23 +11158,23 @@ function NodeDetailsPanel({
|
|
|
11130
11158
|
onImageClick: handleImageClickFromText,
|
|
11131
11159
|
onSaveDescription: handleSaveDescriptionInline
|
|
11132
11160
|
}
|
|
11133
|
-
) : /* @__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(
|
|
11134
11162
|
"button",
|
|
11135
11163
|
{
|
|
11136
11164
|
onClick: handleCopyLink,
|
|
11137
11165
|
className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-indigo-400"}`,
|
|
11138
11166
|
title: isLinkCopied ? "Link Copiado!" : "Copiar link para este Node"
|
|
11139
11167
|
},
|
|
11140
|
-
isLinkCopied ? /* @__PURE__ */
|
|
11141
|
-
)), /* @__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(
|
|
11142
11170
|
"button",
|
|
11143
11171
|
{
|
|
11144
11172
|
type: "button",
|
|
11145
11173
|
onClick: () => handleRemoveType(index),
|
|
11146
11174
|
className: "hover:text-white transition-colors"
|
|
11147
11175
|
},
|
|
11148
|
-
/* @__PURE__ */
|
|
11149
|
-
))), canEdit && /* @__PURE__ */
|
|
11176
|
+
/* @__PURE__ */ React18.createElement(FiX6, { size: 12 })
|
|
11177
|
+
))), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11150
11178
|
"input",
|
|
11151
11179
|
{
|
|
11152
11180
|
type: "text",
|
|
@@ -11167,7 +11195,7 @@ function NodeDetailsPanel({
|
|
|
11167
11195
|
placeholder: types.length === 0 ? "Ex.: Cliente" : "",
|
|
11168
11196
|
autoComplete: "off"
|
|
11169
11197
|
}
|
|
11170
|
-
), 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(
|
|
11171
11199
|
"li",
|
|
11172
11200
|
{
|
|
11173
11201
|
key: index,
|
|
@@ -11178,7 +11206,7 @@ function NodeDetailsPanel({
|
|
|
11178
11206
|
}
|
|
11179
11207
|
},
|
|
11180
11208
|
suggestedType
|
|
11181
|
-
))))), /* @__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(
|
|
11182
11210
|
"input",
|
|
11183
11211
|
{
|
|
11184
11212
|
type: "text",
|
|
@@ -11187,7 +11215,7 @@ function NodeDetailsPanel({
|
|
|
11187
11215
|
readOnly: !canEdit,
|
|
11188
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"}`
|
|
11189
11217
|
}
|
|
11190
|
-
)), /* @__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(
|
|
11191
11219
|
DescriptionDisplay,
|
|
11192
11220
|
{
|
|
11193
11221
|
description,
|
|
@@ -11199,7 +11227,7 @@ function NodeDetailsPanel({
|
|
|
11199
11227
|
onImageClick: handleImageClickFromText,
|
|
11200
11228
|
onSaveDescription: handleSaveDescriptionInline
|
|
11201
11229
|
}
|
|
11202
|
-
), /* @__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(
|
|
11203
11231
|
"button",
|
|
11204
11232
|
{
|
|
11205
11233
|
type: "button",
|
|
@@ -11207,8 +11235,8 @@ function NodeDetailsPanel({
|
|
|
11207
11235
|
className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`,
|
|
11208
11236
|
title: "Modo de Leitura"
|
|
11209
11237
|
},
|
|
11210
|
-
/* @__PURE__ */
|
|
11211
|
-
), canEdit && /* @__PURE__ */
|
|
11238
|
+
/* @__PURE__ */ React18.createElement(FiBookOpen3, { size: 14 })
|
|
11239
|
+
), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11212
11240
|
"button",
|
|
11213
11241
|
{
|
|
11214
11242
|
type: "button",
|
|
@@ -11216,17 +11244,17 @@ function NodeDetailsPanel({
|
|
|
11216
11244
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
11217
11245
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
11218
11246
|
},
|
|
11219
|
-
/* @__PURE__ */
|
|
11220
|
-
)), canEdit && !description && /* @__PURE__ */
|
|
11247
|
+
/* @__PURE__ */ React18.createElement(FiEdit27, { size: 14 })
|
|
11248
|
+
)), canEdit && !description && /* @__PURE__ */ React18.createElement(
|
|
11221
11249
|
"div",
|
|
11222
11250
|
{
|
|
11223
11251
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
11224
11252
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
11225
11253
|
},
|
|
11226
11254
|
"Adicionar descri\xE7\xE3o..."
|
|
11227
|
-
))), /* @__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) => {
|
|
11228
11256
|
const isSelected = size === s;
|
|
11229
|
-
return /* @__PURE__ */
|
|
11257
|
+
return /* @__PURE__ */ React18.createElement(
|
|
11230
11258
|
"button",
|
|
11231
11259
|
{
|
|
11232
11260
|
key: s,
|
|
@@ -11234,10 +11262,10 @@ function NodeDetailsPanel({
|
|
|
11234
11262
|
onClick: () => canEdit && handleSizeChange(s),
|
|
11235
11263
|
className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}`
|
|
11236
11264
|
},
|
|
11237
|
-
/* @__PURE__ */
|
|
11238
|
-
/* @__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)
|
|
11239
11267
|
);
|
|
11240
|
-
}))), /* @__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(
|
|
11241
11269
|
"input",
|
|
11242
11270
|
{
|
|
11243
11271
|
type: "checkbox",
|
|
@@ -11245,14 +11273,14 @@ function NodeDetailsPanel({
|
|
|
11245
11273
|
onChange: handleToggleImageMode,
|
|
11246
11274
|
className: "hidden"
|
|
11247
11275
|
}
|
|
11248
|
-
), /* @__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(
|
|
11249
11277
|
ColorPicker,
|
|
11250
11278
|
{
|
|
11251
11279
|
color,
|
|
11252
11280
|
onChange: handleColorChange,
|
|
11253
11281
|
disabled: !canEdit || useImageAsTexture
|
|
11254
11282
|
}
|
|
11255
|
-
), /* @__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(
|
|
11256
11284
|
"input",
|
|
11257
11285
|
{
|
|
11258
11286
|
type: "range",
|
|
@@ -11265,27 +11293,27 @@ function NodeDetailsPanel({
|
|
|
11265
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"}`,
|
|
11266
11294
|
title: `Intensidade do brilho: ${intensity}`
|
|
11267
11295
|
}
|
|
11268
|
-
), /* @__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(
|
|
11269
11297
|
"button",
|
|
11270
11298
|
{
|
|
11271
11299
|
type: "button",
|
|
11272
11300
|
onClick: handleCreateGoogleDoc,
|
|
11273
11301
|
disabled: isLoadingDocs,
|
|
11274
|
-
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-
|
|
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",
|
|
11275
11303
|
title: "Criar Documento no Google Docs"
|
|
11276
11304
|
},
|
|
11277
|
-
isLoadingDocs ? /* @__PURE__ */
|
|
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" }),
|
|
11278
11306
|
isLoadingDocs ? "Criando..." : "Google Doc"
|
|
11279
|
-
), canEdit && /* @__PURE__ */
|
|
11307
|
+
), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11280
11308
|
"button",
|
|
11281
11309
|
{
|
|
11282
11310
|
type: "button",
|
|
11283
11311
|
onClick: handleAddProp,
|
|
11284
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"
|
|
11285
11313
|
},
|
|
11286
|
-
/* @__PURE__ */
|
|
11314
|
+
/* @__PURE__ */ React18.createElement(FiPlus7, { size: 14 }),
|
|
11287
11315
|
" Adicionar"
|
|
11288
|
-
))), /* @__PURE__ */
|
|
11316
|
+
))), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React18.createElement(
|
|
11289
11317
|
CustomPropertyDisplay,
|
|
11290
11318
|
{
|
|
11291
11319
|
key: prop.id,
|
|
@@ -11300,7 +11328,7 @@ function NodeDetailsPanel({
|
|
|
11300
11328
|
onUploadFile: canEdit ? onUploadFile : void 0,
|
|
11301
11329
|
readOnly: !canEdit
|
|
11302
11330
|
}
|
|
11303
|
-
)), /* @__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(
|
|
11304
11332
|
"button",
|
|
11305
11333
|
{
|
|
11306
11334
|
onClick: () => handleSave(false),
|
|
@@ -11309,10 +11337,10 @@ function NodeDetailsPanel({
|
|
|
11309
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"}
|
|
11310
11338
|
`
|
|
11311
11339
|
},
|
|
11312
|
-
isSaving && /* @__PURE__ */
|
|
11340
|
+
isSaving && /* @__PURE__ */ React18.createElement(FiLoader2, { className: "animate-spin" }),
|
|
11313
11341
|
isSaving ? "Salvando..." : "Salvar"
|
|
11314
11342
|
)))
|
|
11315
|
-
), isDescriptionModalOpen && canEdit && /* @__PURE__ */
|
|
11343
|
+
), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React18.createElement(
|
|
11316
11344
|
DescriptionEditModal,
|
|
11317
11345
|
{
|
|
11318
11346
|
isOpen: isDescriptionModalOpen,
|
|
@@ -11333,12 +11361,12 @@ function NodeDetailsPanel({
|
|
|
11333
11361
|
}
|
|
11334
11362
|
|
|
11335
11363
|
// src/components/QuestDetailsPanel.jsx
|
|
11336
|
-
import
|
|
11364
|
+
import React20, { useState as useState19, useEffect as useEffect16, useRef as useRef14 } from "react";
|
|
11337
11365
|
import { v4 as uuidv49 } from "uuid";
|
|
11338
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";
|
|
11339
11367
|
|
|
11340
11368
|
// src/components/QuestTimeline.jsx
|
|
11341
|
-
import
|
|
11369
|
+
import React19 from "react";
|
|
11342
11370
|
import {
|
|
11343
11371
|
FiGitCommit,
|
|
11344
11372
|
FiUserPlus,
|
|
@@ -11377,25 +11405,25 @@ function QuestTimeline({
|
|
|
11377
11405
|
}).format(date);
|
|
11378
11406
|
};
|
|
11379
11407
|
if (timeline.length === 0) {
|
|
11380
|
-
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"));
|
|
11381
11409
|
}
|
|
11382
|
-
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) => {
|
|
11383
11411
|
const config = DEFAULT_ICON_CONFIG;
|
|
11384
11412
|
const Icon = config.icon;
|
|
11385
11413
|
const actorName = getMemberName(event.actorId);
|
|
11386
|
-
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(
|
|
11387
11415
|
"button",
|
|
11388
11416
|
{
|
|
11389
11417
|
onClick: () => onAddNote(event),
|
|
11390
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",
|
|
11391
11419
|
title: "Adicionar detalhe/anexo a esta etapa"
|
|
11392
11420
|
},
|
|
11393
|
-
/* @__PURE__ */
|
|
11394
|
-
)), /* @__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]) => {
|
|
11395
11423
|
const isAssigneeId = key.toLowerCase().includes("assignee_id") || key.toLowerCase().includes("respons\xE1vel") || key.toLowerCase().includes("assignee id");
|
|
11396
11424
|
const displayValue = isAssigneeId && typeof value === "string" ? getMemberName(value) : typeof value === "string" ? value : JSON.stringify(value);
|
|
11397
|
-
return /* @__PURE__ */
|
|
11398
|
-
})), 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(
|
|
11399
11427
|
"a",
|
|
11400
11428
|
{
|
|
11401
11429
|
key: lIdx,
|
|
@@ -11404,9 +11432,9 @@ function QuestTimeline({
|
|
|
11404
11432
|
rel: "noopener noreferrer",
|
|
11405
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"
|
|
11406
11434
|
},
|
|
11407
|
-
/* @__PURE__ */
|
|
11435
|
+
/* @__PURE__ */ React19.createElement(FiLink6, { size: 10 }),
|
|
11408
11436
|
link.name || "Link"
|
|
11409
|
-
))), 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(
|
|
11410
11438
|
"button",
|
|
11411
11439
|
{
|
|
11412
11440
|
key: iIdx,
|
|
@@ -11414,14 +11442,13 @@ function QuestTimeline({
|
|
|
11414
11442
|
onClick: () => onOpenImageViewer == null ? void 0 : onOpenImageViewer(event.images, iIdx),
|
|
11415
11443
|
className: "relative w-12 h-12 rounded border border-white/10 overflow-hidden hover:border-sky-500/50 transition-colors group/img"
|
|
11416
11444
|
},
|
|
11417
|
-
/* @__PURE__ */
|
|
11418
|
-
/* @__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" }))
|
|
11419
11447
|
)))));
|
|
11420
11448
|
})));
|
|
11421
11449
|
}
|
|
11422
11450
|
|
|
11423
11451
|
// src/components/QuestDetailsPanel.jsx
|
|
11424
|
-
import { SiGoogledocs as SiGoogledocs4 } from "react-icons/si";
|
|
11425
11452
|
import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters4 } from "react-icons/ai";
|
|
11426
11453
|
var QUEST_STATUS_COLORS3 = {
|
|
11427
11454
|
"Backlog": "#64748b",
|
|
@@ -11512,11 +11539,11 @@ function QuestDetailsPanel({
|
|
|
11512
11539
|
const [showMilestoneSuggestions, setShowMilestoneSuggestions] = useState19(false);
|
|
11513
11540
|
const [dependencyInput, setDependencyInput] = useState19("");
|
|
11514
11541
|
const [showDependencySuggestions, setShowDependencySuggestions] = useState19(false);
|
|
11515
|
-
const activeMilestones =
|
|
11542
|
+
const activeMilestones = React20.useMemo(
|
|
11516
11543
|
() => (milestones || []).filter((ms) => ms.status === "active"),
|
|
11517
11544
|
[milestones]
|
|
11518
11545
|
);
|
|
11519
|
-
const filteredMilestones =
|
|
11546
|
+
const filteredMilestones = React20.useMemo(() => {
|
|
11520
11547
|
const search = milestoneInput.toLowerCase().trim();
|
|
11521
11548
|
return activeMilestones.filter(
|
|
11522
11549
|
(ms) => ms.name.toLowerCase().includes(search) && !milestoneIds.includes(ms.id)
|
|
@@ -11555,11 +11582,11 @@ function QuestDetailsPanel({
|
|
|
11555
11582
|
handleRemoveMilestone(milestoneIds[milestoneIds.length - 1]);
|
|
11556
11583
|
}
|
|
11557
11584
|
};
|
|
11558
|
-
const dependencyQuests =
|
|
11585
|
+
const dependencyQuests = React20.useMemo(
|
|
11559
11586
|
() => availableNodes.filter((n) => n.is_quest && String(n.id) !== String(node == null ? void 0 : node.id)),
|
|
11560
11587
|
[availableNodes, node == null ? void 0 : node.id]
|
|
11561
11588
|
);
|
|
11562
|
-
const filteredDependencies =
|
|
11589
|
+
const filteredDependencies = React20.useMemo(() => {
|
|
11563
11590
|
const search = dependencyInput.toLowerCase().trim();
|
|
11564
11591
|
return dependencyQuests.filter((q) => {
|
|
11565
11592
|
var _a2;
|
|
@@ -11589,7 +11616,7 @@ function QuestDetailsPanel({
|
|
|
11589
11616
|
handleRemoveDependency(dependencyIds[dependencyIds.length - 1]);
|
|
11590
11617
|
}
|
|
11591
11618
|
};
|
|
11592
|
-
const blockedStatus =
|
|
11619
|
+
const blockedStatus = React20.useMemo(
|
|
11593
11620
|
() => isQuestBlocked({ ...node, dependency_ids: dependencyIds }, availableNodes),
|
|
11594
11621
|
[node, dependencyIds, availableNodes]
|
|
11595
11622
|
);
|
|
@@ -11907,6 +11934,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11907
11934
|
setCustomProps(updatedProps);
|
|
11908
11935
|
setHasUnsavedChanges(true);
|
|
11909
11936
|
triggerAutoSave({ customProps: updatedProps });
|
|
11937
|
+
if (res.link) {
|
|
11938
|
+
window.open(res.link, "_blank");
|
|
11939
|
+
}
|
|
11910
11940
|
} else {
|
|
11911
11941
|
alert("Erro ao criar documento: " + res.error);
|
|
11912
11942
|
}
|
|
@@ -11997,7 +12027,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11997
12027
|
const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
|
|
11998
12028
|
const assigneeMember = viewMembers.find((m) => m.id === assigneeId);
|
|
11999
12029
|
const isAssigneeUndefined = assigneeId && !assigneeMember;
|
|
12000
|
-
return /* @__PURE__ */
|
|
12030
|
+
return /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement(
|
|
12001
12031
|
"div",
|
|
12002
12032
|
{
|
|
12003
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"}`,
|
|
@@ -12010,11 +12040,11 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12010
12040
|
onContextMenu: swallow,
|
|
12011
12041
|
onDoubleClick: swallow
|
|
12012
12042
|
},
|
|
12013
|
-
/* @__PURE__ */
|
|
12043
|
+
/* @__PURE__ */ React20.createElement("div", { onPointerDown: (e) => {
|
|
12014
12044
|
e.stopPropagation();
|
|
12015
12045
|
handleResize(e);
|
|
12016
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" }),
|
|
12017
|
-
isReadMode ? /* @__PURE__ */
|
|
12047
|
+
isReadMode ? /* @__PURE__ */ React20.createElement(
|
|
12018
12048
|
DescriptionReadModePanel,
|
|
12019
12049
|
{
|
|
12020
12050
|
title: standardizedName || (node == null ? void 0 : node.name),
|
|
@@ -12035,7 +12065,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12035
12065
|
onImageClick: handleImageClickFromText,
|
|
12036
12066
|
onSaveDescription: handleSaveDescriptionInline
|
|
12037
12067
|
}
|
|
12038
|
-
) : /* @__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(
|
|
12039
12069
|
"input",
|
|
12040
12070
|
{
|
|
12041
12071
|
type: "text",
|
|
@@ -12044,7 +12074,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12044
12074
|
readOnly: !canEdit,
|
|
12045
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"}`
|
|
12046
12076
|
}
|
|
12047
|
-
), /* @__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(
|
|
12048
12078
|
"button",
|
|
12049
12079
|
{
|
|
12050
12080
|
type: "button",
|
|
@@ -12052,8 +12082,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12052
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`,
|
|
12053
12083
|
title: isNameCopied ? "Nome Copiado!" : "Copiar nome formatado"
|
|
12054
12084
|
},
|
|
12055
|
-
isNameCopied ? /* @__PURE__ */
|
|
12056
|
-
))), /* @__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(
|
|
12057
12087
|
"button",
|
|
12058
12088
|
{
|
|
12059
12089
|
type: "button",
|
|
@@ -12064,7 +12094,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12064
12094
|
className: "text-[10px] text-indigo-400 hover:text-indigo-300 font-bold uppercase transition-colors"
|
|
12065
12095
|
},
|
|
12066
12096
|
"+ Adicionar"
|
|
12067
|
-
)), 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(
|
|
12068
12098
|
"button",
|
|
12069
12099
|
{
|
|
12070
12100
|
key: t,
|
|
@@ -12083,7 +12113,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12083
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"}`
|
|
12084
12114
|
},
|
|
12085
12115
|
t === "Date Interval" ? "Intervalo" : t
|
|
12086
|
-
)) : /* @__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(
|
|
12087
12117
|
"button",
|
|
12088
12118
|
{
|
|
12089
12119
|
type: "button",
|
|
@@ -12094,8 +12124,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12094
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",
|
|
12095
12125
|
title: "Confirmar data"
|
|
12096
12126
|
},
|
|
12097
|
-
/* @__PURE__ */
|
|
12098
|
-
) : /* @__PURE__ */
|
|
12127
|
+
/* @__PURE__ */ React20.createElement(FiCheck11, { size: 14 })
|
|
12128
|
+
) : /* @__PURE__ */ React20.createElement(
|
|
12099
12129
|
"button",
|
|
12100
12130
|
{
|
|
12101
12131
|
type: "button",
|
|
@@ -12106,8 +12136,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12106
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",
|
|
12107
12137
|
title: "Editar data"
|
|
12108
12138
|
},
|
|
12109
|
-
/* @__PURE__ */
|
|
12110
|
-
), /* @__PURE__ */
|
|
12139
|
+
/* @__PURE__ */ React20.createElement(FiEdit28, { size: 14 })
|
|
12140
|
+
), /* @__PURE__ */ React20.createElement(
|
|
12111
12141
|
"button",
|
|
12112
12142
|
{
|
|
12113
12143
|
type: "button",
|
|
@@ -12118,8 +12148,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12118
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",
|
|
12119
12149
|
title: "Remover data"
|
|
12120
12150
|
},
|
|
12121
|
-
/* @__PURE__ */
|
|
12122
|
-
))), !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(
|
|
12123
12153
|
"input",
|
|
12124
12154
|
{
|
|
12125
12155
|
type: "text",
|
|
@@ -12140,7 +12170,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12140
12170
|
maxLength: "10",
|
|
12141
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"
|
|
12142
12172
|
}
|
|
12143
|
-
), questDate.type === "Date Interval" && /* @__PURE__ */
|
|
12173
|
+
), questDate.type === "Date Interval" && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(
|
|
12144
12174
|
"input",
|
|
12145
12175
|
{
|
|
12146
12176
|
type: "text",
|
|
@@ -12161,7 +12191,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12161
12191
|
maxLength: "10",
|
|
12162
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"
|
|
12163
12193
|
}
|
|
12164
|
-
), /* @__PURE__ */
|
|
12194
|
+
), /* @__PURE__ */ React20.createElement("span", { className: "text-slate-500" }, "-"), /* @__PURE__ */ React20.createElement(
|
|
12165
12195
|
"input",
|
|
12166
12196
|
{
|
|
12167
12197
|
type: "text",
|
|
@@ -12182,11 +12212,11 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12182
12212
|
maxLength: "10",
|
|
12183
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"
|
|
12184
12214
|
}
|
|
12185
|
-
))))), /* @__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) => {
|
|
12186
12216
|
const ms = (milestones || []).find((m) => m.id === id);
|
|
12187
12217
|
if (!ms) return null;
|
|
12188
|
-
return /* @__PURE__ */
|
|
12189
|
-
}), 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(
|
|
12190
12220
|
"input",
|
|
12191
12221
|
{
|
|
12192
12222
|
type: "text",
|
|
@@ -12207,7 +12237,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12207
12237
|
placeholder: milestoneIds.length === 0 ? "Adicionar milestone..." : "",
|
|
12208
12238
|
autoComplete: "off"
|
|
12209
12239
|
}
|
|
12210
|
-
), 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(
|
|
12211
12241
|
"li",
|
|
12212
12242
|
{
|
|
12213
12243
|
key: ms.id,
|
|
@@ -12218,7 +12248,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12218
12248
|
}
|
|
12219
12249
|
},
|
|
12220
12250
|
ms.name
|
|
12221
|
-
))), 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(
|
|
12222
12252
|
"li",
|
|
12223
12253
|
{
|
|
12224
12254
|
className: "px-3 py-3 text-sm cursor-pointer hover:bg-indigo-600/50 flex flex-col gap-0.5",
|
|
@@ -12227,9 +12257,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12227
12257
|
handleAddMilestone({ name: milestoneInput });
|
|
12228
12258
|
}
|
|
12229
12259
|
},
|
|
12230
|
-
/* @__PURE__ */
|
|
12231
|
-
/* @__PURE__ */
|
|
12232
|
-
)))), /* @__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(
|
|
12233
12263
|
"button",
|
|
12234
12264
|
{
|
|
12235
12265
|
type: "button",
|
|
@@ -12237,12 +12267,12 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12237
12267
|
disabled: !canEdit,
|
|
12238
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"}`
|
|
12239
12269
|
},
|
|
12240
|
-
/* @__PURE__ */
|
|
12241
|
-
canEdit && /* @__PURE__ */
|
|
12242
|
-
), 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) => {
|
|
12243
12273
|
const isBacklog = s === "Backlog";
|
|
12244
12274
|
const isDisabled = !isBacklog && blockedStatus.isBlocked;
|
|
12245
|
-
return /* @__PURE__ */
|
|
12275
|
+
return /* @__PURE__ */ React20.createElement(
|
|
12246
12276
|
"li",
|
|
12247
12277
|
{
|
|
12248
12278
|
key: s,
|
|
@@ -12255,22 +12285,22 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12255
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"}`,
|
|
12256
12286
|
title: isDisabled ? `Bloqueado por depend\xEAncias: ${blockedStatus.pendingDependencies.map((d) => d.raw_title || d.name).join(", ")}` : ""
|
|
12257
12287
|
},
|
|
12258
|
-
/* @__PURE__ */
|
|
12259
|
-
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 })
|
|
12260
12290
|
);
|
|
12261
|
-
}))))), /* @__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(
|
|
12262
12292
|
"button",
|
|
12263
12293
|
{
|
|
12264
12294
|
type: "button",
|
|
12265
12295
|
onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
|
|
12266
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"
|
|
12267
12297
|
},
|
|
12268
|
-
/* @__PURE__ */
|
|
12269
|
-
/* @__PURE__ */
|
|
12270
|
-
), 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: () => {
|
|
12271
12301
|
setIsAssigneeDropdownOpen(false);
|
|
12272
12302
|
setAssigneeSearchQuery("");
|
|
12273
|
-
} }), /* @__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(
|
|
12274
12304
|
"input",
|
|
12275
12305
|
{
|
|
12276
12306
|
type: "text",
|
|
@@ -12281,7 +12311,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12281
12311
|
className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
|
|
12282
12312
|
onClick: (e) => e.stopPropagation()
|
|
12283
12313
|
}
|
|
12284
|
-
)), /* @__PURE__ */
|
|
12314
|
+
)), /* @__PURE__ */ React20.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ React20.createElement(
|
|
12285
12315
|
"li",
|
|
12286
12316
|
{
|
|
12287
12317
|
onClick: () => {
|
|
@@ -12299,7 +12329,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12299
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"}`
|
|
12300
12330
|
},
|
|
12301
12331
|
"Nenhum"
|
|
12302
|
-
), isAssigneeUndefined && /* @__PURE__ */
|
|
12332
|
+
), isAssigneeUndefined && /* @__PURE__ */ React20.createElement(
|
|
12303
12333
|
"li",
|
|
12304
12334
|
{
|
|
12305
12335
|
onClick: () => {
|
|
@@ -12312,7 +12342,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12312
12342
|
), viewMembers.filter((member) => {
|
|
12313
12343
|
const search = assigneeSearchQuery.toLowerCase();
|
|
12314
12344
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12315
|
-
}).map((member) => /* @__PURE__ */
|
|
12345
|
+
}).map((member) => /* @__PURE__ */ React20.createElement(
|
|
12316
12346
|
"li",
|
|
12317
12347
|
{
|
|
12318
12348
|
key: member.id,
|
|
@@ -12334,7 +12364,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12334
12364
|
)), viewMembers.filter((member) => {
|
|
12335
12365
|
const search = assigneeSearchQuery.toLowerCase();
|
|
12336
12366
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12337
|
-
}).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(
|
|
12338
12368
|
"button",
|
|
12339
12369
|
{
|
|
12340
12370
|
type: "button",
|
|
@@ -12345,8 +12375,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12345
12375
|
},
|
|
12346
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"}`
|
|
12347
12377
|
},
|
|
12348
|
-
/* @__PURE__ */
|
|
12349
|
-
)), 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(
|
|
12350
12380
|
"select",
|
|
12351
12381
|
{
|
|
12352
12382
|
disabled: !canEdit,
|
|
@@ -12357,10 +12387,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12357
12387
|
},
|
|
12358
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"}`
|
|
12359
12389
|
},
|
|
12360
|
-
/* @__PURE__ */
|
|
12361
|
-
/* @__PURE__ */
|
|
12362
|
-
/* @__PURE__ */
|
|
12363
|
-
)), 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(
|
|
12364
12394
|
"select",
|
|
12365
12395
|
{
|
|
12366
12396
|
disabled: !canEdit,
|
|
@@ -12371,14 +12401,14 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12371
12401
|
},
|
|
12372
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"}`
|
|
12373
12403
|
},
|
|
12374
|
-
/* @__PURE__ */
|
|
12375
|
-
/* @__PURE__ */
|
|
12376
|
-
/* @__PURE__ */
|
|
12377
|
-
/* @__PURE__ */
|
|
12378
|
-
/* @__PURE__ */
|
|
12379
|
-
/* @__PURE__ */
|
|
12380
|
-
/* @__PURE__ */
|
|
12381
|
-
)), 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(
|
|
12382
12412
|
"input",
|
|
12383
12413
|
{
|
|
12384
12414
|
readOnly: !canEdit,
|
|
@@ -12391,7 +12421,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12391
12421
|
},
|
|
12392
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"}`
|
|
12393
12423
|
}
|
|
12394
|
-
))), /* @__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(
|
|
12395
12425
|
"select",
|
|
12396
12426
|
{
|
|
12397
12427
|
disabled: !canEdit,
|
|
@@ -12402,9 +12432,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12402
12432
|
},
|
|
12403
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"}`
|
|
12404
12434
|
},
|
|
12405
|
-
/* @__PURE__ */
|
|
12406
|
-
viewMembers.map((member) => /* @__PURE__ */
|
|
12407
|
-
), /* @__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(
|
|
12408
12438
|
QuestReviewStackEditor,
|
|
12409
12439
|
{
|
|
12410
12440
|
reviewStack,
|
|
@@ -12415,19 +12445,19 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12415
12445
|
viewMembers,
|
|
12416
12446
|
readOnly: !canEdit
|
|
12417
12447
|
}
|
|
12418
|
-
)), 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(
|
|
12419
12449
|
"button",
|
|
12420
12450
|
{
|
|
12421
12451
|
type: "button",
|
|
12422
12452
|
onClick: () => setIsReturnDropdownOpen(!isReturnDropdownOpen),
|
|
12423
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"
|
|
12424
12454
|
},
|
|
12425
|
-
/* @__PURE__ */
|
|
12426
|
-
/* @__PURE__ */
|
|
12427
|
-
), 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: () => {
|
|
12428
12458
|
setIsReturnDropdownOpen(false);
|
|
12429
12459
|
setReturnSearchQuery("");
|
|
12430
|
-
} }), /* @__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(
|
|
12431
12461
|
"input",
|
|
12432
12462
|
{
|
|
12433
12463
|
type: "text",
|
|
@@ -12438,10 +12468,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12438
12468
|
className: "bg-transparent border-none outline-none text-[10px] text-white placeholder-slate-500 w-full",
|
|
12439
12469
|
onClick: (e) => e.stopPropagation()
|
|
12440
12470
|
}
|
|
12441
|
-
)), /* @__PURE__ */
|
|
12471
|
+
)), /* @__PURE__ */ React20.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar" }, viewMembers.filter((member) => {
|
|
12442
12472
|
const search = returnSearchQuery.toLowerCase();
|
|
12443
12473
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12444
|
-
}).map((member) => /* @__PURE__ */
|
|
12474
|
+
}).map((member) => /* @__PURE__ */ React20.createElement(
|
|
12445
12475
|
"li",
|
|
12446
12476
|
{
|
|
12447
12477
|
key: member.id,
|
|
@@ -12456,7 +12486,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12456
12486
|
)), viewMembers.filter((member) => {
|
|
12457
12487
|
const search = returnSearchQuery.toLowerCase();
|
|
12458
12488
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12459
|
-
}).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(
|
|
12460
12490
|
"button",
|
|
12461
12491
|
{
|
|
12462
12492
|
type: "button",
|
|
@@ -12464,13 +12494,13 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12464
12494
|
disabled: isSaving || !returnAssigneeId,
|
|
12465
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"}`
|
|
12466
12496
|
},
|
|
12467
|
-
/* @__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" })),
|
|
12468
12498
|
"Retornar para Opera\xE7\xE3o"
|
|
12469
|
-
))), /* @__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) => {
|
|
12470
12500
|
const depNode = availableNodes.find((n) => String(n.id) === String(depId));
|
|
12471
12501
|
if (!depNode) return null;
|
|
12472
12502
|
const isDone = depNode.status === "Done";
|
|
12473
|
-
return /* @__PURE__ */
|
|
12503
|
+
return /* @__PURE__ */ React20.createElement(
|
|
12474
12504
|
"span",
|
|
12475
12505
|
{
|
|
12476
12506
|
key: depId,
|
|
@@ -12478,9 +12508,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12478
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"}`,
|
|
12479
12509
|
title: isDone ? `Pronta - Clique para focar` : `Pendente - Clique para focar`
|
|
12480
12510
|
},
|
|
12481
|
-
/* @__PURE__ */
|
|
12511
|
+
/* @__PURE__ */ React20.createElement("span", { className: `w-1.5 h-1.5 rounded-full ${isDone ? "bg-green-400" : "bg-amber-400 animate-pulse"}` }),
|
|
12482
12512
|
depNode.raw_title || depNode.name,
|
|
12483
|
-
canEdit && /* @__PURE__ */
|
|
12513
|
+
canEdit && /* @__PURE__ */ React20.createElement(
|
|
12484
12514
|
"button",
|
|
12485
12515
|
{
|
|
12486
12516
|
type: "button",
|
|
@@ -12490,10 +12520,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12490
12520
|
},
|
|
12491
12521
|
className: "hover:text-white transition-colors opacity-60 hover:opacity-100 Ml-1"
|
|
12492
12522
|
},
|
|
12493
|
-
/* @__PURE__ */
|
|
12523
|
+
/* @__PURE__ */ React20.createElement(FiX7, { size: 12 })
|
|
12494
12524
|
)
|
|
12495
12525
|
);
|
|
12496
|
-
}), canEdit && /* @__PURE__ */
|
|
12526
|
+
}), canEdit && /* @__PURE__ */ React20.createElement("div", { className: "flex-1 min-w-[120px] relative" }, /* @__PURE__ */ React20.createElement(
|
|
12497
12527
|
"input",
|
|
12498
12528
|
{
|
|
12499
12529
|
type: "text",
|
|
@@ -12510,7 +12540,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12510
12540
|
placeholder: dependencyIds.length === 0 ? "Adicionar Quest de Origem..." : "",
|
|
12511
12541
|
autoComplete: "off"
|
|
12512
12542
|
}
|
|
12513
|
-
), 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(
|
|
12514
12544
|
"li",
|
|
12515
12545
|
{
|
|
12516
12546
|
key: q.id,
|
|
@@ -12520,20 +12550,20 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12520
12550
|
handleAddDependency(q);
|
|
12521
12551
|
}
|
|
12522
12552
|
},
|
|
12523
|
-
/* @__PURE__ */
|
|
12524
|
-
/* @__PURE__ */
|
|
12525
|
-
)) : /* @__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(
|
|
12526
12556
|
"button",
|
|
12527
12557
|
{
|
|
12528
12558
|
type: "button",
|
|
12529
12559
|
onClick: handleCreateGoogleDoc,
|
|
12530
12560
|
disabled: isLoadingDocs,
|
|
12531
|
-
className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-md bg-
|
|
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",
|
|
12532
12562
|
title: "Criar Documento no Google Docs"
|
|
12533
12563
|
},
|
|
12534
|
-
isLoadingDocs ? /* @__PURE__ */
|
|
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" }),
|
|
12535
12565
|
isLoadingDocs ? "Criando..." : "Google Doc"
|
|
12536
|
-
), canEdit && /* @__PURE__ */
|
|
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(
|
|
12537
12567
|
"button",
|
|
12538
12568
|
{
|
|
12539
12569
|
type: "button",
|
|
@@ -12552,12 +12582,12 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12552
12582
|
},
|
|
12553
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"
|
|
12554
12584
|
},
|
|
12555
|
-
isNoteFormOpen && !editingEntryId ? /* @__PURE__ */
|
|
12585
|
+
isNoteFormOpen && !editingEntryId ? /* @__PURE__ */ React20.createElement(FiX7, { size: 12 }) : /* @__PURE__ */ React20.createElement(FiPlus8, { size: 12 }),
|
|
12556
12586
|
isNoteFormOpen && !editingEntryId ? "Cancelar" : "Nova Nota"
|
|
12557
|
-
)), 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: () => {
|
|
12558
12588
|
setIsNoteFormOpen(false);
|
|
12559
12589
|
setEditingEntryId(null);
|
|
12560
|
-
}, 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(
|
|
12561
12591
|
"textarea",
|
|
12562
12592
|
{
|
|
12563
12593
|
value: noteText,
|
|
@@ -12565,7 +12595,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12565
12595
|
placeholder: editingEntryId ? "Adicione uma observa\xE7\xE3o a esta etapa..." : "Escreva uma observa\xE7\xE3o no hist\xF3rico...",
|
|
12566
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"
|
|
12567
12597
|
}
|
|
12568
|
-
), /* @__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(
|
|
12569
12599
|
"input",
|
|
12570
12600
|
{
|
|
12571
12601
|
type: "text",
|
|
@@ -12574,7 +12604,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12574
12604
|
onChange: (e) => updateLinkInNote(link.id, "name", e.target.value),
|
|
12575
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"
|
|
12576
12606
|
}
|
|
12577
|
-
), /* @__PURE__ */
|
|
12607
|
+
), /* @__PURE__ */ React20.createElement(
|
|
12578
12608
|
"input",
|
|
12579
12609
|
{
|
|
12580
12610
|
type: "text",
|
|
@@ -12583,7 +12613,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12583
12613
|
onChange: (e) => updateLinkInNote(link.id, "value", e.target.value),
|
|
12584
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"
|
|
12585
12615
|
}
|
|
12586
|
-
), /* @__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(
|
|
12587
12617
|
"input",
|
|
12588
12618
|
{
|
|
12589
12619
|
type: "text",
|
|
@@ -12592,7 +12622,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12592
12622
|
onChange: (e) => updateImageInNote(img.id, e.target.value),
|
|
12593
12623
|
className: "flex-1 bg-transparent text-[10px] focus:outline-none"
|
|
12594
12624
|
}
|
|
12595
|
-
)), /* @__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(
|
|
12596
12626
|
"button",
|
|
12597
12627
|
{
|
|
12598
12628
|
type: "button",
|
|
@@ -12601,7 +12631,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12601
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"
|
|
12602
12632
|
},
|
|
12603
12633
|
editingEntryId ? "Salvar nesta Etapa" : "Adicionar ao Hist\xF3rico"
|
|
12604
|
-
))), /* @__PURE__ */
|
|
12634
|
+
))), /* @__PURE__ */ React20.createElement(
|
|
12605
12635
|
QuestTimeline,
|
|
12606
12636
|
{
|
|
12607
12637
|
timeline,
|
|
@@ -12610,10 +12640,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12610
12640
|
canEdit,
|
|
12611
12641
|
onAddNote: handleOpenNoteForEntry
|
|
12612
12642
|
}
|
|
12613
|
-
)), /* @__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) => {
|
|
12614
12644
|
const isSelected = size === s;
|
|
12615
|
-
return /* @__PURE__ */
|
|
12616
|
-
}))), /* @__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(
|
|
12617
12647
|
"input",
|
|
12618
12648
|
{
|
|
12619
12649
|
type: "text",
|
|
@@ -12634,11 +12664,11 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12634
12664
|
placeholder: "",
|
|
12635
12665
|
autoComplete: "off"
|
|
12636
12666
|
}
|
|
12637
|
-
), 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) => {
|
|
12638
12668
|
e.preventDefault();
|
|
12639
12669
|
handleAddType(suggestedType);
|
|
12640
|
-
} }, suggestedType))))), currentDatasetName && /* @__PURE__ */
|
|
12641
|
-
), 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(
|
|
12642
12672
|
DescriptionEditModal,
|
|
12643
12673
|
{
|
|
12644
12674
|
isOpen: isDescriptionModalOpen,
|
|
@@ -12658,7 +12688,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12658
12688
|
}
|
|
12659
12689
|
|
|
12660
12690
|
// src/components/MultiNodeContextMenu.jsx
|
|
12661
|
-
import
|
|
12691
|
+
import React21, { useLayoutEffect as useLayoutEffect3, useRef as useRef15, useState as useState20, useEffect as useEffect17 } from "react";
|
|
12662
12692
|
function MultiNodeContextMenu({
|
|
12663
12693
|
data,
|
|
12664
12694
|
userRole,
|
|
@@ -12700,7 +12730,7 @@ function MultiNodeContextMenu({
|
|
|
12700
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";
|
|
12701
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";
|
|
12702
12732
|
const nodeCount = data.nodeIds.size;
|
|
12703
|
-
return /* @__PURE__ */
|
|
12733
|
+
return /* @__PURE__ */ React21.createElement(
|
|
12704
12734
|
"div",
|
|
12705
12735
|
{
|
|
12706
12736
|
ref: menuRef,
|
|
@@ -12714,27 +12744,27 @@ function MultiNodeContextMenu({
|
|
|
12714
12744
|
onContextMenu: swallow,
|
|
12715
12745
|
onDoubleClick: swallow
|
|
12716
12746
|
},
|
|
12717
|
-
/* @__PURE__ */
|
|
12718
|
-
/* @__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(
|
|
12719
12749
|
"button",
|
|
12720
12750
|
{
|
|
12721
12751
|
onClick: () => setIsConfirmingDelete(false),
|
|
12722
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"
|
|
12723
12753
|
},
|
|
12724
12754
|
"Cancelar"
|
|
12725
|
-
), /* @__PURE__ */
|
|
12755
|
+
), /* @__PURE__ */ React21.createElement(
|
|
12726
12756
|
"button",
|
|
12727
12757
|
{
|
|
12728
12758
|
onClick: () => onDeleteNodes(data.nodeIds),
|
|
12729
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"
|
|
12730
12760
|
},
|
|
12731
12761
|
"Excluir"
|
|
12732
|
-
))) : /* @__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, ")"))))))
|
|
12733
12763
|
);
|
|
12734
12764
|
}
|
|
12735
12765
|
|
|
12736
12766
|
// src/components/RelationshipDetailsPanel.jsx
|
|
12737
|
-
import
|
|
12767
|
+
import React22, { useState as useState21, useEffect as useEffect18, useRef as useRef16, useMemo as useMemo9 } from "react";
|
|
12738
12768
|
import { v4 as uuidv410 } from "uuid";
|
|
12739
12769
|
import { FiPlus as FiPlus9, FiEdit2 as FiEdit29, FiLoader as FiLoader4, FiBookOpen as FiBookOpen5 } from "react-icons/fi";
|
|
12740
12770
|
function RelationshipDetailsPanel({
|
|
@@ -12874,7 +12904,7 @@ function RelationshipDetailsPanel({
|
|
|
12874
12904
|
onOpenImageViewer([{ name: name2 || "Imagem", value: url }], 0);
|
|
12875
12905
|
}
|
|
12876
12906
|
};
|
|
12877
|
-
return /* @__PURE__ */
|
|
12907
|
+
return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement(
|
|
12878
12908
|
"div",
|
|
12879
12909
|
{
|
|
12880
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
|
|
@@ -12889,7 +12919,7 @@ function RelationshipDetailsPanel({
|
|
|
12889
12919
|
onContextMenu: swallow,
|
|
12890
12920
|
onDoubleClick: swallow
|
|
12891
12921
|
},
|
|
12892
|
-
isReadMode ? /* @__PURE__ */
|
|
12922
|
+
isReadMode ? /* @__PURE__ */ React22.createElement(
|
|
12893
12923
|
DescriptionReadModePanel,
|
|
12894
12924
|
{
|
|
12895
12925
|
title: name || "Rela\xE7\xE3o",
|
|
@@ -12910,7 +12940,7 @@ function RelationshipDetailsPanel({
|
|
|
12910
12940
|
onImageClick: handleImageClickFromText,
|
|
12911
12941
|
onSaveDescription: handleSaveDescriptionInline
|
|
12912
12942
|
}
|
|
12913
|
-
) : /* @__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(
|
|
12914
12944
|
"button",
|
|
12915
12945
|
{
|
|
12916
12946
|
onClick: onClose,
|
|
@@ -12919,7 +12949,7 @@ function RelationshipDetailsPanel({
|
|
|
12919
12949
|
title: "Fechar"
|
|
12920
12950
|
},
|
|
12921
12951
|
"\xD7"
|
|
12922
|
-
)), /* @__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(
|
|
12923
12953
|
"input",
|
|
12924
12954
|
{
|
|
12925
12955
|
type: "text",
|
|
@@ -12934,7 +12964,7 @@ function RelationshipDetailsPanel({
|
|
|
12934
12964
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
12935
12965
|
`
|
|
12936
12966
|
}
|
|
12937
|
-
)), /* @__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(
|
|
12938
12968
|
"svg",
|
|
12939
12969
|
{
|
|
12940
12970
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -12948,9 +12978,9 @@ function RelationshipDetailsPanel({
|
|
|
12948
12978
|
strokeLinejoin: "round",
|
|
12949
12979
|
className: "text-violet-400 flex-shrink-0"
|
|
12950
12980
|
},
|
|
12951
|
-
/* @__PURE__ */
|
|
12952
|
-
/* @__PURE__ */
|
|
12953
|
-
), /* @__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(
|
|
12954
12984
|
"input",
|
|
12955
12985
|
{
|
|
12956
12986
|
type: "text",
|
|
@@ -12967,7 +12997,7 @@ function RelationshipDetailsPanel({
|
|
|
12967
12997
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
12968
12998
|
`
|
|
12969
12999
|
}
|
|
12970
|
-
)), /* @__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(
|
|
12971
13001
|
"input",
|
|
12972
13002
|
{
|
|
12973
13003
|
type: "text",
|
|
@@ -12984,7 +13014,7 @@ function RelationshipDetailsPanel({
|
|
|
12984
13014
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
12985
13015
|
`
|
|
12986
13016
|
}
|
|
12987
|
-
)))), /* @__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(
|
|
12988
13018
|
DescriptionDisplay,
|
|
12989
13019
|
{
|
|
12990
13020
|
description,
|
|
@@ -12996,7 +13026,7 @@ function RelationshipDetailsPanel({
|
|
|
12996
13026
|
onImageClick: handleImageClickFromText,
|
|
12997
13027
|
onSaveDescription: handleSaveDescriptionInline
|
|
12998
13028
|
}
|
|
12999
|
-
), /* @__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(
|
|
13000
13030
|
"button",
|
|
13001
13031
|
{
|
|
13002
13032
|
type: "button",
|
|
@@ -13004,8 +13034,8 @@ function RelationshipDetailsPanel({
|
|
|
13004
13034
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors border-r border-white/5",
|
|
13005
13035
|
title: "Modo de Leitura"
|
|
13006
13036
|
},
|
|
13007
|
-
/* @__PURE__ */
|
|
13008
|
-
), canEdit && /* @__PURE__ */
|
|
13037
|
+
/* @__PURE__ */ React22.createElement(FiBookOpen5, { size: 14 })
|
|
13038
|
+
), canEdit && /* @__PURE__ */ React22.createElement(
|
|
13009
13039
|
"button",
|
|
13010
13040
|
{
|
|
13011
13041
|
type: "button",
|
|
@@ -13013,24 +13043,24 @@ function RelationshipDetailsPanel({
|
|
|
13013
13043
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
13014
13044
|
title: "Editar descri\xE7\xE3o"
|
|
13015
13045
|
},
|
|
13016
|
-
/* @__PURE__ */
|
|
13017
|
-
)), !description && canEdit && /* @__PURE__ */
|
|
13046
|
+
/* @__PURE__ */ React22.createElement(FiEdit29, { size: 14 })
|
|
13047
|
+
)), !description && canEdit && /* @__PURE__ */ React22.createElement(
|
|
13018
13048
|
"div",
|
|
13019
13049
|
{
|
|
13020
13050
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
13021
13051
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
13022
13052
|
},
|
|
13023
13053
|
"Adicionar descri\xE7\xE3o..."
|
|
13024
|
-
))), /* @__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(
|
|
13025
13055
|
"button",
|
|
13026
13056
|
{
|
|
13027
13057
|
type: "button",
|
|
13028
13058
|
onClick: handleAddProp,
|
|
13029
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"
|
|
13030
13060
|
},
|
|
13031
|
-
/* @__PURE__ */
|
|
13061
|
+
/* @__PURE__ */ React22.createElement(FiPlus9, { size: 14 }),
|
|
13032
13062
|
" Adicionar"
|
|
13033
|
-
)), /* @__PURE__ */
|
|
13063
|
+
)), /* @__PURE__ */ React22.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React22.createElement(
|
|
13034
13064
|
CustomPropertyDisplay,
|
|
13035
13065
|
{
|
|
13036
13066
|
key: prop.id,
|
|
@@ -13044,7 +13074,7 @@ function RelationshipDetailsPanel({
|
|
|
13044
13074
|
onUploadFile,
|
|
13045
13075
|
disabled: !canEdit
|
|
13046
13076
|
}
|
|
13047
|
-
)), /* @__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(
|
|
13048
13078
|
"button",
|
|
13049
13079
|
{
|
|
13050
13080
|
onClick: onClose,
|
|
@@ -13052,7 +13082,7 @@ function RelationshipDetailsPanel({
|
|
|
13052
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"
|
|
13053
13083
|
},
|
|
13054
13084
|
canEdit ? "Cancelar" : "Fechar"
|
|
13055
|
-
), canEdit && /* @__PURE__ */
|
|
13085
|
+
), canEdit && /* @__PURE__ */ React22.createElement(
|
|
13056
13086
|
"button",
|
|
13057
13087
|
{
|
|
13058
13088
|
onClick: () => handleSave(false),
|
|
@@ -13061,10 +13091,10 @@ function RelationshipDetailsPanel({
|
|
|
13061
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"}
|
|
13062
13092
|
`
|
|
13063
13093
|
},
|
|
13064
|
-
isSaving && /* @__PURE__ */
|
|
13094
|
+
isSaving && /* @__PURE__ */ React22.createElement(FiLoader4, { className: "animate-spin" }),
|
|
13065
13095
|
isSaving ? "Salvando..." : "Salvar"
|
|
13066
13096
|
)))
|
|
13067
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
13097
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React22.createElement(
|
|
13068
13098
|
DescriptionEditModal,
|
|
13069
13099
|
{
|
|
13070
13100
|
isOpen: isDescriptionModalOpen,
|
|
@@ -13086,7 +13116,7 @@ function RelationshipDetailsPanel({
|
|
|
13086
13116
|
}
|
|
13087
13117
|
|
|
13088
13118
|
// src/components/RelationshipContextMenu.jsx
|
|
13089
|
-
import
|
|
13119
|
+
import React23, { useLayoutEffect as useLayoutEffect4, useRef as useRef17, useState as useState22, useEffect as useEffect19, useMemo as useMemo10 } from "react";
|
|
13090
13120
|
function RelationshipContextMenu({
|
|
13091
13121
|
data,
|
|
13092
13122
|
userRole,
|
|
@@ -13143,7 +13173,7 @@ function RelationshipContextMenu({
|
|
|
13143
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";
|
|
13144
13174
|
const canUpdate = ability.can("update", "Connection");
|
|
13145
13175
|
const canDelete = ability.can("delete", "Connection");
|
|
13146
|
-
return /* @__PURE__ */
|
|
13176
|
+
return /* @__PURE__ */ React23.createElement(
|
|
13147
13177
|
"div",
|
|
13148
13178
|
{
|
|
13149
13179
|
ref: menuRef,
|
|
@@ -13157,29 +13187,29 @@ function RelationshipContextMenu({
|
|
|
13157
13187
|
onContextMenu: swallow,
|
|
13158
13188
|
onDoubleClick: swallow
|
|
13159
13189
|
},
|
|
13160
|
-
/* @__PURE__ */
|
|
13161
|
-
/* @__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(
|
|
13162
13192
|
"button",
|
|
13163
13193
|
{
|
|
13164
13194
|
onClick: () => setIsConfirmingDelete(false),
|
|
13165
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"
|
|
13166
13196
|
},
|
|
13167
13197
|
"Cancelar"
|
|
13168
|
-
), /* @__PURE__ */
|
|
13198
|
+
), /* @__PURE__ */ React23.createElement(
|
|
13169
13199
|
"button",
|
|
13170
13200
|
{
|
|
13171
13201
|
onClick: () => onDelete == null ? void 0 : onDelete(data.linkObject),
|
|
13172
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"
|
|
13173
13203
|
},
|
|
13174
13204
|
"Excluir"
|
|
13175
|
-
))) : /* @__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(
|
|
13176
13206
|
"button",
|
|
13177
13207
|
{
|
|
13178
13208
|
onClick: () => onRelinkSource == null ? void 0 : onRelinkSource(data.linkObject),
|
|
13179
13209
|
className: baseButtonClass,
|
|
13180
13210
|
title: "Desconectar ponta ligada ao Source"
|
|
13181
13211
|
},
|
|
13182
|
-
/* @__PURE__ */
|
|
13212
|
+
/* @__PURE__ */ React23.createElement(
|
|
13183
13213
|
"svg",
|
|
13184
13214
|
{
|
|
13185
13215
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13192,18 +13222,18 @@ function RelationshipContextMenu({
|
|
|
13192
13222
|
strokeLinecap: "round",
|
|
13193
13223
|
strokeLinejoin: "round"
|
|
13194
13224
|
},
|
|
13195
|
-
/* @__PURE__ */
|
|
13196
|
-
/* @__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" })
|
|
13197
13227
|
),
|
|
13198
|
-
/* @__PURE__ */
|
|
13199
|
-
), /* @__PURE__ */
|
|
13228
|
+
/* @__PURE__ */ React23.createElement("span", null, "Desconectar Source (", sourceName, ")")
|
|
13229
|
+
), /* @__PURE__ */ React23.createElement(
|
|
13200
13230
|
"button",
|
|
13201
13231
|
{
|
|
13202
13232
|
onClick: () => onRelinkTarget == null ? void 0 : onRelinkTarget(data.linkObject),
|
|
13203
13233
|
className: baseButtonClass,
|
|
13204
13234
|
title: "Desconectar ponta ligada ao Target"
|
|
13205
13235
|
},
|
|
13206
|
-
/* @__PURE__ */
|
|
13236
|
+
/* @__PURE__ */ React23.createElement(
|
|
13207
13237
|
"svg",
|
|
13208
13238
|
{
|
|
13209
13239
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13216,21 +13246,21 @@ function RelationshipContextMenu({
|
|
|
13216
13246
|
strokeLinecap: "round",
|
|
13217
13247
|
strokeLinejoin: "round"
|
|
13218
13248
|
},
|
|
13219
|
-
/* @__PURE__ */
|
|
13220
|
-
/* @__PURE__ */
|
|
13221
|
-
/* @__PURE__ */
|
|
13222
|
-
/* @__PURE__ */
|
|
13223
|
-
/* @__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" })
|
|
13224
13254
|
),
|
|
13225
|
-
/* @__PURE__ */
|
|
13226
|
-
), /* @__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(
|
|
13227
13257
|
"button",
|
|
13228
13258
|
{
|
|
13229
13259
|
onClick: () => onOpenDetails == null ? void 0 : onOpenDetails(data.linkObject),
|
|
13230
13260
|
className: baseButtonClass,
|
|
13231
13261
|
title: "Abrir detalhes da rela\xE7\xE3o"
|
|
13232
13262
|
},
|
|
13233
|
-
/* @__PURE__ */
|
|
13263
|
+
/* @__PURE__ */ React23.createElement(
|
|
13234
13264
|
"svg",
|
|
13235
13265
|
{
|
|
13236
13266
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13243,19 +13273,19 @@ function RelationshipContextMenu({
|
|
|
13243
13273
|
strokeLinecap: "round",
|
|
13244
13274
|
strokeLinejoin: "round"
|
|
13245
13275
|
},
|
|
13246
|
-
/* @__PURE__ */
|
|
13247
|
-
/* @__PURE__ */
|
|
13248
|
-
/* @__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" })
|
|
13249
13279
|
),
|
|
13250
|
-
/* @__PURE__ */
|
|
13251
|
-
), 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(
|
|
13252
13282
|
"button",
|
|
13253
13283
|
{
|
|
13254
13284
|
onClick: () => setIsConfirmingDelete(true),
|
|
13255
13285
|
className: dangerButtonClass,
|
|
13256
13286
|
title: "Excluir esta conex\xE3o"
|
|
13257
13287
|
},
|
|
13258
|
-
/* @__PURE__ */
|
|
13288
|
+
/* @__PURE__ */ React23.createElement(
|
|
13259
13289
|
"svg",
|
|
13260
13290
|
{
|
|
13261
13291
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13268,19 +13298,19 @@ function RelationshipContextMenu({
|
|
|
13268
13298
|
strokeLinecap: "round",
|
|
13269
13299
|
strokeLinejoin: "round"
|
|
13270
13300
|
},
|
|
13271
|
-
/* @__PURE__ */
|
|
13272
|
-
/* @__PURE__ */
|
|
13273
|
-
/* @__PURE__ */
|
|
13274
|
-
/* @__PURE__ */
|
|
13275
|
-
/* @__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" })
|
|
13276
13306
|
),
|
|
13277
|
-
/* @__PURE__ */
|
|
13307
|
+
/* @__PURE__ */ React23.createElement("span", null, "Excluir conex\xE3o (", sourceName, " \u2192 ", targetName, ")")
|
|
13278
13308
|
)))))
|
|
13279
13309
|
);
|
|
13280
13310
|
}
|
|
13281
13311
|
|
|
13282
13312
|
// src/components/LoadingScreen.jsx
|
|
13283
|
-
import
|
|
13313
|
+
import React24 from "react";
|
|
13284
13314
|
var styles = {
|
|
13285
13315
|
loadingOverlay: {
|
|
13286
13316
|
position: "fixed",
|
|
@@ -13312,11 +13342,11 @@ var styles = {
|
|
|
13312
13342
|
`
|
|
13313
13343
|
};
|
|
13314
13344
|
function LoadingScreen() {
|
|
13315
|
-
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 })));
|
|
13316
13346
|
}
|
|
13317
13347
|
|
|
13318
13348
|
// src/components/ImportParentFileModal.jsx
|
|
13319
|
-
import
|
|
13349
|
+
import React25, { useEffect as useEffect20, useState as useState23 } from "react";
|
|
13320
13350
|
function ImportParentFileModal({
|
|
13321
13351
|
isOpen,
|
|
13322
13352
|
onClose,
|
|
@@ -13397,13 +13427,13 @@ function ImportParentFileModal({
|
|
|
13397
13427
|
const swallow = (e) => e.stopPropagation();
|
|
13398
13428
|
const currentList = activeTab === "databases" ? availableDbs : availableViews;
|
|
13399
13429
|
const emptyMessage = activeTab === "databases" ? "Nenhum novo arquivo parent dispon\xEDvel." : "Nenhuma view dispon\xEDvel para importa\xE7\xE3o.";
|
|
13400
|
-
return /* @__PURE__ */
|
|
13430
|
+
return /* @__PURE__ */ React25.createElement(
|
|
13401
13431
|
"div",
|
|
13402
13432
|
{
|
|
13403
13433
|
className: "ui-overlay fixed inset-0 z-[1200] flex items-center justify-center bg-black/60 backdrop-blur-sm",
|
|
13404
13434
|
onClick: onClose
|
|
13405
13435
|
},
|
|
13406
|
-
/* @__PURE__ */
|
|
13436
|
+
/* @__PURE__ */ React25.createElement(
|
|
13407
13437
|
"div",
|
|
13408
13438
|
{
|
|
13409
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]",
|
|
@@ -13415,14 +13445,14 @@ function ImportParentFileModal({
|
|
|
13415
13445
|
onContextMenu: swallow,
|
|
13416
13446
|
onDoubleClick: swallow
|
|
13417
13447
|
},
|
|
13418
|
-
/* @__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(
|
|
13419
13449
|
"button",
|
|
13420
13450
|
{
|
|
13421
13451
|
onClick: onClose,
|
|
13422
13452
|
className: "p-2 rounded-md text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
13423
13453
|
title: "Fechar"
|
|
13424
13454
|
},
|
|
13425
|
-
/* @__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(
|
|
13426
13456
|
"path",
|
|
13427
13457
|
{
|
|
13428
13458
|
fillRule: "evenodd",
|
|
@@ -13431,14 +13461,14 @@ function ImportParentFileModal({
|
|
|
13431
13461
|
}
|
|
13432
13462
|
))
|
|
13433
13463
|
)),
|
|
13434
|
-
/* @__PURE__ */
|
|
13464
|
+
/* @__PURE__ */ React25.createElement("div", { className: "flex px-6 border-b border-white/10 bg-white/5 flex-shrink-0" }, /* @__PURE__ */ React25.createElement(
|
|
13435
13465
|
"button",
|
|
13436
13466
|
{
|
|
13437
13467
|
onClick: () => setActiveTab("databases"),
|
|
13438
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"}`
|
|
13439
13469
|
},
|
|
13440
13470
|
"Arquivos Parent"
|
|
13441
|
-
), /* @__PURE__ */
|
|
13471
|
+
), /* @__PURE__ */ React25.createElement(
|
|
13442
13472
|
"button",
|
|
13443
13473
|
{
|
|
13444
13474
|
onClick: () => setActiveTab("views"),
|
|
@@ -13446,24 +13476,24 @@ function ImportParentFileModal({
|
|
|
13446
13476
|
},
|
|
13447
13477
|
"Views (Ancestralidades)"
|
|
13448
13478
|
)),
|
|
13449
|
-
/* @__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(
|
|
13450
13480
|
"div",
|
|
13451
13481
|
{
|
|
13452
13482
|
key: item.id,
|
|
13453
13483
|
onClick: () => setSelectedItem(item),
|
|
13454
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"}`
|
|
13455
13485
|
},
|
|
13456
|
-
/* @__PURE__ */
|
|
13457
|
-
item.description && /* @__PURE__ */
|
|
13458
|
-
)) : /* @__PURE__ */
|
|
13459
|
-
/* @__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(
|
|
13460
13490
|
"button",
|
|
13461
13491
|
{
|
|
13462
13492
|
onClick: onClose,
|
|
13463
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"
|
|
13464
13494
|
},
|
|
13465
13495
|
"Cancelar"
|
|
13466
|
-
), /* @__PURE__ */
|
|
13496
|
+
), /* @__PURE__ */ React25.createElement(
|
|
13467
13497
|
"button",
|
|
13468
13498
|
{
|
|
13469
13499
|
onClick: handleConfirm,
|
|
@@ -13477,7 +13507,7 @@ function ImportParentFileModal({
|
|
|
13477
13507
|
}
|
|
13478
13508
|
|
|
13479
13509
|
// src/components/AncestryLinkDetailsPanel.jsx
|
|
13480
|
-
import
|
|
13510
|
+
import React26, { useState as useState24 } from "react";
|
|
13481
13511
|
import { FiBookOpen as FiBookOpen6 } from "react-icons/fi";
|
|
13482
13512
|
function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenReference, onMentionClick, onUploadFile, onHighlight }) {
|
|
13483
13513
|
var _a, _b, _c, _d;
|
|
@@ -13488,7 +13518,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13488
13518
|
const sourceName = ((_b = (_a = data.sourceNode) == null ? void 0 : _a.userData) == null ? void 0 : _b.name) || "Origem";
|
|
13489
13519
|
const targetName = ((_d = (_c = data.targetNode) == null ? void 0 : _c.userData) == null ? void 0 : _d.name) || "Destino";
|
|
13490
13520
|
const [isReadMode, setIsReadMode] = useState24(false);
|
|
13491
|
-
|
|
13521
|
+
React26.useEffect(() => {
|
|
13492
13522
|
return () => {
|
|
13493
13523
|
if (onHighlight) onHighlight(null);
|
|
13494
13524
|
};
|
|
@@ -13499,14 +13529,14 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13499
13529
|
onOpenImageViewer([{ name: name || "Imagem", value: url }], 0);
|
|
13500
13530
|
}
|
|
13501
13531
|
};
|
|
13502
|
-
return /* @__PURE__ */
|
|
13532
|
+
return /* @__PURE__ */ React26.createElement(
|
|
13503
13533
|
"div",
|
|
13504
13534
|
{
|
|
13505
13535
|
className: "ui-overlay fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-[1200]",
|
|
13506
13536
|
onClick: onClose,
|
|
13507
13537
|
onPointerDown: swallow
|
|
13508
13538
|
},
|
|
13509
|
-
/* @__PURE__ */
|
|
13539
|
+
/* @__PURE__ */ React26.createElement(
|
|
13510
13540
|
"div",
|
|
13511
13541
|
{
|
|
13512
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
|
|
@@ -13514,7 +13544,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13514
13544
|
`,
|
|
13515
13545
|
onClick: swallow
|
|
13516
13546
|
},
|
|
13517
|
-
isReadMode ? /* @__PURE__ */
|
|
13547
|
+
isReadMode ? /* @__PURE__ */ React26.createElement(
|
|
13518
13548
|
DescriptionReadModePanel,
|
|
13519
13549
|
{
|
|
13520
13550
|
title: `${sourceName} \u2794 ${targetName}`,
|
|
@@ -13526,7 +13556,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13526
13556
|
onMentionClick,
|
|
13527
13557
|
onImageClick: handleImageClickFromText
|
|
13528
13558
|
}
|
|
13529
|
-
) : /* @__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(
|
|
13530
13560
|
"span",
|
|
13531
13561
|
{
|
|
13532
13562
|
className: "truncate max-w-[150px] cursor-help hover:text-blue-400 transition-colors",
|
|
@@ -13534,7 +13564,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13534
13564
|
onMouseLeave: () => onHighlight == null ? void 0 : onHighlight(null)
|
|
13535
13565
|
},
|
|
13536
13566
|
sourceName
|
|
13537
|
-
), /* @__PURE__ */
|
|
13567
|
+
), /* @__PURE__ */ React26.createElement("span", { className: "text-slate-500 text-sm" }, "\u2794"), /* @__PURE__ */ React26.createElement(
|
|
13538
13568
|
"span",
|
|
13539
13569
|
{
|
|
13540
13570
|
className: "truncate max-w-[150px] cursor-help hover:text-blue-400 transition-colors",
|
|
@@ -13542,15 +13572,15 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13542
13572
|
onMouseLeave: () => onHighlight == null ? void 0 : onHighlight(null)
|
|
13543
13573
|
},
|
|
13544
13574
|
targetName
|
|
13545
|
-
))), /* @__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(
|
|
13546
13576
|
"button",
|
|
13547
13577
|
{
|
|
13548
13578
|
onClick: () => setIsReadMode(true),
|
|
13549
13579
|
className: "p-1 text-slate-400 hover:text-white transition-colors",
|
|
13550
13580
|
title: "Modo de Leitura"
|
|
13551
13581
|
},
|
|
13552
|
-
/* @__PURE__ */
|
|
13553
|
-
)), /* @__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(
|
|
13554
13584
|
DescriptionDisplay,
|
|
13555
13585
|
{
|
|
13556
13586
|
description,
|
|
@@ -13559,7 +13589,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13559
13589
|
onMentionClick,
|
|
13560
13590
|
onImageClick: handleImageClickFromText
|
|
13561
13591
|
}
|
|
13562
|
-
))), 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(
|
|
13563
13593
|
CustomPropertyDisplay,
|
|
13564
13594
|
{
|
|
13565
13595
|
key: prop.id,
|
|
@@ -13568,13 +13598,13 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13568
13598
|
onOpenImageViewer,
|
|
13569
13599
|
onUploadFile
|
|
13570
13600
|
}
|
|
13571
|
-
)))), !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".')))
|
|
13572
13602
|
)
|
|
13573
13603
|
);
|
|
13574
13604
|
}
|
|
13575
13605
|
|
|
13576
13606
|
// src/components/Boards.jsx
|
|
13577
|
-
import
|
|
13607
|
+
import React29, {
|
|
13578
13608
|
useState as useState27,
|
|
13579
13609
|
useMemo as useMemo12,
|
|
13580
13610
|
useEffect as useEffect23,
|
|
@@ -13604,10 +13634,10 @@ import {
|
|
|
13604
13634
|
import { v4 as uuidv411 } from "uuid";
|
|
13605
13635
|
|
|
13606
13636
|
// src/components/RichGroupEditor.jsx
|
|
13607
|
-
import
|
|
13637
|
+
import React28, { useEffect as useEffect22, useRef as useRef19, useState as useState26, useCallback as useCallback4 } from "react";
|
|
13608
13638
|
|
|
13609
13639
|
// src/components/MentionPopover.jsx
|
|
13610
|
-
import
|
|
13640
|
+
import React27, { useEffect as useEffect21, useRef as useRef18, useState as useState25, useMemo as useMemo11 } from "react";
|
|
13611
13641
|
import { FiLayers as FiLayers6, FiCheckSquare as FiCheckSquare3, FiGitBranch as FiGitBranch3, FiBox } from "react-icons/fi";
|
|
13612
13642
|
var TYPE_CONFIG = {
|
|
13613
13643
|
ancestry: { Icon: FiLayers6, color: "text-indigo-400", label: "Ancestralidade" },
|
|
@@ -13655,7 +13685,7 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
|
|
|
13655
13685
|
if (el) el.scrollIntoView({ block: "nearest" });
|
|
13656
13686
|
}
|
|
13657
13687
|
}, [activeIndex]);
|
|
13658
|
-
return /* @__PURE__ */
|
|
13688
|
+
return /* @__PURE__ */ React27.createElement(
|
|
13659
13689
|
"div",
|
|
13660
13690
|
{
|
|
13661
13691
|
style: { top: position.top, left: position.left, position: "fixed", zIndex: 9999 },
|
|
@@ -13663,10 +13693,10 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
|
|
|
13663
13693
|
ref: listRef,
|
|
13664
13694
|
onMouseDown: (e) => e.preventDefault()
|
|
13665
13695
|
},
|
|
13666
|
-
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) => {
|
|
13667
13697
|
const config = TYPE_CONFIG[item.type] || TYPE_CONFIG.node;
|
|
13668
13698
|
const { Icon } = config;
|
|
13669
|
-
return /* @__PURE__ */
|
|
13699
|
+
return /* @__PURE__ */ React27.createElement(
|
|
13670
13700
|
"div",
|
|
13671
13701
|
{
|
|
13672
13702
|
key: item.id,
|
|
@@ -13677,9 +13707,9 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
|
|
|
13677
13707
|
onMouseEnter: () => setActiveIndex(idx),
|
|
13678
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"}`
|
|
13679
13709
|
},
|
|
13680
|
-
/* @__PURE__ */
|
|
13681
|
-
/* @__PURE__ */
|
|
13682
|
-
/* @__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)
|
|
13683
13713
|
);
|
|
13684
13714
|
})
|
|
13685
13715
|
);
|
|
@@ -13749,7 +13779,7 @@ function domToContent(el) {
|
|
|
13749
13779
|
el.childNodes.forEach(walk);
|
|
13750
13780
|
return segments;
|
|
13751
13781
|
}
|
|
13752
|
-
var RichGroupEditor =
|
|
13782
|
+
var RichGroupEditor = React28.memo(function RichGroupEditor2({
|
|
13753
13783
|
content,
|
|
13754
13784
|
onChange,
|
|
13755
13785
|
onMentionClick,
|
|
@@ -13935,7 +13965,7 @@ var RichGroupEditor = React27.memo(function RichGroupEditor2({
|
|
|
13935
13965
|
}
|
|
13936
13966
|
setMentionState(null);
|
|
13937
13967
|
}, []);
|
|
13938
|
-
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(
|
|
13939
13969
|
"div",
|
|
13940
13970
|
{
|
|
13941
13971
|
ref: editorRef,
|
|
@@ -13949,7 +13979,7 @@ var RichGroupEditor = React27.memo(function RichGroupEditor2({
|
|
|
13949
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"}`,
|
|
13950
13980
|
style: { overflowWrap: "break-word", wordBreak: "break-word" }
|
|
13951
13981
|
}
|
|
13952
|
-
), mentionState && !readOnly && /* @__PURE__ */
|
|
13982
|
+
), mentionState && !readOnly && /* @__PURE__ */ React28.createElement(
|
|
13953
13983
|
MentionPopover,
|
|
13954
13984
|
{
|
|
13955
13985
|
query: mentionState.query,
|
|
@@ -13967,9 +13997,9 @@ var RichGroupEditor_default = RichGroupEditor;
|
|
|
13967
13997
|
// src/components/Boards.jsx
|
|
13968
13998
|
var Tooltip = ({ text, children }) => {
|
|
13969
13999
|
if (!text) return children;
|
|
13970
|
-
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));
|
|
13971
14001
|
};
|
|
13972
|
-
var BoardItem =
|
|
14002
|
+
var BoardItem = React29.memo(
|
|
13973
14003
|
({
|
|
13974
14004
|
item,
|
|
13975
14005
|
index,
|
|
@@ -14015,20 +14045,20 @@ var BoardItem = React28.memo(
|
|
|
14015
14045
|
onUpdate(item.id, { ...item, color: newColor });
|
|
14016
14046
|
};
|
|
14017
14047
|
if (isFolder) {
|
|
14018
|
-
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(
|
|
14019
14049
|
"div",
|
|
14020
14050
|
{
|
|
14021
14051
|
onClick: () => onEnterFolder(item.id),
|
|
14022
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"
|
|
14023
14053
|
},
|
|
14024
|
-
/* @__PURE__ */
|
|
14054
|
+
/* @__PURE__ */ React29.createElement(
|
|
14025
14055
|
"div",
|
|
14026
14056
|
{
|
|
14027
14057
|
className: "absolute inset-y-0 left-0 w-1 opacity-0 group-hover/folder:opacity-100 transition-opacity rounded-l-xl",
|
|
14028
14058
|
style: { background: `linear-gradient(to right, ${item.color || "#6366f1"}33, transparent)` }
|
|
14029
14059
|
}
|
|
14030
14060
|
),
|
|
14031
|
-
/* @__PURE__ */
|
|
14061
|
+
/* @__PURE__ */ React29.createElement(
|
|
14032
14062
|
"div",
|
|
14033
14063
|
{
|
|
14034
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",
|
|
@@ -14038,9 +14068,9 @@ var BoardItem = React28.memo(
|
|
|
14038
14068
|
color: item.color || "#6366f1"
|
|
14039
14069
|
}
|
|
14040
14070
|
},
|
|
14041
|
-
/* @__PURE__ */
|
|
14071
|
+
/* @__PURE__ */ React29.createElement(FiFolder3, { size: 18 })
|
|
14042
14072
|
),
|
|
14043
|
-
/* @__PURE__ */
|
|
14073
|
+
/* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-0 flex flex-col justify-center" }, canEdit ? /* @__PURE__ */ React29.createElement(
|
|
14044
14074
|
"input",
|
|
14045
14075
|
{
|
|
14046
14076
|
type: "text",
|
|
@@ -14050,8 +14080,8 @@ var BoardItem = React28.memo(
|
|
|
14050
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",
|
|
14051
14081
|
placeholder: "Nome..."
|
|
14052
14082
|
}
|
|
14053
|
-
) : /* @__PURE__ */
|
|
14054
|
-
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(
|
|
14055
14085
|
ColorPicker,
|
|
14056
14086
|
{
|
|
14057
14087
|
isCompact: true,
|
|
@@ -14059,7 +14089,7 @@ var BoardItem = React28.memo(
|
|
|
14059
14089
|
onChange: handleColorChange,
|
|
14060
14090
|
disabled: !canEdit
|
|
14061
14091
|
}
|
|
14062
|
-
)), /* @__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(
|
|
14063
14093
|
"button",
|
|
14064
14094
|
{
|
|
14065
14095
|
onClick: (e) => {
|
|
@@ -14069,8 +14099,8 @@ var BoardItem = React28.memo(
|
|
|
14069
14099
|
disabled: !canMoveUp,
|
|
14070
14100
|
className: `p-1 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
14071
14101
|
},
|
|
14072
|
-
/* @__PURE__ */
|
|
14073
|
-
)), /* @__PURE__ */
|
|
14102
|
+
/* @__PURE__ */ React29.createElement(FiArrowUp, { size: 14 })
|
|
14103
|
+
)), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ React29.createElement(
|
|
14074
14104
|
"button",
|
|
14075
14105
|
{
|
|
14076
14106
|
onClick: (e) => {
|
|
@@ -14080,8 +14110,8 @@ var BoardItem = React28.memo(
|
|
|
14080
14110
|
disabled: !canMoveDown,
|
|
14081
14111
|
className: `p-1 rounded transition-colors ${!canMoveDown ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
14082
14112
|
},
|
|
14083
|
-
/* @__PURE__ */
|
|
14084
|
-
)), /* @__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(
|
|
14085
14115
|
"button",
|
|
14086
14116
|
{
|
|
14087
14117
|
onClick: (e) => {
|
|
@@ -14090,8 +14120,8 @@ var BoardItem = React28.memo(
|
|
|
14090
14120
|
},
|
|
14091
14121
|
className: "p-1 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
14092
14122
|
},
|
|
14093
|
-
/* @__PURE__ */
|
|
14094
|
-
)), showIndentDown && /* @__PURE__ */
|
|
14123
|
+
/* @__PURE__ */ React29.createElement(FiArrowLeft3, { size: 14 })
|
|
14124
|
+
)), showIndentDown && /* @__PURE__ */ React29.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ React29.createElement(
|
|
14095
14125
|
"button",
|
|
14096
14126
|
{
|
|
14097
14127
|
onClick: (e) => {
|
|
@@ -14100,8 +14130,8 @@ var BoardItem = React28.memo(
|
|
|
14100
14130
|
},
|
|
14101
14131
|
className: "p-1 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
14102
14132
|
},
|
|
14103
|
-
/* @__PURE__ */
|
|
14104
|
-
)), !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(
|
|
14105
14135
|
"button",
|
|
14106
14136
|
{
|
|
14107
14137
|
onClick: (e) => {
|
|
@@ -14110,8 +14140,8 @@ var BoardItem = React28.memo(
|
|
|
14110
14140
|
},
|
|
14111
14141
|
className: `p-1 rounded text-slate-400 hover:text-white hover:bg-white/10 transition-colors`
|
|
14112
14142
|
},
|
|
14113
|
-
/* @__PURE__ */
|
|
14114
|
-
))), /* @__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(
|
|
14115
14145
|
"button",
|
|
14116
14146
|
{
|
|
14117
14147
|
onClick: (e) => {
|
|
@@ -14120,11 +14150,11 @@ var BoardItem = React28.memo(
|
|
|
14120
14150
|
},
|
|
14121
14151
|
className: "p-1 text-slate-500 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
14122
14152
|
},
|
|
14123
|
-
/* @__PURE__ */
|
|
14153
|
+
/* @__PURE__ */ React29.createElement(FiTrash23, { size: 14 })
|
|
14124
14154
|
))))
|
|
14125
14155
|
));
|
|
14126
14156
|
}
|
|
14127
|
-
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(
|
|
14128
14158
|
RichGroupEditor_default,
|
|
14129
14159
|
{
|
|
14130
14160
|
content: item.content,
|
|
@@ -14134,61 +14164,61 @@ var BoardItem = React28.memo(
|
|
|
14134
14164
|
readOnly: !canEdit,
|
|
14135
14165
|
placeholder: "Escreva sobre este grupo de texto\u2026 ou @ para mencionar"
|
|
14136
14166
|
}
|
|
14137
|
-
), 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(
|
|
14138
14168
|
"button",
|
|
14139
14169
|
{
|
|
14140
14170
|
onClick: () => onAddSubgroup(item.id, "text_group"),
|
|
14141
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",
|
|
14142
14172
|
title: "Criar Subgrupo de Texto"
|
|
14143
14173
|
},
|
|
14144
|
-
/* @__PURE__ */
|
|
14145
|
-
/* @__PURE__ */
|
|
14146
|
-
)), /* @__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(
|
|
14147
14177
|
"button",
|
|
14148
14178
|
{
|
|
14149
14179
|
onClick: () => onMoveUp(item.id),
|
|
14150
14180
|
disabled: !canMoveUp,
|
|
14151
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"}`
|
|
14152
14182
|
},
|
|
14153
|
-
/* @__PURE__ */
|
|
14154
|
-
)), /* @__PURE__ */
|
|
14183
|
+
/* @__PURE__ */ React29.createElement(FiArrowUp, { size: 14 })
|
|
14184
|
+
)), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ React29.createElement(
|
|
14155
14185
|
"button",
|
|
14156
14186
|
{
|
|
14157
14187
|
onClick: () => onMoveDown(item.id),
|
|
14158
14188
|
disabled: !canMoveDown,
|
|
14159
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"}`
|
|
14160
14190
|
},
|
|
14161
|
-
/* @__PURE__ */
|
|
14162
|
-
)), /* @__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(
|
|
14163
14193
|
"button",
|
|
14164
14194
|
{
|
|
14165
14195
|
onClick: () => onIndent(item.id),
|
|
14166
14196
|
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
14167
14197
|
},
|
|
14168
|
-
/* @__PURE__ */
|
|
14169
|
-
)), showIndentDown && /* @__PURE__ */
|
|
14198
|
+
/* @__PURE__ */ React29.createElement(FiArrowLeft3, { size: 14 })
|
|
14199
|
+
)), showIndentDown && /* @__PURE__ */ React29.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ React29.createElement(
|
|
14170
14200
|
"button",
|
|
14171
14201
|
{
|
|
14172
14202
|
onClick: () => onIndentDown(item.id),
|
|
14173
14203
|
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
14174
14204
|
},
|
|
14175
|
-
/* @__PURE__ */
|
|
14176
|
-
)), !isAtRoot && /* @__PURE__ */
|
|
14205
|
+
/* @__PURE__ */ React29.createElement(FiArrowRight2, { size: 14 })
|
|
14206
|
+
)), !isAtRoot && /* @__PURE__ */ React29.createElement(Tooltip, { text: "Desaninhar / Recuar n\xEDvel" }, /* @__PURE__ */ React29.createElement(
|
|
14177
14207
|
"button",
|
|
14178
14208
|
{
|
|
14179
14209
|
onClick: () => onOutdent(item.id),
|
|
14180
14210
|
disabled: !onOutdent,
|
|
14181
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"}`
|
|
14182
14212
|
},
|
|
14183
|
-
/* @__PURE__ */
|
|
14184
|
-
)), /* @__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(
|
|
14185
14215
|
"button",
|
|
14186
14216
|
{
|
|
14187
14217
|
onClick: () => onDelete(item.id),
|
|
14188
14218
|
className: "p-1.5 text-slate-600 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
14189
14219
|
},
|
|
14190
|
-
/* @__PURE__ */
|
|
14191
|
-
))))), 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(
|
|
14192
14222
|
BoardItem,
|
|
14193
14223
|
{
|
|
14194
14224
|
key: child.id,
|
|
@@ -14514,72 +14544,72 @@ function Boards({
|
|
|
14514
14544
|
setNavigationStack([]);
|
|
14515
14545
|
}, []);
|
|
14516
14546
|
if (!isOpen) return null;
|
|
14517
|
-
return /* @__PURE__ */
|
|
14547
|
+
return /* @__PURE__ */ React29.createElement(
|
|
14518
14548
|
"div",
|
|
14519
14549
|
{
|
|
14520
14550
|
className: "fixed inset-0 z-[2200] bg-black/80 backdrop-blur-sm flex items-center justify-center p-2",
|
|
14521
14551
|
onClick: onClose
|
|
14522
14552
|
},
|
|
14523
|
-
/* @__PURE__ */
|
|
14553
|
+
/* @__PURE__ */ React29.createElement(
|
|
14524
14554
|
"div",
|
|
14525
14555
|
{
|
|
14526
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",
|
|
14527
14557
|
onClick: (e) => e.stopPropagation()
|
|
14528
14558
|
},
|
|
14529
|
-
/* @__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(
|
|
14530
14560
|
FiLoader5,
|
|
14531
14561
|
{
|
|
14532
14562
|
className: "animate-spin text-indigo-400",
|
|
14533
14563
|
size: 12
|
|
14534
14564
|
}
|
|
14535
|
-
), /* @__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(
|
|
14536
14566
|
"button",
|
|
14537
14567
|
{
|
|
14538
14568
|
onClick: () => handleAddItem("folder"),
|
|
14539
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"
|
|
14540
14570
|
},
|
|
14541
|
-
/* @__PURE__ */
|
|
14542
|
-
/* @__PURE__ */
|
|
14543
|
-
), /* @__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(
|
|
14544
14574
|
"button",
|
|
14545
14575
|
{
|
|
14546
14576
|
onClick: () => handleAddItem("text_group"),
|
|
14547
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"
|
|
14548
14578
|
},
|
|
14549
|
-
/* @__PURE__ */
|
|
14550
|
-
/* @__PURE__ */
|
|
14551
|
-
)), /* @__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(
|
|
14552
14582
|
"button",
|
|
14553
14583
|
{
|
|
14554
14584
|
onClick: onClose,
|
|
14555
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"
|
|
14556
14586
|
},
|
|
14557
|
-
/* @__PURE__ */
|
|
14587
|
+
/* @__PURE__ */ React29.createElement(FiX8, { size: 16 })
|
|
14558
14588
|
))),
|
|
14559
|
-
/* @__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(
|
|
14560
14590
|
"button",
|
|
14561
14591
|
{
|
|
14562
14592
|
onClick: navigateHome,
|
|
14563
14593
|
className: `hover:text-white transition-colors flex items-center gap-1 ${navigationStack.length === 0 ? "text-indigo-400" : ""}`
|
|
14564
14594
|
},
|
|
14565
14595
|
"Home"
|
|
14566
|
-
), 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(
|
|
14567
14597
|
"button",
|
|
14568
14598
|
{
|
|
14569
14599
|
onClick: () => navigateToBreadcrumb(idx),
|
|
14570
14600
|
className: `hover:text-white transition-colors ${idx === currentPath.length - 1 ? "text-indigo-400" : ""}`
|
|
14571
14601
|
},
|
|
14572
14602
|
folder.name || "Sem Nome"
|
|
14573
|
-
))), navigationStack.length > 0 && /* @__PURE__ */
|
|
14603
|
+
))), navigationStack.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "ml-auto" }, /* @__PURE__ */ React29.createElement(
|
|
14574
14604
|
"button",
|
|
14575
14605
|
{
|
|
14576
14606
|
onClick: navigateUp,
|
|
14577
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"
|
|
14578
14608
|
},
|
|
14579
|
-
/* @__PURE__ */
|
|
14580
|
-
/* @__PURE__ */
|
|
14609
|
+
/* @__PURE__ */ React29.createElement(FiArrowLeft3, { size: 10 }),
|
|
14610
|
+
/* @__PURE__ */ React29.createElement("span", null, "Voltar")
|
|
14581
14611
|
))),
|
|
14582
|
-
/* @__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(
|
|
14583
14613
|
BoardItem,
|
|
14584
14614
|
{
|
|
14585
14615
|
key: item.id,
|
|
@@ -14602,13 +14632,13 @@ function Boards({
|
|
|
14602
14632
|
isAtRoot: navigationStack.length === 0
|
|
14603
14633
|
}
|
|
14604
14634
|
))),
|
|
14605
|
-
/* @__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"))
|
|
14606
14636
|
)
|
|
14607
14637
|
);
|
|
14608
14638
|
}
|
|
14609
14639
|
|
|
14610
14640
|
// src/components/MilestoneManager.jsx
|
|
14611
|
-
import
|
|
14641
|
+
import React30, { useState as useState28 } from "react";
|
|
14612
14642
|
import { FiTarget as FiTarget4, FiPlus as FiPlus11, FiTrash2 as FiTrash24, FiX as FiX9, FiCheck as FiCheck12, FiPauseCircle, FiPlayCircle } from "react-icons/fi";
|
|
14613
14643
|
function MilestoneManager({
|
|
14614
14644
|
isOpen,
|
|
@@ -14642,27 +14672,27 @@ function MilestoneManager({
|
|
|
14642
14672
|
};
|
|
14643
14673
|
if (!isOpen) return null;
|
|
14644
14674
|
const swallow = (e) => e.stopPropagation();
|
|
14645
|
-
return /* @__PURE__ */
|
|
14675
|
+
return /* @__PURE__ */ React30.createElement(
|
|
14646
14676
|
"div",
|
|
14647
14677
|
{
|
|
14648
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",
|
|
14649
14679
|
onClick: onClose
|
|
14650
14680
|
},
|
|
14651
|
-
/* @__PURE__ */
|
|
14681
|
+
/* @__PURE__ */ React30.createElement(
|
|
14652
14682
|
"div",
|
|
14653
14683
|
{
|
|
14654
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",
|
|
14655
14685
|
onClick: swallow
|
|
14656
14686
|
},
|
|
14657
|
-
/* @__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(
|
|
14658
14688
|
"button",
|
|
14659
14689
|
{
|
|
14660
14690
|
onClick: onClose,
|
|
14661
14691
|
className: "p-2 rounded-full hover:bg-white/10 text-slate-400 hover:text-white transition-colors"
|
|
14662
14692
|
},
|
|
14663
|
-
/* @__PURE__ */
|
|
14693
|
+
/* @__PURE__ */ React30.createElement(FiX9, { size: 20 })
|
|
14664
14694
|
)),
|
|
14665
|
-
/* @__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(
|
|
14666
14696
|
"input",
|
|
14667
14697
|
{
|
|
14668
14698
|
type: "text",
|
|
@@ -14672,47 +14702,47 @@ function MilestoneManager({
|
|
|
14672
14702
|
placeholder: "Adicionar novo milestone...",
|
|
14673
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"
|
|
14674
14704
|
}
|
|
14675
|
-
), /* @__PURE__ */
|
|
14705
|
+
), /* @__PURE__ */ React30.createElement(
|
|
14676
14706
|
"button",
|
|
14677
14707
|
{
|
|
14678
14708
|
onClick: handleAddMilestone,
|
|
14679
14709
|
disabled: !newMilestoneName.trim(),
|
|
14680
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"
|
|
14681
14711
|
},
|
|
14682
|
-
/* @__PURE__ */
|
|
14712
|
+
/* @__PURE__ */ React30.createElement(FiPlus11, { size: 18 }),
|
|
14683
14713
|
"Adicionar"
|
|
14684
14714
|
))),
|
|
14685
|
-
/* @__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(
|
|
14686
14716
|
"div",
|
|
14687
14717
|
{
|
|
14688
14718
|
key: ms.id,
|
|
14689
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]"}`
|
|
14690
14720
|
},
|
|
14691
|
-
/* @__PURE__ */
|
|
14721
|
+
/* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ React30.createElement(
|
|
14692
14722
|
"div",
|
|
14693
14723
|
{
|
|
14694
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"}`
|
|
14695
14725
|
}
|
|
14696
|
-
), /* @__PURE__ */
|
|
14697
|
-
/* @__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(
|
|
14698
14728
|
"button",
|
|
14699
14729
|
{
|
|
14700
14730
|
onClick: () => handleToggleMilestoneStatus(ms.id),
|
|
14701
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"}`,
|
|
14702
14732
|
title: ms.status === "active" ? "Inativar" : "Ativar"
|
|
14703
14733
|
},
|
|
14704
|
-
ms.status === "active" ? /* @__PURE__ */
|
|
14705
|
-
), /* @__PURE__ */
|
|
14734
|
+
ms.status === "active" ? /* @__PURE__ */ React30.createElement(FiPauseCircle, { size: 18 }) : /* @__PURE__ */ React30.createElement(FiPlayCircle, { size: 18 })
|
|
14735
|
+
), /* @__PURE__ */ React30.createElement(
|
|
14706
14736
|
"button",
|
|
14707
14737
|
{
|
|
14708
14738
|
onClick: () => handleRemoveMilestone(ms.id),
|
|
14709
14739
|
className: "p-2 rounded-lg hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-all",
|
|
14710
14740
|
title: "Remover"
|
|
14711
14741
|
},
|
|
14712
|
-
/* @__PURE__ */
|
|
14742
|
+
/* @__PURE__ */ React30.createElement(FiTrash24, { size: 18 })
|
|
14713
14743
|
))
|
|
14714
|
-
))) : /* @__PURE__ */
|
|
14715
|
-
/* @__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))))
|
|
14716
14746
|
)
|
|
14717
14747
|
);
|
|
14718
14748
|
}
|
|
@@ -19402,10 +19432,10 @@ function XViewScene({
|
|
|
19402
19432
|
// <-- handleCancelQuest adicionado aqui
|
|
19403
19433
|
]);
|
|
19404
19434
|
if (isLoading || status === "loading" || permissionStatus === "loading") {
|
|
19405
|
-
return /* @__PURE__ */
|
|
19435
|
+
return /* @__PURE__ */ React31.createElement(LoadingScreen, null);
|
|
19406
19436
|
}
|
|
19407
19437
|
if (permissionStatus === "denied") {
|
|
19408
|
-
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(
|
|
19409
19439
|
"svg",
|
|
19410
19440
|
{
|
|
19411
19441
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -19415,7 +19445,7 @@ function XViewScene({
|
|
|
19415
19445
|
stroke: "currentColor",
|
|
19416
19446
|
className: "w-16 h-16 mx-auto"
|
|
19417
19447
|
},
|
|
19418
|
-
/* @__PURE__ */
|
|
19448
|
+
/* @__PURE__ */ React31.createElement(
|
|
19419
19449
|
"path",
|
|
19420
19450
|
{
|
|
19421
19451
|
strokeLinecap: "round",
|
|
@@ -19423,13 +19453,13 @@ function XViewScene({
|
|
|
19423
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"
|
|
19424
19454
|
}
|
|
19425
19455
|
)
|
|
19426
|
-
)), /* @__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(
|
|
19427
19457
|
"button",
|
|
19428
19458
|
{
|
|
19429
19459
|
onClick: handleNavigateBack,
|
|
19430
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"
|
|
19431
19461
|
},
|
|
19432
|
-
/* @__PURE__ */
|
|
19462
|
+
/* @__PURE__ */ React31.createElement(
|
|
19433
19463
|
"svg",
|
|
19434
19464
|
{
|
|
19435
19465
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -19439,7 +19469,7 @@ function XViewScene({
|
|
|
19439
19469
|
stroke: "currentColor",
|
|
19440
19470
|
className: "w-5 h-5"
|
|
19441
19471
|
},
|
|
19442
|
-
/* @__PURE__ */
|
|
19472
|
+
/* @__PURE__ */ React31.createElement(
|
|
19443
19473
|
"path",
|
|
19444
19474
|
{
|
|
19445
19475
|
strokeLinecap: "round",
|
|
@@ -19451,7 +19481,7 @@ function XViewScene({
|
|
|
19451
19481
|
"Voltar para o X.View"
|
|
19452
19482
|
)));
|
|
19453
19483
|
}
|
|
19454
|
-
return /* @__PURE__ */
|
|
19484
|
+
return /* @__PURE__ */ React31.createElement(
|
|
19455
19485
|
"div",
|
|
19456
19486
|
{
|
|
19457
19487
|
ref: mountRef,
|
|
@@ -19463,7 +19493,7 @@ function XViewScene({
|
|
|
19463
19493
|
cursor: stateRef.current.connection.isActive || stateRef.current.relink.isActive || ancestryMode.isActive ? "crosshair" : creationMode.isActive ? "default" : "grab"
|
|
19464
19494
|
}
|
|
19465
19495
|
},
|
|
19466
|
-
userPermissionRole !== "link_viewer" && /* @__PURE__ */
|
|
19496
|
+
userPermissionRole !== "link_viewer" && /* @__PURE__ */ React31.createElement(
|
|
19467
19497
|
XViewSidebar,
|
|
19468
19498
|
{
|
|
19469
19499
|
dbNodes: searchableDbNodes,
|
|
@@ -19488,7 +19518,7 @@ function XViewScene({
|
|
|
19488
19518
|
onOpenMilestoneManager: () => setIsMilestoneManagerOpen(true)
|
|
19489
19519
|
}
|
|
19490
19520
|
),
|
|
19491
|
-
creationMode.isActive && /* @__PURE__ */
|
|
19521
|
+
creationMode.isActive && /* @__PURE__ */ React31.createElement(
|
|
19492
19522
|
InSceneCreationForm,
|
|
19493
19523
|
{
|
|
19494
19524
|
onSave: (data) => userActionHandlers.handleSaveNode(actionHandlerContext, data),
|
|
@@ -19521,7 +19551,7 @@ function XViewScene({
|
|
|
19521
19551
|
create_google_doc_action
|
|
19522
19552
|
}
|
|
19523
19553
|
),
|
|
19524
|
-
versionMode.isActive && /* @__PURE__ */
|
|
19554
|
+
versionMode.isActive && /* @__PURE__ */ React31.createElement(
|
|
19525
19555
|
InSceneVersionForm,
|
|
19526
19556
|
{
|
|
19527
19557
|
onSave: (data) => userActionHandlers.handleSaveVersionNode(actionHandlerContext, data),
|
|
@@ -19547,7 +19577,7 @@ function XViewScene({
|
|
|
19547
19577
|
availableAncestries: allAvailableAncestries
|
|
19548
19578
|
}
|
|
19549
19579
|
),
|
|
19550
|
-
questMode.isActive && /* @__PURE__ */
|
|
19580
|
+
questMode.isActive && /* @__PURE__ */ React31.createElement(
|
|
19551
19581
|
InSceneQuestForm,
|
|
19552
19582
|
{
|
|
19553
19583
|
onSave: (data) => handleSaveQuestNode(actionHandlerContext, data),
|
|
@@ -19576,7 +19606,7 @@ function XViewScene({
|
|
|
19576
19606
|
create_google_doc_action
|
|
19577
19607
|
}
|
|
19578
19608
|
),
|
|
19579
|
-
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */
|
|
19609
|
+
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ React31.createElement(
|
|
19580
19610
|
"div",
|
|
19581
19611
|
{
|
|
19582
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"}`,
|
|
@@ -19589,7 +19619,7 @@ function XViewScene({
|
|
|
19589
19619
|
maxWidth: "92vw"
|
|
19590
19620
|
}
|
|
19591
19621
|
},
|
|
19592
|
-
/* @__PURE__ */
|
|
19622
|
+
/* @__PURE__ */ React31.createElement(
|
|
19593
19623
|
"div",
|
|
19594
19624
|
{
|
|
19595
19625
|
onPointerDown: (e) => {
|
|
@@ -19600,7 +19630,7 @@ function XViewScene({
|
|
|
19600
19630
|
title: "Arraste para redimensionar"
|
|
19601
19631
|
}
|
|
19602
19632
|
),
|
|
19603
|
-
/* @__PURE__ */
|
|
19633
|
+
/* @__PURE__ */ React31.createElement(
|
|
19604
19634
|
DescriptionReadModePanel,
|
|
19605
19635
|
{
|
|
19606
19636
|
key: readingMode.branchStack.length > 0 ? readingMode.branchStack[readingMode.branchStack.length - 1].branchId : readingMode.ancestry.ancestry_id,
|
|
@@ -19635,7 +19665,7 @@ function XViewScene({
|
|
|
19635
19665
|
}
|
|
19636
19666
|
)
|
|
19637
19667
|
),
|
|
19638
|
-
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */
|
|
19668
|
+
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */ React31.createElement(
|
|
19639
19669
|
CreateAncestryPanel,
|
|
19640
19670
|
{
|
|
19641
19671
|
ancestryMode,
|
|
@@ -19671,7 +19701,7 @@ function XViewScene({
|
|
|
19671
19701
|
onRenderAbstractionTree: (data, targetId) => handleRenderAbstractionTree(data, targetId)
|
|
19672
19702
|
}
|
|
19673
19703
|
),
|
|
19674
|
-
editingAncestryRel.visible && /* @__PURE__ */
|
|
19704
|
+
editingAncestryRel.visible && /* @__PURE__ */ React31.createElement(
|
|
19675
19705
|
AncestryRelationshipPanel,
|
|
19676
19706
|
{
|
|
19677
19707
|
data: editingAncestryRel.data,
|
|
@@ -19685,7 +19715,7 @@ function XViewScene({
|
|
|
19685
19715
|
onUploadFile: upload_file_action
|
|
19686
19716
|
}
|
|
19687
19717
|
),
|
|
19688
|
-
detailsNode && detailsNode.is_quest && /* @__PURE__ */
|
|
19718
|
+
detailsNode && detailsNode.is_quest && /* @__PURE__ */ React31.createElement(
|
|
19689
19719
|
QuestDetailsPanel,
|
|
19690
19720
|
{
|
|
19691
19721
|
node: detailsNode,
|
|
@@ -19712,7 +19742,7 @@ function XViewScene({
|
|
|
19712
19742
|
create_google_doc_action
|
|
19713
19743
|
}
|
|
19714
19744
|
),
|
|
19715
|
-
detailsNode && !detailsNode.is_quest && /* @__PURE__ */
|
|
19745
|
+
detailsNode && !detailsNode.is_quest && /* @__PURE__ */ React31.createElement(
|
|
19716
19746
|
NodeDetailsPanel,
|
|
19717
19747
|
{
|
|
19718
19748
|
node: detailsNode,
|
|
@@ -19745,7 +19775,7 @@ function XViewScene({
|
|
|
19745
19775
|
create_google_doc_action
|
|
19746
19776
|
}
|
|
19747
19777
|
),
|
|
19748
|
-
detailsLink && /* @__PURE__ */
|
|
19778
|
+
detailsLink && /* @__PURE__ */ React31.createElement(
|
|
19749
19779
|
RelationshipDetailsPanel,
|
|
19750
19780
|
{
|
|
19751
19781
|
link: detailsLink,
|
|
@@ -19760,7 +19790,7 @@ function XViewScene({
|
|
|
19760
19790
|
onHighlight: handleReadModeHighlight
|
|
19761
19791
|
}
|
|
19762
19792
|
),
|
|
19763
|
-
ancestryLinkDetails && /* @__PURE__ */
|
|
19793
|
+
ancestryLinkDetails && /* @__PURE__ */ React31.createElement(
|
|
19764
19794
|
AncestryLinkDetailsPanel,
|
|
19765
19795
|
{
|
|
19766
19796
|
data: ancestryLinkDetails,
|
|
@@ -19772,7 +19802,7 @@ function XViewScene({
|
|
|
19772
19802
|
onHighlight: handleReadModeHighlight
|
|
19773
19803
|
}
|
|
19774
19804
|
),
|
|
19775
|
-
/* @__PURE__ */
|
|
19805
|
+
/* @__PURE__ */ React31.createElement(
|
|
19776
19806
|
"div",
|
|
19777
19807
|
{
|
|
19778
19808
|
ref: tooltipRef,
|
|
@@ -19799,7 +19829,7 @@ function XViewScene({
|
|
|
19799
19829
|
}
|
|
19800
19830
|
}
|
|
19801
19831
|
),
|
|
19802
|
-
/* @__PURE__ */
|
|
19832
|
+
/* @__PURE__ */ React31.createElement(
|
|
19803
19833
|
ContextMenu,
|
|
19804
19834
|
{
|
|
19805
19835
|
data: contextMenu,
|
|
@@ -19837,7 +19867,7 @@ function XViewScene({
|
|
|
19837
19867
|
onFinishQuest: handleFinishQuestQuick
|
|
19838
19868
|
}
|
|
19839
19869
|
),
|
|
19840
|
-
/* @__PURE__ */
|
|
19870
|
+
/* @__PURE__ */ React31.createElement(
|
|
19841
19871
|
MultiNodeContextMenu,
|
|
19842
19872
|
{
|
|
19843
19873
|
data: multiContextMenu,
|
|
@@ -19857,7 +19887,7 @@ function XViewScene({
|
|
|
19857
19887
|
)
|
|
19858
19888
|
}
|
|
19859
19889
|
),
|
|
19860
|
-
/* @__PURE__ */
|
|
19890
|
+
/* @__PURE__ */ React31.createElement(
|
|
19861
19891
|
RelationshipContextMenu,
|
|
19862
19892
|
{
|
|
19863
19893
|
data: relationshipMenu,
|
|
@@ -19875,14 +19905,14 @@ function XViewScene({
|
|
|
19875
19905
|
onDelete: (data) => userActionHandlers.handleDeleteLink(actionHandlerContext, data)
|
|
19876
19906
|
}
|
|
19877
19907
|
),
|
|
19878
|
-
/* @__PURE__ */
|
|
19908
|
+
/* @__PURE__ */ React31.createElement(
|
|
19879
19909
|
ImageViewer,
|
|
19880
19910
|
{
|
|
19881
19911
|
data: imageViewer,
|
|
19882
19912
|
onClose: () => setImageViewer({ ...imageViewer, visible: false })
|
|
19883
19913
|
}
|
|
19884
19914
|
),
|
|
19885
|
-
/* @__PURE__ */
|
|
19915
|
+
/* @__PURE__ */ React31.createElement(
|
|
19886
19916
|
Boards,
|
|
19887
19917
|
{
|
|
19888
19918
|
isOpen: isBoardsOpen,
|
|
@@ -19895,7 +19925,7 @@ function XViewScene({
|
|
|
19895
19925
|
userRole: userPermissionRole
|
|
19896
19926
|
}
|
|
19897
19927
|
),
|
|
19898
|
-
/* @__PURE__ */
|
|
19928
|
+
/* @__PURE__ */ React31.createElement(
|
|
19899
19929
|
MilestoneManager,
|
|
19900
19930
|
{
|
|
19901
19931
|
isOpen: isMilestoneManagerOpen,
|
|
@@ -19904,7 +19934,7 @@ function XViewScene({
|
|
|
19904
19934
|
onUpdateMilestones: handleUpdateMilestones
|
|
19905
19935
|
}
|
|
19906
19936
|
),
|
|
19907
|
-
/* @__PURE__ */
|
|
19937
|
+
/* @__PURE__ */ React31.createElement(
|
|
19908
19938
|
ImportParentFileModal,
|
|
19909
19939
|
{
|
|
19910
19940
|
isOpen: isImportModalOpen,
|
|
@@ -19917,7 +19947,7 @@ function XViewScene({
|
|
|
19917
19947
|
currentAncestries: ancestryDataRef.current || []
|
|
19918
19948
|
}
|
|
19919
19949
|
),
|
|
19920
|
-
invalidTargetError && /* @__PURE__ */
|
|
19950
|
+
invalidTargetError && /* @__PURE__ */ React31.createElement(
|
|
19921
19951
|
"div",
|
|
19922
19952
|
{
|
|
19923
19953
|
className: "ui-overlay",
|
|
@@ -19942,13 +19972,13 @@ function XViewScene({
|
|
|
19942
19972
|
animation: "fadeInDown 0.5s cubic-bezier(0.16, 1, 0.3, 1)"
|
|
19943
19973
|
}
|
|
19944
19974
|
},
|
|
19945
|
-
/* @__PURE__ */
|
|
19975
|
+
/* @__PURE__ */ React31.createElement("style", null, `
|
|
19946
19976
|
@keyframes fadeInDown {
|
|
19947
19977
|
from { opacity: 0; transform: translate(-50%, -20px); }
|
|
19948
19978
|
to { opacity: 1; transform: translate(-50%, 0); }
|
|
19949
19979
|
}
|
|
19950
19980
|
`),
|
|
19951
|
-
/* @__PURE__ */
|
|
19981
|
+
/* @__PURE__ */ React31.createElement(
|
|
19952
19982
|
"svg",
|
|
19953
19983
|
{
|
|
19954
19984
|
width: "20",
|
|
@@ -19960,12 +19990,12 @@ function XViewScene({
|
|
|
19960
19990
|
strokeLinecap: "round",
|
|
19961
19991
|
strokeLinejoin: "round"
|
|
19962
19992
|
},
|
|
19963
|
-
/* @__PURE__ */
|
|
19964
|
-
/* @__PURE__ */
|
|
19965
|
-
/* @__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" })
|
|
19966
19996
|
),
|
|
19967
|
-
/* @__PURE__ */
|
|
19968
|
-
/* @__PURE__ */
|
|
19997
|
+
/* @__PURE__ */ React31.createElement("span", { style: { fontSize: "14px", fontWeight: 500 } }, invalidTargetError),
|
|
19998
|
+
/* @__PURE__ */ React31.createElement(
|
|
19969
19999
|
"button",
|
|
19970
20000
|
{
|
|
19971
20001
|
onClick: () => setInvalidTargetError(null),
|