@aintela/bi 0.2.0 → 0.2.1

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.
Files changed (45) hide show
  1. package/dist/GridCardPlaceHolder-DVVT3pqn.js +25 -0
  2. package/dist/GridCardPlaceHolder-DVVT3pqn.js.map +1 -0
  3. package/dist/GridLayout-BgPzzPiP.js +349 -0
  4. package/dist/GridLayout-BgPzzPiP.js.map +1 -0
  5. package/dist/ScriptDashboardViewerVertical-DKaHcL1o.js +713 -0
  6. package/dist/ScriptDashboardViewerVertical-DKaHcL1o.js.map +1 -0
  7. package/dist/biModuleSurface-dtnpBMtT.js +34 -0
  8. package/dist/biModuleSurface-dtnpBMtT.js.map +1 -0
  9. package/dist/cards.js +13 -12
  10. package/dist/cards.js.map +1 -1
  11. package/dist/composer.js +37 -37
  12. package/dist/filterFactory-Ysv0FOQ2.js +285 -0
  13. package/dist/filterFactory-Ysv0FOQ2.js.map +1 -0
  14. package/dist/filters.js +11 -10
  15. package/dist/filters.js.map +1 -1
  16. package/dist/grid.js +19 -16
  17. package/dist/grid.js.map +1 -1
  18. package/dist/index-7p-ogAPK.js +3631 -0
  19. package/dist/index-7p-ogAPK.js.map +1 -0
  20. package/dist/index-BRx4bRbe.js +73 -0
  21. package/dist/index-BRx4bRbe.js.map +1 -0
  22. package/dist/index-CPHaT2or.js +13 -0
  23. package/dist/index-CPHaT2or.js.map +1 -0
  24. package/dist/{index-wtSLspPh.js → index-DeiweWw8.js} +348 -368
  25. package/dist/index-DeiweWw8.js.map +1 -0
  26. package/dist/index-Dz2ulBiy.js +137 -0
  27. package/dist/index-Dz2ulBiy.js.map +1 -0
  28. package/dist/index.js +225 -218
  29. package/dist/index.js.map +1 -1
  30. package/dist/runtime/version.d.ts +1 -1
  31. package/dist/runtime.js +14 -13
  32. package/dist/runtime.js.map +1 -1
  33. package/dist/useContainerRectangle-D464wPFX.js +27 -0
  34. package/dist/useContainerRectangle-D464wPFX.js.map +1 -0
  35. package/dist/{version-DnqajORq.js → version-BgIpi4UM.js} +20 -19
  36. package/dist/{version-DnqajORq.js.map → version-BgIpi4UM.js.map} +1 -1
  37. package/dist/viewer.js +1 -1
  38. package/package.json +1 -1
  39. package/dist/index-C6JQ6770.js +0 -4545
  40. package/dist/index-C6JQ6770.js.map +0 -1
  41. package/dist/index-D7tVPX8d.js +0 -347
  42. package/dist/index-D7tVPX8d.js.map +0 -1
  43. package/dist/index-DGyvUtY3.js +0 -494
  44. package/dist/index-DGyvUtY3.js.map +0 -1
  45. package/dist/index-wtSLspPh.js.map +0 -1
@@ -1,4545 +0,0 @@
1
- var vi = Object.defineProperty;
2
- var r = (e, i) => vi(e, "name", { value: i, configurable: !0 });
3
- import * as Si from "react/jsx-runtime";
4
- import { jsx as t, jsxs as f, Fragment as Ce } from "react/jsx-runtime";
5
- import * as Ci from "react";
6
- import We, { useState as H, useEffect as J, useContext as ot, createContext as ln, useMemo as me, useRef as ie, useCallback as q, useLayoutEffect as Vt, forwardRef as Et, useImperativeHandle as sn } from "react";
7
- import { useStore as dn } from "zustand";
8
- import { useShallow as wi } from "zustand/react/shallow";
9
- import { a as je } from "./BiClientProvider-CWJochvi.js";
10
- import { createStore as Di } from "zustand/vanilla";
11
- import C from "@mui/material/Box";
12
- import { SpeedOutlined as cn, GridViewOutlined as hn, MapOutlined as Ti, BarChartOutlined as vt, TableChartOutlined as un, TagOutlined as pn, DashboardOutlined as zt, ManageSearchOutlined as ki, CalendarTodayOutlined as Ii, DateRangeOutlined as Pi, TimelineOutlined as Ei, BubbleChartOutlined as zi, DonutLargeOutlined as Oi, ScatterPlotOutlined as Mi, PieChartOutlined as Ai, MultilineChartOutlined as $i, StackedBarChartOutlined as _i, StackedLineChartOutlined as Ri, AreaChartOutlined as Fi, AlignHorizontalLeftOutlined as Ni, ShowChartOutlined as Li, TableRowsOutlined as Hi, HeatPumpOutlined as Bi, ViewColumnOutlined as Gi, CloseOutlined as mn, RebaseEdit as Wi, Schedule as ji, ImportExportOutlined as Vi, DeleteOutline as fn, CheckCircle as Ui, Pending as Yi, ViewQuiltOutlined as Ki, BorderClearOutlined as qi, DragIndicatorOutlined as Ji, AddOutlined as Xi, ArrowDropDownOutlined as St, FilterListOutlined as Zi, PreviewRounded as Qi, FolderOpenOutlined as er, ArrowBack as tr, NoteAddOutlined as nr, SaveOutlined as ir, RefreshOutlined as gn, StartRounded as rr, Close as ar, Add as or, InsertDriveFileOutlined as lr, Fullscreen as sr } from "@mui/icons-material";
13
- import { Box as L, CircularProgress as De, Typography as X, Stack as le, IconButton as Ie, Alert as qe, Snackbar as xn, Button as Ne, Slider as dr, useTheme as cr, LinearProgress as hr, Popper as Je, Grow as Xe, Paper as He, ClickAwayListener as Ze, MenuList as Ct, Divider as Qe, MenuItem as Ae, ListItemIcon as et, ListItemText as tt, TextField as Be, Tooltip as Oe, Switch as wt, ToggleButtonGroup as yn, ToggleButton as nt, Menu as ur, Select as Ut, Grid as it } from "@mui/material";
14
- import * as pr from "@mui/material/styles";
15
- import { alpha as Te, useTheme as fe } from "@mui/material/styles";
16
- import { G as bn, i as mr, f as vn, e as fr } from "./index-DGyvUtY3.js";
17
- import { a as Sn } from "./DashboardParametersContext-Clv--79U.js";
18
- import { a as gr } from "./ChartCardDefaultsContext-Cl5T25H0.js";
19
- import { isSubAgentTerminalStatus as Yt } from "@aintela/chat/models";
20
- import * as xr from "react-dom";
21
- import { createPortal as yr } from "react-dom";
22
- import * as br from "react-dom/client";
23
- import * as vr from "@emotion/react";
24
- import * as Sr from "@emotion/styled";
25
- import * as Cr from "dayjs";
26
- import { D as wr } from "./index-DOpx0R4Y.js";
27
- import { b as Dr } from "./index-BYc79sSy.js";
28
- import { q as Tr, u as kr } from "./index-wtSLspPh.js";
29
- import { H as Ir } from "./index-D3OoOPjl.js";
30
- import { F as Pr, g as Er } from "./index-D7tVPX8d.js";
31
- import { T as zr } from "./index-D7Oo_dC-.js";
32
- import { C as Or } from "./index-CZbCaXMC.js";
33
- import { useEnvironment as Cn, DashboardIcon as ze, PanelIcon as Ve, CloseIcon as Ot, PromptV2 as Mr, PlusIcon as Dt, SearchIcon as Ar, useAiChatSessionStore as $r, useAiChatServices as _r, ChevronIcon as Rr, EnvironmentProvider as Fr, InertEnvironmentProvider as Nr, useEnvironmentOptional as Lr } from "@aintela/chat/components";
34
- import Kt from "@mui/material/Stack";
35
- import { AnimatePresence as lt, motion as pe, useReducedMotion as Hr } from "framer-motion";
36
- import wn from "@mui/material/Dialog";
37
- import we from "@mui/material/IconButton";
38
- import ge from "@mui/material/Tooltip";
39
- import se from "@mui/material/Typography";
40
- import qt from "@mui/material/Divider";
41
- import pt from "@mui/material/ListItemIcon";
42
- import mt from "@mui/material/ListItemText";
43
- import ft from "@mui/material/MenuItem";
44
- import Jt from "@mui/material/MenuList";
45
- import Xt from "@mui/material/Popover";
46
- import Zt from "@mui/material/ToggleButton";
47
- import Br from "@mui/material/ToggleButtonGroup";
48
- import Gr from "@mui/icons-material/EditOutlined";
49
- const Wr = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
50
- __proto__: null,
51
- get CARD_TYPE_CATALOG() {
52
- return ke;
53
- },
54
- get CATEGORY_ICONS() {
55
- return Bn;
56
- },
57
- get COLOR_MAP() {
58
- return Gn;
59
- },
60
- get CardScketch() {
61
- return ua;
62
- },
63
- get CardSketch() {
64
- return Bt;
65
- },
66
- get CardTypeIconsProvider() {
67
- return Qr;
68
- },
69
- get ClonedComponent() {
70
- return $n;
71
- },
72
- get ComposerChatBinding() {
73
- return Xa;
74
- },
75
- get ComposerProvider() {
76
- return Jr;
77
- },
78
- get ComposerView() {
79
- return gi;
80
- },
81
- get DEFAULT_PAD_HEIGHT_PX() {
82
- return st;
83
- },
84
- get DRAFT_SAVE_DEBOUNCE_MS() {
85
- return Fn;
86
- },
87
- get DashboardPad() {
88
- return Jn;
89
- },
90
- get DashboardPadEditor() {
91
- return Xn;
92
- },
93
- get DashboardPadSketch() {
94
- return ht;
95
- },
96
- get DashboardPin() {
97
- return Qa;
98
- },
99
- get DashboardSidePanel() {
100
- return si;
101
- },
102
- get DatasetParameterizationControls() {
103
- return Ta;
104
- },
105
- get DrawablePrompt() {
106
- return pi;
107
- },
108
- get ENV_HIGHLIGHT_CLASS() {
109
- return rt;
110
- },
111
- get EntryEmptyState() {
112
- return jt;
113
- },
114
- get EnvironmentProvider() {
115
- return Fr;
116
- },
117
- get ExampleCardSkath() {
118
- return Pa;
119
- },
120
- get ExampleCardSketch() {
121
- return ut;
122
- },
123
- get ExampleCardSketh() {
124
- return Ia;
125
- },
126
- get ExamplePad() {
127
- return ka;
128
- },
129
- get FILTER_TYPE_CATALOG() {
130
- return $t;
131
- },
132
- get FILTER_TYPE_ICONS() {
133
- return Vn;
134
- },
135
- get FilterSketch() {
136
- return Gt;
137
- },
138
- get GRID_ROW_HEIGHT_PX() {
139
- return Pt;
140
- },
141
- get GUIDE_SHOW_DELAY_MS() {
142
- return Nn;
143
- },
144
- get HoverButton() {
145
- return Ee;
146
- },
147
- get InertEnvironmentProvider() {
148
- return Nr;
149
- },
150
- get PAD_INTERNAL_CLASSES() {
151
- return On;
152
- },
153
- get PAD_INTERNAL_IDS() {
154
- return zn;
155
- },
156
- get PrototypePad() {
157
- return Ea;
158
- },
159
- get SPECIFIC_TYPE_ICONS() {
160
- return Wn;
161
- },
162
- get SPECIFIC_TYPE_ICON_NAMES() {
163
- return jn;
164
- },
165
- get STARTER_TEMPLATES() {
166
- return _a;
167
- },
168
- get SpotlightOverlay() {
169
- return fi;
170
- },
171
- get TEMPLATE_KIND_TO_SKETCH() {
172
- return ri;
173
- },
174
- get TextSketh() {
175
- return pa;
176
- },
177
- get TitleSkath() {
178
- return ma;
179
- },
180
- get TitleSketch() {
181
- return Ue;
182
- },
183
- get ToolBox() {
184
- return qn;
185
- },
186
- get VIEWER_COMMIT_DEBOUNCE_MS() {
187
- return Rn;
188
- },
189
- get activityPanelVariants() {
190
- return Qn;
191
- },
192
- get activityPanelVariantsReduced() {
193
- return ni;
194
- },
195
- get ambientVariants() {
196
- return Zn;
197
- },
198
- get ambientVariantsReduced() {
199
- return ti;
200
- },
201
- get autoComplete() {
202
- return Aa;
203
- },
204
- get c() {
205
- return za;
206
- },
207
- get categoryPrefix() {
208
- return Yr;
209
- },
210
- get composerLayoutTransition() {
211
- return ei;
212
- },
213
- get composerLayoutTransitionReduced() {
214
- return ii;
215
- },
216
- get createComposerStore() {
217
- return Ln;
218
- },
219
- get createDashboardDraft() {
220
- return Ft;
221
- },
222
- get datePicker() {
223
- return Ma;
224
- },
225
- get dateRange() {
226
- return Oa;
227
- },
228
- get defaultCardTypeIcons() {
229
- return Un;
230
- },
231
- get defaultComposerSuggestions() {
232
- return mi;
233
- },
234
- get defaultComposerTemplates() {
235
- return Wt;
236
- },
237
- get environmentFromStore() {
238
- return Zr;
239
- },
240
- get fromUpsertResponse() {
241
- return Ge;
242
- },
243
- get groupCardCatalog() {
244
- return dt;
245
- },
246
- get guideStepsRequireSketch() {
247
- return An;
248
- },
249
- get isElementVisible() {
250
- return _t;
251
- },
252
- get isSimplePadDefinition() {
253
- return Tn;
254
- },
255
- get joinClientSideChanges() {
256
- return At;
257
- },
258
- get padConfigToDashboard() {
259
- return Dn;
260
- },
261
- get pickBestElement() {
262
- return En;
263
- },
264
- get randomId() {
265
- return Me;
266
- },
267
- get resolveComposerSurfaces() {
268
- return ve;
269
- },
270
- get resolveEnvironmentElements() {
271
- return at;
272
- },
273
- get resolveGuideElement() {
274
- return Rt;
275
- },
276
- get sanitizeToJsVariable() {
277
- return $e;
278
- },
279
- get seedFromTemplate() {
280
- return oi;
281
- },
282
- get sketchCardItemComparer() {
283
- return jr;
284
- },
285
- get sketchFilterComparer() {
286
- return Vr;
287
- },
288
- get targetSuggestsPadInternal() {
289
- return Mn;
290
- },
291
- get templateKinds() {
292
- return ai;
293
- },
294
- get toDraftPayload() {
295
- return _n;
296
- },
297
- get toSelectorList() {
298
- return Pn;
299
- },
300
- get upsertDashboardDraft() {
301
- return ct;
302
- },
303
- get useCardTypeIcons() {
304
- return Re;
305
- },
306
- get useComposer() {
307
- return Y;
308
- },
309
- get useComposerChatBridge() {
310
- return xi;
311
- },
312
- get useComposerEnvironment() {
313
- return Hn;
314
- },
315
- get useComposerStore() {
316
- return ye;
317
- },
318
- get useComposerStoreOptional() {
319
- return Xr;
320
- },
321
- get useDashboardPad() {
322
- return $a;
323
- },
324
- get useEnvironment() {
325
- return Cn;
326
- },
327
- get useEnvironmentOptional() {
328
- return Lr;
329
- },
330
- get validateSketch() {
331
- return Tt;
332
- }
333
- }, Symbol.toStringTag, { value: "Module" })), Pe = {
334
- Generic: "custom",
335
- Métrica: "kpi",
336
- Tabela: "table",
337
- Gráfico: "chart",
338
- Mapa: "iframe",
339
- Árvore: "chart",
340
- Medidor: "chart"
341
- };
342
- function Mt(e, i) {
343
- var c;
344
- const n = ((c = i == null ? void 0 : i.cards) == null ? void 0 : c.find((h) => h.i === e.key)) ?? null, o = (n == null ? void 0 : n.name) !== e.title ? n == null ? void 0 : n.name : e.title, a = (n == null ? void 0 : n.specificType) !== e.specificType ? n == null ? void 0 : n.specificType : e.specificType, l = (n == null ? void 0 : n.category) !== e.category ? n == null ? void 0 : n.category : e.category;
345
- return { title: o, specificType: a, category: l };
346
- }
347
- r(Mt, "resolveCardMetadata");
348
- function $e(e) {
349
- if (!(e != null && e.trim())) return "_";
350
- const i = e.normalize("NFD").replace(new RegExp("\\p{Mn}", "gu"), "").replace(new RegExp("(?<=[a-zA-Z0-9_$])[^a-zA-Z0-9_$]+([a-zA-Z_$])", "g"), (n, o) => o.toUpperCase()).replace(/[^a-zA-Z0-9_$]+/g, "");
351
- return i ? /^\d/.test(i) ? `_${i}` : i : "_";
352
- }
353
- r($e, "sanitizeToJsVariable");
354
- function Me() {
355
- const e = typeof globalThis.crypto < "u" ? globalThis.crypto : void 0;
356
- if (e && typeof e.randomUUID == "function") return e.randomUUID();
357
- let i = "";
358
- for (let n = 0; n < 32; n++) i += Math.floor(Math.random() * 16).toString(16);
359
- return i;
360
- }
361
- r(Me, "randomId");
362
- const st = 300;
363
- function At(e) {
364
- if (!e) return;
365
- const i = Object.values(e).filter((n) => n && n.trim().length > 0);
366
- if (i.length !== 0)
367
- return i.map((n) => `- ${n}`).join(`
368
- `);
369
- }
370
- r(At, "joinClientSideChanges");
371
- const ke = [
372
- { label: "Métrica (Comparação)", category: "Métrica", specificType: "MetricComparison" },
373
- { label: "Tabela (Auto)", category: "Tabela", specificType: "TableAuto" },
374
- { label: "Tabela (Com barras)", category: "Tabela", specificType: "TableBars" },
375
- { label: "Tabela (Com mapa de calor)", category: "Tabela", specificType: "TableHeatmap" },
376
- { label: "Tabela (Grande)", category: "Tabela", specificType: "TableLarge" },
377
- { label: "Gráfico (Auto)", category: "Gráfico", specificType: "ChartAuto" },
378
- { label: "Gráfico (Linhas)", category: "Gráfico", specificType: "ChartLine" },
379
- { label: "Gráfico (Barras) (H)", category: "Gráfico", specificType: "ChartBarH" },
380
- { label: "Gráfico (Barras) (V)", category: "Gráfico", specificType: "ChartBarV" },
381
- { label: "Gráfico (Area)", category: "Gráfico", specificType: "ChartArea" },
382
- { label: "Gráfico (Area Empilhada)", category: "Gráfico", specificType: "ChartStackedArea" },
383
- { label: "Gráfico (Barras Empilhadas)", category: "Gráfico", specificType: "ChartStackedBar" },
384
- { label: "Gráfico (Combo)", category: "Gráfico", specificType: "ChartCombo" },
385
- { label: "Gráfico (Pizza)", category: "Gráfico", specificType: "ChartPie" },
386
- { label: "Gráfico (Donnut)", category: "Gráfico", specificType: "ChartDonut" },
387
- { label: "Mapa (Bubbles)", category: "Mapa", specificType: "MapBubbles" },
388
- { label: "Mapa (Conexões)", category: "Mapa", specificType: "MapConnections" },
389
- { label: "Árvore (Distribuição)", category: "Árvore", specificType: "Treemap" },
390
- { label: "Medidor (Gauge)", category: "Medidor", specificType: "Gauge" }
391
- ];
392
- function dt(e = ke) {
393
- return e.reduce((i, n) => {
394
- var o;
395
- return (i[o = n.category] ?? (i[o] = [])).push(n), i;
396
- }, {});
397
- }
398
- r(dt, "groupCardCatalog");
399
- const $t = [
400
- { label: "Período (Date Range)", filterType: "DateRangePicker" },
401
- { label: "Data (Date Picker)", filterType: "DatePicker" },
402
- { label: "Auto Complete", filterType: "AutoComplete" }
403
- ], jr = /* @__PURE__ */ r((e, i) => e.actionDescription == i.actionDescription && e.category == i.category && e.name == i.name && e.color == i.color && e.specificType == i.specificType, "sketchCardItemComparer"), Vr = /* @__PURE__ */ r((e, i) => JSON.stringify(e) == JSON.stringify(i), "sketchFilterComparer");
404
- function Tt(e) {
405
- var a;
406
- const i = /* @__PURE__ */ new Set();
407
- let n = !1;
408
- for (const l of e.cards ?? [])
409
- l.todoItem = void 0, i.has(l.name) ? n = !0 : i.add(l.name);
410
- let o = null;
411
- return n && (o = "Os nomes dos cards precisam ser únicos"), (((a = e.cards) == null ? void 0 : a.length) ?? 0) == 0 && (o = "Inclua pelo menos um card no rascunho"), o;
412
- }
413
- r(Tt, "validateSketch");
414
- const Ur = 20;
415
- function Dn(e) {
416
- var c, h, m;
417
- const i = [];
418
- let n = 0, o = 0, a = 0, l = 0;
419
- for (const d of e.config) {
420
- const { size: S, height: s, card: y } = d, b = Math.max(1, Math.round((s ?? st) / Ur));
421
- n + S > 12 && (n = 0, o += a, a = 0);
422
- let u = d.description, x = d.name, g = d.specificType, O = d.id, G;
423
- if (We.isValidElement(y)) {
424
- const F = y.props ?? {};
425
- u = u ?? F.description ?? "", x = x ?? F.name, O = O ?? F.id ?? $e(`${x ?? ""}${l}`), g = g ?? F.specificType, G = F.category ?? ((c = ke.find((z) => z.specificType === g)) == null ? void 0 : c.category);
426
- } else {
427
- if (x === void 0 && g === void 0)
428
- continue;
429
- O = O ?? $e(`${x}${l}`), G = (h = ke.find((F) => F.specificType === g)) == null ? void 0 : h.category;
430
- }
431
- i.push({
432
- i: O ?? "not_defined",
433
- x: n,
434
- y: o,
435
- w: S,
436
- h: b,
437
- name: x ?? ((m = ke.find((F) => F.specificType === g)) == null ? void 0 : m.label),
438
- actionDescription: u,
439
- specificType: g,
440
- category: G
441
- }), n += S, a = Math.max(a, b), l++;
442
- }
443
- return {
444
- id: e.id,
445
- name: e.name,
446
- cards: i,
447
- filters: e.filters ?? []
448
- };
449
- }
450
- r(Dn, "padConfigToDashboard");
451
- function Tn(e) {
452
- return typeof e == "object" && e !== null && "config" in e && Array.isArray(e.config);
453
- }
454
- r(Tn, "isSimplePadDefinition");
455
- function Yr(e) {
456
- return Pe[e] ?? Pe.Generic;
457
- }
458
- r(Yr, "categoryPrefix");
459
- const rt = "llm-env-highlight-active";
460
- function kn() {
461
- return typeof document > "u" ? null : document;
462
- }
463
- r(kn, "defaultRoot");
464
- function Qt(e) {
465
- return typeof CSS < "u" && CSS.escape ? CSS.escape(e) : e.replace(/["\\]/g, "\\$&");
466
- }
467
- r(Qt, "escapeCssValue");
468
- function In(e) {
469
- return e.startsWith(".") || e.startsWith("#") || e.startsWith("[") || e.includes(" ") || e.includes(":") || e.includes(">");
470
- }
471
- r(In, "looksLikeSelector");
472
- function Pn(e) {
473
- var a, l, c;
474
- const i = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ r((h) => {
475
- const m = Qt(h);
476
- i.add(`[data-env-id="${m}"]`), i.add(`[data-env-key="${m}"]`), i.add(`[data-env-name="${m}"]`), i.add(`#${m}`), i.add(`.${m}`);
477
- }, "appendByIdentifier"), o = /* @__PURE__ */ r((h) => {
478
- h.split(/\s+/).map((m) => m.trim()).filter(Boolean).forEach((m) => i.add(`.${Qt(m)}`));
479
- }, "appendByClassName");
480
- if (typeof e == "string") {
481
- const h = e.trim();
482
- return h ? (In(h) ? i.add(h) : n(h), [...i]) : [];
483
- }
484
- return (a = e.selector) != null && a.trim() && i.add(e.selector.trim()), (l = e.className) != null && l.trim() && o(e.className), (c = e.identifier) != null && c.trim() && n(e.identifier.trim()), [...i];
485
- }
486
- r(Pn, "toSelectorList");
487
- function at(e, i = kn()) {
488
- if (!i) return { selectors: [], elements: [] };
489
- const n = Pn(e), o = /* @__PURE__ */ new Set();
490
- return n.forEach((a) => {
491
- try {
492
- i.querySelectorAll(a).forEach((l) => o.add(l));
493
- } catch (l) {
494
- console.warn("[@aintela/bi composer] Invalid selector:", a, l);
495
- }
496
- }), { selectors: n, elements: [...o] };
497
- }
498
- r(at, "resolveEnvironmentElements");
499
- function _t(e) {
500
- const i = e.getBoundingClientRect();
501
- if (!(i.width > 0 && i.height > 0)) return !1;
502
- if (typeof window > "u" || !window.getComputedStyle) return !0;
503
- const n = window.getComputedStyle(e);
504
- return n.display !== "none" && n.visibility !== "hidden";
505
- }
506
- r(_t, "isElementVisible");
507
- function En(e, i = !1) {
508
- if (e.length === 0) return null;
509
- if (i) return e[0];
510
- for (const n of e) if (_t(n)) return n;
511
- return e[0];
512
- }
513
- r(En, "pickBestElement");
514
- function Rt(e, i = kn()) {
515
- const { elements: n } = at(e, i);
516
- for (const o of n) if (_t(o)) return o;
517
- return null;
518
- }
519
- r(Rt, "resolveGuideElement");
520
- const zn = /* @__PURE__ */ new Set([
521
- "dashboardpad-add-card",
522
- "dashboardpad-add-card-dropdown",
523
- "dashboardpad-add-filter",
524
- "dashboard-pad-layout-toggle",
525
- "dashboard-pad-layout-boxed",
526
- "dashboard-pad-layout-naked"
527
- ]), On = /* @__PURE__ */ new Set([
528
- "llm-env-card",
529
- "llm-env-filter",
530
- "llm-env-layout-toggle",
531
- "llm-env-card-sketch",
532
- "llm-env-card-sketch-wrapper",
533
- "llm-env-filter-sketch"
534
- ]), Kr = /^[0-9a-fA-F]{8,}(-[0-9a-fA-F]{4,})+$/;
535
- function Mn(e) {
536
- const i = /* @__PURE__ */ r((o) => {
537
- const a = o.trim();
538
- return a ? zn.has(a) ? !0 : Kr.test(a) : !1;
539
- }, "checkId"), n = /* @__PURE__ */ r((o) => o.split(/\s+/).filter(Boolean).some((a) => On.has(a)), "checkClass");
540
- if (typeof e == "string") {
541
- const o = e.trim();
542
- return In(o) ? !1 : i(o);
543
- }
544
- return !!(e.identifier && i(e.identifier) || e.className && n(e.className));
545
- }
546
- r(Mn, "targetSuggestsPadInternal");
547
- function An(e) {
548
- return e.some((i) => Mn(i.target));
549
- }
550
- r(An, "guideStepsRequireSketch");
551
- const $n = /* @__PURE__ */ r(({ entry: e, onHover: i }) => {
552
- var n;
553
- return /* @__PURE__ */ t(
554
- C,
555
- {
556
- onClick: /* @__PURE__ */ r(() => {
557
- var o;
558
- return (o = e.source) == null ? void 0 : o.click();
559
- }, "onClick"),
560
- onMouseOver: /* @__PURE__ */ r(() => i == null ? void 0 : i(e.sourceSelector), "onMouseOver"),
561
- sx: { "& :hover": { cursor: "pointer" } },
562
- children: /* @__PURE__ */ t(
563
- "div",
564
- {
565
- style: { width: `${e.width}px`, height: `${e.height}px` },
566
- dangerouslySetInnerHTML: { __html: ((n = e.html) == null ? void 0 : n.replaceAll(rt, "")) ?? "" }
567
- }
568
- )
569
- }
570
- );
571
- }, "ClonedComponent");
572
- function _n(e) {
573
- const {
574
- cards: i,
575
- filters: n,
576
- layoutType: o,
577
- remarks: a,
578
- userPrompt: l,
579
- grid_definition: c,
580
- updated_grid_definition: h,
581
- filter_components: m,
582
- // Parameterised-dataset fields live on `Dashboard.Draft` server-side;
583
- // at the top level the deserialiser drops them on the floor.
584
- isDatasetParameterized: d,
585
- defaultDatasetName: S,
586
- clientSideChanges: s,
587
- ...y
588
- } = e;
589
- return {
590
- ...y,
591
- draft: {
592
- cards: i ?? [],
593
- filters: n ?? [],
594
- remarks: a,
595
- userPrompt: l,
596
- layoutType: o,
597
- grid_definition: c ?? null,
598
- updated_grid_definition: h ?? null,
599
- filter_components: m ?? [],
600
- isDatasetParameterized: d ?? !1,
601
- defaultDatasetName: S
602
- }
603
- };
604
- }
605
- r(_n, "toDraftPayload");
606
- function Ge(e) {
607
- const i = e ?? {}, n = i.draft ?? i.committed;
608
- return {
609
- ...i,
610
- cards: (n == null ? void 0 : n.cards) ?? i.cards ?? [],
611
- filters: (n == null ? void 0 : n.filters) ?? i.filters ?? [],
612
- remarks: (n == null ? void 0 : n.remarks) ?? i.remarks,
613
- userPrompt: (n == null ? void 0 : n.userPrompt) ?? i.userPrompt,
614
- layoutType: (n == null ? void 0 : n.layoutType) ?? i.layoutType,
615
- grid_definition: (n == null ? void 0 : n.gridDefinition) ?? (n == null ? void 0 : n.grid_definition) ?? i.grid_definition ?? null,
616
- updated_grid_definition: (n == null ? void 0 : n.upadatedGridDefinition) ?? (n == null ? void 0 : n.updated_grid_definition) ?? i.updated_grid_definition ?? null,
617
- filter_components: (n == null ? void 0 : n.filterComponents) ?? (n == null ? void 0 : n.filter_components) ?? i.filter_components ?? [],
618
- isDatasetParameterized: (n == null ? void 0 : n.isDatasetParameterized) ?? i.isDatasetParameterized,
619
- defaultDatasetName: (n == null ? void 0 : n.defaultDatasetName) ?? i.defaultDatasetName
620
- };
621
- }
622
- r(Ge, "fromUpsertResponse");
623
- async function ct(e, i) {
624
- const n = await e.upsertDashboard(_n(i));
625
- return Ge(n);
626
- }
627
- r(ct, "upsertDashboardDraft");
628
- async function Ft(e, i, n) {
629
- return ct(e, {
630
- name: (n == null ? void 0 : n.name) ?? "Sem título",
631
- filters: (n == null ? void 0 : n.filters) ?? [],
632
- cards: (n == null ? void 0 : n.cards) ?? [],
633
- ...n,
634
- id: void 0,
635
- originalSessionId: i
636
- });
637
- }
638
- r(Ft, "createDashboardDraft");
639
- const Rn = 3e3, Fn = 800, Nn = 500, qr = 1800;
640
- function Ln(e = {}) {
641
- const i = e.viewerCommitDebounceMs ?? Rn, n = e.draftSaveDebounceMs ?? Fn, o = e.onDraftSaveError ?? ((a) => console.warn("[@aintela/bi composer] draft save failed:", a));
642
- return Di()((a, l) => {
643
- const c = /* @__PURE__ */ r(async () => {
644
- const s = l()._client, y = l().dashboardDefinition;
645
- if (!s || !(y != null && y.id) || !y.originalSessionId) return;
646
- const b = ct(s, y).then(() => {
647
- }).catch(o);
648
- a({ _draftSavePromise: b }), await b, a((u) => u._draftSavePromise === b ? { _draftSavePromise: null } : {});
649
- }, "_saveDraft"), h = /* @__PURE__ */ r(() => {
650
- const s = l()._draftSaveTimer;
651
- s && clearTimeout(s);
652
- const y = setTimeout(() => {
653
- c();
654
- }, n);
655
- a({ _draftSaveTimer: y });
656
- }, "_scheduleDraftSave"), m = /* @__PURE__ */ r(() => {
657
- if (l().turnOpen) return;
658
- const s = l()._viewerCommitTimer;
659
- s && clearTimeout(s);
660
- const y = setTimeout(() => {
661
- if (l().turnOpen) return;
662
- const b = l().dashboardDefinition;
663
- a((u) => ({ publishedDashboard: b, llmCounter: u.llmCounter + 1, _viewerCommitTimer: null }));
664
- }, i);
665
- a({ _viewerCommitTimer: y });
666
- }, "_scheduleViewerCommit"), d = /* @__PURE__ */ r(() => {
667
- const s = l()._viewerCommitTimer;
668
- s && (clearTimeout(s), a({ _viewerCommitTimer: null }));
669
- }, "_cancelViewerCommit"), S = /* @__PURE__ */ r(async (s) => {
670
- var G;
671
- await Promise.resolve();
672
- const y = l().dashboardDefinition, b = l().currentSessionId || null, u = l().turnOpen, x = s.id;
673
- if (!u && (y != null && y.id) && x && y.id === x && (((G = y.cards) == null ? void 0 : G.length) ?? 0) > 0)
674
- return;
675
- const g = Tn(s) ? Dn(s) : { ...s };
676
- g.originalSessionId = b;
677
- const O = {
678
- ...y,
679
- ...g,
680
- id: x ?? (y == null ? void 0 : y.id),
681
- originalSessionId: g.originalSessionId,
682
- jsFileName: g.jsFileName ?? (y == null ? void 0 : y.jsFileName),
683
- name: g.name || (y == null ? void 0 : y.name) || "",
684
- layoutType: "Naked"
685
- };
686
- l().updateDashboard(O), a((F) => ({ viewType: "Sketch", llmCounter: F.llmCounter + 1, agentPulseTick: F.agentPulseTick + 1 }));
687
- }, "internalUpdateDashboardPad");
688
- return {
689
- dashboardDefinition: null,
690
- publishedDashboard: null,
691
- lastSentDashboard: null,
692
- dashboardId: null,
693
- viewType: "Sketch",
694
- scriptLoadOnMount: !1,
695
- renderGeneration: 0,
696
- turnOpen: !1,
697
- currentSessionId: null,
698
- llmCounter: 0,
699
- agentPulseTick: 0,
700
- todosByCardKey: {},
701
- sketchExpanded: !1,
702
- hasCompletedOnce: !1,
703
- producedDashboardId: null,
704
- viewport: { width: 0, height: 0 },
705
- guideSteps: null,
706
- guideOptions: null,
707
- _client: e.client ?? null,
708
- _draftSaveTimer: null,
709
- _draftSavePromise: null,
710
- _viewerCommitTimer: null,
711
- _guideShowTimer: null,
712
- setClient: /* @__PURE__ */ r((s) => a({ _client: s }), "setClient"),
713
- flushDraft: /* @__PURE__ */ r(async () => {
714
- const s = l()._draftSaveTimer;
715
- s && (clearTimeout(s), a({ _draftSaveTimer: null }));
716
- const y = l()._draftSavePromise;
717
- y && await y, await c();
718
- }, "flushDraft"),
719
- ingestToolEvent: /* @__PURE__ */ r((s, y) => {
720
- if (s === "dashboardGenerated") {
721
- const b = l().dashboardDefinition, u = {
722
- ...b,
723
- name: (b == null ? void 0 : b.name) || "Untitled",
724
- jsFileName: y
725
- };
726
- d(), a((x) => ({
727
- dashboardDefinition: u,
728
- publishedDashboard: u,
729
- lastSentDashboard: u,
730
- viewType: "Generated",
731
- scriptLoadOnMount: !1,
732
- renderGeneration: x.renderGeneration + 1,
733
- llmCounter: x.llmCounter + 1,
734
- agentPulseTick: x.agentPulseTick + 1
735
- })), h();
736
- return;
737
- }
738
- if (s === "todolistUpdated")
739
- try {
740
- const b = JSON.parse(y);
741
- a((u) => {
742
- const x = { ...u.todosByCardKey };
743
- let g = !1;
744
- for (const O of b.items ?? [])
745
- x[O.key] = { todo: O, turnOpen: u.turnOpen }, g = !0;
746
- return g ? { todosByCardKey: x } : {};
747
- });
748
- } catch {
749
- console.warn("[@aintela/bi composer] Failed to parse todolistUpdated:", y);
750
- }
751
- }, "ingestToolEvent"),
752
- setTurnOpen: /* @__PURE__ */ r((s) => a({ turnOpen: s }), "setTurnOpen"),
753
- onTurnOpened: /* @__PURE__ */ r(() => a({ turnOpen: !0, viewType: "Sketch" }), "onTurnOpened"),
754
- onTurnClosed: /* @__PURE__ */ r(() => {
755
- a({ turnOpen: !1, todosByCardKey: {} }), h();
756
- }, "onTurnClosed"),
757
- setDashboardId: /* @__PURE__ */ r((s) => a({ dashboardId: s }), "setDashboardId"),
758
- setCurrentSessionId: /* @__PURE__ */ r((s) => a({ currentSessionId: s }), "setCurrentSessionId"),
759
- setViewType: /* @__PURE__ */ r((s) => a({ viewType: s }), "setViewType"),
760
- updateDashboard: /* @__PURE__ */ r((s) => {
761
- if (!s) {
762
- d(), a({ dashboardDefinition: null, publishedDashboard: null, lastSentDashboard: null });
763
- return;
764
- }
765
- const b = { ...l().dashboardDefinition ?? { name: "" }, ...s }, u = !l().publishedDashboard && !l().lastSentDashboard;
766
- a({
767
- dashboardDefinition: b,
768
- ...u ? { publishedDashboard: b, lastSentDashboard: b } : {}
769
- }), u || m(), h();
770
- }, "updateDashboard"),
771
- loadDashboard: /* @__PURE__ */ r((s) => {
772
- const y = !!s.jsFileName, b = { ...s };
773
- d(), a({
774
- dashboardDefinition: b,
775
- publishedDashboard: b,
776
- lastSentDashboard: b,
777
- dashboardId: s.id ?? null,
778
- currentSessionId: s.originalSessionId ?? null,
779
- viewType: y ? "Generated" : "Sketch",
780
- scriptLoadOnMount: y,
781
- renderGeneration: l().renderGeneration + 1
782
- });
783
- }, "loadDashboard"),
784
- recordSketchChange: /* @__PURE__ */ r((s, y) => {
785
- const b = s.trim(), u = y.trim();
786
- !b || !u || a((x) => {
787
- const g = x.dashboardDefinition;
788
- if (!g) return {};
789
- const O = g.clientSideChanges ?? {};
790
- return O[b] === u ? {} : { dashboardDefinition: { ...g, clientSideChanges: { ...O, [b]: u } } };
791
- });
792
- }, "recordSketchChange"),
793
- clearClientSideChanges: /* @__PURE__ */ r(() => {
794
- a((s) => {
795
- const y = s.dashboardDefinition, b = y == null ? void 0 : y.clientSideChanges;
796
- return !y || !b || Object.keys(b).length === 0 ? {} : { dashboardDefinition: { ...y, clientSideChanges: void 0 } };
797
- });
798
- }, "clearClientSideChanges"),
799
- commitForSend: /* @__PURE__ */ r(() => {
800
- d();
801
- const s = l().dashboardDefinition;
802
- a({ publishedDashboard: s, lastSentDashboard: s });
803
- }, "commitForSend"),
804
- commitDashboardLayout: /* @__PURE__ */ r(() => {
805
- d(), a({ publishedDashboard: l().dashboardDefinition });
806
- }, "commitDashboardLayout"),
807
- setSketchExpanded: /* @__PURE__ */ r((s) => a((y) => ({ sketchExpanded: typeof s == "function" ? s(y.sketchExpanded) : s })), "setSketchExpanded"),
808
- setHasCompletedOnce: /* @__PURE__ */ r((s) => a({ hasCompletedOnce: s }), "setHasCompletedOnce"),
809
- setProducedDashboardId: /* @__PURE__ */ r((s) => a({ producedDashboardId: s }), "setProducedDashboardId"),
810
- setViewport: /* @__PURE__ */ r((s) => a((y) => y.viewport.width === s.width && y.viewport.height === s.height ? {} : { viewport: s }), "setViewport"),
811
- highlightComponent: /* @__PURE__ */ r((s, y) => {
812
- const b = (y == null ? void 0 : y.durationMs) ?? qr, { elements: u } = at(s);
813
- return u.length === 0 ? 0 : (u.forEach((x, g) => {
814
- x.classList.add(rt), setTimeout(() => x.classList.remove(rt), b), g === 0 && (y != null && y.scrollIntoView) && typeof x.scrollIntoView == "function" && x.scrollIntoView({ behavior: "smooth", block: "center", inline: "center" });
815
- }), u.length);
816
- }, "highlightComponent"),
817
- cloneComponent: /* @__PURE__ */ r((s, y) => {
818
- const { selectors: b, elements: u } = at(s), x = En(u, (y == null ? void 0 : y.includeHidden) ?? !1);
819
- if (!x) return null;
820
- const g = x.getBoundingClientRect(), O = {
821
- id: Me(),
822
- sourceSelector: b.join(",") || (typeof s == "string" ? s : s.identifier ?? ""),
823
- html: x.outerHTML.replaceAll("data-env-id", "d-env-id").replaceAll("data-env-key", "d-env-key").replaceAll("data-env-name", "d-env-name").replaceAll("llm-env-target", "").replaceAll("llm-env-dashboard-action", ""),
824
- width: Math.max(1, Math.round(g.width)),
825
- height: Math.max(1, Math.round(g.height))
826
- }, G = {
827
- cloneId: O.id,
828
- width: O.width,
829
- height: O.height,
830
- sourceSelector: O.sourceSelector,
831
- html: O.html,
832
- source: x
833
- };
834
- return G.component = /* @__PURE__ */ t($n, { entry: G, onHover: /* @__PURE__ */ r((F) => l().highlightComponent(F), "onHover") }), G;
835
- }, "cloneComponent"),
836
- createDashboardPad: /* @__PURE__ */ r((s) => {
837
- S(s);
838
- }, "createDashboardPad"),
839
- updateDashboardPad: /* @__PURE__ */ r((s) => {
840
- S(s);
841
- }, "updateDashboardPad"),
842
- showGuide: /* @__PURE__ */ r((s, y) => {
843
- if (!Array.isArray(s) || s.length === 0) {
844
- console.warn("[@aintela/bi composer] showGuide called with empty or non-array `steps`; tour will not be shown.", { steps: s, guideOptions: y });
845
- return;
846
- }
847
- const b = s.findIndex((g) => !g || g.target === void 0 || g.target === null);
848
- if (b >= 0) {
849
- console.warn(`[@aintela/bi composer] showGuide: step ${b} is missing \`target\`; tour will not be shown.`, { steps: s });
850
- return;
851
- }
852
- const u = l()._guideShowTimer;
853
- u && clearTimeout(u);
854
- const x = setTimeout(() => {
855
- a({ guideSteps: s, guideOptions: y ?? null, _guideShowTimer: null });
856
- }, Nn);
857
- a({ _guideShowTimer: x });
858
- }, "showGuide"),
859
- dismissGuide: /* @__PURE__ */ r(() => {
860
- var b;
861
- const s = l()._guideShowTimer;
862
- s && clearTimeout(s);
863
- const y = l().guideOptions;
864
- a({ guideSteps: null, guideOptions: null, _guideShowTimer: null }), (b = y == null ? void 0 : y.onComplete) == null || b.call(y);
865
- }, "dismissGuide"),
866
- refreshDashboard: /* @__PURE__ */ r(() => {
867
- const s = l().dashboardDefinition;
868
- if (!(s != null && s.id)) return;
869
- const y = {
870
- ...s,
871
- name: s.name || "Untitled",
872
- jsFileName: s.jsFileName ?? `${s.id}.js`
873
- };
874
- d(), a((b) => ({
875
- dashboardDefinition: y,
876
- publishedDashboard: y,
877
- lastSentDashboard: y,
878
- viewType: "Generated",
879
- scriptLoadOnMount: !1,
880
- renderGeneration: b.renderGeneration + 1,
881
- llmCounter: b.llmCounter + 1
882
- }));
883
- }, "refreshDashboard"),
884
- openComposer: /* @__PURE__ */ r((s) => {
885
- if (d(), s) {
886
- const y = !!s.jsFileName, b = { ...s };
887
- a({
888
- dashboardDefinition: b,
889
- publishedDashboard: b,
890
- lastSentDashboard: b,
891
- dashboardId: s.id ?? null,
892
- currentSessionId: s.originalSessionId ?? null,
893
- viewType: y ? "Generated" : "Sketch",
894
- scriptLoadOnMount: y,
895
- renderGeneration: l().renderGeneration + 1,
896
- turnOpen: !1,
897
- todosByCardKey: {}
898
- });
899
- } else
900
- a({
901
- dashboardDefinition: null,
902
- publishedDashboard: null,
903
- lastSentDashboard: null,
904
- dashboardId: null,
905
- currentSessionId: null,
906
- viewType: "Sketch",
907
- scriptLoadOnMount: !1,
908
- renderGeneration: l().renderGeneration + 1,
909
- turnOpen: !1,
910
- todosByCardKey: {}
911
- });
912
- }, "openComposer")
913
- };
914
- });
915
- }
916
- r(Ln, "createComposerStore");
917
- const Nt = ln(null), Jr = /* @__PURE__ */ r(({ client: e, store: i, children: n, ...o }) => {
918
- const a = je(), l = e === void 0 ? a : e, [c] = H(() => i ?? Ln({ ...o, client: l }));
919
- return J(() => {
920
- c.getState()._client !== l && c.getState().setClient(l);
921
- }, [c, l]), /* @__PURE__ */ t(Nt.Provider, { value: c, children: n });
922
- }, "ComposerProvider");
923
- function ye() {
924
- const e = ot(Nt);
925
- if (!e)
926
- throw new Error("[@aintela/bi] No composer store in scope. Wrap the composer surface in <ComposerProvider>.");
927
- return e;
928
- }
929
- r(ye, "useComposerStore");
930
- function Xr() {
931
- return ot(Nt);
932
- }
933
- r(Xr, "useComposerStoreOptional");
934
- function Y(e) {
935
- const i = ye();
936
- return dn(i, e ?? ((n) => n));
937
- }
938
- r(Y, "useComposer");
939
- function Hn() {
940
- const e = ye();
941
- return dn(
942
- e,
943
- wi((i) => ({
944
- highlightComponent: i.highlightComponent,
945
- cloneComponent: i.cloneComponent,
946
- createDashboardPad: i.createDashboardPad,
947
- updateDashboardPad: i.updateDashboardPad,
948
- refreshDashboard: i.refreshDashboard,
949
- showGuide: i.showGuide,
950
- dismissGuide: i.dismissGuide
951
- }))
952
- );
953
- }
954
- r(Hn, "useComposerEnvironment");
955
- function Zr(e) {
956
- const i = e.getState();
957
- return {
958
- highlightComponent: i.highlightComponent,
959
- cloneComponent: i.cloneComponent,
960
- createDashboardPad: i.createDashboardPad,
961
- updateDashboardPad: i.updateDashboardPad,
962
- refreshDashboard: i.refreshDashboard,
963
- showGuide: i.showGuide,
964
- dismissGuide: i.dismissGuide
965
- };
966
- }
967
- r(Zr, "environmentFromStore");
968
- const Bn = {
969
- Generic: zt,
970
- Métrica: pn,
971
- Tabela: un,
972
- Gráfico: vt,
973
- Mapa: Ti,
974
- Árvore: hn,
975
- Medidor: cn
976
- }, Gn = {
977
- Generic: "info",
978
- Métrica: "kpi",
979
- Tabela: "table",
980
- Gráfico: "chart",
981
- Mapa: "map",
982
- Árvore: "chart",
983
- Medidor: "chart"
984
- }, Wn = {
985
- Generic: zt,
986
- MetricComparison: pn,
987
- TableAuto: un,
988
- TableBars: Gi,
989
- TableHeatmap: Bi,
990
- TableLarge: Hi,
991
- ChartAuto: vt,
992
- ChartLine: Li,
993
- ChartBarH: Ni,
994
- ChartBarV: vt,
995
- ChartArea: Fi,
996
- ChartStackedArea: Ri,
997
- ChartStackedBar: _i,
998
- ChartCombo: $i,
999
- ChartPie: Ai,
1000
- Scatter: Mi,
1001
- ChartDonut: Oi,
1002
- MapBubbles: zi,
1003
- MapConnections: Ei,
1004
- Treemap: hn,
1005
- Gauge: cn
1006
- }, jn = {
1007
- Generic: "DashboardOutlined",
1008
- MetricComparison: "TagOutlined",
1009
- TableAuto: "TableChartOutlined",
1010
- TableBars: "ViewColumnOutlined",
1011
- TableHeatmap: "HeatPumpOutlined",
1012
- TableLarge: "TableRowsOutlined",
1013
- ChartAuto: "BarChartOutlined",
1014
- ChartLine: "ShowChartOutlined",
1015
- ChartBarH: "AlignHorizontalLeftOutlined",
1016
- ChartBarV: "BarChartOutlined",
1017
- ChartArea: "AreaChartOutlined",
1018
- ChartStackedArea: "StackedLineChartOutlined",
1019
- ChartStackedBar: "StackedBarChartOutlined",
1020
- ChartCombo: "MultilineChartOutlined",
1021
- ChartPie: "PieChartOutlined",
1022
- Scatter: "ScatterPlotOutlined",
1023
- ChartDonut: "DonutLargeOutlined",
1024
- MapBubbles: "BubbleChartOutlined",
1025
- MapConnections: "TimelineOutlined",
1026
- Treemap: "GridViewOutlined",
1027
- Gauge: "SpeedOutlined"
1028
- }, Vn = {
1029
- DateRangePicker: Pi,
1030
- DatePicker: Ii,
1031
- AutoComplete: ki
1032
- }, Un = {
1033
- category: Bn,
1034
- specificType: Wn,
1035
- filterType: Vn
1036
- }, kt = ln(Un), Qr = /* @__PURE__ */ r(({ icons: e, children: i }) => {
1037
- const n = ot(kt), o = me(
1038
- () => ({
1039
- category: { ...n.category, ...e.category ?? {} },
1040
- specificType: { ...n.specificType, ...e.specificType ?? {} },
1041
- filterType: { ...n.filterType, ...e.filterType ?? {} }
1042
- }),
1043
- [n, e]
1044
- );
1045
- return /* @__PURE__ */ t(kt.Provider, { value: o, children: i });
1046
- }, "CardTypeIconsProvider");
1047
- function Re() {
1048
- return ot(kt);
1049
- }
1050
- r(Re, "useCardTypeIcons");
1051
- const Yn = /* @__PURE__ */ r((e) => {
1052
- const i = Ht({
1053
- client: e.client,
1054
- dashboardId: e.dashboardId,
1055
- parameters: e.parameters,
1056
- dashboard: e.dashboard,
1057
- dashboardWaiting: e.dashboardWaiting,
1058
- codeGeneration: e.codeGeneration,
1059
- onDashloadLoaded: e.onDashloadLoaded,
1060
- onFiltersChanged: e.onFiltersChanged,
1061
- isPrintPreview: e.isPrintPreview
1062
- }), { dashboard: n, cards: o, loading: a, error: l, setError: c, stateParameters: h, containerRef: m, containerWidth: d, layoutDefinition: S, effectiveDashboardId: s, isPrintPreview: y, snackbar: b, setSnackbar: u } = i, x = me(() => {
1063
- if (!o) return;
1064
- const g = (n == null ? void 0 : n.layoutType) ?? "Boxed";
1065
- return o.map((O) => {
1066
- var _;
1067
- const { title: G, specificType: F } = Mt(O, n), z = F === "MetricComparison" || F === "Gauge" || F == null;
1068
- return /* @__PURE__ */ t(
1069
- L,
1070
- {
1071
- sx: {
1072
- height: z ? "160px" : "250px",
1073
- maxWidth: "100%",
1074
- mx: 0.5,
1075
- borderBottom: (n == null ? void 0 : n.layoutType) === "Naked" ? "1px solid" : "unset",
1076
- borderColor: "divider"
1077
- },
1078
- children: /* @__PURE__ */ t(bn, { dragLocked: !0, noBorder: !0, viewType: g, zoomLevel: z ? 0.9 : 0.7, header: { title: G ?? "", icon: F ? (_ = e.resolveCardIcon) == null ? void 0 : _.call(e, F) : void 0 }, children: O.element })
1079
- },
1080
- O.key
1081
- );
1082
- });
1083
- }, [o, n, e.resolveCardIcon]);
1084
- return !n && s ? /* @__PURE__ */ f(L, { sx: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", height: "100%", width: "100%", gap: 2 }, children: [
1085
- /* @__PURE__ */ t(De, {}),
1086
- /* @__PURE__ */ t(X, { color: "text.secondary", children: "Loading dashboard..." })
1087
- ] }) : n ? /* @__PURE__ */ f(
1088
- le,
1089
- {
1090
- ref: /* @__PURE__ */ r((g) => {
1091
- m.current = !m.current && g ? g : m.current;
1092
- }, "ref"),
1093
- className: "bi-dashboard-viewer-vertical",
1094
- sx: {
1095
- height: y ? "100vh" : e.height ?? "unset",
1096
- display: "inline-flex",
1097
- backgroundColor: "background.default",
1098
- color: "text.primary",
1099
- minHeight: "300px",
1100
- overflow: "auto",
1101
- width: "100%",
1102
- maxWidth: y ? "1000px" : "100%",
1103
- "& .grid-card::after": { borderRight: "none", borderBottom: "none" },
1104
- "& .cardDragHandle": { display: "none" }
1105
- },
1106
- children: [
1107
- /* @__PURE__ */ f("div", { style: { position: "relative", width: "100%", height: "100%", maxHeight: "100%", display: "flex", flexDirection: "column", alignItems: "flex-start" }, children: [
1108
- a && /* @__PURE__ */ f(L, { sx: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", height: "100%", width: "100%", gap: 2 }, children: [
1109
- /* @__PURE__ */ t(De, {}),
1110
- /* @__PURE__ */ t(X, { color: "text.secondary", children: "Loading dashboard..." })
1111
- ] }),
1112
- l && /* @__PURE__ */ f(L, { sx: { p: 1, position: "relative", width: "100%" }, children: [
1113
- /* @__PURE__ */ t(Ie, { size: "small", onClick: /* @__PURE__ */ r(() => c(null), "onClick"), sx: { position: "absolute", right: 10, top: 10 }, children: /* @__PURE__ */ t(mn, { fontSize: "small" }) }),
1114
- /* @__PURE__ */ f(qe, { severity: "error", children: [
1115
- /* @__PURE__ */ t(X, { variant: "subtitle1", fontWeight: "bold", children: "Dashboard load failed" }),
1116
- /* @__PURE__ */ t(X, { variant: "body2", children: l })
1117
- ] })
1118
- ] }),
1119
- !a && d !== 0 && S && x && /* @__PURE__ */ t(
1120
- Sn,
1121
- {
1122
- values: {
1123
- dashboardId: n.id ?? s ?? "",
1124
- parameters: h ?? {},
1125
- refreshTick: e.llmRenderCount ?? 0,
1126
- datasetOverride: e.datasetOverride
1127
- },
1128
- children: /* @__PURE__ */ t(le, { sx: { width: "100%" }, gap: 1, children: x })
1129
- }
1130
- ),
1131
- /* @__PURE__ */ t(L, { sx: { minHeight: "70px", minWidth: "100%" } })
1132
- ] }),
1133
- /* @__PURE__ */ t(xn, { open: b.open, autoHideDuration: 4e3, onClose: /* @__PURE__ */ r(() => u((g) => ({ ...g, open: !1 })), "onClose"), anchorOrigin: { vertical: "bottom", horizontal: "center" }, children: /* @__PURE__ */ t(qe, { onClose: /* @__PURE__ */ r(() => u((g) => ({ ...g, open: !1 })), "onClose"), severity: b.severity, variant: "filled", children: b.message }) })
1134
- ]
1135
- }
1136
- ) : null;
1137
- }, "ScriptDashboardViewerVertical"), ea = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1138
- __proto__: null,
1139
- CATEGORY_PREFIXES: Pe,
1140
- ScriptDashboardViewer: _e,
1141
- ScriptDashboardViewerVertical: Yn,
1142
- resolveCardMetadata: Mt,
1143
- useDashboardBundle: Ht
1144
- }, Symbol.toStringTag, { value: "Module" }));
1145
- let Ye = null;
1146
- function ta() {
1147
- return Ye || (Ye = {
1148
- ...wr,
1149
- ...zr,
1150
- ...Or,
1151
- ...Ir,
1152
- ...mr,
1153
- ...Tr,
1154
- ...Pr,
1155
- ...Dr,
1156
- ...ea,
1157
- // The LLM-facing pad surface (ExamplePad, ExampleCardSketh, useDashboardPad, c, dateRange, …)
1158
- // plus the authoring components, so old bundles and the composer agent's instructions resolve.
1159
- ...Wr
1160
- }, Ye);
1161
- }
1162
- r(ta, "getBiModuleSurface");
1163
- const Lt = /* @__PURE__ */ new Set();
1164
- let It = {}, Le = null;
1165
- function Ho(e, i) {
1166
- for (const n of e) Lt.add(n);
1167
- i && (It = { ...It, ...i }), Le = null;
1168
- }
1169
- r(Ho, "seedHostModules");
1170
- function Bo() {
1171
- return [...Lt];
1172
- }
1173
- r(Bo, "getRegisteredSpecifiers");
1174
- async function Kn() {
1175
- if (Le) return Le;
1176
- const [e, i, n] = await Promise.all([
1177
- import("@mui/material"),
1178
- import("@mui/icons-material"),
1179
- import("recharts")
1180
- ]), o = ta(), a = {
1181
- react: Ci,
1182
- "react/jsx-runtime": Si,
1183
- "react-dom": xr,
1184
- "react-dom/client": br,
1185
- "@mui/material": e,
1186
- "@mui/icons-material": i,
1187
- "@mui/material/styles": pr,
1188
- "@emotion/react": vr,
1189
- "@emotion/styled": Sr,
1190
- recharts: n,
1191
- dayjs: Cr,
1192
- ...It
1193
- };
1194
- for (const l of Lt) a[l] = o;
1195
- return Le = a, a;
1196
- }
1197
- r(Kn, "getHostModules");
1198
- const na = 6, Se = /* @__PURE__ */ new Map();
1199
- function ia(e) {
1200
- let i = 2166136261;
1201
- for (let n = 0; n < e.length; n++)
1202
- i ^= e.charCodeAt(n), i = Math.imul(i, 16777619);
1203
- return `${(i >>> 0).toString(36)}:${e.length}`;
1204
- }
1205
- r(ia, "hashBundleCode");
1206
- function Go() {
1207
- Se.clear(), Le = null;
1208
- }
1209
- r(Go, "clearBundleCaches");
1210
- async function ra(e, i) {
1211
- const n = await Kn(), o = ia(e);
1212
- if (i) {
1213
- const h = Se.get(i);
1214
- if (h && h.hash === o)
1215
- return Se.delete(i), Se.set(i, h), h.module;
1216
- }
1217
- const a = { exports: {} }, l = /* @__PURE__ */ r((h) => {
1218
- const m = n[h];
1219
- if (m !== void 0) return m;
1220
- for (const [d, S] of Object.entries(n))
1221
- if (h.startsWith(d + "/") && S && typeof S == "object") {
1222
- const s = S[h.slice(d.length + 1)];
1223
- if (s !== void 0) return { default: s, __esModule: !0 };
1224
- }
1225
- throw new Error(`Dashboard bundle requires unknown module: "${h}". Register it with registerBiModules({ specifiers | extraHostModules }).`);
1226
- }, "requireShim");
1227
- new Function("require", "module", "exports", e)(l, a, a.exports);
1228
- const c = a.exports.default ?? a.exports;
1229
- if (i && (Se.delete(i), Se.set(i, { hash: o, module: c }), Se.size > na)) {
1230
- const h = Se.keys().next().value;
1231
- h !== void 0 && Se.delete(h);
1232
- }
1233
- return c;
1234
- }
1235
- r(ra, "evaluateDashboardBundle");
1236
- async function aa(e, i, n) {
1237
- const [o] = await Promise.all([e.fetchDashboardBundle(i, n), Kn()]);
1238
- return ra(o, `${i}::${n}`);
1239
- }
1240
- r(aa, "loadDashboardBundle");
1241
- async function oa(e, i, n) {
1242
- const o = await aa(e, i, n), a = new o();
1243
- return {
1244
- instance: a,
1245
- cards: [...a.getCardsList()],
1246
- style: a.getDashboardStyle()
1247
- };
1248
- }
1249
- r(oa, "instantiateDashboardBundle");
1250
- function Ht(e) {
1251
- var Q, ae, k;
1252
- const i = je(), n = e.client ?? i;
1253
- if (!n)
1254
- throw new Error("[@aintela/bi] useDashboardBundle needs a BiClient: pass `client` or mount <BiClientProvider>.");
1255
- const o = n, [a, l] = H(e.dashboard), c = e.dashboard ?? a, h = ie(e.onDashloadLoaded);
1256
- h.current = e.onDashloadLoaded;
1257
- const m = ie(e.onFiltersChanged);
1258
- m.current = e.onFiltersChanged;
1259
- const [d, S] = H(null), [s, y] = H(null), [b, u] = H(!1), [x, g] = H(null), O = e.isPrintPreview ?? !1, [G, F] = H(e.parameters ?? {}), z = q((E, ee) => {
1260
- F((oe) => {
1261
- var ce;
1262
- if (!ee || Array.isArray(ee) && ee.length === 0) {
1263
- const { [E]: be, ...xe } = oe;
1264
- return xe;
1265
- }
1266
- const de = { ...oe, [E]: ee };
1267
- return (ce = m.current) == null || ce.call(m, de), de;
1268
- });
1269
- }, []), _ = JSON.stringify(e.parameters ?? {}), M = me(
1270
- () => ({ ...e.parameters ?? {} }),
1271
- [_]
1272
- ), W = me(
1273
- () => ({ onChange: z, parameters: M, readonly: O }),
1274
- [M, O, z]
1275
- );
1276
- J(() => {
1277
- F((E) => ({ ...E, ...M }));
1278
- }, [M]);
1279
- const j = e.dashboardId ?? (c == null ? void 0 : c.id), A = ie(null), [v] = kr(A, 0, 0, `${j}-${(c == null ? void 0 : c.id) ?? "pending"}`), [B, D] = H({ open: !1, message: "", severity: "success" }), [T, P] = H(null), V = (Q = e.dashboardWaiting) == null ? void 0 : Q.subAgentId, K = !!V, Z = !K || Yt(T == null ? void 0 : T.status), re = (T == null ? void 0 : T.status) === "Failed" || (T == null ? void 0 : T.status) === "Cancelled", he = ((ae = e.dashboardWaiting) == null ? void 0 : ae.sessionId) ?? (c == null ? void 0 : c.originalSessionId) ?? void 0, U = (k = e.dashboardWaiting) == null ? void 0 : k.pollIntervalMs;
1280
- J(() => {
1281
- if (!K || !V || !he) {
1282
- P(null);
1283
- return;
1284
- }
1285
- const E = Math.max(U ?? 0, 1e4);
1286
- let ee = !1, oe = null;
1287
- const de = /* @__PURE__ */ r(async () => {
1288
- try {
1289
- const ce = await o.getSubAgentStatus(he, V);
1290
- if (ee || (P(ce), ce && Yt(ce.status))) return;
1291
- } catch (ce) {
1292
- if (ee) return;
1293
- console.error("Failed to poll sub-agent status:", ce);
1294
- }
1295
- ee || (oe = setTimeout(de, E));
1296
- }, "poll");
1297
- return de(), () => {
1298
- ee = !0, oe && clearTimeout(oe);
1299
- };
1300
- }, [K, V, he, U, o]), J(() => {
1301
- let E = !1;
1302
- async function ee() {
1303
- var oe;
1304
- if (!e.dashboard && j)
1305
- try {
1306
- const de = await o.getDashboard(j);
1307
- if (E) return;
1308
- l(de), (oe = h.current) == null || oe.call(h, de);
1309
- } catch (de) {
1310
- E || g(de instanceof Error ? de.message : "Failed to load dashboard");
1311
- }
1312
- }
1313
- return r(ee, "loadMetadata"), ee(), () => {
1314
- E = !0;
1315
- };
1316
- }, [j, e.dashboard, o]);
1317
- const te = e.codeGeneration, w = c == null ? void 0 : c.id, N = c == null ? void 0 : c.jsFileName, ne = c == null ? void 0 : c.originalSessionId;
1318
- J(() => {
1319
- let E = !1;
1320
- async function ee() {
1321
- if (!(K && !Z)) {
1322
- if (K && re) {
1323
- u(!1), g((T == null ? void 0 : T.error) ?? "A geração do dashboard falhou.");
1324
- return;
1325
- }
1326
- if (!(!j && !w)) {
1327
- if (w !== void 0 && !ne) {
1328
- console.error("Dashboard has no originalSessionId"), g("Dashboard has no originalSessionId");
1329
- return;
1330
- }
1331
- g(null), u(!0);
1332
- try {
1333
- const oe = N ?? `${w ?? j}.js`;
1334
- if (!ne) return;
1335
- const de = await oa(o, ne, oe);
1336
- if (E) return;
1337
- S(de.cards), y(de.style);
1338
- } catch (oe) {
1339
- E || (console.error(oe instanceof Error ? oe.message : "Failed to load dashboard"), g(oe instanceof Error ? oe.message : "Failed to load dashboard"));
1340
- } finally {
1341
- E || u(!1);
1342
- }
1343
- }
1344
- }
1345
- }
1346
- return r(ee, "loadBundle"), ee(), () => {
1347
- E = !0;
1348
- };
1349
- }, [j, w, N, ne, K, Z, re, te, o]);
1350
- const p = me(() => {
1351
- var E;
1352
- return c ? (E = c.filters) == null ? void 0 : E.map((ee) => Er(c.id, ee, W)) : null;
1353
- }, [c, W]), I = e.editable ?? !1, $ = me(() => {
1354
- if (c != null && c.cards)
1355
- return [...c.cards];
1356
- }, [c == null ? void 0 : c.cards]), R = me(() => {
1357
- if ($)
1358
- return $.map((E) => ({ ...E, isResizable: I, isDraggable: !0 }));
1359
- }, [$, I]);
1360
- return {
1361
- dashboard: c,
1362
- cards: d,
1363
- style: s,
1364
- loading: b,
1365
- error: x,
1366
- setError: g,
1367
- filters: p,
1368
- filterOptions: W,
1369
- stateParameters: G,
1370
- handleParameterChange: z,
1371
- containerRef: A,
1372
- containerWidth: v,
1373
- rawLayoutDefinition: $,
1374
- layoutDefinition: R,
1375
- effectiveDashboardId: j,
1376
- isPrintPreview: O,
1377
- snackbar: B,
1378
- setSnackbar: D,
1379
- subAgentStatus: T,
1380
- isSubAgentTracked: K,
1381
- subAgentDone: Z,
1382
- subAgentFailed: re
1383
- };
1384
- }
1385
- r(Ht, "useDashboardBundle");
1386
- const la = /* @__PURE__ */ r(({ subAgent: e }) => {
1387
- const i = cr(), n = e == null ? void 0 : e.todoList, o = (n == null ? void 0 : n.items) ?? [], a = o.filter((S) => S.status === "Completed").length, l = o.length, c = n == null ? void 0 : n.percentComplete, h = typeof c == "number" && Number.isFinite(c) ? c : l > 0 ? a / l : 0, m = Math.max(0, Math.min(100, h * 100)), d = l > 0 || m > 0;
1388
- return /* @__PURE__ */ t(
1389
- L,
1390
- {
1391
- sx: {
1392
- position: "relative",
1393
- width: "100%",
1394
- zIndex: 1500,
1395
- display: "flex",
1396
- flexDirection: "column",
1397
- alignItems: "center",
1398
- justifyContent: "center",
1399
- gap: 2,
1400
- px: 4,
1401
- minHeight: "300px",
1402
- backgroundColor: Te(i.palette.background.default, 0.85),
1403
- backdropFilter: "blur(2px)"
1404
- },
1405
- children: /* @__PURE__ */ f(le, { spacing: 2, alignItems: "center", sx: { width: "100%", maxWidth: 480 }, children: [
1406
- /* @__PURE__ */ t(X, { variant: "h6", sx: { color: "text.primary", textAlign: "center" }, children: "Aguardando a geração do dashboard" }),
1407
- (e == null ? void 0 : e.name) && /* @__PURE__ */ t(X, { variant: "body2", sx: { color: "text.secondary", textAlign: "center" }, children: e.name }),
1408
- /* @__PURE__ */ f(L, { sx: { width: "100%" }, children: [
1409
- /* @__PURE__ */ t(hr, { variant: d ? "determinate" : "indeterminate", value: d ? m : void 0, sx: { height: 10, borderRadius: 5 } }),
1410
- /* @__PURE__ */ f(le, { direction: "row", justifyContent: "space-between", sx: { mt: 1 }, children: [
1411
- /* @__PURE__ */ t(X, { variant: "caption", sx: { color: "text.secondary" }, children: l > 0 ? `${a} de ${l} tarefas` : "Inicializando..." }),
1412
- /* @__PURE__ */ t(X, { variant: "caption", sx: { color: "text.primary", fontWeight: 600 }, children: `${m.toFixed(1)}%` })
1413
- ] })
1414
- ] })
1415
- ] })
1416
- }
1417
- );
1418
- }, "SubAgentWaitingOverlay"), gt = 520, sa = /* @__PURE__ */ r(({ showPre: e, preContent: i, finalContent: n }) => {
1419
- const [o, a] = H(() => e ? "pre" : "final"), l = ie(null), c = ie(null);
1420
- return Vt(() => {
1421
- if (o === "pre" && !e) {
1422
- const h = l.current, m = (h == null ? void 0 : h.offsetHeight) ?? 0;
1423
- h && m > 0 && (h.style.height = `${m}px`), a("arriving");
1424
- } else if (o !== "pre" && e) {
1425
- const h = l.current;
1426
- h && (h.style.height = "", h.style.transition = ""), a("pre");
1427
- }
1428
- }, [o, e]), Vt(() => {
1429
- if (o !== "arriving") return;
1430
- const h = l.current, m = c.current;
1431
- if (!h || !m) return;
1432
- const d = m.offsetHeight;
1433
- h.offsetHeight, h.style.transition = `height ${gt}ms cubic-bezier(0.16, 1, 0.3, 1)`, h.style.height = `${d}px`;
1434
- const S = window.setTimeout(() => {
1435
- const s = l.current;
1436
- s && (s.style.height = "", s.style.transition = ""), a("final");
1437
- }, gt + 40);
1438
- return () => window.clearTimeout(S);
1439
- }, [o]), /* @__PURE__ */ f(
1440
- L,
1441
- {
1442
- ref: l,
1443
- sx: {
1444
- position: "relative",
1445
- overflow: o === "final" ? "auto" : "hidden",
1446
- width: "100%",
1447
- flex: 1,
1448
- minHeight: 0,
1449
- "@keyframes dashboardArriveGrow": {
1450
- "0%": { opacity: 0, transform: "scale(0.97)" },
1451
- "100%": { opacity: 1, transform: "scale(1)" }
1452
- }
1453
- },
1454
- children: [
1455
- (o === "pre" || o === "arriving") && /* @__PURE__ */ t(
1456
- "div",
1457
- {
1458
- style: {
1459
- position: o === "arriving" ? "absolute" : "relative",
1460
- top: 0,
1461
- left: 0,
1462
- right: 0,
1463
- opacity: o === "arriving" ? 0 : 1,
1464
- transition: o === "arriving" ? "opacity 360ms ease-out" : "none",
1465
- pointerEvents: o === "arriving" ? "none" : "auto",
1466
- width: "100%"
1467
- },
1468
- children: i
1469
- },
1470
- "pre-layer"
1471
- ),
1472
- (o === "arriving" || o === "final") && /* @__PURE__ */ t(
1473
- L,
1474
- {
1475
- ref: c,
1476
- sx: {
1477
- width: "100%",
1478
- animation: o === "arriving" ? `dashboardArriveGrow ${gt}ms 60ms cubic-bezier(0.16, 1, 0.3, 1) both` : "none",
1479
- "@media (prefers-reduced-motion: reduce)": { animation: "none" }
1480
- },
1481
- children: n
1482
- },
1483
- "content-layer"
1484
- )
1485
- ]
1486
- }
1487
- );
1488
- }, "DashboardBodyTransition"), _e = /* @__PURE__ */ r((e) => {
1489
- var U, te, w;
1490
- const i = e.useClassicHeader ?? !1, n = e.editable ?? !1, o = Ht({
1491
- client: e.client,
1492
- dashboardId: e.dashboardId,
1493
- parameters: e.parameters,
1494
- dashboard: e.dashboard,
1495
- dashboardWaiting: e.dashboardWaiting,
1496
- codeGeneration: e.codeGeneration,
1497
- onDashloadLoaded: e.onDashloadLoaded,
1498
- onFiltersChanged: e.onFiltersChanged,
1499
- editable: n,
1500
- isPrintPreview: e.isPrintPreview
1501
- }), {
1502
- dashboard: a,
1503
- cards: l,
1504
- style: c,
1505
- loading: h,
1506
- error: m,
1507
- setError: d,
1508
- filters: S,
1509
- filterOptions: s,
1510
- stateParameters: y,
1511
- containerRef: b,
1512
- containerWidth: u,
1513
- layoutDefinition: x,
1514
- effectiveDashboardId: g,
1515
- isPrintPreview: O,
1516
- snackbar: G,
1517
- setSnackbar: F,
1518
- subAgentStatus: z,
1519
- isSubAgentTracked: _,
1520
- subAgentDone: M
1521
- } = o, [W, j] = H(!1), [A, v] = H(1.03), B = (a == null ? void 0 : a.isDatasetParameterized) ?? !1, D = me(() => O || !e.isAdmin || !B ? null : e.datasetOverrideControl ?? null, [O, e.isAdmin, B, e.datasetOverrideControl]), T = e.onExportPdf ? async () => {
1522
- if (a) {
1523
- j(!0);
1524
- try {
1525
- await e.onExportPdf({ dashboard: a, parameters: y, datasetOverride: e.datasetOverride });
1526
- } catch (N) {
1527
- d(N instanceof Error ? N.message : "PDF export failed");
1528
- } finally {
1529
- j(!1);
1530
- }
1531
- }
1532
- } : void 0, P = !!e.onEdit, V = !!e.onSchedule && !s.readonly, K = e.headerRender ? e.headerRender({
1533
- name: a == null ? void 0 : a.name,
1534
- iconName: a == null ? void 0 : a.muiIconName,
1535
- dashboard: a ?? null,
1536
- filters: S ?? null,
1537
- hasFilters: (((U = a == null ? void 0 : a.filters) == null ? void 0 : U.length) ?? 0) > 0,
1538
- onExportPdf: T,
1539
- onSchedule: e.onSchedule,
1540
- onEdit: e.onEdit,
1541
- exporting: W,
1542
- readonly: !!s.readonly,
1543
- canEdit: P,
1544
- canSchedule: V,
1545
- datasetOverrideControl: D
1546
- }) : i ? /* @__PURE__ */ f(Ce, { children: [
1547
- /* @__PURE__ */ t(le, { direction: "row", gap: 0, sx: { padding: "5px", marginLeft: "10px", display: "inline-flex", color: "text.secondary", alignItems: "center", marginBottom: "10px", minWidth: "100%" }, children: /* @__PURE__ */ f(L, { sx: { display: "inline-flex", flexWrap: "wrap", minWidth: "100%", alignItems: "center" }, children: [
1548
- /* @__PURE__ */ f(L, { sx: { display: "inline-flex", width: "50%", alignItems: "center", gap: 1 }, children: [
1549
- /* @__PURE__ */ t("span", { className: "material-icons", style: { maxWidth: "24px" }, children: (a == null ? void 0 : a.muiIconName) ?? "dashboard" }),
1550
- /* @__PURE__ */ t(X, { component: "h2", variant: "h6", sx: { m: 0, color: "text.primary" }, children: (a == null ? void 0 : a.name) ?? "" }),
1551
- D
1552
- ] }),
1553
- /* @__PURE__ */ f(le, { direction: "row", gap: 3, sx: { width: "50%", display: "inline-flex", pr: 2, justifyContent: "right", alignItems: "center" }, children: [
1554
- P && /* @__PURE__ */ t(Ne, { onClick: e.onEdit, size: "small", disabled: W, variant: "outlined", sx: { maxWidth: "200px", p: 1 }, children: /* @__PURE__ */ f(le, { direction: "row", gap: 0.5, alignItems: "center", children: [
1555
- /* @__PURE__ */ t(X, { variant: "body2", children: "Edit" }),
1556
- /* @__PURE__ */ t(Wi, { fontSize: "small", sx: { ml: 1 } })
1557
- ] }) }),
1558
- !s.readonly && /* @__PURE__ */ f(Ce, { children: [
1559
- V && /* @__PURE__ */ t(Ne, { onClick: e.onSchedule, size: "small", variant: "outlined", sx: { maxHeight: "45px", maxWidth: "200px", p: 1 }, children: /* @__PURE__ */ f(le, { direction: "row", gap: 0.5, alignItems: "center", sx: { maxHeight: "30px" }, children: [
1560
- /* @__PURE__ */ t(X, { variant: "body2", children: e.scheduleLabel ?? "Agendar" }),
1561
- /* @__PURE__ */ t(ji, { sx: { ml: 1, fontSize: "16px" }, fontSize: "small" })
1562
- ] }) }),
1563
- T && /* @__PURE__ */ t(Ne, { onClick: T, size: "small", disabled: W, variant: "outlined", sx: { maxHeight: "45px", maxWidth: "200px", p: 1 }, children: /* @__PURE__ */ f(le, { direction: "row", gap: 0.5, alignItems: "center", sx: { maxHeight: "30px" }, children: [
1564
- /* @__PURE__ */ t(X, { variant: "body2", children: W ? "Gerando PDF..." : "Exportar PDF" }),
1565
- W ? /* @__PURE__ */ t(De, { size: 16, sx: { ml: 1 } }) : /* @__PURE__ */ t(Vi, { sx: { ml: 1, fontSize: "16px" }, fontSize: "small" })
1566
- ] }) })
1567
- ] })
1568
- ] })
1569
- ] }) }),
1570
- (((w = a == null ? void 0 : a.filters) == null ? void 0 : w.length) ?? 0) > 0 && /* @__PURE__ */ t(
1571
- le,
1572
- {
1573
- direction: "row",
1574
- gap: 2,
1575
- sx: {
1576
- flexWrap: "wrap",
1577
- width: "100%",
1578
- paddingTop: s.readonly ? "10px" : "20px",
1579
- paddingBottom: "10px",
1580
- paddingRight: "10px",
1581
- justifyContent: "flex-end",
1582
- alignItems: "flex-start",
1583
- backgroundColor: "action.hover"
1584
- },
1585
- children: S
1586
- }
1587
- )
1588
- ] }) : (((te = a == null ? void 0 : a.filters) == null ? void 0 : te.length) ?? 0) > 0 ? /* @__PURE__ */ t(le, { direction: "row", gap: 2, sx: { flexWrap: "wrap", minWidth: "100%", px: 1.25, py: 1, justifyContent: "flex-end", alignItems: "flex-start" }, children: S }) : null, Z = /* @__PURE__ */ r((N, ne, p) => {
1589
- var I;
1590
- n && (!ne || !p || (I = e.onLayoutCommit) == null || I.call(e, N, ne, p));
1591
- }, "commitUserLayoutEdit"), re = me(() => {
1592
- if (!l) return;
1593
- const N = (a == null ? void 0 : a.layoutType) ?? "Boxed";
1594
- return l.map((ne) => {
1595
- var R;
1596
- const { title: p, specificType: I, category: $ } = Mt(ne, a);
1597
- return /* @__PURE__ */ t(
1598
- bn,
1599
- {
1600
- dragLocked: e.dragLocked ?? !1,
1601
- viewType: N,
1602
- zoomLevel: 1,
1603
- header: { title: p ?? "", icon: I ? (R = e.resolveCardIcon) == null ? void 0 : R.call(e, I) : void 0 },
1604
- color: Pe[$ ?? "Generic"],
1605
- children: ne.element
1606
- },
1607
- ne.key
1608
- );
1609
- });
1610
- }, [l, a, e.dragLocked, e.resolveCardIcon]);
1611
- if (!a && g)
1612
- return /* @__PURE__ */ f(L, { sx: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", height: "100%", width: "100%", gap: 2 }, children: [
1613
- /* @__PURE__ */ t(De, {}),
1614
- /* @__PURE__ */ t(X, { color: "text.secondary", children: "Loading dashboard..." })
1615
- ] });
1616
- if (!a) return null;
1617
- const he = (e.showZoomControl ?? !0) && !O;
1618
- return /* @__PURE__ */ t(gr, { palette: e.chartPalette, rotateBasePerChart: !0, children: /* @__PURE__ */ t(
1619
- Sn,
1620
- {
1621
- values: {
1622
- dashboardId: a.id ?? g ?? "",
1623
- parameters: y,
1624
- refreshTick: e.llmRenderCount ?? 0,
1625
- datasetOverride: e.datasetOverride
1626
- },
1627
- children: /* @__PURE__ */ f(
1628
- le,
1629
- {
1630
- ref: /* @__PURE__ */ r((N) => {
1631
- b.current = !b.current && N ? N : b.current;
1632
- }, "ref"),
1633
- className: "bi-dashboard-viewer",
1634
- sx: {
1635
- height: O ? "100vh" : e.height ?? "100%",
1636
- minHeight: "300px",
1637
- display: "inline-flex",
1638
- backgroundColor: "background.default",
1639
- color: "text.primary",
1640
- overflow: "hidden",
1641
- width: "100%",
1642
- maxWidth: O ? "1000px" : "100%",
1643
- "& .grid-card::after": { borderRight: "none", borderBottom: "none" },
1644
- "& .cardDragHandle": { display: "none" }
1645
- },
1646
- children: [
1647
- /* @__PURE__ */ f("div", { style: { position: "relative", padding: 0, width: "100%", left: -3, height: "100%", maxHeight: "100%", display: "flex", flexDirection: "column", alignItems: "flex-start" }, children: [
1648
- he && /* @__PURE__ */ f(
1649
- L,
1650
- {
1651
- sx: {
1652
- position: "absolute",
1653
- left: "8px",
1654
- bottom: "50px",
1655
- zIndex: 1e3,
1656
- display: "inline-flex",
1657
- alignItems: "center",
1658
- gap: 1,
1659
- px: 1.25,
1660
- py: 0.75,
1661
- borderRadius: 999,
1662
- backgroundColor: "background.paper",
1663
- border: "1px solid",
1664
- borderColor: "divider",
1665
- boxShadow: 4,
1666
- minWidth: 180
1667
- },
1668
- children: [
1669
- /* @__PURE__ */ t(X, { variant: "caption", sx: { color: "text.secondary", textTransform: "uppercase", letterSpacing: 0.6, fontWeight: 500 }, children: "Zoom" }),
1670
- /* @__PURE__ */ t(
1671
- dr,
1672
- {
1673
- value: A,
1674
- onChange: /* @__PURE__ */ r((N, ne) => v(ne), "onChange"),
1675
- min: 0.3,
1676
- max: 2,
1677
- step: 0.01,
1678
- sx: { flex: 1, minWidth: 80, color: "primary.main", height: 3, py: "12px !important", "& .MuiSlider-thumb": { width: 12, height: 12, boxShadow: "none" }, "& .MuiSlider-rail": { opacity: 0.25 } }
1679
- }
1680
- ),
1681
- /* @__PURE__ */ f(X, { variant: "caption", sx: { color: "text.primary", fontFamily: "monospace", minWidth: 32, textAlign: "right", fontVariantNumeric: "tabular-nums" }, children: [
1682
- Math.round(A * 100),
1683
- "%"
1684
- ] })
1685
- ]
1686
- }
1687
- ),
1688
- K && /* @__PURE__ */ t(le, { direction: "row", gap: 0, sx: { display: "inline-flex", minWidth: "100%", flexWrap: "wrap", alignItems: "flex-start", mt: 1, flexShrink: 0 }, children: K }),
1689
- m && /* @__PURE__ */ f(L, { sx: { p: 1, position: "relative", width: "100%" }, children: [
1690
- /* @__PURE__ */ t(Ie, { size: "small", onClick: /* @__PURE__ */ r(() => d(null), "onClick"), sx: { position: "absolute", right: 10, top: 10 }, children: /* @__PURE__ */ t(mn, { fontSize: "small" }) }),
1691
- /* @__PURE__ */ f(qe, { severity: "error", children: [
1692
- /* @__PURE__ */ t(X, { variant: "subtitle1", fontWeight: "bold", children: "Dashboard load failed" }),
1693
- /* @__PURE__ */ t(X, { variant: "body2", children: m })
1694
- ] })
1695
- ] }),
1696
- /* @__PURE__ */ t(
1697
- sa,
1698
- {
1699
- showPre: _ && !M || h || u === 0 || !x || !re,
1700
- preContent: _ && !M ? /* @__PURE__ */ t(la, { subAgent: z }) : h ? /* @__PURE__ */ f(L, { sx: { display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", height: "100%", minHeight: 300, width: "100%", gap: 2 }, children: [
1701
- /* @__PURE__ */ t(De, {}),
1702
- /* @__PURE__ */ t(X, { color: "text.secondary", children: "Loading dashboard..." })
1703
- ] }) : null,
1704
- finalContent: /* @__PURE__ */ f("div", { id: "renderedDashboard", style: { paddingTop: 2, alignContent: "center", minHeight: "100vh", overflow: "auto", width: "100%" }, children: [
1705
- /* @__PURE__ */ t(
1706
- vn,
1707
- {
1708
- rowAwareResize: { defaultOn: !0 },
1709
- config: { rows: [] },
1710
- cols: { lg: 10, md: 8, sm: 4, xs: 4, xxs: 4 },
1711
- breakpoints: { lg: 920, md: 600, sm: 400, xs: 400, xxs: 0 },
1712
- zoomLevel: A,
1713
- responsive: !1,
1714
- rowHeight: O ? 18 : 20,
1715
- dragLocked: e.dragLocked ?? !1,
1716
- rowMultiplier: 1,
1717
- maxRows: 200,
1718
- onResizeStop: Z,
1719
- onDragStop: Z,
1720
- manualWidth: u,
1721
- layouts: x,
1722
- children: re
1723
- }
1724
- ),
1725
- c
1726
- ] })
1727
- }
1728
- )
1729
- ] }),
1730
- /* @__PURE__ */ t(xn, { open: G.open, autoHideDuration: 4e3, onClose: /* @__PURE__ */ r(() => F((N) => ({ ...N, open: !1 })), "onClose"), anchorOrigin: { vertical: "bottom", horizontal: "center" }, children: /* @__PURE__ */ t(qe, { onClose: /* @__PURE__ */ r(() => F((N) => ({ ...N, open: !1 })), "onClose"), severity: G.severity, variant: "filled", children: G.message }) })
1731
- ]
1732
- }
1733
- )
1734
- }
1735
- ) });
1736
- }, "ScriptDashboardViewer"), da = 60, ca = dt(ke);
1737
- function ha(e) {
1738
- const [i, n] = H(0);
1739
- return J(() => {
1740
- const o = e.current;
1741
- if (!o) return;
1742
- const a = /* @__PURE__ */ r(() => n(o.getBoundingClientRect().height), "measure");
1743
- if (a(), typeof ResizeObserver > "u") return;
1744
- const l = new ResizeObserver(a);
1745
- return l.observe(o), () => l.disconnect();
1746
- }, [e]), i;
1747
- }
1748
- r(ha, "useElementHeight");
1749
- const Bt = /* @__PURE__ */ r((e) => {
1750
- var B;
1751
- const i = Re(), [n, o] = H(e.cellConfig.name ?? "[Card Name]"), [a, l] = H(e.cellConfig.actionDescription ?? "[Card Description]"), [c, h] = H(!1), [m, d] = H(e.cellConfig), [S, s] = H(!1), [y, b] = H(!1), u = ie(null), x = ie(null), g = ie(null), O = ha(g), G = e.cellConfig.specificType ?? "Generic", F = e.cellConfig.category ?? "Generic", z = i.specificType[G] ?? i.specificType.Generic;
1752
- J(() => {
1753
- d(e.cellConfig);
1754
- }, [e.cellConfig]), J(() => {
1755
- const D = setTimeout(() => {
1756
- if (!u.current) return;
1757
- let T = u.current.getElementsByTagName("input").item(0);
1758
- T || (T = u.current.getElementsByTagName("textarea").item(0)), T && (T.focus(), T.selectionStart = 0, T.selectionEnd = T.value.length);
1759
- }, 50);
1760
- return () => clearTimeout(D);
1761
- }, [c, S]);
1762
- const _ = /* @__PURE__ */ r((D) => {
1763
- (!D.shiftKey && D.key === "Enter" || D.key === "Escape") && (s(!1), h(!1), e.onDataEdit(m));
1764
- }, "handleKeyPress"), M = /* @__PURE__ */ r((D, T) => {
1765
- const P = T.target.value;
1766
- if (D === o && $e(P).length > da) return;
1767
- D(P);
1768
- const V = { ...e.cellConfig };
1769
- D === o ? V.name = P : V.actionDescription = P, d(V);
1770
- }, "handleChange"), W = /* @__PURE__ */ r((D, T) => {
1771
- b(!1);
1772
- const P = { ...e.cellConfig, category: D, specificType: T };
1773
- P.muiIconName = jn[T], P.color = Gn[D];
1774
- const V = Pe[D];
1775
- (!P.name || P.name.startsWith("[Card") || Object.values(Pe).some((K) => {
1776
- var Z;
1777
- return (Z = P.name) == null ? void 0 : Z.match(new RegExp(`^${K}\\d+$`));
1778
- })) && (P.name = V, o(V)), e.onDataEdit(P);
1779
- }, "handleTypeChange"), j = (B = e.todoItem) == null ? void 0 : B.status, A = { onMouseDown: /* @__PURE__ */ r((D) => D.stopPropagation(), "onMouseDown"), onTouchStart: /* @__PURE__ */ r((D) => D.stopPropagation(), "onTouchStart") }, v = e.renderDescription ?? ((D) => /* @__PURE__ */ t("span", { style: { whiteSpace: "pre-wrap" }, children: D }));
1780
- return /* @__PURE__ */ f(
1781
- L,
1782
- {
1783
- className: "llm-env-target llm-env-card llm-env-card-sketch",
1784
- "data-env-id": e.cellConfig.i,
1785
- "data-env-key": e.cellConfig.i,
1786
- "data-env-name": e.cellConfig.name ?? "",
1787
- "data-env-kind": "sketch-card",
1788
- sx: { height: "100%", position: "relative", overflow: "hidden" },
1789
- children: [
1790
- !(e.todoItem && e.turnOpen) && /* @__PURE__ */ t(
1791
- L,
1792
- {
1793
- "aria-hidden": !0,
1794
- sx: {
1795
- position: "absolute",
1796
- inset: 0,
1797
- display: "flex",
1798
- alignItems: "center",
1799
- justifyContent: "center",
1800
- pointerEvents: "none",
1801
- color: "text.primary",
1802
- opacity: 0.06,
1803
- zIndex: 0,
1804
- "& > svg": { width: "70%", height: "70%", maxWidth: "180px", maxHeight: "180px" }
1805
- },
1806
- children: /* @__PURE__ */ t(z, {})
1807
- }
1808
- ),
1809
- /* @__PURE__ */ t(L, { sx: { position: "absolute", top: "15px", right: "-5px", display: "flex", gap: 0, zIndex: 2 }, children: /* @__PURE__ */ t(le, { ...A, children: /* @__PURE__ */ t(Ie, { size: "small", onClick: /* @__PURE__ */ r(() => {
1810
- var D;
1811
- return (D = e.onDelete) == null ? void 0 : D.call(e, e.cellConfig.i);
1812
- }, "onClick"), "aria-label": "Remover card", children: /* @__PURE__ */ t(fn, { fontSize: "small" }) }) }) }),
1813
- e.todoItem && e.turnOpen && /* @__PURE__ */ f(
1814
- L,
1815
- {
1816
- sx: /* @__PURE__ */ r((D) => ({
1817
- position: "absolute",
1818
- display: "flex",
1819
- alignItems: "center",
1820
- justifyContent: "center",
1821
- minHeight: "calc(100% + 11px)",
1822
- minWidth: "calc(100% + 10px)",
1823
- top: -6,
1824
- left: -7,
1825
- gap: 2,
1826
- py: 0.4,
1827
- borderRadius: "10px",
1828
- backgroundColor: Te(D.palette.common.black, 0.4),
1829
- opacity: j == "completed" ? 0.6 : 1
1830
- }), "sx"),
1831
- children: [
1832
- /* @__PURE__ */ t(L, { sx: { mt: "1px", flexShrink: 0, color: j == "completed" ? "success.main" : j === "in_progress" ? "primary.main" : "text.disabled" }, children: j == "completed" ? /* @__PURE__ */ t(Ui, { sx: { fontSize: "0.95rem" } }) : j === "in_progress" ? /* @__PURE__ */ t(Yi, { sx: { fontSize: "0.95rem" } }) : /* @__PURE__ */ t(De, { size: 20, sx: { fontSize: "0.95rem" } }) }),
1833
- /* @__PURE__ */ f(L, { sx: { textAlign: "left" }, children: [
1834
- /* @__PURE__ */ t(X, { variant: "caption", sx: { display: "block", fontSize: "0.78rem", lineHeight: 1.3, textDecoration: j === "completed" ? "line-through" : "none" }, children: e.todoItem.label }),
1835
- e.todoItem.detail && /* @__PURE__ */ t(X, { variant: "caption", sx: { display: "block", fontSize: "0.7rem", color: "text.secondary", lineHeight: 1.3 }, children: e.todoItem.detail })
1836
- ] })
1837
- ]
1838
- }
1839
- ),
1840
- /* @__PURE__ */ t(Je, { open: y, anchorEl: x.current, placement: "bottom-start", transition: !0, sx: { zIndex: 1300 }, children: /* @__PURE__ */ r(({ TransitionProps: D }) => /* @__PURE__ */ t(Xe, { ...D, children: /* @__PURE__ */ t(He, { elevation: 8, sx: { maxHeight: 380, overflow: "auto", minWidth: 240 }, children: /* @__PURE__ */ t(Ze, { onClickAway: /* @__PURE__ */ r(() => b(!1), "onClickAway"), children: /* @__PURE__ */ t(Ct, { dense: !0, children: Object.entries(ca).map(([T, P], V) => {
1841
- const K = i.category[T];
1842
- return /* @__PURE__ */ f(L, { children: [
1843
- V > 0 && /* @__PURE__ */ t(Qe, {}),
1844
- /* @__PURE__ */ f(X, { variant: "overline", sx: { px: 2, pt: 1, display: "flex", alignItems: "center", gap: 0.5 }, children: [
1845
- /* @__PURE__ */ t(K, { fontSize: "inherit" }),
1846
- T
1847
- ] }),
1848
- P.map((Z) => {
1849
- const re = i.specificType[Z.specificType];
1850
- return /* @__PURE__ */ f(Ae, { selected: Z.specificType === G, onClick: /* @__PURE__ */ r(() => W(Z.category, Z.specificType), "onClick"), children: [
1851
- /* @__PURE__ */ t(et, { children: /* @__PURE__ */ t(re, { fontSize: "small" }) }),
1852
- /* @__PURE__ */ t(tt, { children: Z.label })
1853
- ] }, Z.specificType);
1854
- })
1855
- ] }, T);
1856
- }) }) }) }) }), "children") }),
1857
- /* @__PURE__ */ t(L, { sx: { minHeight: "20%", textAlign: "left", position: "relative", zIndex: 1 }, children: /* @__PURE__ */ f(le, { direction: "row", children: [
1858
- /* @__PURE__ */ t(
1859
- Ie,
1860
- {
1861
- ...A,
1862
- ref: x,
1863
- size: "small",
1864
- onClick: /* @__PURE__ */ r(() => b((D) => !D), "onClick"),
1865
- title: `Tipo: ${F} / ${G}`,
1866
- sx: { color: "primary.main", mr: 0 },
1867
- children: /* @__PURE__ */ t(z, { fontSize: "small" })
1868
- }
1869
- ),
1870
- !c && /* @__PURE__ */ t(
1871
- L,
1872
- {
1873
- ...A,
1874
- onClick: /* @__PURE__ */ r(() => {
1875
- h(!0), s(!1);
1876
- }, "onClick"),
1877
- sx: { color: "text.primary", minWidth: "50%", maxWidth: "80%", maxHeight: "30px", cursor: "pointer", display: "inline-flex", alignItems: "center", gap: 0.5, overflow: "clip", textWrap: "nowrap" },
1878
- children: n
1879
- }
1880
- ),
1881
- c && /* @__PURE__ */ t(
1882
- Be,
1883
- {
1884
- size: "small",
1885
- ref: u,
1886
- ...A,
1887
- onChange: /* @__PURE__ */ r((D) => M(o, D), "onChange"),
1888
- onBlur: /* @__PURE__ */ r((D) => M(o, D), "onBlur"),
1889
- onKeyDown: _,
1890
- value: n,
1891
- sx: /* @__PURE__ */ r((D) => ({
1892
- fontSize: "0.75rem",
1893
- width: "82%",
1894
- "& .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline": { border: "0px" },
1895
- "& .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline": { border: "0px", pl: 3, p: 0, backgroundColor: Te(D.palette.text.primary, 0.08) }
1896
- }), "sx"),
1897
- slotProps: {
1898
- root: { style: { padding: "2px 0px 0px 0px", border: "0px" } },
1899
- input: { style: { padding: "2px 0px 0px 0px", border: "0px" } }
1900
- }
1901
- }
1902
- )
1903
- ] }) }),
1904
- /* @__PURE__ */ f(L, { ref: g, sx: { textAlign: "left", position: "relative", zIndex: 1, minHeight: "80%" }, ...A, children: [
1905
- !S && /* @__PURE__ */ t(
1906
- L,
1907
- {
1908
- ...A,
1909
- onClick: /* @__PURE__ */ r(() => {
1910
- s(!0), h(!1);
1911
- }, "onClick"),
1912
- sx: { fontSize: "0.85rem", cursor: "pointer", color: "text.primary", width: "100%", minHeight: "30%", pb: "20px" },
1913
- children: v(a)
1914
- }
1915
- ),
1916
- S && /* @__PURE__ */ t(
1917
- Be,
1918
- {
1919
- slotProps: {
1920
- root: { style: { padding: "0px", border: "0px" } },
1921
- input: { style: { padding: "0px 0px 5px 0px", border: "0px", height: Math.max(0, O - 2.5), alignContent: "start", flexWrap: "wrap", fontSize: "0.8rem" } }
1922
- },
1923
- multiline: !0,
1924
- ref: u,
1925
- sx: /* @__PURE__ */ r((D) => ({
1926
- minHeight: "100%",
1927
- alignContent: "start",
1928
- width: "92%",
1929
- "& .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline": { border: "0px" },
1930
- "& .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline": { border: "0px", backgroundColor: Te(D.palette.text.primary, 0.08) }
1931
- }), "sx"),
1932
- onChange: /* @__PURE__ */ r((D) => {
1933
- D.stopPropagation(), M(l, D);
1934
- }, "onChange"),
1935
- onBlur: /* @__PURE__ */ r((D) => M(l, D), "onBlur"),
1936
- onKeyDown: _,
1937
- value: a
1938
- }
1939
- )
1940
- ] })
1941
- ]
1942
- }
1943
- );
1944
- }, "CardSketch"), ua = Bt, Gt = /* @__PURE__ */ r(({ filter: e, onEdit: i, onDelete: n }) => {
1945
- const [o, a] = H(!1), [l, c] = H(e.name), h = ie(null), m = Re().filterType[e.filterType];
1946
- J(() => {
1947
- o && h.current && (h.current.focus(), h.current.select());
1948
- }, [o]), J(() => {
1949
- c(e.name);
1950
- }, [e.name]);
1951
- const d = /* @__PURE__ */ r(() => {
1952
- const s = l.trim();
1953
- s && s !== e.name ? i({ ...e, name: s }) : c(e.name), a(!1);
1954
- }, "commitName"), S = /* @__PURE__ */ r((s) => {
1955
- s.key === "Enter" && d(), s.key === "Escape" && (c(e.name), a(!1));
1956
- }, "handleKeyDown");
1957
- return /* @__PURE__ */ f(
1958
- L,
1959
- {
1960
- className: "llm-env-target llm-env-filter llm-env-filter-sketch",
1961
- "data-env-id": e.i,
1962
- "data-env-key": e.i,
1963
- "data-env-name": e.name,
1964
- "data-env-kind": "sketch-filter",
1965
- sx: /* @__PURE__ */ r((s) => ({
1966
- display: "inline-flex",
1967
- alignItems: "center",
1968
- gap: 0.5,
1969
- flexWrap: "wrap",
1970
- border: `1px dashed ${s.palette.divider}`,
1971
- borderRadius: "10px",
1972
- maxHeight: "90%",
1973
- px: 1,
1974
- py: 0.5,
1975
- backgroundColor: s.palette.background.default,
1976
- maxWidth: 260
1977
- }), "sx"),
1978
- children: [
1979
- /* @__PURE__ */ t(m, { sx: { fontSize: 16, color: "primary.main", flexShrink: 0 } }),
1980
- o ? /* @__PURE__ */ t(
1981
- Be,
1982
- {
1983
- inputRef: h,
1984
- value: l,
1985
- onChange: /* @__PURE__ */ r((s) => c(s.target.value), "onChange"),
1986
- onBlur: d,
1987
- onKeyDown: S,
1988
- variant: "standard",
1989
- size: "small",
1990
- slotProps: {
1991
- input: { disableUnderline: !0, sx: { fontSize: "0.75rem", pl: 1, height: 20 } },
1992
- root: { style: { width: "80%" } }
1993
- }
1994
- }
1995
- ) : /* @__PURE__ */ t(
1996
- X,
1997
- {
1998
- variant: "caption",
1999
- noWrap: !0,
2000
- onClick: /* @__PURE__ */ r(() => a(!0), "onClick"),
2001
- sx: {
2002
- cursor: "pointer",
2003
- fontSize: "0.75rem",
2004
- color: "text.primary",
2005
- pl: 1,
2006
- width: "80%",
2007
- minWidth: "90px",
2008
- "&:hover": { textDecoration: "underline" }
2009
- },
2010
- children: e.name
2011
- }
2012
- ),
2013
- e.filterType !== "AutoComplete" && /* @__PURE__ */ t(Oe, { title: e.mandatory ? "Mandatory filter" : "Optional filter", arrow: !0, children: /* @__PURE__ */ f(L, { sx: { display: "inline-flex", alignItems: "center", gap: 0 }, children: [
2014
- /* @__PURE__ */ t(X, { variant: "caption", sx: { fontSize: "0.6rem", color: "text.secondary", minWidth: "55px", whiteSpace: "nowrap" }, children: e.mandatory ? "Obrigatório" : "Opcional" }),
2015
- /* @__PURE__ */ t(
2016
- wt,
2017
- {
2018
- size: "small",
2019
- checked: e.mandatory,
2020
- onChange: /* @__PURE__ */ r((s, y) => i({ ...e, mandatory: y }), "onChange"),
2021
- sx: { transform: "scale(0.7)", ml: -0.5, mr: -1 }
2022
- }
2023
- )
2024
- ] }) }),
2025
- e.filterType === "AutoComplete" && /* @__PURE__ */ t(Oe, { title: e.multipleSelection ? "Multiple selection" : "Single selection", arrow: !0, children: /* @__PURE__ */ f(L, { sx: { display: "inline-flex", alignItems: "center", gap: 0 }, children: [
2026
- /* @__PURE__ */ t(X, { variant: "caption", sx: { fontSize: "0.6rem", color: "text.secondary", whiteSpace: "wrap", minWidth: "43px" }, children: e.multipleSelection ? "Multiple" : "Single" }),
2027
- /* @__PURE__ */ t(
2028
- wt,
2029
- {
2030
- size: "small",
2031
- checked: e.multipleSelection ?? !1,
2032
- onChange: /* @__PURE__ */ r((s, y) => i({ ...e, multipleSelection: y }), "onChange"),
2033
- sx: { transform: "scale(0.7)", ml: -0.5, mr: -1 }
2034
- }
2035
- )
2036
- ] }) }),
2037
- /* @__PURE__ */ t(Ie, { size: "small", onClick: /* @__PURE__ */ r(() => n(e.i), "onClick"), sx: { p: 0.2, ml: "auto" }, "aria-label": "Remover filtro", children: /* @__PURE__ */ t(fn, { sx: { fontSize: 14 } }) })
2038
- ]
2039
- }
2040
- );
2041
- }, "FilterSketch"), Ue = /* @__PURE__ */ r((e) => {
2042
- const [i, n] = H(!1), [o, a] = H(e.text), l = ie(null), c = e.fontSize ?? 12;
2043
- J(() => {
2044
- i && l.current && (l.current.focus(), l.current.select()), a(e.text);
2045
- }, [i, e.text]);
2046
- const h = /* @__PURE__ */ r(() => {
2047
- const d = (o == null ? void 0 : o.trim()) ?? "";
2048
- d !== e.text && e.onEdit(d), a(d), n(!1);
2049
- }, "commit");
2050
- return /* @__PURE__ */ t(
2051
- L,
2052
- {
2053
- sx: /* @__PURE__ */ r((d) => ({
2054
- display: "inline-flex",
2055
- alignItems: "center",
2056
- gap: 0.5,
2057
- px: 1,
2058
- py: 0.5,
2059
- mb: 0.5,
2060
- backgroundColor: d.palette.background.paper,
2061
- width: "100%"
2062
- }), "sx"),
2063
- children: i ? /* @__PURE__ */ t(
2064
- Be,
2065
- {
2066
- inputRef: l,
2067
- value: o,
2068
- onChange: /* @__PURE__ */ r((d) => a(d.target.value), "onChange"),
2069
- onBlur: h,
2070
- onKeyDown: /* @__PURE__ */ r((d) => {
2071
- d.key === "Enter" && !(e.multiline && d.shiftKey) && h(), d.key === "Escape" && (a(e.text), n(!1));
2072
- }, "handleKeyDown"),
2073
- multiline: e.multiline,
2074
- variant: "standard",
2075
- size: "small",
2076
- sx: { width: "100%", overflow: "hidden" },
2077
- slotProps: {
2078
- input: {
2079
- disableUnderline: !0,
2080
- sx: /* @__PURE__ */ r((d) => ({ minWidth: "100px", color: d.palette.text.primary, fontSize: c, margin: 0, padding: 0, pl: 1 }), "sx")
2081
- },
2082
- root: {
2083
- sx: {
2084
- overflow: "hidden",
2085
- alignContent: "center",
2086
- padding: "0px",
2087
- width: e.multiline ? "90%" : "unset",
2088
- margin: 0,
2089
- height: e.multiline ? "35px" : "unset"
2090
- }
2091
- }
2092
- }
2093
- }
2094
- ) : /* @__PURE__ */ t(
2095
- L,
2096
- {
2097
- onClick: /* @__PURE__ */ r(() => n(!0), "onClick"),
2098
- sx: /* @__PURE__ */ r((d) => ({
2099
- cursor: "pointer",
2100
- fontFamily: d.typography.fontFamily,
2101
- fontSize: c,
2102
- color: d.palette.text.primary,
2103
- pl: 1,
2104
- minWidth: "100px",
2105
- height: "100%",
2106
- minHeight: "20px",
2107
- overflow: "clip",
2108
- whiteSpace: e.multiline ? "pre-wrap" : "nowrap",
2109
- "&:hover": { textDecoration: "underline" }
2110
- }), "sx"),
2111
- children: !o || o.length == 0 ? e.placeHolderText : o
2112
- }
2113
- )
2114
- }
2115
- );
2116
- }, "TitleSketch"), pa = Ue, ma = Ue, fa = { Large: 4, Desktop: 4, Tablet: 4, Mobile: 4 }, ga = { Large: 12, Desktop: 12, Tablet: 12, Mobile: 12 }, xt = 6;
2117
- function xa(e, i, n = 0) {
2118
- const [o, a] = H(n);
2119
- return J(() => {
2120
- const l = e.current;
2121
- if (!l || (a(l.getBoundingClientRect().width), typeof ResizeObserver > "u")) return;
2122
- const c = new ResizeObserver((h) => {
2123
- const m = h[0];
2124
- m && a(m.contentRect.width);
2125
- });
2126
- return c.observe(l), () => c.disconnect();
2127
- }, [e, i]), o;
2128
- }
2129
- r(xa, "useContainerWidth");
2130
- const ya = /* @__PURE__ */ r((e) => {
2131
- const i = Math.round(Date.now() * Math.pow(10, -6));
2132
- return `${$e(e)}_${i}`;
2133
- }, "makeNameUnique"), ht = Et((e, i) => {
2134
- const n = ye(), o = Y((p) => {
2135
- var I;
2136
- return (I = p.dashboardDefinition) == null ? void 0 : I.cards;
2137
- }) ?? ba, a = Y((p) => {
2138
- var I;
2139
- return (I = p.dashboardDefinition) == null ? void 0 : I.filters;
2140
- }) ?? va, l = Y((p) => {
2141
- var I;
2142
- return ((I = p.dashboardDefinition) == null ? void 0 : I.name) ?? "";
2143
- }), c = Y((p) => {
2144
- var I;
2145
- return ((I = p.dashboardDefinition) == null ? void 0 : I.layoutType) ?? "Boxed";
2146
- }), h = Y((p) => {
2147
- var I;
2148
- return (I = p.dashboardDefinition) == null ? void 0 : I.id;
2149
- }), m = Y((p) => p.turnOpen), d = Y((p) => p.todosByCardKey), [S, s] = H([]), y = ie(null), b = xa(y, e.renderId), [u, x] = H(null), [g, O] = H(0), G = ie({}), F = ie(0), z = ie(void 0), _ = fe(), M = e.zoomLevel ?? 0.8, W = q((p, I) => {
2150
- I && (n.getState().recordSketchChange("dashboard:layoutType", `Set layout type to ${I}`), n.getState().updateDashboard({ layoutType: I }));
2151
- }, [n]);
2152
- J(() => {
2153
- if (h === z.current || (z.current = h, !h)) return;
2154
- const p = n.getState().dashboardDefinition, I = (p == null ? void 0 : p.cards) ?? [];
2155
- G.current = {}, I.forEach(($) => {
2156
- const R = Pe[$.category ?? "Generic"];
2157
- G.current[R] = (G.current[R] ?? 0) + 1;
2158
- }), F.current = ((p == null ? void 0 : p.filters) ?? []).length, s(I);
2159
- }, [h, n]);
2160
- const j = q((p) => {
2161
- const I = Pe[p], $ = (G.current[I] ?? 0) + 1;
2162
- return G.current[I] = $, ya(`${I}${$}`);
2163
- }, []), A = q((p, I) => {
2164
- s(p);
2165
- }, []), v = q((p, I, $) => {
2166
- var ce;
2167
- if (!I || !$) return;
2168
- const R = ((ce = n.getState().dashboardDefinition) == null ? void 0 : ce.cards) ?? [];
2169
- let Q = !1;
2170
- const ae = R.map((be) => {
2171
- const xe = p.find((bi) => bi.i === be.i);
2172
- return xe && (be.w !== xe.w || be.h !== xe.h || be.x !== xe.x || be.y !== xe.y) ? (Q = !0, { ...be, w: xe.w, h: xe.h, x: xe.x, y: xe.y }) : be;
2173
- });
2174
- if (!Q) return;
2175
- const k = R.find((be) => be.i === $.i), E = (k == null ? void 0 : k.name) ?? $.i, ee = I.w !== $.w || I.h !== $.h, oe = I.x !== $.x || I.y !== $.y, de = `card:${$.i}:layout`;
2176
- ee && oe ? n.getState().recordSketchChange(de, `Resized and moved card '${E}' to (w:${$.w}, h:${$.h}, x:${$.x}, y:${$.y})`) : ee ? n.getState().recordSketchChange(de, `Resized card '${E}' to (w:${$.w}, h:${$.h})`) : oe && n.getState().recordSketchChange(de, `Moved card '${E}' to (x:${$.x}, y:${$.y})`), n.getState().updateDashboard({ cards: ae });
2177
- }, [n]), B = q((p) => {
2178
- var R;
2179
- const I = ((R = n.getState().dashboardDefinition) == null ? void 0 : R.cards) ?? [], $ = I.find((Q) => Q.i === p);
2180
- n.getState().recordSketchChange(`card:${p}:delete`, `Deleted card '${($ == null ? void 0 : $.name) ?? p}'`), n.getState().updateDashboard({ cards: I.filter((Q) => Q.i !== p) });
2181
- }, [n]), D = q((p = "Generic", I = "Generic") => {
2182
- const $ = j(p);
2183
- return {
2184
- i: $e($),
2185
- h: xt,
2186
- w: g,
2187
- y: 1 / 0,
2188
- x: 0,
2189
- isDraggable: void 0,
2190
- isResizable: !0,
2191
- category: p,
2192
- specificType: I,
2193
- name: $
2194
- };
2195
- }, [g, j]), T = q((p) => {
2196
- const I = p.length === 0 ? "Untitled Dashboard" : p;
2197
- n.getState().recordSketchChange("dashboard:name", `Renamed dashboard to '${I}'`), n.getState().updateDashboard({ name: I });
2198
- }, [n]), P = q((p) => {
2199
- var k;
2200
- const I = ((k = n.getState().dashboardDefinition) == null ? void 0 : k.cards) ?? [], $ = S.find((E) => E.i === p.i), R = I.find((E) => E.i === p.i), Q = I.map((E) => E.i !== p.i ? E : {
2201
- ...E,
2202
- ...$ ? { w: $.w, h: $.h, x: $.x, y: $.y } : {},
2203
- name: p.name,
2204
- actionDescription: p.actionDescription,
2205
- category: p.category,
2206
- specificType: p.specificType,
2207
- muiIconName: p.muiIconName
2208
- }), ae = [];
2209
- R && (R.name !== p.name && ae.push(`name → '${p.name}'`), R.actionDescription !== p.actionDescription && ae.push("description"), R.category !== p.category && ae.push(`category → '${p.category}'`), R.specificType !== p.specificType && ae.push(`type → '${p.specificType}'`), R.muiIconName !== p.muiIconName && ae.push("icon")), ae.length > 0 && n.getState().recordSketchChange(`card:${p.i}:edit`, `Edited card '${(R == null ? void 0 : R.name) ?? p.name}' (${ae.join(", ")})`), n.getState().updateDashboard({ cards: Q });
2210
- }, [S, n]), V = q(() => {
2211
- const p = u ? ga[u] : 10, I = S.length > 0 ? S[S.length - 1] : null;
2212
- let $ = 0, R = 0;
2213
- return I && (R = I.y, I.x + I.w > p - g ? (R += 1, $ = 0) : $ = I.x + I.w), { x: $, y: R };
2214
- }, [u, S, g]), K = q((p, I) => {
2215
- var R;
2216
- const $ = ((R = n.getState().dashboardDefinition) == null ? void 0 : R.cards) ?? [];
2217
- n.getState().recordSketchChange(`card:${p.i}:add`, I), n.getState().updateDashboard({ cards: [...$, p] });
2218
- }, [n]), Z = q((p, I) => {
2219
- const $ = (p == null ? void 0 : p.category) ?? "Generic", R = (p == null ? void 0 : p.specificType) ?? "Generic", Q = D($, R);
2220
- Q.actionDescription = p == null ? void 0 : p.description, I && (Q.h = xt, Q.w = g, Q.y = I.y, Q.x = I.x), K(Q, `Added card '${Q.name}' (category: ${$}, type: ${R})`);
2221
- }, [D, g, K]), re = q(() => {
2222
- if (g === 0) return;
2223
- const p = D("Generic", "Generic"), I = V();
2224
- p.x = I.x, p.y = I.y, K(p, `Added card '${p.name}'`);
2225
- }, [g, D, V, K]), he = q((p, I, $) => {
2226
- const R = D(p, I), Q = V();
2227
- R.x = Q.x, R.y = Q.y, R.w = g, R.h = xt, K(R, `Added card '${R.name}' (category: ${p}, type: ${I})`);
2228
- }, [g, D, V, K]);
2229
- J(() => {
2230
- if (b == 0) return;
2231
- let p = "Desktop";
2232
- b >= 920 && (p = "Large"), b < 920 && (p = "Desktop"), b < 750 && (p = "Tablet"), b < 600 && (p = "Mobile"), x(p), O(fa[p]);
2233
- }, [b]);
2234
- const U = q((p) => {
2235
- var k;
2236
- F.current += 1;
2237
- const I = `Filter${F.current}`;
2238
- let $ = !1;
2239
- p == "DateRangePicker" && ($ = !0);
2240
- const R = Me(), Q = { i: R, name: I, filterType: p, mandatory: $, multipleSelection: !0 }, ae = ((k = n.getState().dashboardDefinition) == null ? void 0 : k.filters) ?? [];
2241
- n.getState().recordSketchChange(`filter:${R}:add`, `Added filter '${Q.name}' (type: ${p})`), n.getState().updateDashboard({ filters: [...ae, Q] });
2242
- }, [n]), te = q((p) => {
2243
- var $;
2244
- const I = (($ = n.getState().dashboardDefinition) == null ? void 0 : $.filters) ?? [];
2245
- n.getState().recordSketchChange(
2246
- `filter:${p.i}:edit`,
2247
- `Edited filter '${p.name}' - ${p.mandatory ? "Mandatório" : "Opcional"} - ${p.multipleSelection ? "MultipleSelection" : "SingleValue"}`
2248
- ), n.getState().updateDashboard({ filters: I.map((R) => R.i === p.i ? { ...p } : R) });
2249
- }, [n]), w = q((p) => {
2250
- var R;
2251
- const I = ((R = n.getState().dashboardDefinition) == null ? void 0 : R.filters) ?? [], $ = I.find((Q) => Q.i === p);
2252
- n.getState().recordSketchChange(`filter:${p}:delete`, `Deleted filter '${($ == null ? void 0 : $.name) ?? p}'`), n.getState().updateDashboard({ filters: I.filter((Q) => Q.i !== p) });
2253
- }, [n]);
2254
- sn(i, () => ({ addGenericCell: re, addTypedCell: he, handleAddFilter: U }), [re, he, U]);
2255
- const N = /* @__PURE__ */ r((p) => ({ border: p ? "0px" : `1px solid ${_.palette.divider}`, px: 1, py: 0, gap: 0.5, textTransform: "none" }), "toggleSx"), ne = /* @__PURE__ */ r((p) => ({
2256
- fontSize: "0.75rem",
2257
- lineHeight: 1,
2258
- maxWidth: p ? 60 : 0,
2259
- overflow: "hidden",
2260
- opacity: p ? 1 : 0,
2261
- whiteSpace: "nowrap",
2262
- transition: "max-width 0.25s ease, opacity 0.2s ease"
2263
- }), "toggleLabelSx");
2264
- return /* @__PURE__ */ f(le, { ref: y, className: "bi-dashboard-pad-sketch", sx: { height: "100%", overflow: "hidden" }, children: [
2265
- !e.hideInternalHeader && /* @__PURE__ */ f(L, { sx: { display: "inline-flex", alignItems: "center", flexWrap: "nowrap", gap: 1, pt: 0.5, pb: 0, pr: 1, pl: 1, borderBottom: `1px solid ${_.palette.divider}` }, children: [
2266
- /* @__PURE__ */ t(L, { sx: { display: "inline-flex", width: "75%" }, children: /* @__PURE__ */ t(L, { sx: { width: "75%" }, children: /* @__PURE__ */ t(Ue, { placeHolderText: "Untitled Dashboard", onEdit: T, text: l, fontSize: 14.4 }) }) }),
2267
- /* @__PURE__ */ f(L, { sx: { position: "relative", display: "inline-flex", width: "25%", gap: 1, top: -2, justifyContent: "center", alignItems: "center" }, children: [
2268
- /* @__PURE__ */ t(X, { component: "span", sx: { color: "text.secondary" }, children: "Layout:" }),
2269
- /* @__PURE__ */ f(
2270
- yn,
2271
- {
2272
- value: c,
2273
- exclusive: !0,
2274
- onChange: W,
2275
- size: "small",
2276
- className: "llm-env-target llm-env-layout-toggle",
2277
- "data-env-id": "dashboard-pad-layout-toggle",
2278
- sx: { height: 24, border: "0px", "& .Mui-selected": { border: `1px solid ${_.palette.divider}` } },
2279
- children: [
2280
- /* @__PURE__ */ f(nt, { value: "Boxed", "data-env-id": "dashboard-pad-layout-boxed", sx: N(c === "Boxed"), children: [
2281
- /* @__PURE__ */ t(Ki, { sx: { fontSize: 18 } }),
2282
- /* @__PURE__ */ t(X, { component: "span", sx: ne(c === "Boxed"), children: "Boxed" })
2283
- ] }),
2284
- /* @__PURE__ */ f(nt, { value: "Naked", "data-env-id": "dashboard-pad-layout-naked", sx: N(c === "Naked"), children: [
2285
- /* @__PURE__ */ t(qi, { sx: { fontSize: 18 } }),
2286
- /* @__PURE__ */ t(X, { component: "span", sx: ne(c === "Naked"), children: "Naked" })
2287
- ] })
2288
- ]
2289
- }
2290
- ),
2291
- e.headerExtra
2292
- ] })
2293
- ] }),
2294
- a.length > 0 && !e.hideFiltersInSketch && /* @__PURE__ */ t(L, { sx: { display: "inline-flex", justifyContent: "flex-end", flexWrap: "wrap", gap: 1, pt: 0.5, pb: 0, pr: 1, pl: 1, borderBottom: `1px solid ${_.palette.divider}` }, children: a.map((p) => /* @__PURE__ */ t(Gt, { filter: p, onEdit: te, onDelete: w }, p.i)) }),
2295
- /* @__PURE__ */ f("div", { style: { maxHeight: "100%", height: "100%", overflow: "auto" }, children: [
2296
- b !== 0 && o.length > 0 && /* @__PURE__ */ t("div", { style: { display: "inline-flex", flex: 1, alignItems: "center", justifyContent: "center", paddingBottom: e.hideInternalHeader ? "50px" : "80px", overflow: "auto", width: "100%" }, children: /* @__PURE__ */ t(
2297
- vn,
2298
- {
2299
- rowAwareResize: { defaultOn: !0 },
2300
- onLayoutChange: A,
2301
- onResizeStop: v,
2302
- onDragStop: v,
2303
- onDrop: Z,
2304
- config: {},
2305
- cols: { lg: 10, md: 8, sm: 4, xs: 4, xxs: 4 },
2306
- breakpoints: { lg: 920, md: 600, sm: 400, xs: 400, xxs: 0 },
2307
- rowHeight: 10,
2308
- dragLocked: !1,
2309
- zoomLevel: M,
2310
- responsive: !1,
2311
- maxRows: 200,
2312
- rowMultiplier: 1,
2313
- manualWidth: b,
2314
- layouts: o,
2315
- children: o.map((p) => {
2316
- var I;
2317
- return /* @__PURE__ */ t(
2318
- fr,
2319
- {
2320
- className: "llm-env-target llm-env-card llm-env-card-sketch-wrapper",
2321
- "data-env-id": p.i,
2322
- naked: c == "Naked",
2323
- "data-env-key": p.i,
2324
- "data-env-name": p.name ?? "",
2325
- "data-env-kind": "sketch-card-wrapper",
2326
- children: /* @__PURE__ */ t(
2327
- Bt,
2328
- {
2329
- turnOpen: m ?? !1,
2330
- todoItem: (I = d[p.i]) == null ? void 0 : I.todo,
2331
- cellConfig: p,
2332
- onDataEdit: P,
2333
- onDelete: B,
2334
- renderDescription: e.renderDescription
2335
- }
2336
- )
2337
- },
2338
- p.i
2339
- );
2340
- })
2341
- },
2342
- h
2343
- ) }),
2344
- b !== 0 && o.length == 0 && /* @__PURE__ */ t(
2345
- L,
2346
- {
2347
- sx: /* @__PURE__ */ r((p) => ({
2348
- background: "transparent",
2349
- border: "none",
2350
- textAlign: "left",
2351
- padding: "6px 0",
2352
- height: "100%",
2353
- color: p.palette.text.secondary,
2354
- fontFamily: p.typography.fontFamily,
2355
- display: "inline-flex",
2356
- width: "100%",
2357
- justifyContent: "center",
2358
- alignItems: "center",
2359
- "&:hover": { color: p.palette.text.primary }
2360
- }), "sx"),
2361
- children: /* @__PURE__ */ f(le, { direction: "row", gap: 1, sx: { "&:hover": { cursor: "pointer" } }, onClick: /* @__PURE__ */ r(() => {
2362
- var p;
2363
- return (p = e.onAddCard) == null ? void 0 : p.call(e);
2364
- }, "onClick"), children: [
2365
- /* @__PURE__ */ t(L, { component: "span", sx: /* @__PURE__ */ r((p) => ({ color: p.palette.text.disabled }), "sx"), children: "↗" }),
2366
- /* @__PURE__ */ t(X, { sx: /* @__PURE__ */ r((p) => ({ fontSize: 20, fontWeight: 600, color: p.palette.text.primary, margin: 0, lineHeight: 1.2, letterSpacing: -0.4 }), "sx"), children: "Clique aqui para adicionar um novo card" })
2367
- ] })
2368
- }
2369
- )
2370
- ] })
2371
- ] });
2372
- });
2373
- ht.displayName = "DashboardPadSketch";
2374
- const ba = [], va = [], Ee = /* @__PURE__ */ r((e) => {
2375
- const i = fe(), n = e.maxWidth ?? 30;
2376
- return /* @__PURE__ */ t(
2377
- L,
2378
- {
2379
- sx: {
2380
- "& .action-btn": {
2381
- display: "inline-flex",
2382
- alignItems: "center",
2383
- height: 28,
2384
- borderRadius: 1,
2385
- px: 0.75,
2386
- cursor: "pointer",
2387
- overflow: "hidden",
2388
- transition: "background-color 0.2s",
2389
- "&:hover": { borderRadius: 1, px: 1.5, backgroundColor: i.palette.action.hover },
2390
- "&:hover .action-label": { maxWidth: n, opacity: 1, ml: 0.5 }
2391
- },
2392
- "& .action-btn-fixed": {
2393
- display: "inline-flex",
2394
- alignItems: "center",
2395
- height: 28,
2396
- borderRadius: 1,
2397
- px: 0.75,
2398
- cursor: "pointer",
2399
- "&:hover": { bgcolor: i.palette.success.light }
2400
- },
2401
- "& .action-label": {
2402
- maxWidth: 0,
2403
- overflow: "hidden",
2404
- whiteSpace: "nowrap",
2405
- opacity: 0,
2406
- ml: 0,
2407
- transition: "max-width 0.3s ease, opacity 0.15s ease 0.1s, margin 0.3s ease",
2408
- fontSize: "0.7rem",
2409
- lineHeight: 1
2410
- },
2411
- "& .action-label-fixed": {
2412
- overflow: "hidden",
2413
- whiteSpace: "nowrap",
2414
- ml: 0,
2415
- fontSize: "0.7rem",
2416
- lineHeight: 1,
2417
- marginRight: 1
2418
- }
2419
- },
2420
- children: /* @__PURE__ */ f(L, { className: e.fixed ? "action-btn-fixed" : "action-btn", onClick: /* @__PURE__ */ r((o) => {
2421
- var a;
2422
- return (a = e.onClick) == null ? void 0 : a.call(e, o);
2423
- }, "onClick"), sx: { color: "text.secondary" }, children: [
2424
- typeof e.icon == "function" ? e.icon() : e.icon,
2425
- /* @__PURE__ */ t(X, { className: e.fixed ? "action-label-fixed" : "action-label", component: "span", children: e.label })
2426
- ] })
2427
- }
2428
- );
2429
- }, "HoverButton"), Sa = dt(ke);
2430
- function Ca(e, i, n) {
2431
- const o = document.createElement("div");
2432
- return o.style.cssText = [
2433
- "display:flex",
2434
- "align-items:center",
2435
- "gap:6px",
2436
- "padding:6px 12px",
2437
- `border:2px dashed ${e.palette.secondary.main}`,
2438
- "border-radius:6px",
2439
- `background-color:${e.palette.background.paper}`,
2440
- `color:${e.palette.secondary.main}`,
2441
- `font-family:${e.typography.fontFamily ?? "inherit"}`,
2442
- "font-size:13px",
2443
- "font-weight:500",
2444
- "white-space:nowrap",
2445
- "position:fixed",
2446
- "top:-200px",
2447
- "left:-200px",
2448
- "z-index:99999",
2449
- "pointer-events:none"
2450
- ].join(";"), o.innerHTML = `${i}<span>${n}</span>`, document.body.appendChild(o), o;
2451
- }
2452
- r(Ca, "createDragPreview");
2453
- const qn = /* @__PURE__ */ r(({ onAddGeneric: e, onAddTyped: i, onAddFilter: n }) => {
2454
- const o = fe(), a = Re(), [l, c] = H(!1), [h, m] = H(!1), d = ie(null), S = ie(null), s = ie(null);
2455
- J(() => () => {
2456
- var x;
2457
- return (x = s.current) == null ? void 0 : x.remove();
2458
- }, []);
2459
- const y = q(() => {
2460
- var x;
2461
- (x = s.current) == null || x.remove(), s.current = null;
2462
- }, []), b = /* @__PURE__ */ r((x, g) => {
2463
- const O = g ? { category: g.category, specificType: g.specificType, label: g.label } : { category: "Generic", specificType: "Generic", label: "Generic" };
2464
- x.dataTransfer.setData("text/json", JSON.stringify(O)), x.dataTransfer.effectAllowed = "copy", y();
2465
- const G = x.currentTarget.querySelector("svg"), F = G ? G.outerHTML.replace(/width="[^"]*"/, 'width="18"').replace(/height="[^"]*"/, 'height="18"') : "", z = Ca(o, F, (g == null ? void 0 : g.label) ?? "Generic");
2466
- s.current = z, x.dataTransfer.setDragImage(z, 0, 0);
2467
- }, "handleDragStart"), u = /* @__PURE__ */ r((x) => {
2468
- i(x.category, x.specificType, x.label), c(!1);
2469
- }, "handleMenuItemClick");
2470
- return /* @__PURE__ */ f(L, { sx: { display: "inline-flex", gap: 0.5, alignItems: "center" }, children: [
2471
- /* @__PURE__ */ t(Oe, { title: "Drag to add card", children: /* @__PURE__ */ t(
2472
- L,
2473
- {
2474
- className: "action-btn llm-env-target llm-env-dashboard-action",
2475
- "data-env-id": "dashboardpad-drag-to-add-card",
2476
- draggable: !0,
2477
- onDragStart: /* @__PURE__ */ r((x) => b(x), "onDragStart"),
2478
- onDragEnd: y,
2479
- sx: {
2480
- display: "flex",
2481
- alignItems: "center",
2482
- justifyContent: "center",
2483
- width: 28,
2484
- height: 28,
2485
- border: "1.5px dashed",
2486
- borderColor: "secondary.main",
2487
- borderRadius: 0.5,
2488
- cursor: "grab",
2489
- "&:hover": { bgcolor: "action.hover" },
2490
- "&:active": { cursor: "grabbing" }
2491
- },
2492
- children: /* @__PURE__ */ t(Ji, { sx: { fontSize: 16 }, color: "secondary" })
2493
- }
2494
- ) }),
2495
- /* @__PURE__ */ f(L, { sx: { position: "relative", display: "inline-flex", alignItems: "center" }, children: [
2496
- /* @__PURE__ */ t(Oe, { title: "Add card", children: /* @__PURE__ */ t(
2497
- Ne,
2498
- {
2499
- className: "action-btn llm-env-target llm-env-dashboard-action",
2500
- "data-env-id": "dashboardpad-add-card",
2501
- variant: "outlined",
2502
- size: "small",
2503
- color: "secondary",
2504
- startIcon: /* @__PURE__ */ t(Xi, { sx: { m: 0.2, p: 0 } }),
2505
- onClick: e,
2506
- sx: { height: 28, fontSize: "0.7rem", pr: 1, gap: 0, minWidth: "80px", textTransform: "none", justifyContent: "left" },
2507
- children: "Card"
2508
- }
2509
- ) }),
2510
- /* @__PURE__ */ t(
2511
- Ie,
2512
- {
2513
- className: "action-btn llm-env-target llm-env-dashboard-action",
2514
- "data-env-id": "dashboardpad-add-card-dropdown",
2515
- ref: d,
2516
- size: "small",
2517
- onClick: /* @__PURE__ */ r(() => c((x) => !x), "onClick"),
2518
- sx: { position: "absolute", right: 0, height: 28, width: 20 },
2519
- "aria-label": "Tipos de card",
2520
- children: /* @__PURE__ */ t(St, { color: "secondary", sx: { fontSize: 18, mr: 0.5 } })
2521
- }
2522
- )
2523
- ] }),
2524
- /* @__PURE__ */ t(Je, { open: l, anchorEl: d.current, placement: "bottom-start", transition: !0, sx: { zIndex: 1300 }, children: /* @__PURE__ */ r(({ TransitionProps: x }) => /* @__PURE__ */ t(Xe, { ...x, children: /* @__PURE__ */ t(He, { elevation: 8, sx: { maxHeight: 420, overflow: "auto", minWidth: 260 }, children: /* @__PURE__ */ t(Ze, { onClickAway: /* @__PURE__ */ r(() => c(!1), "onClickAway"), children: /* @__PURE__ */ t(Ct, { dense: !0, children: Object.entries(Sa).map(([g, O], G) => {
2525
- const F = a.category[g];
2526
- return /* @__PURE__ */ f(L, { children: [
2527
- G > 0 && /* @__PURE__ */ t(Qe, {}),
2528
- /* @__PURE__ */ f(L, { component: "span", sx: { px: 2, pt: 1, display: "flex", alignItems: "center", gap: 0.5, typography: "overline" }, children: [
2529
- /* @__PURE__ */ t(F, { fontSize: "inherit" }),
2530
- g
2531
- ] }),
2532
- O.map((z) => {
2533
- const _ = a.specificType[z.specificType];
2534
- return /* @__PURE__ */ f(Ae, { onClick: /* @__PURE__ */ r(() => u(z), "onClick"), draggable: !0, onDragStart: /* @__PURE__ */ r((M) => b(M, z), "onDragStart"), onDragEnd: y, children: [
2535
- /* @__PURE__ */ t(et, { children: /* @__PURE__ */ t(_, { fontSize: "small" }) }),
2536
- /* @__PURE__ */ t(tt, { children: z.label })
2537
- ] }, z.specificType);
2538
- })
2539
- ] }, g);
2540
- }) }) }) }) }), "children") }),
2541
- n && /* @__PURE__ */ f(Ce, { children: [
2542
- /* @__PURE__ */ t(Oe, { title: "Add filter", children: /* @__PURE__ */ t(
2543
- Ne,
2544
- {
2545
- className: "action-btn llm-env-target llm-env-dashboard-action",
2546
- "data-env-id": "dashboardpad-add-filter",
2547
- ref: S,
2548
- variant: "outlined",
2549
- size: "small",
2550
- color: "secondary",
2551
- startIcon: /* @__PURE__ */ t(Zi, {}),
2552
- endIcon: /* @__PURE__ */ t(St, {}),
2553
- onClick: /* @__PURE__ */ r(() => m((x) => !x), "onClick"),
2554
- sx: { height: 28, fontSize: "0.7rem", minWidth: 0, textTransform: "none" },
2555
- children: "Filtro"
2556
- }
2557
- ) }),
2558
- /* @__PURE__ */ t(Je, { open: h, anchorEl: S.current, placement: "bottom-start", transition: !0, sx: { zIndex: 1300 }, children: /* @__PURE__ */ r(({ TransitionProps: x }) => /* @__PURE__ */ t(Xe, { ...x, children: /* @__PURE__ */ t(He, { elevation: 8, sx: { minWidth: 220 }, children: /* @__PURE__ */ t(Ze, { onClickAway: /* @__PURE__ */ r(() => m(!1), "onClickAway"), children: /* @__PURE__ */ t(Ct, { dense: !0, children: $t.map((g) => {
2559
- const O = a.filterType[g.filterType];
2560
- return /* @__PURE__ */ f(
2561
- Ae,
2562
- {
2563
- onClick: /* @__PURE__ */ r(() => {
2564
- n(g.filterType), m(!1);
2565
- }, "onClick"),
2566
- children: [
2567
- /* @__PURE__ */ t(et, { children: /* @__PURE__ */ t(O, { fontSize: "small" }) }),
2568
- /* @__PURE__ */ t(tt, { children: g.label })
2569
- ]
2570
- },
2571
- g.filterType
2572
- );
2573
- }) }) }) }) }), "children") })
2574
- ] })
2575
- ] });
2576
- }, "ToolBox"), Jn = /* @__PURE__ */ r((e) => {
2577
- const i = je(), n = ye(), o = Y((w) => w.dashboardDefinition), a = Y((w) => w.publishedDashboard), l = Y((w) => w.viewType), c = Y((w) => w.renderGeneration), h = Y((w) => w.llmCounter), m = (o == null ? void 0 : o.id) ?? null, [d, S] = H(null), [s, y] = H(), [b, u] = H(!1), [x, g] = H(!1), [O, G] = H(null), [F, z] = H(!1), _ = ie(null), M = ie(null), W = ie(null), j = ie(null), A = fe(), v = me(() => `pad-${Math.random().toString(36).slice(2)}`, []);
2578
- J(() => {
2579
- var N;
2580
- if (e.turnOpen) return;
2581
- const w = n.getState().dashboardDefinition;
2582
- (N = w == null ? void 0 : w.cards) != null && N.some((ne) => ne.todoItem) && n.getState().updateDashboard({ cards: w.cards.map((ne) => ({ ...ne, todoItem: void 0 })) });
2583
- }, [e.turnOpen, n]);
2584
- const B = q(() => {
2585
- const w = n.getState().dashboardDefinition;
2586
- if (!w || !e.onCompose) return;
2587
- const N = Tt(w);
2588
- if (N) {
2589
- y(N), setTimeout(() => y(void 0), 2e3);
2590
- return;
2591
- }
2592
- e.onCompose(w);
2593
- }, [e.onCompose, n]), D = q((w) => {
2594
- var N;
2595
- j.current = w.id ?? null, Tt(w), n.getState().updateDashboard(w), (N = e.onChange) == null || N.call(e, w);
2596
- }, [e.onChange, n]), T = q(async () => {
2597
- var N;
2598
- const w = n.getState().dashboardDefinition;
2599
- if (!(!(w != null && w.id) || !i)) {
2600
- u(!0);
2601
- try {
2602
- await ct(i, w), (N = e.onChange) == null || N.call(e, w);
2603
- } catch (ne) {
2604
- console.error("[@aintela/bi composer] Error saving dashboard:", ne);
2605
- } finally {
2606
- u(!1);
2607
- }
2608
- }
2609
- }, [i, e.onChange, n]);
2610
- J(() => {
2611
- if (!i || !e.dashboardId || W.current || j.current === e.dashboardId) return;
2612
- S(null), n.getState().updateDashboard(void 0);
2613
- const w = i.getDashboard(e.dashboardId);
2614
- W.current = w, w.then((N) => D(Ge(N))).catch((N) => S(String(N))).finally(() => {
2615
- W.current = null;
2616
- });
2617
- }, [D, i, e.dashboardId, n]);
2618
- const P = q(async () => {
2619
- if (i)
2620
- try {
2621
- D(await Ft(i, e.sessionId));
2622
- } catch (w) {
2623
- console.error("[@aintela/bi composer] Error creating new dashboard:", w);
2624
- }
2625
- }, [D, i, e.sessionId]), V = q(() => {
2626
- n.getState().refreshDashboard();
2627
- }, [n]), K = q(async () => {
2628
- const w = !x;
2629
- if (g(w), w && i) {
2630
- z(!0);
2631
- try {
2632
- G(await i.getDashboardHierarchy());
2633
- } catch (N) {
2634
- console.error("[@aintela/bi composer] Error fetching hierarchy:", N);
2635
- } finally {
2636
- z(!1);
2637
- }
2638
- }
2639
- }, [i, x]), Z = q(async (w) => {
2640
- if (!(!w.id || !i)) {
2641
- g(!1);
2642
- try {
2643
- D(Ge(await i.getDashboard(w.id)));
2644
- } catch (N) {
2645
- console.error("[@aintela/bi composer] Error loading dashboard:", N);
2646
- }
2647
- }
2648
- }, [D, i]), re = e.renderDashboardPicker, he = /* @__PURE__ */ r((w, N) => We.cloneElement(N, { className: "llm-env-target llm-env-dashboard-action", "data-env-id": w, sx: { fontSize: 18 } }), "envIcon"), U = /* @__PURE__ */ r((w) => ({ border: w ? "0px" : `1px solid ${A.palette.divider}`, px: 1, py: 0, gap: 0.5, textTransform: "none" }), "viewToggleSx"), te = /* @__PURE__ */ r((w, N) => ({ fontSize: "0.7rem", lineHeight: 1, maxWidth: w ? N : 0, overflow: "hidden", opacity: w ? 1 : 0, whiteSpace: "nowrap", transition: "max-width 0.25s ease, opacity 0.2s ease" }), "viewLabelSx");
2649
- return /* @__PURE__ */ f(le, { className: "bi-dashboard-pad", sx: { height: "100%", minHeight: 0 }, children: [
2650
- /* @__PURE__ */ t(L, { sx: { display: "flex", py: 0.5, backgroundColor: A.palette.background.paper, borderBottom: `1px solid ${A.palette.divider}`, px: 1 }, children: /* @__PURE__ */ f(le, { direction: "row", gap: 0.5, sx: { alignItems: "center", width: "100%", px: 1 }, children: [
2651
- !o && !d && /* @__PURE__ */ f(le, { direction: "row", gap: 1, alignItems: "center", children: [
2652
- /* @__PURE__ */ t(De, { size: 16 }),
2653
- /* @__PURE__ */ t(X, { color: "text.secondary", children: "Carregando dashboard" })
2654
- ] }),
2655
- d && /* @__PURE__ */ f(X, { color: "error", children: [
2656
- "Error creating dashboard: ",
2657
- d
2658
- ] }),
2659
- o && /* @__PURE__ */ f(Ce, { children: [
2660
- e.onBack && /* @__PURE__ */ t(Ee, { onClick: e.onBack, icon: he("dashboard-pad-back", /* @__PURE__ */ t(tr, {})), label: "Voltar" }),
2661
- /* @__PURE__ */ f(
2662
- yn,
2663
- {
2664
- value: l,
2665
- exclusive: !0,
2666
- onChange: /* @__PURE__ */ r((w, N) => N && n.getState().setViewType(N), "onChange"),
2667
- size: "small",
2668
- className: "llm-env-target llm-env-view-toggle",
2669
- "data-env-id": "dashboard-pad-view-toggle",
2670
- sx: { height: 24, border: "0px", "& .Mui-selected": { border: `1px solid ${A.palette.divider}` } },
2671
- children: [
2672
- /* @__PURE__ */ f(nt, { value: "Sketch", className: "llm-env-target llm-env-action-sketch", "data-env-id": "dashboard-pad-view-sketch", sx: U(l == "Sketch"), children: [
2673
- /* @__PURE__ */ t(zt, { sx: { fontSize: 18 } }),
2674
- /* @__PURE__ */ t(X, { component: "span", sx: te(l === "Sketch", 50), children: "Sketch" })
2675
- ] }),
2676
- /* @__PURE__ */ f(nt, { value: "Generated", className: "llm-env-target llm-env-action-generated", "data-env-id": "dashboard-pad-view-generated", sx: U(l == "Generated"), children: [
2677
- /* @__PURE__ */ t(Qi, { sx: { fontSize: 18 } }),
2678
- /* @__PURE__ */ t(X, { component: "span", sx: te(l === "Generated", 70), children: "Dashboard" })
2679
- ] })
2680
- ]
2681
- }
2682
- ),
2683
- /* @__PURE__ */ t(Qe, { orientation: "vertical", flexItem: !0, sx: { mx: 1 } }),
2684
- /* @__PURE__ */ t(L, { sx: { flex: 1, display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ t(
2685
- qn,
2686
- {
2687
- onAddGeneric: /* @__PURE__ */ r(() => {
2688
- var w;
2689
- return (w = M.current) == null ? void 0 : w.addGenericCell();
2690
- }, "onAddGeneric"),
2691
- onAddTyped: /* @__PURE__ */ r((w, N, ne) => {
2692
- var p;
2693
- return (p = M.current) == null ? void 0 : p.addTypedCell(w, N, ne);
2694
- }, "onAddTyped"),
2695
- onAddFilter: /* @__PURE__ */ r((w) => {
2696
- var N;
2697
- return (N = M.current) == null ? void 0 : N.handleAddFilter(w);
2698
- }, "onAddFilter")
2699
- }
2700
- ) }),
2701
- /* @__PURE__ */ t(Qe, { orientation: "vertical", flexItem: !0, sx: { mx: 1 } }),
2702
- /* @__PURE__ */ f(le, { direction: "row", gap: 0.25, alignItems: "center", children: [
2703
- i && /* @__PURE__ */ t(Ee, { onClick: P, icon: he("dashboard-pad-new", /* @__PURE__ */ t(nr, {})), label: "Novo" }),
2704
- i && /* @__PURE__ */ t(
2705
- Ee,
2706
- {
2707
- onClick: b ? void 0 : T,
2708
- icon: /* @__PURE__ */ r(() => b ? /* @__PURE__ */ t(De, { size: 14 }) : he("dashboard-pad-save", /* @__PURE__ */ t(ir, {})), "icon"),
2709
- label: "Salvar"
2710
- }
2711
- ),
2712
- /* @__PURE__ */ t(Ee, { onClick: V, icon: he("dashboard-pad-refresh", /* @__PURE__ */ t(gn, {})), label: "Atualizar" }),
2713
- i && re && /* @__PURE__ */ t("div", { ref: _, children: /* @__PURE__ */ t(
2714
- Ee,
2715
- {
2716
- onClick: K,
2717
- icon: /* @__PURE__ */ f(le, { direction: "row", alignItems: "center", "data-env-id": "dashboard-pad-load", className: "llm-env-target llm-env-dashboard-action", children: [
2718
- /* @__PURE__ */ t(er, { sx: { fontSize: 18 } }),
2719
- /* @__PURE__ */ t(St, { sx: { fontSize: 14, ml: -0.25 } })
2720
- ] }),
2721
- label: "Abrir"
2722
- }
2723
- ) }),
2724
- /* @__PURE__ */ t(Oe, { open: !!s, title: s ?? "", placement: "bottom", slotProps: { tooltip: { sx: { backgroundColor: "error.dark" } } }, children: /* @__PURE__ */ f(
2725
- L,
2726
- {
2727
- className: "action-btn-fixed",
2728
- onClick: B,
2729
- sx: {
2730
- display: "inline-flex",
2731
- alignItems: "center",
2732
- height: 28,
2733
- borderRadius: 1,
2734
- px: 0.75,
2735
- cursor: "pointer",
2736
- color: A.palette.success.contrastText,
2737
- backgroundColor: A.palette.success.main,
2738
- "&:hover": { bgcolor: A.palette.success.light }
2739
- },
2740
- children: [
2741
- /* @__PURE__ */ t(X, { component: "span", sx: { whiteSpace: "nowrap", fontSize: "0.7rem", lineHeight: 1, mr: 1 }, children: "Compose" }),
2742
- he("dashboard-pad-compose", /* @__PURE__ */ t(rr, {}))
2743
- ]
2744
- }
2745
- ) })
2746
- ] })
2747
- ] })
2748
- ] }) }),
2749
- re && /* @__PURE__ */ t(Je, { open: x, anchorEl: _.current, placement: "bottom-end", transition: !0, sx: { zIndex: 1300 }, children: /* @__PURE__ */ r(({ TransitionProps: w }) => /* @__PURE__ */ t(Xe, { ...w, children: /* @__PURE__ */ t(He, { elevation: 8, sx: { overflow: "hidden", minWidth: 320, maxWidth: 380 }, children: /* @__PURE__ */ t(Ze, { onClickAway: /* @__PURE__ */ r(() => g(!1), "onClickAway"), children: /* @__PURE__ */ t(L, { sx: { width: 360, maxWidth: "100%", height: 420 }, children: re({ hierarchy: O, loading: F, selectedDashboardId: m, onSelect: /* @__PURE__ */ r((N) => void Z(N), "onSelect") }) }) }) }) }), "children") }),
2750
- l == "Sketch" && /* @__PURE__ */ f(le, { sx: { flex: 1, minHeight: 0 }, children: [
2751
- e.showDebug && /* @__PURE__ */ t(He, { variant: "outlined", sx: { maxHeight: 200, p: 1, overflow: "auto", "& pre": { bgcolor: "background.default", p: 1, borderRadius: 1, overflow: "auto", fontSize: 11, m: 0 } }, children: /* @__PURE__ */ t("pre", { children: JSON.stringify(o, void 0, 2) }) }),
2752
- /* @__PURE__ */ t("div", { style: { minHeight: "300px", flex: 1 }, children: /* @__PURE__ */ t(ht, { ref: M, renderId: v, headerExtra: e.headerExtra, renderDescription: e.renderDescription }) })
2753
- ] }),
2754
- l == "Generated" && (a == null ? void 0 : a.id) && /* @__PURE__ */ t(L, { sx: { flex: 1, minHeight: 0, overflow: "auto" }, children: /* @__PURE__ */ t(_e, { dashboard: a, codeGeneration: c, llmRenderCount: h, dragLocked: !1, editable: !0, onLayoutCommit: /* @__PURE__ */ r(() => n.getState().commitDashboardLayout(), "onLayoutCommit") }, a.id) })
2755
- ] });
2756
- }, "DashboardPad");
2757
- Jn.displayName = "DashboardPad";
2758
- const yt = 40, wa = 100, Da = 150, Xn = Et((e, i) => {
2759
- const n = e.defaultContentType ?? "default", o = ie(0), a = q(() => (o.current += 1, `Untitled-${o.current}`), []), [l, c] = H(() => e.tabs ?? [{ name: a(), contentType: n, id: Me() }]), [h, m] = H(() => l[0].name), [d, S] = H(null), [s, y] = H(""), [b, u] = H(null), x = ie(null), g = l.find((v) => v.name === h) ?? l[0] ?? null, O = q((v, B) => {
2760
- let D = v, T = 1;
2761
- for (; l.some((P) => P.name === D && P.name !== B); )
2762
- T += 1, D = `${v} (${T})`;
2763
- return D;
2764
- }, [l]), G = q((v) => {
2765
- l.some((B) => B.name === v) && m(v);
2766
- }, [l]), F = q((v, B) => {
2767
- var P;
2768
- const D = O(B ?? a()), T = { id: Me(), name: D, contentType: v ?? n };
2769
- return c((V) => [...V, T]), m(D), (P = e.onTabCreate) == null || P.call(e, T), D;
2770
- }, [n, O, e.onTabCreate, a]), z = q((v) => {
2771
- c((B) => {
2772
- var V, K;
2773
- const D = B.findIndex((Z) => Z.name === v);
2774
- if (D === -1) return B;
2775
- const T = B[D], P = B.filter((Z) => Z.name !== v);
2776
- if (P.length === 0) {
2777
- const Z = { name: a(), contentType: n, id: Me() };
2778
- return m(Z.name), (V = e.onTabClose) == null || V.call(e, T), [Z];
2779
- }
2780
- return h === v && m(P[Math.min(D, P.length - 1)].name), (K = e.onTabClose) == null || K.call(e, T), P;
2781
- });
2782
- }, [h, n, e.onTabClose, a]);
2783
- sn(i, () => ({ focusTab: G, createTab: F, closeTab: z, getActiveTab: /* @__PURE__ */ r(() => g, "getActiveTab"), getTabs: /* @__PURE__ */ r(() => l, "getTabs") }), [G, F, z, g, l]), J(() => {
2784
- var v;
2785
- g && ((v = e.onTabChange) == null || v.call(e, g));
2786
- }, [h]);
2787
- const _ = /* @__PURE__ */ r((v) => {
2788
- S(v.name), y(v.name);
2789
- }, "startRename"), M = /* @__PURE__ */ r(() => {
2790
- var B;
2791
- if (!d) return;
2792
- const v = s.trim();
2793
- if (v && v !== d) {
2794
- const D = O(v, d), T = d;
2795
- c((V) => V.map((K) => K.name === d ? { ...K, name: D } : K)), h === d && m(D);
2796
- const P = l.find((V) => V.name === d);
2797
- P && ((B = e.onTabRename) == null || B.call(e, { ...P, name: D }, T));
2798
- }
2799
- S(null);
2800
- }, "commitRename"), W = /* @__PURE__ */ r((v) => {
2801
- v.key === "Enter" ? M() : v.key === "Escape" && S(null);
2802
- }, "handleRenameKeyDown");
2803
- J(() => {
2804
- d && x.current && (x.current.focus(), x.current.select());
2805
- }, [d]);
2806
- const j = /* @__PURE__ */ r((v) => {
2807
- var B;
2808
- (B = e.addMenuItems) != null && B.length ? u(v.currentTarget) : F();
2809
- }, "handleAddMenuOpen"), A = /* @__PURE__ */ t(lr, { sx: { fontSize: 15, color: "text.secondary", flexShrink: 0 } });
2810
- return /* @__PURE__ */ f(L, { sx: { display: "flex", flexDirection: "column", height: "100%", overflow: "hidden" }, children: [
2811
- /* @__PURE__ */ f(L, { sx: { display: "flex", alignItems: "center", borderBottom: "1px solid", borderColor: "divider", backgroundColor: "background.paper", minHeight: yt, maxHeight: yt, overflow: "hidden" }, children: [
2812
- /* @__PURE__ */ t(L, { sx: { display: "flex", alignItems: "center", flex: 1, overflow: "auto", backgroundColor: "background.default", "&::-webkit-scrollbar": { height: 0 } }, children: l.map((v) => {
2813
- var T;
2814
- const B = v.name === h, D = v.name === d;
2815
- return /* @__PURE__ */ f(
2816
- L,
2817
- {
2818
- onClick: /* @__PURE__ */ r(() => {
2819
- D || m(v.name);
2820
- }, "onClick"),
2821
- onDoubleClick: /* @__PURE__ */ r(() => _(v), "onDoubleClick"),
2822
- sx: /* @__PURE__ */ r((P) => ({
2823
- display: "flex",
2824
- alignItems: "center",
2825
- gap: 0.5,
2826
- minWidth: wa,
2827
- maxWidth: Da,
2828
- height: yt,
2829
- px: 1.5,
2830
- cursor: "pointer",
2831
- userSelect: "none",
2832
- borderBottom: "2px solid",
2833
- borderColor: B ? "primary.main" : "transparent",
2834
- backgroundColor: B ? P.palette.action.selected : P.palette.background.paper,
2835
- "&:hover": { backgroundColor: B ? P.palette.action.selected : P.palette.action.hover },
2836
- transition: "background-color 0.15s, border-color 0.15s"
2837
- }), "sx"),
2838
- children: [
2839
- ((T = e.renderTabIcon) == null ? void 0 : T.call(e, v)) ?? A,
2840
- D ? /* @__PURE__ */ t(
2841
- Be,
2842
- {
2843
- inputRef: x,
2844
- value: s,
2845
- onChange: /* @__PURE__ */ r((P) => y(P.target.value), "onChange"),
2846
- onBlur: M,
2847
- onKeyDown: W,
2848
- variant: "standard",
2849
- size: "small",
2850
- slotProps: {
2851
- input: { disableUnderline: !0, style: { fontSize: "0.75rem", fontWeight: 500, padding: "0px", height: 20, border: "0px" } },
2852
- root: { style: { padding: "2px 0px 0px 0px", border: "0px" } }
2853
- },
2854
- sx: { minWidth: "30px", maxWidth: "80%" },
2855
- onClick: /* @__PURE__ */ r((P) => P.stopPropagation(), "onClick")
2856
- }
2857
- ) : /* @__PURE__ */ t(X, { variant: "caption", noWrap: !0, sx: { minWidth: "60px", fontWeight: B ? 600 : 400, color: B ? "text.primary" : "text.secondary", fontSize: "0.75rem" }, children: v.name }),
2858
- /* @__PURE__ */ t(
2859
- Ie,
2860
- {
2861
- size: "small",
2862
- onClick: /* @__PURE__ */ r((P) => {
2863
- P.stopPropagation(), z(v.name);
2864
- }, "onClick"),
2865
- sx: { p: 0.2, opacity: B ? 0.7 : 0, "&:hover": { opacity: 1 }, transition: "opacity 0.15s" },
2866
- "aria-label": "Fechar aba",
2867
- children: /* @__PURE__ */ t(ar, { sx: { fontSize: 14 } })
2868
- }
2869
- )
2870
- ]
2871
- },
2872
- v.name
2873
- );
2874
- }) }),
2875
- /* @__PURE__ */ t(Ie, { size: "small", onClick: j, sx: { mx: 0.5, flexShrink: 0 }, title: "Adicionar aba", children: /* @__PURE__ */ t(or, { sx: { fontSize: 18 } }) }),
2876
- e.addMenuItems && /* @__PURE__ */ t(ur, { anchorEl: b, open: !!b, onClose: /* @__PURE__ */ r(() => u(null), "onClose"), anchorOrigin: { vertical: "bottom", horizontal: "left" }, transformOrigin: { vertical: "top", horizontal: "left" }, children: e.addMenuItems.map((v, B) => [
2877
- v.dividerBefore && /* @__PURE__ */ t(L, { component: "li", sx: { borderTop: "1px solid", borderColor: "divider" } }, `div-${B}`),
2878
- /* @__PURE__ */ f(
2879
- Ae,
2880
- {
2881
- onClick: /* @__PURE__ */ r(() => {
2882
- F(v.contentType), u(null);
2883
- }, "onClick"),
2884
- disabled: v.disabled,
2885
- children: [
2886
- v.icon && /* @__PURE__ */ t(et, { children: v.icon }),
2887
- /* @__PURE__ */ t(tt, { children: v.label })
2888
- ]
2889
- },
2890
- v.label
2891
- )
2892
- ]) })
2893
- ] }),
2894
- l.map((v) => /* @__PURE__ */ t(L, { sx: { flex: 1, overflow: "auto", pr: 0, display: v.name === h ? "flex" : "none", flexDirection: "column" }, children: e.renderContent(v) }, v.id))
2895
- ] });
2896
- });
2897
- Xn.displayName = "DashboardPadEditor";
2898
- const Ta = /* @__PURE__ */ r(({
2899
- orientation: e = "row",
2900
- datasets: i,
2901
- defaultTemplateDataset: n = "BI_TemplateModel",
2902
- agents: o,
2903
- agentId: a,
2904
- recommendedAgentId: l,
2905
- onAgentChange: c
2906
- }) => {
2907
- const h = fe(), m = ye(), d = Y((u) => {
2908
- var x;
2909
- return ((x = u.dashboardDefinition) == null ? void 0 : x.isDatasetParameterized) ?? !1;
2910
- }), S = Y((u) => {
2911
- var x;
2912
- return (x = u.dashboardDefinition) == null ? void 0 : x.defaultDatasetName;
2913
- }), s = /* @__PURE__ */ r((u, x) => {
2914
- m.getState().updateDashboard({
2915
- isDatasetParameterized: x,
2916
- defaultDatasetName: x ? S ?? n : void 0
2917
- });
2918
- }, "handleToggle"), y = a ?? (l == null ? void 0 : l(d)) ?? "", b = e === "column";
2919
- return /* @__PURE__ */ f(
2920
- le,
2921
- {
2922
- direction: b ? "column" : "row",
2923
- alignItems: b ? "stretch" : "center",
2924
- gap: b ? 0.75 : 1,
2925
- sx: b ? {} : { px: 1, py: 0.25, borderLeft: `1px solid ${h.palette.divider}` },
2926
- children: [
2927
- /* @__PURE__ */ f(le, { direction: "row", alignItems: "center", gap: 0.5, children: [
2928
- /* @__PURE__ */ t(wt, { size: "small", checked: d, onChange: s, "data-env-id": "dashboard-pad-dataset-parameterized" }),
2929
- /* @__PURE__ */ t(X, { variant: "body2", sx: { color: "text.secondary", whiteSpace: "nowrap", fontSize: b ? 11.5 : void 0 }, children: "DataSet Dinâmico" })
2930
- ] }),
2931
- d && /* @__PURE__ */ t(
2932
- Ut,
2933
- {
2934
- size: "small",
2935
- value: S ?? "",
2936
- onChange: /* @__PURE__ */ r((u) => m.getState().updateDashboard({ defaultDatasetName: u.target.value }), "onChange"),
2937
- displayEmpty: !0,
2938
- fullWidth: b,
2939
- sx: { minWidth: b ? void 0 : 160, fontSize: "0.8rem", "& .MuiSelect-select": { py: 0.5 } },
2940
- renderValue: /* @__PURE__ */ r((u) => {
2941
- var x;
2942
- return u ? ((x = i.find((g) => g.dataSetId === u)) == null ? void 0 : x.name) ?? u : "Default…";
2943
- }, "renderValue"),
2944
- children: i.map((u) => /* @__PURE__ */ t(Ae, { value: u.dataSetId, sx: { fontSize: "0.8rem" }, children: /* @__PURE__ */ f(L, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
2945
- /* @__PURE__ */ t("span", { children: u.name }),
2946
- u.isTemplate && /* @__PURE__ */ t(X, { variant: "caption", sx: { color: "text.disabled" }, children: "(template)" })
2947
- ] }) }, u.dataSetId))
2948
- }
2949
- ),
2950
- o && /* @__PURE__ */ t(L, { sx: b ? {} : { borderLeft: `1px solid ${h.palette.divider}`, pl: 1 }, children: /* @__PURE__ */ t(
2951
- Ut,
2952
- {
2953
- size: "small",
2954
- value: y,
2955
- onChange: /* @__PURE__ */ r((u) => {
2956
- const x = o.find((g) => g.id === u.target.value);
2957
- x && (c == null || c(x));
2958
- }, "onChange"),
2959
- displayEmpty: !0,
2960
- fullWidth: b,
2961
- sx: { minWidth: b ? void 0 : 180, fontSize: "0.8rem", "& .MuiSelect-select": { py: 0.5 } },
2962
- renderValue: /* @__PURE__ */ r((u) => {
2963
- var x;
2964
- return ((x = o.find((g) => g.id === u)) == null ? void 0 : x.name) ?? "Agent…";
2965
- }, "renderValue"),
2966
- "data-env-id": "dashboard-pad-agent-picker",
2967
- children: o.map((u) => /* @__PURE__ */ t(Ae, { value: u.id, sx: { fontSize: "0.8rem" }, children: u.name }, u.id))
2968
- }
2969
- ) })
2970
- ]
2971
- }
2972
- );
2973
- }, "DatasetParameterizationControls"), ka = /* @__PURE__ */ r(({ backgroundColor: e, zoom: i = 0.7, width: n = "80%", title: o, config: a }) => /* @__PURE__ */ t(L, { sx: /* @__PURE__ */ r((l) => ({ display: "inline-flex", justifyContent: "left", width: "100%", border: `1px solid ${l.palette.divider}`, borderRadius: "10px", p: 2, maxHeight: "500px", overflow: "auto" }), "sx"), children: /* @__PURE__ */ f(le, { gap: 2, sx: /* @__PURE__ */ r((l) => ({ p: 1, borderRadius: 2, backgroundColor: e ?? l.palette.background.paper, width: n, zoom: i }), "sx"), children: [
2974
- o && /* @__PURE__ */ t(X, { variant: "body1", children: o }),
2975
- /* @__PURE__ */ t(it, { container: !0, spacing: 1, children: a.map((l, c) => /* @__PURE__ */ t(it, { size: l.size, maxHeight: 300, children: /* @__PURE__ */ t(L, { sx: { width: "100%", height: l.specificType == "Gauge" || l.specificType == "MetricComparison" ? "100px" : `${Math.max(l.height ?? 0, st)}px` }, children: l.card }) }, `example-pad-card-${c}`)) })
2976
- ] }) }), "ExamplePad"), ut = /* @__PURE__ */ r((e) => {
2977
- const i = Re(), n = e.specificType ?? "Generic", o = i.specificType[n] ?? i.specificType.Generic;
2978
- return /* @__PURE__ */ f(L, { sx: { ...e.sx, width: "100%", height: "100%", p: 1, gap: 0.2, textAlign: "justify" }, className: "react-grid-placeholder-example", children: [
2979
- /* @__PURE__ */ t(o, { fontSize: "small", sx: { float: "left", shapeOutside: "margin-box", mr: 0.5 } }),
2980
- /* @__PURE__ */ t(X, { sx: { fontSize: "14px" }, children: `[${e.name}] - ${e.description}` })
2981
- ] });
2982
- }, "ExampleCardSketch"), Ia = ut, Pa = ut, Ea = /* @__PURE__ */ r(({ backgroundColor: e, zoom: i = 0.8, width: n = "100%", title: o, config: a }) => /* @__PURE__ */ f(le, { gap: 2, sx: /* @__PURE__ */ r((l) => ({ p: 1, borderRadius: 2, backgroundColor: e ?? l.palette.background.paper, width: n, maxHeight: "1400px" }), "sx"), children: [
2983
- o && /* @__PURE__ */ t(X, { variant: "body1", children: o }),
2984
- /* @__PURE__ */ t(it, { container: !0, spacing: 1, sx: { zoom: i }, children: a.map((l, c) => /* @__PURE__ */ t(it, { size: l.size, children: /* @__PURE__ */ t(L, { sx: { width: "100%", height: l.height ?? st, "& > *": { width: "100%", maxHeight: "500px" } }, children: l.card }) }, `prototype-pad-card-${c}`)) })
2985
- ] }), "PrototypePad");
2986
- function za(e, i, n, o, a) {
2987
- if (o === void 0) return { size: e, height: i, card: n };
2988
- const l = n;
2989
- return a !== void 0 && typeof a != "string" ? { size: e, height: i, name: l, specificType: o, card: a } : {
2990
- size: e,
2991
- height: i,
2992
- name: l,
2993
- specificType: o,
2994
- description: a,
2995
- card: /* @__PURE__ */ t(ut, { name: l, specificType: o, description: a })
2996
- };
2997
- }
2998
- r(za, "c");
2999
- const Oa = /* @__PURE__ */ r((e, i) => ({
3000
- i: e,
3001
- name: i,
3002
- filterType: "DateRangePicker",
3003
- mandatory: !0,
3004
- parametersNames: [`${i}_inicio`, `${i}_fim`]
3005
- }), "dateRange"), Ma = /* @__PURE__ */ r((e, i, n = !1) => ({
3006
- i: e,
3007
- name: i,
3008
- filterType: "DatePicker",
3009
- mandatory: n,
3010
- parametersNames: [i]
3011
- }), "datePicker"), Aa = /* @__PURE__ */ r((e, i, n = !0, o = !1) => ({
3012
- i: e,
3013
- name: i,
3014
- filterType: "AutoComplete",
3015
- mandatory: o,
3016
- multipleSelection: n,
3017
- parametersNames: [i]
3018
- }), "autoComplete");
3019
- function $a(e, i) {
3020
- const n = Cn();
3021
- J(() => {
3022
- var o, a;
3023
- i == "update" ? (o = n.updateDashboardPad) == null || o.call(n, e) : (a = n.createDashboardPad) == null || a.call(n, e);
3024
- }, []);
3025
- }
3026
- r($a, "useDashboardPad");
3027
- const Zn = {
3028
- visible: { opacity: 1, y: 0, transition: { duration: 0.18, ease: "easeOut" } },
3029
- hidden: { opacity: 0, y: -12, transition: { duration: 0.18, ease: "easeOut" } }
3030
- }, Qn = {
3031
- hidden: { opacity: 0, x: 16, transition: { duration: 0.1, ease: "easeOut" } },
3032
- visible: { opacity: 1, x: 0, transition: { duration: 0.32, ease: "easeOut", delay: 0.22 } }
3033
- }, ei = { duration: 0.28, ease: "easeOut" }, ti = {
3034
- visible: { opacity: 1, transition: { duration: 0.15 } },
3035
- hidden: { opacity: 0, transition: { duration: 0.15 } }
3036
- }, ni = {
3037
- hidden: { opacity: 0, transition: { duration: 0.15 } },
3038
- visible: { opacity: 1, transition: { duration: 0.15 } }
3039
- }, ii = { duration: 0.15, ease: "linear" }, ri = {
3040
- kpi: { category: "Métrica", specificType: "MetricComparison" },
3041
- line: { category: "Gráfico", specificType: "ChartLine" },
3042
- bars: { category: "Gráfico", specificType: "ChartBarV" },
3043
- table: { category: "Tabela", specificType: "TableAuto" },
3044
- donut: { category: "Gráfico", specificType: "ChartDonut" },
3045
- heatmap: { category: "Tabela", specificType: "TableHeatmap" }
3046
- };
3047
- function ai(e) {
3048
- return e.cells.map((i) => i.kind);
3049
- }
3050
- r(ai, "templateKinds");
3051
- function oi(e, i) {
3052
- const n = i ?? `${e.id}-${Date.now()}`;
3053
- return e.cells.map((o, a) => {
3054
- const l = ri[o.kind];
3055
- return {
3056
- i: `${n}-${a}`,
3057
- x: o.x,
3058
- y: o.y,
3059
- w: o.w,
3060
- h: o.h,
3061
- isResizable: !0,
3062
- category: l.category,
3063
- specificType: l.specificType,
3064
- name: o.name,
3065
- actionDescription: o.description
3066
- };
3067
- });
3068
- }
3069
- r(oi, "seedFromTemplate");
3070
- const Wt = [
3071
- {
3072
- id: "t1",
3073
- name: "Visão executiva",
3074
- desc: "KPIs principais + tendência mensal",
3075
- recommended: !0,
3076
- cells: [
3077
- { name: "Receita Total", kind: "kpi", description: "Receita acumulada no período vs. período anterior", x: 0, y: 0, w: 4, h: 4 },
3078
- { name: "Ticket Médio", kind: "kpi", description: "Valor médio por pedido", x: 4, y: 0, w: 4, h: 4 },
3079
- { name: "Conversão", kind: "kpi", description: "% de leads que viraram clientes", x: 8, y: 0, w: 4, h: 4 },
3080
- { name: "Tendência Mensal", kind: "line", description: "Evolução de receita mês a mês", x: 0, y: 4, w: 12, h: 7 },
3081
- { name: "Top 10 Clientes", kind: "table", description: "Ranking dos clientes com maior receita", x: 0, y: 11, w: 7, h: 7 },
3082
- { name: "Receita por Canal", kind: "donut", description: "Distribuição percentual da receita por canal de venda", x: 7, y: 11, w: 5, h: 7 }
3083
- ]
3084
- },
3085
- {
3086
- id: "t2",
3087
- name: "Análise comercial",
3088
- desc: "Funil de vendas + receita por canal",
3089
- cells: [
3090
- { name: "Pipeline", kind: "kpi", description: "Valor total do pipeline aberto", x: 0, y: 0, w: 6, h: 4 },
3091
- { name: "Win Rate", kind: "kpi", description: "% de oportunidades fechadas vs. perdidas", x: 6, y: 0, w: 6, h: 4 },
3092
- { name: "Receita Semanal", kind: "line", description: "Receita semanal nos últimos 90 dias", x: 0, y: 4, w: 7, h: 6 },
3093
- { name: "Vendas por Vendedor", kind: "bars", description: "Volume de vendas por representante comercial", x: 7, y: 4, w: 5, h: 6 },
3094
- { name: "Funil de Vendas", kind: "line", description: "Conversão por estágio do funil", x: 0, y: 10, w: 5, h: 6 },
3095
- { name: "Top Oportunidades", kind: "table", description: "Maiores oportunidades em aberto, ordenadas por valor", x: 5, y: 10, w: 7, h: 6 },
3096
- { name: "Receita por Canal", kind: "donut", description: "Distribuição da receita por canal de venda", x: 0, y: 16, w: 5, h: 6 },
3097
- { name: "Atividade da Equipe", kind: "heatmap", description: "Heatmap de atividade por vendedor por dia", x: 5, y: 16, w: 7, h: 6 }
3098
- ]
3099
- },
3100
- {
3101
- id: "t3",
3102
- name: "Operação",
3103
- desc: "Volume, ocupação e cancelamentos",
3104
- cells: [
3105
- { name: "Volume Diário", kind: "kpi", description: "Total de operações no dia atual", x: 0, y: 0, w: 4, h: 4 },
3106
- { name: "Ocupação", kind: "kpi", description: "% de capacidade utilizada", x: 4, y: 0, w: 4, h: 4 },
3107
- { name: "Cancelamentos", kind: "kpi", description: "% de operações canceladas no período", x: 8, y: 0, w: 4, h: 4 },
3108
- { name: "Volume por Origem", kind: "bars", description: "Top origens por volume de operações", x: 0, y: 4, w: 7, h: 6 },
3109
- { name: "SLA", kind: "line", description: "Tempo médio de processamento ao longo do dia", x: 7, y: 4, w: 5, h: 6 },
3110
- { name: "Pendências", kind: "table", description: "Operações pendentes ordenadas por SLA", x: 0, y: 10, w: 7, h: 6 },
3111
- { name: "Status", kind: "donut", description: "Distribuição percentual dos status (Aberto, Em andamento, Concluído)", x: 7, y: 10, w: 5, h: 6 }
3112
- ]
3113
- },
3114
- {
3115
- id: "t4",
3116
- name: "Em branco",
3117
- desc: "Comece do zero — adicione cards conforme pensa",
3118
- cells: []
3119
- }
3120
- ], _a = Wt;
3121
- function ve(e) {
3122
- var o, a, l;
3123
- const i = e.palette, n = e.typography.fontFamilyMono;
3124
- return {
3125
- raised: ((o = i.surface) == null ? void 0 : o.raised) ?? i.background.paper,
3126
- hover: ((a = i.surface) == null ? void 0 : a.hover) ?? i.action.hover,
3127
- borderSoft: ((l = i.border) == null ? void 0 : l.soft) ?? i.divider,
3128
- fontFamilyMono: n ?? "ui-monospace, SFMono-Regular, Menlo, monospace"
3129
- };
3130
- }
3131
- r(ve, "resolveComposerSurfaces");
3132
- function Ra() {
3133
- const e = /* @__PURE__ */ r(() => typeof window > "u" ? { width: 0, height: 0 } : { width: window.innerWidth, height: window.innerHeight }, "read"), [i, n] = H(e);
3134
- return J(() => {
3135
- if (typeof window > "u") return;
3136
- const o = /* @__PURE__ */ r(() => n(e()), "onResize");
3137
- return window.addEventListener("resize", o), () => window.removeEventListener("resize", o);
3138
- }, []), i;
3139
- }
3140
- r(Ra, "useWindowSize");
3141
- const en = /* @__PURE__ */ r((e) => e.toString().padStart(2, "0"), "pad2"), bt = /* @__PURE__ */ r((e) => `${e.getFullYear()}-${en(e.getMonth() + 1)}-${en(e.getDate())}`, "isoDate"), li = /* @__PURE__ */ r((e) => {
3142
- const i = fe(), n = ve(i), o = ye(), a = Y((T) => {
3143
- var P;
3144
- return ((P = T.publishedDashboard) == null ? void 0 : P.jsFileName) ?? null;
3145
- }), l = Y((T) => T.publishedDashboard), c = Y((T) => T.llmCounter), h = Y((T) => T.renderGeneration), m = Y((T) => {
3146
- var P;
3147
- return ((P = T.publishedDashboard) == null ? void 0 : P.id) ?? null;
3148
- }), d = Y((T) => {
3149
- var P;
3150
- return ((P = T.publishedDashboard) == null ? void 0 : P.name) || "Dashboard";
3151
- }), S = Y((T) => {
3152
- var P, V;
3153
- return ((V = (P = T.publishedDashboard) == null ? void 0 : P.cards) == null ? void 0 : V.length) ?? 0;
3154
- }), [s, y] = H(0), [b, u] = H(!1), [x, g] = H(e.defaultCollapsed ?? !1), [O, G] = H({});
3155
- J(() => {
3156
- if (!l) return;
3157
- const T = {}, P = /* @__PURE__ */ new Date(), V = new Date(P.getTime() - 1e3 * 3600 * 24 * 30);
3158
- for (const K of l.filters ?? [])
3159
- K.mandatory && (K.filterType == "DateRangePicker" ? (T[`${K.name}_inicio`] = bt(V), T[`${K.name}_fim`] = bt(P)) : K.filterType == "DatePicker" && (T[K.name] = bt(P)));
3160
- G(T);
3161
- }, [l == null ? void 0 : l.filters, l]);
3162
- const F = /* @__PURE__ */ r((T) => {
3163
- var P;
3164
- (P = e.onCollapseChange) == null || P.call(e, T), g(T);
3165
- }, "changeCollapse");
3166
- J(() => {
3167
- F(e.defaultCollapsed ?? !1);
3168
- }, [e.defaultCollapsed]);
3169
- const z = x ? "25%" : e.width, { width: _, height: M } = Ra(), W = _ > M ? 1.7 : 1, j = M > _ ? 1.7 : 1, A = Math.min(_, M) * W, v = Math.min(_, M) * j, B = !!a, D = { color: i.palette.text.secondary, p: 0.5, "&:hover": { color: i.palette.text.primary, backgroundColor: n.hover } };
3170
- return /* @__PURE__ */ t(lt, { initial: !1, children: B && l && /* @__PURE__ */ f(
3171
- pe.aside,
3172
- {
3173
- initial: { width: 0, opacity: 0 },
3174
- animate: { width: z, opacity: 1 },
3175
- exit: { width: 0, opacity: 0 },
3176
- transition: { duration: 0.32, ease: [0.22, 0.8, 0.32, 1] },
3177
- style: { overflow: "hidden", display: "inline-flex", flexDirection: "column", borderLeft: `1px solid ${i.palette.divider}`, backgroundColor: i.palette.background.default, minHeight: 0 },
3178
- children: [
3179
- /* @__PURE__ */ f(pe.div, { initial: { opacity: 0, y: 6 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.28, delay: 0.08, ease: "easeOut" }, style: { display: "inline-flex", flexDirection: "column", minHeight: 0, position: "relative", height: "100%" }, children: [
3180
- /* @__PURE__ */ f(C, { sx: { display: "inline-flex", alignItems: "center", width: "100%", gap: 1, px: 1.75, py: 1.25, borderBottom: `1px solid ${i.palette.divider}`, backgroundColor: i.palette.background.paper }, children: [
3181
- /* @__PURE__ */ t(C, { sx: { color: i.palette.primary.main, display: "inline-flex" }, children: /* @__PURE__ */ t(ze, { size: 15 }) }),
3182
- /* @__PURE__ */ t(se, { sx: { color: i.palette.text.primary, fontWeight: 500, fontSize: 12.5, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: d }),
3183
- !x && /* @__PURE__ */ f(Ce, { children: [
3184
- /* @__PURE__ */ t(se, { sx: { color: i.palette.text.disabled, fontSize: 11, flexShrink: 0 }, children: "·" }),
3185
- /* @__PURE__ */ f(se, { sx: { fontFamily: n.fontFamilyMono, color: i.palette.text.secondary, fontSize: 11, flexShrink: 0 }, children: [
3186
- S,
3187
- " ",
3188
- S === 1 ? "card" : "cards"
3189
- ] })
3190
- ] }),
3191
- /* @__PURE__ */ t(C, { sx: { flex: 1 } }),
3192
- /* @__PURE__ */ t(ge, { title: "Atualizar dados (ignora cache)", placement: "top", children: /* @__PURE__ */ t(we, { size: "small", onClick: /* @__PURE__ */ r(() => y((T) => T + 1), "onClick"), sx: D, "aria-label": "Atualizar dados", children: /* @__PURE__ */ t(gn, { sx: { fontSize: 18 } }) }) }),
3193
- /* @__PURE__ */ t(ge, { title: x ? "Expandir" : "Diminuir", placement: "top", children: /* @__PURE__ */ t(we, { size: "small", onClick: /* @__PURE__ */ r(() => F(!x), "onClick"), sx: D, "aria-label": x ? "Expandir" : "Diminuir", children: /* @__PURE__ */ t(Ve, { size: 14 }) }) }),
3194
- /* @__PURE__ */ t(ge, { title: "Tela cheia", placement: "top", children: /* @__PURE__ */ t(we, { size: "small", onClick: /* @__PURE__ */ r(() => u(!0), "onClick"), sx: D, "aria-label": "Abrir em tela cheia", children: /* @__PURE__ */ t(sr, { sx: { fontSize: "18px" } }) }) })
3195
- ] }),
3196
- /* @__PURE__ */ f(C, { sx: { display: "inline-flex", height: "100%", width: "100%", minHeight: 0, overflow: "auto", backgroundColor: i.palette.background.default }, children: [
3197
- m && !x && /* @__PURE__ */ t(
3198
- _e,
3199
- {
3200
- dragLocked: !1,
3201
- llmRenderCount: c + s,
3202
- codeGeneration: h,
3203
- dashboard: l,
3204
- editable: !0,
3205
- onLayoutCommit: /* @__PURE__ */ r(() => o.getState().commitDashboardLayout(), "onLayoutCommit"),
3206
- onFiltersChanged: /* @__PURE__ */ r((T) => G(T), "onFiltersChanged")
3207
- },
3208
- m
3209
- ),
3210
- m && x && /* @__PURE__ */ t(Yn, { llmRenderCount: c + s, codeGeneration: h, dashboard: l, parameters: O }, m)
3211
- ] })
3212
- ] }),
3213
- /* @__PURE__ */ f(wn, { open: b, onClose: /* @__PURE__ */ r(() => u(!1), "onClose"), maxWidth: !1, fullScreen: !0, slotProps: { paper: { sx: { backgroundColor: i.palette.background.default, backgroundImage: "none", color: i.palette.text.primary } } }, children: [
3214
- /* @__PURE__ */ f(C, { sx: { display: "flex", alignItems: "center", gap: 1, px: 2, py: 1.25, borderBottom: `1px solid ${i.palette.divider}`, backgroundColor: i.palette.background.paper, flexShrink: 0 }, children: [
3215
- /* @__PURE__ */ t(C, { sx: { color: i.palette.primary.main, display: "inline-flex" }, children: /* @__PURE__ */ t(ze, { size: 16 }) }),
3216
- /* @__PURE__ */ t(se, { sx: { color: i.palette.text.primary, fontWeight: 500, fontSize: 13.5 }, children: d }),
3217
- /* @__PURE__ */ t(se, { sx: { color: i.palette.text.disabled, fontSize: 12 }, children: "·" }),
3218
- /* @__PURE__ */ f(se, { sx: { fontFamily: n.fontFamilyMono, color: i.palette.text.secondary, fontSize: 12 }, children: [
3219
- S,
3220
- " ",
3221
- S === 1 ? "card" : "cards"
3222
- ] }),
3223
- /* @__PURE__ */ t(C, { sx: { flex: 1 } }),
3224
- /* @__PURE__ */ t(ge, { title: "Fechar", placement: "left", children: /* @__PURE__ */ t(we, { size: "small", onClick: /* @__PURE__ */ r(() => u(!1), "onClick"), sx: { ...D, p: 0.75 }, "aria-label": "Fechar", children: /* @__PURE__ */ t(Ot, { size: 14 }) }) })
3225
- ] }),
3226
- /* @__PURE__ */ t(C, { sx: { width: "100%", justifyContent: "center", display: "inline-flex" }, children: /* @__PURE__ */ t(C, { sx: { minHeight: 0, overflow: "hidden", width: A, height: v, backgroundColor: i.palette.background.default }, children: m && /* @__PURE__ */ t(_e, { dragLocked: !1, llmRenderCount: c, codeGeneration: h, dashboard: l }, m) }) })
3227
- ] })
3228
- ]
3229
- },
3230
- "dashboard-side-panel"
3231
- ) });
3232
- }, "DashboardSidePanelInner");
3233
- li.displayName = "DashboardSidePanel";
3234
- const si = We.memo(li), Fa = dt(ke), Na = [], Ke = /* @__PURE__ */ r(({ children: e }) => /* @__PURE__ */ t(se, { sx: /* @__PURE__ */ r((i) => ({ fontSize: 9.5, color: i.palette.text.disabled, textTransform: "uppercase", letterSpacing: 0.6, fontWeight: 500, lineHeight: 1.6 }), "sx"), children: e }), "RailSectionLabel");
3235
- function tn(e, i) {
3236
- const n = new Map(e.map((h) => [h.i, h])), o = new Map(i.map((h) => [h.i, h]));
3237
- let a = 0, l = 0, c = 0;
3238
- for (const [h, m] of n) {
3239
- const d = o.get(h);
3240
- d ? JSON.stringify(m) !== JSON.stringify(d) && c++ : a++;
3241
- }
3242
- for (const h of o.keys()) n.has(h) || l++;
3243
- return { added: a, removed: l, modified: c };
3244
- }
3245
- r(tn, "diffById");
3246
- function nn(e, i, n) {
3247
- return {
3248
- background: i.raised,
3249
- border: `1px solid ${e.palette.divider}`,
3250
- color: e.palette.text.primary,
3251
- fontFamily: e.typography.fontFamily,
3252
- fontSize: 11,
3253
- fontWeight: 500,
3254
- px: 1,
3255
- py: 0.625,
3256
- borderRadius: 1,
3257
- cursor: n ? "not-allowed" : "pointer",
3258
- opacity: n ? 0.45 : 1,
3259
- display: "inline-flex",
3260
- alignItems: "center",
3261
- justifyContent: "flex-start",
3262
- gap: 0.625,
3263
- transition: "filter .12s, background-color .12s, border-color .12s, color .12s",
3264
- "&:hover": n ? void 0 : { backgroundColor: i.hover }
3265
- };
3266
- }
3267
- r(nn, "railActionPill");
3268
- const La = /* @__PURE__ */ r(({ locked: e, name: i, onNameChange: n, layoutType: o, onLayoutTypeChange: a, onAddGenericCard: l, onAddTypedCard: c, onAddFilter: h, cardsOpened: m, filters: d, onEditFilter: S, onDeleteFilter: s, datasetControls: y }) => {
3269
- const b = fe(), u = ve(b), x = Re(), [g, O] = H(null), [G, F] = H(null), z = ie(null), [_, M] = H(!1);
3270
- J(() => {
3271
- z.current && m && z.current.click();
3272
- }, [m]);
3273
- const W = { display: "flex", flexDirection: "column", gap: 0.5, px: 1, pt: 1, pb: 0.875, borderBottom: `1px solid ${u.borderSoft}` }, j = { fontSize: 12, color: b.palette.text.primary, "&:hover": { backgroundColor: u.hover } }, A = { backgroundColor: u.raised, border: `1px solid ${b.palette.divider}`, ml: 0.5, minWidth: 260, maxHeight: 420, overflow: "auto" };
3274
- return /* @__PURE__ */ f(
3275
- pe.aside,
3276
- {
3277
- animate: { width: _ ? 44 : "12vw" },
3278
- transition: { duration: 0.22, ease: [0.22, 0.8, 0.32, 1] },
3279
- style: { flexShrink: 0, display: "flex", flexDirection: "column", borderRight: `1px solid ${u.borderSoft}`, backgroundColor: b.palette.background.paper, overflow: "hidden", minHeight: 0 },
3280
- children: [
3281
- /* @__PURE__ */ f(C, { sx: { flexShrink: 0, display: "flex", alignItems: "center", gap: 0.625, pl: 1, pr: 1, py: 1.5, borderBottom: `1px solid ${u.borderSoft}` }, children: [
3282
- /* @__PURE__ */ t(ge, { title: _ ? "Expandir painel" : "Recolher painel", placement: "right", children: /* @__PURE__ */ t(we, { size: "small", onClick: /* @__PURE__ */ r(() => M((v) => !v), "onClick"), sx: { color: b.palette.text.primary, p: 0.5, flexShrink: 0, "&:hover": { color: b.palette.primary.main } }, "aria-label": _ ? "Expandir painel" : "Recolher painel", children: /* @__PURE__ */ t(Ve, { size: 13 }) }) }),
3283
- !_ && /* @__PURE__ */ t(se, { sx: { color: b.palette.text.primary, fontWeight: 500, fontSize: 11.5, lineHeight: 1.2, whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" }, children: "Desenhe seu prompt" })
3284
- ] }),
3285
- !_ && /* @__PURE__ */ f(C, { sx: { flex: 1, minHeight: 0, overflowY: "auto", display: "flex", flexDirection: "column" }, children: [
3286
- /* @__PURE__ */ f(C, { sx: { ...W, gap: 0.25 }, children: [
3287
- /* @__PURE__ */ t(Ke, { children: "Nome" }),
3288
- /* @__PURE__ */ t(C, { sx: { color: b.palette.text.primary, fontFamily: b.typography.fontFamily, fontSize: 12 }, children: /* @__PURE__ */ t(Ue, { placeHolderText: "novo dashboard", onEdit: n, text: i, fontSize: 12 }) })
3289
- ] }),
3290
- /* @__PURE__ */ f(C, { sx: { ...W, p: 1 }, children: [
3291
- /* @__PURE__ */ f(
3292
- C,
3293
- {
3294
- ref: z,
3295
- component: "button",
3296
- onClick: /* @__PURE__ */ r((v) => O(v.currentTarget), "onClick"),
3297
- disabled: e,
3298
- "data-env-id": "dashboardpad-add-card",
3299
- "data-env-key": "dashboardpad-add-card-dropdown",
3300
- className: "llm-env-target llm-env-dashboard-action",
3301
- sx: nn(b, u, e),
3302
- children: [
3303
- /* @__PURE__ */ t(Dt, { size: 11 }),
3304
- /* @__PURE__ */ t(C, { component: "span", children: "Card" })
3305
- ]
3306
- }
3307
- ),
3308
- /* @__PURE__ */ f(C, { component: "button", onClick: /* @__PURE__ */ r((v) => F(v.currentTarget), "onClick"), disabled: e, "data-env-id": "dashboardpad-add-filter", className: "llm-env-target llm-env-dashboard-action", sx: nn(b, u, e), children: [
3309
- /* @__PURE__ */ t(Ar, { size: 11 }),
3310
- /* @__PURE__ */ t(C, { component: "span", children: "Filtro" })
3311
- ] })
3312
- ] }),
3313
- d.length > 0 ? /* @__PURE__ */ f(C, { sx: { p: 1, display: "flex", flexDirection: "column", gap: 0.625 }, children: [
3314
- /* @__PURE__ */ f(Ke, { children: [
3315
- "Filtros · ",
3316
- d.length
3317
- ] }),
3318
- d.map((v) => /* @__PURE__ */ t(Gt, { filter: v, onEdit: S, onDelete: s }, v.i))
3319
- ] }) : /* @__PURE__ */ t(C, { sx: { p: 1, display: "flex", alignItems: "flex-start" }, children: /* @__PURE__ */ f(se, { sx: { fontSize: 10, color: b.palette.text.disabled, fontStyle: "italic", lineHeight: 1.4 }, children: [
3320
- "Nenhum filtro ainda. Use ",
3321
- /* @__PURE__ */ t("b", { children: "+ Filtro" }),
3322
- " para adicionar."
3323
- ] }) }),
3324
- /* @__PURE__ */ f(C, { sx: { ...W, borderBottom: "none", borderTop: `1px solid ${u.borderSoft}` }, children: [
3325
- /* @__PURE__ */ t(Ke, { children: "Layout" }),
3326
- /* @__PURE__ */ f(
3327
- Br,
3328
- {
3329
- exclusive: !0,
3330
- size: "small",
3331
- value: o,
3332
- onChange: /* @__PURE__ */ r((v, B) => B && a(B), "onChange"),
3333
- disabled: e,
3334
- "data-env-id": "dashboard-pad-layout-toggle",
3335
- className: "llm-env-target llm-env-layout-toggle",
3336
- sx: {
3337
- height: 24,
3338
- "& .MuiToggleButton-root": {
3339
- flex: 1,
3340
- px: 0.875,
3341
- py: 0,
3342
- fontSize: 10.5,
3343
- textTransform: "none",
3344
- color: b.palette.text.secondary,
3345
- border: `1px solid ${b.palette.divider}`,
3346
- "&.Mui-selected": { color: b.palette.text.primary, backgroundColor: u.hover },
3347
- "&.Mui-selected:hover": { backgroundColor: u.hover }
3348
- }
3349
- },
3350
- children: [
3351
- /* @__PURE__ */ t(Zt, { value: "Boxed", "data-env-id": "dashboard-pad-layout-boxed", children: "Boxed" }),
3352
- /* @__PURE__ */ t(Zt, { value: "Naked", "data-env-id": "dashboard-pad-layout-naked", children: "Naked" })
3353
- ]
3354
- }
3355
- )
3356
- ] }),
3357
- y && /* @__PURE__ */ f(C, { sx: { ...W, borderBottom: "none", borderTop: `1px solid ${u.borderSoft}` }, children: [
3358
- /* @__PURE__ */ t(Ke, { children: "Dataset / Agent" }),
3359
- y
3360
- ] })
3361
- ] }),
3362
- /* @__PURE__ */ t(Xt, { open: !!g, anchorEl: g, onClose: /* @__PURE__ */ r(() => O(null), "onClose"), anchorOrigin: { vertical: "top", horizontal: "right" }, transformOrigin: { vertical: "top", horizontal: "left" }, slotProps: { paper: { sx: A } }, children: /* @__PURE__ */ f(Jt, { dense: !0, children: [
3363
- /* @__PURE__ */ f(
3364
- ft,
3365
- {
3366
- onClick: /* @__PURE__ */ r(() => {
3367
- l(), O(null);
3368
- }, "onClick"),
3369
- sx: j,
3370
- children: [
3371
- /* @__PURE__ */ t(pt, { sx: { color: b.palette.primary.main, minWidth: 28 }, children: /* @__PURE__ */ t(Dt, { size: 14 }) }),
3372
- /* @__PURE__ */ t(mt, { primaryTypographyProps: { fontSize: 12, fontWeight: 500 }, secondaryTypographyProps: { fontSize: 10.5, color: b.palette.text.disabled }, primary: "Genérico", secondary: "Card sem tipo definido — você ou o agente preenche depois" })
3373
- ]
3374
- }
3375
- ),
3376
- /* @__PURE__ */ t(qt, { sx: { borderColor: u.borderSoft } }),
3377
- Object.entries(Fa).map(([v, B], D) => {
3378
- const T = x.category[v];
3379
- return /* @__PURE__ */ f(C, { children: [
3380
- D > 0 && /* @__PURE__ */ t(qt, { sx: { borderColor: u.borderSoft } }),
3381
- /* @__PURE__ */ f(se, { sx: { px: 2, pt: 1, pb: 0.5, fontSize: 10, textTransform: "uppercase", letterSpacing: 0.6, color: b.palette.text.disabled, display: "flex", alignItems: "center", gap: 0.5 }, children: [
3382
- /* @__PURE__ */ t(T, { fontSize: "inherit" }),
3383
- " ",
3384
- v
3385
- ] }),
3386
- B.map((P) => {
3387
- const V = x.specificType[P.specificType];
3388
- return /* @__PURE__ */ f(
3389
- ft,
3390
- {
3391
- onClick: /* @__PURE__ */ r(() => {
3392
- c(P.category, P.specificType), O(null);
3393
- }, "onClick"),
3394
- sx: j,
3395
- children: [
3396
- /* @__PURE__ */ t(pt, { sx: { color: b.palette.text.secondary, minWidth: 28 }, children: /* @__PURE__ */ t(V, { fontSize: "small" }) }),
3397
- /* @__PURE__ */ t(mt, { primaryTypographyProps: { fontSize: 12 }, children: P.label })
3398
- ]
3399
- },
3400
- P.specificType
3401
- );
3402
- })
3403
- ] }, v);
3404
- })
3405
- ] }) }),
3406
- /* @__PURE__ */ t(Xt, { open: !!G, anchorEl: G, onClose: /* @__PURE__ */ r(() => F(null), "onClose"), anchorOrigin: { vertical: "top", horizontal: "right" }, transformOrigin: { vertical: "top", horizontal: "left" }, slotProps: { paper: { sx: { ...A, minWidth: 220, maxHeight: void 0 } } }, children: /* @__PURE__ */ t(Jt, { dense: !0, children: $t.map((v) => {
3407
- const B = x.filterType[v.filterType];
3408
- return /* @__PURE__ */ f(
3409
- ft,
3410
- {
3411
- onClick: /* @__PURE__ */ r(() => {
3412
- h(v.filterType), F(null);
3413
- }, "onClick"),
3414
- sx: j,
3415
- children: [
3416
- /* @__PURE__ */ t(pt, { sx: { color: b.palette.text.secondary, minWidth: 28 }, children: /* @__PURE__ */ t(B, { fontSize: "small" }) }),
3417
- /* @__PURE__ */ t(mt, { primaryTypographyProps: { fontSize: 12 }, children: v.label })
3418
- ]
3419
- },
3420
- v.filterType
3421
- );
3422
- }) }) })
3423
- ]
3424
- }
3425
- );
3426
- }, "LeftRail");
3427
- function di(e) {
3428
- const [i, n] = H(!1), o = ie(!0);
3429
- return J(() => {
3430
- if (o.current) {
3431
- o.current = !1;
3432
- return;
3433
- }
3434
- n(e > 0);
3435
- const a = window.setTimeout(() => n(!1), 2500);
3436
- return () => window.clearTimeout(a);
3437
- }, [e]), i;
3438
- }
3439
- r(di, "usePulseTooltip");
3440
- const ci = /* @__PURE__ */ r((e, i, n) => ({
3441
- initial: n > 0 ? { scale: 1.18, backgroundColor: e.palette.primary.main, borderColor: e.palette.primary.main } : !1,
3442
- animate: { scale: 1, backgroundColor: i.raised, borderColor: e.palette.divider },
3443
- transition: { duration: 2, ease: [0.22, 0.8, 0.32, 1] },
3444
- style: {
3445
- display: "inline-flex",
3446
- alignItems: "center",
3447
- gap: 6,
3448
- backgroundColor: i.raised,
3449
- borderStyle: "solid",
3450
- borderWidth: 1,
3451
- borderColor: e.palette.divider,
3452
- borderRadius: 999,
3453
- paddingLeft: 10,
3454
- paddingRight: 4,
3455
- paddingTop: 3,
3456
- paddingBottom: 3,
3457
- fontSize: 11,
3458
- color: e.palette.text.primary,
3459
- transformOrigin: "center center"
3460
- }
3461
- }), "chipMotionProps"), hi = /* @__PURE__ */ r(({ cardCount: e, surfaces: i }) => /* @__PURE__ */ f(Ce, { children: [
3462
- /* @__PURE__ */ t(C, { sx: /* @__PURE__ */ r((n) => ({ color: n.palette.primary.main, display: "inline-flex" }), "sx"), children: /* @__PURE__ */ t(Ve, { size: 12 }) }),
3463
- /* @__PURE__ */ t(C, { component: "span", sx: { fontWeight: 500 }, children: "Sketch" }),
3464
- /* @__PURE__ */ t(C, { component: "span", sx: /* @__PURE__ */ r((n) => ({ color: n.palette.text.disabled }), "sx"), children: "·" }),
3465
- /* @__PURE__ */ f(C, { component: "span", sx: /* @__PURE__ */ r((n) => ({ fontFamily: i.fontFamilyMono, color: n.palette.text.secondary }), "sx"), children: [
3466
- e,
3467
- " ",
3468
- e === 1 ? "card" : "cards"
3469
- ] })
3470
- ] }), "ChipHead"), Ha = /* @__PURE__ */ r(({ cardCount: e, expanded: i, locked: n, onToggle: o, pulseTick: a = 0 }) => {
3471
- const l = fe(), c = ve(l), h = di(a);
3472
- return /* @__PURE__ */ t(
3473
- ge,
3474
- {
3475
- title: "O agente atualizou o sketch — clique em editar para ver",
3476
- placement: "top-end",
3477
- arrow: !0,
3478
- slotProps: { popper: { modifiers: [{ name: "offset", options: { offset: [0, 5] } }] }, tooltip: { sx: { backgroundColor: c.raised, border: `1px solid ${l.palette.primary.dark}`, color: l.palette.primary.dark } } },
3479
- open: h,
3480
- disableHoverListener: !0,
3481
- disableFocusListener: !0,
3482
- disableTouchListener: !0,
3483
- children: /* @__PURE__ */ f(pe.div, { ...ci(l, c, a), children: [
3484
- /* @__PURE__ */ t(hi, { cardCount: e, surfaces: c }),
3485
- /* @__PURE__ */ t(ge, { title: i ? "Recolher sketch" : "Editar sketch", placement: "top", children: /* @__PURE__ */ t(
3486
- C,
3487
- {
3488
- component: "button",
3489
- onClick: o,
3490
- disabled: n,
3491
- sx: {
3492
- background: c.raised,
3493
- border: `1px solid ${l.palette.divider}`,
3494
- color: l.palette.text.primary,
3495
- fontFamily: l.typography.fontFamily,
3496
- fontSize: 11.5,
3497
- display: "inline-flex",
3498
- alignItems: "center",
3499
- gap: 0.625,
3500
- pl: 1,
3501
- pr: 1.25,
3502
- py: 0.625,
3503
- borderRadius: 999,
3504
- cursor: n ? "not-allowed" : "pointer",
3505
- opacity: n ? 0.45 : 1,
3506
- transition: "background-color 2s, border-color 2s",
3507
- "&:hover": n ? void 0 : { backgroundColor: c.hover, borderColor: l.palette.primary.main }
3508
- },
3509
- children: i ? /* @__PURE__ */ t(Ve, { size: 13 }) : /* @__PURE__ */ t(Gr, { sx: { fontSize: 14 } })
3510
- }
3511
- ) })
3512
- ] }, a + n.toString())
3513
- }
3514
- );
3515
- }, "SketchChip"), Ba = /* @__PURE__ */ r(({ cardCount: e, locked: i, onCreate: n, pulseTick: o = 0 }) => {
3516
- const a = fe(), l = ve(a), c = di(o), h = i || !n;
3517
- return /* @__PURE__ */ t(
3518
- ge,
3519
- {
3520
- title: "O agente atualizou o sketch — clique em editar para ver",
3521
- placement: "top",
3522
- slotProps: { popper: { modifiers: [{ name: "offset", options: { offset: [0, 5] } }] }, tooltip: { sx: { backgroundColor: l.raised, color: a.palette.primary.main } } },
3523
- open: c,
3524
- disableHoverListener: !0,
3525
- disableFocusListener: !0,
3526
- disableTouchListener: !0,
3527
- children: /* @__PURE__ */ f(pe.div, { ...ci(a, l, o), children: [
3528
- /* @__PURE__ */ t(hi, { cardCount: e, surfaces: l }),
3529
- /* @__PURE__ */ f(
3530
- C,
3531
- {
3532
- component: "button",
3533
- onClick: n,
3534
- disabled: h,
3535
- "data-env-id": "dashboard-pad-new",
3536
- className: "llm-env-target llm-env-dashboard-action",
3537
- sx: {
3538
- background: l.raised,
3539
- border: "none",
3540
- color: a.palette.text.primary,
3541
- fontFamily: a.typography.fontFamily,
3542
- fontSize: 11.5,
3543
- display: "inline-flex",
3544
- alignItems: "center",
3545
- gap: 0.625,
3546
- pl: 1,
3547
- pr: 1.25,
3548
- py: 0.625,
3549
- borderRadius: 999,
3550
- cursor: h ? "not-allowed" : "pointer",
3551
- opacity: h ? 0.45 : 1,
3552
- transition: "background-color .12s, border-color .12s",
3553
- "&:hover": h ? void 0 : { backgroundColor: l.hover, borderColor: a.palette.primary.main }
3554
- },
3555
- children: [
3556
- /* @__PURE__ */ t(C, { sx: { color: a.palette.primary.main, display: "inline-flex", backgroundColor: a.palette.background.default, borderRadius: 999, p: 0.25, border: `1px solid ${l.borderSoft}` }, children: /* @__PURE__ */ t(Dt, { size: 11 }) }),
3557
- /* @__PURE__ */ t(C, { component: "span", sx: { fontWeight: 500 }, children: "Adicionar sketch" }),
3558
- /* @__PURE__ */ t(C, { component: "span", sx: { color: a.palette.text.disabled, fontFamily: l.fontFamilyMono, fontSize: 10.5 }, children: "desenhe o layout antes de pedir" })
3559
- ]
3560
- }
3561
- )
3562
- ] }, o)
3563
- }
3564
- );
3565
- }, "AddSketchChip"), ui = Et(({ onCreateSketch: e, onBeforeSend: i, sketchExpanded: n, bottomSlot: o, zoomLevel: a, onSketchExpandedChange: l, seedDraft: c, compact: h, datasetControls: m, renderDescription: d }, S) => {
3566
- const s = ye(), [y, b] = H(c);
3567
- J(() => {
3568
- b(c);
3569
- }, [c]);
3570
- const u = ie(null), x = Y((k) => k.agentPulseTick), g = Y((k) => {
3571
- var E;
3572
- return ((E = k.dashboardDefinition) == null ? void 0 : E.id) ?? null;
3573
- }), O = Y((k) => {
3574
- var E;
3575
- return ((E = k.dashboardDefinition) == null ? void 0 : E.name) ?? "";
3576
- }), G = Y((k) => {
3577
- var E, ee;
3578
- return ((ee = (E = k.dashboardDefinition) == null ? void 0 : E.cards) == null ? void 0 : ee.length) ?? 0;
3579
- }), F = Y((k) => {
3580
- var E, ee;
3581
- return ((ee = (E = k.dashboardDefinition) == null ? void 0 : E.filters) == null ? void 0 : ee.length) ?? 0;
3582
- }), z = Y((k) => k.currentSessionId), _ = Y((k) => {
3583
- var E;
3584
- return (E = k.dashboardDefinition) == null ? void 0 : E.filters;
3585
- }) ?? Na, M = Y((k) => {
3586
- var E;
3587
- return ((E = k.dashboardDefinition) == null ? void 0 : E.layoutType) ?? "Boxed";
3588
- }), W = Y((k) => k.turnOpen), j = Y((k) => {
3589
- var E;
3590
- return ((E = k.dashboardDefinition) == null ? void 0 : E.clientSideChanges) ?? null;
3591
- }), A = Y((k) => k.dashboardDefinition), v = Y((k) => k.lastSentDashboard), [B, D] = H(!1), T = me(() => {
3592
- if (!A && !v) return { hasAny: !1, text: null };
3593
- if (!A || !v) return { hasAny: !0, text: "Sketch alterado" };
3594
- const k = tn(A.cards ?? [], v.cards ?? []), E = tn(A.filters ?? [], v.filters ?? []), ee = (A.name ?? "") !== (v.name ?? ""), oe = (A.layoutType ?? "Boxed") !== (v.layoutType ?? "Boxed");
3595
- if (k.added + k.removed + k.modified + E.added + E.removed + E.modified === 0 && !ee && !oe) return { hasAny: !1, text: null };
3596
- const ce = [];
3597
- return k.added && ce.push(`+${k.added} ${k.added === 1 ? "card" : "cards"}`), k.removed && ce.push(`-${k.removed} ${k.removed === 1 ? "card" : "cards"}`), k.modified && ce.push(`${k.modified} ${k.modified === 1 ? "card alterado" : "cards alterados"}`), E.added && ce.push(`+${E.added} ${E.added === 1 ? "filtro" : "filtros"}`), E.removed && ce.push(`-${E.removed} ${E.removed === 1 ? "filtro" : "filtros"}`), E.modified && ce.push(`${E.modified} ${E.modified === 1 ? "filtro alterado" : "filtros alterados"}`), ce.length === 0 && ce.push("Sketch alterado"), { hasAny: !0, text: ce.join(" · ") };
3598
- }, [A, v]), P = T.hasAny, V = T.text, K = !!g || G > 0 || F > 0, Z = /* @__PURE__ */ r(async (k) => {
3599
- b(""), s.getState().commitForSend(), i && await i(k);
3600
- }, "handleOnBefore"), re = n ?? !1, he = /* @__PURE__ */ r((k) => l == null ? void 0 : l(k), "setSketchExpanded"), U = /* @__PURE__ */ r(() => {
3601
- D(!0), setTimeout(() => D(!1), 1e3);
3602
- }, "handleForceOpenCard"), te = /* @__PURE__ */ r((k) => {
3603
- const E = k.length === 0 ? "Untitled Dashboard" : k;
3604
- s.getState().recordSketchChange("dashboard:name", `Renamed dashboard to '${E}'`), s.getState().updateDashboard({ name: E });
3605
- }, "handleNameChange"), w = /* @__PURE__ */ r((k) => {
3606
- s.getState().recordSketchChange("dashboard:layoutType", `Set layout type to ${k}`), s.getState().updateDashboard({ layoutType: k });
3607
- }, "handleLayoutTypeChange"), N = /* @__PURE__ */ r(() => {
3608
- var k;
3609
- return (k = u.current) == null ? void 0 : k.addGenericCell();
3610
- }, "handleAddGenericCard"), ne = /* @__PURE__ */ r((k, E) => {
3611
- var ee;
3612
- return (ee = u.current) == null ? void 0 : ee.addTypedCell(k, E, "");
3613
- }, "handleAddTypedCard"), p = /* @__PURE__ */ r((k) => {
3614
- var E;
3615
- return (E = u.current) == null ? void 0 : E.handleAddFilter(k);
3616
- }, "handleAddFilter"), I = /* @__PURE__ */ r((k) => {
3617
- var ee;
3618
- const E = ((ee = s.getState().dashboardDefinition) == null ? void 0 : ee.filters) ?? [];
3619
- s.getState().recordSketchChange(`filter:${k.i}:edit`, `Edited filter '${k.name}'`), s.getState().updateDashboard({ filters: E.map((oe) => oe.i === k.i ? { ...k } : oe) });
3620
- }, "handleEditFilter"), $ = /* @__PURE__ */ r((k) => {
3621
- var oe;
3622
- const E = ((oe = s.getState().dashboardDefinition) == null ? void 0 : oe.filters) ?? [], ee = E.find((de) => de.i === k);
3623
- s.getState().recordSketchChange(`filter:${k}:delete`, `Deleted filter '${(ee == null ? void 0 : ee.name) ?? k}'`), s.getState().updateDashboard({ filters: E.filter((de) => de.i !== k) });
3624
- }, "handleDeleteFilter"), R = /* @__PURE__ */ f(C, { sx: { display: "flex", flexDirection: "column" }, children: [
3625
- /* @__PURE__ */ f(lt, { mode: "wait", initial: !1, children: [
3626
- !K && !re && /* @__PURE__ */ t(pe.div, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: "auto" }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.18, ease: "easeOut" }, children: /* @__PURE__ */ t(C, { sx: { px: 1.25, py: 1, display: "flex", alignItems: "center" }, children: /* @__PURE__ */ t(Ba, { onCreate: e, locked: W, cardCount: G, pulseTick: x }) }) }, "add-sketch"),
3627
- re && /* @__PURE__ */ t(pe.div, { style: { overflow: "hidden" }, initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: "auto" }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.25, ease: "easeOut" }, children: /* @__PURE__ */ f(C, { sx: /* @__PURE__ */ r((k) => ({ flexShrink: 0, height: "min(50vh, 300px)", minHeight: 280, display: "flex", flexDirection: "row", overflow: "auto", background: k.palette.background.default }), "sx"), children: [
3628
- /* @__PURE__ */ t(
3629
- La,
3630
- {
3631
- locked: W,
3632
- name: O,
3633
- onNameChange: te,
3634
- layoutType: M,
3635
- onLayoutTypeChange: w,
3636
- onAddGenericCard: N,
3637
- onAddTypedCard: ne,
3638
- onAddFilter: p,
3639
- cardsOpened: B,
3640
- filters: _,
3641
- onEditFilter: I,
3642
- onDeleteFilter: $,
3643
- datasetControls: m
3644
- }
3645
- ),
3646
- /* @__PURE__ */ t(C, { sx: { flex: 1, pt: 1, minWidth: 0, display: "flex", flexDirection: "column" }, children: /* @__PURE__ */ t(ht, { ref: u, zoomLevel: a, onAddCard: U, renderId: "composer-pad", hideInternalHeader: !0, hideFiltersInSketch: !0, renderDescription: d }) })
3647
- ] }) }, "sketch-expanded")
3648
- ] }),
3649
- K && /* @__PURE__ */ t(
3650
- pe.div,
3651
- {
3652
- initial: { opacity: re ? 0 : 1, height: 0, display: re ? "flex" : "none" },
3653
- animate: { opacity: re ? 0 : 1, height: "auto", display: re ? "none" : "flex" },
3654
- exit: { opacity: K ? 1 : 0, height: 0, display: "flex" },
3655
- transition: { duration: 0.5, ease: "easeInOut" },
3656
- children: /* @__PURE__ */ f(C, { sx: { display: "flex", alignItems: "center", gap: 1, px: 1.25, py: 0.875 }, children: [
3657
- /* @__PURE__ */ t(Ha, { cardCount: G, expanded: re, locked: W, onToggle: /* @__PURE__ */ r(() => he(!re), "onToggle"), pulseTick: x }),
3658
- /* @__PURE__ */ t(se, { sx: /* @__PURE__ */ r((k) => ({ color: k.palette.text.primary, fontWeight: 500, fontSize: 11.5, lineHeight: 1.2, whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" }), "sx"), children: O })
3659
- ] })
3660
- },
3661
- "filled-sketch"
3662
- )
3663
- ] }), Q = me(() => {
3664
- const k = "Será enviado junto com a mensagem", E = At(j ?? void 0);
3665
- return E ? `${k}:
3666
-
3667
- ${E}` : k;
3668
- }, [j]);
3669
- return /* @__PURE__ */ t(
3670
- Mr,
3671
- {
3672
- ref: S,
3673
- seedDraft: y,
3674
- showLastPrompts: !1,
3675
- topSlot: R,
3676
- topSlotCollapsible: K || re,
3677
- topSlotExpanded: re,
3678
- onTopSlotExpandedChange: he,
3679
- onBeforeSend: Z,
3680
- sendButtonProps: { "data-env-id": "dashboard-pad-compose", className: "llm-env-target llm-env-dashboard-action" },
3681
- allowEmptyDraft: P,
3682
- submitAdornment: V ? /* @__PURE__ */ t(ge, { placement: "top", title: Q, slotProps: { tooltip: { sx: { whiteSpace: "pre-line", maxWidth: 360, fontSize: 11.5, lineHeight: 1.4, fontFamily: /* @__PURE__ */ r((k) => k.typography.fontFamily, "fontFamily") } } }, children: /* @__PURE__ */ t(C, { sx: /* @__PURE__ */ r((k) => ({ display: "inline-flex", alignItems: "center", gap: 0.5, px: 0.875, py: 0.25, mr: 0.75, borderRadius: 999, border: `1px solid ${k.palette.primary.dark}`, color: k.palette.primary.main, fontFamily: k.typography.fontFamily, fontSize: 10.5, lineHeight: 1.2, whiteSpace: "nowrap", pointerEvents: "auto" }), "sx"), children: V }) }) : null,
3683
- inputMinHeight: re || h ? 40 : 120
3684
- },
3685
- z ?? "no-session"
3686
- );
3687
- });
3688
- ui.displayName = "DrawablePrompt";
3689
- const pi = We.memo(ui), mi = [
3690
- {
3691
- label: "Compare vendas e reservas por semana, focando em rotas internacionais",
3692
- prompt: "Crie uma sugestão de dashboard de vendas e reservas por semana, focando em rotas nacionais. Envie um rascunho pronto para carregar na minha interface."
3693
- },
3694
- {
3695
- label: "Me ajude a entender como o Dashboard Composer funciona",
3696
- prompt: "Me ajude a entender como o Dashboard Composer funciona. Apresente os tipos de gráficos e depois envie um guia ao vivo, do passo a passo da interface"
3697
- }
3698
- ];
3699
- function Ga({ kinds: e, accent: i }) {
3700
- const n = fe(), o = ve(n), a = i ? n.palette.primary.main : n.palette.text.disabled;
3701
- return e.length === 0 ? /* @__PURE__ */ t(C, { sx: { width: "100%", height: 56, display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 0.375 }, children: Array.from({ length: 6 }).map((l, c) => /* @__PURE__ */ t(C, { sx: { background: n.palette.background.default, border: `1px dashed ${o.borderSoft}`, borderRadius: 0.5 } }, c)) }) : /* @__PURE__ */ t(C, { sx: { width: "100%", height: 56, display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 0.375 }, children: e.slice(0, 6).map((l, c) => /* @__PURE__ */ f(
3702
- C,
3703
- {
3704
- sx: {
3705
- background: n.palette.background.default,
3706
- border: `1px solid ${i ? n.palette.primary.main : o.borderSoft}`,
3707
- borderRadius: 0.5,
3708
- p: 0.5,
3709
- display: "flex",
3710
- alignItems: "center",
3711
- justifyContent: "center",
3712
- color: a
3713
- },
3714
- children: [
3715
- l === "kpi" && /* @__PURE__ */ t(C, { sx: { fontSize: 8, fontWeight: 600 }, children: "R$ ··" }),
3716
- l === "line" && /* @__PURE__ */ t("svg", { width: "100%", height: "14", viewBox: "0 0 40 14", preserveAspectRatio: "none", children: /* @__PURE__ */ t("path", { d: "M0 11 L8 7 L16 9 L24 4 L32 6 L40 2", stroke: a, strokeWidth: "1", fill: "none" }) }),
3717
- l === "bars" && /* @__PURE__ */ t("svg", { width: "100%", height: "14", viewBox: "0 0 40 14", preserveAspectRatio: "none", children: [3, 7, 5, 9, 6, 11, 8, 12].map((h, m) => /* @__PURE__ */ t("rect", { x: m * 5 + 0.5, y: 14 - h, width: 3.5, height: h, fill: a }, m)) }),
3718
- l === "table" && /* @__PURE__ */ t(C, { sx: { width: "90%", display: "flex", flexDirection: "column", gap: "1px" }, children: [0, 1, 2].map((h) => /* @__PURE__ */ t(C, { sx: { height: 1.5, background: a, borderRadius: "0.5px" } }, h)) }),
3719
- l === "donut" && /* @__PURE__ */ t("svg", { width: "14", height: "14", viewBox: "0 0 14 14", children: /* @__PURE__ */ t("circle", { cx: "7", cy: "7", r: "5", stroke: a, strokeWidth: "2", fill: "none", strokeDasharray: "20 30" }) }),
3720
- l === "heatmap" && /* @__PURE__ */ t(C, { sx: { display: "grid", gridTemplateColumns: "repeat(4, 1fr)", gap: "0.5px", width: "70%" }, children: Array.from({ length: 8 }).map((h, m) => /* @__PURE__ */ t(C, { sx: { aspectRatio: "1", background: a, opacity: 0.2 + m / 8 * 0.7 } }, m)) })
3721
- ]
3722
- },
3723
- `Template${c}`
3724
- )) });
3725
- }
3726
- r(Ga, "TemplatePreview");
3727
- function Wa(e) {
3728
- if (!e) return "";
3729
- const i = Date.now() - e, n = 6e4, o = 60 * n, a = 24 * o;
3730
- return i < n ? "agora" : i < o ? `${Math.floor(i / n)}m` : i < a ? `${Math.floor(i / o)}h` : i < 7 * a ? `${Math.floor(i / a)}d` : `${Math.floor(i / (7 * a))}sem`;
3731
- }
3732
- r(Wa, "formatRelativeTime");
3733
- const jt = /* @__PURE__ */ r(({
3734
- onDraftPromptChange: e,
3735
- onApplyTemplate: i,
3736
- composerSlot: n,
3737
- ambientWrapper: o,
3738
- recentSessions: a,
3739
- onSelectSession: l,
3740
- onSearchAllSessions: c,
3741
- suggestions: h = mi,
3742
- templates: m = Wt
3743
- }) => {
3744
- const d = fe(), S = ve(d), s = o ?? ((u) => u), y = {
3745
- background: "transparent",
3746
- border: "none",
3747
- textAlign: "left",
3748
- padding: "6px 0",
3749
- color: d.palette.text.secondary,
3750
- fontFamily: d.typography.fontFamily,
3751
- fontSize: 13,
3752
- cursor: "pointer",
3753
- display: "flex",
3754
- alignItems: "center",
3755
- gap: 1,
3756
- "&:hover": { color: d.palette.text.primary }
3757
- }, b = { fontSize: 11, color: d.palette.text.disabled, textTransform: "uppercase", letterSpacing: 0.5, mb: 1 };
3758
- return /* @__PURE__ */ f(C, { sx: { flex: 1, minHeight: 0, overflow: "auto", display: "flex", flexDirection: "column", gap: 3.5, padding: { xs: 3, md: "40px 56px" }, background: d.palette.background.default }, children: [
3759
- s(
3760
- /* @__PURE__ */ f(C, { children: [
3761
- /* @__PURE__ */ t(se, { sx: { fontSize: 11, color: d.palette.primary.main, textTransform: "uppercase", letterSpacing: 0.8, mb: 1, fontWeight: 500 }, children: "Novo dashboard" }),
3762
- /* @__PURE__ */ f(se, { component: "h1", sx: { fontSize: 30, fontWeight: 600, color: d.palette.text.primary, margin: 0, lineHeight: 1.2, letterSpacing: -0.4 }, children: [
3763
- "Descreva o que você quer, peça ajuda",
3764
- " ",
3765
- /* @__PURE__ */ t(C, { component: "span", sx: { color: d.palette.text.disabled }, children: "ou comece de um template." })
3766
- ] })
3767
- ] }),
3768
- "hero"
3769
- ),
3770
- n,
3771
- s(
3772
- /* @__PURE__ */ f(C, { sx: { display: "grid", gridTemplateColumns: { xs: "1fr", md: "1fr 1fr" }, gap: { xs: 3, md: 5 } }, children: [
3773
- /* @__PURE__ */ f(C, { children: [
3774
- /* @__PURE__ */ t(se, { sx: b, children: "Sugestões" }),
3775
- /* @__PURE__ */ t(C, { sx: { display: "flex", flexDirection: "column", gap: 0.25 }, children: h.map((u) => /* @__PURE__ */ f(C, { component: "button", onClick: /* @__PURE__ */ r(() => e(u.prompt), "onClick"), sx: y, children: [
3776
- /* @__PURE__ */ t(C, { component: "span", sx: { color: d.palette.text.disabled }, children: "↗" }),
3777
- /* @__PURE__ */ t("span", { children: u.label })
3778
- ] }, u.label)) })
3779
- ] }),
3780
- /* @__PURE__ */ f(C, { children: [
3781
- /* @__PURE__ */ t(se, { sx: b, children: "Sessões recentes" }),
3782
- !a || a.length === 0 ? /* @__PURE__ */ t(se, { sx: { fontSize: 12, color: d.palette.text.disabled, fontStyle: "italic", py: 0.5 }, children: "Você ainda não tem sessões salvas. Crie um novo dashboard acima." }) : /* @__PURE__ */ f(C, { sx: { display: "flex", flexDirection: "column", gap: 0.25 }, children: [
3783
- a.map((u, x) => /* @__PURE__ */ f(
3784
- C,
3785
- {
3786
- component: "button",
3787
- onClick: /* @__PURE__ */ r(() => l == null ? void 0 : l(u.sessionId), "onClick"),
3788
- disabled: !l,
3789
- sx: { ...y, minWidth: 0, cursor: l ? "pointer" : "default", "&:hover": l ? y["&:hover"] : void 0 },
3790
- children: [
3791
- /* @__PURE__ */ t(C, { component: "span", sx: { color: d.palette.text.disabled, flexShrink: 0 }, children: "↺" }),
3792
- /* @__PURE__ */ t(C, { component: "span", sx: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: u.name }),
3793
- /* @__PURE__ */ f(C, { component: "span", sx: { color: d.palette.text.disabled, fontFamily: S.fontFamilyMono, fontSize: 11, flexShrink: 0 }, children: [
3794
- u.cardCount,
3795
- " ",
3796
- u.cardCount === 1 ? "card" : "cards",
3797
- u.updatedAt ? ` · ${Wa(u.updatedAt)}` : ""
3798
- ] })
3799
- ]
3800
- },
3801
- u.sessionId + x
3802
- )),
3803
- c && /* @__PURE__ */ f(C, { component: "button", onClick: c, sx: { ...y, color: d.palette.primary.main, fontSize: 12.5, mt: 0.5, "&:hover": { filter: "brightness(1.1)" } }, children: [
3804
- /* @__PURE__ */ t(C, { component: "span", sx: { color: d.palette.text.disabled }, children: "⌕" }),
3805
- /* @__PURE__ */ t("span", { children: "Buscar todas as sessões" })
3806
- ] })
3807
- ] })
3808
- ] })
3809
- ] }),
3810
- "suggestions"
3811
- ),
3812
- s(
3813
- /* @__PURE__ */ f(C, { children: [
3814
- /* @__PURE__ */ f(C, { sx: { display: "flex", alignItems: "center", gap: 1, mb: 1.25, fontSize: 11, color: d.palette.text.disabled, textTransform: "uppercase", letterSpacing: 0.5 }, children: [
3815
- /* @__PURE__ */ t("span", { children: "ou comece de um template" }),
3816
- /* @__PURE__ */ t(C, { sx: { flex: 1, height: "1px", background: S.borderSoft } })
3817
- ] }),
3818
- /* @__PURE__ */ t(C, { sx: { display: "grid", gridTemplateColumns: { xs: "1fr 1fr", md: "repeat(4, 1fr)" }, gap: 1.25 }, children: m.map((u) => /* @__PURE__ */ f(
3819
- C,
3820
- {
3821
- component: "button",
3822
- onClick: /* @__PURE__ */ r(() => i(u), "onClick"),
3823
- sx: {
3824
- background: d.palette.background.paper,
3825
- border: `1px solid ${d.palette.divider}`,
3826
- borderRadius: 1.25,
3827
- padding: 1.5,
3828
- cursor: "pointer",
3829
- textAlign: "left",
3830
- fontFamily: d.typography.fontFamily,
3831
- display: "flex",
3832
- flexDirection: "column",
3833
- gap: 1,
3834
- transition: "border-color .15s, transform .15s",
3835
- "&:hover": { borderColor: d.palette.primary.main, transform: "translateY(-1px)" }
3836
- },
3837
- children: [
3838
- /* @__PURE__ */ t(Ga, { kinds: ai(u), accent: u.recommended }),
3839
- /* @__PURE__ */ f(C, { children: [
3840
- /* @__PURE__ */ t(se, { sx: { fontSize: 12.5, color: d.palette.text.primary, fontWeight: 500 }, children: u.name }),
3841
- /* @__PURE__ */ t(se, { sx: { fontSize: 10.5, color: d.palette.text.secondary, mt: 0.25, lineHeight: 1.4 }, children: u.desc }),
3842
- /* @__PURE__ */ t(se, { sx: { fontSize: 10, color: d.palette.text.disabled, fontFamily: S.fontFamilyMono, mt: 0.5 }, children: u.cells.length === 0 ? "em branco" : `${u.cells.length} cards` })
3843
- ] })
3844
- ]
3845
- },
3846
- u.id
3847
- )) })
3848
- ] }),
3849
- "templates"
3850
- )
3851
- ] });
3852
- }, "EntryEmptyState");
3853
- jt.displayName = "EntryEmptyState";
3854
- const ue = 6, Fe = 12, rn = 320, ja = 220, an = 150, on = 3e3;
3855
- function Va(e, i, n, o) {
3856
- const a = window.innerWidth, l = window.innerHeight, c = e && e !== "auto" ? [e] : ["bottom", "top", "right", "left"];
3857
- for (const h of c) {
3858
- let m = 0, d = 0;
3859
- switch (h) {
3860
- case "bottom":
3861
- m = i.top + i.height + ue + Fe, d = i.left + i.width / 2 - n / 2;
3862
- break;
3863
- case "top":
3864
- m = i.top - ue - Fe - o, d = i.left + i.width / 2 - n / 2;
3865
- break;
3866
- case "right":
3867
- m = i.top + i.height / 2 - o / 2, d = i.left + i.width + ue + Fe;
3868
- break;
3869
- case "left":
3870
- m = i.top + i.height / 2 - o / 2, d = i.left - ue - Fe - n;
3871
- break;
3872
- }
3873
- if (d = Math.max(8, Math.min(d, a - n - 8)), m = Math.max(8, Math.min(m, l - o - 8)), m >= 0 && m + o <= l && d >= 0 && d + n <= a || h === c[c.length - 1]) return { top: m, left: d, resolvedPlacement: h };
3874
- }
3875
- return { top: i.top + i.height + Fe, left: i.left, resolvedPlacement: "bottom" };
3876
- }
3877
- r(Va, "computePlacement");
3878
- const fi = /* @__PURE__ */ r(({ steps: e, overlayOpacity: i = 0.6, allowInteraction: n = !1, onComplete: o, onDismiss: a, resolveElement: l = Rt }) => {
3879
- const c = fe(), h = ve(c), [m, d] = H(0), [S, s] = H(null), [y, b] = H({ width: rn, height: 120 }), u = ie(null), x = ie(0), g = e[m], O = m === 0, G = m === e.length - 1, F = q(() => {
3880
- var v;
3881
- if (!g) return;
3882
- const A = l(g.target);
3883
- if (A) {
3884
- const B = A.getBoundingClientRect();
3885
- s({ top: B.top, left: B.left, width: B.width, height: B.height }), (v = A.scrollIntoView) == null || v.call(A, { behavior: "smooth", block: "nearest", inline: "nearest" });
3886
- } else
3887
- s(null);
3888
- }, [g, l]);
3889
- J(() => {
3890
- if (!g) return;
3891
- let A = !1, v = 0, B;
3892
- const D = /* @__PURE__ */ r(() => {
3893
- console.warn(`[@aintela/bi SpotlightOverlay] Step ${m + 1}/${e.length} could not resolve its target within ${on} ms; skipping.`, { target: g.target, title: g.title }), m < e.length - 1 ? d((V) => V + 1) : (console.warn("[@aintela/bi SpotlightOverlay] All steps failed to resolve; dismissing tour."), a());
3894
- }, "giveUpOnStep"), T = /* @__PURE__ */ r(() => {
3895
- var K;
3896
- if (A) return;
3897
- const V = l(g.target);
3898
- if (V) {
3899
- const Z = V.getBoundingClientRect();
3900
- if (Z.width > 0 && Z.height > 0) {
3901
- s({ top: Z.top, left: Z.left, width: Z.width, height: Z.height }), (K = V.scrollIntoView) == null || K.call(V, { behavior: "smooth", block: "nearest", inline: "nearest" });
3902
- return;
3903
- }
3904
- }
3905
- if (v += an, v >= on) {
3906
- D();
3907
- return;
3908
- }
3909
- B = window.setTimeout(T, an);
3910
- }, "attempt");
3911
- T();
3912
- const P = /* @__PURE__ */ r(() => {
3913
- cancelAnimationFrame(x.current), x.current = requestAnimationFrame(F);
3914
- }, "onScroll");
3915
- return window.addEventListener("scroll", P, !0), window.addEventListener("resize", P), () => {
3916
- A = !0, B !== void 0 && window.clearTimeout(B), window.removeEventListener("scroll", P, !0), window.removeEventListener("resize", P), cancelAnimationFrame(x.current);
3917
- };
3918
- }, [g, l, a, F, m, e.length]), J(() => {
3919
- if (u.current) {
3920
- const { offsetWidth: A, offsetHeight: v } = u.current;
3921
- b({ width: A, height: v });
3922
- }
3923
- }, [m, S]);
3924
- const z = q(() => {
3925
- G ? (o == null || o(), a()) : d((A) => A + 1);
3926
- }, [G, o, a]), _ = q(() => {
3927
- O || d((A) => A - 1);
3928
- }, [O]);
3929
- if (J(() => {
3930
- const A = /* @__PURE__ */ r((v) => {
3931
- v.key === "Escape" ? a() : v.key === "ArrowRight" || v.key === "Enter" ? z() : v.key === "ArrowLeft" && _();
3932
- }, "onKey");
3933
- return window.addEventListener("keydown", A), () => window.removeEventListener("keydown", A);
3934
- }, [a, z, _]), !g || typeof document > "u") return null;
3935
- const M = S ? `polygon(
3936
- 0% 0%, 0% 100%, 100% 100%, 100% 0%, 0% 0%,
3937
- ${S.left - ue}px ${S.top - ue}px,
3938
- ${S.left + S.width + ue}px ${S.top - ue}px,
3939
- ${S.left + S.width + ue}px ${S.top + S.height + ue}px,
3940
- ${S.left - ue}px ${S.top + S.height + ue}px,
3941
- ${S.left - ue}px ${S.top - ue}px
3942
- )` : void 0, W = S ? Va(g.placement, S, y.width, y.height) : null, j = {
3943
- fontFamily: c.typography.fontFamily,
3944
- fontSize: 11.5,
3945
- fontWeight: 500,
3946
- px: 1.25,
3947
- py: 0.625,
3948
- borderRadius: 1,
3949
- cursor: "pointer",
3950
- transition: "filter .12s, background-color .12s, border-color .12s",
3951
- border: "1px solid transparent"
3952
- };
3953
- return yr(
3954
- /* @__PURE__ */ f(C, { className: "llm-guide-overlay-root", sx: { position: "fixed", inset: 0, zIndex: 9999 }, children: [
3955
- S && /* @__PURE__ */ t(
3956
- C,
3957
- {
3958
- onClick: n ? a : void 0,
3959
- sx: {
3960
- position: "absolute",
3961
- inset: 0,
3962
- backgroundColor: Te(c.palette.common.black, i),
3963
- clipPath: M,
3964
- transition: "clip-path 0.3s ease",
3965
- pointerEvents: n ? "none" : "auto"
3966
- }
3967
- }
3968
- ),
3969
- S && /* @__PURE__ */ t(
3970
- C,
3971
- {
3972
- className: "llm-guide-spotlight-ring",
3973
- sx: {
3974
- position: "absolute",
3975
- top: S.top - ue,
3976
- left: S.left - ue,
3977
- width: S.width + ue * 2,
3978
- height: S.height + ue * 2,
3979
- borderRadius: "6px",
3980
- border: `2px solid ${c.palette.primary.main}`,
3981
- boxShadow: `0 0 0 4px ${Te(c.palette.primary.main, 0.2)}, 0 8px 24px ${Te(c.palette.primary.main, 0.13)}`,
3982
- transition: "all 0.3s ease",
3983
- pointerEvents: "none"
3984
- }
3985
- }
3986
- ),
3987
- W && /* @__PURE__ */ f(
3988
- C,
3989
- {
3990
- ref: u,
3991
- sx: {
3992
- position: "absolute",
3993
- top: W.top,
3994
- left: W.left,
3995
- maxWidth: rn,
3996
- minWidth: ja,
3997
- p: 2,
3998
- borderRadius: 1.5,
3999
- backgroundColor: c.palette.background.paper,
4000
- border: `1px solid ${c.palette.divider}`,
4001
- boxShadow: c.shadows[8],
4002
- transition: "top 0.3s ease, left 0.3s ease",
4003
- pointerEvents: "auto",
4004
- display: "flex",
4005
- flexDirection: "column",
4006
- gap: 1.25,
4007
- fontFamily: c.typography.fontFamily
4008
- },
4009
- children: [
4010
- /* @__PURE__ */ f(C, { sx: { display: "flex", justifyContent: "space-between", alignItems: "flex-start", gap: 1 }, children: [
4011
- /* @__PURE__ */ f(C, { sx: { flex: 1, minWidth: 0 }, children: [
4012
- /* @__PURE__ */ f(se, { sx: { fontSize: 10, color: c.palette.primary.main, textTransform: "uppercase", letterSpacing: 0.6, fontWeight: 500, mb: g.title ? 0.5 : 0 }, children: [
4013
- "Guia · ",
4014
- m + 1,
4015
- " / ",
4016
- e.length
4017
- ] }),
4018
- g.title && /* @__PURE__ */ t(se, { sx: { fontSize: 13.5, fontWeight: 600, color: c.palette.text.primary, lineHeight: 1.3, mb: 0.5 }, children: g.title }),
4019
- /* @__PURE__ */ t(se, { sx: { fontSize: 12.5, color: c.palette.text.secondary, lineHeight: 1.5 }, children: g.description })
4020
- ] }),
4021
- /* @__PURE__ */ t(C, { component: "button", onClick: a, "aria-label": "Fechar guia", sx: { ...j, background: "transparent", border: "none", color: c.palette.text.disabled, p: 0.5, display: "inline-flex", "&:hover": { color: c.palette.text.primary } }, children: /* @__PURE__ */ t(Ot, { size: 12 }) })
4022
- ] }),
4023
- /* @__PURE__ */ f(C, { sx: { display: "flex", justifyContent: "flex-end", alignItems: "center", gap: 0.75 }, children: [
4024
- !O && /* @__PURE__ */ t(C, { component: "button", onClick: _, sx: { ...j, background: "transparent", color: c.palette.text.secondary, "&:hover": { color: c.palette.text.primary, backgroundColor: h.raised } }, children: "Anterior" }),
4025
- /* @__PURE__ */ t(C, { component: "button", onClick: z, sx: { ...j, background: c.palette.primary.main, color: c.palette.primary.contrastText, fontWeight: 600, "&:hover": { filter: "brightness(1.05)" } }, children: G ? "Concluir" : "Próximo" })
4026
- ] })
4027
- ]
4028
- }
4029
- )
4030
- ] }),
4031
- document.body
4032
- );
4033
- }, "SpotlightOverlay"), Ua = "aintela-bi-composer", Ya = 2, Ka = /* @__PURE__ */ r((e) => {
4034
- var he;
4035
- const { sessionId: i = null, routeSessionId: n, composerMode: o, onForceExecutionMode: a, recentSessionsResolved: l } = e, c = fe(), h = ve(c), m = ye(), d = je(), S = Y((U) => {
4036
- var te;
4037
- return ((te = U.dashboardDefinition) == null ? void 0 : te.jsFileName) ?? null;
4038
- }), s = Y((U) => {
4039
- var te;
4040
- return ((te = U.dashboardDefinition) == null ? void 0 : te.name) ?? null;
4041
- }), y = Y((U) => U.turnOpen), b = Y((U) => U.sketchExpanded), u = q((U) => m.getState().setSketchExpanded(U), [m]), [x, g] = H(""), [O, G] = H(void 0), [F, z] = H(!1), [_, M] = H(!1), W = S !== null, j = ie(null);
4042
- J(() => {
4043
- var te;
4044
- const U = s == null ? void 0 : s.trim();
4045
- return (te = e.onDashboardNameChange) == null || te.call(e, U || null), () => {
4046
- var w;
4047
- return (w = e.onDashboardNameChange) == null ? void 0 : w.call(e, null);
4048
- };
4049
- }, [s]), J(() => {
4050
- m.getState().currentSessionId !== i && m.getState().setCurrentSessionId(i);
4051
- }, [i, m]), J(() => {
4052
- y && M(!1);
4053
- }, [y]), J(() => {
4054
- (S || void 0) !== O && M(!0), G(S ?? void 0);
4055
- }, [S]), J(() => {
4056
- var N;
4057
- const U = m.getState().dashboardDefinition, te = (U == null ? void 0 : U.originalSessionId) ?? null;
4058
- if (te && te !== (n ?? null) && (m.getState().updateDashboard(void 0), j.current = null), !n && te && (m.getState().updateDashboard(void 0), j.current = null), !n || !d || j.current === n) return;
4059
- if ((N = m.getState().dashboardDefinition) != null && N.id) {
4060
- j.current = n;
4061
- return;
4062
- }
4063
- let w = !1;
4064
- return (async () => {
4065
- var ne;
4066
- try {
4067
- const p = await d.getDashboardBySession(n);
4068
- if (w) return;
4069
- if ((ne = m.getState().dashboardDefinition) != null && ne.id) {
4070
- j.current = n;
4071
- return;
4072
- }
4073
- if (!p) {
4074
- console.warn("[@aintela/bi composer] no dashboard found for session", n), j.current = n;
4075
- return;
4076
- }
4077
- m.getState().loadDashboard(Ge(p)), j.current = n;
4078
- } catch (p) {
4079
- console.error("[@aintela/bi composer] failed to load dashboard for session", p);
4080
- }
4081
- })(), () => {
4082
- w = !0;
4083
- };
4084
- }, [n, d, m]);
4085
- const A = q(
4086
- async (U) => {
4087
- var N, ne, p, I;
4088
- const te = i;
4089
- let w = m.getState().dashboardDefinition;
4090
- if (w != null && w.id && w.originalSessionId && w.originalSessionId !== te && w.originalSessionId !== n && (m.getState().updateDashboard(void 0), w = m.getState().dashboardDefinition), w != null && w.id) {
4091
- U && m.getState().updateDashboard({
4092
- originalSessionId: n !== m.getState().currentSessionId ? m.getState().currentSessionId : w.originalSessionId,
4093
- ...U.name !== void 0 && { name: U.name },
4094
- ...U.cards !== void 0 && { cards: U.cards },
4095
- ...U.filters !== void 0 && { filters: U.filters }
4096
- });
4097
- return;
4098
- }
4099
- if (!te || !d) {
4100
- U ? (m.getState().updateDashboard({ name: U.name ?? "Untitled Dashboard", cards: U.cards ?? [], filters: U.filters ?? [] }), u(!0)) : d ? console.warn("[@aintela/bi composer] ensureDraft skipped — no session id yet") : (m.getState().updateDashboard({ name: "Untitled Dashboard", cards: [], filters: [] }), u(!0));
4101
- return;
4102
- }
4103
- try {
4104
- const $ = !U && w && ((((N = w.cards) == null ? void 0 : N.length) ?? 0) > 0 || (((ne = w.filters) == null ? void 0 : ne.length) ?? 0) > 0) ? { name: w.name, cards: w.cards, filters: w.filters, layoutType: w.layoutType } : void 0, R = U ?? $;
4105
- R && !R.layoutType && (R.layoutType = "Naked");
4106
- const Q = await Ft(d, te, R), ae = m.getState().dashboardDefinition;
4107
- m.getState().updateDashboard({
4108
- ...Q,
4109
- name: (R == null ? void 0 : R.name) ?? (ae == null ? void 0 : ae.name) ?? Q.name,
4110
- cards: (R == null ? void 0 : R.cards) ?? ((p = ae == null ? void 0 : ae.cards) != null && p.length ? ae.cards : Q.cards),
4111
- filters: (R == null ? void 0 : R.filters) ?? ((I = ae == null ? void 0 : ae.filters) != null && I.length ? ae.filters : Q.filters)
4112
- }), u(!0);
4113
- } catch ($) {
4114
- console.error("[@aintela/bi composer] createDraft failed", $);
4115
- }
4116
- },
4117
- [d, i, n, u, m]
4118
- ), v = q(() => void A(), [A]), B = q(async (U) => {
4119
- var te;
4120
- await A(), await ((te = e.onBeforeSend) == null ? void 0 : te.call(e, U));
4121
- }, [A, e.onBeforeSend]), D = q((U) => {
4122
- if (U.cells.length === 0) {
4123
- a();
4124
- return;
4125
- }
4126
- A({ name: U.name, cards: oi(U), filters: [] });
4127
- }, [A, a]), T = Hr(), P = T ? ti : Zn, V = T ? ni : Qn, K = T ? ii : ei, Z = q(
4128
- (U, te) => /* @__PURE__ */ t(pe.div, { variants: P, initial: "hidden", animate: "visible", exit: "hidden", children: U }, te),
4129
- [P]
4130
- ), re = /* @__PURE__ */ r(() => /* @__PURE__ */ t(pe.div, { layoutId: Ua, transition: K, style: { display: "flex", flexDirection: "column" }, children: /* @__PURE__ */ t(
4131
- pi,
4132
- {
4133
- onCreateSketch: v,
4134
- onBeforeSend: B,
4135
- sketchExpanded: b,
4136
- onSketchExpandedChange: u,
4137
- seedDraft: x,
4138
- zoomLevel: W ? 0.8 : 0.95,
4139
- compact: o !== "empty",
4140
- bottomSlot: o === "empty" ? e.progressStrip : void 0,
4141
- datasetControls: e.datasetControls,
4142
- renderDescription: e.renderDescription
4143
- }
4144
- ) }), "renderPromptForBranch");
4145
- return /* @__PURE__ */ t(lt, { mode: "popLayout", initial: !1, children: o === "empty" ? /* @__PURE__ */ t(pe.div, { initial: { opacity: 1 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.2, ease: "easeOut" }, style: { flex: 1, minHeight: 0, display: "flex", flexDirection: "column" }, children: /* @__PURE__ */ t(
4146
- jt,
4147
- {
4148
- onDraftPromptChange: g,
4149
- onApplyTemplate: D,
4150
- composerSlot: re(),
4151
- ambientWrapper: Z,
4152
- recentSessions: l,
4153
- onSelectSession: e.onSelectSession,
4154
- onSearchAllSessions: e.onSearchAllSessions,
4155
- suggestions: e.suggestions,
4156
- templates: e.templates
4157
- }
4158
- ) }, "empty-layout") : /* @__PURE__ */ t(pe.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.2, ease: "easeOut" }, style: { minHeight: 0, width: "100%", height: "100%", display: "flex", background: c.palette.background.default }, children: /* @__PURE__ */ f(Kt, { direction: "row", sx: { display: "inline-flex", width: "100%", height: "100%", flexWrap: "nowrap" }, children: [
4159
- /* @__PURE__ */ f(
4160
- Kt,
4161
- {
4162
- sx: {
4163
- minWidth: "20%",
4164
- width: W ? e.chatColumnWidthWithDashboard ?? "80%" : "100%",
4165
- minHeight: 0,
4166
- height: "100%",
4167
- display: "flex",
4168
- flexDirection: "column",
4169
- overflow: "hidden",
4170
- '& [data-message-role="user"]': { backgroundColor: `${h.hover} !important`, border: `1px solid ${h.borderSoft} !important`, borderRadius: "12px !important" },
4171
- '& [data-message-role="user"], & [data-message-role="user"] span, & [data-message-role="user"] p': { fontSize: "12.5px", lineHeight: 1.55 }
4172
- },
4173
- children: [
4174
- /* @__PURE__ */ t(C, { className: "bi-composer-chat-pane", sx: { minHeight: 0, width: "100%", flex: 5, overflow: "hidden", display: "flex", flexDirection: "column" }, children: e.chatPane }),
4175
- /* @__PURE__ */ t(pe.div, { variants: V, initial: "hidden", animate: "visible", exit: "hidden", style: { width: "100%", flex: 1 }, children: /* @__PURE__ */ t(C, { sx: { backgroundColor: c.palette.background.default, flex: 1 }, children: re() }) })
4176
- ]
4177
- }
4178
- ),
4179
- /* @__PURE__ */ t(si, { width: e.sidePanelWidth ?? "70%", defaultCollapsed: !_, onCollapseChange: z }),
4180
- (he = e.renderProgressPanel) == null ? void 0 : he.call(e, { hasDashboard: W, dashboardCollapsed: F, turnOpen: y })
4181
- ] }) }, "execution-layout") });
4182
- }, "ComposerInner"), gi = /* @__PURE__ */ r((e) => {
4183
- const i = ye(), n = je(), o = ie(null);
4184
- J(() => {
4185
- const z = o.current;
4186
- if (!z || typeof ResizeObserver > "u") return;
4187
- const _ = /* @__PURE__ */ r(() => {
4188
- const W = z.getBoundingClientRect();
4189
- i.getState().setViewport({ width: W.width, height: W.height });
4190
- }, "publish");
4191
- _();
4192
- const M = new ResizeObserver(_);
4193
- return M.observe(z), () => M.disconnect();
4194
- }, [i]);
4195
- const [a, l] = H([]);
4196
- J(() => {
4197
- if (e.recentSessions || !n) return;
4198
- let z = !1;
4199
- return (async () => {
4200
- try {
4201
- const _ = await n.listDashboards();
4202
- if (z) return;
4203
- const M = _.filter((W) => !!W.originalSessionId).map((W) => {
4204
- var A;
4205
- const j = W.updatedAt ? W.updatedAt instanceof Date ? W.updatedAt.getTime() : Date.parse(String(W.updatedAt)) : 0;
4206
- return { sessionId: W.originalSessionId, name: W.name || "Dashboard", cardCount: ((A = W.cards) == null ? void 0 : A.length) ?? 0, updatedAt: Number.isFinite(j) ? j : 0 };
4207
- });
4208
- M.sort((W, j) => (j.updatedAt ?? 0) - (W.updatedAt ?? 0)), l(M.slice(0, Ya));
4209
- } catch (_) {
4210
- console.error("[@aintela/bi composer] failed to list dashboards", _);
4211
- }
4212
- })(), () => {
4213
- z = !0;
4214
- };
4215
- }, [n, e.recentSessions, e.routeSessionId]);
4216
- const c = e.recentSessions ?? a, h = Y((z) => z.turnOpen), m = Y((z) => z.hasCompletedOnce), d = Y((z) => z.producedDashboardId), S = Y((z) => {
4217
- var _;
4218
- return !!((_ = z.dashboardDefinition) != null && _.jsFileName);
4219
- }), s = Y((z) => {
4220
- var _;
4221
- return ((_ = z.dashboardDefinition) == null ? void 0 : _.id) ?? null;
4222
- }), y = Y((z) => {
4223
- var _, M;
4224
- return ((M = (_ = z.dashboardDefinition) == null ? void 0 : _.cards) == null ? void 0 : M.length) ?? 0;
4225
- }), b = Y((z) => {
4226
- var _, M;
4227
- return ((M = (_ = z.dashboardDefinition) == null ? void 0 : _.filters) == null ? void 0 : M.length) ?? 0;
4228
- }), u = ie({ id: s, cards: y, filters: b, firstTime: !0 });
4229
- J(() => {
4230
- if (h) return;
4231
- const z = u.current, _ = !z.id && !!s, M = z.cards === 0 && y > 0, W = z.filters === 0 && b > 0, j = z.firstTime;
4232
- u.current = { id: s, cards: y, filters: b, firstTime: !1 }, !j && (_ || M || W) && i.getState().setSketchExpanded(!0);
4233
- }, [s, y, b, h, i]);
4234
- const x = Y((z) => z.guideSteps), g = Y((z) => z.guideOptions), O = Y((z) => z.dismissGuide);
4235
- J(() => {
4236
- x && x.length > 0 && An(x) && i.getState().setSketchExpanded(!0);
4237
- }, [x, i]);
4238
- const G = me(() => h ? "generating" : !m && !e.routeSessionId ? "empty" : d || S ? "done-dashboard" : "done-text", [h, m, d, S, e.routeSessionId]), F = q(() => {
4239
- i.getState().setHasCompletedOnce(!0), i.getState().setSketchExpanded(!1);
4240
- }, [i]);
4241
- return /* @__PURE__ */ f(Ce, { children: [
4242
- /* @__PURE__ */ t("div", { className: "bi-composer-root", ref: o, style: { display: "inherit", height: "100%" }, children: /* @__PURE__ */ t(Ka, { ...e, composerMode: G, onForceExecutionMode: F, recentSessionsResolved: c }) }),
4243
- x && x.length > 0 && /* @__PURE__ */ t(fi, { steps: x, overlayOpacity: g == null ? void 0 : g.overlayOpacity, allowInteraction: g == null ? void 0 : g.allowInteraction, onComplete: g == null ? void 0 : g.onComplete, onDismiss: O, resolveElement: e.resolveGuideElement ?? Rt })
4244
- ] });
4245
- }, "ComposerView");
4246
- gi.displayName = "ComposerView";
4247
- const Pt = 20, qa = 60;
4248
- function Ja(e) {
4249
- for (const i of e.artifactData ?? [])
4250
- if ((i == null ? void 0 : i.type) === "Dashboard" && i.id) return i.id;
4251
- return null;
4252
- }
4253
- r(Ja, "detectProducedDashboardId");
4254
- function xi() {
4255
- const e = ye(), i = Hn(), n = q((h) => {
4256
- var G, F, z, _;
4257
- const { viewport: m, dashboardDefinition: d } = e.getState(), S = Math.round(m.height), s = m.width === 0 ? 0 : Math.round(m.width / 2 - qa), y = s, b = Math.round(1080 * 0.9), u = Math.round(b / 12), x = ((d == null ? void 0 : d.cards) ?? []).map((M) => ({
4258
- ...M,
4259
- widthPx: typeof M.w == "number" && u > 0 ? Math.round(u * M.w * 0.95) : void 0,
4260
- heightPx: typeof M.h == "number" ? Math.round(M.h * Pt * 0.95) : void 0
4261
- }));
4262
- let g;
4263
- try {
4264
- const M = JSON.parse(h), W = (((F = (G = M == null ? void 0 : M.userPrompt) == null ? void 0 : G.trim()) == null ? void 0 : F.length) ?? 0) > 0 ? M.userPrompt : void 0, j = ((z = M == null ? void 0 : M.cards) == null ? void 0 : z.length) ?? 0, A = ((_ = M == null ? void 0 : M.filters) == null ? void 0 : _.length) ?? 0, v = j > 0 ? `${j} card(s) ` : "", B = A > 0 ? ` - ${A} filter(s) ` : "";
4265
- g = W ?? `${v}${B}(${(M == null ? void 0 : M.layoutType) ?? ""})`;
4266
- } catch {
4267
- g = void 0;
4268
- }
4269
- const O = {
4270
- id: (d == null ? void 0 : d.id) ?? "",
4271
- name: (d == null ? void 0 : d.name) ?? "",
4272
- cards: x,
4273
- filters: (d == null ? void 0 : d.filters) ?? [],
4274
- layoutType: (d == null ? void 0 : d.layoutType) ?? "Boxed",
4275
- remarks: d == null ? void 0 : d.remarks,
4276
- userPrompt: h,
4277
- screenData: {
4278
- chatBox: { heightPx: S, widthPx: y },
4279
- dashboardPreviewBox: { heightPx: S, widthPx: s },
4280
- dashboardVisualizationBox: { heightPx: S, widthPx: b },
4281
- gridRowHeightPixelsPerUnit: Pt,
4282
- gridColumnWidthPixelsPerUnit: u,
4283
- gridColumnWidthPixelsPerUnitFullView: u
4284
- },
4285
- isDatasetParameterized: (d == null ? void 0 : d.isDatasetParameterized) ?? !1,
4286
- defaultDatasetName: d == null ? void 0 : d.defaultDatasetName,
4287
- clientSideChanges: At(d == null ? void 0 : d.clientSideChanges)
4288
- };
4289
- return d != null && d.clientSideChanges && Object.keys(d.clientSideChanges).length > 0 && e.getState().clearClientSideChanges(), { promptAsString: g ?? "", json: JSON.stringify(O) };
4290
- }, [e]), o = q(() => {
4291
- const h = e.getState();
4292
- h.setTurnOpen(!0), h.dismissGuide(), h.setHasCompletedOnce(!1), h.setProducedDashboardId(null), h.setSketchExpanded(!1);
4293
- }, [e]), a = q((h) => {
4294
- const m = e.getState();
4295
- m.setProducedDashboardId(Ja(h)), m.setHasCompletedOnce(!0), m.setTurnOpen(!1);
4296
- }, [e]), l = q((h, m) => e.getState().ingestToolEvent(h, m), [e]), c = q((h) => {
4297
- e.getState().currentSessionId !== h && e.getState().setCurrentSessionId(h);
4298
- }, [e]);
4299
- return me(() => ({ onRenderPrompt: n, onTurnOpen: o, onTurnComplete: a, ingestToolEvent: l, setSessionId: c, environment: i }), [n, o, a, l, c, i]);
4300
- }
4301
- r(xi, "useComposerChatBridge");
4302
- const Xa = /* @__PURE__ */ r(() => {
4303
- const e = xi(), i = $r((o) => {
4304
- var a;
4305
- return ((a = o.session) == null ? void 0 : a.id) ?? null;
4306
- }), { eventBusService: n } = _r();
4307
- return J(() => {
4308
- e.setSessionId(i);
4309
- }, [i, e]), J(() => {
4310
- const o = n;
4311
- if (!(o != null && o.gatewayOnToolEvent)) return;
4312
- const a = /* @__PURE__ */ r((l, c) => e.ingestToolEvent(l, c), "handler");
4313
- return o.gatewayOnToolEvent(a), () => {
4314
- var l;
4315
- return (l = o.gatewayOffToolEvent) == null ? void 0 : l.call(o, a);
4316
- };
4317
- }, [n, e]), null;
4318
- }, "ComposerChatBinding"), Za = "0 0 40%", yi = /* @__PURE__ */ r(() => {
4319
- const e = fe(), i = ve(e), n = Y((x) => {
4320
- var g;
4321
- return ((g = x.dashboardDefinition) == null ? void 0 : g.jsFileName) ?? null;
4322
- }), o = Y((x) => {
4323
- var g;
4324
- return ((g = x.dashboardDefinition) == null ? void 0 : g.id) ?? null;
4325
- }), a = Y((x) => {
4326
- var g;
4327
- return ((g = x.dashboardDefinition) == null ? void 0 : g.name) || "Dashboard";
4328
- }), l = Y((x) => {
4329
- var g, O;
4330
- return ((O = (g = x.dashboardDefinition) == null ? void 0 : g.cards) == null ? void 0 : O.length) ?? 0;
4331
- }), [c, h] = H("expanded"), [m, d] = H(!1), S = !!n && !!o, [s, y] = H(!1);
4332
- if (J(() => {
4333
- if (!S) {
4334
- y(!1);
4335
- return;
4336
- }
4337
- y(!0);
4338
- const x = window.setTimeout(() => y(!1), 2500);
4339
- return () => window.clearTimeout(x);
4340
- }, [S]), !S || !o) return null;
4341
- const b = { color: e.palette.text.secondary, p: 0.5, "&:hover": { color: e.palette.text.primary, backgroundColor: i.hover } }, u = /* @__PURE__ */ f(Ce, { children: [
4342
- /* @__PURE__ */ t(se, { sx: { color: e.palette.text.disabled, fontSize: 11 }, children: "·" }),
4343
- /* @__PURE__ */ f(se, { sx: { fontFamily: i.fontFamilyMono, color: e.palette.text.secondary, fontSize: 11 }, children: [
4344
- l,
4345
- " ",
4346
- l === 1 ? "card" : "cards"
4347
- ] })
4348
- ] });
4349
- return c === "minimized" ? /* @__PURE__ */ t(C, { sx: { flexShrink: 0, px: 1.5, py: 1, borderBottom: `1px solid ${i.borderSoft}`, backgroundColor: e.palette.background.paper }, children: /* @__PURE__ */ f(
4350
- C,
4351
- {
4352
- role: "button",
4353
- tabIndex: 0,
4354
- onClick: /* @__PURE__ */ r(() => h("expanded"), "onClick"),
4355
- onKeyDown: /* @__PURE__ */ r((x) => {
4356
- x.key === "Enter" && h("expanded");
4357
- }, "onKeyDown"),
4358
- sx: {
4359
- display: "inline-flex",
4360
- alignItems: "center",
4361
- gap: 0.75,
4362
- px: 1.25,
4363
- py: 0.5,
4364
- borderRadius: 999,
4365
- cursor: "pointer",
4366
- backgroundColor: i.raised,
4367
- border: `1px solid ${e.palette.divider}`,
4368
- color: e.palette.text.primary,
4369
- fontFamily: e.typography.fontFamily,
4370
- fontSize: 11.5,
4371
- transition: "background-color .12s, border-color .12s",
4372
- "&:hover": { backgroundColor: i.hover, borderColor: e.palette.primary.main }
4373
- },
4374
- children: [
4375
- /* @__PURE__ */ t(C, { sx: { color: e.palette.primary.main, display: "inline-flex" }, children: /* @__PURE__ */ t(ze, { size: 13 }) }),
4376
- /* @__PURE__ */ t(C, { component: "span", sx: { fontWeight: 500 }, children: a }),
4377
- u,
4378
- /* @__PURE__ */ t(C, { component: "span", sx: { color: e.palette.text.disabled, mx: 0.25 }, children: "|" }),
4379
- /* @__PURE__ */ t(C, { component: "span", sx: { color: e.palette.primary.main, fontWeight: 500 }, children: "expandir" })
4380
- ]
4381
- }
4382
- ) }) : /* @__PURE__ */ f(Ce, { children: [
4383
- /* @__PURE__ */ t(pe.div, { initial: { opacity: 0, y: -8, scaleY: 0.96 }, animate: { opacity: 1, y: 0, scaleY: 1 }, transition: { duration: 0.32, ease: [0.22, 0.8, 0.32, 1] }, style: { transformOrigin: "top center", flex: Za, minHeight: 200, display: "flex", flexDirection: "column" }, children: /* @__PURE__ */ f(C, { sx: { flex: 1, minHeight: 0, display: "flex", flexDirection: "column", borderBottom: `1px solid ${i.borderSoft}`, backgroundColor: e.palette.background.default, overflow: "hidden", position: "relative" }, children: [
4384
- /* @__PURE__ */ f(C, { sx: { display: "flex", alignItems: "center", gap: 1, px: 1.5, py: 0.875, borderBottom: `1px solid ${i.borderSoft}`, backgroundColor: e.palette.background.paper, flexShrink: 0 }, children: [
4385
- /* @__PURE__ */ t(C, { sx: { color: e.palette.primary.main, display: "inline-flex" }, children: /* @__PURE__ */ t(ze, { size: 14 }) }),
4386
- /* @__PURE__ */ t(se, { sx: { color: e.palette.text.primary, fontWeight: 500, fontSize: 12 }, children: a }),
4387
- u,
4388
- /* @__PURE__ */ t(C, { sx: { flex: 1 } }),
4389
- /* @__PURE__ */ t(ge, { title: "Tela cheia", placement: "top", children: /* @__PURE__ */ t(we, { size: "small", onClick: /* @__PURE__ */ r(() => d(!0), "onClick"), sx: b, "aria-label": "Abrir em tela cheia", children: /* @__PURE__ */ t(Ve, { size: 13 }) }) }),
4390
- /* @__PURE__ */ t(ge, { title: "Minimizar", placement: "top", children: /* @__PURE__ */ t(we, { size: "small", onClick: /* @__PURE__ */ r(() => h("minimized"), "onClick"), sx: { ...b, transform: "rotate(180deg)" }, "aria-label": "Minimizar", children: /* @__PURE__ */ t(Rr, { size: 13 }) }) })
4391
- ] }),
4392
- /* @__PURE__ */ t(lt, { children: s && /* @__PURE__ */ f(
4393
- pe.div,
4394
- {
4395
- initial: { opacity: 0, y: -6 },
4396
- animate: { opacity: 1, y: 0 },
4397
- exit: { opacity: 0, y: -4 },
4398
- transition: { duration: 0.25, ease: "easeOut" },
4399
- style: {
4400
- position: "absolute",
4401
- top: 8,
4402
- right: 12,
4403
- zIndex: 2,
4404
- pointerEvents: "none",
4405
- display: "inline-flex",
4406
- alignItems: "center",
4407
- gap: 6,
4408
- background: e.palette.primary.main,
4409
- color: e.palette.primary.contrastText,
4410
- fontFamily: e.typography.fontFamily,
4411
- fontSize: 11,
4412
- fontWeight: 600,
4413
- padding: "4px 10px 4px 8px",
4414
- borderRadius: 999,
4415
- boxShadow: `0 4px 14px ${Te(e.palette.primary.main, 0.35)}`
4416
- },
4417
- children: [
4418
- /* @__PURE__ */ t(ze, { size: 11 }),
4419
- "Dashboard pronto"
4420
- ]
4421
- }
4422
- ) }),
4423
- /* @__PURE__ */ t(C, { sx: { flex: 1, minHeight: 0, overflow: "auto" }, children: /* @__PURE__ */ t(_e, { dashboardId: o }) })
4424
- ] }) }),
4425
- /* @__PURE__ */ f(wn, { open: m, onClose: /* @__PURE__ */ r(() => d(!1), "onClose"), maxWidth: !1, fullScreen: !0, slotProps: { paper: { sx: { backgroundColor: e.palette.background.default, backgroundImage: "none", color: e.palette.text.primary } } }, children: [
4426
- /* @__PURE__ */ f(C, { sx: { display: "flex", alignItems: "center", gap: 1, px: 2, py: 1.25, borderBottom: `1px solid ${e.palette.divider}`, backgroundColor: e.palette.background.paper, flexShrink: 0 }, children: [
4427
- /* @__PURE__ */ t(C, { sx: { color: e.palette.primary.main, display: "inline-flex" }, children: /* @__PURE__ */ t(ze, { size: 16 }) }),
4428
- /* @__PURE__ */ t(se, { sx: { color: e.palette.text.primary, fontWeight: 500, fontSize: 13.5 }, children: a }),
4429
- u,
4430
- /* @__PURE__ */ t(C, { sx: { flex: 1 } }),
4431
- /* @__PURE__ */ t(ge, { title: "Fechar", placement: "left", children: /* @__PURE__ */ t(we, { size: "small", onClick: /* @__PURE__ */ r(() => d(!1), "onClick"), sx: { ...b, p: 0.75 }, "aria-label": "Fechar", children: /* @__PURE__ */ t(Ot, { size: 14 }) }) })
4432
- ] }),
4433
- /* @__PURE__ */ t(C, { sx: { flex: 1, minHeight: 0, overflow: "auto" }, children: /* @__PURE__ */ t(_e, { dashboardId: o }) })
4434
- ] })
4435
- ] });
4436
- }, "DashboardPinInner");
4437
- yi.displayName = "DashboardPin";
4438
- const Qa = We.memo(yi);
4439
- export {
4440
- Yr as $,
4441
- zn as A,
4442
- Ea as B,
4443
- ke as C,
4444
- st as D,
4445
- rt as E,
4446
- $t as F,
4447
- Pt as G,
4448
- Ee as H,
4449
- jn as I,
4450
- _a as J,
4451
- _e as K,
4452
- Yn as L,
4453
- fi as M,
4454
- pa as N,
4455
- ma as O,
4456
- On as P,
4457
- Ue as Q,
4458
- qn as R,
4459
- Wn as S,
4460
- ri as T,
4461
- Qn as U,
4462
- Rn as V,
4463
- ni as W,
4464
- Zn as X,
4465
- ti as Y,
4466
- Aa as Z,
4467
- za as _,
4468
- Bn as a,
4469
- Go as a0,
4470
- ei as a1,
4471
- ii as a2,
4472
- Ln as a3,
4473
- Ft as a4,
4474
- Ma as a5,
4475
- Oa as a6,
4476
- Un as a7,
4477
- mi as a8,
4478
- Wt as a9,
4479
- Mn as aA,
4480
- ai as aB,
4481
- _n as aC,
4482
- Pn as aD,
4483
- ct as aE,
4484
- Re as aF,
4485
- Y as aG,
4486
- xi as aH,
4487
- Hn as aI,
4488
- ye as aJ,
4489
- Xr as aK,
4490
- Ht as aL,
4491
- $a as aM,
4492
- Tt as aN,
4493
- Zr as aa,
4494
- ra as ab,
4495
- Ge as ac,
4496
- ta as ad,
4497
- Kn as ae,
4498
- Bo as af,
4499
- dt as ag,
4500
- An as ah,
4501
- ia as ai,
4502
- oa as aj,
4503
- _t as ak,
4504
- Tn as al,
4505
- At as am,
4506
- aa as an,
4507
- Dn as ao,
4508
- En as ap,
4509
- Me as aq,
4510
- Mt as ar,
4511
- ve as as,
4512
- at,
4513
- Rt as au,
4514
- $e as av,
4515
- oi as aw,
4516
- Ho as ax,
4517
- jr as ay,
4518
- Vr as az,
4519
- Pe as b,
4520
- Gn as c,
4521
- ua as d,
4522
- Bt as e,
4523
- Qr as f,
4524
- $n as g,
4525
- Xa as h,
4526
- Jr as i,
4527
- gi as j,
4528
- Fn as k,
4529
- Jn as l,
4530
- Xn as m,
4531
- ht as n,
4532
- Qa as o,
4533
- si as p,
4534
- Ta as q,
4535
- pi as r,
4536
- jt as s,
4537
- Pa as t,
4538
- ut as u,
4539
- Ia as v,
4540
- ka as w,
4541
- Vn as x,
4542
- Gt as y,
4543
- Nn as z
4544
- };
4545
- //# sourceMappingURL=index-C6JQ6770.js.map