drizzle-cube 0.4.11 → 0.4.14

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 (116) hide show
  1. package/README.md +1 -0
  2. package/dist/adapters/express/index.cjs +6 -6
  3. package/dist/adapters/express/index.js +73 -72
  4. package/dist/adapters/fastify/index.cjs +5 -5
  5. package/dist/adapters/fastify/index.js +110 -109
  6. package/dist/adapters/{handler-CQkIwtxp.js → handler-DZnCbydH.js} +719 -272
  7. package/dist/adapters/handler-ZDYlokiM.cjs +25 -0
  8. package/dist/adapters/hono/index.cjs +6 -6
  9. package/dist/adapters/hono/index.js +121 -120
  10. package/dist/adapters/nextjs/index.cjs +5 -5
  11. package/dist/adapters/nextjs/index.js +92 -91
  12. package/dist/client/charts.js +67 -59
  13. package/dist/client/charts.js.map +1 -1
  14. package/dist/client/chunks/{RetentionCombinedChart-CEI8KQ3t.js → RetentionCombinedChart-CLq89aOJ.js} +2 -2
  15. package/dist/client/chunks/{RetentionCombinedChart-CEI8KQ3t.js.map → RetentionCombinedChart-CLq89aOJ.js.map} +1 -1
  16. package/dist/client/chunks/{analysis-builder-BMmWeFPr.js → analysis-builder-C5e52Z3p.js} +419 -411
  17. package/dist/client/chunks/analysis-builder-C5e52Z3p.js.map +1 -0
  18. package/dist/client/chunks/{analysis-builder-shared-D56zYeV0.js → analysis-builder-shared-EnM-8plh.js} +2 -2
  19. package/dist/client/chunks/{analysis-builder-shared-D56zYeV0.js.map → analysis-builder-shared-EnM-8plh.js.map} +1 -1
  20. package/dist/client/chunks/{chart-activity-grid-CE7xGFQo.js → chart-activity-grid-CPGcTSuh.js} +2 -2
  21. package/dist/client/chunks/{chart-activity-grid-CE7xGFQo.js.map → chart-activity-grid-CPGcTSuh.js.map} +1 -1
  22. package/dist/client/chunks/{chart-area-BJAgusst.js → chart-area-ByJQ7NZd.js} +3 -3
  23. package/dist/client/chunks/{chart-area-BJAgusst.js.map → chart-area-ByJQ7NZd.js.map} +1 -1
  24. package/dist/client/chunks/{chart-bar-Blypx8O4.js → chart-bar-dj14frMt.js} +2 -2
  25. package/dist/client/chunks/{chart-bar-Blypx8O4.js.map → chart-bar-dj14frMt.js.map} +1 -1
  26. package/dist/client/chunks/chart-box-plot-ZatBpatq.js +322 -0
  27. package/dist/client/chunks/chart-box-plot-ZatBpatq.js.map +1 -0
  28. package/dist/client/chunks/{chart-bubble-Bf42A1-B.js → chart-bubble-CemotLx-.js} +2 -2
  29. package/dist/client/chunks/{chart-bubble-Bf42A1-B.js.map → chart-bubble-CemotLx-.js.map} +1 -1
  30. package/dist/client/chunks/chart-candlestick-BIR4uGGt.js +269 -0
  31. package/dist/client/chunks/chart-candlestick-BIR4uGGt.js.map +1 -0
  32. package/dist/client/chunks/chart-config-box-plot-D_E_SSc2.js +38 -0
  33. package/dist/client/chunks/chart-config-box-plot-D_E_SSc2.js.map +1 -0
  34. package/dist/client/chunks/chart-config-candlestick-CRCpD43-.js +70 -0
  35. package/dist/client/chunks/chart-config-candlestick-CRCpD43-.js.map +1 -0
  36. package/dist/client/chunks/chart-config-gauge-CQx9w3d4.js +64 -0
  37. package/dist/client/chunks/chart-config-gauge-CQx9w3d4.js.map +1 -0
  38. package/dist/client/chunks/chart-config-measure-profile-ZYaMrtws.js +70 -0
  39. package/dist/client/chunks/chart-config-measure-profile-ZYaMrtws.js.map +1 -0
  40. package/dist/client/chunks/chart-config-waterfall-DTyXV_fo.js +60 -0
  41. package/dist/client/chunks/chart-config-waterfall-DTyXV_fo.js.map +1 -0
  42. package/dist/client/chunks/{chart-data-table-Ba_6tuJw.js → chart-data-table-D5G8nMnb.js} +2 -2
  43. package/dist/client/chunks/{chart-data-table-Ba_6tuJw.js.map → chart-data-table-D5G8nMnb.js.map} +1 -1
  44. package/dist/client/chunks/{chart-funnel-C9kenCpp.js → chart-funnel-dofnhD24.js} +2 -2
  45. package/dist/client/chunks/{chart-funnel-C9kenCpp.js.map → chart-funnel-dofnhD24.js.map} +1 -1
  46. package/dist/client/chunks/chart-gauge-CKJJ8m3b.js +374 -0
  47. package/dist/client/chunks/chart-gauge-CKJJ8m3b.js.map +1 -0
  48. package/dist/client/chunks/{chart-heat-map-CYGemyPB.js → chart-heat-map-BVuPUKHT.js} +2 -2
  49. package/dist/client/chunks/{chart-heat-map-CYGemyPB.js.map → chart-heat-map-BVuPUKHT.js.map} +1 -1
  50. package/dist/client/chunks/{chart-kpi-delta-D9XJoKuA.js → chart-kpi-delta-Dgg2eYRl.js} +3 -3
  51. package/dist/client/chunks/{chart-kpi-delta-D9XJoKuA.js.map → chart-kpi-delta-Dgg2eYRl.js.map} +1 -1
  52. package/dist/client/chunks/{chart-kpi-number-C29Vj2g8.js → chart-kpi-number-DkoO99c1.js} +2 -2
  53. package/dist/client/chunks/{chart-kpi-number-C29Vj2g8.js.map → chart-kpi-number-DkoO99c1.js.map} +1 -1
  54. package/dist/client/chunks/{chart-kpi-text-CgjjrurK.js → chart-kpi-text-1O6_lmz7.js} +3 -3
  55. package/dist/client/chunks/{chart-kpi-text-CgjjrurK.js.map → chart-kpi-text-1O6_lmz7.js.map} +1 -1
  56. package/dist/client/chunks/{chart-line-zi6olZet.js → chart-line-DzyZkugh.js} +3 -3
  57. package/dist/client/chunks/{chart-line-zi6olZet.js.map → chart-line-DzyZkugh.js.map} +1 -1
  58. package/dist/client/chunks/chart-measure-profile-C2IkBG3V.js +114 -0
  59. package/dist/client/chunks/chart-measure-profile-C2IkBG3V.js.map +1 -0
  60. package/dist/client/chunks/{chart-pie-C4SuxKSN.js → chart-pie-akbfRfb9.js} +2 -2
  61. package/dist/client/chunks/{chart-pie-C4SuxKSN.js.map → chart-pie-akbfRfb9.js.map} +1 -1
  62. package/dist/client/chunks/{chart-radar-BW3Z_-Ly.js → chart-radar-BaN-Kjww.js} +2 -2
  63. package/dist/client/chunks/{chart-radar-BW3Z_-Ly.js.map → chart-radar-BaN-Kjww.js.map} +1 -1
  64. package/dist/client/chunks/{chart-radial-bar-0Fa3aeP5.js → chart-radial-bar-DpptEL3s.js} +2 -2
  65. package/dist/client/chunks/{chart-radial-bar-0Fa3aeP5.js.map → chart-radial-bar-DpptEL3s.js.map} +1 -1
  66. package/dist/client/chunks/{chart-sankey-DBghfbg1.js → chart-sankey-CG-3hHmX.js} +2 -2
  67. package/dist/client/chunks/{chart-sankey-DBghfbg1.js.map → chart-sankey-CG-3hHmX.js.map} +1 -1
  68. package/dist/client/chunks/{chart-scatter-DOVu1TNq.js → chart-scatter-l_yTVxF3.js} +2 -2
  69. package/dist/client/chunks/{chart-scatter-DOVu1TNq.js.map → chart-scatter-l_yTVxF3.js.map} +1 -1
  70. package/dist/client/chunks/{chart-sunburst-LfNthFlZ.js → chart-sunburst-KhDcKhmZ.js} +2 -2
  71. package/dist/client/chunks/{chart-sunburst-LfNthFlZ.js.map → chart-sunburst-KhDcKhmZ.js.map} +1 -1
  72. package/dist/client/chunks/{chart-tree-map-DZtQPyWX.js → chart-tree-map-CBbiaBXV.js} +2 -2
  73. package/dist/client/chunks/{chart-tree-map-DZtQPyWX.js.map → chart-tree-map-CBbiaBXV.js.map} +1 -1
  74. package/dist/client/chunks/chart-waterfall-CX3vx_lI.js +191 -0
  75. package/dist/client/chunks/chart-waterfall-CX3vx_lI.js.map +1 -0
  76. package/dist/client/chunks/{charts-core-DmGfleFz.js → charts-core-CU9u_HtL.js} +2 -1
  77. package/dist/client/chunks/charts-core-CU9u_HtL.js.map +1 -0
  78. package/dist/client/chunks/{charts-loader-CH0_S06T.js → charts-loader-AW3T1nv5.js} +58 -42
  79. package/dist/client/chunks/charts-loader-AW3T1nv5.js.map +1 -0
  80. package/dist/client/chunks/{components-ClQziOcT.js → components-BkeSy9xv.js} +4 -4
  81. package/dist/client/chunks/components-BkeSy9xv.js.map +1 -0
  82. package/dist/client/components/AgenticNotebook/AgentChatPanel.d.ts +10 -0
  83. package/dist/client/components/AgenticNotebook/ChatMessage.d.ts +2 -0
  84. package/dist/client/components/AgenticNotebook/index.d.ts +11 -1
  85. package/dist/client/components/LoadingIndicator.d.ts +2 -2
  86. package/dist/client/components/charts/BoxPlotChart.config.d.ts +1 -7
  87. package/dist/client/components/charts/CandlestickChart.config.d.ts +5 -0
  88. package/dist/client/components/charts/CandlestickChart.d.ts +4 -0
  89. package/dist/client/components/charts/GaugeChart.config.d.ts +5 -0
  90. package/dist/client/components/charts/GaugeChart.d.ts +4 -0
  91. package/dist/client/components/charts/MeasureProfileChart.config.d.ts +5 -0
  92. package/dist/client/components/charts/MeasureProfileChart.d.ts +4 -0
  93. package/dist/client/components/charts/WaterfallChart.config.d.ts +5 -0
  94. package/dist/client/components/charts/WaterfallChart.d.ts +4 -0
  95. package/dist/client/components/charts/index.d.ts +4 -0
  96. package/dist/client/components.js +1 -1
  97. package/dist/client/hooks/useAgentChat.d.ts +20 -2
  98. package/dist/client/index.js +685 -612
  99. package/dist/client/index.js.map +1 -1
  100. package/dist/client/styles.css +1 -1
  101. package/dist/client/types.d.ts +19 -1
  102. package/dist/client/utils.js +4 -4
  103. package/dist/client-bundle-stats.html +1 -1
  104. package/dist/server/index.cjs +47 -45
  105. package/dist/server/index.d.ts +37 -0
  106. package/dist/server/index.js +1745 -1298
  107. package/package.json +4 -1
  108. package/dist/adapters/handler-dnkqpznh.cjs +0 -23
  109. package/dist/client/chunks/analysis-builder-BMmWeFPr.js.map +0 -1
  110. package/dist/client/chunks/chart-box-plot-Dja4LS3O.js +0 -313
  111. package/dist/client/chunks/chart-box-plot-Dja4LS3O.js.map +0 -1
  112. package/dist/client/chunks/chart-config-box-plot-D3DA7_pr.js +0 -85
  113. package/dist/client/chunks/chart-config-box-plot-D3DA7_pr.js.map +0 -1
  114. package/dist/client/chunks/charts-core-DmGfleFz.js.map +0 -1
  115. package/dist/client/chunks/charts-loader-CH0_S06T.js.map +0 -1
  116. package/dist/client/chunks/components-ClQziOcT.js.map +0 -1
@@ -1,51 +1,52 @@
1
- import { D as J, A as H, e as G, P as X } from "./chunks/components-ClQziOcT.js";
2
- import { i as He, a as Ge, C as Xe, h as Ye, g as Ze, b as et, j as tt, f as st, d as at, M as rt, c as ct, n as ot, T as nt, R as dt, Q as it, O as lt, S as ut, V as mt, I as pt, H as ht, K as ft, W as gt, G as bt, J as yt, X as xt, L as vt, N as Ct, U as kt, Y as Nt, Z as wt, z as St, q as At, x as Dt, t as Tt, s as Mt, w as It, p as Et, v as Bt, o as Lt, r as Rt, y as Pt, u as Qt, k as Ft, l as _t, m as Vt, F as jt, E as qt, B as Ut } from "./chunks/components-ClQziOcT.js";
3
- import { jsx as a, jsxs as b, Fragment as Y } from "react/jsx-runtime";
4
- import R, { useRef as N, createContext as Z, useContext as ee, useState as F, useCallback as p, useEffect as Q } from "react";
5
- import { c as te, d as se, e as ae, s as re, f as K } from "./chunks/vendor-AVsJ2ni0.js";
6
- import { a as _ } from "./chunks/icons-DAeqv1iX.js";
7
- import { D as Ot, h as $t, i as zt, b as Wt, e as Jt, f as Ht, g as Gt, r as Xt, c as Yt, s as Zt } from "./chunks/icons-DAeqv1iX.js";
8
- import { Q as ce } from "./chunks/chart-markdown-Du4Z2iqK.js";
9
- import { f as oe } from "./chunks/providers-CgxXm6Ll.js";
10
- import { h as ts, a as ss, S as as, e as rs, d as cs, i as os, b as ns, g as ds, u as is, j as ls, c as us, w as ms } from "./chunks/providers-CgxXm6Ll.js";
11
- import { L as hs, u as fs } from "./chunks/charts-core-DmGfleFz.js";
12
- import { L as bs, g as ys, c as xs, b as vs, i as Cs, p as ks, a as Ns } from "./chunks/charts-loader-CH0_S06T.js";
13
- import { E as Ss, a as As, p as Ds, q as Ts, m as Ms, l as Is, r as Es, C as Bs, D as Ls, o as Rs, B as Ps, n as Qs, w as Fs, t as _s, d as Vs, f as js, s as qs, e as Us, i as Ks, c as Os, h as $s, g as zs, u as Ws, b as Js, y as Hs, A as Gs, x as Xs, k as Ys, v as Zs, z as ea, j as ta } from "./chunks/analysis-builder-shared-D56zYeV0.js";
14
- import { u as aa } from "./chunks/chart-bubble-Bf42A1-B.js";
15
- import { c as ca, f as oa } from "./chunks/index-CApFCBF9.js";
16
- import { e as da, c as ia, l as la, h as ua, k as ma, j as pa, i as ha, m as fa, g as ga, f as ba, u as ya, u as xa, d as va, b as Ca, a as ka, v as Na } from "./chunks/useDirtyStateTracking-Cu1HSjmo.js";
17
- import { c as Sa, b as Aa, f as Da, g as Ta, a as Ma, i as Ia, t as Ea } from "./chunks/funnel-utils-CyonoNeC.js";
18
- import { T as La, c as Ra, g as Pa, a as Qa, i as Fa, r as _a, s as Va, b as ja, w as qa } from "./chunks/theme-Dp3hFed1.js";
19
- import { createExplainQueryKey as Ka, useDryRunQueries as Oa, useDryRunQuery as $a, useExplainAI as za, useExplainQuery as Wa, useMultiDryRunQueries as Ja } from "./hooks.js";
20
- import { i as Ga, a as Xa } from "./chunks/flow-utils-CjQZG5qq.js";
21
- import { h as Za } from "./chunks/syntaxHighlighting-BQfjio-i.js";
22
- const $ = () => ({
1
+ import { D as re, A as ae, e as ce, P as ne } from "./chunks/components-BkeSy9xv.js";
2
+ import { i as ot, a as dt, C as it, h as lt, g as ut, b as mt, j as pt, f as ht, d as ft, M as gt, c as bt, n as yt, T as xt, R as vt, Q as Ct, O as kt, S as Nt, V as wt, I as St, H as Dt, K as At, W as Tt, G as Mt, J as It, X as Et, L as Rt, N as Bt, U as Lt, Y as Pt, Z as Qt, z as Ft, q as _t, x as Vt, t as jt, s as qt, w as Ut, p as Kt, v as Ot, o as $t, r as zt, y as Wt, u as Jt, k as Gt, l as Ht, m as Xt, F as Yt, E as Zt, B as es } from "./chunks/components-BkeSy9xv.js";
3
+ import { jsx as r, jsxs as x, Fragment as oe } from "react/jsx-runtime";
4
+ import Q, { useRef as C, createContext as de, useContext as ie, useState as j, useCallback as g, useEffect as P } from "react";
5
+ import { c as le, d as ue, e as me, s as pe, f as O } from "./chunks/vendor-AVsJ2ni0.js";
6
+ import { a as q } from "./chunks/icons-DAeqv1iX.js";
7
+ import { D as ss, h as rs, i as as, b as cs, e as ns, f as os, g as ds, r as is, c as ls, s as us } from "./chunks/icons-DAeqv1iX.js";
8
+ import { Q as he } from "./chunks/chart-markdown-Du4Z2iqK.js";
9
+ import { f as fe } from "./chunks/providers-CgxXm6Ll.js";
10
+ import { h as ps, a as hs, S as fs, e as gs, d as bs, i as ys, b as xs, g as vs, u as Cs, j as ks, c as Ns, w as ws } from "./chunks/providers-CgxXm6Ll.js";
11
+ import { L as ge } from "./chunks/charts-core-CU9u_HtL.js";
12
+ import { u as Ds } from "./chunks/charts-core-CU9u_HtL.js";
13
+ import { L as Ts, g as Ms, c as Is, b as Es, i as Rs, p as Bs, a as Ls } from "./chunks/charts-loader-AW3T1nv5.js";
14
+ import { E as Qs, a as Fs, p as _s, q as Vs, m as js, l as qs, r as Us, C as Ks, D as Os, o as $s, B as zs, n as Ws, w as Js, t as Gs, d as Hs, f as Xs, s as Ys, e as Zs, i as er, c as tr, h as sr, g as rr, u as ar, b as cr, y as nr, A as or, x as dr, k as ir, v as lr, z as ur, j as mr } from "./chunks/analysis-builder-shared-EnM-8plh.js";
15
+ import { u as hr } from "./chunks/chart-bubble-CemotLx-.js";
16
+ import { c as gr, f as br } from "./chunks/index-CApFCBF9.js";
17
+ import { e as xr, c as vr, l as Cr, h as kr, k as Nr, j as wr, i as Sr, m as Dr, g as Ar, f as Tr, u as Mr, u as Ir, d as Er, b as Rr, a as Br, v as Lr } from "./chunks/useDirtyStateTracking-Cu1HSjmo.js";
18
+ import { c as Qr, b as Fr, f as _r, g as Vr, a as jr, i as qr, t as Ur } from "./chunks/funnel-utils-CyonoNeC.js";
19
+ import { T as Or, c as $r, g as zr, a as Wr, i as Jr, r as Gr, s as Hr, b as Xr, w as Yr } from "./chunks/theme-Dp3hFed1.js";
20
+ import { createExplainQueryKey as ea, useDryRunQueries as ta, useDryRunQuery as sa, useExplainAI as ra, useExplainQuery as aa, useMultiDryRunQueries as ca } from "./hooks.js";
21
+ import { i as oa, a as da } from "./chunks/flow-utils-CjQZG5qq.js";
22
+ import { h as la } from "./chunks/syntaxHighlighting-BQfjio-i.js";
23
+ const J = () => ({
23
24
  blocks: [],
24
25
  messages: [],
25
26
  isStreaming: !1,
26
27
  sessionId: null,
27
28
  inputValue: ""
28
29
  });
29
- function ne(e, t) {
30
+ function be(e, t) {
30
31
  return {
31
32
  // Block actions
32
33
  addBlock: (s) => e((c) => ({
33
34
  blocks: [...c.blocks, s]
34
35
  })),
35
36
  removeBlock: (s) => e((c) => ({
36
- blocks: c.blocks.filter((r) => r.id !== s)
37
+ blocks: c.blocks.filter((a) => a.id !== s)
37
38
  })),
38
- moveBlock: (s, c) => e((r) => {
39
- const o = r.blocks.findIndex((i) => i.id === s);
40
- if (o === -1) return {};
41
- if (c === "up" && o === 0) return {};
42
- if (c === "down" && o === r.blocks.length - 1) return {};
43
- const n = [...r.blocks], l = c === "up" ? o - 1 : o + 1;
44
- return [n[o], n[l]] = [n[l], n[o]], { blocks: n };
39
+ moveBlock: (s, c) => e((a) => {
40
+ const n = a.blocks.findIndex((d) => d.id === s);
41
+ if (n === -1) return {};
42
+ if (c === "up" && n === 0) return {};
43
+ if (c === "down" && n === a.blocks.length - 1) return {};
44
+ const o = [...a.blocks], l = c === "up" ? n - 1 : n + 1;
45
+ return [o[n], o[l]] = [o[l], o[n]], { blocks: o };
45
46
  }),
46
- updateBlock: (s, c) => e((r) => ({
47
- blocks: r.blocks.map(
48
- (o) => o.id === s && o.type === "portlet" ? { ...o, ...c } : o
47
+ updateBlock: (s, c) => e((a) => ({
48
+ blocks: a.blocks.map(
49
+ (n) => n.id === s && n.type === "portlet" ? { ...n, ...c } : n
49
50
  )
50
51
  })),
51
52
  // Chat actions
@@ -53,30 +54,30 @@ function ne(e, t) {
53
54
  messages: [...c.messages, s]
54
55
  })),
55
56
  appendToLastAssistantMessage: (s) => e((c) => {
56
- const r = [...c.messages], o = r[r.length - 1];
57
- return o && o.role === "assistant" && (r[r.length - 1] = {
58
- ...o,
59
- content: o.content + s
60
- }), { messages: r };
57
+ const a = [...c.messages], n = a[a.length - 1];
58
+ return n && n.role === "assistant" && (a[a.length - 1] = {
59
+ ...n,
60
+ content: n.content + s
61
+ }), { messages: a };
61
62
  }),
62
63
  setLastAssistantError: (s) => e((c) => {
63
- const r = [...c.messages], o = r[r.length - 1];
64
- return o && o.role === "assistant" && (r[r.length - 1] = { ...o, error: s }), { messages: r };
64
+ const a = [...c.messages], n = a[a.length - 1];
65
+ return n && n.role === "assistant" && (a[a.length - 1] = { ...n, error: s }), { messages: a };
65
66
  }),
66
67
  addToolCallToLastAssistant: (s) => e((c) => {
67
- const r = [...c.messages], o = r[r.length - 1];
68
- return o && o.role === "assistant" && (r[r.length - 1] = {
69
- ...o,
70
- toolCalls: [...o.toolCalls || [], s]
71
- }), { messages: r };
68
+ const a = [...c.messages], n = a[a.length - 1];
69
+ return n && n.role === "assistant" && (a[a.length - 1] = {
70
+ ...n,
71
+ toolCalls: [...n.toolCalls || [], s]
72
+ }), { messages: a };
72
73
  }),
73
74
  updateLastToolCall: (s) => e((c) => {
74
- const r = [...c.messages], o = r[r.length - 1];
75
- if (o?.role === "assistant" && o.toolCalls?.length) {
76
- const n = [...o.toolCalls], l = s.id ? n.findIndex((i) => i.id === s.id) : n.length - 1;
77
- l !== -1 && (n[l] = { ...n[l], ...s }, r[r.length - 1] = { ...o, toolCalls: n });
75
+ const a = [...c.messages], n = a[a.length - 1];
76
+ if (n?.role === "assistant" && n.toolCalls?.length) {
77
+ const o = [...n.toolCalls], l = s.id ? o.findIndex((d) => d.id === s.id) : o.length - 1;
78
+ l !== -1 && (o[l] = { ...o[l], ...s }, a[a.length - 1] = { ...n, toolCalls: o });
78
79
  }
79
- return { messages: r };
80
+ return { messages: a };
80
81
  }),
81
82
  // Session/UI actions
82
83
  setIsStreaming: (s) => e({ isStreaming: s }),
@@ -95,44 +96,44 @@ function ne(e, t) {
95
96
  messages: s.messages || []
96
97
  }),
97
98
  // Reset
98
- reset: () => e($())
99
+ reset: () => e(J())
99
100
  };
100
101
  }
101
- function de() {
102
- const e = $();
103
- return se()(
104
- ae(
105
- re((t, s) => ({
102
+ function ye() {
103
+ const e = J();
104
+ return ue()(
105
+ me(
106
+ pe((t, s) => ({
106
107
  ...e,
107
- ...ne(t, s)
108
+ ...be(t, s)
108
109
  })),
109
110
  { name: "NotebookStore" }
110
111
  )
111
112
  );
112
113
  }
113
- const z = Z(null);
114
- function ie({
114
+ const G = de(null);
115
+ function xe({
115
116
  children: e,
116
117
  initialConfig: t
117
118
  }) {
118
- const s = N(null);
119
+ const s = C(null);
119
120
  if (!s.current) {
120
- const c = de();
121
+ const c = ye();
121
122
  t && c.getState().load(t), s.current = c;
122
123
  }
123
- return /* @__PURE__ */ a(z.Provider, { value: s.current, children: e });
124
+ return /* @__PURE__ */ r(G.Provider, { value: s.current, children: e });
124
125
  }
125
126
  function A(e) {
126
- const t = ee(z);
127
+ const t = ie(G);
127
128
  if (!t)
128
129
  throw new Error("useNotebookStore must be used within NotebookStoreProvider");
129
- return te(t, e);
130
+ return le(t, e);
130
131
  }
131
- const le = (e) => e.blocks, je = (e) => e.messages, qe = (e) => e.isStreaming, Ue = (e) => e.sessionId, Ke = (e) => e.inputValue, ue = (e) => ({
132
+ const ve = (e) => e.blocks, Ye = (e) => e.messages, Ze = (e) => e.isStreaming, et = (e) => e.sessionId, tt = (e) => e.inputValue, Ce = (e) => ({
132
133
  messages: e.messages,
133
134
  isStreaming: e.isStreaming,
134
135
  inputValue: e.inputValue
135
- }), me = (e) => ({
136
+ }), ke = (e) => ({
136
137
  addMessage: e.addMessage,
137
138
  appendToLastAssistantMessage: e.appendToLastAssistantMessage,
138
139
  setLastAssistantError: e.setLastAssistantError,
@@ -141,80 +142,80 @@ const le = (e) => e.blocks, je = (e) => e.messages, qe = (e) => e.isStreaming, U
141
142
  setIsStreaming: e.setIsStreaming,
142
143
  setInputValue: e.setInputValue,
143
144
  setSessionId: e.setSessionId
144
- }), pe = (e) => ({
145
+ }), Ne = (e) => ({
145
146
  addBlock: e.addBlock,
146
147
  removeBlock: e.removeBlock,
147
148
  moveBlock: e.moveBlock,
148
149
  updateBlock: e.updateBlock
149
- }), V = { width: "16px", height: "16px", color: "currentColor" }, he = _("chevronUp"), fe = _("chevronDown"), ge = _("edit"), be = _("delete"), ye = R.memo(function({
150
+ }), K = { width: "16px", height: "16px", color: "currentColor" }, we = q("chevronUp"), Se = q("chevronDown"), De = q("edit"), Ae = q("delete"), Te = Q.memo(function({
150
151
  block: t,
151
152
  onRemove: s,
152
153
  onMoveUp: c,
153
- onMoveDown: r,
154
- onEdit: o,
155
- isFirst: n,
154
+ onMoveDown: a,
155
+ onEdit: n,
156
+ isFirst: o,
156
157
  isLast: l
157
158
  }) {
158
- const [i, f] = F(null), g = p((x) => {
159
- f(x);
159
+ const [d, w] = j(null), m = g((k) => {
160
+ w(k);
160
161
  }, []);
161
- return /* @__PURE__ */ b("div", { className: "dc:relative dc:mb-4 bg-dc-surface dc:border border-dc-border dc:rounded-lg dc:flex dc:flex-col", children: [
162
- /* @__PURE__ */ b("div", { className: "dc:flex dc:items-center dc:justify-between dc:px-3 dc:py-1.5 dc:border-b border-dc-border dc:shrink-0 bg-dc-surface-secondary dc:rounded-t-lg", children: [
163
- /* @__PURE__ */ b("div", { className: "dc:flex dc:items-center dc:gap-2 dc:flex-1 dc:min-w-0", children: [
164
- /* @__PURE__ */ a("h3", { className: "dc:font-semibold dc:text-sm text-dc-text dc:truncate", children: t.title || "Untitled" }),
165
- i && /* @__PURE__ */ a(
166
- J,
162
+ return /* @__PURE__ */ x("div", { className: "dc:relative dc:mb-4 bg-dc-surface dc:border border-dc-border dc:rounded-lg dc:flex dc:flex-col", children: [
163
+ /* @__PURE__ */ x("div", { className: "dc:flex dc:items-center dc:justify-between dc:px-3 dc:py-1.5 dc:border-b border-dc-border dc:shrink-0 bg-dc-surface-secondary dc:rounded-t-lg", children: [
164
+ /* @__PURE__ */ x("div", { className: "dc:flex dc:items-center dc:gap-2 dc:flex-1 dc:min-w-0", children: [
165
+ /* @__PURE__ */ r("h3", { className: "dc:font-semibold dc:text-sm text-dc-text dc:truncate", children: t.title || "Untitled" }),
166
+ d && /* @__PURE__ */ r(
167
+ re,
167
168
  {
168
- chartConfig: i.chartConfig,
169
- displayConfig: i.displayConfig,
170
- queryObject: i.queryObject,
171
- data: i.data,
172
- chartType: i.chartType,
173
- cacheInfo: i.cacheInfo ?? void 0
169
+ chartConfig: d.chartConfig,
170
+ displayConfig: d.displayConfig,
171
+ queryObject: d.queryObject,
172
+ data: d.data,
173
+ chartType: d.chartType,
174
+ cacheInfo: d.cacheInfo ?? void 0
174
175
  }
175
176
  )
176
177
  ] }),
177
- /* @__PURE__ */ b("div", { className: "dc:flex dc:items-center dc:gap-1 dc:shrink-0 dc:ml-4 dc:-mr-2", children: [
178
- !n && /* @__PURE__ */ a(
178
+ /* @__PURE__ */ x("div", { className: "dc:flex dc:items-center dc:gap-1 dc:shrink-0 dc:ml-4 dc:-mr-2", children: [
179
+ !o && /* @__PURE__ */ r(
179
180
  "button",
180
181
  {
181
182
  onClick: () => c(t.id),
182
183
  className: "dc:p-1 dc:bg-transparent dc:border-none dc:rounded-sm text-dc-text-secondary dc:cursor-pointer dc:hover:bg-dc-surface-hover dc:transition-colors",
183
184
  title: "Move up",
184
- children: /* @__PURE__ */ a(he, { style: V })
185
+ children: /* @__PURE__ */ r(we, { style: K })
185
186
  }
186
187
  ),
187
- !l && /* @__PURE__ */ a(
188
+ !l && /* @__PURE__ */ r(
188
189
  "button",
189
190
  {
190
- onClick: () => r(t.id),
191
+ onClick: () => a(t.id),
191
192
  className: "dc:p-1 dc:bg-transparent dc:border-none dc:rounded-sm text-dc-text-secondary dc:cursor-pointer dc:hover:bg-dc-surface-hover dc:transition-colors",
192
193
  title: "Move down",
193
- children: /* @__PURE__ */ a(fe, { style: V })
194
+ children: /* @__PURE__ */ r(Se, { style: K })
194
195
  }
195
196
  ),
196
- /* @__PURE__ */ a(
197
+ /* @__PURE__ */ r(
197
198
  "button",
198
199
  {
199
- onClick: () => o(t),
200
+ onClick: () => n(t),
200
201
  className: "dc:p-1 dc:bg-transparent dc:border-none dc:rounded-sm text-dc-text-secondary dc:cursor-pointer dc:hover:bg-dc-surface-hover dc:transition-colors",
201
202
  title: "Edit visualization",
202
- children: /* @__PURE__ */ a(ge, { style: V })
203
+ children: /* @__PURE__ */ r(De, { style: K })
203
204
  }
204
205
  ),
205
- /* @__PURE__ */ a(
206
+ /* @__PURE__ */ r(
206
207
  "button",
207
208
  {
208
209
  onClick: () => s(t.id),
209
210
  className: "dc:p-1 dc:mr-0.5 dc:bg-transparent dc:border-none dc:rounded-sm dc:cursor-pointer dc:hover:bg-dc-danger-bg text-dc-danger dc:transition-colors",
210
211
  title: "Remove",
211
- children: /* @__PURE__ */ a(be, { style: V })
212
+ children: /* @__PURE__ */ r(Ae, { style: K })
212
213
  }
213
214
  )
214
215
  ] })
215
216
  ] }),
216
- /* @__PURE__ */ a("div", { className: "dc:flex-1 dc:min-h-0", children: /* @__PURE__ */ a(
217
- H,
217
+ /* @__PURE__ */ r("div", { className: "dc:flex-1 dc:min-h-0", children: /* @__PURE__ */ r(
218
+ ae,
218
219
  {
219
220
  query: t.query,
220
221
  chartType: t.chartType,
@@ -222,11 +223,11 @@ const le = (e) => e.blocks, je = (e) => e.messages, qe = (e) => e.isStreaming, U
222
223
  displayConfig: t.displayConfig,
223
224
  height: 400,
224
225
  eagerLoad: !0,
225
- onDebugDataReady: g
226
+ onDebugDataReady: m
226
227
  }
227
228
  ) })
228
229
  ] });
229
- }), xe = {
230
+ }), Me = {
230
231
  overrides: {
231
232
  h1: { props: { className: "dc:text-lg dc:font-bold text-dc-text dc:mb-2 dc:mt-3" } },
232
233
  h2: { props: { className: "dc:text-base dc:font-semibold text-dc-text dc:mb-2 dc:mt-3" } },
@@ -247,17 +248,17 @@ const le = (e) => e.blocks, je = (e) => e.messages, qe = (e) => e.isStreaming, U
247
248
  td: { props: { className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text border-dc-border dc:border-b" } },
248
249
  tr: { props: { className: "dc:hover:opacity-80" } }
249
250
  }
250
- }, ve = R.memo(function({
251
+ }, Ie = Q.memo(function({
251
252
  block: t,
252
253
  onRemove: s,
253
254
  onMoveUp: c,
254
- onMoveDown: r,
255
- isFirst: o,
256
- isLast: n
255
+ onMoveDown: a,
256
+ isFirst: n,
257
+ isLast: o
257
258
  }) {
258
- return /* @__PURE__ */ b("div", { className: "dc:group dc:relative dc:mb-4", children: [
259
- /* @__PURE__ */ b("div", { className: "dc:absolute dc:right-2 dc:top-2 dc:z-10 dc:flex dc:gap-1 dc:opacity-0 dc:group-hover:opacity-100 dc:transition-opacity", children: [
260
- !o && /* @__PURE__ */ a(
259
+ return /* @__PURE__ */ x("div", { className: "dc:group dc:relative dc:mb-4", children: [
260
+ /* @__PURE__ */ x("div", { className: "dc:absolute dc:right-2 dc:top-2 dc:z-10 dc:flex dc:gap-1 dc:opacity-0 dc:group-hover:opacity-100 dc:transition-opacity", children: [
261
+ !n && /* @__PURE__ */ r(
261
262
  "button",
262
263
  {
263
264
  onClick: () => c(t.id),
@@ -266,16 +267,16 @@ const le = (e) => e.blocks, je = (e) => e.messages, qe = (e) => e.isStreaming, U
266
267
  children: "▲"
267
268
  }
268
269
  ),
269
- !n && /* @__PURE__ */ a(
270
+ !o && /* @__PURE__ */ r(
270
271
  "button",
271
272
  {
272
- onClick: () => r(t.id),
273
+ onClick: () => a(t.id),
273
274
  className: "dc:p-1 dc:rounded dc:text-xs bg-dc-surface text-dc-text-secondary dc:hover:opacity-80 border-dc-border dc:border",
274
275
  title: "Move down",
275
276
  children: "▼"
276
277
  }
277
278
  ),
278
- /* @__PURE__ */ a(
279
+ /* @__PURE__ */ r(
279
280
  "button",
280
281
  {
281
282
  onClick: () => s(t.id),
@@ -285,74 +286,74 @@ const le = (e) => e.blocks, je = (e) => e.messages, qe = (e) => e.isStreaming, U
285
286
  }
286
287
  )
287
288
  ] }),
288
- t.title && /* @__PURE__ */ a("h4", { className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2 dc:px-1", children: t.title }),
289
- /* @__PURE__ */ a("div", { className: "dc:rounded-lg dc:p-4 bg-dc-surface border-dc-border dc:border", children: /* @__PURE__ */ a(ce, { options: xe, children: t.content }) })
289
+ t.title && /* @__PURE__ */ r("h4", { className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2 dc:px-1", children: t.title }),
290
+ /* @__PURE__ */ r("div", { className: "dc:rounded-lg dc:p-4 bg-dc-surface border-dc-border dc:border", children: /* @__PURE__ */ r(he, { options: Me, children: t.content }) })
290
291
  ] });
291
- }), Ce = R.memo(function() {
292
- const t = A(le), { removeBlock: s, moveBlock: c, updateBlock: r } = A(K(pe)), o = N(null), [n, l] = F(null), i = N(t.length);
293
- Q(() => {
294
- t.length > i.current && o.current?.scrollIntoView({ behavior: "smooth" }), i.current = t.length;
292
+ }), Ee = Q.memo(function() {
293
+ const t = A(ve), { removeBlock: s, moveBlock: c, updateBlock: a } = A(O(Ne)), n = C(null), [o, l] = j(null), d = C(t.length);
294
+ P(() => {
295
+ t.length > d.current && n.current?.scrollIntoView({ behavior: "smooth" }), d.current = t.length;
295
296
  }, [t.length]);
296
- const f = p((d) => s(d), [s]), g = p((d) => c(d, "up"), [c]), x = p((d) => c(d, "down"), [c]), m = p((d) => l(d), []), C = p((d) => {
297
- if (!n) return;
298
- const v = G(d), { analysisConfig: k } = v;
299
- if (k) {
300
- const w = k.charts[k.analysisType];
301
- r(n.id, {
302
- title: d.title,
303
- query: JSON.stringify(k.query),
304
- chartType: w?.chartType || "bar",
305
- chartConfig: w?.chartConfig,
306
- displayConfig: w?.displayConfig
297
+ const w = g((p) => s(p), [s]), m = g((p) => c(p, "up"), [c]), k = g((p) => c(p, "down"), [c]), h = g((p) => l(p), []), N = g((p) => {
298
+ if (!o) return;
299
+ const i = ce(p), { analysisConfig: f } = i;
300
+ if (f) {
301
+ const b = f.charts[f.analysisType];
302
+ a(o.id, {
303
+ title: p.title,
304
+ query: JSON.stringify(f.query),
305
+ chartType: b?.chartType || "bar",
306
+ chartConfig: b?.chartConfig,
307
+ displayConfig: b?.displayConfig
307
308
  });
308
309
  }
309
310
  l(null);
310
- }, [n, r]);
311
- return t.length === 0 ? /* @__PURE__ */ a("div", { className: "dc:flex dc:items-center dc:justify-center dc:h-full", children: /* @__PURE__ */ b("div", { className: "dc:text-center dc:max-w-sm dc:px-6", children: [
312
- /* @__PURE__ */ a("h3", { className: "dc:text-base dc:font-semibold text-dc-text dc:mb-2", children: "Your notebook is empty" }),
313
- /* @__PURE__ */ a("p", { className: "dc:text-sm text-dc-text-secondary", children: "Ask the AI assistant a question about your data. Charts and insights will appear here as the assistant analyzes your data." })
314
- ] }) }) : /* @__PURE__ */ b("div", { className: "dc:h-full dc:overflow-y-auto dc:p-4", children: [
315
- t.map((d, v) => {
316
- const k = v === 0, w = v === t.length - 1;
317
- return d.type === "portlet" ? /* @__PURE__ */ a(
318
- ye,
311
+ }, [o, a]);
312
+ return t.length === 0 ? /* @__PURE__ */ r("div", { className: "dc:flex dc:items-center dc:justify-center dc:h-full", children: /* @__PURE__ */ x("div", { className: "dc:text-center dc:max-w-sm dc:px-6", children: [
313
+ /* @__PURE__ */ r("h3", { className: "dc:text-base dc:font-semibold text-dc-text dc:mb-2", children: "Your notebook is empty" }),
314
+ /* @__PURE__ */ r("p", { className: "dc:text-sm text-dc-text-secondary", children: "Ask the AI assistant a question about your data. Charts and insights will appear here as the assistant analyzes your data." })
315
+ ] }) }) : /* @__PURE__ */ x("div", { className: "dc:h-full dc:overflow-y-auto dc:p-4", children: [
316
+ t.map((p, i) => {
317
+ const f = i === 0, b = i === t.length - 1;
318
+ return p.type === "portlet" ? /* @__PURE__ */ r(
319
+ Te,
319
320
  {
320
- block: d,
321
- onRemove: f,
322
- onMoveUp: g,
323
- onMoveDown: x,
324
- onEdit: m,
325
- isFirst: k,
326
- isLast: w
321
+ block: p,
322
+ onRemove: w,
323
+ onMoveUp: m,
324
+ onMoveDown: k,
325
+ onEdit: h,
326
+ isFirst: f,
327
+ isLast: b
327
328
  },
328
- d.id
329
- ) : d.type === "markdown" ? /* @__PURE__ */ a(
330
- ve,
329
+ p.id
330
+ ) : p.type === "markdown" ? /* @__PURE__ */ r(
331
+ Ie,
331
332
  {
332
- block: d,
333
- onRemove: f,
334
- onMoveUp: g,
335
- onMoveDown: x,
336
- isFirst: k,
337
- isLast: w
333
+ block: p,
334
+ onRemove: w,
335
+ onMoveUp: m,
336
+ onMoveDown: k,
337
+ isFirst: f,
338
+ isLast: b
338
339
  },
339
- d.id
340
+ p.id
340
341
  ) : null;
341
342
  }),
342
- /* @__PURE__ */ a("div", { ref: o }),
343
- /* @__PURE__ */ a(
344
- X,
343
+ /* @__PURE__ */ r("div", { ref: n }),
344
+ /* @__PURE__ */ r(
345
+ ne,
345
346
  {
346
- isOpen: !!n,
347
+ isOpen: !!o,
347
348
  onClose: () => l(null),
348
- onSave: C,
349
- portlet: n ? {
350
- id: n.id,
351
- title: n.title,
352
- query: n.query,
353
- chartType: n.chartType,
354
- chartConfig: n.chartConfig,
355
- displayConfig: n.displayConfig,
349
+ onSave: N,
350
+ portlet: o ? {
351
+ id: o.id,
352
+ title: o.title,
353
+ query: o.query,
354
+ chartType: o.chartType,
355
+ chartConfig: o.chartConfig,
356
+ displayConfig: o.displayConfig,
356
357
  w: 5,
357
358
  h: 4,
358
359
  x: 0,
@@ -364,7 +365,7 @@ const le = (e) => e.blocks, je = (e) => e.messages, qe = (e) => e.isStreaming, U
364
365
  )
365
366
  ] });
366
367
  });
367
- function ke(e) {
368
+ function Re(e) {
368
369
  if (e.startsWith("{") || e.includes('"type":"error"'))
369
370
  try {
370
371
  const t = JSON.parse(e.replace(/^Error:\s*/, "")), s = t.error?.type || t.type || "";
@@ -383,447 +384,519 @@ function ke(e) {
383
384
  }
384
385
  return e;
385
386
  }
386
- function Ne(e) {
387
- const {
388
- agentEndpoint: t,
389
- agentApiKey: s,
390
- onAddPortlet: c,
391
- onAddMarkdown: r,
392
- onTextDelta: o,
393
- onToolStart: n,
394
- onToolResult: l,
395
- onTurnComplete: i,
396
- onDone: f,
397
- onError: g
398
- } = e, { cubeApi: x } = oe(), m = N(null), [C, d] = F(!1), v = p(async (w, y) => {
399
- function M(h) {
400
- switch (h.type) {
387
+ function Be(e) {
388
+ const { agentEndpoint: t, agentApiKey: s } = e, { cubeApi: c } = fe(), a = C(null), [n, o] = j(!1), l = C(e);
389
+ l.current = e;
390
+ const d = g(async (m, k, h) => {
391
+ function N(i) {
392
+ const f = l.current;
393
+ switch (i.type) {
401
394
  case "text_delta":
402
- o(h.data);
395
+ f.onTextDelta(i.data);
403
396
  break;
404
397
  case "tool_use_start":
405
- n(h.data.id, h.data.name, h.data.input);
398
+ f.onToolStart(i.data.id, i.data.name, i.data.input);
406
399
  break;
407
400
  case "tool_use_result":
408
- l(h.data.id, h.data.name, h.data.result, h.data.isError);
401
+ f.onToolResult(i.data.id, i.data.name, i.data.result, i.data.isError);
409
402
  break;
410
403
  case "add_portlet":
411
- c({
412
- ...h.data,
404
+ f.onAddPortlet({
405
+ ...i.data,
413
406
  type: "portlet"
414
407
  });
415
408
  break;
416
409
  case "add_markdown":
417
- r({
418
- ...h.data,
410
+ f.onAddMarkdown({
411
+ ...i.data,
419
412
  type: "markdown"
420
413
  });
421
414
  break;
415
+ case "dashboard_saved":
416
+ f.onDashboardSaved?.(i.data);
417
+ break;
422
418
  case "turn_complete":
423
- i?.();
419
+ f.onTurnComplete?.();
424
420
  break;
425
421
  case "done":
426
- f(h.data.sessionId);
422
+ f.onDone(i.data.sessionId);
427
423
  break;
428
424
  case "error":
429
- g(h.data.message);
425
+ f.onError(i.data.message);
430
426
  break;
431
427
  }
432
428
  }
433
- m.current && m.current.abort();
434
- const S = new AbortController();
435
- m.current = S, d(!0);
429
+ a.current && a.current.abort();
430
+ const p = new AbortController();
431
+ a.current = p, o(!0);
436
432
  try {
437
- const h = x.apiUrl || "/cubejs-api/v1", D = t || `${h}/agent/chat`, T = {
433
+ const i = c.apiUrl || "/cubejs-api/v1", f = t || `${i}/agent/chat`, b = {
438
434
  "Content-Type": "application/json",
439
- ...x.headers
435
+ ...c.headers
440
436
  };
441
- s && (T["X-Agent-Api-Key"] = s);
442
- const I = await fetch(D, {
437
+ s && (b["X-Agent-Api-Key"] = s);
438
+ const v = await fetch(f, {
443
439
  method: "POST",
444
- headers: T,
445
- credentials: x.credentials ?? "include",
440
+ headers: b,
441
+ credentials: c.credentials ?? "include",
446
442
  body: JSON.stringify({
447
- message: w,
448
- ...y ? { sessionId: y } : {}
443
+ message: m,
444
+ ...k ? { sessionId: k } : {},
445
+ ...h && h.length > 0 ? { history: h } : {}
449
446
  }),
450
- signal: S.signal
447
+ signal: p.signal
451
448
  });
452
- if (!I.ok) {
453
- const B = await I.json().catch(() => ({}));
454
- throw new Error(B.error || `Agent request failed: ${I.status}`);
449
+ if (!v.ok) {
450
+ const D = await v.json().catch(() => ({}));
451
+ throw new Error(D.error || `Agent request failed: ${v.status}`);
455
452
  }
456
- if (!I.body)
453
+ if (!v.body)
457
454
  throw new Error("No response body received");
458
- const j = I.body.getReader(), q = new TextDecoder();
459
- let E = "";
455
+ const S = v.body.getReader(), R = new TextDecoder();
456
+ let T = "";
460
457
  for (; ; ) {
461
- const { done: B, value: u } = await j.read();
462
- if (B) break;
463
- E += q.decode(u, { stream: !0 });
464
- const L = E.split(`
458
+ const { done: D, value: y } = await S.read();
459
+ if (D) break;
460
+ T += R.decode(y, { stream: !0 });
461
+ const I = T.split(`
465
462
 
466
463
  `);
467
- E = L.pop() || "";
468
- for (const P of L) {
469
- const U = P.trim().split(`
464
+ T = I.pop() || "";
465
+ for (const L of I) {
466
+ const F = L.trim().split(`
470
467
  `);
471
- for (const O of U)
472
- if (O.startsWith("data: "))
468
+ for (const B of F)
469
+ if (B.startsWith("data: "))
473
470
  try {
474
- const W = JSON.parse(O.slice(6));
475
- M(W);
471
+ const M = JSON.parse(B.slice(6));
472
+ N(M);
476
473
  } catch {
477
474
  }
478
475
  }
479
476
  }
480
- if (E.trim()) {
481
- const B = E.trim().split(`
477
+ if (T.trim()) {
478
+ const D = T.trim().split(`
482
479
  `);
483
- for (const u of B)
484
- if (u.startsWith("data: "))
480
+ for (const y of D)
481
+ if (y.startsWith("data: "))
485
482
  try {
486
- const L = JSON.parse(u.slice(6));
487
- M(L);
483
+ const I = JSON.parse(y.slice(6));
484
+ N(I);
488
485
  } catch {
489
486
  }
490
487
  }
491
- } catch (h) {
492
- if (h.name !== "AbortError") {
493
- const D = h instanceof Error ? h.message : "Stream failed";
494
- g(ke(D));
488
+ } catch (i) {
489
+ if (i.name !== "AbortError") {
490
+ const f = i instanceof Error ? i.message : "Stream failed";
491
+ l.current.onError(Re(f));
495
492
  }
496
493
  } finally {
497
- d(!1), m.current = null;
494
+ o(!1), a.current = null;
498
495
  }
499
- }, [x, t, s, c, r, o, n, l, i, f, g]), k = p(() => {
500
- m.current && (m.current.abort(), m.current = null, d(!1));
496
+ }, [c, t, s]), w = g(() => {
497
+ a.current && (a.current.abort(), a.current = null, o(!1));
501
498
  }, []);
502
499
  return {
503
- sendMessage: v,
504
- isStreaming: C,
505
- abort: k
500
+ sendMessage: d,
501
+ isStreaming: n,
502
+ abort: w
506
503
  };
507
504
  }
508
- function we(e) {
505
+ function Le(e) {
509
506
  const t = [];
510
507
  let s = e, c = 0;
511
508
  for (; s; ) {
512
- const r = s.match(/^(.*?)`([^`]+)`(.*)$/);
513
- if (r) {
514
- const [, n, l, i] = r;
515
- n && t.push(/* @__PURE__ */ a("span", { children: n }, c++)), t.push(
516
- /* @__PURE__ */ a("code", { className: "dc:px-1 dc:py-0.5 dc:rounded dc:text-xs bg-dc-surface dc:font-mono", children: l }, c++)
517
- ), s = i;
509
+ const a = s.match(/^(.*?)`([^`]+)`(.*)$/);
510
+ if (a) {
511
+ const [, o, l, d] = a;
512
+ o && t.push(/* @__PURE__ */ r("span", { children: o }, c++)), t.push(
513
+ /* @__PURE__ */ r("code", { className: "dc:px-1 dc:py-0.5 dc:rounded dc:text-xs bg-dc-surface dc:font-mono", children: l }, c++)
514
+ ), s = d;
518
515
  continue;
519
516
  }
520
- const o = s.match(/^(.*?)\*\*([^*]+)\*\*(.*)$/);
521
- if (o) {
522
- const [, n, l, i] = o;
523
- n && t.push(/* @__PURE__ */ a("span", { children: n }, c++)), t.push(/* @__PURE__ */ a("strong", { className: "dc:font-semibold", children: l }, c++)), s = i;
517
+ const n = s.match(/^(.*?)\*\*([^*]+)\*\*(.*)$/);
518
+ if (n) {
519
+ const [, o, l, d] = n;
520
+ o && t.push(/* @__PURE__ */ r("span", { children: o }, c++)), t.push(/* @__PURE__ */ r("strong", { className: "dc:font-semibold", children: l }, c++)), s = d;
524
521
  continue;
525
522
  }
526
- t.push(/* @__PURE__ */ a("span", { children: s }, c));
523
+ t.push(/* @__PURE__ */ r("span", { children: s }, c));
527
524
  break;
528
525
  }
529
526
  return t;
530
527
  }
531
- const Se = {
528
+ const Pe = {
532
529
  discover_cubes: "Discovering cubes",
533
530
  get_cube_metadata: "Reading metadata",
534
531
  execute_query: "Executing query",
535
532
  add_portlet: "Adding visualization",
536
533
  add_markdown: "Adding explanation"
537
534
  };
538
- function Ae({ toolCall: e }) {
539
- const [t, s] = F(!1), c = Se[e.name] || e.name, r = e.status === "running";
540
- return /* @__PURE__ */ b("div", { className: "dc:my-1 dc:text-xs", children: [
541
- /* @__PURE__ */ b(
535
+ function Qe({ toolCall: e, loadingComponent: t }) {
536
+ const [s, c] = j(!1), a = Pe[e.name] || e.name, n = e.status === "running";
537
+ return /* @__PURE__ */ x("div", { className: "dc:my-1 dc:text-xs", children: [
538
+ /* @__PURE__ */ x(
542
539
  "button",
543
540
  {
544
- onClick: () => s(!t),
541
+ onClick: () => c(!s),
545
542
  className: "dc:flex dc:items-center dc:gap-1.5 text-dc-text-secondary dc:hover:opacity-80 dc:transition-opacity",
546
543
  children: [
547
- r ? /* @__PURE__ */ a("span", { className: "dc:inline-block dc:w-3 dc:h-3 dc:border-2 border-dc-accent dc:border-t-transparent dc:rounded-full dc:animate-spin" }) : /* @__PURE__ */ a("span", { className: "dc:text-xs", children: e.status === "error" ? "✗" : "✓" }),
548
- /* @__PURE__ */ b("span", { children: [
549
- c,
550
- r ? "..." : ""
544
+ n ? t ? /* @__PURE__ */ r("span", { className: "dc:inline-flex dc:items-center dc:justify-center dc:h-3 dc:w-3", children: t }) : /* @__PURE__ */ r(ge, { size: "xs" }) : /* @__PURE__ */ r("span", { className: "dc:text-xs", children: e.status === "error" ? "✗" : "✓" }),
545
+ /* @__PURE__ */ x("span", { children: [
546
+ a,
547
+ n ? "..." : ""
551
548
  ] }),
552
- !r && /* @__PURE__ */ a("span", { className: "dc:text-[10px] dc:opacity-60", children: t ? "▲" : "▼" })
549
+ !n && /* @__PURE__ */ r("span", { className: "dc:text-[10px] dc:opacity-60", children: s ? "▲" : "▼" })
553
550
  ]
554
551
  }
555
552
  ),
556
- t && e.result != null && /* @__PURE__ */ a("pre", { className: "dc:mt-1 dc:p-2 dc:rounded dc:text-[11px] dc:overflow-x-auto dc:max-h-32 dc:overflow-y-auto bg-dc-surface-secondary text-dc-text-secondary", children: typeof e.result == "string" ? e.result : JSON.stringify(e.result, null, 2) })
553
+ s && e.result != null && /* @__PURE__ */ r("pre", { className: "dc:mt-1 dc:p-2 dc:rounded dc:text-[11px] dc:overflow-x-auto dc:max-h-32 dc:overflow-y-auto bg-dc-surface-secondary text-dc-text-secondary", children: typeof e.result == "string" ? e.result : JSON.stringify(e.result, null, 2) })
557
554
  ] });
558
555
  }
559
- const De = R.memo(function({ message: t }) {
560
- const s = t.role === "user", c = !!t.content?.trim(), r = !!t.error, o = t.toolCalls && t.toolCalls.length > 0;
561
- return !s && !c && !r && !o ? null : /* @__PURE__ */ a("div", { className: `dc:flex dc:mb-3 ${s ? "dc:justify-end" : "dc:justify-start"}`, children: /* @__PURE__ */ b(
556
+ const Fe = {
557
+ animation: "dc-msg-in 100ms ease-out"
558
+ }, _e = Q.memo(function({ message: t, loadingComponent: s }) {
559
+ const c = t.role === "user", a = !!t.content?.trim(), n = !!t.error, o = t.toolCalls && t.toolCalls.length > 0;
560
+ return !c && !a && !n && !o ? null : /* @__PURE__ */ r(
562
561
  "div",
563
562
  {
564
- className: `dc:max-w-[85%] dc:rounded-lg dc:px-3 dc:py-2 dc:text-sm ${s ? "bg-dc-accent text-dc-accent-text dc:rounded-br-sm" : r && !c ? "bg-dc-warning-bg text-dc-text dc:rounded-bl-sm" : "bg-dc-surface-secondary text-dc-text dc:rounded-bl-sm"}`,
565
- children: [
566
- c && /* @__PURE__ */ a("div", { className: "dc:whitespace-pre-wrap dc:break-words", children: s ? t.content : we(t.content) }),
567
- r && /* @__PURE__ */ b("div", { className: `dc:flex dc:items-start dc:gap-2 ${c ? "dc:mt-2 dc:pt-2 dc:border-t dc:border-current dc:border-opacity-10" : ""}`, children: [
568
- /* @__PURE__ */ a("span", { className: "dc:text-base dc:leading-none dc:mt-0.5 text-dc-warning dc:flex-shrink-0", children: "⚠" }),
569
- /* @__PURE__ */ a("span", { className: "text-dc-text-secondary", children: t.error })
570
- ] }),
571
- o && /* @__PURE__ */ a("div", { className: c || r ? "dc:mt-1 dc:border-t dc:border-current dc:border-opacity-10 dc:pt-1" : "", children: t.toolCalls.map((n, l) => /* @__PURE__ */ a(Ae, { toolCall: n }, n.id || l)) })
572
- ]
563
+ className: `dc:flex dc:mb-3 ${c ? "dc:justify-end" : "dc:justify-start"}`,
564
+ style: Fe,
565
+ children: /* @__PURE__ */ x(
566
+ "div",
567
+ {
568
+ className: `dc:max-w-[85%] dc:rounded-lg dc:px-3 dc:py-2 dc:text-sm ${c ? "bg-dc-accent text-dc-accent-text dc:rounded-br-sm" : n && !a ? "bg-dc-warning-bg text-dc-text dc:rounded-bl-sm" : "bg-dc-surface-secondary text-dc-text dc:rounded-bl-sm"}`,
569
+ children: [
570
+ a && /* @__PURE__ */ r("div", { className: "dc:whitespace-pre-wrap dc:break-words", children: c ? t.content : Le(t.content) }),
571
+ n && /* @__PURE__ */ x("div", { className: `dc:flex dc:items-start dc:gap-2 ${a ? "dc:mt-2 dc:pt-2 dc:border-t dc:border-current dc:border-opacity-10" : ""}`, children: [
572
+ /* @__PURE__ */ r("span", { className: "dc:text-base dc:leading-none dc:mt-0.5 text-dc-warning dc:flex-shrink-0", children: "⚠" }),
573
+ /* @__PURE__ */ r("span", { className: "text-dc-text-secondary", children: t.error })
574
+ ] }),
575
+ o && /* @__PURE__ */ r("div", { className: a || n ? "dc:mt-1 dc:border-t dc:border-current dc:border-opacity-10 dc:pt-1" : "", children: t.toolCalls.map((l, d) => /* @__PURE__ */ r(Qe, { toolCall: l, loadingComponent: s }, l.id || d)) })
576
+ ]
577
+ }
578
+ )
573
579
  }
574
- ) });
575
- }), Te = R.memo(function({
580
+ );
581
+ }), Ve = Q.memo(function({
576
582
  value: t,
577
583
  onChange: s,
578
584
  onSend: c,
579
- onStop: r,
580
- onContinue: o,
581
- isStreaming: n = !1,
585
+ onStop: a,
586
+ onContinue: n,
587
+ isStreaming: o = !1,
582
588
  showContinue: l = !1,
583
- disabled: i = !1,
584
- placeholder: f = "Ask about your data..."
589
+ disabled: d = !1,
590
+ placeholder: w = "Ask about your data..."
585
591
  }) {
586
- const g = N(null);
587
- Q(() => {
588
- const m = g.current;
589
- m && (m.style.height = "auto", m.style.height = `${Math.min(m.scrollHeight, 150)}px`);
592
+ const m = C(null);
593
+ P(() => {
594
+ const h = m.current;
595
+ h && (h.style.height = "auto", h.style.height = `${Math.min(h.scrollHeight, 150)}px`);
590
596
  }, [t]);
591
- const x = p(
592
- (m) => {
593
- m.key === "Enter" && !m.shiftKey && (m.preventDefault(), !i && t.trim() && c());
597
+ const k = g(
598
+ (h) => {
599
+ h.key === "Enter" && !h.shiftKey && (h.preventDefault(), !d && t.trim() && c());
594
600
  },
595
- [i, t, c]
601
+ [d, t, c]
596
602
  );
597
- return /* @__PURE__ */ b("div", { className: "dc:flex dc:gap-2 dc:items-end dc:p-3 border-dc-border dc:border-t", children: [
598
- /* @__PURE__ */ a(
603
+ return /* @__PURE__ */ x("div", { className: "dc:flex dc:gap-2 dc:items-end dc:p-3 border-dc-border dc:border-t", children: [
604
+ /* @__PURE__ */ r(
599
605
  "textarea",
600
606
  {
601
- ref: g,
607
+ ref: m,
602
608
  value: t,
603
- onChange: (m) => s(m.target.value),
604
- onKeyDown: x,
605
- placeholder: f,
606
- disabled: i,
609
+ onChange: (h) => s(h.target.value),
610
+ onKeyDown: k,
611
+ placeholder: w,
612
+ disabled: d,
607
613
  rows: 1,
608
614
  className: "dc:flex-1 dc:resize-none dc:rounded-lg dc:px-3 dc:py-2 dc:text-sm bg-dc-surface-secondary text-dc-text border-dc-border dc:border dc:outline-none dc:focus:ring-1 focus:ring-dc-accent dc:disabled:opacity-50"
609
615
  }
610
616
  ),
611
- n ? /* @__PURE__ */ a(
617
+ o ? /* @__PURE__ */ r(
612
618
  "button",
613
619
  {
614
- onClick: r,
620
+ onClick: a,
615
621
  className: "dc:px-4 dc:py-2 dc:rounded-lg dc:text-sm dc:font-medium dc:transition-colors text-dc-error border-dc-border dc:border dc:hover:opacity-80 dc:shrink-0",
616
622
  children: "Stop"
617
623
  }
618
- ) : /* @__PURE__ */ b(Y, { children: [
619
- l && !t.trim() && /* @__PURE__ */ a(
624
+ ) : /* @__PURE__ */ x(oe, { children: [
625
+ l && !t.trim() && /* @__PURE__ */ r(
620
626
  "button",
621
627
  {
622
628
  onClick: () => {
623
- o?.(), g.current?.focus();
629
+ n?.(), m.current?.focus();
624
630
  },
625
631
  className: "dc:px-4 dc:py-2 dc:rounded-lg dc:text-sm dc:font-medium dc:transition-colors border-dc-border dc:border text-dc-text-secondary dc:hover:opacity-80 dc:shrink-0",
626
632
  children: "Continue"
627
633
  }
628
634
  ),
629
- /* @__PURE__ */ a(
635
+ /* @__PURE__ */ r(
630
636
  "button",
631
637
  {
632
638
  onClick: c,
633
- disabled: i || !t.trim(),
639
+ disabled: d || !t.trim(),
634
640
  className: "dc:px-4 dc:py-2 dc:rounded-lg dc:text-sm dc:font-medium dc:transition-colors bg-dc-accent text-dc-accent-text dc:hover:opacity-90 dc:disabled:opacity-40 dc:disabled:cursor-not-allowed dc:shrink-0",
635
641
  children: "Send"
636
642
  }
637
643
  )
638
644
  ] })
639
645
  ] });
640
- }), Me = R.memo(function({
646
+ }), je = Q.memo(function({
641
647
  agentEndpoint: t,
642
648
  agentApiKey: s,
643
- onClear: c
649
+ onClear: c,
650
+ onDashboardSaved: a,
651
+ loadingComponent: n,
652
+ initialPrompt: o
644
653
  }) {
645
- const r = N(null), o = N(!1), { messages: n, isStreaming: l, inputValue: i } = A(K(ue)), {
646
- addMessage: f,
647
- appendToLastAssistantMessage: g,
648
- setLastAssistantError: x,
649
- addToolCallToLastAssistant: m,
650
- updateLastToolCall: C,
651
- setIsStreaming: d,
652
- setInputValue: v,
653
- setSessionId: k
654
- } = A(K(me)), w = A((u) => u.sessionId), y = A((u) => u.addBlock), M = A((u) => u.reset), S = p(() => {
655
- o.current && (o.current = !1, f({
654
+ const l = C(null), d = C(!1), w = C(!1), { messages: m, isStreaming: k, inputValue: h } = A(O(Ce)), {
655
+ addMessage: N,
656
+ appendToLastAssistantMessage: p,
657
+ setLastAssistantError: i,
658
+ addToolCallToLastAssistant: f,
659
+ updateLastToolCall: b,
660
+ setIsStreaming: v,
661
+ setInputValue: S,
662
+ setSessionId: R
663
+ } = A(O(ke)), T = A((u) => u.sessionId), D = A((u) => u.addBlock), y = A((u) => u.reset), I = A((u) => u.blocks.filter((V) => V.type === "portlet").length), L = C(m);
664
+ L.current = m;
665
+ const F = C(k);
666
+ F.current = k;
667
+ const B = C(T);
668
+ B.current = T;
669
+ const M = g(() => {
670
+ w.current && (w.current = !1, N({
656
671
  id: `msg-${Date.now()}`,
657
672
  role: "assistant",
658
673
  content: "",
659
674
  toolCalls: [],
660
675
  timestamp: Date.now()
661
676
  }));
662
- }, [f]), h = N(n.length);
663
- Q(() => {
664
- n.length > h.current && r.current?.scrollIntoView({ behavior: "smooth" }), h.current = n.length;
665
- }, [n]);
666
- const { sendMessage: D, abort: T } = Ne({
677
+ }, [N]), $ = C(m.length);
678
+ P(() => {
679
+ m.length > $.current && l.current?.scrollIntoView({ behavior: "smooth" }), $.current = m.length;
680
+ }, [m]);
681
+ const { sendMessage: z, abort: U } = Be({
667
682
  agentEndpoint: t,
668
683
  agentApiKey: s,
669
- onTextDelta: p((u) => {
670
- S(), g(u);
671
- }, [S, g]),
672
- onToolStart: p((u, L, P) => {
673
- S(), m({ id: u, name: L, input: P, status: "running" });
674
- }, [S, m]),
675
- onToolResult: p((u, L, P, U) => {
676
- C({ id: u, status: U ? "error" : "complete", result: P });
677
- }, [C]),
678
- onAddPortlet: p((u) => {
679
- y(u);
680
- }, [y]),
681
- onAddMarkdown: p((u) => {
682
- y(u);
683
- }, [y]),
684
- onTurnComplete: p(() => {
685
- o.current = !0;
684
+ onTextDelta: g((u) => {
685
+ M(), p(u);
686
+ }, [M, p]),
687
+ onToolStart: g((u, V, E) => {
688
+ M(), f({ id: u, name: V, input: E, status: "running" });
689
+ }, [M, f]),
690
+ onToolResult: g((u, V, E, se) => {
691
+ b({ id: u, status: se ? "error" : "complete", result: E });
692
+ }, [b]),
693
+ onAddPortlet: g((u) => {
694
+ D(u);
695
+ }, [D]),
696
+ onAddMarkdown: g((u) => {
697
+ D(u);
698
+ }, [D]),
699
+ onDashboardSaved: a,
700
+ onTurnComplete: g(() => {
701
+ w.current = !0;
686
702
  }, []),
687
- onDone: p((u) => {
688
- o.current = !1, k(u), d(!1);
689
- }, [k, d]),
690
- onError: p((u) => {
691
- S(), x(u), d(!1);
692
- }, [S, x, d])
693
- }), I = p((u) => {
694
- !u || l || (o.current = !1, f({
703
+ onDone: g((u) => {
704
+ w.current = !1, R(u), v(!1);
705
+ }, [R, v]),
706
+ onError: g((u) => {
707
+ M(), i(u), v(!1);
708
+ }, [M, i, v])
709
+ }), _ = g((u) => {
710
+ if (!u || F.current) return;
711
+ w.current = !1;
712
+ const V = L.current.map((E) => ({
713
+ role: E.role,
714
+ content: E.content,
715
+ ...E.toolCalls && E.toolCalls.length > 0 ? { toolCalls: E.toolCalls } : {}
716
+ }));
717
+ N({
695
718
  id: `msg-${Date.now()}`,
696
719
  role: "user",
697
720
  content: u,
698
721
  timestamp: Date.now()
699
- }), f({
722
+ }), N({
700
723
  id: `msg-${Date.now() + 1}`,
701
724
  role: "assistant",
702
725
  content: "",
703
726
  toolCalls: [],
704
727
  timestamp: Date.now()
705
- }), v(""), d(!0), D(u, w));
706
- }, [l, f, v, d, D, w]), j = p(() => {
707
- I(i.trim());
708
- }, [i, I]), q = p(() => {
709
- T(), d(!1);
710
- }, [T, d]), E = p(() => {
711
- v("");
712
- }, [v]), B = p(() => {
713
- T(), d(!1), M(), c?.();
714
- }, [T, d, M, c]);
715
- return /* @__PURE__ */ b("div", { className: "dc:flex dc:flex-col dc:h-full bg-dc-surface", children: [
716
- /* @__PURE__ */ b("div", { className: "dc:flex dc:items-center dc:justify-between dc:px-4 dc:py-3 border-dc-border dc:border-b", children: [
717
- /* @__PURE__ */ a("h3", { className: "dc:text-sm dc:font-semibold text-dc-text", children: "AI Assistant" }),
718
- n.length > 0 && /* @__PURE__ */ a(
719
- "button",
720
- {
721
- onClick: B,
722
- disabled: l,
723
- className: "dc:text-xs dc:px-2 dc:py-1 dc:rounded text-dc-text-secondary dc:hover:opacity-80 dc:disabled:opacity-40",
724
- title: "Clear notebook and chat",
725
- children: "Clear"
726
- }
727
- )
728
+ }), S(""), v(!0), z(u, B.current, V);
729
+ }, [N, S, v, z]);
730
+ P(() => {
731
+ if (o && !d.current && m.length === 0) {
732
+ d.current = !0;
733
+ const u = setTimeout(() => _(o), 100);
734
+ return () => clearTimeout(u);
735
+ }
736
+ }, [o, m.length, _]);
737
+ const W = C(h);
738
+ W.current = h;
739
+ const H = g(() => {
740
+ _(W.current.trim());
741
+ }, [_]), X = g(() => {
742
+ U(), v(!1);
743
+ }, [U, v]), Y = g(() => {
744
+ S("");
745
+ }, [S]), Z = g(() => {
746
+ U(), v(!1), y(), c?.();
747
+ }, [U, v, y, c]), ee = g(() => {
748
+ _(
749
+ "Save the current notebook as a dashboard with a professional layout, section headers, and appropriate filters."
750
+ );
751
+ }, [_]), te = !!a && !k && I > 0 && m.length > 0;
752
+ return /* @__PURE__ */ x("div", { className: "dc:flex dc:flex-col dc:h-full bg-dc-surface", children: [
753
+ /* @__PURE__ */ x("div", { className: "dc:flex dc:items-center dc:justify-between dc:px-4 dc:py-3 border-dc-border dc:border-b", children: [
754
+ /* @__PURE__ */ r("h3", { className: "dc:text-sm dc:font-semibold text-dc-text", children: "AI Assistant" }),
755
+ /* @__PURE__ */ x("div", { className: "dc:flex dc:items-center dc:gap-1", children: [
756
+ te && /* @__PURE__ */ r(
757
+ "button",
758
+ {
759
+ onClick: ee,
760
+ className: "dc:text-xs dc:px-2 dc:py-1 dc:rounded text-dc-accent dc:hover:opacity-80",
761
+ title: "Save notebook as a dashboard",
762
+ children: "Save as Dashboard"
763
+ }
764
+ ),
765
+ m.length > 0 && /* @__PURE__ */ r(
766
+ "button",
767
+ {
768
+ onClick: Z,
769
+ disabled: k,
770
+ className: "dc:text-xs dc:px-2 dc:py-1 dc:rounded text-dc-text-secondary dc:hover:opacity-80 dc:disabled:opacity-40",
771
+ title: "Clear notebook and chat",
772
+ children: "Clear"
773
+ }
774
+ )
775
+ ] })
728
776
  ] }),
729
- /* @__PURE__ */ b("div", { className: "dc:flex-1 dc:overflow-y-auto dc:px-4 dc:py-3", children: [
730
- n.length === 0 ? /* @__PURE__ */ a(Ie, {}) : n.map((u) => /* @__PURE__ */ a(De, { message: u }, u.id)),
731
- /* @__PURE__ */ a("div", { ref: r })
777
+ /* @__PURE__ */ x("div", { className: "dc:flex-1 dc:overflow-y-auto dc:px-4 dc:py-3", children: [
778
+ m.length === 0 ? /* @__PURE__ */ r(qe, {}) : m.map((u) => /* @__PURE__ */ r(
779
+ _e,
780
+ {
781
+ message: u,
782
+ loadingComponent: n
783
+ },
784
+ u.id
785
+ )),
786
+ /* @__PURE__ */ r("div", { ref: l })
732
787
  ] }),
733
- /* @__PURE__ */ a(
734
- Te,
788
+ /* @__PURE__ */ r(
789
+ Ve,
735
790
  {
736
- value: i,
737
- onChange: v,
738
- onSend: j,
739
- onStop: q,
740
- onContinue: E,
741
- isStreaming: l,
742
- showContinue: !l && n.length > 0
791
+ value: h,
792
+ onChange: S,
793
+ onSend: H,
794
+ onStop: X,
795
+ onContinue: Y,
796
+ isStreaming: k,
797
+ showContinue: !k && m.length > 0
743
798
  }
744
799
  )
745
800
  ] });
746
801
  });
747
- function Ie() {
748
- return /* @__PURE__ */ a("div", { className: "dc:flex dc:items-center dc:justify-center dc:h-full", children: /* @__PURE__ */ b("div", { className: "dc:text-center dc:max-w-xs", children: [
749
- /* @__PURE__ */ a("div", { className: "dc:text-lg dc:font-semibold text-dc-text dc:mb-2", children: "Data Analysis Assistant" }),
750
- /* @__PURE__ */ a("p", { className: "dc:text-sm text-dc-text-secondary dc:mb-4", children: "Ask me about your data and I'll create visualizations and insights." }),
751
- /* @__PURE__ */ b("div", { className: "dc:space-y-2 dc:text-xs text-dc-text-muted", children: [
752
- /* @__PURE__ */ a("p", { children: '"Show me employee productivity trends"' }),
753
- /* @__PURE__ */ a("p", { children: '"What are the top departments by headcount?"' }),
754
- /* @__PURE__ */ a("p", { children: '"Compare revenue across product categories"' })
802
+ function qe() {
803
+ return /* @__PURE__ */ r("div", { className: "dc:flex dc:items-center dc:justify-center dc:h-full", children: /* @__PURE__ */ x("div", { className: "dc:text-center dc:max-w-xs", children: [
804
+ /* @__PURE__ */ r("div", { className: "dc:text-lg dc:font-semibold text-dc-text dc:mb-2", children: "Data Analysis Assistant" }),
805
+ /* @__PURE__ */ r("p", { className: "dc:text-sm text-dc-text-secondary dc:mb-4", children: "Ask me about your data and I'll create visualizations and insights." }),
806
+ /* @__PURE__ */ x("div", { className: "dc:space-y-2 dc:text-xs text-dc-text-muted", children: [
807
+ /* @__PURE__ */ r("p", { children: '"Show me employee productivity trends"' }),
808
+ /* @__PURE__ */ r("p", { children: '"What are the top departments by headcount?"' }),
809
+ /* @__PURE__ */ r("p", { children: '"Compare revenue across product categories"' })
755
810
  ] })
756
811
  ] }) });
757
812
  }
758
- function Ee({
813
+ function Ue({
759
814
  agentEndpoint: e,
760
815
  agentApiKey: t,
761
816
  onSave: s,
762
817
  onDirtyStateChange: c,
763
- className: r
818
+ onDashboardSaved: a,
819
+ loadingComponent: n,
820
+ className: o,
821
+ initialPrompt: l
764
822
  }) {
765
- const [o, n] = F(60), l = N(null), i = N(!1), f = A((y) => y.blocks.length), g = A((y) => y.messages.length), x = A((y) => y.save), m = N({ blockCount: f, msgCount: g });
766
- Q(() => {
767
- const y = f !== m.current.blockCount || g !== m.current.msgCount;
823
+ const [d, w] = j(60), m = C(null), k = C(!1), h = A((y) => y.blocks.length), N = A((y) => y.messages.length), p = A((y) => y.isStreaming), i = A((y) => y.save), f = C({ blockCount: h, msgCount: N });
824
+ P(() => {
825
+ const y = h !== f.current.blockCount || N !== f.current.msgCount;
768
826
  c?.(y);
769
- }, [f, g, c]);
770
- const C = N(), d = N(s);
771
- d.current = s;
772
- const v = N(f > 0 || g > 0);
773
- Q(() => {
774
- if ((f > 0 || g > 0) && (v.current = !0), !(!d.current || !v.current))
775
- return C.current && clearTimeout(C.current), C.current = setTimeout(() => {
776
- const y = x();
777
- d.current?.(y);
827
+ }, [h, N, c]);
828
+ const b = C(), v = C(!1), S = C(s);
829
+ S.current = s;
830
+ const R = C(h > 0 || N > 0);
831
+ P(() => {
832
+ if ((h > 0 || N > 0) && (R.current = !0), !(!S.current || !R.current)) {
833
+ if (p) {
834
+ v.current = !0, b.current && clearTimeout(b.current);
835
+ return;
836
+ }
837
+ return b.current && clearTimeout(b.current), b.current = setTimeout(() => {
838
+ v.current = !1;
839
+ const y = i();
840
+ S.current?.(y);
778
841
  }, 1e3), () => {
779
- C.current && clearTimeout(C.current);
842
+ b.current && clearTimeout(b.current);
780
843
  };
781
- }, [f, g, x]);
782
- const k = p(() => {
783
- d.current && (C.current && clearTimeout(C.current), d.current({ blocks: [], messages: [] }));
784
- }, []), w = p((y) => {
785
- y.preventDefault(), i.current = !0;
786
- const M = (h) => {
787
- if (!i.current || !l.current) return;
788
- const D = l.current.getBoundingClientRect(), T = (h.clientX - D.left) / D.width * 100;
789
- n(Math.min(Math.max(T, 30), 80));
790
- }, S = () => {
791
- i.current = !1, document.removeEventListener("mousemove", M), document.removeEventListener("mouseup", S);
844
+ }
845
+ }, [h, N, p, i]), P(() => {
846
+ !p && v.current && S.current && R.current && (b.current && clearTimeout(b.current), b.current = setTimeout(() => {
847
+ v.current = !1;
848
+ const y = i();
849
+ S.current?.(y);
850
+ }, 1e3));
851
+ }, [p, i]);
852
+ const T = g(() => {
853
+ S.current && (b.current && clearTimeout(b.current), S.current({ blocks: [], messages: [] }));
854
+ }, []), D = g((y) => {
855
+ y.preventDefault(), k.current = !0;
856
+ const I = (F) => {
857
+ if (!k.current || !m.current) return;
858
+ const B = m.current.getBoundingClientRect(), M = (F.clientX - B.left) / B.width * 100;
859
+ w(Math.min(Math.max(M, 30), 80));
860
+ }, L = () => {
861
+ k.current = !1, document.removeEventListener("mousemove", I), document.removeEventListener("mouseup", L);
792
862
  };
793
- document.addEventListener("mousemove", M), document.addEventListener("mouseup", S);
863
+ document.addEventListener("mousemove", I), document.addEventListener("mouseup", L);
794
864
  }, []);
795
- return /* @__PURE__ */ b(
865
+ return /* @__PURE__ */ x(
796
866
  "div",
797
867
  {
798
- ref: l,
799
- className: `dc:flex dc:h-full dc:w-full dc:overflow-hidden bg-dc-surface-secondary ${r || ""}`,
868
+ ref: m,
869
+ className: `dc:flex dc:h-full dc:w-full dc:overflow-hidden bg-dc-surface-secondary ${o || ""}`,
800
870
  children: [
801
- /* @__PURE__ */ a(
871
+ /* @__PURE__ */ r(
802
872
  "div",
803
873
  {
804
874
  className: "dc:h-full dc:overflow-hidden",
805
- style: { width: `${o}%` },
806
- children: /* @__PURE__ */ a(Ce, {})
875
+ style: { width: `${d}%` },
876
+ children: /* @__PURE__ */ r(Ee, {})
807
877
  }
808
878
  ),
809
- /* @__PURE__ */ a(
879
+ /* @__PURE__ */ r(
810
880
  "div",
811
881
  {
812
882
  className: "dc:w-1 dc:h-full dc:cursor-col-resize dc:flex-shrink-0 dc:transition-colors bg-dc-border dc:hover:bg-dc-accent",
813
- onMouseDown: w
883
+ onMouseDown: D
814
884
  }
815
885
  ),
816
- /* @__PURE__ */ a(
886
+ /* @__PURE__ */ r(
817
887
  "div",
818
888
  {
819
889
  className: "dc:h-full dc:overflow-hidden",
820
- style: { width: `${100 - o}%` },
821
- children: /* @__PURE__ */ a(
822
- Me,
890
+ style: { width: `${100 - d}%` },
891
+ children: /* @__PURE__ */ r(
892
+ je,
823
893
  {
824
894
  agentEndpoint: e,
825
895
  agentApiKey: t,
826
- onClear: k
896
+ onClear: T,
897
+ onDashboardSaved: a,
898
+ loadingComponent: n,
899
+ initialPrompt: l
827
900
  }
828
901
  )
829
902
  }
@@ -832,208 +905,208 @@ function Ee({
832
905
  }
833
906
  );
834
907
  }
835
- const Oe = R.memo(function({
908
+ const st = Q.memo(function({
836
909
  config: t,
837
910
  ...s
838
911
  }) {
839
- return /* @__PURE__ */ a(ie, { initialConfig: t, children: /* @__PURE__ */ a(Ee, { ...s }) });
912
+ return /* @__PURE__ */ r(xe, { initialConfig: t, children: /* @__PURE__ */ r(Ue, { ...s }) });
840
913
  });
841
- function $e() {
842
- return /* @__PURE__ */ a("div", { children: "Analytics Page - Coming in Phase 4" });
914
+ function rt() {
915
+ return /* @__PURE__ */ r("div", { children: "Analytics Page - Coming in Phase 4" });
843
916
  }
844
- const Be = _("segment");
845
- function ze({
917
+ const Ke = q("segment");
918
+ function at({
846
919
  className: e = ""
847
920
  }) {
848
- return /* @__PURE__ */ a(
921
+ return /* @__PURE__ */ r(
849
922
  "div",
850
923
  {
851
924
  className: `dc:flex dc:items-center dc:justify-center bg-dc-bg-secondary ${e}`,
852
- children: /* @__PURE__ */ b("div", { className: "dc:text-center", children: [
853
- /* @__PURE__ */ a(
854
- Be,
925
+ children: /* @__PURE__ */ x("div", { className: "dc:text-center", children: [
926
+ /* @__PURE__ */ r(
927
+ Ke,
855
928
  {
856
929
  className: "dc:w-8 dc:h-8 dc:mx-auto dc:mb-2 text-dc-text-muted dc:opacity-50"
857
930
  }
858
931
  ),
859
- /* @__PURE__ */ a("span", { className: "dc:text-xs text-dc-text-muted", children: "No preview" })
932
+ /* @__PURE__ */ r("span", { className: "dc:text-xs text-dc-text-muted", children: "No preview" })
860
933
  ] })
861
934
  }
862
935
  );
863
936
  }
864
937
  export {
865
- Oe as AgenticNotebook,
866
- He as AnalysisBuilder,
867
- Ge as AnalyticsDashboard,
868
- $e as AnalyticsPage,
869
- H as AnalyticsPortlet,
870
- Xe as ChartErrorBoundary,
871
- Ye as ConfirmModal,
872
- ts as CubeClient,
873
- ss as CubeProvider,
874
- Ot as DEFAULT_ICONS,
875
- Ze as DashboardEditModal,
876
- et as DashboardGrid,
877
- tt as DashboardStoreProvider,
878
- ze as DashboardThumbnailPlaceholder,
879
- st as DrillBreadcrumb,
880
- at as DrillMenu,
881
- Ss as ExecutionPlanPanel,
882
- As as ExplainAIPanel,
883
- bs as LazyChart,
884
- hs as LoadingIndicator,
885
- rt as Modal,
886
- ie as NotebookStoreProvider,
887
- X as PortletAnalysisModal,
888
- ct as PortletContainer,
889
- as as ScrollContainerProvider,
890
- La as THEME_PRESETS,
891
- Ra as applyTheme,
892
- Sa as buildFunnelConfigFromQueries,
893
- Aa as buildServerFunnelQuery,
894
- rs as captureThumbnail,
895
- Ds as compressAndEncode,
896
- cs as createCubeClient,
897
- ca as createDashboardLayout,
898
- ot as createDashboardStore,
899
- nt as createDefaultConfig,
900
- dt as createDefaultFlowConfig,
901
- it as createDefaultFunnelConfig,
902
- lt as createDefaultQueryConfig,
903
- ut as createDefaultRetentionConfig,
904
- mt as createDefaultWorkspace,
905
- Ka as createExplainQueryKey,
906
- da as createFlowQueryKey,
907
- ia as createFunnelQueryKey,
908
- de as createNotebookStore,
909
- Ts as decodeAndDecompress,
910
- Ms as detectAsymmetricDateRanges,
911
- Is as detectMeasureCollisions,
912
- oa as formatChartData,
913
- Da as formatDuration,
914
- la as generateQueryLabel,
915
- Es as generateShareUrl,
916
- Bs as getAvailableBindingKeyDimensions,
917
- ys as getAvailableChartTypes,
918
- Ta as getBindingKeyField,
919
- Ls as getBindingKeyLabel,
920
- $t as getChartTypeIcon,
921
- ua as getCombinedFields,
922
- Ma as getCubeNameFromQuery,
923
- zt as getFieldTypeIcon,
924
- _ as getIcon,
925
- Wt as getIconData,
926
- Jt as getIconRegistry,
927
- Ht as getIconsByCategory,
928
- Gt as getMeasureTypeIcon,
929
- ma as getQueryIndices,
930
- pa as getQueryLabels,
931
- Pa as getTheme,
932
- Qa as getThemeVariable,
933
- xs as getUnavailableChartTypes,
934
- Rs as getValidationSummary,
935
- Za as highlightCodeBlocks,
936
- vs as isChartTypeAvailable,
937
- Fa as isDarkMode,
938
- pt as isFlowConfig,
939
- ht as isFunnelConfig,
940
- Ia as isFunnelData,
941
- Ps as isMinimumFunnelConfigValid,
942
- ft as isMultiQuery,
943
- gt as isMultiQueryConfig,
944
- ha as isMultiQueryData,
945
- Qs as isMultiQueryValid,
946
- bt as isQueryConfig,
947
- yt as isRetentionConfig,
948
- Ga as isSankeyData,
949
- Xa as isServerFlowQuery,
950
- xt as isServerFunnelQuery,
951
- Fs as isShareableSize,
952
- vt as isSingleQuery,
953
- os as isThumbnailCaptureAvailable,
954
- Ct as isValidAnalysisConfig,
955
- kt as isValidAnalysisWorkspace,
956
- Cs as isValidChartType,
957
- fa as mergeQueryResults,
958
- ga as mergeResultsByKey,
959
- ba as mergeResultsConcat,
960
- Nt as migrateConfig,
961
- wt as migrateLegacyPortlet,
962
- _s as parseShareUrl,
963
- ks as preloadChart,
964
- Ns as preloadCharts,
965
- Xt as registerIcons,
966
- Yt as resetIcons,
967
- _a as resetTheme,
968
- St as selectAllActions,
969
- pe as selectBlockActions,
970
- le as selectBlocks,
971
- Vs as selectBreakdowns,
972
- js as selectChartConfig,
973
- me as selectChatActions,
974
- ue as selectChatState,
975
- qs as selectCurrentState,
976
- At as selectDebugData,
977
- Dt as selectDebugDataActions,
978
- Tt as selectEditModeActions,
979
- Mt as selectEditModeState,
980
- Us as selectFilters,
981
- Ks as selectFunnelState,
982
- Ke as selectInputValue,
983
- qe as selectIsStreaming,
984
- It as selectLayoutActions,
985
- Et as selectLayoutState,
986
- je as selectMessages,
987
- Os as selectMetrics,
988
- Bt as selectModalActions,
989
- Lt as selectModalState,
990
- $s as selectMultiQueryState,
991
- Rt as selectPortletDebugData,
992
- Ue as selectSessionId,
993
- Pt as selectThumbnailDirty,
994
- zs as selectUIState,
995
- Zt as setIcon,
996
- Va as setTheme,
997
- ja as setThemeVariable,
998
- Ea as transformServerFunnelResult,
999
- Ne as useAgentChat,
1000
- Ws as useAnalysisBuilder,
1001
- Js as useAnalysisBuilderStore,
1002
- oe as useCubeApi,
1003
- ns as useCubeContext,
1004
- ds as useCubeFeatures,
1005
- fs as useCubeFieldLabel,
1006
- ya as useCubeLoadQuery,
1007
- is as useCubeMeta,
1008
- ls as useCubeMetaQuery,
1009
- xa as useCubeQuery,
1010
- Qt as useDashboard,
1011
- Ft as useDashboardStore,
1012
- _t as useDashboardStoreApi,
1013
- Vt as useDashboardStoreOptional,
1014
- jt as useDrillInteraction,
1015
- Oa as useDryRunQueries,
1016
- $a as useDryRunQuery,
1017
- qt as useElementVisibility,
1018
- za as useExplainAI,
1019
- Wa as useExplainQuery,
1020
- va as useFlowQuery,
1021
- Ca as useFunnelQuery,
1022
- ka as useMultiCubeLoadQuery,
1023
- Ja as useMultiDryRunQueries,
938
+ st as AgenticNotebook,
939
+ ot as AnalysisBuilder,
940
+ dt as AnalyticsDashboard,
941
+ rt as AnalyticsPage,
942
+ ae as AnalyticsPortlet,
943
+ it as ChartErrorBoundary,
944
+ lt as ConfirmModal,
945
+ ps as CubeClient,
946
+ hs as CubeProvider,
947
+ ss as DEFAULT_ICONS,
948
+ ut as DashboardEditModal,
949
+ mt as DashboardGrid,
950
+ pt as DashboardStoreProvider,
951
+ at as DashboardThumbnailPlaceholder,
952
+ ht as DrillBreadcrumb,
953
+ ft as DrillMenu,
954
+ Qs as ExecutionPlanPanel,
955
+ Fs as ExplainAIPanel,
956
+ Ts as LazyChart,
957
+ ge as LoadingIndicator,
958
+ gt as Modal,
959
+ xe as NotebookStoreProvider,
960
+ ne as PortletAnalysisModal,
961
+ bt as PortletContainer,
962
+ fs as ScrollContainerProvider,
963
+ Or as THEME_PRESETS,
964
+ $r as applyTheme,
965
+ Qr as buildFunnelConfigFromQueries,
966
+ Fr as buildServerFunnelQuery,
967
+ gs as captureThumbnail,
968
+ _s as compressAndEncode,
969
+ bs as createCubeClient,
970
+ gr as createDashboardLayout,
971
+ yt as createDashboardStore,
972
+ xt as createDefaultConfig,
973
+ vt as createDefaultFlowConfig,
974
+ Ct as createDefaultFunnelConfig,
975
+ kt as createDefaultQueryConfig,
976
+ Nt as createDefaultRetentionConfig,
977
+ wt as createDefaultWorkspace,
978
+ ea as createExplainQueryKey,
979
+ xr as createFlowQueryKey,
980
+ vr as createFunnelQueryKey,
981
+ ye as createNotebookStore,
982
+ Vs as decodeAndDecompress,
983
+ js as detectAsymmetricDateRanges,
984
+ qs as detectMeasureCollisions,
985
+ br as formatChartData,
986
+ _r as formatDuration,
987
+ Cr as generateQueryLabel,
988
+ Us as generateShareUrl,
989
+ Ks as getAvailableBindingKeyDimensions,
990
+ Ms as getAvailableChartTypes,
991
+ Vr as getBindingKeyField,
992
+ Os as getBindingKeyLabel,
993
+ rs as getChartTypeIcon,
994
+ kr as getCombinedFields,
995
+ jr as getCubeNameFromQuery,
996
+ as as getFieldTypeIcon,
997
+ q as getIcon,
998
+ cs as getIconData,
999
+ ns as getIconRegistry,
1000
+ os as getIconsByCategory,
1001
+ ds as getMeasureTypeIcon,
1002
+ Nr as getQueryIndices,
1003
+ wr as getQueryLabels,
1004
+ zr as getTheme,
1005
+ Wr as getThemeVariable,
1006
+ Is as getUnavailableChartTypes,
1007
+ $s as getValidationSummary,
1008
+ la as highlightCodeBlocks,
1009
+ Es as isChartTypeAvailable,
1010
+ Jr as isDarkMode,
1011
+ St as isFlowConfig,
1012
+ Dt as isFunnelConfig,
1013
+ qr as isFunnelData,
1014
+ zs as isMinimumFunnelConfigValid,
1015
+ At as isMultiQuery,
1016
+ Tt as isMultiQueryConfig,
1017
+ Sr as isMultiQueryData,
1018
+ Ws as isMultiQueryValid,
1019
+ Mt as isQueryConfig,
1020
+ It as isRetentionConfig,
1021
+ oa as isSankeyData,
1022
+ da as isServerFlowQuery,
1023
+ Et as isServerFunnelQuery,
1024
+ Js as isShareableSize,
1025
+ Rt as isSingleQuery,
1026
+ ys as isThumbnailCaptureAvailable,
1027
+ Bt as isValidAnalysisConfig,
1028
+ Lt as isValidAnalysisWorkspace,
1029
+ Rs as isValidChartType,
1030
+ Dr as mergeQueryResults,
1031
+ Ar as mergeResultsByKey,
1032
+ Tr as mergeResultsConcat,
1033
+ Pt as migrateConfig,
1034
+ Qt as migrateLegacyPortlet,
1035
+ Gs as parseShareUrl,
1036
+ Bs as preloadChart,
1037
+ Ls as preloadCharts,
1038
+ is as registerIcons,
1039
+ ls as resetIcons,
1040
+ Gr as resetTheme,
1041
+ Ft as selectAllActions,
1042
+ Ne as selectBlockActions,
1043
+ ve as selectBlocks,
1044
+ Hs as selectBreakdowns,
1045
+ Xs as selectChartConfig,
1046
+ ke as selectChatActions,
1047
+ Ce as selectChatState,
1048
+ Ys as selectCurrentState,
1049
+ _t as selectDebugData,
1050
+ Vt as selectDebugDataActions,
1051
+ jt as selectEditModeActions,
1052
+ qt as selectEditModeState,
1053
+ Zs as selectFilters,
1054
+ er as selectFunnelState,
1055
+ tt as selectInputValue,
1056
+ Ze as selectIsStreaming,
1057
+ Ut as selectLayoutActions,
1058
+ Kt as selectLayoutState,
1059
+ Ye as selectMessages,
1060
+ tr as selectMetrics,
1061
+ Ot as selectModalActions,
1062
+ $t as selectModalState,
1063
+ sr as selectMultiQueryState,
1064
+ zt as selectPortletDebugData,
1065
+ et as selectSessionId,
1066
+ Wt as selectThumbnailDirty,
1067
+ rr as selectUIState,
1068
+ us as setIcon,
1069
+ Hr as setTheme,
1070
+ Xr as setThemeVariable,
1071
+ Ur as transformServerFunnelResult,
1072
+ Be as useAgentChat,
1073
+ ar as useAnalysisBuilder,
1074
+ cr as useAnalysisBuilderStore,
1075
+ fe as useCubeApi,
1076
+ xs as useCubeContext,
1077
+ vs as useCubeFeatures,
1078
+ Ds as useCubeFieldLabel,
1079
+ Mr as useCubeLoadQuery,
1080
+ Cs as useCubeMeta,
1081
+ ks as useCubeMetaQuery,
1082
+ Ir as useCubeQuery,
1083
+ Jt as useDashboard,
1084
+ Gt as useDashboardStore,
1085
+ Ht as useDashboardStoreApi,
1086
+ Xt as useDashboardStoreOptional,
1087
+ Yt as useDrillInteraction,
1088
+ ta as useDryRunQueries,
1089
+ sa as useDryRunQuery,
1090
+ Zt as useElementVisibility,
1091
+ ra as useExplainAI,
1092
+ aa as useExplainQuery,
1093
+ Er as useFlowQuery,
1094
+ Rr as useFunnelQuery,
1095
+ Br as useMultiCubeLoadQuery,
1096
+ ca as useMultiDryRunQueries,
1024
1097
  A as useNotebookStore,
1025
- us as useScrollContainer,
1026
- Ut as useScrollDetection,
1027
- aa as useTheme,
1028
- Hs as validateBindingKeyExists,
1029
- Gs as validateBindingKeyForSteps,
1030
- Xs as validateFunnelConfig,
1031
- Na as validateMergeKey,
1032
- Ys as validateMergeKeys,
1033
- Zs as validateMultiQueryConfig,
1034
- ea as validateStepQueries,
1035
- ta as validateTimeDimensionAlignment,
1036
- ms as warnIfScreenshotLibMissing,
1037
- qa as watchThemeChanges
1098
+ Ns as useScrollContainer,
1099
+ es as useScrollDetection,
1100
+ hr as useTheme,
1101
+ nr as validateBindingKeyExists,
1102
+ or as validateBindingKeyForSteps,
1103
+ dr as validateFunnelConfig,
1104
+ Lr as validateMergeKey,
1105
+ ir as validateMergeKeys,
1106
+ lr as validateMultiQueryConfig,
1107
+ ur as validateStepQueries,
1108
+ mr as validateTimeDimensionAlignment,
1109
+ ws as warnIfScreenshotLibMissing,
1110
+ Yr as watchThemeChanges
1038
1111
  };
1039
1112
  //# sourceMappingURL=index.js.map