@lv-x-software-house/x_view 1.2.6-dev.61 → 1.2.6-dev.63
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 +974 -892
- package/dist/index.mjs +657 -575
- 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,
|
|
@@ -9135,13 +9156,30 @@ function InSceneCreationForm({
|
|
|
9135
9156
|
setIsLoadingDocs(true);
|
|
9136
9157
|
const res = await create_google_doc_action(name);
|
|
9137
9158
|
if (res.success) {
|
|
9138
|
-
const
|
|
9139
|
-
|
|
9140
|
-
|
|
9141
|
-
|
|
9142
|
-
|
|
9143
|
-
|
|
9144
|
-
|
|
9159
|
+
const existingLinksPropIndex = customProps.findIndex(
|
|
9160
|
+
(p) => p.type === "links" && p.key === "Links"
|
|
9161
|
+
);
|
|
9162
|
+
if (existingLinksPropIndex !== -1) {
|
|
9163
|
+
const updatedProps = [...customProps];
|
|
9164
|
+
const existingProp = { ...updatedProps[existingLinksPropIndex] };
|
|
9165
|
+
existingProp.value = [
|
|
9166
|
+
...existingProp.value || [],
|
|
9167
|
+
{ id: uuidv45(), name: "Abrir Documento", value: res.link }
|
|
9168
|
+
];
|
|
9169
|
+
updatedProps[existingLinksPropIndex] = existingProp;
|
|
9170
|
+
setCustomProps(updatedProps);
|
|
9171
|
+
} else {
|
|
9172
|
+
const newProp = {
|
|
9173
|
+
id: uuidv45(),
|
|
9174
|
+
key: "Links",
|
|
9175
|
+
type: "links",
|
|
9176
|
+
value: [{ id: uuidv45(), name: "Abrir Documento", value: res.link }]
|
|
9177
|
+
};
|
|
9178
|
+
setCustomProps((prev) => [...prev, newProp]);
|
|
9179
|
+
}
|
|
9180
|
+
if (res.link) {
|
|
9181
|
+
window.open(res.link, "_blank");
|
|
9182
|
+
}
|
|
9145
9183
|
} else {
|
|
9146
9184
|
alert("Erro ao criar documento: " + res.error);
|
|
9147
9185
|
}
|
|
@@ -9194,7 +9232,7 @@ function InSceneCreationForm({
|
|
|
9194
9232
|
}
|
|
9195
9233
|
};
|
|
9196
9234
|
const selectedDatasetName = ((_a = availableDatasets.find((ds) => ds.id === targetDatasetId)) == null ? void 0 : _a.name) || "Selecione um Dataset...";
|
|
9197
|
-
return /* @__PURE__ */
|
|
9235
|
+
return /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(
|
|
9198
9236
|
"div",
|
|
9199
9237
|
{
|
|
9200
9238
|
ref: refEl,
|
|
@@ -9208,25 +9246,25 @@ function InSceneCreationForm({
|
|
|
9208
9246
|
onContextMenu: swallow,
|
|
9209
9247
|
onDoubleClick: swallow
|
|
9210
9248
|
},
|
|
9211
|
-
/* @__PURE__ */
|
|
9212
|
-
/* @__PURE__ */
|
|
9213
|
-
/* @__PURE__ */
|
|
9249
|
+
/* @__PURE__ */ React14.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
9250
|
+
/* @__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")),
|
|
9251
|
+
/* @__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
9252
|
"span",
|
|
9215
9253
|
{
|
|
9216
9254
|
key: index,
|
|
9217
9255
|
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
9256
|
},
|
|
9219
9257
|
t,
|
|
9220
|
-
/* @__PURE__ */
|
|
9258
|
+
/* @__PURE__ */ React14.createElement(
|
|
9221
9259
|
"button",
|
|
9222
9260
|
{
|
|
9223
9261
|
type: "button",
|
|
9224
9262
|
onClick: () => handleRemoveType(index),
|
|
9225
9263
|
className: "hover:text-white transition-colors"
|
|
9226
9264
|
},
|
|
9227
|
-
/* @__PURE__ */
|
|
9265
|
+
/* @__PURE__ */ React14.createElement(FiX3, { size: 12 })
|
|
9228
9266
|
)
|
|
9229
|
-
)), /* @__PURE__ */
|
|
9267
|
+
)), /* @__PURE__ */ React14.createElement(
|
|
9230
9268
|
"input",
|
|
9231
9269
|
{
|
|
9232
9270
|
type: "text",
|
|
@@ -9248,7 +9286,7 @@ function InSceneCreationForm({
|
|
|
9248
9286
|
autoComplete: "off",
|
|
9249
9287
|
autoFocus: true
|
|
9250
9288
|
}
|
|
9251
|
-
), showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */
|
|
9289
|
+
), 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
9290
|
"li",
|
|
9253
9291
|
{
|
|
9254
9292
|
key: index,
|
|
@@ -9259,7 +9297,7 @@ function InSceneCreationForm({
|
|
|
9259
9297
|
}
|
|
9260
9298
|
},
|
|
9261
9299
|
suggestedType
|
|
9262
|
-
))))), /* @__PURE__ */
|
|
9300
|
+
))))), /* @__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
9301
|
"input",
|
|
9264
9302
|
{
|
|
9265
9303
|
required: true,
|
|
@@ -9269,21 +9307,21 @@ function InSceneCreationForm({
|
|
|
9269
9307
|
onChange: handleNameInputChange,
|
|
9270
9308
|
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
9309
|
}
|
|
9272
|
-
)), viewType === "view" && availableDatasets.length > 0 && /* @__PURE__ */
|
|
9310
|
+
)), 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
9311
|
"button",
|
|
9274
9312
|
{
|
|
9275
9313
|
type: "button",
|
|
9276
9314
|
onClick: () => setIsDatasetDropdownOpen(!isDatasetDropdownOpen),
|
|
9277
9315
|
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
9316
|
},
|
|
9279
|
-
/* @__PURE__ */
|
|
9280
|
-
/* @__PURE__ */
|
|
9317
|
+
/* @__PURE__ */ React14.createElement("span", { className: "truncate pr-2" }, selectedDatasetName),
|
|
9318
|
+
/* @__PURE__ */ React14.createElement(
|
|
9281
9319
|
FiChevronDown4,
|
|
9282
9320
|
{
|
|
9283
9321
|
className: `flex-shrink-0 text-slate-400 transition-transform ${isDatasetDropdownOpen ? "rotate-180" : ""}`
|
|
9284
9322
|
}
|
|
9285
9323
|
)
|
|
9286
|
-
), isDatasetDropdownOpen && /* @__PURE__ */
|
|
9324
|
+
), 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
9325
|
"li",
|
|
9288
9326
|
{
|
|
9289
9327
|
key: ds.id,
|
|
@@ -9294,7 +9332,7 @@ function InSceneCreationForm({
|
|
|
9294
9332
|
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
9333
|
},
|
|
9296
9334
|
ds.name
|
|
9297
|
-
)))), /* @__PURE__ */
|
|
9335
|
+
)))), /* @__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
9336
|
DescriptionDisplay,
|
|
9299
9337
|
{
|
|
9300
9338
|
description,
|
|
@@ -9305,7 +9343,7 @@ function InSceneCreationForm({
|
|
|
9305
9343
|
onImageClick: handleImageClickFromText,
|
|
9306
9344
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
9307
9345
|
}
|
|
9308
|
-
), /* @__PURE__ */
|
|
9346
|
+
), /* @__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
9347
|
"button",
|
|
9310
9348
|
{
|
|
9311
9349
|
type: "button",
|
|
@@ -9313,17 +9351,17 @@ function InSceneCreationForm({
|
|
|
9313
9351
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
9314
9352
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
9315
9353
|
},
|
|
9316
|
-
/* @__PURE__ */
|
|
9317
|
-
)), !description && /* @__PURE__ */
|
|
9354
|
+
/* @__PURE__ */ React14.createElement(FiEdit24, { size: 14 })
|
|
9355
|
+
)), !description && /* @__PURE__ */ React14.createElement(
|
|
9318
9356
|
"div",
|
|
9319
9357
|
{
|
|
9320
9358
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
9321
9359
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
9322
9360
|
},
|
|
9323
9361
|
"Adicionar descri\xE7\xE3o..."
|
|
9324
|
-
))), /* @__PURE__ */
|
|
9362
|
+
))), /* @__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
9363
|
const isSelected = size === s;
|
|
9326
|
-
return /* @__PURE__ */
|
|
9364
|
+
return /* @__PURE__ */ React14.createElement(
|
|
9327
9365
|
"button",
|
|
9328
9366
|
{
|
|
9329
9367
|
key: s,
|
|
@@ -9331,14 +9369,14 @@ function InSceneCreationForm({
|
|
|
9331
9369
|
onClick: () => handleSizeChange(s),
|
|
9332
9370
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
9333
9371
|
},
|
|
9334
|
-
/* @__PURE__ */
|
|
9372
|
+
/* @__PURE__ */ React14.createElement(
|
|
9335
9373
|
"div",
|
|
9336
9374
|
{
|
|
9337
9375
|
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
9376
|
},
|
|
9339
|
-
isSelected && /* @__PURE__ */
|
|
9377
|
+
isSelected && /* @__PURE__ */ React14.createElement(FiCheck7, { size: 12, className: "text-white" })
|
|
9340
9378
|
),
|
|
9341
|
-
/* @__PURE__ */
|
|
9379
|
+
/* @__PURE__ */ React14.createElement(
|
|
9342
9380
|
"span",
|
|
9343
9381
|
{
|
|
9344
9382
|
className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
@@ -9346,13 +9384,13 @@ function InSceneCreationForm({
|
|
|
9346
9384
|
s
|
|
9347
9385
|
)
|
|
9348
9386
|
);
|
|
9349
|
-
}))), /* @__PURE__ */
|
|
9387
|
+
}))), /* @__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
9388
|
"div",
|
|
9351
9389
|
{
|
|
9352
9390
|
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
9391
|
},
|
|
9354
|
-
useImageAsTexture && /* @__PURE__ */
|
|
9355
|
-
), /* @__PURE__ */
|
|
9392
|
+
useImageAsTexture && /* @__PURE__ */ React14.createElement(FiCheck7, { size: 12, className: "text-white" })
|
|
9393
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9356
9394
|
"input",
|
|
9357
9395
|
{
|
|
9358
9396
|
type: "checkbox",
|
|
@@ -9360,20 +9398,20 @@ function InSceneCreationForm({
|
|
|
9360
9398
|
onChange: handleToggleImageMode,
|
|
9361
9399
|
className: "hidden"
|
|
9362
9400
|
}
|
|
9363
|
-
), /* @__PURE__ */
|
|
9401
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9364
9402
|
"span",
|
|
9365
9403
|
{
|
|
9366
9404
|
className: `text-xs ${useImageAsTexture ? "text-indigo-300" : "text-slate-400 group-hover:text-slate-300"}`
|
|
9367
9405
|
},
|
|
9368
9406
|
"Usar imagem para representar o node"
|
|
9369
|
-
))), /* @__PURE__ */
|
|
9407
|
+
))), /* @__PURE__ */ React14.createElement(
|
|
9370
9408
|
ColorPicker,
|
|
9371
9409
|
{
|
|
9372
9410
|
color,
|
|
9373
9411
|
onChange: handleColorInputChange,
|
|
9374
9412
|
disabled: useImageAsTexture
|
|
9375
9413
|
}
|
|
9376
|
-
), /* @__PURE__ */
|
|
9414
|
+
), /* @__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
9415
|
"input",
|
|
9378
9416
|
{
|
|
9379
9417
|
type: "range",
|
|
@@ -9385,33 +9423,32 @@ function InSceneCreationForm({
|
|
|
9385
9423
|
className: "w-full h-1.5 bg-slate-700 rounded-lg appearance-none cursor-pointer accent-indigo-500 hover:accent-indigo-400",
|
|
9386
9424
|
title: `Intensidade do brilho: ${intensity}`
|
|
9387
9425
|
}
|
|
9388
|
-
), /* @__PURE__ */
|
|
9426
|
+
), /* @__PURE__ */ React14.createElement("span", { className: "text-xs text-slate-400 w-6 text-right" }, intensity)), /* @__PURE__ */ React14.createElement(
|
|
9389
9427
|
"span",
|
|
9390
9428
|
{
|
|
9391
9429
|
className: `text-xs block mt-1 transition-opacity ${useImageAsTexture ? "opacity-40" : "text-slate-400"}`
|
|
9392
9430
|
},
|
|
9393
9431
|
useImageAsTexture ? "Cor da borda (definida pela imagem)" : "Selecione a cor e ajuste o brilho."
|
|
9394
|
-
)), /* @__PURE__ */
|
|
9432
|
+
)), /* @__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
9433
|
"button",
|
|
9396
9434
|
{
|
|
9397
9435
|
type: "button",
|
|
9398
9436
|
onClick: handleCreateGoogleDoc,
|
|
9399
9437
|
disabled: isLoadingDocs,
|
|
9400
|
-
className: "flex items-center
|
|
9401
|
-
title: "Criar Documento no Google Docs"
|
|
9438
|
+
className: "flex items-center justify-center w-8 h-8 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",
|
|
9439
|
+
title: isLoadingDocs ? "Criando Documento..." : "Criar Documento no Google Docs"
|
|
9402
9440
|
},
|
|
9403
|
-
isLoadingDocs ? /* @__PURE__ */
|
|
9404
|
-
|
|
9405
|
-
), /* @__PURE__ */ React13.createElement(
|
|
9441
|
+
isLoadingDocs ? /* @__PURE__ */ React14.createElement(AiOutlineLoading3Quarters, { className: "animate-spin", size: 14 }) : /* @__PURE__ */ React14.createElement(GoogleDocsIcon_default, { size: 14, className: "group-hover:scale-110 transition-transform" })
|
|
9442
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9406
9443
|
"button",
|
|
9407
9444
|
{
|
|
9408
9445
|
type: "button",
|
|
9409
9446
|
onClick: handleAddProp,
|
|
9410
9447
|
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
9448
|
},
|
|
9412
|
-
/* @__PURE__ */
|
|
9449
|
+
/* @__PURE__ */ React14.createElement(FiPlus3, { size: 14 }),
|
|
9413
9450
|
" Adicionar"
|
|
9414
|
-
))), /* @__PURE__ */
|
|
9451
|
+
))), /* @__PURE__ */ React14.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React14.createElement(
|
|
9415
9452
|
CustomPropertyDisplay,
|
|
9416
9453
|
{
|
|
9417
9454
|
key: prop.id,
|
|
@@ -9427,7 +9464,7 @@ function InSceneCreationForm({
|
|
|
9427
9464
|
onSelectTexture: handleSelectTexture,
|
|
9428
9465
|
onUploadFile
|
|
9429
9466
|
}
|
|
9430
|
-
)), /* @__PURE__ */
|
|
9467
|
+
)), /* @__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
9468
|
"button",
|
|
9432
9469
|
{
|
|
9433
9470
|
type: "button",
|
|
@@ -9435,7 +9472,7 @@ function InSceneCreationForm({
|
|
|
9435
9472
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
9436
9473
|
},
|
|
9437
9474
|
"Cancelar"
|
|
9438
|
-
), /* @__PURE__ */
|
|
9475
|
+
), /* @__PURE__ */ React14.createElement(
|
|
9439
9476
|
"button",
|
|
9440
9477
|
{
|
|
9441
9478
|
type: "submit",
|
|
@@ -9443,7 +9480,7 @@ function InSceneCreationForm({
|
|
|
9443
9480
|
},
|
|
9444
9481
|
"Salvar"
|
|
9445
9482
|
)))
|
|
9446
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
9483
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React14.createElement(
|
|
9447
9484
|
DescriptionEditModal,
|
|
9448
9485
|
{
|
|
9449
9486
|
isOpen: isDescriptionModalOpen,
|
|
@@ -9461,7 +9498,7 @@ function InSceneCreationForm({
|
|
|
9461
9498
|
}
|
|
9462
9499
|
|
|
9463
9500
|
// src/components/InSceneVersionForm.jsx
|
|
9464
|
-
import
|
|
9501
|
+
import React15, { useState as useState15, useEffect as useEffect14, useRef as useRef11 } from "react";
|
|
9465
9502
|
import { v4 as uuidv46 } from "uuid";
|
|
9466
9503
|
import { FiPlus as FiPlus4, FiMaximize2 as FiMaximize22, FiCheck as FiCheck8, FiEdit2 as FiEdit25 } from "react-icons/fi";
|
|
9467
9504
|
function InSceneVersionForm({
|
|
@@ -9599,7 +9636,7 @@ function InSceneVersionForm({
|
|
|
9599
9636
|
onOpenImageViewer([{ name: name2 || "Imagem", value: url }], 0);
|
|
9600
9637
|
}
|
|
9601
9638
|
};
|
|
9602
|
-
return /* @__PURE__ */
|
|
9639
|
+
return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(
|
|
9603
9640
|
"div",
|
|
9604
9641
|
{
|
|
9605
9642
|
ref: refEl,
|
|
@@ -9613,9 +9650,9 @@ function InSceneVersionForm({
|
|
|
9613
9650
|
onContextMenu: swallow,
|
|
9614
9651
|
onDoubleClick: swallow
|
|
9615
9652
|
},
|
|
9616
|
-
/* @__PURE__ */
|
|
9617
|
-
/* @__PURE__ */
|
|
9618
|
-
/* @__PURE__ */
|
|
9653
|
+
/* @__PURE__ */ React15.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
9654
|
+
/* @__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")),
|
|
9655
|
+
/* @__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
9656
|
"input",
|
|
9620
9657
|
{
|
|
9621
9658
|
type: "text",
|
|
@@ -9623,7 +9660,7 @@ function InSceneVersionForm({
|
|
|
9623
9660
|
disabled: true,
|
|
9624
9661
|
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
9662
|
}
|
|
9626
|
-
)), /* @__PURE__ */
|
|
9663
|
+
)), /* @__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
9664
|
"input",
|
|
9628
9665
|
{
|
|
9629
9666
|
required: true,
|
|
@@ -9633,7 +9670,7 @@ function InSceneVersionForm({
|
|
|
9633
9670
|
onChange: handleNameInputChange,
|
|
9634
9671
|
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
9672
|
}
|
|
9636
|
-
)), /* @__PURE__ */
|
|
9673
|
+
)), /* @__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
9674
|
DescriptionDisplay,
|
|
9638
9675
|
{
|
|
9639
9676
|
description,
|
|
@@ -9644,7 +9681,7 @@ function InSceneVersionForm({
|
|
|
9644
9681
|
onImageClick: handleImageClickFromText,
|
|
9645
9682
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
9646
9683
|
}
|
|
9647
|
-
), /* @__PURE__ */
|
|
9684
|
+
), /* @__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
9685
|
"button",
|
|
9649
9686
|
{
|
|
9650
9687
|
type: "button",
|
|
@@ -9652,17 +9689,17 @@ function InSceneVersionForm({
|
|
|
9652
9689
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
9653
9690
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
9654
9691
|
},
|
|
9655
|
-
/* @__PURE__ */
|
|
9656
|
-
)), !description && /* @__PURE__ */
|
|
9692
|
+
/* @__PURE__ */ React15.createElement(FiEdit25, { size: 14 })
|
|
9693
|
+
)), !description && /* @__PURE__ */ React15.createElement(
|
|
9657
9694
|
"div",
|
|
9658
9695
|
{
|
|
9659
9696
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
9660
9697
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
9661
9698
|
},
|
|
9662
9699
|
"Adicionar descri\xE7\xE3o..."
|
|
9663
|
-
))), /* @__PURE__ */
|
|
9700
|
+
))), /* @__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
9701
|
const isSelected = size === s;
|
|
9665
|
-
return /* @__PURE__ */
|
|
9702
|
+
return /* @__PURE__ */ React15.createElement(
|
|
9666
9703
|
"button",
|
|
9667
9704
|
{
|
|
9668
9705
|
key: s,
|
|
@@ -9670,14 +9707,14 @@ function InSceneVersionForm({
|
|
|
9670
9707
|
onClick: () => handleSizeChange(s),
|
|
9671
9708
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
9672
9709
|
},
|
|
9673
|
-
/* @__PURE__ */
|
|
9710
|
+
/* @__PURE__ */ React15.createElement(
|
|
9674
9711
|
"div",
|
|
9675
9712
|
{
|
|
9676
9713
|
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
9714
|
},
|
|
9678
|
-
isSelected && /* @__PURE__ */
|
|
9715
|
+
isSelected && /* @__PURE__ */ React15.createElement(FiCheck8, { size: 12, className: "text-white" })
|
|
9679
9716
|
),
|
|
9680
|
-
/* @__PURE__ */
|
|
9717
|
+
/* @__PURE__ */ React15.createElement(
|
|
9681
9718
|
"span",
|
|
9682
9719
|
{
|
|
9683
9720
|
className: `text-sm capitalize transition-colors ${isSelected ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
@@ -9685,13 +9722,13 @@ function InSceneVersionForm({
|
|
|
9685
9722
|
s
|
|
9686
9723
|
)
|
|
9687
9724
|
);
|
|
9688
|
-
}))), /* @__PURE__ */
|
|
9725
|
+
}))), /* @__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
9726
|
"div",
|
|
9690
9727
|
{
|
|
9691
9728
|
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
9729
|
},
|
|
9693
|
-
useImageAsTexture && /* @__PURE__ */
|
|
9694
|
-
), /* @__PURE__ */
|
|
9730
|
+
useImageAsTexture && /* @__PURE__ */ React15.createElement(FiCheck8, { size: 12, className: "text-white" })
|
|
9731
|
+
), /* @__PURE__ */ React15.createElement(
|
|
9695
9732
|
"input",
|
|
9696
9733
|
{
|
|
9697
9734
|
type: "checkbox",
|
|
@@ -9699,35 +9736,35 @@ function InSceneVersionForm({
|
|
|
9699
9736
|
onChange: handleToggleImageMode,
|
|
9700
9737
|
className: "hidden"
|
|
9701
9738
|
}
|
|
9702
|
-
), /* @__PURE__ */
|
|
9739
|
+
), /* @__PURE__ */ React15.createElement(
|
|
9703
9740
|
"span",
|
|
9704
9741
|
{
|
|
9705
9742
|
className: `text-xs ${useImageAsTexture ? "text-indigo-300" : "text-slate-400 group-hover:text-slate-300"}`
|
|
9706
9743
|
},
|
|
9707
9744
|
"Usar imagem"
|
|
9708
|
-
))), /* @__PURE__ */
|
|
9745
|
+
))), /* @__PURE__ */ React15.createElement(
|
|
9709
9746
|
"div",
|
|
9710
9747
|
{
|
|
9711
9748
|
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
9749
|
},
|
|
9713
|
-
/* @__PURE__ */
|
|
9750
|
+
/* @__PURE__ */ React15.createElement(
|
|
9714
9751
|
"div",
|
|
9715
9752
|
{
|
|
9716
9753
|
className: "h-8 w-12 rounded-md border border-white/10",
|
|
9717
9754
|
style: { backgroundColor: fixedColor }
|
|
9718
9755
|
}
|
|
9719
9756
|
),
|
|
9720
|
-
/* @__PURE__ */
|
|
9721
|
-
)), /* @__PURE__ */
|
|
9757
|
+
/* @__PURE__ */ React15.createElement("span", { className: "text-xs text-slate-300" }, useImageAsTexture ? "Cor definida pela imagem." : "Cor herdada do node original.")
|
|
9758
|
+
)), /* @__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
9759
|
"button",
|
|
9723
9760
|
{
|
|
9724
9761
|
type: "button",
|
|
9725
9762
|
onClick: handleAddProp,
|
|
9726
9763
|
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
9764
|
},
|
|
9728
|
-
/* @__PURE__ */
|
|
9765
|
+
/* @__PURE__ */ React15.createElement(FiPlus4, { size: 14 }),
|
|
9729
9766
|
" Adicionar"
|
|
9730
|
-
)), /* @__PURE__ */
|
|
9767
|
+
)), /* @__PURE__ */ React15.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React15.createElement(
|
|
9731
9768
|
CustomPropertyDisplay,
|
|
9732
9769
|
{
|
|
9733
9770
|
key: prop.id,
|
|
@@ -9743,7 +9780,7 @@ function InSceneVersionForm({
|
|
|
9743
9780
|
onSelectTexture: handleSelectTexture,
|
|
9744
9781
|
onUploadFile
|
|
9745
9782
|
}
|
|
9746
|
-
)), /* @__PURE__ */
|
|
9783
|
+
)), /* @__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
9784
|
"button",
|
|
9748
9785
|
{
|
|
9749
9786
|
type: "button",
|
|
@@ -9751,7 +9788,7 @@ function InSceneVersionForm({
|
|
|
9751
9788
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
9752
9789
|
},
|
|
9753
9790
|
"Cancelar"
|
|
9754
|
-
), /* @__PURE__ */
|
|
9791
|
+
), /* @__PURE__ */ React15.createElement(
|
|
9755
9792
|
"button",
|
|
9756
9793
|
{
|
|
9757
9794
|
type: "submit",
|
|
@@ -9759,7 +9796,7 @@ function InSceneVersionForm({
|
|
|
9759
9796
|
},
|
|
9760
9797
|
"Salvar"
|
|
9761
9798
|
)))
|
|
9762
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
9799
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React15.createElement(
|
|
9763
9800
|
DescriptionEditModal,
|
|
9764
9801
|
{
|
|
9765
9802
|
isOpen: isDescriptionModalOpen,
|
|
@@ -9777,7 +9814,7 @@ function InSceneVersionForm({
|
|
|
9777
9814
|
}
|
|
9778
9815
|
|
|
9779
9816
|
// src/components/InSceneQuestForm.jsx
|
|
9780
|
-
import
|
|
9817
|
+
import React17, { useState as useState17, useRef as useRef12 } from "react";
|
|
9781
9818
|
import { v4 as uuidv47 } from "uuid";
|
|
9782
9819
|
import {
|
|
9783
9820
|
FiPlus as FiPlus6,
|
|
@@ -9792,11 +9829,10 @@ import {
|
|
|
9792
9829
|
FiRepeat,
|
|
9793
9830
|
FiCopy as FiCopy3
|
|
9794
9831
|
} from "react-icons/fi";
|
|
9795
|
-
import { SiGoogledocs as SiGoogledocs2 } from "react-icons/si";
|
|
9796
9832
|
import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters2 } from "react-icons/ai";
|
|
9797
9833
|
|
|
9798
9834
|
// src/components/QuestReviewStackEditor.jsx
|
|
9799
|
-
import
|
|
9835
|
+
import React16, { useState as useState16 } from "react";
|
|
9800
9836
|
import {
|
|
9801
9837
|
FiPlus as FiPlus5,
|
|
9802
9838
|
FiX as FiX4,
|
|
@@ -9849,22 +9885,22 @@ function QuestReviewStackEditor({
|
|
|
9849
9885
|
const search = searchQuery.toLowerCase();
|
|
9850
9886
|
return (m.name || "").toLowerCase().includes(search) || (m.email || "").toLowerCase().includes(search);
|
|
9851
9887
|
});
|
|
9852
|
-
return /* @__PURE__ */
|
|
9888
|
+
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
9889
|
"button",
|
|
9854
9890
|
{
|
|
9855
9891
|
type: "button",
|
|
9856
9892
|
onClick: () => setIsAdding(true),
|
|
9857
9893
|
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
9894
|
},
|
|
9859
|
-
/* @__PURE__ */
|
|
9895
|
+
/* @__PURE__ */ React16.createElement(FiPlus5, { size: 10 }),
|
|
9860
9896
|
" Adicionar Camada"
|
|
9861
|
-
)), isAdding && /* @__PURE__ */
|
|
9897
|
+
)), 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
9898
|
FiSearch4,
|
|
9863
9899
|
{
|
|
9864
9900
|
className: "absolute left-2 top-1/2 -translate-y-1/2 text-slate-500",
|
|
9865
9901
|
size: 12
|
|
9866
9902
|
}
|
|
9867
|
-
), /* @__PURE__ */
|
|
9903
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9868
9904
|
"input",
|
|
9869
9905
|
{
|
|
9870
9906
|
autoFocus: true,
|
|
@@ -9874,32 +9910,32 @@ function QuestReviewStackEditor({
|
|
|
9874
9910
|
onChange: (e) => setSearchQuery(e.target.value),
|
|
9875
9911
|
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
9912
|
}
|
|
9877
|
-
), /* @__PURE__ */
|
|
9913
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9878
9914
|
"button",
|
|
9879
9915
|
{
|
|
9880
9916
|
onClick: () => setIsAdding(false),
|
|
9881
9917
|
className: "absolute right-2 top-1/2 -translate-y-1/2 text-slate-500 hover:text-white"
|
|
9882
9918
|
},
|
|
9883
|
-
/* @__PURE__ */
|
|
9884
|
-
)), /* @__PURE__ */
|
|
9919
|
+
/* @__PURE__ */ React16.createElement(FiX4, { size: 14 })
|
|
9920
|
+
)), /* @__PURE__ */ React16.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar space-y-1" }, filteredMembers.map((m) => /* @__PURE__ */ React16.createElement(
|
|
9885
9921
|
"li",
|
|
9886
9922
|
{
|
|
9887
9923
|
key: m.id,
|
|
9888
9924
|
onClick: () => handleAddReviewer(m.id),
|
|
9889
9925
|
className: "px-2 py-1.5 hover:bg-white/5 rounded cursor-pointer text-xs flex items-center gap-2"
|
|
9890
9926
|
},
|
|
9891
|
-
/* @__PURE__ */
|
|
9892
|
-
/* @__PURE__ */
|
|
9893
|
-
)), filteredMembers.length === 0 && /* @__PURE__ */
|
|
9927
|
+
/* @__PURE__ */ React16.createElement(FiUser, { size: 12, className: "text-slate-400" }),
|
|
9928
|
+
/* @__PURE__ */ React16.createElement("span", { className: "truncate" }, m.name || m.email)
|
|
9929
|
+
)), 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
9930
|
const member = viewMembers.find((m) => m.id === item.userId);
|
|
9895
9931
|
const isCompleted = item.status === "completed";
|
|
9896
|
-
return /* @__PURE__ */
|
|
9932
|
+
return /* @__PURE__ */ React16.createElement(
|
|
9897
9933
|
"div",
|
|
9898
9934
|
{
|
|
9899
9935
|
key: index,
|
|
9900
9936
|
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
9937
|
},
|
|
9902
|
-
/* @__PURE__ */
|
|
9938
|
+
/* @__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
9939
|
"button",
|
|
9904
9940
|
{
|
|
9905
9941
|
type: "button",
|
|
@@ -9907,8 +9943,8 @@ function QuestReviewStackEditor({
|
|
|
9907
9943
|
disabled: index === 0,
|
|
9908
9944
|
className: "hover:text-sky-400 disabled:opacity-20"
|
|
9909
9945
|
},
|
|
9910
|
-
/* @__PURE__ */
|
|
9911
|
-
), /* @__PURE__ */
|
|
9946
|
+
/* @__PURE__ */ React16.createElement(FiChevronUp, { size: 12 })
|
|
9947
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9912
9948
|
"button",
|
|
9913
9949
|
{
|
|
9914
9950
|
type: "button",
|
|
@@ -9916,16 +9952,16 @@ function QuestReviewStackEditor({
|
|
|
9916
9952
|
disabled: index === reviewStack.length - 1,
|
|
9917
9953
|
className: "hover:text-sky-400 disabled:opacity-20"
|
|
9918
9954
|
},
|
|
9919
|
-
/* @__PURE__ */
|
|
9955
|
+
/* @__PURE__ */ React16.createElement(FiChevronDown5, { size: 12 })
|
|
9920
9956
|
))),
|
|
9921
|
-
/* @__PURE__ */
|
|
9957
|
+
/* @__PURE__ */ React16.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React16.createElement(
|
|
9922
9958
|
"span",
|
|
9923
9959
|
{
|
|
9924
9960
|
className: `truncate text-sm font-medium ${isCompleted ? "text-green-300" : "text-slate-200"}`
|
|
9925
9961
|
},
|
|
9926
9962
|
(member == null ? void 0 : member.name) || (member == null ? void 0 : member.email) || "Unknown User"
|
|
9927
|
-
), item.mandatory && /* @__PURE__ */
|
|
9928
|
-
!readOnly && /* @__PURE__ */
|
|
9963
|
+
), 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")),
|
|
9964
|
+
!readOnly && /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ React16.createElement(
|
|
9929
9965
|
"button",
|
|
9930
9966
|
{
|
|
9931
9967
|
type: "button",
|
|
@@ -9933,18 +9969,18 @@ function QuestReviewStackEditor({
|
|
|
9933
9969
|
title: item.mandatory ? "Remover obrigatoriedade" : "Tornar obrigat\xF3rio",
|
|
9934
9970
|
className: `p-1.5 rounded hover:bg-white/10 transition-colors ${item.mandatory ? "text-amber-400" : "text-slate-500"}`
|
|
9935
9971
|
},
|
|
9936
|
-
/* @__PURE__ */
|
|
9937
|
-
), /* @__PURE__ */
|
|
9972
|
+
/* @__PURE__ */ React16.createElement(FiStar, { size: 14 })
|
|
9973
|
+
), /* @__PURE__ */ React16.createElement(
|
|
9938
9974
|
"button",
|
|
9939
9975
|
{
|
|
9940
9976
|
type: "button",
|
|
9941
9977
|
onClick: () => handleRemoveReviewer(index),
|
|
9942
9978
|
className: "p-1.5 rounded hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-colors"
|
|
9943
9979
|
},
|
|
9944
|
-
/* @__PURE__ */
|
|
9980
|
+
/* @__PURE__ */ React16.createElement(FiX4, { size: 14 })
|
|
9945
9981
|
))
|
|
9946
9982
|
);
|
|
9947
|
-
}), reviewStack.length === 0 && !isAdding && /* @__PURE__ */
|
|
9983
|
+
}), 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
9984
|
"button",
|
|
9949
9985
|
{
|
|
9950
9986
|
type: "button",
|
|
@@ -10018,11 +10054,11 @@ function InSceneQuestForm({
|
|
|
10018
10054
|
const propsEndRef = useRef12(null);
|
|
10019
10055
|
const [milestoneInput, setMilestoneInput] = useState17("");
|
|
10020
10056
|
const [showMilestoneSuggestions, setShowMilestoneSuggestions] = useState17(false);
|
|
10021
|
-
const activeMilestones =
|
|
10057
|
+
const activeMilestones = React17.useMemo(
|
|
10022
10058
|
() => (milestones || []).filter((ms) => ms.status === "active"),
|
|
10023
10059
|
[milestones]
|
|
10024
10060
|
);
|
|
10025
|
-
const filteredMilestones =
|
|
10061
|
+
const filteredMilestones = React17.useMemo(() => {
|
|
10026
10062
|
const search = milestoneInput.toLowerCase().trim();
|
|
10027
10063
|
return activeMilestones.filter(
|
|
10028
10064
|
(ms) => ms.name.toLowerCase().includes(search) && !milestoneIds.includes(ms.id)
|
|
@@ -10059,11 +10095,11 @@ function InSceneQuestForm({
|
|
|
10059
10095
|
handleRemoveMilestone(milestoneIds[milestoneIds.length - 1]);
|
|
10060
10096
|
}
|
|
10061
10097
|
};
|
|
10062
|
-
const dependencyQuests =
|
|
10098
|
+
const dependencyQuests = React17.useMemo(
|
|
10063
10099
|
() => availableNodes.filter((n) => n.is_quest),
|
|
10064
10100
|
[availableNodes]
|
|
10065
10101
|
);
|
|
10066
|
-
const filteredDependencies =
|
|
10102
|
+
const filteredDependencies = React17.useMemo(() => {
|
|
10067
10103
|
const search = dependencyInput.toLowerCase().trim();
|
|
10068
10104
|
return dependencyQuests.filter((q) => {
|
|
10069
10105
|
var _a2;
|
|
@@ -10110,13 +10146,30 @@ function InSceneQuestForm({
|
|
|
10110
10146
|
setIsLoadingDocs(true);
|
|
10111
10147
|
const res = await create_google_doc_action(standardizedName);
|
|
10112
10148
|
if (res.success) {
|
|
10113
|
-
const
|
|
10114
|
-
|
|
10115
|
-
|
|
10116
|
-
|
|
10117
|
-
|
|
10118
|
-
|
|
10119
|
-
|
|
10149
|
+
const existingLinksPropIndex = customProps.findIndex(
|
|
10150
|
+
(p) => p.type === "links" && p.key === "Links"
|
|
10151
|
+
);
|
|
10152
|
+
if (existingLinksPropIndex !== -1) {
|
|
10153
|
+
const updatedProps = [...customProps];
|
|
10154
|
+
const existingProp = { ...updatedProps[existingLinksPropIndex] };
|
|
10155
|
+
existingProp.value = [
|
|
10156
|
+
...existingProp.value || [],
|
|
10157
|
+
{ id: uuidv47(), name: "Abrir Documento", value: res.link }
|
|
10158
|
+
];
|
|
10159
|
+
updatedProps[existingLinksPropIndex] = existingProp;
|
|
10160
|
+
setCustomProps(updatedProps);
|
|
10161
|
+
} else {
|
|
10162
|
+
const newProp = {
|
|
10163
|
+
id: uuidv47(),
|
|
10164
|
+
key: "Links",
|
|
10165
|
+
type: "links",
|
|
10166
|
+
value: [{ id: uuidv47(), name: "Abrir Documento", value: res.link }]
|
|
10167
|
+
};
|
|
10168
|
+
setCustomProps((prev) => [...prev, newProp]);
|
|
10169
|
+
}
|
|
10170
|
+
if (res.link) {
|
|
10171
|
+
window.open(res.link, "_blank");
|
|
10172
|
+
}
|
|
10120
10173
|
} else {
|
|
10121
10174
|
alert("Erro ao criar documento: " + res.error);
|
|
10122
10175
|
}
|
|
@@ -10201,7 +10254,7 @@ function InSceneQuestForm({
|
|
|
10201
10254
|
const swallow = (e) => e.stopPropagation();
|
|
10202
10255
|
const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
|
|
10203
10256
|
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__ */
|
|
10257
|
+
return /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
10205
10258
|
"div",
|
|
10206
10259
|
{
|
|
10207
10260
|
ref: refEl,
|
|
@@ -10213,7 +10266,7 @@ function InSceneQuestForm({
|
|
|
10213
10266
|
onContextMenu: swallow,
|
|
10214
10267
|
onDoubleClick: swallow
|
|
10215
10268
|
},
|
|
10216
|
-
/* @__PURE__ */
|
|
10269
|
+
/* @__PURE__ */ React17.createElement(
|
|
10217
10270
|
"div",
|
|
10218
10271
|
{
|
|
10219
10272
|
className: "h-[2px]",
|
|
@@ -10222,7 +10275,7 @@ function InSceneQuestForm({
|
|
|
10222
10275
|
}
|
|
10223
10276
|
}
|
|
10224
10277
|
),
|
|
10225
|
-
/* @__PURE__ */
|
|
10278
|
+
/* @__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
10279
|
"button",
|
|
10227
10280
|
{
|
|
10228
10281
|
type: "button",
|
|
@@ -10232,7 +10285,7 @@ function InSceneQuestForm({
|
|
|
10232
10285
|
},
|
|
10233
10286
|
"\xD7"
|
|
10234
10287
|
)),
|
|
10235
|
-
/* @__PURE__ */
|
|
10288
|
+
/* @__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
10289
|
"input",
|
|
10237
10290
|
{
|
|
10238
10291
|
required: true,
|
|
@@ -10246,14 +10299,14 @@ function InSceneQuestForm({
|
|
|
10246
10299
|
},
|
|
10247
10300
|
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
10301
|
}
|
|
10249
|
-
), /* @__PURE__ */
|
|
10302
|
+
), /* @__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
10303
|
"p",
|
|
10251
10304
|
{
|
|
10252
10305
|
className: "text-xs text-indigo-300 font-medium truncate",
|
|
10253
10306
|
title: standardizedName
|
|
10254
10307
|
},
|
|
10255
10308
|
standardizedName
|
|
10256
|
-
), /* @__PURE__ */
|
|
10309
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10257
10310
|
"button",
|
|
10258
10311
|
{
|
|
10259
10312
|
type: "button",
|
|
@@ -10261,34 +10314,34 @@ function InSceneQuestForm({
|
|
|
10261
10314
|
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
10315
|
title: isNameCopied ? "Nome Copiado!" : "Copiar nome formatado"
|
|
10263
10316
|
},
|
|
10264
|
-
isNameCopied ? /* @__PURE__ */
|
|
10265
|
-
))), /* @__PURE__ */
|
|
10317
|
+
isNameCopied ? /* @__PURE__ */ React17.createElement(FiCheck9, { size: 10 }) : /* @__PURE__ */ React17.createElement(FiCopy3, { size: 10 })
|
|
10318
|
+
))), /* @__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
10319
|
"button",
|
|
10267
10320
|
{
|
|
10268
10321
|
type: "button",
|
|
10269
10322
|
onClick: () => setIsStatusDropdownOpen(!isStatusDropdownOpen),
|
|
10270
10323
|
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
10324
|
},
|
|
10272
|
-
/* @__PURE__ */
|
|
10325
|
+
/* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React17.createElement(
|
|
10273
10326
|
"span",
|
|
10274
10327
|
{
|
|
10275
10328
|
className: "w-3 h-3 rounded-full shadow-[0_0_8px_rgba(0,0,0,0.5)]",
|
|
10276
10329
|
style: { backgroundColor: QUEST_STATUS_COLORS2[status] }
|
|
10277
10330
|
}
|
|
10278
|
-
), /* @__PURE__ */
|
|
10279
|
-
/* @__PURE__ */
|
|
10331
|
+
), /* @__PURE__ */ React17.createElement("span", { className: "text-slate-200 font-medium" }, status)),
|
|
10332
|
+
/* @__PURE__ */ React17.createElement(
|
|
10280
10333
|
FiChevronDown6,
|
|
10281
10334
|
{
|
|
10282
10335
|
className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}`
|
|
10283
10336
|
}
|
|
10284
10337
|
)
|
|
10285
|
-
), isStatusDropdownOpen && /* @__PURE__ */
|
|
10338
|
+
), isStatusDropdownOpen && /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
10286
10339
|
"div",
|
|
10287
10340
|
{
|
|
10288
10341
|
className: "fixed inset-0 z-40",
|
|
10289
10342
|
onClick: () => setIsStatusDropdownOpen(false)
|
|
10290
10343
|
}
|
|
10291
|
-
), /* @__PURE__ */
|
|
10344
|
+
), /* @__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
10345
|
"li",
|
|
10293
10346
|
{
|
|
10294
10347
|
key: s,
|
|
@@ -10299,7 +10352,7 @@ function InSceneQuestForm({
|
|
|
10299
10352
|
},
|
|
10300
10353
|
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
10354
|
},
|
|
10302
|
-
/* @__PURE__ */
|
|
10355
|
+
/* @__PURE__ */ React17.createElement(
|
|
10303
10356
|
"span",
|
|
10304
10357
|
{
|
|
10305
10358
|
className: "w-3 h-3 rounded-full",
|
|
@@ -10307,11 +10360,11 @@ function InSceneQuestForm({
|
|
|
10307
10360
|
}
|
|
10308
10361
|
),
|
|
10309
10362
|
s
|
|
10310
|
-
)))))), /* @__PURE__ */
|
|
10363
|
+
)))))), /* @__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
10364
|
const ms = (milestones || []).find((m) => m.id === id);
|
|
10312
10365
|
if (!ms) return null;
|
|
10313
|
-
return /* @__PURE__ */
|
|
10314
|
-
}), /* @__PURE__ */
|
|
10366
|
+
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 })));
|
|
10367
|
+
}), /* @__PURE__ */ React17.createElement(
|
|
10315
10368
|
"input",
|
|
10316
10369
|
{
|
|
10317
10370
|
type: "text",
|
|
@@ -10330,7 +10383,7 @@ function InSceneQuestForm({
|
|
|
10330
10383
|
placeholder: milestoneIds.length === 0 ? "Adicionar milestone..." : "",
|
|
10331
10384
|
autoComplete: "off"
|
|
10332
10385
|
}
|
|
10333
|
-
), showMilestoneSuggestions && filteredMilestones.length > 0 && /* @__PURE__ */
|
|
10386
|
+
), 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
10387
|
"li",
|
|
10335
10388
|
{
|
|
10336
10389
|
key: ms.id,
|
|
@@ -10341,7 +10394,7 @@ function InSceneQuestForm({
|
|
|
10341
10394
|
}
|
|
10342
10395
|
},
|
|
10343
10396
|
ms.name
|
|
10344
|
-
))), showMilestoneSuggestions && milestoneInput.trim() && !filteredMilestones.some((m) => m.name.toLowerCase() === milestoneInput.toLowerCase().trim()) && /* @__PURE__ */
|
|
10397
|
+
))), 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
10398
|
"li",
|
|
10346
10399
|
{
|
|
10347
10400
|
className: "px-3 py-3 text-sm cursor-pointer hover:bg-indigo-600/50 flex flex-col gap-0.5",
|
|
@@ -10350,13 +10403,13 @@ function InSceneQuestForm({
|
|
|
10350
10403
|
handleAddMilestone({ name: milestoneInput });
|
|
10351
10404
|
}
|
|
10352
10405
|
},
|
|
10353
|
-
/* @__PURE__ */
|
|
10354
|
-
/* @__PURE__ */
|
|
10355
|
-
)))), /* @__PURE__ */
|
|
10406
|
+
/* @__PURE__ */ React17.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500" }, "Criar novo milestone"),
|
|
10407
|
+
/* @__PURE__ */ React17.createElement("span", { className: "text-white" }, '"', milestoneInput, '"')
|
|
10408
|
+
)))), /* @__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
10409
|
const depNode = availableNodes.find((n) => String(n.id) === String(id));
|
|
10357
10410
|
if (!depNode) return null;
|
|
10358
|
-
return /* @__PURE__ */
|
|
10359
|
-
}), /* @__PURE__ */
|
|
10411
|
+
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 })));
|
|
10412
|
+
}), /* @__PURE__ */ React17.createElement(
|
|
10360
10413
|
"input",
|
|
10361
10414
|
{
|
|
10362
10415
|
type: "text",
|
|
@@ -10375,7 +10428,7 @@ function InSceneQuestForm({
|
|
|
10375
10428
|
placeholder: dependencyIds.length === 0 ? "Adicionar quest pr\xE9-requisito..." : "",
|
|
10376
10429
|
autoComplete: "off"
|
|
10377
10430
|
}
|
|
10378
|
-
), showDependencySuggestions && filteredDependencies.length > 0 && /* @__PURE__ */
|
|
10431
|
+
), 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
10432
|
"li",
|
|
10380
10433
|
{
|
|
10381
10434
|
key: q.id,
|
|
@@ -10385,23 +10438,23 @@ function InSceneQuestForm({
|
|
|
10385
10438
|
handleAddDependency(q);
|
|
10386
10439
|
}
|
|
10387
10440
|
},
|
|
10388
|
-
/* @__PURE__ */
|
|
10389
|
-
/* @__PURE__ */
|
|
10390
|
-
))))), /* @__PURE__ */
|
|
10441
|
+
/* @__PURE__ */ React17.createElement("span", { className: "truncate" }, q.raw_title || q.name),
|
|
10442
|
+
/* @__PURE__ */ React17.createElement("span", { className: "text-[10px] text-slate-500" }, q.status || "Backlog")
|
|
10443
|
+
))))), /* @__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
10444
|
"button",
|
|
10392
10445
|
{
|
|
10393
10446
|
type: "button",
|
|
10394
10447
|
onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
|
|
10395
10448
|
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
10449
|
},
|
|
10397
|
-
/* @__PURE__ */
|
|
10398
|
-
/* @__PURE__ */
|
|
10450
|
+
/* @__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")),
|
|
10451
|
+
/* @__PURE__ */ React17.createElement(
|
|
10399
10452
|
FiChevronDown6,
|
|
10400
10453
|
{
|
|
10401
10454
|
className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}`
|
|
10402
10455
|
}
|
|
10403
10456
|
)
|
|
10404
|
-
), isAssigneeDropdownOpen && /* @__PURE__ */
|
|
10457
|
+
), isAssigneeDropdownOpen && /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(
|
|
10405
10458
|
"div",
|
|
10406
10459
|
{
|
|
10407
10460
|
className: "fixed inset-0 z-40",
|
|
@@ -10410,7 +10463,7 @@ function InSceneQuestForm({
|
|
|
10410
10463
|
setAssigneeSearchQuery("");
|
|
10411
10464
|
}
|
|
10412
10465
|
}
|
|
10413
|
-
), /* @__PURE__ */
|
|
10466
|
+
), /* @__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
10467
|
"input",
|
|
10415
10468
|
{
|
|
10416
10469
|
type: "text",
|
|
@@ -10421,7 +10474,7 @@ function InSceneQuestForm({
|
|
|
10421
10474
|
className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
|
|
10422
10475
|
onClick: (e) => e.stopPropagation()
|
|
10423
10476
|
}
|
|
10424
|
-
)), /* @__PURE__ */
|
|
10477
|
+
)), /* @__PURE__ */ React17.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ React17.createElement(
|
|
10425
10478
|
"li",
|
|
10426
10479
|
{
|
|
10427
10480
|
onClick: () => {
|
|
@@ -10435,7 +10488,7 @@ function InSceneQuestForm({
|
|
|
10435
10488
|
), viewMembers.filter((member) => {
|
|
10436
10489
|
const search = assigneeSearchQuery.toLowerCase();
|
|
10437
10490
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
10438
|
-
}).map((member) => /* @__PURE__ */
|
|
10491
|
+
}).map((member) => /* @__PURE__ */ React17.createElement(
|
|
10439
10492
|
"li",
|
|
10440
10493
|
{
|
|
10441
10494
|
key: member.id,
|
|
@@ -10450,7 +10503,7 @@ function InSceneQuestForm({
|
|
|
10450
10503
|
)), viewMembers.filter((member) => {
|
|
10451
10504
|
const search = assigneeSearchQuery.toLowerCase();
|
|
10452
10505
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
10453
|
-
}).length === 0 && assigneeSearchQuery && /* @__PURE__ */
|
|
10506
|
+
}).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
10507
|
"button",
|
|
10455
10508
|
{
|
|
10456
10509
|
type: "button",
|
|
@@ -10458,7 +10511,7 @@ function InSceneQuestForm({
|
|
|
10458
10511
|
className: "text-[10px] text-indigo-400 hover:text-indigo-300 font-bold uppercase transition-colors"
|
|
10459
10512
|
},
|
|
10460
10513
|
"+ Adicionar"
|
|
10461
|
-
)), questDate && /* @__PURE__ */
|
|
10514
|
+
)), 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
10515
|
"button",
|
|
10463
10516
|
{
|
|
10464
10517
|
key: t,
|
|
@@ -10476,7 +10529,7 @@ function InSceneQuestForm({
|
|
|
10476
10529
|
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
10530
|
},
|
|
10478
10531
|
t === "Date Interval" ? "Intervalo" : t
|
|
10479
|
-
)) : /* @__PURE__ */
|
|
10532
|
+
)) : /* @__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
10533
|
"button",
|
|
10481
10534
|
{
|
|
10482
10535
|
type: "button",
|
|
@@ -10484,8 +10537,8 @@ function InSceneQuestForm({
|
|
|
10484
10537
|
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
10538
|
title: "Confirmar data"
|
|
10486
10539
|
},
|
|
10487
|
-
/* @__PURE__ */
|
|
10488
|
-
) : /* @__PURE__ */
|
|
10540
|
+
/* @__PURE__ */ React17.createElement(FiCheck9, { size: 14 })
|
|
10541
|
+
) : /* @__PURE__ */ React17.createElement(
|
|
10489
10542
|
"button",
|
|
10490
10543
|
{
|
|
10491
10544
|
type: "button",
|
|
@@ -10493,8 +10546,8 @@ function InSceneQuestForm({
|
|
|
10493
10546
|
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
10547
|
title: "Editar data"
|
|
10495
10548
|
},
|
|
10496
|
-
/* @__PURE__ */
|
|
10497
|
-
), /* @__PURE__ */
|
|
10549
|
+
/* @__PURE__ */ React17.createElement(FiEdit26, { size: 14 })
|
|
10550
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10498
10551
|
"button",
|
|
10499
10552
|
{
|
|
10500
10553
|
type: "button",
|
|
@@ -10502,8 +10555,8 @@ function InSceneQuestForm({
|
|
|
10502
10555
|
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
10556
|
title: "Remover data"
|
|
10504
10557
|
},
|
|
10505
|
-
/* @__PURE__ */
|
|
10506
|
-
))), !questDate.confirmed && /* @__PURE__ */
|
|
10558
|
+
/* @__PURE__ */ React17.createElement(FiX5, { size: 14 })
|
|
10559
|
+
))), !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
10560
|
"input",
|
|
10508
10561
|
{
|
|
10509
10562
|
type: "text",
|
|
@@ -10523,7 +10576,7 @@ function InSceneQuestForm({
|
|
|
10523
10576
|
maxLength: "10",
|
|
10524
10577
|
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
10578
|
}
|
|
10526
|
-
), questDate.type === "Date Interval" && /* @__PURE__ */
|
|
10579
|
+
), questDate.type === "Date Interval" && /* @__PURE__ */ React17.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React17.createElement(
|
|
10527
10580
|
"input",
|
|
10528
10581
|
{
|
|
10529
10582
|
type: "text",
|
|
@@ -10543,7 +10596,7 @@ function InSceneQuestForm({
|
|
|
10543
10596
|
maxLength: "10",
|
|
10544
10597
|
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
10598
|
}
|
|
10546
|
-
), /* @__PURE__ */
|
|
10599
|
+
), /* @__PURE__ */ React17.createElement("span", { className: "text-slate-500" }, "-"), /* @__PURE__ */ React17.createElement(
|
|
10547
10600
|
"input",
|
|
10548
10601
|
{
|
|
10549
10602
|
type: "text",
|
|
@@ -10563,39 +10616,39 @@ function InSceneQuestForm({
|
|
|
10563
10616
|
maxLength: "10",
|
|
10564
10617
|
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
10618
|
}
|
|
10566
|
-
))))), /* @__PURE__ */
|
|
10619
|
+
))))), /* @__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
10620
|
"button",
|
|
10568
10621
|
{
|
|
10569
10622
|
type: "button",
|
|
10570
10623
|
onClick: () => setRecurrenceConfig((prev) => ({ ...prev, enabled: !prev.enabled })),
|
|
10571
10624
|
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
10625
|
},
|
|
10573
|
-
/* @__PURE__ */
|
|
10574
|
-
)), recurrenceConfig.enabled && /* @__PURE__ */
|
|
10626
|
+
/* @__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"}` })
|
|
10627
|
+
)), 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
10628
|
"select",
|
|
10576
10629
|
{
|
|
10577
10630
|
value: recurrenceConfig.type,
|
|
10578
10631
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, type: e.target.value })),
|
|
10579
10632
|
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
10633
|
},
|
|
10581
|
-
/* @__PURE__ */
|
|
10582
|
-
/* @__PURE__ */
|
|
10583
|
-
/* @__PURE__ */
|
|
10584
|
-
)), recurrenceConfig.type === "weekly" && /* @__PURE__ */
|
|
10634
|
+
/* @__PURE__ */ React17.createElement("option", { value: "daily" }, "Di\xE1ria"),
|
|
10635
|
+
/* @__PURE__ */ React17.createElement("option", { value: "weekly" }, "Semanal"),
|
|
10636
|
+
/* @__PURE__ */ React17.createElement("option", { value: "custom" }, "Data Espec\xEDfica")
|
|
10637
|
+
)), 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
10638
|
"select",
|
|
10586
10639
|
{
|
|
10587
10640
|
value: recurrenceConfig.day_of_week,
|
|
10588
10641
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, day_of_week: parseInt(e.target.value, 10) })),
|
|
10589
10642
|
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
10643
|
},
|
|
10591
|
-
/* @__PURE__ */
|
|
10592
|
-
/* @__PURE__ */
|
|
10593
|
-
/* @__PURE__ */
|
|
10594
|
-
/* @__PURE__ */
|
|
10595
|
-
/* @__PURE__ */
|
|
10596
|
-
/* @__PURE__ */
|
|
10597
|
-
/* @__PURE__ */
|
|
10598
|
-
)), recurrenceConfig.type === "custom" && /* @__PURE__ */
|
|
10644
|
+
/* @__PURE__ */ React17.createElement("option", { value: 1 }, "Segunda-feira"),
|
|
10645
|
+
/* @__PURE__ */ React17.createElement("option", { value: 2 }, "Ter\xE7a-feira"),
|
|
10646
|
+
/* @__PURE__ */ React17.createElement("option", { value: 3 }, "Quarta-feira"),
|
|
10647
|
+
/* @__PURE__ */ React17.createElement("option", { value: 4 }, "Quinta-feira"),
|
|
10648
|
+
/* @__PURE__ */ React17.createElement("option", { value: 5 }, "Sexta-feira"),
|
|
10649
|
+
/* @__PURE__ */ React17.createElement("option", { value: 6 }, "S\xE1bado"),
|
|
10650
|
+
/* @__PURE__ */ React17.createElement("option", { value: 0 }, "Domingo")
|
|
10651
|
+
)), 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
10652
|
"input",
|
|
10600
10653
|
{
|
|
10601
10654
|
type: "text",
|
|
@@ -10604,23 +10657,23 @@ function InSceneQuestForm({
|
|
|
10604
10657
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, custom_date: e.target.value })),
|
|
10605
10658
|
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
10659
|
}
|
|
10607
|
-
))), /* @__PURE__ */
|
|
10660
|
+
))), /* @__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
10661
|
"select",
|
|
10609
10662
|
{
|
|
10610
10663
|
value: recurrenceConfig.next_assignee_id,
|
|
10611
10664
|
onChange: (e) => setRecurrenceConfig((prev) => ({ ...prev, next_assignee_id: e.target.value })),
|
|
10612
10665
|
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
10666
|
},
|
|
10614
|
-
/* @__PURE__ */
|
|
10615
|
-
viewMembers.map((member) => /* @__PURE__ */
|
|
10616
|
-
), /* @__PURE__ */
|
|
10667
|
+
/* @__PURE__ */ React17.createElement("option", { value: "" }, "Sem respons\xE1vel"),
|
|
10668
|
+
viewMembers.map((member) => /* @__PURE__ */ React17.createElement("option", { key: member.id, value: member.id }, member.name || member.email))
|
|
10669
|
+
), /* @__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
10670
|
QuestReviewStackEditor,
|
|
10618
10671
|
{
|
|
10619
10672
|
reviewStack,
|
|
10620
10673
|
onChange: setReviewStack,
|
|
10621
10674
|
viewMembers
|
|
10622
10675
|
}
|
|
10623
|
-
)), /* @__PURE__ */
|
|
10676
|
+
)), /* @__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
10677
|
DescriptionDisplay,
|
|
10625
10678
|
{
|
|
10626
10679
|
description,
|
|
@@ -10630,42 +10683,41 @@ function InSceneQuestForm({
|
|
|
10630
10683
|
onMentionClick,
|
|
10631
10684
|
onSaveDescription: (newDesc) => setDescription(newDesc)
|
|
10632
10685
|
}
|
|
10633
|
-
), /* @__PURE__ */
|
|
10686
|
+
), /* @__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
10687
|
"button",
|
|
10635
10688
|
{
|
|
10636
10689
|
type: "button",
|
|
10637
10690
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
10638
10691
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors"
|
|
10639
10692
|
},
|
|
10640
|
-
/* @__PURE__ */
|
|
10641
|
-
)), !description && /* @__PURE__ */
|
|
10693
|
+
/* @__PURE__ */ React17.createElement(FiEdit26, { size: 14 })
|
|
10694
|
+
)), !description && /* @__PURE__ */ React17.createElement(
|
|
10642
10695
|
"div",
|
|
10643
10696
|
{
|
|
10644
10697
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
10645
10698
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
10646
10699
|
},
|
|
10647
10700
|
"Adicionar descri\xE7\xE3o..."
|
|
10648
|
-
))), /* @__PURE__ */
|
|
10701
|
+
))), /* @__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
10702
|
"button",
|
|
10650
10703
|
{
|
|
10651
10704
|
type: "button",
|
|
10652
10705
|
onClick: handleCreateGoogleDoc,
|
|
10653
10706
|
disabled: isLoadingDocs,
|
|
10654
|
-
className: "flex items-center
|
|
10655
|
-
title: "Criar Documento no Google Docs"
|
|
10707
|
+
className: "flex items-center justify-center w-8 h-8 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",
|
|
10708
|
+
title: isLoadingDocs ? "Criando Documento..." : "Criar Documento no Google Docs"
|
|
10656
10709
|
},
|
|
10657
|
-
isLoadingDocs ? /* @__PURE__ */
|
|
10658
|
-
|
|
10659
|
-
), /* @__PURE__ */ React16.createElement(
|
|
10710
|
+
isLoadingDocs ? /* @__PURE__ */ React17.createElement(AiOutlineLoading3Quarters2, { className: "animate-spin", size: 14 }) : /* @__PURE__ */ React17.createElement(GoogleDocsIcon_default, { size: 14, className: "group-hover:scale-110 transition-transform" })
|
|
10711
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10660
10712
|
"button",
|
|
10661
10713
|
{
|
|
10662
10714
|
type: "button",
|
|
10663
10715
|
onClick: handleAddProp,
|
|
10664
10716
|
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
10717
|
},
|
|
10666
|
-
/* @__PURE__ */
|
|
10718
|
+
/* @__PURE__ */ React17.createElement(FiPlus6, { size: 14 }),
|
|
10667
10719
|
" Adicionar"
|
|
10668
|
-
))), /* @__PURE__ */
|
|
10720
|
+
))), /* @__PURE__ */ React17.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, index) => /* @__PURE__ */ React17.createElement(
|
|
10669
10721
|
CustomPropertyDisplay,
|
|
10670
10722
|
{
|
|
10671
10723
|
key: prop.id,
|
|
@@ -10678,7 +10730,7 @@ function InSceneQuestForm({
|
|
|
10678
10730
|
),
|
|
10679
10731
|
onUploadFile
|
|
10680
10732
|
}
|
|
10681
|
-
)), /* @__PURE__ */
|
|
10733
|
+
)), /* @__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
10734
|
"button",
|
|
10683
10735
|
{
|
|
10684
10736
|
key: s,
|
|
@@ -10689,37 +10741,37 @@ function InSceneQuestForm({
|
|
|
10689
10741
|
},
|
|
10690
10742
|
className: "flex items-center gap-2 group cursor-pointer focus:outline-none"
|
|
10691
10743
|
},
|
|
10692
|
-
/* @__PURE__ */
|
|
10744
|
+
/* @__PURE__ */ React17.createElement(
|
|
10693
10745
|
"div",
|
|
10694
10746
|
{
|
|
10695
10747
|
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
10748
|
},
|
|
10697
|
-
size === s && /* @__PURE__ */
|
|
10749
|
+
size === s && /* @__PURE__ */ React17.createElement(FiCheck9, { size: 12, className: "text-white" })
|
|
10698
10750
|
),
|
|
10699
|
-
/* @__PURE__ */
|
|
10751
|
+
/* @__PURE__ */ React17.createElement(
|
|
10700
10752
|
"span",
|
|
10701
10753
|
{
|
|
10702
10754
|
className: `text-sm capitalize transition-colors ${size === s ? "text-white font-medium" : "text-slate-400 group-hover:text-slate-300"}`
|
|
10703
10755
|
},
|
|
10704
10756
|
s
|
|
10705
10757
|
)
|
|
10706
|
-
)))), /* @__PURE__ */
|
|
10758
|
+
)))), /* @__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
10759
|
"span",
|
|
10708
10760
|
{
|
|
10709
10761
|
key: index,
|
|
10710
10762
|
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
10763
|
},
|
|
10712
10764
|
t,
|
|
10713
|
-
t !== "quest" && /* @__PURE__ */
|
|
10765
|
+
t !== "quest" && /* @__PURE__ */ React17.createElement(
|
|
10714
10766
|
"button",
|
|
10715
10767
|
{
|
|
10716
10768
|
type: "button",
|
|
10717
10769
|
onClick: () => handleRemoveType(index),
|
|
10718
10770
|
className: "hover:text-white transition-colors"
|
|
10719
10771
|
},
|
|
10720
|
-
/* @__PURE__ */
|
|
10772
|
+
/* @__PURE__ */ React17.createElement(FiX5, { size: 12 })
|
|
10721
10773
|
)
|
|
10722
|
-
)), /* @__PURE__ */
|
|
10774
|
+
)), /* @__PURE__ */ React17.createElement(
|
|
10723
10775
|
"input",
|
|
10724
10776
|
{
|
|
10725
10777
|
type: "text",
|
|
@@ -10732,7 +10784,7 @@ function InSceneQuestForm({
|
|
|
10732
10784
|
className: "flex-1 bg-transparent text-sm min-w-[80px] focus:outline-none text-slate-200",
|
|
10733
10785
|
autoComplete: "off"
|
|
10734
10786
|
}
|
|
10735
|
-
)))), /* @__PURE__ */
|
|
10787
|
+
)))), /* @__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
10788
|
"button",
|
|
10737
10789
|
{
|
|
10738
10790
|
type: "button",
|
|
@@ -10740,7 +10792,7 @@ function InSceneQuestForm({
|
|
|
10740
10792
|
className: "px-4 py-2 rounded-lg border border-white/15 bg-transparent hover:bg-white/5 transition-colors text-sm"
|
|
10741
10793
|
},
|
|
10742
10794
|
"Cancelar"
|
|
10743
|
-
), /* @__PURE__ */
|
|
10795
|
+
), /* @__PURE__ */ React17.createElement(
|
|
10744
10796
|
"button",
|
|
10745
10797
|
{
|
|
10746
10798
|
type: "submit",
|
|
@@ -10748,7 +10800,7 @@ function InSceneQuestForm({
|
|
|
10748
10800
|
},
|
|
10749
10801
|
"Salvar Quest"
|
|
10750
10802
|
)))
|
|
10751
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
10803
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React17.createElement(
|
|
10752
10804
|
DescriptionEditModal,
|
|
10753
10805
|
{
|
|
10754
10806
|
isOpen: isDescriptionModalOpen,
|
|
@@ -10764,10 +10816,9 @@ function InSceneQuestForm({
|
|
|
10764
10816
|
}
|
|
10765
10817
|
|
|
10766
10818
|
// src/components/NodeDetailsPanel.jsx
|
|
10767
|
-
import
|
|
10819
|
+
import React18, { useState as useState18, useEffect as useEffect15, useRef as useRef13 } from "react";
|
|
10768
10820
|
import { v4 as uuidv48 } from "uuid";
|
|
10769
10821
|
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
10822
|
import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters3 } from "react-icons/ai";
|
|
10772
10823
|
function NodeDetailsPanel({
|
|
10773
10824
|
node,
|
|
@@ -10969,16 +11020,33 @@ function NodeDetailsPanel({
|
|
|
10969
11020
|
setIsLoadingDocs(true);
|
|
10970
11021
|
const res = await create_google_doc_action(name);
|
|
10971
11022
|
if (res.success) {
|
|
10972
|
-
const
|
|
10973
|
-
|
|
10974
|
-
|
|
10975
|
-
|
|
10976
|
-
|
|
10977
|
-
|
|
10978
|
-
|
|
11023
|
+
const existingLinksPropIndex = customProps.findIndex(
|
|
11024
|
+
(p) => p.type === "links" && p.key === "Links"
|
|
11025
|
+
);
|
|
11026
|
+
let updatedProps;
|
|
11027
|
+
if (existingLinksPropIndex !== -1) {
|
|
11028
|
+
updatedProps = [...customProps];
|
|
11029
|
+
const existingProp = { ...updatedProps[existingLinksPropIndex] };
|
|
11030
|
+
existingProp.value = [
|
|
11031
|
+
...existingProp.value || [],
|
|
11032
|
+
{ id: uuidv48(), name: "Abrir Documento", value: res.link }
|
|
11033
|
+
];
|
|
11034
|
+
updatedProps[existingLinksPropIndex] = existingProp;
|
|
11035
|
+
} else {
|
|
11036
|
+
const newProp = {
|
|
11037
|
+
id: uuidv48(),
|
|
11038
|
+
key: "Links",
|
|
11039
|
+
type: "links",
|
|
11040
|
+
value: [{ id: uuidv48(), name: "Abrir Documento", value: res.link }]
|
|
11041
|
+
};
|
|
11042
|
+
updatedProps = [...customProps, newProp];
|
|
11043
|
+
}
|
|
10979
11044
|
setCustomProps(updatedProps);
|
|
10980
11045
|
setHasUnsavedChanges(true);
|
|
10981
11046
|
triggerAutoSave({ customProps: updatedProps });
|
|
11047
|
+
if (res.link) {
|
|
11048
|
+
window.open(res.link, "_blank");
|
|
11049
|
+
}
|
|
10982
11050
|
} else {
|
|
10983
11051
|
alert("Erro ao criar documento: " + res.error);
|
|
10984
11052
|
}
|
|
@@ -11085,7 +11153,7 @@ function NodeDetailsPanel({
|
|
|
11085
11153
|
onClose();
|
|
11086
11154
|
};
|
|
11087
11155
|
const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
|
|
11088
|
-
return /* @__PURE__ */
|
|
11156
|
+
return /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(
|
|
11089
11157
|
"div",
|
|
11090
11158
|
{
|
|
11091
11159
|
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 +11166,7 @@ function NodeDetailsPanel({
|
|
|
11098
11166
|
onContextMenu: swallow,
|
|
11099
11167
|
onDoubleClick: swallow
|
|
11100
11168
|
},
|
|
11101
|
-
/* @__PURE__ */
|
|
11169
|
+
/* @__PURE__ */ React18.createElement(
|
|
11102
11170
|
"div",
|
|
11103
11171
|
{
|
|
11104
11172
|
onPointerDown: (e) => {
|
|
@@ -11109,7 +11177,7 @@ function NodeDetailsPanel({
|
|
|
11109
11177
|
title: "Arraste para redimensionar"
|
|
11110
11178
|
}
|
|
11111
11179
|
),
|
|
11112
|
-
isReadMode ? /* @__PURE__ */
|
|
11180
|
+
isReadMode ? /* @__PURE__ */ React18.createElement(
|
|
11113
11181
|
DescriptionReadModePanel,
|
|
11114
11182
|
{
|
|
11115
11183
|
title: name || (node == null ? void 0 : node.name),
|
|
@@ -11130,23 +11198,23 @@ function NodeDetailsPanel({
|
|
|
11130
11198
|
onImageClick: handleImageClickFromText,
|
|
11131
11199
|
onSaveDescription: handleSaveDescriptionInline
|
|
11132
11200
|
}
|
|
11133
|
-
) : /* @__PURE__ */
|
|
11201
|
+
) : /* @__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
11202
|
"button",
|
|
11135
11203
|
{
|
|
11136
11204
|
onClick: handleCopyLink,
|
|
11137
11205
|
className: `ml-1 p-1 transition-colors ${isLinkCopied ? "text-green-400" : "text-slate-400 hover:text-indigo-400"}`,
|
|
11138
11206
|
title: isLinkCopied ? "Link Copiado!" : "Copiar link para este Node"
|
|
11139
11207
|
},
|
|
11140
|
-
isLinkCopied ? /* @__PURE__ */
|
|
11141
|
-
)), /* @__PURE__ */
|
|
11208
|
+
isLinkCopied ? /* @__PURE__ */ React18.createElement(FiCheck10, { size: 12 }) : /* @__PURE__ */ React18.createElement(FiLink5, { size: 12 })
|
|
11209
|
+
)), /* @__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
11210
|
"button",
|
|
11143
11211
|
{
|
|
11144
11212
|
type: "button",
|
|
11145
11213
|
onClick: () => handleRemoveType(index),
|
|
11146
11214
|
className: "hover:text-white transition-colors"
|
|
11147
11215
|
},
|
|
11148
|
-
/* @__PURE__ */
|
|
11149
|
-
))), canEdit && /* @__PURE__ */
|
|
11216
|
+
/* @__PURE__ */ React18.createElement(FiX6, { size: 12 })
|
|
11217
|
+
))), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11150
11218
|
"input",
|
|
11151
11219
|
{
|
|
11152
11220
|
type: "text",
|
|
@@ -11167,7 +11235,7 @@ function NodeDetailsPanel({
|
|
|
11167
11235
|
placeholder: types.length === 0 ? "Ex.: Cliente" : "",
|
|
11168
11236
|
autoComplete: "off"
|
|
11169
11237
|
}
|
|
11170
|
-
), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */
|
|
11238
|
+
), 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
11239
|
"li",
|
|
11172
11240
|
{
|
|
11173
11241
|
key: index,
|
|
@@ -11178,7 +11246,7 @@ function NodeDetailsPanel({
|
|
|
11178
11246
|
}
|
|
11179
11247
|
},
|
|
11180
11248
|
suggestedType
|
|
11181
|
-
))))), /* @__PURE__ */
|
|
11249
|
+
))))), /* @__PURE__ */ React18.createElement("div", { className: "space-y-1.5" }, /* @__PURE__ */ React18.createElement("label", { className: "text-xs text-slate-300" }, "Nome"), /* @__PURE__ */ React18.createElement(
|
|
11182
11250
|
"input",
|
|
11183
11251
|
{
|
|
11184
11252
|
type: "text",
|
|
@@ -11187,7 +11255,7 @@ function NodeDetailsPanel({
|
|
|
11187
11255
|
readOnly: !canEdit,
|
|
11188
11256
|
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
11257
|
}
|
|
11190
|
-
)), /* @__PURE__ */
|
|
11258
|
+
)), /* @__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
11259
|
DescriptionDisplay,
|
|
11192
11260
|
{
|
|
11193
11261
|
description,
|
|
@@ -11199,7 +11267,7 @@ function NodeDetailsPanel({
|
|
|
11199
11267
|
onImageClick: handleImageClickFromText,
|
|
11200
11268
|
onSaveDescription: handleSaveDescriptionInline
|
|
11201
11269
|
}
|
|
11202
|
-
), /* @__PURE__ */
|
|
11270
|
+
), /* @__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
11271
|
"button",
|
|
11204
11272
|
{
|
|
11205
11273
|
type: "button",
|
|
@@ -11207,8 +11275,8 @@ function NodeDetailsPanel({
|
|
|
11207
11275
|
className: `p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors ${canEdit ? "border-r border-white/5" : ""}`,
|
|
11208
11276
|
title: "Modo de Leitura"
|
|
11209
11277
|
},
|
|
11210
|
-
/* @__PURE__ */
|
|
11211
|
-
), canEdit && /* @__PURE__ */
|
|
11278
|
+
/* @__PURE__ */ React18.createElement(FiBookOpen3, { size: 14 })
|
|
11279
|
+
), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11212
11280
|
"button",
|
|
11213
11281
|
{
|
|
11214
11282
|
type: "button",
|
|
@@ -11216,17 +11284,17 @@ function NodeDetailsPanel({
|
|
|
11216
11284
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
11217
11285
|
title: "Editar descri\xE7\xE3o (Modo de Escrita)"
|
|
11218
11286
|
},
|
|
11219
|
-
/* @__PURE__ */
|
|
11220
|
-
)), canEdit && !description && /* @__PURE__ */
|
|
11287
|
+
/* @__PURE__ */ React18.createElement(FiEdit27, { size: 14 })
|
|
11288
|
+
)), canEdit && !description && /* @__PURE__ */ React18.createElement(
|
|
11221
11289
|
"div",
|
|
11222
11290
|
{
|
|
11223
11291
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
11224
11292
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
11225
11293
|
},
|
|
11226
11294
|
"Adicionar descri\xE7\xE3o..."
|
|
11227
|
-
))), /* @__PURE__ */
|
|
11295
|
+
))), /* @__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
11296
|
const isSelected = size === s;
|
|
11229
|
-
return /* @__PURE__ */
|
|
11297
|
+
return /* @__PURE__ */ React18.createElement(
|
|
11230
11298
|
"button",
|
|
11231
11299
|
{
|
|
11232
11300
|
key: s,
|
|
@@ -11234,10 +11302,10 @@ function NodeDetailsPanel({
|
|
|
11234
11302
|
onClick: () => canEdit && handleSizeChange(s),
|
|
11235
11303
|
className: `flex items-center gap-2 group focus:outline-none ${canEdit ? "cursor-pointer" : "cursor-default opacity-80"}`
|
|
11236
11304
|
},
|
|
11237
|
-
/* @__PURE__ */
|
|
11238
|
-
/* @__PURE__ */
|
|
11305
|
+
/* @__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" })),
|
|
11306
|
+
/* @__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
11307
|
);
|
|
11240
|
-
}))), /* @__PURE__ */
|
|
11308
|
+
}))), /* @__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
11309
|
"input",
|
|
11242
11310
|
{
|
|
11243
11311
|
type: "checkbox",
|
|
@@ -11245,14 +11313,14 @@ function NodeDetailsPanel({
|
|
|
11245
11313
|
onChange: handleToggleImageMode,
|
|
11246
11314
|
className: "hidden"
|
|
11247
11315
|
}
|
|
11248
|
-
), /* @__PURE__ */
|
|
11316
|
+
), /* @__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
11317
|
ColorPicker,
|
|
11250
11318
|
{
|
|
11251
11319
|
color,
|
|
11252
11320
|
onChange: handleColorChange,
|
|
11253
11321
|
disabled: !canEdit || useImageAsTexture
|
|
11254
11322
|
}
|
|
11255
|
-
), /* @__PURE__ */
|
|
11323
|
+
), /* @__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
11324
|
"input",
|
|
11257
11325
|
{
|
|
11258
11326
|
type: "range",
|
|
@@ -11265,27 +11333,26 @@ function NodeDetailsPanel({
|
|
|
11265
11333
|
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
11334
|
title: `Intensidade do brilho: ${intensity}`
|
|
11267
11335
|
}
|
|
11268
|
-
), /* @__PURE__ */
|
|
11336
|
+
), /* @__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
11337
|
"button",
|
|
11270
11338
|
{
|
|
11271
11339
|
type: "button",
|
|
11272
11340
|
onClick: handleCreateGoogleDoc,
|
|
11273
11341
|
disabled: isLoadingDocs,
|
|
11274
|
-
className: "flex items-center
|
|
11275
|
-
title: "Criar Documento no Google Docs"
|
|
11342
|
+
className: "flex items-center justify-center w-8 h-8 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",
|
|
11343
|
+
title: isLoadingDocs ? "Criando Documento..." : "Criar Documento no Google Docs"
|
|
11276
11344
|
},
|
|
11277
|
-
isLoadingDocs ? /* @__PURE__ */
|
|
11278
|
-
|
|
11279
|
-
), canEdit && /* @__PURE__ */ React17.createElement(
|
|
11345
|
+
isLoadingDocs ? /* @__PURE__ */ React18.createElement(AiOutlineLoading3Quarters3, { className: "animate-spin", size: 14 }) : /* @__PURE__ */ React18.createElement(GoogleDocsIcon_default, { size: 14, className: "group-hover:scale-110 transition-transform" })
|
|
11346
|
+
), canEdit && /* @__PURE__ */ React18.createElement(
|
|
11280
11347
|
"button",
|
|
11281
11348
|
{
|
|
11282
11349
|
type: "button",
|
|
11283
11350
|
onClick: handleAddProp,
|
|
11284
11351
|
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
11352
|
},
|
|
11286
|
-
/* @__PURE__ */
|
|
11353
|
+
/* @__PURE__ */ React18.createElement(FiPlus7, { size: 14 }),
|
|
11287
11354
|
" Adicionar"
|
|
11288
|
-
))), /* @__PURE__ */
|
|
11355
|
+
))), /* @__PURE__ */ React18.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React18.createElement(
|
|
11289
11356
|
CustomPropertyDisplay,
|
|
11290
11357
|
{
|
|
11291
11358
|
key: prop.id,
|
|
@@ -11300,7 +11367,7 @@ function NodeDetailsPanel({
|
|
|
11300
11367
|
onUploadFile: canEdit ? onUploadFile : void 0,
|
|
11301
11368
|
readOnly: !canEdit
|
|
11302
11369
|
}
|
|
11303
|
-
)), /* @__PURE__ */
|
|
11370
|
+
)), /* @__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
11371
|
"button",
|
|
11305
11372
|
{
|
|
11306
11373
|
onClick: () => handleSave(false),
|
|
@@ -11309,10 +11376,10 @@ function NodeDetailsPanel({
|
|
|
11309
11376
|
${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
11377
|
`
|
|
11311
11378
|
},
|
|
11312
|
-
isSaving && /* @__PURE__ */
|
|
11379
|
+
isSaving && /* @__PURE__ */ React18.createElement(FiLoader2, { className: "animate-spin" }),
|
|
11313
11380
|
isSaving ? "Salvando..." : "Salvar"
|
|
11314
11381
|
)))
|
|
11315
|
-
), isDescriptionModalOpen && canEdit && /* @__PURE__ */
|
|
11382
|
+
), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React18.createElement(
|
|
11316
11383
|
DescriptionEditModal,
|
|
11317
11384
|
{
|
|
11318
11385
|
isOpen: isDescriptionModalOpen,
|
|
@@ -11333,12 +11400,12 @@ function NodeDetailsPanel({
|
|
|
11333
11400
|
}
|
|
11334
11401
|
|
|
11335
11402
|
// src/components/QuestDetailsPanel.jsx
|
|
11336
|
-
import
|
|
11403
|
+
import React20, { useState as useState19, useEffect as useEffect16, useRef as useRef14 } from "react";
|
|
11337
11404
|
import { v4 as uuidv49 } from "uuid";
|
|
11338
11405
|
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
11406
|
|
|
11340
11407
|
// src/components/QuestTimeline.jsx
|
|
11341
|
-
import
|
|
11408
|
+
import React19 from "react";
|
|
11342
11409
|
import {
|
|
11343
11410
|
FiGitCommit,
|
|
11344
11411
|
FiUserPlus,
|
|
@@ -11377,25 +11444,25 @@ function QuestTimeline({
|
|
|
11377
11444
|
}).format(date);
|
|
11378
11445
|
};
|
|
11379
11446
|
if (timeline.length === 0) {
|
|
11380
|
-
return /* @__PURE__ */
|
|
11447
|
+
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
11448
|
}
|
|
11382
|
-
return /* @__PURE__ */
|
|
11449
|
+
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
11450
|
const config = DEFAULT_ICON_CONFIG;
|
|
11384
11451
|
const Icon = config.icon;
|
|
11385
11452
|
const actorName = getMemberName(event.actorId);
|
|
11386
|
-
return /* @__PURE__ */
|
|
11453
|
+
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
11454
|
"button",
|
|
11388
11455
|
{
|
|
11389
11456
|
onClick: () => onAddNote(event),
|
|
11390
11457
|
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
11458
|
title: "Adicionar detalhe/anexo a esta etapa"
|
|
11392
11459
|
},
|
|
11393
|
-
/* @__PURE__ */
|
|
11394
|
-
)), /* @__PURE__ */
|
|
11460
|
+
/* @__PURE__ */ React19.createElement(FiPlusCircle, { size: 12 })
|
|
11461
|
+
)), /* @__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
11462
|
const isAssigneeId = key.toLowerCase().includes("assignee_id") || key.toLowerCase().includes("respons\xE1vel") || key.toLowerCase().includes("assignee id");
|
|
11396
11463
|
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__ */
|
|
11464
|
+
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));
|
|
11465
|
+
})), 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
11466
|
"a",
|
|
11400
11467
|
{
|
|
11401
11468
|
key: lIdx,
|
|
@@ -11404,9 +11471,9 @@ function QuestTimeline({
|
|
|
11404
11471
|
rel: "noopener noreferrer",
|
|
11405
11472
|
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
11473
|
},
|
|
11407
|
-
/* @__PURE__ */
|
|
11474
|
+
/* @__PURE__ */ React19.createElement(FiLink6, { size: 10 }),
|
|
11408
11475
|
link.name || "Link"
|
|
11409
|
-
))), event.images && event.images.length > 0 && /* @__PURE__ */
|
|
11476
|
+
))), 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
11477
|
"button",
|
|
11411
11478
|
{
|
|
11412
11479
|
key: iIdx,
|
|
@@ -11414,14 +11481,13 @@ function QuestTimeline({
|
|
|
11414
11481
|
onClick: () => onOpenImageViewer == null ? void 0 : onOpenImageViewer(event.images, iIdx),
|
|
11415
11482
|
className: "relative w-12 h-12 rounded border border-white/10 overflow-hidden hover:border-sky-500/50 transition-colors group/img"
|
|
11416
11483
|
},
|
|
11417
|
-
/* @__PURE__ */
|
|
11418
|
-
/* @__PURE__ */
|
|
11484
|
+
/* @__PURE__ */ React19.createElement("img", { src: img.value, alt: img.name, className: "w-full h-full object-cover" }),
|
|
11485
|
+
/* @__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
11486
|
)))));
|
|
11420
11487
|
})));
|
|
11421
11488
|
}
|
|
11422
11489
|
|
|
11423
11490
|
// src/components/QuestDetailsPanel.jsx
|
|
11424
|
-
import { SiGoogledocs as SiGoogledocs4 } from "react-icons/si";
|
|
11425
11491
|
import { AiOutlineLoading3Quarters as AiOutlineLoading3Quarters4 } from "react-icons/ai";
|
|
11426
11492
|
var QUEST_STATUS_COLORS3 = {
|
|
11427
11493
|
"Backlog": "#64748b",
|
|
@@ -11512,11 +11578,11 @@ function QuestDetailsPanel({
|
|
|
11512
11578
|
const [showMilestoneSuggestions, setShowMilestoneSuggestions] = useState19(false);
|
|
11513
11579
|
const [dependencyInput, setDependencyInput] = useState19("");
|
|
11514
11580
|
const [showDependencySuggestions, setShowDependencySuggestions] = useState19(false);
|
|
11515
|
-
const activeMilestones =
|
|
11581
|
+
const activeMilestones = React20.useMemo(
|
|
11516
11582
|
() => (milestones || []).filter((ms) => ms.status === "active"),
|
|
11517
11583
|
[milestones]
|
|
11518
11584
|
);
|
|
11519
|
-
const filteredMilestones =
|
|
11585
|
+
const filteredMilestones = React20.useMemo(() => {
|
|
11520
11586
|
const search = milestoneInput.toLowerCase().trim();
|
|
11521
11587
|
return activeMilestones.filter(
|
|
11522
11588
|
(ms) => ms.name.toLowerCase().includes(search) && !milestoneIds.includes(ms.id)
|
|
@@ -11555,11 +11621,11 @@ function QuestDetailsPanel({
|
|
|
11555
11621
|
handleRemoveMilestone(milestoneIds[milestoneIds.length - 1]);
|
|
11556
11622
|
}
|
|
11557
11623
|
};
|
|
11558
|
-
const dependencyQuests =
|
|
11624
|
+
const dependencyQuests = React20.useMemo(
|
|
11559
11625
|
() => availableNodes.filter((n) => n.is_quest && String(n.id) !== String(node == null ? void 0 : node.id)),
|
|
11560
11626
|
[availableNodes, node == null ? void 0 : node.id]
|
|
11561
11627
|
);
|
|
11562
|
-
const filteredDependencies =
|
|
11628
|
+
const filteredDependencies = React20.useMemo(() => {
|
|
11563
11629
|
const search = dependencyInput.toLowerCase().trim();
|
|
11564
11630
|
return dependencyQuests.filter((q) => {
|
|
11565
11631
|
var _a2;
|
|
@@ -11589,7 +11655,7 @@ function QuestDetailsPanel({
|
|
|
11589
11655
|
handleRemoveDependency(dependencyIds[dependencyIds.length - 1]);
|
|
11590
11656
|
}
|
|
11591
11657
|
};
|
|
11592
|
-
const blockedStatus =
|
|
11658
|
+
const blockedStatus = React20.useMemo(
|
|
11593
11659
|
() => isQuestBlocked({ ...node, dependency_ids: dependencyIds }, availableNodes),
|
|
11594
11660
|
[node, dependencyIds, availableNodes]
|
|
11595
11661
|
);
|
|
@@ -11897,16 +11963,33 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11897
11963
|
setIsLoadingDocs(true);
|
|
11898
11964
|
const res = await create_google_doc_action(standardizedName);
|
|
11899
11965
|
if (res.success) {
|
|
11900
|
-
const
|
|
11901
|
-
|
|
11902
|
-
|
|
11903
|
-
|
|
11904
|
-
|
|
11905
|
-
|
|
11906
|
-
|
|
11966
|
+
const existingLinksPropIndex = customProps.findIndex(
|
|
11967
|
+
(p) => p.type === "links" && p.key === "Links"
|
|
11968
|
+
);
|
|
11969
|
+
let updatedProps;
|
|
11970
|
+
if (existingLinksPropIndex !== -1) {
|
|
11971
|
+
updatedProps = [...customProps];
|
|
11972
|
+
const existingProp = { ...updatedProps[existingLinksPropIndex] };
|
|
11973
|
+
existingProp.value = [
|
|
11974
|
+
...existingProp.value || [],
|
|
11975
|
+
{ id: uuidv49(), name: "Abrir Documento", value: res.link }
|
|
11976
|
+
];
|
|
11977
|
+
updatedProps[existingLinksPropIndex] = existingProp;
|
|
11978
|
+
} else {
|
|
11979
|
+
const newProp = {
|
|
11980
|
+
id: uuidv49(),
|
|
11981
|
+
key: "Links",
|
|
11982
|
+
type: "links",
|
|
11983
|
+
value: [{ id: uuidv49(), name: "Abrir Documento", value: res.link }]
|
|
11984
|
+
};
|
|
11985
|
+
updatedProps = [...customProps, newProp];
|
|
11986
|
+
}
|
|
11907
11987
|
setCustomProps(updatedProps);
|
|
11908
11988
|
setHasUnsavedChanges(true);
|
|
11909
11989
|
triggerAutoSave({ customProps: updatedProps });
|
|
11990
|
+
if (res.link) {
|
|
11991
|
+
window.open(res.link, "_blank");
|
|
11992
|
+
}
|
|
11910
11993
|
} else {
|
|
11911
11994
|
alert("Erro ao criar documento: " + res.error);
|
|
11912
11995
|
}
|
|
@@ -11997,7 +12080,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
11997
12080
|
const currentUsedTypes = customProps.map((p) => p.type).filter((t) => UNIQUE_PROP_TYPES.includes(t));
|
|
11998
12081
|
const assigneeMember = viewMembers.find((m) => m.id === assigneeId);
|
|
11999
12082
|
const isAssigneeUndefined = assigneeId && !assigneeMember;
|
|
12000
|
-
return /* @__PURE__ */
|
|
12083
|
+
return /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement(
|
|
12001
12084
|
"div",
|
|
12002
12085
|
{
|
|
12003
12086
|
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 +12093,11 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12010
12093
|
onContextMenu: swallow,
|
|
12011
12094
|
onDoubleClick: swallow
|
|
12012
12095
|
},
|
|
12013
|
-
/* @__PURE__ */
|
|
12096
|
+
/* @__PURE__ */ React20.createElement("div", { onPointerDown: (e) => {
|
|
12014
12097
|
e.stopPropagation();
|
|
12015
12098
|
handleResize(e);
|
|
12016
12099
|
}, 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__ */
|
|
12100
|
+
isReadMode ? /* @__PURE__ */ React20.createElement(
|
|
12018
12101
|
DescriptionReadModePanel,
|
|
12019
12102
|
{
|
|
12020
12103
|
title: standardizedName || (node == null ? void 0 : node.name),
|
|
@@ -12035,7 +12118,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12035
12118
|
onImageClick: handleImageClickFromText,
|
|
12036
12119
|
onSaveDescription: handleSaveDescriptionInline
|
|
12037
12120
|
}
|
|
12038
|
-
) : /* @__PURE__ */
|
|
12121
|
+
) : /* @__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
12122
|
"input",
|
|
12040
12123
|
{
|
|
12041
12124
|
type: "text",
|
|
@@ -12044,7 +12127,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12044
12127
|
readOnly: !canEdit,
|
|
12045
12128
|
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
12129
|
}
|
|
12047
|
-
), /* @__PURE__ */
|
|
12130
|
+
), /* @__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
12131
|
"button",
|
|
12049
12132
|
{
|
|
12050
12133
|
type: "button",
|
|
@@ -12052,8 +12135,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12052
12135
|
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
12136
|
title: isNameCopied ? "Nome Copiado!" : "Copiar nome formatado"
|
|
12054
12137
|
},
|
|
12055
|
-
isNameCopied ? /* @__PURE__ */
|
|
12056
|
-
))), /* @__PURE__ */
|
|
12138
|
+
isNameCopied ? /* @__PURE__ */ React20.createElement(FiCheck11, { size: 10 }) : /* @__PURE__ */ React20.createElement(FiCopy4, { size: 10 })
|
|
12139
|
+
))), /* @__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
12140
|
"button",
|
|
12058
12141
|
{
|
|
12059
12142
|
type: "button",
|
|
@@ -12064,7 +12147,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12064
12147
|
className: "text-[10px] text-indigo-400 hover:text-indigo-300 font-bold uppercase transition-colors"
|
|
12065
12148
|
},
|
|
12066
12149
|
"+ Adicionar"
|
|
12067
|
-
)), questDate && /* @__PURE__ */
|
|
12150
|
+
)), 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
12151
|
"button",
|
|
12069
12152
|
{
|
|
12070
12153
|
key: t,
|
|
@@ -12083,7 +12166,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12083
12166
|
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
12167
|
},
|
|
12085
12168
|
t === "Date Interval" ? "Intervalo" : t
|
|
12086
|
-
)) : /* @__PURE__ */
|
|
12169
|
+
)) : /* @__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
12170
|
"button",
|
|
12088
12171
|
{
|
|
12089
12172
|
type: "button",
|
|
@@ -12094,8 +12177,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12094
12177
|
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
12178
|
title: "Confirmar data"
|
|
12096
12179
|
},
|
|
12097
|
-
/* @__PURE__ */
|
|
12098
|
-
) : /* @__PURE__ */
|
|
12180
|
+
/* @__PURE__ */ React20.createElement(FiCheck11, { size: 14 })
|
|
12181
|
+
) : /* @__PURE__ */ React20.createElement(
|
|
12099
12182
|
"button",
|
|
12100
12183
|
{
|
|
12101
12184
|
type: "button",
|
|
@@ -12106,8 +12189,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12106
12189
|
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
12190
|
title: "Editar data"
|
|
12108
12191
|
},
|
|
12109
|
-
/* @__PURE__ */
|
|
12110
|
-
), /* @__PURE__ */
|
|
12192
|
+
/* @__PURE__ */ React20.createElement(FiEdit28, { size: 14 })
|
|
12193
|
+
), /* @__PURE__ */ React20.createElement(
|
|
12111
12194
|
"button",
|
|
12112
12195
|
{
|
|
12113
12196
|
type: "button",
|
|
@@ -12118,8 +12201,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12118
12201
|
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
12202
|
title: "Remover data"
|
|
12120
12203
|
},
|
|
12121
|
-
/* @__PURE__ */
|
|
12122
|
-
))), !questDate.confirmed && canEdit && /* @__PURE__ */
|
|
12204
|
+
/* @__PURE__ */ React20.createElement(FiX7, { size: 14 })
|
|
12205
|
+
))), !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
12206
|
"input",
|
|
12124
12207
|
{
|
|
12125
12208
|
type: "text",
|
|
@@ -12140,7 +12223,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12140
12223
|
maxLength: "10",
|
|
12141
12224
|
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
12225
|
}
|
|
12143
|
-
), questDate.type === "Date Interval" && /* @__PURE__ */
|
|
12226
|
+
), questDate.type === "Date Interval" && /* @__PURE__ */ React20.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React20.createElement(
|
|
12144
12227
|
"input",
|
|
12145
12228
|
{
|
|
12146
12229
|
type: "text",
|
|
@@ -12161,7 +12244,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12161
12244
|
maxLength: "10",
|
|
12162
12245
|
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
12246
|
}
|
|
12164
|
-
), /* @__PURE__ */
|
|
12247
|
+
), /* @__PURE__ */ React20.createElement("span", { className: "text-slate-500" }, "-"), /* @__PURE__ */ React20.createElement(
|
|
12165
12248
|
"input",
|
|
12166
12249
|
{
|
|
12167
12250
|
type: "text",
|
|
@@ -12182,11 +12265,11 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12182
12265
|
maxLength: "10",
|
|
12183
12266
|
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
12267
|
}
|
|
12185
|
-
))))), /* @__PURE__ */
|
|
12268
|
+
))))), /* @__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
12269
|
const ms = (milestones || []).find((m) => m.id === id);
|
|
12187
12270
|
if (!ms) return null;
|
|
12188
|
-
return /* @__PURE__ */
|
|
12189
|
-
}), canEdit && /* @__PURE__ */
|
|
12271
|
+
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 })));
|
|
12272
|
+
}), canEdit && /* @__PURE__ */ React20.createElement(
|
|
12190
12273
|
"input",
|
|
12191
12274
|
{
|
|
12192
12275
|
type: "text",
|
|
@@ -12207,7 +12290,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12207
12290
|
placeholder: milestoneIds.length === 0 ? "Adicionar milestone..." : "",
|
|
12208
12291
|
autoComplete: "off"
|
|
12209
12292
|
}
|
|
12210
|
-
), canEdit && showMilestoneSuggestions && filteredMilestones.length > 0 && /* @__PURE__ */
|
|
12293
|
+
), 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
12294
|
"li",
|
|
12212
12295
|
{
|
|
12213
12296
|
key: ms.id,
|
|
@@ -12218,7 +12301,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12218
12301
|
}
|
|
12219
12302
|
},
|
|
12220
12303
|
ms.name
|
|
12221
|
-
))), canEdit && showMilestoneSuggestions && milestoneInput.trim() && !filteredMilestones.some((m) => m.name.toLowerCase() === milestoneInput.toLowerCase().trim()) && /* @__PURE__ */
|
|
12304
|
+
))), 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
12305
|
"li",
|
|
12223
12306
|
{
|
|
12224
12307
|
className: "px-3 py-3 text-sm cursor-pointer hover:bg-indigo-600/50 flex flex-col gap-0.5",
|
|
@@ -12227,9 +12310,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12227
12310
|
handleAddMilestone({ name: milestoneInput });
|
|
12228
12311
|
}
|
|
12229
12312
|
},
|
|
12230
|
-
/* @__PURE__ */
|
|
12231
|
-
/* @__PURE__ */
|
|
12232
|
-
)))), /* @__PURE__ */
|
|
12313
|
+
/* @__PURE__ */ React20.createElement("span", { className: "text-[10px] uppercase font-bold text-slate-500" }, "Criar novo milestone"),
|
|
12314
|
+
/* @__PURE__ */ React20.createElement("span", { className: "text-white" }, '"', milestoneInput, '"')
|
|
12315
|
+
)))), /* @__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
12316
|
"button",
|
|
12234
12317
|
{
|
|
12235
12318
|
type: "button",
|
|
@@ -12237,12 +12320,12 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12237
12320
|
disabled: !canEdit,
|
|
12238
12321
|
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
12322
|
},
|
|
12240
|
-
/* @__PURE__ */
|
|
12241
|
-
canEdit && /* @__PURE__ */
|
|
12242
|
-
), isStatusDropdownOpen && canEdit && /* @__PURE__ */
|
|
12323
|
+
/* @__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)),
|
|
12324
|
+
canEdit && /* @__PURE__ */ React20.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isStatusDropdownOpen ? "rotate-180" : ""}` })
|
|
12325
|
+
), 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
12326
|
const isBacklog = s === "Backlog";
|
|
12244
12327
|
const isDisabled = !isBacklog && blockedStatus.isBlocked;
|
|
12245
|
-
return /* @__PURE__ */
|
|
12328
|
+
return /* @__PURE__ */ React20.createElement(
|
|
12246
12329
|
"li",
|
|
12247
12330
|
{
|
|
12248
12331
|
key: s,
|
|
@@ -12255,22 +12338,22 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12255
12338
|
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
12339
|
title: isDisabled ? `Bloqueado por depend\xEAncias: ${blockedStatus.pendingDependencies.map((d) => d.raw_title || d.name).join(", ")}` : ""
|
|
12257
12340
|
},
|
|
12258
|
-
/* @__PURE__ */
|
|
12259
|
-
isDisabled && /* @__PURE__ */
|
|
12341
|
+
/* @__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),
|
|
12342
|
+
isDisabled && /* @__PURE__ */ React20.createElement(FiRepeat2, { className: "text-amber-400/60 rotate-180", size: 12 })
|
|
12260
12343
|
);
|
|
12261
|
-
}))))), /* @__PURE__ */
|
|
12344
|
+
}))))), /* @__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
12345
|
"button",
|
|
12263
12346
|
{
|
|
12264
12347
|
type: "button",
|
|
12265
12348
|
onClick: () => setIsAssigneeDropdownOpen(!isAssigneeDropdownOpen),
|
|
12266
12349
|
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
12350
|
},
|
|
12268
|
-
/* @__PURE__ */
|
|
12269
|
-
/* @__PURE__ */
|
|
12270
|
-
), isAssigneeDropdownOpen && /* @__PURE__ */
|
|
12351
|
+
/* @__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")),
|
|
12352
|
+
/* @__PURE__ */ React20.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isAssigneeDropdownOpen ? "rotate-180" : ""}` })
|
|
12353
|
+
), isAssigneeDropdownOpen && /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
|
|
12271
12354
|
setIsAssigneeDropdownOpen(false);
|
|
12272
12355
|
setAssigneeSearchQuery("");
|
|
12273
|
-
} }), /* @__PURE__ */
|
|
12356
|
+
} }), /* @__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
12357
|
"input",
|
|
12275
12358
|
{
|
|
12276
12359
|
type: "text",
|
|
@@ -12281,7 +12364,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12281
12364
|
className: "bg-transparent border-none outline-none text-xs text-white placeholder-slate-500 w-full",
|
|
12282
12365
|
onClick: (e) => e.stopPropagation()
|
|
12283
12366
|
}
|
|
12284
|
-
)), /* @__PURE__ */
|
|
12367
|
+
)), /* @__PURE__ */ React20.createElement("ul", { className: "max-h-48 overflow-y-auto custom-scrollbar" }, /* @__PURE__ */ React20.createElement(
|
|
12285
12368
|
"li",
|
|
12286
12369
|
{
|
|
12287
12370
|
onClick: () => {
|
|
@@ -12299,7 +12382,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12299
12382
|
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
12383
|
},
|
|
12301
12384
|
"Nenhum"
|
|
12302
|
-
), isAssigneeUndefined && /* @__PURE__ */
|
|
12385
|
+
), isAssigneeUndefined && /* @__PURE__ */ React20.createElement(
|
|
12303
12386
|
"li",
|
|
12304
12387
|
{
|
|
12305
12388
|
onClick: () => {
|
|
@@ -12312,7 +12395,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12312
12395
|
), viewMembers.filter((member) => {
|
|
12313
12396
|
const search = assigneeSearchQuery.toLowerCase();
|
|
12314
12397
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12315
|
-
}).map((member) => /* @__PURE__ */
|
|
12398
|
+
}).map((member) => /* @__PURE__ */ React20.createElement(
|
|
12316
12399
|
"li",
|
|
12317
12400
|
{
|
|
12318
12401
|
key: member.id,
|
|
@@ -12334,7 +12417,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12334
12417
|
)), viewMembers.filter((member) => {
|
|
12335
12418
|
const search = assigneeSearchQuery.toLowerCase();
|
|
12336
12419
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12337
|
-
}).length === 0 && assigneeSearchQuery && /* @__PURE__ */
|
|
12420
|
+
}).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
12421
|
"button",
|
|
12339
12422
|
{
|
|
12340
12423
|
type: "button",
|
|
@@ -12345,8 +12428,8 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12345
12428
|
},
|
|
12346
12429
|
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
12430
|
},
|
|
12348
|
-
/* @__PURE__ */
|
|
12349
|
-
)), recurrenceConfig.enabled && /* @__PURE__ */
|
|
12431
|
+
/* @__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"}` })
|
|
12432
|
+
)), 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
12433
|
"select",
|
|
12351
12434
|
{
|
|
12352
12435
|
disabled: !canEdit,
|
|
@@ -12357,10 +12440,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12357
12440
|
},
|
|
12358
12441
|
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
12442
|
},
|
|
12360
|
-
/* @__PURE__ */
|
|
12361
|
-
/* @__PURE__ */
|
|
12362
|
-
/* @__PURE__ */
|
|
12363
|
-
)), recurrenceConfig.type === "weekly" && /* @__PURE__ */
|
|
12443
|
+
/* @__PURE__ */ React20.createElement("option", { value: "daily" }, "Di\xE1ria"),
|
|
12444
|
+
/* @__PURE__ */ React20.createElement("option", { value: "weekly" }, "Semanal"),
|
|
12445
|
+
/* @__PURE__ */ React20.createElement("option", { value: "custom" }, "Data Espec\xEDfica")
|
|
12446
|
+
)), 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
12447
|
"select",
|
|
12365
12448
|
{
|
|
12366
12449
|
disabled: !canEdit,
|
|
@@ -12371,14 +12454,14 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12371
12454
|
},
|
|
12372
12455
|
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
12456
|
},
|
|
12374
|
-
/* @__PURE__ */
|
|
12375
|
-
/* @__PURE__ */
|
|
12376
|
-
/* @__PURE__ */
|
|
12377
|
-
/* @__PURE__ */
|
|
12378
|
-
/* @__PURE__ */
|
|
12379
|
-
/* @__PURE__ */
|
|
12380
|
-
/* @__PURE__ */
|
|
12381
|
-
)), recurrenceConfig.type === "custom" && /* @__PURE__ */
|
|
12457
|
+
/* @__PURE__ */ React20.createElement("option", { value: 1 }, "Segunda-feira"),
|
|
12458
|
+
/* @__PURE__ */ React20.createElement("option", { value: 2 }, "Ter\xE7a-feira"),
|
|
12459
|
+
/* @__PURE__ */ React20.createElement("option", { value: 3 }, "Quarta-feira"),
|
|
12460
|
+
/* @__PURE__ */ React20.createElement("option", { value: 4 }, "Quinta-feira"),
|
|
12461
|
+
/* @__PURE__ */ React20.createElement("option", { value: 5 }, "Sexta-feira"),
|
|
12462
|
+
/* @__PURE__ */ React20.createElement("option", { value: 6 }, "S\xE1bado"),
|
|
12463
|
+
/* @__PURE__ */ React20.createElement("option", { value: 0 }, "Domingo")
|
|
12464
|
+
)), 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
12465
|
"input",
|
|
12383
12466
|
{
|
|
12384
12467
|
readOnly: !canEdit,
|
|
@@ -12391,7 +12474,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12391
12474
|
},
|
|
12392
12475
|
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
12476
|
}
|
|
12394
|
-
))), /* @__PURE__ */
|
|
12477
|
+
))), /* @__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
12478
|
"select",
|
|
12396
12479
|
{
|
|
12397
12480
|
disabled: !canEdit,
|
|
@@ -12402,9 +12485,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12402
12485
|
},
|
|
12403
12486
|
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
12487
|
},
|
|
12405
|
-
/* @__PURE__ */
|
|
12406
|
-
viewMembers.map((member) => /* @__PURE__ */
|
|
12407
|
-
), /* @__PURE__ */
|
|
12488
|
+
/* @__PURE__ */ React20.createElement("option", { value: "" }, "Sem respons\xE1vel"),
|
|
12489
|
+
viewMembers.map((member) => /* @__PURE__ */ React20.createElement("option", { key: member.id, value: member.id }, member.name || member.email))
|
|
12490
|
+
), /* @__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
12491
|
QuestReviewStackEditor,
|
|
12409
12492
|
{
|
|
12410
12493
|
reviewStack,
|
|
@@ -12415,19 +12498,19 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12415
12498
|
viewMembers,
|
|
12416
12499
|
readOnly: !canEdit
|
|
12417
12500
|
}
|
|
12418
|
-
)), status === "Review" && canEdit && /* @__PURE__ */
|
|
12501
|
+
)), 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
12502
|
"button",
|
|
12420
12503
|
{
|
|
12421
12504
|
type: "button",
|
|
12422
12505
|
onClick: () => setIsReturnDropdownOpen(!isReturnDropdownOpen),
|
|
12423
12506
|
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
12507
|
},
|
|
12425
|
-
/* @__PURE__ */
|
|
12426
|
-
/* @__PURE__ */
|
|
12427
|
-
), isReturnDropdownOpen && /* @__PURE__ */
|
|
12508
|
+
/* @__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...")),
|
|
12509
|
+
/* @__PURE__ */ React20.createElement(FiChevronDown7, { className: `text-slate-400 transition-transform duration-200 ${isReturnDropdownOpen ? "rotate-180" : ""}`, size: 14 })
|
|
12510
|
+
), isReturnDropdownOpen && /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement("div", { className: "fixed inset-0 z-40", onClick: () => {
|
|
12428
12511
|
setIsReturnDropdownOpen(false);
|
|
12429
12512
|
setReturnSearchQuery("");
|
|
12430
|
-
} }), /* @__PURE__ */
|
|
12513
|
+
} }), /* @__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
12514
|
"input",
|
|
12432
12515
|
{
|
|
12433
12516
|
type: "text",
|
|
@@ -12438,10 +12521,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12438
12521
|
className: "bg-transparent border-none outline-none text-[10px] text-white placeholder-slate-500 w-full",
|
|
12439
12522
|
onClick: (e) => e.stopPropagation()
|
|
12440
12523
|
}
|
|
12441
|
-
)), /* @__PURE__ */
|
|
12524
|
+
)), /* @__PURE__ */ React20.createElement("ul", { className: "max-h-32 overflow-y-auto custom-scrollbar" }, viewMembers.filter((member) => {
|
|
12442
12525
|
const search = returnSearchQuery.toLowerCase();
|
|
12443
12526
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12444
|
-
}).map((member) => /* @__PURE__ */
|
|
12527
|
+
}).map((member) => /* @__PURE__ */ React20.createElement(
|
|
12445
12528
|
"li",
|
|
12446
12529
|
{
|
|
12447
12530
|
key: member.id,
|
|
@@ -12456,7 +12539,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12456
12539
|
)), viewMembers.filter((member) => {
|
|
12457
12540
|
const search = returnSearchQuery.toLowerCase();
|
|
12458
12541
|
return (member.name || "").toLowerCase().includes(search) || (member.email || "").toLowerCase().includes(search);
|
|
12459
|
-
}).length === 0 && /* @__PURE__ */
|
|
12542
|
+
}).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
12543
|
"button",
|
|
12461
12544
|
{
|
|
12462
12545
|
type: "button",
|
|
@@ -12464,13 +12547,13 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12464
12547
|
disabled: isSaving || !returnAssigneeId,
|
|
12465
12548
|
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
12549
|
},
|
|
12467
|
-
/* @__PURE__ */
|
|
12550
|
+
/* @__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
12551
|
"Retornar para Opera\xE7\xE3o"
|
|
12469
|
-
))), /* @__PURE__ */
|
|
12552
|
+
))), /* @__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
12553
|
const depNode = availableNodes.find((n) => String(n.id) === String(depId));
|
|
12471
12554
|
if (!depNode) return null;
|
|
12472
12555
|
const isDone = depNode.status === "Done";
|
|
12473
|
-
return /* @__PURE__ */
|
|
12556
|
+
return /* @__PURE__ */ React20.createElement(
|
|
12474
12557
|
"span",
|
|
12475
12558
|
{
|
|
12476
12559
|
key: depId,
|
|
@@ -12478,9 +12561,9 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12478
12561
|
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
12562
|
title: isDone ? `Pronta - Clique para focar` : `Pendente - Clique para focar`
|
|
12480
12563
|
},
|
|
12481
|
-
/* @__PURE__ */
|
|
12564
|
+
/* @__PURE__ */ React20.createElement("span", { className: `w-1.5 h-1.5 rounded-full ${isDone ? "bg-green-400" : "bg-amber-400 animate-pulse"}` }),
|
|
12482
12565
|
depNode.raw_title || depNode.name,
|
|
12483
|
-
canEdit && /* @__PURE__ */
|
|
12566
|
+
canEdit && /* @__PURE__ */ React20.createElement(
|
|
12484
12567
|
"button",
|
|
12485
12568
|
{
|
|
12486
12569
|
type: "button",
|
|
@@ -12490,10 +12573,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12490
12573
|
},
|
|
12491
12574
|
className: "hover:text-white transition-colors opacity-60 hover:opacity-100 Ml-1"
|
|
12492
12575
|
},
|
|
12493
|
-
/* @__PURE__ */
|
|
12576
|
+
/* @__PURE__ */ React20.createElement(FiX7, { size: 12 })
|
|
12494
12577
|
)
|
|
12495
12578
|
);
|
|
12496
|
-
}), canEdit && /* @__PURE__ */
|
|
12579
|
+
}), canEdit && /* @__PURE__ */ React20.createElement("div", { className: "flex-1 min-w-[120px] relative" }, /* @__PURE__ */ React20.createElement(
|
|
12497
12580
|
"input",
|
|
12498
12581
|
{
|
|
12499
12582
|
type: "text",
|
|
@@ -12510,7 +12593,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12510
12593
|
placeholder: dependencyIds.length === 0 ? "Adicionar Quest de Origem..." : "",
|
|
12511
12594
|
autoComplete: "off"
|
|
12512
12595
|
}
|
|
12513
|
-
), showDependencySuggestions && /* @__PURE__ */
|
|
12596
|
+
), 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
12597
|
"li",
|
|
12515
12598
|
{
|
|
12516
12599
|
key: q.id,
|
|
@@ -12520,20 +12603,19 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12520
12603
|
handleAddDependency(q);
|
|
12521
12604
|
}
|
|
12522
12605
|
},
|
|
12523
|
-
/* @__PURE__ */
|
|
12524
|
-
/* @__PURE__ */
|
|
12525
|
-
)) : /* @__PURE__ */
|
|
12606
|
+
/* @__PURE__ */ React20.createElement("span", { className: "truncate" }, q.raw_title || q.name),
|
|
12607
|
+
/* @__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")
|
|
12608
|
+
)) : /* @__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
12609
|
"button",
|
|
12527
12610
|
{
|
|
12528
12611
|
type: "button",
|
|
12529
12612
|
onClick: handleCreateGoogleDoc,
|
|
12530
12613
|
disabled: isLoadingDocs,
|
|
12531
|
-
className: "flex items-center
|
|
12532
|
-
title: "Criar Documento no Google Docs"
|
|
12614
|
+
className: "flex items-center justify-center w-8 h-8 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",
|
|
12615
|
+
title: isLoadingDocs ? "Criando Documento..." : "Criar Documento no Google Docs"
|
|
12533
12616
|
},
|
|
12534
|
-
isLoadingDocs ? /* @__PURE__ */
|
|
12535
|
-
|
|
12536
|
-
), canEdit && /* @__PURE__ */ React19.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__ */ React19.createElement(FiPlus8, { size: 14 }), " Adicionar"))), /* @__PURE__ */ React19.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React19.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__ */ React19.createElement("div", { ref: propsEndRef }))), /* @__PURE__ */ React19.createElement("div", { className: "pt-6 border-t border-white/10 mt-6" }, /* @__PURE__ */ React19.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ React19.createElement("h3", { className: "text-[11px] uppercase font-bold text-slate-500 tracking-wider" }, "Hist\xF3rico & Notas"), /* @__PURE__ */ React19.createElement(
|
|
12617
|
+
isLoadingDocs ? /* @__PURE__ */ React20.createElement(AiOutlineLoading3Quarters4, { className: "animate-spin", size: 14 }) : /* @__PURE__ */ React20.createElement(GoogleDocsIcon_default, { size: 14, className: "group-hover:scale-110 transition-transform" })
|
|
12618
|
+
), 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
12619
|
"button",
|
|
12538
12620
|
{
|
|
12539
12621
|
type: "button",
|
|
@@ -12552,12 +12634,12 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12552
12634
|
},
|
|
12553
12635
|
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
12636
|
},
|
|
12555
|
-
isNoteFormOpen && !editingEntryId ? /* @__PURE__ */
|
|
12637
|
+
isNoteFormOpen && !editingEntryId ? /* @__PURE__ */ React20.createElement(FiX7, { size: 12 }) : /* @__PURE__ */ React20.createElement(FiPlus8, { size: 12 }),
|
|
12556
12638
|
isNoteFormOpen && !editingEntryId ? "Cancelar" : "Nova Nota"
|
|
12557
|
-
)), isNoteFormOpen && /* @__PURE__ */
|
|
12639
|
+
)), 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
12640
|
setIsNoteFormOpen(false);
|
|
12559
12641
|
setEditingEntryId(null);
|
|
12560
|
-
}, className: "text-slate-500 hover:text-white" }, /* @__PURE__ */
|
|
12642
|
+
}, className: "text-slate-500 hover:text-white" }, /* @__PURE__ */ React20.createElement(FiX7, { size: 14 }))), /* @__PURE__ */ React20.createElement(
|
|
12561
12643
|
"textarea",
|
|
12562
12644
|
{
|
|
12563
12645
|
value: noteText,
|
|
@@ -12565,7 +12647,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12565
12647
|
placeholder: editingEntryId ? "Adicione uma observa\xE7\xE3o a esta etapa..." : "Escreva uma observa\xE7\xE3o no hist\xF3rico...",
|
|
12566
12648
|
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
12649
|
}
|
|
12568
|
-
), /* @__PURE__ */
|
|
12650
|
+
), /* @__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
12651
|
"input",
|
|
12570
12652
|
{
|
|
12571
12653
|
type: "text",
|
|
@@ -12574,7 +12656,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12574
12656
|
onChange: (e) => updateLinkInNote(link.id, "name", e.target.value),
|
|
12575
12657
|
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
12658
|
}
|
|
12577
|
-
), /* @__PURE__ */
|
|
12659
|
+
), /* @__PURE__ */ React20.createElement(
|
|
12578
12660
|
"input",
|
|
12579
12661
|
{
|
|
12580
12662
|
type: "text",
|
|
@@ -12583,7 +12665,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12583
12665
|
onChange: (e) => updateLinkInNote(link.id, "value", e.target.value),
|
|
12584
12666
|
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
12667
|
}
|
|
12586
|
-
), /* @__PURE__ */
|
|
12668
|
+
), /* @__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
12669
|
"input",
|
|
12588
12670
|
{
|
|
12589
12671
|
type: "text",
|
|
@@ -12592,7 +12674,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12592
12674
|
onChange: (e) => updateImageInNote(img.id, e.target.value),
|
|
12593
12675
|
className: "flex-1 bg-transparent text-[10px] focus:outline-none"
|
|
12594
12676
|
}
|
|
12595
|
-
)), /* @__PURE__ */
|
|
12677
|
+
)), /* @__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
12678
|
"button",
|
|
12597
12679
|
{
|
|
12598
12680
|
type: "button",
|
|
@@ -12601,7 +12683,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12601
12683
|
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
12684
|
},
|
|
12603
12685
|
editingEntryId ? "Salvar nesta Etapa" : "Adicionar ao Hist\xF3rico"
|
|
12604
|
-
))), /* @__PURE__ */
|
|
12686
|
+
))), /* @__PURE__ */ React20.createElement(
|
|
12605
12687
|
QuestTimeline,
|
|
12606
12688
|
{
|
|
12607
12689
|
timeline,
|
|
@@ -12610,10 +12692,10 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12610
12692
|
canEdit,
|
|
12611
12693
|
onAddNote: handleOpenNoteForEntry
|
|
12612
12694
|
}
|
|
12613
|
-
)), /* @__PURE__ */
|
|
12695
|
+
)), /* @__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
12696
|
const isSelected = size === s;
|
|
12615
|
-
return /* @__PURE__ */
|
|
12616
|
-
}))), /* @__PURE__ */
|
|
12697
|
+
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));
|
|
12698
|
+
}))), /* @__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
12699
|
"input",
|
|
12618
12700
|
{
|
|
12619
12701
|
type: "text",
|
|
@@ -12634,11 +12716,11 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12634
12716
|
placeholder: "",
|
|
12635
12717
|
autoComplete: "off"
|
|
12636
12718
|
}
|
|
12637
|
-
), canEdit && showTypeSuggestions && filteredTypes.length > 0 && /* @__PURE__ */
|
|
12719
|
+
), 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
12720
|
e.preventDefault();
|
|
12639
12721
|
handleAddType(suggestedType);
|
|
12640
|
-
} }, suggestedType))))), currentDatasetName && /* @__PURE__ */
|
|
12641
|
-
), isDescriptionModalOpen && canEdit && /* @__PURE__ */
|
|
12722
|
+
} }, 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")))
|
|
12723
|
+
), isDescriptionModalOpen && canEdit && /* @__PURE__ */ React20.createElement(
|
|
12642
12724
|
DescriptionEditModal,
|
|
12643
12725
|
{
|
|
12644
12726
|
isOpen: isDescriptionModalOpen,
|
|
@@ -12658,7 +12740,7 @@ ${noteText}` : noteText : entry.notes,
|
|
|
12658
12740
|
}
|
|
12659
12741
|
|
|
12660
12742
|
// src/components/MultiNodeContextMenu.jsx
|
|
12661
|
-
import
|
|
12743
|
+
import React21, { useLayoutEffect as useLayoutEffect3, useRef as useRef15, useState as useState20, useEffect as useEffect17 } from "react";
|
|
12662
12744
|
function MultiNodeContextMenu({
|
|
12663
12745
|
data,
|
|
12664
12746
|
userRole,
|
|
@@ -12700,7 +12782,7 @@ function MultiNodeContextMenu({
|
|
|
12700
12782
|
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
12783
|
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
12784
|
const nodeCount = data.nodeIds.size;
|
|
12703
|
-
return /* @__PURE__ */
|
|
12785
|
+
return /* @__PURE__ */ React21.createElement(
|
|
12704
12786
|
"div",
|
|
12705
12787
|
{
|
|
12706
12788
|
ref: menuRef,
|
|
@@ -12714,27 +12796,27 @@ function MultiNodeContextMenu({
|
|
|
12714
12796
|
onContextMenu: swallow,
|
|
12715
12797
|
onDoubleClick: swallow
|
|
12716
12798
|
},
|
|
12717
|
-
/* @__PURE__ */
|
|
12718
|
-
/* @__PURE__ */
|
|
12799
|
+
/* @__PURE__ */ React21.createElement("div", { className: "h-[2px] bg-gradient-to-r from-indigo-400/0 via-indigo-400/70 to-indigo-400/0" }),
|
|
12800
|
+
/* @__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
12801
|
"button",
|
|
12720
12802
|
{
|
|
12721
12803
|
onClick: () => setIsConfirmingDelete(false),
|
|
12722
12804
|
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
12805
|
},
|
|
12724
12806
|
"Cancelar"
|
|
12725
|
-
), /* @__PURE__ */
|
|
12807
|
+
), /* @__PURE__ */ React21.createElement(
|
|
12726
12808
|
"button",
|
|
12727
12809
|
{
|
|
12728
12810
|
onClick: () => onDeleteNodes(data.nodeIds),
|
|
12729
12811
|
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
12812
|
},
|
|
12731
12813
|
"Excluir"
|
|
12732
|
-
))) : /* @__PURE__ */
|
|
12814
|
+
))) : /* @__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
12815
|
);
|
|
12734
12816
|
}
|
|
12735
12817
|
|
|
12736
12818
|
// src/components/RelationshipDetailsPanel.jsx
|
|
12737
|
-
import
|
|
12819
|
+
import React22, { useState as useState21, useEffect as useEffect18, useRef as useRef16, useMemo as useMemo9 } from "react";
|
|
12738
12820
|
import { v4 as uuidv410 } from "uuid";
|
|
12739
12821
|
import { FiPlus as FiPlus9, FiEdit2 as FiEdit29, FiLoader as FiLoader4, FiBookOpen as FiBookOpen5 } from "react-icons/fi";
|
|
12740
12822
|
function RelationshipDetailsPanel({
|
|
@@ -12874,7 +12956,7 @@ function RelationshipDetailsPanel({
|
|
|
12874
12956
|
onOpenImageViewer([{ name: name2 || "Imagem", value: url }], 0);
|
|
12875
12957
|
}
|
|
12876
12958
|
};
|
|
12877
|
-
return /* @__PURE__ */
|
|
12959
|
+
return /* @__PURE__ */ React22.createElement(React22.Fragment, null, /* @__PURE__ */ React22.createElement(
|
|
12878
12960
|
"div",
|
|
12879
12961
|
{
|
|
12880
12962
|
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 +12971,7 @@ function RelationshipDetailsPanel({
|
|
|
12889
12971
|
onContextMenu: swallow,
|
|
12890
12972
|
onDoubleClick: swallow
|
|
12891
12973
|
},
|
|
12892
|
-
isReadMode ? /* @__PURE__ */
|
|
12974
|
+
isReadMode ? /* @__PURE__ */ React22.createElement(
|
|
12893
12975
|
DescriptionReadModePanel,
|
|
12894
12976
|
{
|
|
12895
12977
|
title: name || "Rela\xE7\xE3o",
|
|
@@ -12910,7 +12992,7 @@ function RelationshipDetailsPanel({
|
|
|
12910
12992
|
onImageClick: handleImageClickFromText,
|
|
12911
12993
|
onSaveDescription: handleSaveDescriptionInline
|
|
12912
12994
|
}
|
|
12913
|
-
) : /* @__PURE__ */
|
|
12995
|
+
) : /* @__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
12996
|
"button",
|
|
12915
12997
|
{
|
|
12916
12998
|
onClick: onClose,
|
|
@@ -12919,7 +13001,7 @@ function RelationshipDetailsPanel({
|
|
|
12919
13001
|
title: "Fechar"
|
|
12920
13002
|
},
|
|
12921
13003
|
"\xD7"
|
|
12922
|
-
)), /* @__PURE__ */
|
|
13004
|
+
)), /* @__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
13005
|
"input",
|
|
12924
13006
|
{
|
|
12925
13007
|
type: "text",
|
|
@@ -12934,7 +13016,7 @@ function RelationshipDetailsPanel({
|
|
|
12934
13016
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
12935
13017
|
`
|
|
12936
13018
|
}
|
|
12937
|
-
)), /* @__PURE__ */
|
|
13019
|
+
)), /* @__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
13020
|
"svg",
|
|
12939
13021
|
{
|
|
12940
13022
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -12948,9 +13030,9 @@ function RelationshipDetailsPanel({
|
|
|
12948
13030
|
strokeLinejoin: "round",
|
|
12949
13031
|
className: "text-violet-400 flex-shrink-0"
|
|
12950
13032
|
},
|
|
12951
|
-
/* @__PURE__ */
|
|
12952
|
-
/* @__PURE__ */
|
|
12953
|
-
), /* @__PURE__ */
|
|
13033
|
+
/* @__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" }),
|
|
13034
|
+
/* @__PURE__ */ React22.createElement("line", { x1: "7", y1: "7", x2: "7.01", y2: "7" })
|
|
13035
|
+
), /* @__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
13036
|
"input",
|
|
12955
13037
|
{
|
|
12956
13038
|
type: "text",
|
|
@@ -12967,7 +13049,7 @@ function RelationshipDetailsPanel({
|
|
|
12967
13049
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
12968
13050
|
`
|
|
12969
13051
|
}
|
|
12970
|
-
)), /* @__PURE__ */
|
|
13052
|
+
)), /* @__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
13053
|
"input",
|
|
12972
13054
|
{
|
|
12973
13055
|
type: "text",
|
|
@@ -12984,7 +13066,7 @@ function RelationshipDetailsPanel({
|
|
|
12984
13066
|
${!canEdit ? "opacity-50 cursor-not-allowed" : ""}
|
|
12985
13067
|
`
|
|
12986
13068
|
}
|
|
12987
|
-
)))), /* @__PURE__ */
|
|
13069
|
+
)))), /* @__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
13070
|
DescriptionDisplay,
|
|
12989
13071
|
{
|
|
12990
13072
|
description,
|
|
@@ -12996,7 +13078,7 @@ function RelationshipDetailsPanel({
|
|
|
12996
13078
|
onImageClick: handleImageClickFromText,
|
|
12997
13079
|
onSaveDescription: handleSaveDescriptionInline
|
|
12998
13080
|
}
|
|
12999
|
-
), /* @__PURE__ */
|
|
13081
|
+
), /* @__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
13082
|
"button",
|
|
13001
13083
|
{
|
|
13002
13084
|
type: "button",
|
|
@@ -13004,8 +13086,8 @@ function RelationshipDetailsPanel({
|
|
|
13004
13086
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors border-r border-white/5",
|
|
13005
13087
|
title: "Modo de Leitura"
|
|
13006
13088
|
},
|
|
13007
|
-
/* @__PURE__ */
|
|
13008
|
-
), canEdit && /* @__PURE__ */
|
|
13089
|
+
/* @__PURE__ */ React22.createElement(FiBookOpen5, { size: 14 })
|
|
13090
|
+
), canEdit && /* @__PURE__ */ React22.createElement(
|
|
13009
13091
|
"button",
|
|
13010
13092
|
{
|
|
13011
13093
|
type: "button",
|
|
@@ -13013,24 +13095,24 @@ function RelationshipDetailsPanel({
|
|
|
13013
13095
|
className: "p-2 text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
13014
13096
|
title: "Editar descri\xE7\xE3o"
|
|
13015
13097
|
},
|
|
13016
|
-
/* @__PURE__ */
|
|
13017
|
-
)), !description && canEdit && /* @__PURE__ */
|
|
13098
|
+
/* @__PURE__ */ React22.createElement(FiEdit29, { size: 14 })
|
|
13099
|
+
)), !description && canEdit && /* @__PURE__ */ React22.createElement(
|
|
13018
13100
|
"div",
|
|
13019
13101
|
{
|
|
13020
13102
|
onClick: () => setIsDescriptionModalOpen(true),
|
|
13021
13103
|
className: "absolute inset-0 flex items-center justify-center text-xs text-slate-500 cursor-text"
|
|
13022
13104
|
},
|
|
13023
13105
|
"Adicionar descri\xE7\xE3o..."
|
|
13024
|
-
))), /* @__PURE__ */
|
|
13106
|
+
))), /* @__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
13107
|
"button",
|
|
13026
13108
|
{
|
|
13027
13109
|
type: "button",
|
|
13028
13110
|
onClick: handleAddProp,
|
|
13029
13111
|
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
13112
|
},
|
|
13031
|
-
/* @__PURE__ */
|
|
13113
|
+
/* @__PURE__ */ React22.createElement(FiPlus9, { size: 14 }),
|
|
13032
13114
|
" Adicionar"
|
|
13033
|
-
)), /* @__PURE__ */
|
|
13115
|
+
)), /* @__PURE__ */ React22.createElement("div", { className: "flex flex-col gap-3" }, customProps.map((prop, idx) => /* @__PURE__ */ React22.createElement(
|
|
13034
13116
|
CustomPropertyDisplay,
|
|
13035
13117
|
{
|
|
13036
13118
|
key: prop.id,
|
|
@@ -13044,7 +13126,7 @@ function RelationshipDetailsPanel({
|
|
|
13044
13126
|
onUploadFile,
|
|
13045
13127
|
disabled: !canEdit
|
|
13046
13128
|
}
|
|
13047
|
-
)), /* @__PURE__ */
|
|
13129
|
+
)), /* @__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
13130
|
"button",
|
|
13049
13131
|
{
|
|
13050
13132
|
onClick: onClose,
|
|
@@ -13052,7 +13134,7 @@ function RelationshipDetailsPanel({
|
|
|
13052
13134
|
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
13135
|
},
|
|
13054
13136
|
canEdit ? "Cancelar" : "Fechar"
|
|
13055
|
-
), canEdit && /* @__PURE__ */
|
|
13137
|
+
), canEdit && /* @__PURE__ */ React22.createElement(
|
|
13056
13138
|
"button",
|
|
13057
13139
|
{
|
|
13058
13140
|
onClick: () => handleSave(false),
|
|
@@ -13061,10 +13143,10 @@ function RelationshipDetailsPanel({
|
|
|
13061
13143
|
${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
13144
|
`
|
|
13063
13145
|
},
|
|
13064
|
-
isSaving && /* @__PURE__ */
|
|
13146
|
+
isSaving && /* @__PURE__ */ React22.createElement(FiLoader4, { className: "animate-spin" }),
|
|
13065
13147
|
isSaving ? "Salvando..." : "Salvar"
|
|
13066
13148
|
)))
|
|
13067
|
-
), isDescriptionModalOpen && /* @__PURE__ */
|
|
13149
|
+
), isDescriptionModalOpen && /* @__PURE__ */ React22.createElement(
|
|
13068
13150
|
DescriptionEditModal,
|
|
13069
13151
|
{
|
|
13070
13152
|
isOpen: isDescriptionModalOpen,
|
|
@@ -13086,7 +13168,7 @@ function RelationshipDetailsPanel({
|
|
|
13086
13168
|
}
|
|
13087
13169
|
|
|
13088
13170
|
// src/components/RelationshipContextMenu.jsx
|
|
13089
|
-
import
|
|
13171
|
+
import React23, { useLayoutEffect as useLayoutEffect4, useRef as useRef17, useState as useState22, useEffect as useEffect19, useMemo as useMemo10 } from "react";
|
|
13090
13172
|
function RelationshipContextMenu({
|
|
13091
13173
|
data,
|
|
13092
13174
|
userRole,
|
|
@@ -13143,7 +13225,7 @@ function RelationshipContextMenu({
|
|
|
13143
13225
|
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
13226
|
const canUpdate = ability.can("update", "Connection");
|
|
13145
13227
|
const canDelete = ability.can("delete", "Connection");
|
|
13146
|
-
return /* @__PURE__ */
|
|
13228
|
+
return /* @__PURE__ */ React23.createElement(
|
|
13147
13229
|
"div",
|
|
13148
13230
|
{
|
|
13149
13231
|
ref: menuRef,
|
|
@@ -13157,29 +13239,29 @@ function RelationshipContextMenu({
|
|
|
13157
13239
|
onContextMenu: swallow,
|
|
13158
13240
|
onDoubleClick: swallow
|
|
13159
13241
|
},
|
|
13160
|
-
/* @__PURE__ */
|
|
13161
|
-
/* @__PURE__ */
|
|
13242
|
+
/* @__PURE__ */ React23.createElement("div", { className: "h-[2px] bg-gradient-to-r from-teal-400/0 via-teal-400/70 to-teal-400/0" }),
|
|
13243
|
+
/* @__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
13244
|
"button",
|
|
13163
13245
|
{
|
|
13164
13246
|
onClick: () => setIsConfirmingDelete(false),
|
|
13165
13247
|
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
13248
|
},
|
|
13167
13249
|
"Cancelar"
|
|
13168
|
-
), /* @__PURE__ */
|
|
13250
|
+
), /* @__PURE__ */ React23.createElement(
|
|
13169
13251
|
"button",
|
|
13170
13252
|
{
|
|
13171
13253
|
onClick: () => onDelete == null ? void 0 : onDelete(data.linkObject),
|
|
13172
13254
|
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
13255
|
},
|
|
13174
13256
|
"Excluir"
|
|
13175
|
-
))) : /* @__PURE__ */
|
|
13257
|
+
))) : /* @__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
13258
|
"button",
|
|
13177
13259
|
{
|
|
13178
13260
|
onClick: () => onRelinkSource == null ? void 0 : onRelinkSource(data.linkObject),
|
|
13179
13261
|
className: baseButtonClass,
|
|
13180
13262
|
title: "Desconectar ponta ligada ao Source"
|
|
13181
13263
|
},
|
|
13182
|
-
/* @__PURE__ */
|
|
13264
|
+
/* @__PURE__ */ React23.createElement(
|
|
13183
13265
|
"svg",
|
|
13184
13266
|
{
|
|
13185
13267
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13192,18 +13274,18 @@ function RelationshipContextMenu({
|
|
|
13192
13274
|
strokeLinecap: "round",
|
|
13193
13275
|
strokeLinejoin: "round"
|
|
13194
13276
|
},
|
|
13195
|
-
/* @__PURE__ */
|
|
13196
|
-
/* @__PURE__ */
|
|
13277
|
+
/* @__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" }),
|
|
13278
|
+
/* @__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
13279
|
),
|
|
13198
|
-
/* @__PURE__ */
|
|
13199
|
-
), /* @__PURE__ */
|
|
13280
|
+
/* @__PURE__ */ React23.createElement("span", null, "Desconectar Source (", sourceName, ")")
|
|
13281
|
+
), /* @__PURE__ */ React23.createElement(
|
|
13200
13282
|
"button",
|
|
13201
13283
|
{
|
|
13202
13284
|
onClick: () => onRelinkTarget == null ? void 0 : onRelinkTarget(data.linkObject),
|
|
13203
13285
|
className: baseButtonClass,
|
|
13204
13286
|
title: "Desconectar ponta ligada ao Target"
|
|
13205
13287
|
},
|
|
13206
|
-
/* @__PURE__ */
|
|
13288
|
+
/* @__PURE__ */ React23.createElement(
|
|
13207
13289
|
"svg",
|
|
13208
13290
|
{
|
|
13209
13291
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13216,21 +13298,21 @@ function RelationshipContextMenu({
|
|
|
13216
13298
|
strokeLinecap: "round",
|
|
13217
13299
|
strokeLinejoin: "round"
|
|
13218
13300
|
},
|
|
13219
|
-
/* @__PURE__ */
|
|
13220
|
-
/* @__PURE__ */
|
|
13221
|
-
/* @__PURE__ */
|
|
13222
|
-
/* @__PURE__ */
|
|
13223
|
-
/* @__PURE__ */
|
|
13301
|
+
/* @__PURE__ */ React23.createElement("polyline", { points: "16 3 21 3 21 8" }),
|
|
13302
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "4", y1: "20", x2: "21", y2: "3" }),
|
|
13303
|
+
/* @__PURE__ */ React23.createElement("polyline", { points: "21 16 21 21 16 21" }),
|
|
13304
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "15", y1: "15", x2: "21", y2: "21" }),
|
|
13305
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "4", y1: "4", x2: "9", y2: "9" })
|
|
13224
13306
|
),
|
|
13225
|
-
/* @__PURE__ */
|
|
13226
|
-
), /* @__PURE__ */
|
|
13307
|
+
/* @__PURE__ */ React23.createElement("span", null, "Desconectar Target (", targetName, ")")
|
|
13308
|
+
), /* @__PURE__ */ React23.createElement("div", { className: "h-[1px] my-1 mx-1 bg-white/10" })), /* @__PURE__ */ React23.createElement(
|
|
13227
13309
|
"button",
|
|
13228
13310
|
{
|
|
13229
13311
|
onClick: () => onOpenDetails == null ? void 0 : onOpenDetails(data.linkObject),
|
|
13230
13312
|
className: baseButtonClass,
|
|
13231
13313
|
title: "Abrir detalhes da rela\xE7\xE3o"
|
|
13232
13314
|
},
|
|
13233
|
-
/* @__PURE__ */
|
|
13315
|
+
/* @__PURE__ */ React23.createElement(
|
|
13234
13316
|
"svg",
|
|
13235
13317
|
{
|
|
13236
13318
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13243,19 +13325,19 @@ function RelationshipContextMenu({
|
|
|
13243
13325
|
strokeLinecap: "round",
|
|
13244
13326
|
strokeLinejoin: "round"
|
|
13245
13327
|
},
|
|
13246
|
-
/* @__PURE__ */
|
|
13247
|
-
/* @__PURE__ */
|
|
13248
|
-
/* @__PURE__ */
|
|
13328
|
+
/* @__PURE__ */ React23.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
13329
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
|
|
13330
|
+
/* @__PURE__ */ React23.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "8" })
|
|
13249
13331
|
),
|
|
13250
|
-
/* @__PURE__ */
|
|
13251
|
-
), canDelete && /* @__PURE__ */
|
|
13332
|
+
/* @__PURE__ */ React23.createElement("span", null, "Abrir Detalhes")
|
|
13333
|
+
), 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
13334
|
"button",
|
|
13253
13335
|
{
|
|
13254
13336
|
onClick: () => setIsConfirmingDelete(true),
|
|
13255
13337
|
className: dangerButtonClass,
|
|
13256
13338
|
title: "Excluir esta conex\xE3o"
|
|
13257
13339
|
},
|
|
13258
|
-
/* @__PURE__ */
|
|
13340
|
+
/* @__PURE__ */ React23.createElement(
|
|
13259
13341
|
"svg",
|
|
13260
13342
|
{
|
|
13261
13343
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -13268,19 +13350,19 @@ function RelationshipContextMenu({
|
|
|
13268
13350
|
strokeLinecap: "round",
|
|
13269
13351
|
strokeLinejoin: "round"
|
|
13270
13352
|
},
|
|
13271
|
-
/* @__PURE__ */
|
|
13272
|
-
/* @__PURE__ */
|
|
13273
|
-
/* @__PURE__ */
|
|
13274
|
-
/* @__PURE__ */
|
|
13275
|
-
/* @__PURE__ */
|
|
13353
|
+
/* @__PURE__ */ React23.createElement("polyline", { points: "3 6 5 6 21 6" }),
|
|
13354
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6" }),
|
|
13355
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M10 11v6" }),
|
|
13356
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M14 11v6" }),
|
|
13357
|
+
/* @__PURE__ */ React23.createElement("path", { d: "M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2" })
|
|
13276
13358
|
),
|
|
13277
|
-
/* @__PURE__ */
|
|
13359
|
+
/* @__PURE__ */ React23.createElement("span", null, "Excluir conex\xE3o (", sourceName, " \u2192 ", targetName, ")")
|
|
13278
13360
|
)))))
|
|
13279
13361
|
);
|
|
13280
13362
|
}
|
|
13281
13363
|
|
|
13282
13364
|
// src/components/LoadingScreen.jsx
|
|
13283
|
-
import
|
|
13365
|
+
import React24 from "react";
|
|
13284
13366
|
var styles = {
|
|
13285
13367
|
loadingOverlay: {
|
|
13286
13368
|
position: "fixed",
|
|
@@ -13312,11 +13394,11 @@ var styles = {
|
|
|
13312
13394
|
`
|
|
13313
13395
|
};
|
|
13314
13396
|
function LoadingScreen() {
|
|
13315
|
-
return /* @__PURE__ */
|
|
13397
|
+
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
13398
|
}
|
|
13317
13399
|
|
|
13318
13400
|
// src/components/ImportParentFileModal.jsx
|
|
13319
|
-
import
|
|
13401
|
+
import React25, { useEffect as useEffect20, useState as useState23 } from "react";
|
|
13320
13402
|
function ImportParentFileModal({
|
|
13321
13403
|
isOpen,
|
|
13322
13404
|
onClose,
|
|
@@ -13397,13 +13479,13 @@ function ImportParentFileModal({
|
|
|
13397
13479
|
const swallow = (e) => e.stopPropagation();
|
|
13398
13480
|
const currentList = activeTab === "databases" ? availableDbs : availableViews;
|
|
13399
13481
|
const emptyMessage = activeTab === "databases" ? "Nenhum novo arquivo parent dispon\xEDvel." : "Nenhuma view dispon\xEDvel para importa\xE7\xE3o.";
|
|
13400
|
-
return /* @__PURE__ */
|
|
13482
|
+
return /* @__PURE__ */ React25.createElement(
|
|
13401
13483
|
"div",
|
|
13402
13484
|
{
|
|
13403
13485
|
className: "ui-overlay fixed inset-0 z-[1200] flex items-center justify-center bg-black/60 backdrop-blur-sm",
|
|
13404
13486
|
onClick: onClose
|
|
13405
13487
|
},
|
|
13406
|
-
/* @__PURE__ */
|
|
13488
|
+
/* @__PURE__ */ React25.createElement(
|
|
13407
13489
|
"div",
|
|
13408
13490
|
{
|
|
13409
13491
|
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 +13497,14 @@ function ImportParentFileModal({
|
|
|
13415
13497
|
onContextMenu: swallow,
|
|
13416
13498
|
onDoubleClick: swallow
|
|
13417
13499
|
},
|
|
13418
|
-
/* @__PURE__ */
|
|
13500
|
+
/* @__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
13501
|
"button",
|
|
13420
13502
|
{
|
|
13421
13503
|
onClick: onClose,
|
|
13422
13504
|
className: "p-2 rounded-md text-slate-400 hover:text-white hover:bg-white/10 transition-colors",
|
|
13423
13505
|
title: "Fechar"
|
|
13424
13506
|
},
|
|
13425
|
-
/* @__PURE__ */
|
|
13507
|
+
/* @__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
13508
|
"path",
|
|
13427
13509
|
{
|
|
13428
13510
|
fillRule: "evenodd",
|
|
@@ -13431,14 +13513,14 @@ function ImportParentFileModal({
|
|
|
13431
13513
|
}
|
|
13432
13514
|
))
|
|
13433
13515
|
)),
|
|
13434
|
-
/* @__PURE__ */
|
|
13516
|
+
/* @__PURE__ */ React25.createElement("div", { className: "flex px-6 border-b border-white/10 bg-white/5 flex-shrink-0" }, /* @__PURE__ */ React25.createElement(
|
|
13435
13517
|
"button",
|
|
13436
13518
|
{
|
|
13437
13519
|
onClick: () => setActiveTab("databases"),
|
|
13438
13520
|
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
13521
|
},
|
|
13440
13522
|
"Arquivos Parent"
|
|
13441
|
-
), /* @__PURE__ */
|
|
13523
|
+
), /* @__PURE__ */ React25.createElement(
|
|
13442
13524
|
"button",
|
|
13443
13525
|
{
|
|
13444
13526
|
onClick: () => setActiveTab("views"),
|
|
@@ -13446,24 +13528,24 @@ function ImportParentFileModal({
|
|
|
13446
13528
|
},
|
|
13447
13529
|
"Views (Ancestralidades)"
|
|
13448
13530
|
)),
|
|
13449
|
-
/* @__PURE__ */
|
|
13531
|
+
/* @__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
13532
|
"div",
|
|
13451
13533
|
{
|
|
13452
13534
|
key: item.id,
|
|
13453
13535
|
onClick: () => setSelectedItem(item),
|
|
13454
13536
|
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
13537
|
},
|
|
13456
|
-
/* @__PURE__ */
|
|
13457
|
-
item.description && /* @__PURE__ */
|
|
13458
|
-
)) : /* @__PURE__ */
|
|
13459
|
-
/* @__PURE__ */
|
|
13538
|
+
/* @__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")),
|
|
13539
|
+
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)
|
|
13540
|
+
)) : /* @__PURE__ */ React25.createElement("p", { className: "text-slate-400 text-center py-10" }, emptyMessage))),
|
|
13541
|
+
/* @__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
13542
|
"button",
|
|
13461
13543
|
{
|
|
13462
13544
|
onClick: onClose,
|
|
13463
13545
|
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
13546
|
},
|
|
13465
13547
|
"Cancelar"
|
|
13466
|
-
), /* @__PURE__ */
|
|
13548
|
+
), /* @__PURE__ */ React25.createElement(
|
|
13467
13549
|
"button",
|
|
13468
13550
|
{
|
|
13469
13551
|
onClick: handleConfirm,
|
|
@@ -13477,7 +13559,7 @@ function ImportParentFileModal({
|
|
|
13477
13559
|
}
|
|
13478
13560
|
|
|
13479
13561
|
// src/components/AncestryLinkDetailsPanel.jsx
|
|
13480
|
-
import
|
|
13562
|
+
import React26, { useState as useState24 } from "react";
|
|
13481
13563
|
import { FiBookOpen as FiBookOpen6 } from "react-icons/fi";
|
|
13482
13564
|
function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenReference, onMentionClick, onUploadFile, onHighlight }) {
|
|
13483
13565
|
var _a, _b, _c, _d;
|
|
@@ -13488,7 +13570,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13488
13570
|
const sourceName = ((_b = (_a = data.sourceNode) == null ? void 0 : _a.userData) == null ? void 0 : _b.name) || "Origem";
|
|
13489
13571
|
const targetName = ((_d = (_c = data.targetNode) == null ? void 0 : _c.userData) == null ? void 0 : _d.name) || "Destino";
|
|
13490
13572
|
const [isReadMode, setIsReadMode] = useState24(false);
|
|
13491
|
-
|
|
13573
|
+
React26.useEffect(() => {
|
|
13492
13574
|
return () => {
|
|
13493
13575
|
if (onHighlight) onHighlight(null);
|
|
13494
13576
|
};
|
|
@@ -13499,14 +13581,14 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13499
13581
|
onOpenImageViewer([{ name: name || "Imagem", value: url }], 0);
|
|
13500
13582
|
}
|
|
13501
13583
|
};
|
|
13502
|
-
return /* @__PURE__ */
|
|
13584
|
+
return /* @__PURE__ */ React26.createElement(
|
|
13503
13585
|
"div",
|
|
13504
13586
|
{
|
|
13505
13587
|
className: "ui-overlay fixed inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-[1200]",
|
|
13506
13588
|
onClick: onClose,
|
|
13507
13589
|
onPointerDown: swallow
|
|
13508
13590
|
},
|
|
13509
|
-
/* @__PURE__ */
|
|
13591
|
+
/* @__PURE__ */ React26.createElement(
|
|
13510
13592
|
"div",
|
|
13511
13593
|
{
|
|
13512
13594
|
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 +13596,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13514
13596
|
`,
|
|
13515
13597
|
onClick: swallow
|
|
13516
13598
|
},
|
|
13517
|
-
isReadMode ? /* @__PURE__ */
|
|
13599
|
+
isReadMode ? /* @__PURE__ */ React26.createElement(
|
|
13518
13600
|
DescriptionReadModePanel,
|
|
13519
13601
|
{
|
|
13520
13602
|
title: `${sourceName} \u2794 ${targetName}`,
|
|
@@ -13526,7 +13608,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13526
13608
|
onMentionClick,
|
|
13527
13609
|
onImageClick: handleImageClickFromText
|
|
13528
13610
|
}
|
|
13529
|
-
) : /* @__PURE__ */
|
|
13611
|
+
) : /* @__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
13612
|
"span",
|
|
13531
13613
|
{
|
|
13532
13614
|
className: "truncate max-w-[150px] cursor-help hover:text-blue-400 transition-colors",
|
|
@@ -13534,7 +13616,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13534
13616
|
onMouseLeave: () => onHighlight == null ? void 0 : onHighlight(null)
|
|
13535
13617
|
},
|
|
13536
13618
|
sourceName
|
|
13537
|
-
), /* @__PURE__ */
|
|
13619
|
+
), /* @__PURE__ */ React26.createElement("span", { className: "text-slate-500 text-sm" }, "\u2794"), /* @__PURE__ */ React26.createElement(
|
|
13538
13620
|
"span",
|
|
13539
13621
|
{
|
|
13540
13622
|
className: "truncate max-w-[150px] cursor-help hover:text-blue-400 transition-colors",
|
|
@@ -13542,15 +13624,15 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13542
13624
|
onMouseLeave: () => onHighlight == null ? void 0 : onHighlight(null)
|
|
13543
13625
|
},
|
|
13544
13626
|
targetName
|
|
13545
|
-
))), /* @__PURE__ */
|
|
13627
|
+
))), /* @__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
13628
|
"button",
|
|
13547
13629
|
{
|
|
13548
13630
|
onClick: () => setIsReadMode(true),
|
|
13549
13631
|
className: "p-1 text-slate-400 hover:text-white transition-colors",
|
|
13550
13632
|
title: "Modo de Leitura"
|
|
13551
13633
|
},
|
|
13552
|
-
/* @__PURE__ */
|
|
13553
|
-
)), /* @__PURE__ */
|
|
13634
|
+
/* @__PURE__ */ React26.createElement(FiBookOpen6, { size: 14 })
|
|
13635
|
+
)), /* @__PURE__ */ React26.createElement("div", { className: "bg-slate-800/40 rounded-lg border border-white/10 p-1 relative group" }, /* @__PURE__ */ React26.createElement(
|
|
13554
13636
|
DescriptionDisplay,
|
|
13555
13637
|
{
|
|
13556
13638
|
description,
|
|
@@ -13559,7 +13641,7 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13559
13641
|
onMentionClick,
|
|
13560
13642
|
onImageClick: handleImageClickFromText
|
|
13561
13643
|
}
|
|
13562
|
-
))), customProps.length > 0 && /* @__PURE__ */
|
|
13644
|
+
))), 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
13645
|
CustomPropertyDisplay,
|
|
13564
13646
|
{
|
|
13565
13647
|
key: prop.id,
|
|
@@ -13568,13 +13650,13 @@ function AncestryLinkDetailsPanel({ data, onClose, onOpenImageViewer, onOpenRefe
|
|
|
13568
13650
|
onOpenImageViewer,
|
|
13569
13651
|
onUploadFile
|
|
13570
13652
|
}
|
|
13571
|
-
)))), !description && customProps.length === 0 && /* @__PURE__ */
|
|
13653
|
+
)))), !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
13654
|
)
|
|
13573
13655
|
);
|
|
13574
13656
|
}
|
|
13575
13657
|
|
|
13576
13658
|
// src/components/Boards.jsx
|
|
13577
|
-
import
|
|
13659
|
+
import React29, {
|
|
13578
13660
|
useState as useState27,
|
|
13579
13661
|
useMemo as useMemo12,
|
|
13580
13662
|
useEffect as useEffect23,
|
|
@@ -13604,10 +13686,10 @@ import {
|
|
|
13604
13686
|
import { v4 as uuidv411 } from "uuid";
|
|
13605
13687
|
|
|
13606
13688
|
// src/components/RichGroupEditor.jsx
|
|
13607
|
-
import
|
|
13689
|
+
import React28, { useEffect as useEffect22, useRef as useRef19, useState as useState26, useCallback as useCallback4 } from "react";
|
|
13608
13690
|
|
|
13609
13691
|
// src/components/MentionPopover.jsx
|
|
13610
|
-
import
|
|
13692
|
+
import React27, { useEffect as useEffect21, useRef as useRef18, useState as useState25, useMemo as useMemo11 } from "react";
|
|
13611
13693
|
import { FiLayers as FiLayers6, FiCheckSquare as FiCheckSquare3, FiGitBranch as FiGitBranch3, FiBox } from "react-icons/fi";
|
|
13612
13694
|
var TYPE_CONFIG = {
|
|
13613
13695
|
ancestry: { Icon: FiLayers6, color: "text-indigo-400", label: "Ancestralidade" },
|
|
@@ -13655,7 +13737,7 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
|
|
|
13655
13737
|
if (el) el.scrollIntoView({ block: "nearest" });
|
|
13656
13738
|
}
|
|
13657
13739
|
}, [activeIndex]);
|
|
13658
|
-
return /* @__PURE__ */
|
|
13740
|
+
return /* @__PURE__ */ React27.createElement(
|
|
13659
13741
|
"div",
|
|
13660
13742
|
{
|
|
13661
13743
|
style: { top: position.top, left: position.left, position: "fixed", zIndex: 9999 },
|
|
@@ -13663,10 +13745,10 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
|
|
|
13663
13745
|
ref: listRef,
|
|
13664
13746
|
onMouseDown: (e) => e.preventDefault()
|
|
13665
13747
|
},
|
|
13666
|
-
filtered.length === 0 ? /* @__PURE__ */
|
|
13748
|
+
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
13749
|
const config = TYPE_CONFIG[item.type] || TYPE_CONFIG.node;
|
|
13668
13750
|
const { Icon } = config;
|
|
13669
|
-
return /* @__PURE__ */
|
|
13751
|
+
return /* @__PURE__ */ React27.createElement(
|
|
13670
13752
|
"div",
|
|
13671
13753
|
{
|
|
13672
13754
|
key: item.id,
|
|
@@ -13677,9 +13759,9 @@ function MentionPopover({ query, items, position, onSelect, onClose }) {
|
|
|
13677
13759
|
onMouseEnter: () => setActiveIndex(idx),
|
|
13678
13760
|
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
13761
|
},
|
|
13680
|
-
/* @__PURE__ */
|
|
13681
|
-
/* @__PURE__ */
|
|
13682
|
-
/* @__PURE__ */
|
|
13762
|
+
/* @__PURE__ */ React27.createElement(Icon, { size: 13, className: config.color }),
|
|
13763
|
+
/* @__PURE__ */ React27.createElement("span", { className: "flex-1 truncate font-medium" }, item.searchLabel || "Sem Nome"),
|
|
13764
|
+
/* @__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
13765
|
);
|
|
13684
13766
|
})
|
|
13685
13767
|
);
|
|
@@ -13749,7 +13831,7 @@ function domToContent(el) {
|
|
|
13749
13831
|
el.childNodes.forEach(walk);
|
|
13750
13832
|
return segments;
|
|
13751
13833
|
}
|
|
13752
|
-
var RichGroupEditor =
|
|
13834
|
+
var RichGroupEditor = React28.memo(function RichGroupEditor2({
|
|
13753
13835
|
content,
|
|
13754
13836
|
onChange,
|
|
13755
13837
|
onMentionClick,
|
|
@@ -13935,7 +14017,7 @@ var RichGroupEditor = React27.memo(function RichGroupEditor2({
|
|
|
13935
14017
|
}
|
|
13936
14018
|
setMentionState(null);
|
|
13937
14019
|
}, []);
|
|
13938
|
-
return /* @__PURE__ */
|
|
14020
|
+
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
14021
|
"div",
|
|
13940
14022
|
{
|
|
13941
14023
|
ref: editorRef,
|
|
@@ -13949,7 +14031,7 @@ var RichGroupEditor = React27.memo(function RichGroupEditor2({
|
|
|
13949
14031
|
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
14032
|
style: { overflowWrap: "break-word", wordBreak: "break-word" }
|
|
13951
14033
|
}
|
|
13952
|
-
), mentionState && !readOnly && /* @__PURE__ */
|
|
14034
|
+
), mentionState && !readOnly && /* @__PURE__ */ React28.createElement(
|
|
13953
14035
|
MentionPopover,
|
|
13954
14036
|
{
|
|
13955
14037
|
query: mentionState.query,
|
|
@@ -13967,9 +14049,9 @@ var RichGroupEditor_default = RichGroupEditor;
|
|
|
13967
14049
|
// src/components/Boards.jsx
|
|
13968
14050
|
var Tooltip = ({ text, children }) => {
|
|
13969
14051
|
if (!text) return children;
|
|
13970
|
-
return /* @__PURE__ */
|
|
14052
|
+
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
14053
|
};
|
|
13972
|
-
var BoardItem =
|
|
14054
|
+
var BoardItem = React29.memo(
|
|
13973
14055
|
({
|
|
13974
14056
|
item,
|
|
13975
14057
|
index,
|
|
@@ -14015,20 +14097,20 @@ var BoardItem = React28.memo(
|
|
|
14015
14097
|
onUpdate(item.id, { ...item, color: newColor });
|
|
14016
14098
|
};
|
|
14017
14099
|
if (isFolder) {
|
|
14018
|
-
return /* @__PURE__ */
|
|
14100
|
+
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
14101
|
"div",
|
|
14020
14102
|
{
|
|
14021
14103
|
onClick: () => onEnterFolder(item.id),
|
|
14022
14104
|
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
14105
|
},
|
|
14024
|
-
/* @__PURE__ */
|
|
14106
|
+
/* @__PURE__ */ React29.createElement(
|
|
14025
14107
|
"div",
|
|
14026
14108
|
{
|
|
14027
14109
|
className: "absolute inset-y-0 left-0 w-1 opacity-0 group-hover/folder:opacity-100 transition-opacity rounded-l-xl",
|
|
14028
14110
|
style: { background: `linear-gradient(to right, ${item.color || "#6366f1"}33, transparent)` }
|
|
14029
14111
|
}
|
|
14030
14112
|
),
|
|
14031
|
-
/* @__PURE__ */
|
|
14113
|
+
/* @__PURE__ */ React29.createElement(
|
|
14032
14114
|
"div",
|
|
14033
14115
|
{
|
|
14034
14116
|
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 +14120,9 @@ var BoardItem = React28.memo(
|
|
|
14038
14120
|
color: item.color || "#6366f1"
|
|
14039
14121
|
}
|
|
14040
14122
|
},
|
|
14041
|
-
/* @__PURE__ */
|
|
14123
|
+
/* @__PURE__ */ React29.createElement(FiFolder3, { size: 18 })
|
|
14042
14124
|
),
|
|
14043
|
-
/* @__PURE__ */
|
|
14125
|
+
/* @__PURE__ */ React29.createElement("div", { className: "flex-1 min-w-0 flex flex-col justify-center" }, canEdit ? /* @__PURE__ */ React29.createElement(
|
|
14044
14126
|
"input",
|
|
14045
14127
|
{
|
|
14046
14128
|
type: "text",
|
|
@@ -14050,8 +14132,8 @@ var BoardItem = React28.memo(
|
|
|
14050
14132
|
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
14133
|
placeholder: "Nome..."
|
|
14052
14134
|
}
|
|
14053
|
-
) : /* @__PURE__ */
|
|
14054
|
-
canEdit && /* @__PURE__ */
|
|
14135
|
+
) : /* @__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")),
|
|
14136
|
+
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
14137
|
ColorPicker,
|
|
14056
14138
|
{
|
|
14057
14139
|
isCompact: true,
|
|
@@ -14059,7 +14141,7 @@ var BoardItem = React28.memo(
|
|
|
14059
14141
|
onChange: handleColorChange,
|
|
14060
14142
|
disabled: !canEdit
|
|
14061
14143
|
}
|
|
14062
|
-
)), /* @__PURE__ */
|
|
14144
|
+
)), /* @__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
14145
|
"button",
|
|
14064
14146
|
{
|
|
14065
14147
|
onClick: (e) => {
|
|
@@ -14069,8 +14151,8 @@ var BoardItem = React28.memo(
|
|
|
14069
14151
|
disabled: !canMoveUp,
|
|
14070
14152
|
className: `p-1 rounded transition-colors ${!canMoveUp ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
14071
14153
|
},
|
|
14072
|
-
/* @__PURE__ */
|
|
14073
|
-
)), /* @__PURE__ */
|
|
14154
|
+
/* @__PURE__ */ React29.createElement(FiArrowUp, { size: 14 })
|
|
14155
|
+
)), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ React29.createElement(
|
|
14074
14156
|
"button",
|
|
14075
14157
|
{
|
|
14076
14158
|
onClick: (e) => {
|
|
@@ -14080,8 +14162,8 @@ var BoardItem = React28.memo(
|
|
|
14080
14162
|
disabled: !canMoveDown,
|
|
14081
14163
|
className: `p-1 rounded transition-colors ${!canMoveDown ? "text-slate-800 cursor-not-allowed" : "text-slate-400 hover:text-white hover:bg-white/10"}`
|
|
14082
14164
|
},
|
|
14083
|
-
/* @__PURE__ */
|
|
14084
|
-
)), /* @__PURE__ */
|
|
14165
|
+
/* @__PURE__ */ React29.createElement(FiArrowDown, { size: 14 })
|
|
14166
|
+
)), /* @__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
14167
|
"button",
|
|
14086
14168
|
{
|
|
14087
14169
|
onClick: (e) => {
|
|
@@ -14090,8 +14172,8 @@ var BoardItem = React28.memo(
|
|
|
14090
14172
|
},
|
|
14091
14173
|
className: "p-1 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
14092
14174
|
},
|
|
14093
|
-
/* @__PURE__ */
|
|
14094
|
-
)), showIndentDown && /* @__PURE__ */
|
|
14175
|
+
/* @__PURE__ */ React29.createElement(FiArrowLeft3, { size: 14 })
|
|
14176
|
+
)), showIndentDown && /* @__PURE__ */ React29.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ React29.createElement(
|
|
14095
14177
|
"button",
|
|
14096
14178
|
{
|
|
14097
14179
|
onClick: (e) => {
|
|
@@ -14100,8 +14182,8 @@ var BoardItem = React28.memo(
|
|
|
14100
14182
|
},
|
|
14101
14183
|
className: "p-1 text-slate-400 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
14102
14184
|
},
|
|
14103
|
-
/* @__PURE__ */
|
|
14104
|
-
)), !isAtRoot && /* @__PURE__ */
|
|
14185
|
+
/* @__PURE__ */ React29.createElement(FiArrowRight2, { size: 14 })
|
|
14186
|
+
)), !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
14187
|
"button",
|
|
14106
14188
|
{
|
|
14107
14189
|
onClick: (e) => {
|
|
@@ -14110,8 +14192,8 @@ var BoardItem = React28.memo(
|
|
|
14110
14192
|
},
|
|
14111
14193
|
className: `p-1 rounded text-slate-400 hover:text-white hover:bg-white/10 transition-colors`
|
|
14112
14194
|
},
|
|
14113
|
-
/* @__PURE__ */
|
|
14114
|
-
))), /* @__PURE__ */
|
|
14195
|
+
/* @__PURE__ */ React29.createElement(FiCornerUpLeft3, { size: 14 })
|
|
14196
|
+
))), /* @__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
14197
|
"button",
|
|
14116
14198
|
{
|
|
14117
14199
|
onClick: (e) => {
|
|
@@ -14120,11 +14202,11 @@ var BoardItem = React28.memo(
|
|
|
14120
14202
|
},
|
|
14121
14203
|
className: "p-1 text-slate-500 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
14122
14204
|
},
|
|
14123
|
-
/* @__PURE__ */
|
|
14205
|
+
/* @__PURE__ */ React29.createElement(FiTrash23, { size: 14 })
|
|
14124
14206
|
))))
|
|
14125
14207
|
));
|
|
14126
14208
|
}
|
|
14127
|
-
return /* @__PURE__ */
|
|
14209
|
+
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
14210
|
RichGroupEditor_default,
|
|
14129
14211
|
{
|
|
14130
14212
|
content: item.content,
|
|
@@ -14134,61 +14216,61 @@ var BoardItem = React28.memo(
|
|
|
14134
14216
|
readOnly: !canEdit,
|
|
14135
14217
|
placeholder: "Escreva sobre este grupo de texto\u2026 ou @ para mencionar"
|
|
14136
14218
|
}
|
|
14137
|
-
), canEdit && /* @__PURE__ */
|
|
14219
|
+
), 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
14220
|
"button",
|
|
14139
14221
|
{
|
|
14140
14222
|
onClick: () => onAddSubgroup(item.id, "text_group"),
|
|
14141
14223
|
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
14224
|
title: "Criar Subgrupo de Texto"
|
|
14143
14225
|
},
|
|
14144
|
-
/* @__PURE__ */
|
|
14145
|
-
/* @__PURE__ */
|
|
14146
|
-
)), /* @__PURE__ */
|
|
14226
|
+
/* @__PURE__ */ React29.createElement(FiPlus10, { size: 12 }),
|
|
14227
|
+
/* @__PURE__ */ React29.createElement("span", null, "Subgrupo")
|
|
14228
|
+
)), /* @__PURE__ */ React29.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ React29.createElement(Tooltip, { text: "Subir" }, /* @__PURE__ */ React29.createElement(
|
|
14147
14229
|
"button",
|
|
14148
14230
|
{
|
|
14149
14231
|
onClick: () => onMoveUp(item.id),
|
|
14150
14232
|
disabled: !canMoveUp,
|
|
14151
14233
|
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
14234
|
},
|
|
14153
|
-
/* @__PURE__ */
|
|
14154
|
-
)), /* @__PURE__ */
|
|
14235
|
+
/* @__PURE__ */ React29.createElement(FiArrowUp, { size: 14 })
|
|
14236
|
+
)), /* @__PURE__ */ React29.createElement(Tooltip, { text: "Descer" }, /* @__PURE__ */ React29.createElement(
|
|
14155
14237
|
"button",
|
|
14156
14238
|
{
|
|
14157
14239
|
onClick: () => onMoveDown(item.id),
|
|
14158
14240
|
disabled: !canMoveDown,
|
|
14159
14241
|
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
14242
|
},
|
|
14161
|
-
/* @__PURE__ */
|
|
14162
|
-
)), /* @__PURE__ */
|
|
14243
|
+
/* @__PURE__ */ React29.createElement(FiArrowDown, { size: 14 })
|
|
14244
|
+
)), /* @__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
14245
|
"button",
|
|
14164
14246
|
{
|
|
14165
14247
|
onClick: () => onIndent(item.id),
|
|
14166
14248
|
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
14167
14249
|
},
|
|
14168
|
-
/* @__PURE__ */
|
|
14169
|
-
)), showIndentDown && /* @__PURE__ */
|
|
14250
|
+
/* @__PURE__ */ React29.createElement(FiArrowLeft3, { size: 14 })
|
|
14251
|
+
)), showIndentDown && /* @__PURE__ */ React29.createElement(Tooltip, { text: getIndentDownTooltip() }, /* @__PURE__ */ React29.createElement(
|
|
14170
14252
|
"button",
|
|
14171
14253
|
{
|
|
14172
14254
|
onClick: () => onIndentDown(item.id),
|
|
14173
14255
|
className: "p-1.5 text-slate-500 hover:text-white hover:bg-white/10 rounded transition-colors"
|
|
14174
14256
|
},
|
|
14175
|
-
/* @__PURE__ */
|
|
14176
|
-
)), !isAtRoot && /* @__PURE__ */
|
|
14257
|
+
/* @__PURE__ */ React29.createElement(FiArrowRight2, { size: 14 })
|
|
14258
|
+
)), !isAtRoot && /* @__PURE__ */ React29.createElement(Tooltip, { text: "Desaninhar / Recuar n\xEDvel" }, /* @__PURE__ */ React29.createElement(
|
|
14177
14259
|
"button",
|
|
14178
14260
|
{
|
|
14179
14261
|
onClick: () => onOutdent(item.id),
|
|
14180
14262
|
disabled: !onOutdent,
|
|
14181
14263
|
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
14264
|
},
|
|
14183
|
-
/* @__PURE__ */
|
|
14184
|
-
)), /* @__PURE__ */
|
|
14265
|
+
/* @__PURE__ */ React29.createElement(FiCornerUpLeft3, { size: 14 })
|
|
14266
|
+
)), /* @__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
14267
|
"button",
|
|
14186
14268
|
{
|
|
14187
14269
|
onClick: () => onDelete(item.id),
|
|
14188
14270
|
className: "p-1.5 text-slate-600 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors"
|
|
14189
14271
|
},
|
|
14190
|
-
/* @__PURE__ */
|
|
14191
|
-
))))), item.children && item.children.length > 0 && /* @__PURE__ */
|
|
14272
|
+
/* @__PURE__ */ React29.createElement(FiTrash23, { size: 14 })
|
|
14273
|
+
))))), item.children && item.children.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "ml-2" }, item.children.map((child, idx) => /* @__PURE__ */ React29.createElement(
|
|
14192
14274
|
BoardItem,
|
|
14193
14275
|
{
|
|
14194
14276
|
key: child.id,
|
|
@@ -14514,72 +14596,72 @@ function Boards({
|
|
|
14514
14596
|
setNavigationStack([]);
|
|
14515
14597
|
}, []);
|
|
14516
14598
|
if (!isOpen) return null;
|
|
14517
|
-
return /* @__PURE__ */
|
|
14599
|
+
return /* @__PURE__ */ React29.createElement(
|
|
14518
14600
|
"div",
|
|
14519
14601
|
{
|
|
14520
14602
|
className: "fixed inset-0 z-[2200] bg-black/80 backdrop-blur-sm flex items-center justify-center p-2",
|
|
14521
14603
|
onClick: onClose
|
|
14522
14604
|
},
|
|
14523
|
-
/* @__PURE__ */
|
|
14605
|
+
/* @__PURE__ */ React29.createElement(
|
|
14524
14606
|
"div",
|
|
14525
14607
|
{
|
|
14526
14608
|
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
14609
|
onClick: (e) => e.stopPropagation()
|
|
14528
14610
|
},
|
|
14529
|
-
/* @__PURE__ */
|
|
14611
|
+
/* @__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
14612
|
FiLoader5,
|
|
14531
14613
|
{
|
|
14532
14614
|
className: "animate-spin text-indigo-400",
|
|
14533
14615
|
size: 12
|
|
14534
14616
|
}
|
|
14535
|
-
), /* @__PURE__ */
|
|
14617
|
+
), /* @__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
14618
|
"button",
|
|
14537
14619
|
{
|
|
14538
14620
|
onClick: () => handleAddItem("folder"),
|
|
14539
14621
|
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
14622
|
},
|
|
14541
|
-
/* @__PURE__ */
|
|
14542
|
-
/* @__PURE__ */
|
|
14543
|
-
), /* @__PURE__ */
|
|
14623
|
+
/* @__PURE__ */ React29.createElement(FiPlus10, { size: 14, className: "text-amber-400" }),
|
|
14624
|
+
/* @__PURE__ */ React29.createElement("span", { className: "hidden sm:inline" }, "Pasta")
|
|
14625
|
+
), /* @__PURE__ */ React29.createElement(
|
|
14544
14626
|
"button",
|
|
14545
14627
|
{
|
|
14546
14628
|
onClick: () => handleAddItem("text_group"),
|
|
14547
14629
|
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
14630
|
},
|
|
14549
|
-
/* @__PURE__ */
|
|
14550
|
-
/* @__PURE__ */
|
|
14551
|
-
)), /* @__PURE__ */
|
|
14631
|
+
/* @__PURE__ */ React29.createElement(FiPlus10, { size: 14, className: "text-indigo-400" }),
|
|
14632
|
+
/* @__PURE__ */ React29.createElement("span", { className: "hidden sm:inline" }, "Texto")
|
|
14633
|
+
)), /* @__PURE__ */ React29.createElement(
|
|
14552
14634
|
"button",
|
|
14553
14635
|
{
|
|
14554
14636
|
onClick: onClose,
|
|
14555
14637
|
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
14638
|
},
|
|
14557
|
-
/* @__PURE__ */
|
|
14639
|
+
/* @__PURE__ */ React29.createElement(FiX8, { size: 16 })
|
|
14558
14640
|
))),
|
|
14559
|
-
/* @__PURE__ */
|
|
14641
|
+
/* @__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
14642
|
"button",
|
|
14561
14643
|
{
|
|
14562
14644
|
onClick: navigateHome,
|
|
14563
14645
|
className: `hover:text-white transition-colors flex items-center gap-1 ${navigationStack.length === 0 ? "text-indigo-400" : ""}`
|
|
14564
14646
|
},
|
|
14565
14647
|
"Home"
|
|
14566
|
-
), currentPath.map((folder, idx) => /* @__PURE__ */
|
|
14648
|
+
), 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
14649
|
"button",
|
|
14568
14650
|
{
|
|
14569
14651
|
onClick: () => navigateToBreadcrumb(idx),
|
|
14570
14652
|
className: `hover:text-white transition-colors ${idx === currentPath.length - 1 ? "text-indigo-400" : ""}`
|
|
14571
14653
|
},
|
|
14572
14654
|
folder.name || "Sem Nome"
|
|
14573
|
-
))), navigationStack.length > 0 && /* @__PURE__ */
|
|
14655
|
+
))), navigationStack.length > 0 && /* @__PURE__ */ React29.createElement("div", { className: "ml-auto" }, /* @__PURE__ */ React29.createElement(
|
|
14574
14656
|
"button",
|
|
14575
14657
|
{
|
|
14576
14658
|
onClick: navigateUp,
|
|
14577
14659
|
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
14660
|
},
|
|
14579
|
-
/* @__PURE__ */
|
|
14580
|
-
/* @__PURE__ */
|
|
14661
|
+
/* @__PURE__ */ React29.createElement(FiArrowLeft3, { size: 10 }),
|
|
14662
|
+
/* @__PURE__ */ React29.createElement("span", null, "Voltar")
|
|
14581
14663
|
))),
|
|
14582
|
-
/* @__PURE__ */
|
|
14664
|
+
/* @__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
14665
|
BoardItem,
|
|
14584
14666
|
{
|
|
14585
14667
|
key: item.id,
|
|
@@ -14602,13 +14684,13 @@ function Boards({
|
|
|
14602
14684
|
isAtRoot: navigationStack.length === 0
|
|
14603
14685
|
}
|
|
14604
14686
|
))),
|
|
14605
|
-
/* @__PURE__ */
|
|
14687
|
+
/* @__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
14688
|
)
|
|
14607
14689
|
);
|
|
14608
14690
|
}
|
|
14609
14691
|
|
|
14610
14692
|
// src/components/MilestoneManager.jsx
|
|
14611
|
-
import
|
|
14693
|
+
import React30, { useState as useState28 } from "react";
|
|
14612
14694
|
import { FiTarget as FiTarget4, FiPlus as FiPlus11, FiTrash2 as FiTrash24, FiX as FiX9, FiCheck as FiCheck12, FiPauseCircle, FiPlayCircle } from "react-icons/fi";
|
|
14613
14695
|
function MilestoneManager({
|
|
14614
14696
|
isOpen,
|
|
@@ -14642,27 +14724,27 @@ function MilestoneManager({
|
|
|
14642
14724
|
};
|
|
14643
14725
|
if (!isOpen) return null;
|
|
14644
14726
|
const swallow = (e) => e.stopPropagation();
|
|
14645
|
-
return /* @__PURE__ */
|
|
14727
|
+
return /* @__PURE__ */ React30.createElement(
|
|
14646
14728
|
"div",
|
|
14647
14729
|
{
|
|
14648
14730
|
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
14731
|
onClick: onClose
|
|
14650
14732
|
},
|
|
14651
|
-
/* @__PURE__ */
|
|
14733
|
+
/* @__PURE__ */ React30.createElement(
|
|
14652
14734
|
"div",
|
|
14653
14735
|
{
|
|
14654
14736
|
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
14737
|
onClick: swallow
|
|
14656
14738
|
},
|
|
14657
|
-
/* @__PURE__ */
|
|
14739
|
+
/* @__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
14740
|
"button",
|
|
14659
14741
|
{
|
|
14660
14742
|
onClick: onClose,
|
|
14661
14743
|
className: "p-2 rounded-full hover:bg-white/10 text-slate-400 hover:text-white transition-colors"
|
|
14662
14744
|
},
|
|
14663
|
-
/* @__PURE__ */
|
|
14745
|
+
/* @__PURE__ */ React30.createElement(FiX9, { size: 20 })
|
|
14664
14746
|
)),
|
|
14665
|
-
/* @__PURE__ */
|
|
14747
|
+
/* @__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
14748
|
"input",
|
|
14667
14749
|
{
|
|
14668
14750
|
type: "text",
|
|
@@ -14672,47 +14754,47 @@ function MilestoneManager({
|
|
|
14672
14754
|
placeholder: "Adicionar novo milestone...",
|
|
14673
14755
|
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
14756
|
}
|
|
14675
|
-
), /* @__PURE__ */
|
|
14757
|
+
), /* @__PURE__ */ React30.createElement(
|
|
14676
14758
|
"button",
|
|
14677
14759
|
{
|
|
14678
14760
|
onClick: handleAddMilestone,
|
|
14679
14761
|
disabled: !newMilestoneName.trim(),
|
|
14680
14762
|
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
14763
|
},
|
|
14682
|
-
/* @__PURE__ */
|
|
14764
|
+
/* @__PURE__ */ React30.createElement(FiPlus11, { size: 18 }),
|
|
14683
14765
|
"Adicionar"
|
|
14684
14766
|
))),
|
|
14685
|
-
/* @__PURE__ */
|
|
14767
|
+
/* @__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
14768
|
"div",
|
|
14687
14769
|
{
|
|
14688
14770
|
key: ms.id,
|
|
14689
14771
|
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
14772
|
},
|
|
14691
|
-
/* @__PURE__ */
|
|
14773
|
+
/* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-3 min-w-0" }, /* @__PURE__ */ React30.createElement(
|
|
14692
14774
|
"div",
|
|
14693
14775
|
{
|
|
14694
14776
|
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
14777
|
}
|
|
14696
|
-
), /* @__PURE__ */
|
|
14697
|
-
/* @__PURE__ */
|
|
14778
|
+
), /* @__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"))),
|
|
14779
|
+
/* @__PURE__ */ React30.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React30.createElement(
|
|
14698
14780
|
"button",
|
|
14699
14781
|
{
|
|
14700
14782
|
onClick: () => handleToggleMilestoneStatus(ms.id),
|
|
14701
14783
|
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
14784
|
title: ms.status === "active" ? "Inativar" : "Ativar"
|
|
14703
14785
|
},
|
|
14704
|
-
ms.status === "active" ? /* @__PURE__ */
|
|
14705
|
-
), /* @__PURE__ */
|
|
14786
|
+
ms.status === "active" ? /* @__PURE__ */ React30.createElement(FiPauseCircle, { size: 18 }) : /* @__PURE__ */ React30.createElement(FiPlayCircle, { size: 18 })
|
|
14787
|
+
), /* @__PURE__ */ React30.createElement(
|
|
14706
14788
|
"button",
|
|
14707
14789
|
{
|
|
14708
14790
|
onClick: () => handleRemoveMilestone(ms.id),
|
|
14709
14791
|
className: "p-2 rounded-lg hover:bg-red-500/20 text-slate-500 hover:text-red-400 transition-all",
|
|
14710
14792
|
title: "Remover"
|
|
14711
14793
|
},
|
|
14712
|
-
/* @__PURE__ */
|
|
14794
|
+
/* @__PURE__ */ React30.createElement(FiTrash24, { size: 18 })
|
|
14713
14795
|
))
|
|
14714
|
-
))) : /* @__PURE__ */
|
|
14715
|
-
/* @__PURE__ */
|
|
14796
|
+
))) : /* @__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."))),
|
|
14797
|
+
/* @__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
14798
|
)
|
|
14717
14799
|
);
|
|
14718
14800
|
}
|
|
@@ -19402,10 +19484,10 @@ function XViewScene({
|
|
|
19402
19484
|
// <-- handleCancelQuest adicionado aqui
|
|
19403
19485
|
]);
|
|
19404
19486
|
if (isLoading || status === "loading" || permissionStatus === "loading") {
|
|
19405
|
-
return /* @__PURE__ */
|
|
19487
|
+
return /* @__PURE__ */ React31.createElement(LoadingScreen, null);
|
|
19406
19488
|
}
|
|
19407
19489
|
if (permissionStatus === "denied") {
|
|
19408
|
-
return /* @__PURE__ */
|
|
19490
|
+
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
19491
|
"svg",
|
|
19410
19492
|
{
|
|
19411
19493
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -19415,7 +19497,7 @@ function XViewScene({
|
|
|
19415
19497
|
stroke: "currentColor",
|
|
19416
19498
|
className: "w-16 h-16 mx-auto"
|
|
19417
19499
|
},
|
|
19418
|
-
/* @__PURE__ */
|
|
19500
|
+
/* @__PURE__ */ React31.createElement(
|
|
19419
19501
|
"path",
|
|
19420
19502
|
{
|
|
19421
19503
|
strokeLinecap: "round",
|
|
@@ -19423,13 +19505,13 @@ function XViewScene({
|
|
|
19423
19505
|
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
19506
|
}
|
|
19425
19507
|
)
|
|
19426
|
-
)), /* @__PURE__ */
|
|
19508
|
+
)), /* @__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
19509
|
"button",
|
|
19428
19510
|
{
|
|
19429
19511
|
onClick: handleNavigateBack,
|
|
19430
19512
|
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
19513
|
},
|
|
19432
|
-
/* @__PURE__ */
|
|
19514
|
+
/* @__PURE__ */ React31.createElement(
|
|
19433
19515
|
"svg",
|
|
19434
19516
|
{
|
|
19435
19517
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -19439,7 +19521,7 @@ function XViewScene({
|
|
|
19439
19521
|
stroke: "currentColor",
|
|
19440
19522
|
className: "w-5 h-5"
|
|
19441
19523
|
},
|
|
19442
|
-
/* @__PURE__ */
|
|
19524
|
+
/* @__PURE__ */ React31.createElement(
|
|
19443
19525
|
"path",
|
|
19444
19526
|
{
|
|
19445
19527
|
strokeLinecap: "round",
|
|
@@ -19451,7 +19533,7 @@ function XViewScene({
|
|
|
19451
19533
|
"Voltar para o X.View"
|
|
19452
19534
|
)));
|
|
19453
19535
|
}
|
|
19454
|
-
return /* @__PURE__ */
|
|
19536
|
+
return /* @__PURE__ */ React31.createElement(
|
|
19455
19537
|
"div",
|
|
19456
19538
|
{
|
|
19457
19539
|
ref: mountRef,
|
|
@@ -19463,7 +19545,7 @@ function XViewScene({
|
|
|
19463
19545
|
cursor: stateRef.current.connection.isActive || stateRef.current.relink.isActive || ancestryMode.isActive ? "crosshair" : creationMode.isActive ? "default" : "grab"
|
|
19464
19546
|
}
|
|
19465
19547
|
},
|
|
19466
|
-
userPermissionRole !== "link_viewer" && /* @__PURE__ */
|
|
19548
|
+
userPermissionRole !== "link_viewer" && /* @__PURE__ */ React31.createElement(
|
|
19467
19549
|
XViewSidebar,
|
|
19468
19550
|
{
|
|
19469
19551
|
dbNodes: searchableDbNodes,
|
|
@@ -19488,7 +19570,7 @@ function XViewScene({
|
|
|
19488
19570
|
onOpenMilestoneManager: () => setIsMilestoneManagerOpen(true)
|
|
19489
19571
|
}
|
|
19490
19572
|
),
|
|
19491
|
-
creationMode.isActive && /* @__PURE__ */
|
|
19573
|
+
creationMode.isActive && /* @__PURE__ */ React31.createElement(
|
|
19492
19574
|
InSceneCreationForm,
|
|
19493
19575
|
{
|
|
19494
19576
|
onSave: (data) => userActionHandlers.handleSaveNode(actionHandlerContext, data),
|
|
@@ -19521,7 +19603,7 @@ function XViewScene({
|
|
|
19521
19603
|
create_google_doc_action
|
|
19522
19604
|
}
|
|
19523
19605
|
),
|
|
19524
|
-
versionMode.isActive && /* @__PURE__ */
|
|
19606
|
+
versionMode.isActive && /* @__PURE__ */ React31.createElement(
|
|
19525
19607
|
InSceneVersionForm,
|
|
19526
19608
|
{
|
|
19527
19609
|
onSave: (data) => userActionHandlers.handleSaveVersionNode(actionHandlerContext, data),
|
|
@@ -19547,7 +19629,7 @@ function XViewScene({
|
|
|
19547
19629
|
availableAncestries: allAvailableAncestries
|
|
19548
19630
|
}
|
|
19549
19631
|
),
|
|
19550
|
-
questMode.isActive && /* @__PURE__ */
|
|
19632
|
+
questMode.isActive && /* @__PURE__ */ React31.createElement(
|
|
19551
19633
|
InSceneQuestForm,
|
|
19552
19634
|
{
|
|
19553
19635
|
onSave: (data) => handleSaveQuestNode(actionHandlerContext, data),
|
|
@@ -19576,7 +19658,7 @@ function XViewScene({
|
|
|
19576
19658
|
create_google_doc_action
|
|
19577
19659
|
}
|
|
19578
19660
|
),
|
|
19579
|
-
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */
|
|
19661
|
+
readingMode.isActive && readingMode.ancestry && /* @__PURE__ */ React31.createElement(
|
|
19580
19662
|
"div",
|
|
19581
19663
|
{
|
|
19582
19664
|
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 +19671,7 @@ function XViewScene({
|
|
|
19589
19671
|
maxWidth: "92vw"
|
|
19590
19672
|
}
|
|
19591
19673
|
},
|
|
19592
|
-
/* @__PURE__ */
|
|
19674
|
+
/* @__PURE__ */ React31.createElement(
|
|
19593
19675
|
"div",
|
|
19594
19676
|
{
|
|
19595
19677
|
onPointerDown: (e) => {
|
|
@@ -19600,7 +19682,7 @@ function XViewScene({
|
|
|
19600
19682
|
title: "Arraste para redimensionar"
|
|
19601
19683
|
}
|
|
19602
19684
|
),
|
|
19603
|
-
/* @__PURE__ */
|
|
19685
|
+
/* @__PURE__ */ React31.createElement(
|
|
19604
19686
|
DescriptionReadModePanel,
|
|
19605
19687
|
{
|
|
19606
19688
|
key: readingMode.branchStack.length > 0 ? readingMode.branchStack[readingMode.branchStack.length - 1].branchId : readingMode.ancestry.ancestry_id,
|
|
@@ -19635,7 +19717,7 @@ function XViewScene({
|
|
|
19635
19717
|
}
|
|
19636
19718
|
)
|
|
19637
19719
|
),
|
|
19638
|
-
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */
|
|
19720
|
+
ancestryMode.isActive && ancestryMode.tree && /* @__PURE__ */ React31.createElement(
|
|
19639
19721
|
CreateAncestryPanel,
|
|
19640
19722
|
{
|
|
19641
19723
|
ancestryMode,
|
|
@@ -19671,7 +19753,7 @@ function XViewScene({
|
|
|
19671
19753
|
onRenderAbstractionTree: (data, targetId) => handleRenderAbstractionTree(data, targetId)
|
|
19672
19754
|
}
|
|
19673
19755
|
),
|
|
19674
|
-
editingAncestryRel.visible && /* @__PURE__ */
|
|
19756
|
+
editingAncestryRel.visible && /* @__PURE__ */ React31.createElement(
|
|
19675
19757
|
AncestryRelationshipPanel,
|
|
19676
19758
|
{
|
|
19677
19759
|
data: editingAncestryRel.data,
|
|
@@ -19685,7 +19767,7 @@ function XViewScene({
|
|
|
19685
19767
|
onUploadFile: upload_file_action
|
|
19686
19768
|
}
|
|
19687
19769
|
),
|
|
19688
|
-
detailsNode && detailsNode.is_quest && /* @__PURE__ */
|
|
19770
|
+
detailsNode && detailsNode.is_quest && /* @__PURE__ */ React31.createElement(
|
|
19689
19771
|
QuestDetailsPanel,
|
|
19690
19772
|
{
|
|
19691
19773
|
node: detailsNode,
|
|
@@ -19712,7 +19794,7 @@ function XViewScene({
|
|
|
19712
19794
|
create_google_doc_action
|
|
19713
19795
|
}
|
|
19714
19796
|
),
|
|
19715
|
-
detailsNode && !detailsNode.is_quest && /* @__PURE__ */
|
|
19797
|
+
detailsNode && !detailsNode.is_quest && /* @__PURE__ */ React31.createElement(
|
|
19716
19798
|
NodeDetailsPanel,
|
|
19717
19799
|
{
|
|
19718
19800
|
node: detailsNode,
|
|
@@ -19745,7 +19827,7 @@ function XViewScene({
|
|
|
19745
19827
|
create_google_doc_action
|
|
19746
19828
|
}
|
|
19747
19829
|
),
|
|
19748
|
-
detailsLink && /* @__PURE__ */
|
|
19830
|
+
detailsLink && /* @__PURE__ */ React31.createElement(
|
|
19749
19831
|
RelationshipDetailsPanel,
|
|
19750
19832
|
{
|
|
19751
19833
|
link: detailsLink,
|
|
@@ -19760,7 +19842,7 @@ function XViewScene({
|
|
|
19760
19842
|
onHighlight: handleReadModeHighlight
|
|
19761
19843
|
}
|
|
19762
19844
|
),
|
|
19763
|
-
ancestryLinkDetails && /* @__PURE__ */
|
|
19845
|
+
ancestryLinkDetails && /* @__PURE__ */ React31.createElement(
|
|
19764
19846
|
AncestryLinkDetailsPanel,
|
|
19765
19847
|
{
|
|
19766
19848
|
data: ancestryLinkDetails,
|
|
@@ -19772,7 +19854,7 @@ function XViewScene({
|
|
|
19772
19854
|
onHighlight: handleReadModeHighlight
|
|
19773
19855
|
}
|
|
19774
19856
|
),
|
|
19775
|
-
/* @__PURE__ */
|
|
19857
|
+
/* @__PURE__ */ React31.createElement(
|
|
19776
19858
|
"div",
|
|
19777
19859
|
{
|
|
19778
19860
|
ref: tooltipRef,
|
|
@@ -19799,7 +19881,7 @@ function XViewScene({
|
|
|
19799
19881
|
}
|
|
19800
19882
|
}
|
|
19801
19883
|
),
|
|
19802
|
-
/* @__PURE__ */
|
|
19884
|
+
/* @__PURE__ */ React31.createElement(
|
|
19803
19885
|
ContextMenu,
|
|
19804
19886
|
{
|
|
19805
19887
|
data: contextMenu,
|
|
@@ -19837,7 +19919,7 @@ function XViewScene({
|
|
|
19837
19919
|
onFinishQuest: handleFinishQuestQuick
|
|
19838
19920
|
}
|
|
19839
19921
|
),
|
|
19840
|
-
/* @__PURE__ */
|
|
19922
|
+
/* @__PURE__ */ React31.createElement(
|
|
19841
19923
|
MultiNodeContextMenu,
|
|
19842
19924
|
{
|
|
19843
19925
|
data: multiContextMenu,
|
|
@@ -19857,7 +19939,7 @@ function XViewScene({
|
|
|
19857
19939
|
)
|
|
19858
19940
|
}
|
|
19859
19941
|
),
|
|
19860
|
-
/* @__PURE__ */
|
|
19942
|
+
/* @__PURE__ */ React31.createElement(
|
|
19861
19943
|
RelationshipContextMenu,
|
|
19862
19944
|
{
|
|
19863
19945
|
data: relationshipMenu,
|
|
@@ -19875,14 +19957,14 @@ function XViewScene({
|
|
|
19875
19957
|
onDelete: (data) => userActionHandlers.handleDeleteLink(actionHandlerContext, data)
|
|
19876
19958
|
}
|
|
19877
19959
|
),
|
|
19878
|
-
/* @__PURE__ */
|
|
19960
|
+
/* @__PURE__ */ React31.createElement(
|
|
19879
19961
|
ImageViewer,
|
|
19880
19962
|
{
|
|
19881
19963
|
data: imageViewer,
|
|
19882
19964
|
onClose: () => setImageViewer({ ...imageViewer, visible: false })
|
|
19883
19965
|
}
|
|
19884
19966
|
),
|
|
19885
|
-
/* @__PURE__ */
|
|
19967
|
+
/* @__PURE__ */ React31.createElement(
|
|
19886
19968
|
Boards,
|
|
19887
19969
|
{
|
|
19888
19970
|
isOpen: isBoardsOpen,
|
|
@@ -19895,7 +19977,7 @@ function XViewScene({
|
|
|
19895
19977
|
userRole: userPermissionRole
|
|
19896
19978
|
}
|
|
19897
19979
|
),
|
|
19898
|
-
/* @__PURE__ */
|
|
19980
|
+
/* @__PURE__ */ React31.createElement(
|
|
19899
19981
|
MilestoneManager,
|
|
19900
19982
|
{
|
|
19901
19983
|
isOpen: isMilestoneManagerOpen,
|
|
@@ -19904,7 +19986,7 @@ function XViewScene({
|
|
|
19904
19986
|
onUpdateMilestones: handleUpdateMilestones
|
|
19905
19987
|
}
|
|
19906
19988
|
),
|
|
19907
|
-
/* @__PURE__ */
|
|
19989
|
+
/* @__PURE__ */ React31.createElement(
|
|
19908
19990
|
ImportParentFileModal,
|
|
19909
19991
|
{
|
|
19910
19992
|
isOpen: isImportModalOpen,
|
|
@@ -19917,7 +19999,7 @@ function XViewScene({
|
|
|
19917
19999
|
currentAncestries: ancestryDataRef.current || []
|
|
19918
20000
|
}
|
|
19919
20001
|
),
|
|
19920
|
-
invalidTargetError && /* @__PURE__ */
|
|
20002
|
+
invalidTargetError && /* @__PURE__ */ React31.createElement(
|
|
19921
20003
|
"div",
|
|
19922
20004
|
{
|
|
19923
20005
|
className: "ui-overlay",
|
|
@@ -19942,13 +20024,13 @@ function XViewScene({
|
|
|
19942
20024
|
animation: "fadeInDown 0.5s cubic-bezier(0.16, 1, 0.3, 1)"
|
|
19943
20025
|
}
|
|
19944
20026
|
},
|
|
19945
|
-
/* @__PURE__ */
|
|
20027
|
+
/* @__PURE__ */ React31.createElement("style", null, `
|
|
19946
20028
|
@keyframes fadeInDown {
|
|
19947
20029
|
from { opacity: 0; transform: translate(-50%, -20px); }
|
|
19948
20030
|
to { opacity: 1; transform: translate(-50%, 0); }
|
|
19949
20031
|
}
|
|
19950
20032
|
`),
|
|
19951
|
-
/* @__PURE__ */
|
|
20033
|
+
/* @__PURE__ */ React31.createElement(
|
|
19952
20034
|
"svg",
|
|
19953
20035
|
{
|
|
19954
20036
|
width: "20",
|
|
@@ -19960,12 +20042,12 @@ function XViewScene({
|
|
|
19960
20042
|
strokeLinecap: "round",
|
|
19961
20043
|
strokeLinejoin: "round"
|
|
19962
20044
|
},
|
|
19963
|
-
/* @__PURE__ */
|
|
19964
|
-
/* @__PURE__ */
|
|
19965
|
-
/* @__PURE__ */
|
|
20045
|
+
/* @__PURE__ */ React31.createElement("circle", { cx: "12", cy: "12", r: "10" }),
|
|
20046
|
+
/* @__PURE__ */ React31.createElement("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
20047
|
+
/* @__PURE__ */ React31.createElement("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
19966
20048
|
),
|
|
19967
|
-
/* @__PURE__ */
|
|
19968
|
-
/* @__PURE__ */
|
|
20049
|
+
/* @__PURE__ */ React31.createElement("span", { style: { fontSize: "14px", fontWeight: 500 } }, invalidTargetError),
|
|
20050
|
+
/* @__PURE__ */ React31.createElement(
|
|
19969
20051
|
"button",
|
|
19970
20052
|
{
|
|
19971
20053
|
onClick: () => setInvalidTargetError(null),
|