drizzle-cube 0.4.13 → 0.4.15

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 +585 -522
  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
@@ -0,0 +1,269 @@
1
+ import { jsx as r, jsxs as w, Fragment as X } from "react/jsx-runtime";
2
+ import K, { useRef as G, useState as J, useLayoutEffect as P, useMemo as T } from "react";
3
+ import { f as Q } from "./charts-core-CU9u_HtL.js";
4
+ const Z = "#22c55e", ee = "#ef4444", I = "#94a3b8", j = 200;
5
+ function S(n) {
6
+ if (n == null) return null;
7
+ const s = typeof n == "number" ? n : parseFloat(String(n));
8
+ return isNaN(s) ? null : s;
9
+ }
10
+ function te({
11
+ x: n,
12
+ candleWidth: s,
13
+ openY: l,
14
+ closeY: h,
15
+ highY: f,
16
+ lowY: b,
17
+ isBullish: F,
18
+ bullColor: x,
19
+ bearColor: p,
20
+ showWicks: A,
21
+ label: k
22
+ }) {
23
+ const O = F ? x : p, v = Math.min(l, h), g = Math.max(l, h), $ = Math.max(g - v, 1), C = s / 2;
24
+ return /* @__PURE__ */ w("g", { "data-testid": `candle-${k}`, children: [
25
+ /* @__PURE__ */ r(
26
+ "rect",
27
+ {
28
+ x: n - C,
29
+ y: v,
30
+ width: s,
31
+ height: $,
32
+ fill: O,
33
+ "data-testid": `candle-body-${k}`,
34
+ "data-bullish": F
35
+ }
36
+ ),
37
+ A && /* @__PURE__ */ w(X, { children: [
38
+ /* @__PURE__ */ r(
39
+ "line",
40
+ {
41
+ x1: n,
42
+ y1: f,
43
+ x2: n,
44
+ y2: v,
45
+ stroke: I,
46
+ strokeWidth: 1,
47
+ "data-testid": `wick-high-${k}`
48
+ }
49
+ ),
50
+ /* @__PURE__ */ r(
51
+ "line",
52
+ {
53
+ x1: n,
54
+ y1: g,
55
+ x2: n,
56
+ y2: b,
57
+ stroke: I,
58
+ strokeWidth: 1,
59
+ "data-testid": `wick-low-${k}`
60
+ }
61
+ )
62
+ ] })
63
+ ] });
64
+ }
65
+ function ie({
66
+ domainMin: n,
67
+ domainMax: s,
68
+ innerHeight: l,
69
+ tickCount: h,
70
+ format: f
71
+ }) {
72
+ const b = T(() => {
73
+ const x = (s - n) / (h - 1);
74
+ return Array.from({ length: h }, (p, A) => n + A * x);
75
+ }, [n, s, h]), F = (x) => l - (x - n) / (s - n) * l;
76
+ return /* @__PURE__ */ w("g", { "data-testid": "y-axis", children: [
77
+ /* @__PURE__ */ r("line", { y1: 0, y2: l, stroke: "currentColor", strokeWidth: 1 }),
78
+ b.map((x, p) => /* @__PURE__ */ w("g", { transform: `translate(0, ${F(x)})`, children: [
79
+ /* @__PURE__ */ r("line", { x1: 0, x2: -6, stroke: "currentColor", strokeWidth: 1 }),
80
+ /* @__PURE__ */ r(
81
+ "text",
82
+ {
83
+ x: -10,
84
+ textAnchor: "end",
85
+ dominantBaseline: "middle",
86
+ fontSize: 11,
87
+ fill: "currentColor",
88
+ className: "text-dc-text-secondary",
89
+ children: f ? f(x) : x.toLocaleString()
90
+ }
91
+ ),
92
+ /* @__PURE__ */ r("line", { x1: 0, x2: "100%", stroke: "currentColor", strokeOpacity: 0.1, strokeWidth: 1 })
93
+ ] }, p))
94
+ ] });
95
+ }
96
+ const oe = K.memo(function({
97
+ data: s,
98
+ chartConfig: l,
99
+ displayConfig: h = {},
100
+ height: f = "100%",
101
+ onDataPointClick: b,
102
+ drillEnabled: F
103
+ }) {
104
+ const x = G(null), [p, A] = J({ width: 0, height: 0 });
105
+ P(() => {
106
+ const t = x.current;
107
+ if (!t) return;
108
+ const o = new ResizeObserver((c) => {
109
+ for (const d of c) {
110
+ const { width: a, height: y } = d.contentRect;
111
+ a > 0 && y > 0 && A({ width: a, height: y });
112
+ }
113
+ });
114
+ o.observe(t);
115
+ const i = t.getBoundingClientRect();
116
+ return i.width > 0 && i.height > 0 && A({ width: i.width, height: i.height }), () => o.disconnect();
117
+ }, []);
118
+ const k = h?.bullColor ?? Z, O = h?.bearColor ?? ee, v = h?.showWicks ?? !0, g = h?.rangeMode ?? "ohlc", $ = h?.leftYAxisFormat, { xField: C, openField: U, closeField: q, highField: R, lowField: W, configError: E } = T(() => {
119
+ const t = Array.isArray(l?.xAxis) ? l.xAxis[0] : l?.xAxis ?? l?.x, o = Array.isArray(l?.yAxis) ? l.yAxis : [], i = o[0] ?? "", c = (g === "range" ? o[0] : o[1]) ?? "", d = (g === "range" ? o[0] : o[2]) ?? "", a = (g === "range" ? o[1] : o[3]) ?? "";
120
+ return t ? g === "range" && (!d || !a) ? {
121
+ xField: t,
122
+ openField: i,
123
+ closeField: c,
124
+ highField: d,
125
+ lowField: a,
126
+ configError: "Range mode requires at least 2 measures (high, low) in Y-Axis"
127
+ } : g === "ohlc" && (!i || !c) ? {
128
+ xField: t,
129
+ openField: i,
130
+ closeField: c,
131
+ highField: d,
132
+ lowField: a,
133
+ configError: "OHLC mode requires at least 2 measures (open, close) in Y-Axis"
134
+ } : { xField: t, openField: i, closeField: c, highField: d, lowField: a, configError: null } : {
135
+ xField: t,
136
+ openField: i,
137
+ closeField: c,
138
+ highField: d,
139
+ lowField: a,
140
+ configError: "Candlestick chart requires an X-Axis (time or category dimension)"
141
+ };
142
+ }, [l, g]), B = T(() => {
143
+ if (E || !s || s.length === 0) return [];
144
+ const t = s.slice(0, j), o = [];
145
+ for (let i = 0; i < t.length; i++) {
146
+ const c = t[i], d = String(c[C] ?? `Bar ${i + 1}`), a = S(c[U]), y = S(c[q]);
147
+ if (a === null || y === null) continue;
148
+ let m = a, u = y;
149
+ const N = R ? S(c[R]) ?? Math.max(m, u) : Math.max(m, u), M = W ? S(c[W]) ?? Math.min(m, u) : Math.min(m, u);
150
+ g === "range" && (m = M, u = N), o.push({
151
+ label: d,
152
+ open: m,
153
+ close: u,
154
+ high: Math.max(m, u, N),
155
+ low: Math.min(m, u, M),
156
+ isBullish: u >= m,
157
+ originalIndex: i
158
+ });
159
+ }
160
+ return o;
161
+ }, [s, C, U, q, R, W, g, E]);
162
+ try {
163
+ if (!s || s.length === 0)
164
+ return /* @__PURE__ */ r("div", { className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted", style: { height: f }, children: /* @__PURE__ */ w("div", { className: "dc:text-center", children: [
165
+ /* @__PURE__ */ r("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "No data available" }),
166
+ /* @__PURE__ */ r("div", { className: "dc:text-xs text-dc-text-secondary", children: "No data points to display in candlestick chart" })
167
+ ] }) });
168
+ if (E)
169
+ return /* @__PURE__ */ r("div", { className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning", style: { height: f }, children: /* @__PURE__ */ w("div", { className: "dc:text-center", children: [
170
+ /* @__PURE__ */ r("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "Configuration Error" }),
171
+ /* @__PURE__ */ r("div", { className: "dc:text-xs", children: E })
172
+ ] }) });
173
+ const t = { top: 20, right: 20, bottom: 60, left: 70 }, o = p.width || 600, i = typeof f == "number" ? f : p.height || 400, c = Math.max(o - t.left - t.right, 50), d = Math.max(
174
+ (typeof i == "number" ? i : parseInt(String(i)) || 400) - t.top - t.bottom,
175
+ 50
176
+ ), a = B.flatMap((e) => [e.low, e.high]), y = Math.min(...a), m = Math.max(...a), u = (m - y) * 0.05 || 1, N = y - u, M = m + u, L = (e) => d - (e - N) / (M - N) * d, _ = c / B.length, V = Math.min(_ * 0.7, 20), z = s.length > j;
177
+ return /* @__PURE__ */ w("div", { ref: x, className: "dc:relative dc:w-full", style: { height: f }, children: [
178
+ /* @__PURE__ */ r(
179
+ "svg",
180
+ {
181
+ width: "100%",
182
+ height: z ? "calc(100% - 20px)" : "100%",
183
+ viewBox: `0 0 ${o} ${typeof i == "number" ? i : 400}`,
184
+ "data-testid": "candlestick-svg",
185
+ children: /* @__PURE__ */ w("g", { transform: `translate(${t.left}, ${t.top})`, children: [
186
+ /* @__PURE__ */ r(
187
+ ie,
188
+ {
189
+ domainMin: N,
190
+ domainMax: M,
191
+ innerHeight: d,
192
+ tickCount: 5,
193
+ format: $ ? (e) => Q(e, $) : void 0
194
+ }
195
+ ),
196
+ B.map((e, D) => {
197
+ const H = _ * D + _ / 2;
198
+ return /* @__PURE__ */ w(
199
+ "g",
200
+ {
201
+ onClick: (Y) => {
202
+ b && F && b({
203
+ dataPoint: { ...e },
204
+ clickedField: C ?? "",
205
+ xValue: e.label,
206
+ position: { x: Y.clientX, y: Y.clientY },
207
+ nativeEvent: Y
208
+ });
209
+ },
210
+ cursor: F ? "pointer" : void 0,
211
+ children: [
212
+ /* @__PURE__ */ r("title", { children: `${e.label}: O=${e.open} H=${e.high} L=${e.low} C=${e.close}` }),
213
+ /* @__PURE__ */ r(
214
+ te,
215
+ {
216
+ x: H,
217
+ candleWidth: V,
218
+ openY: L(e.open),
219
+ closeY: L(e.close),
220
+ highY: L(e.high),
221
+ lowY: L(e.low),
222
+ isBullish: e.isBullish,
223
+ bullColor: k,
224
+ bearColor: O,
225
+ showWicks: v,
226
+ label: e.label
227
+ }
228
+ ),
229
+ /* @__PURE__ */ r(
230
+ "text",
231
+ {
232
+ x: H,
233
+ y: d + 20,
234
+ textAnchor: "middle",
235
+ fontSize: 10,
236
+ fill: "currentColor",
237
+ className: "text-dc-text-secondary",
238
+ "data-testid": `x-label-${e.label}`,
239
+ children: e.label
240
+ }
241
+ )
242
+ ]
243
+ },
244
+ e.label + D
245
+ );
246
+ })
247
+ ] })
248
+ }
249
+ ),
250
+ z && /* @__PURE__ */ w("div", { className: "dc:text-xs text-dc-warning dc:text-center dc:mt-1", children: [
251
+ "Showing first ",
252
+ j,
253
+ " candles (total: ",
254
+ s.length,
255
+ ")"
256
+ ] })
257
+ ] });
258
+ } catch (t) {
259
+ return /* @__PURE__ */ r("div", { className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4", style: { height: f }, children: /* @__PURE__ */ w("div", { className: "dc:text-center", children: [
260
+ /* @__PURE__ */ r("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "Candlestick Chart Error" }),
261
+ /* @__PURE__ */ r("div", { className: "dc:text-xs dc:mb-2", children: t instanceof Error ? t.message : "Unknown rendering error" }),
262
+ /* @__PURE__ */ r("div", { className: "dc:text-xs text-dc-text-muted", children: "Check the data and configuration" })
263
+ ] }) });
264
+ }
265
+ });
266
+ export {
267
+ oe as default
268
+ };
269
+ //# sourceMappingURL=chart-candlestick-BIR4uGGt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-candlestick-BIR4uGGt.js","sources":["../../../src/client/components/charts/CandlestickChart.tsx"],"sourcesContent":["import React, { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { formatAxisValue } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nconst BULL_COLOR_DEFAULT = '#22c55e'\nconst BEAR_COLOR_DEFAULT = '#ef4444'\nconst WICK_COLOR = '#94a3b8'\nconst MAX_CANDLES = 200\n\ninterface CandleData {\n label: string\n open: number\n close: number\n high: number\n low: number\n isBullish: boolean\n originalIndex: number\n}\n\nfunction parseNum(v: unknown): number | null {\n if (v === undefined || v === null) return null\n const n = typeof v === 'number' ? v : parseFloat(String(v))\n return isNaN(n) ? null : n\n}\n\nfunction Candle({\n x,\n candleWidth,\n openY,\n closeY,\n highY,\n lowY,\n isBullish,\n bullColor,\n bearColor,\n showWicks,\n label,\n}: {\n x: number\n candleWidth: number\n openY: number\n closeY: number\n highY: number\n lowY: number\n isBullish: boolean\n bullColor: string\n bearColor: string\n showWicks: boolean\n label: string\n}) {\n const fill = isBullish ? bullColor : bearColor\n const bodyTop = Math.min(openY, closeY)\n const bodyBottom = Math.max(openY, closeY)\n const bodyHeight = Math.max(bodyBottom - bodyTop, 1)\n const halfWidth = candleWidth / 2\n\n return (\n <g data-testid={`candle-${label}`}>\n <rect\n x={x - halfWidth}\n y={bodyTop}\n width={candleWidth}\n height={bodyHeight}\n fill={fill}\n data-testid={`candle-body-${label}`}\n data-bullish={isBullish}\n />\n {showWicks && (\n <>\n <line\n x1={x}\n y1={highY}\n x2={x}\n y2={bodyTop}\n stroke={WICK_COLOR}\n strokeWidth={1}\n data-testid={`wick-high-${label}`}\n />\n <line\n x1={x}\n y1={bodyBottom}\n x2={x}\n y2={lowY}\n stroke={WICK_COLOR}\n strokeWidth={1}\n data-testid={`wick-low-${label}`}\n />\n </>\n )}\n </g>\n )\n}\n\nfunction YAxisTicks({\n domainMin,\n domainMax,\n innerHeight,\n tickCount,\n format,\n}: {\n domainMin: number\n domainMax: number\n innerHeight: number\n tickCount: number\n format?: (v: number) => string\n}) {\n const ticks = useMemo(() => {\n const step = (domainMax - domainMin) / (tickCount - 1)\n return Array.from({ length: tickCount }, (_, i) => domainMin + i * step)\n }, [domainMin, domainMax, tickCount])\n\n const yScale = (v: number) => innerHeight - ((v - domainMin) / (domainMax - domainMin)) * innerHeight\n\n return (\n <g data-testid=\"y-axis\">\n <line y1={0} y2={innerHeight} stroke=\"currentColor\" strokeWidth={1} />\n {ticks.map((tick, i) => (\n <g key={i} transform={`translate(0, ${yScale(tick)})`}>\n <line x1={0} x2={-6} stroke=\"currentColor\" strokeWidth={1} />\n <text\n x={-10}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={11}\n fill=\"currentColor\"\n className=\"text-dc-text-secondary\"\n >\n {format ? format(tick) : tick.toLocaleString()}\n </text>\n <line x1={0} x2=\"100%\" stroke=\"currentColor\" strokeOpacity={0.1} strokeWidth={1} />\n </g>\n ))}\n </g>\n )\n}\n\nconst CandlestickChart = React.memo(function CandlestickChart({\n data,\n chartConfig,\n displayConfig = {},\n height = '100%',\n onDataPointClick,\n drillEnabled,\n}: ChartProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 })\n\n useLayoutEffect(() => {\n const el = containerRef.current\n if (!el) return\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height: h } = entry.contentRect\n if (width > 0 && h > 0) setDimensions({ width, height: h })\n }\n })\n observer.observe(el)\n const rect = el.getBoundingClientRect()\n if (rect.width > 0 && rect.height > 0) setDimensions({ width: rect.width, height: rect.height })\n return () => observer.disconnect()\n }, [])\n\n const bullColor = displayConfig?.bullColor ?? BULL_COLOR_DEFAULT\n const bearColor = displayConfig?.bearColor ?? BEAR_COLOR_DEFAULT\n const showWicks = displayConfig?.showWicks ?? true\n const rangeMode = displayConfig?.rangeMode ?? 'ohlc'\n const yAxisFormat = displayConfig?.leftYAxisFormat\n\n const { xField, openField, closeField, highField, lowField, configError } = useMemo(() => {\n const xField = Array.isArray(chartConfig?.xAxis)\n ? chartConfig.xAxis[0]\n : chartConfig?.xAxis ?? chartConfig?.x\n\n const yAxisFields: string[] = Array.isArray(chartConfig?.yAxis)\n ? chartConfig.yAxis\n : []\n\n const openField = yAxisFields[0] ?? ''\n const closeField = (rangeMode === 'range' ? yAxisFields[0] : yAxisFields[1]) ?? ''\n const highField = (rangeMode === 'range' ? yAxisFields[0] : yAxisFields[2]) ?? ''\n const lowField = (rangeMode === 'range' ? yAxisFields[1] : yAxisFields[3]) ?? ''\n\n if (!xField) {\n return {\n xField,\n openField,\n closeField,\n highField,\n lowField,\n configError: 'Candlestick chart requires an X-Axis (time or category dimension)',\n }\n }\n\n if (rangeMode === 'range' && (!highField || !lowField)) {\n return {\n xField,\n openField,\n closeField,\n highField,\n lowField,\n configError: 'Range mode requires at least 2 measures (high, low) in Y-Axis',\n }\n }\n\n if (rangeMode === 'ohlc' && (!openField || !closeField)) {\n return {\n xField,\n openField,\n closeField,\n highField,\n lowField,\n configError: 'OHLC mode requires at least 2 measures (open, close) in Y-Axis',\n }\n }\n\n return { xField, openField, closeField, highField, lowField, configError: null }\n }, [chartConfig, rangeMode])\n\n const candles: CandleData[] = useMemo(() => {\n if (configError || !data || data.length === 0) return []\n const rows = (data as Record<string, unknown>[]).slice(0, MAX_CANDLES)\n const result: CandleData[] = []\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const label = String(row[xField!] ?? `Bar ${i + 1}`)\n const rawOpen = parseNum(row[openField])\n const rawClose = parseNum(row[closeField])\n if (rawOpen === null || rawClose === null) continue\n\n let open = rawOpen\n let close = rawClose\n const high = highField ? (parseNum(row[highField]) ?? Math.max(open, close)) : Math.max(open, close)\n const low = lowField ? (parseNum(row[lowField]) ?? Math.min(open, close)) : Math.min(open, close)\n\n if (rangeMode === 'range') {\n open = low\n close = high\n }\n\n result.push({\n label,\n open,\n close,\n high: Math.max(open, close, high),\n low: Math.min(open, close, low),\n isBullish: close >= open,\n originalIndex: i,\n })\n }\n return result\n }, [data, xField, openField, closeField, highField, lowField, rangeMode, configError])\n\n try {\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in candlestick chart</div>\n </div>\n </div>\n )\n }\n\n if (configError) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">{configError}</div>\n </div>\n </div>\n )\n }\n const margin = { top: 20, right: 20, bottom: 60, left: 70 }\n const containerWidth = dimensions.width || 600\n const containerHeight =\n typeof height === 'number' ? height : dimensions.height || 400\n const innerWidth = Math.max(containerWidth - margin.left - margin.right, 50)\n const innerHeight = Math.max(\n (typeof containerHeight === 'number' ? containerHeight : parseInt(String(containerHeight)) || 400) -\n margin.top -\n margin.bottom,\n 50\n )\n\n const allValues = candles.flatMap((c) => [c.low, c.high])\n const rawMin = Math.min(...allValues)\n const rawMax = Math.max(...allValues)\n const pad = (rawMax - rawMin) * 0.05 || 1\n const domainMin = rawMin - pad\n const domainMax = rawMax + pad\n\n const yScale = (v: number) =>\n innerHeight - ((v - domainMin) / (domainMax - domainMin)) * innerHeight\n\n const candleSpacing = innerWidth / candles.length\n const candleWidth = Math.min(candleSpacing * 0.7, 20)\n\n const isTruncated = (data as unknown[]).length > MAX_CANDLES\n\n return (\n <div ref={containerRef} className=\"dc:relative dc:w-full\" style={{ height }}>\n <svg\n width=\"100%\"\n height={isTruncated ? 'calc(100% - 20px)' : '100%'}\n viewBox={`0 0 ${containerWidth} ${typeof containerHeight === 'number' ? containerHeight : 400}`}\n data-testid=\"candlestick-svg\"\n >\n <g transform={`translate(${margin.left}, ${margin.top})`}>\n <YAxisTicks\n domainMin={domainMin}\n domainMax={domainMax}\n innerHeight={innerHeight}\n tickCount={5}\n format={yAxisFormat ? (v) => formatAxisValue(v, yAxisFormat) : undefined}\n />\n\n {candles.map((candle, i) => {\n const cx = candleSpacing * i + candleSpacing / 2\n return (\n <g\n key={candle.label + i}\n onClick={(event: React.MouseEvent) => {\n if (onDataPointClick && drillEnabled) {\n onDataPointClick({\n dataPoint: { ...candle },\n clickedField: xField ?? '',\n xValue: candle.label,\n position: { x: event.clientX, y: event.clientY },\n nativeEvent: event,\n })\n }\n }}\n cursor={drillEnabled ? 'pointer' : undefined}\n >\n <title>{`${candle.label}: O=${candle.open} H=${candle.high} L=${candle.low} C=${candle.close}`}</title>\n <Candle\n x={cx}\n candleWidth={candleWidth}\n openY={yScale(candle.open)}\n closeY={yScale(candle.close)}\n highY={yScale(candle.high)}\n lowY={yScale(candle.low)}\n isBullish={candle.isBullish}\n bullColor={bullColor}\n bearColor={bearColor}\n showWicks={showWicks}\n label={candle.label}\n />\n <text\n x={cx}\n y={innerHeight + 20}\n textAnchor=\"middle\"\n fontSize={10}\n fill=\"currentColor\"\n className=\"text-dc-text-secondary\"\n data-testid={`x-label-${candle.label}`}\n >\n {candle.label}\n </text>\n </g>\n )\n })}\n </g>\n </svg>\n {isTruncated && (\n <div className=\"dc:text-xs text-dc-warning dc:text-center dc:mt-1\">\n Showing first {MAX_CANDLES} candles (total: {(data as unknown[]).length})\n </div>\n )}\n </div>\n )\n } catch (error) {\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Candlestick Chart Error</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n})\n\nexport default CandlestickChart\n"],"names":["BULL_COLOR_DEFAULT","BEAR_COLOR_DEFAULT","WICK_COLOR","MAX_CANDLES","parseNum","v","n","Candle","x","candleWidth","openY","closeY","highY","lowY","isBullish","bullColor","bearColor","showWicks","label","fill","bodyTop","bodyBottom","bodyHeight","halfWidth","jsxs","jsx","Fragment","YAxisTicks","domainMin","domainMax","innerHeight","tickCount","format","ticks","useMemo","step","_","i","yScale","tick","CandlestickChart","React","data","chartConfig","displayConfig","height","onDataPointClick","drillEnabled","containerRef","useRef","dimensions","setDimensions","useState","useLayoutEffect","el","observer","entries","entry","width","h","rect","rangeMode","yAxisFormat","xField","openField","closeField","highField","lowField","configError","yAxisFields","candles","rows","result","row","rawOpen","rawClose","open","close","high","low","margin","containerWidth","containerHeight","innerWidth","allValues","c","rawMin","rawMax","pad","candleSpacing","isTruncated","formatAxisValue","candle","cx","event","error"],"mappings":";;;AAIA,MAAMA,IAAqB,WACrBC,KAAqB,WACrBC,IAAa,WACbC,IAAc;AAYpB,SAASC,EAASC,GAA2B;AAC3C,MAAuBA,KAAM,KAAM,QAAO;AAC1C,QAAMC,IAAI,OAAOD,KAAM,WAAWA,IAAI,WAAW,OAAOA,CAAC,CAAC;AAC1D,SAAO,MAAMC,CAAC,IAAI,OAAOA;AAC3B;AAEA,SAASC,GAAO;AAAA,EACd,GAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AACF,GAYG;AACD,QAAMC,IAAOL,IAAYC,IAAYC,GAC/BI,IAAU,KAAK,IAAIV,GAAOC,CAAM,GAChCU,IAAa,KAAK,IAAIX,GAAOC,CAAM,GACnCW,IAAa,KAAK,IAAID,IAAaD,GAAS,CAAC,GAC7CG,IAAYd,IAAc;AAEhC,SACE,gBAAAe,EAAC,KAAA,EAAE,eAAa,UAAUN,CAAK,IAC7B,UAAA;AAAA,IAAA,gBAAAO;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAGjB,IAAIe;AAAA,QACP,GAAGH;AAAA,QACH,OAAOX;AAAA,QACP,QAAQa;AAAA,QACR,MAAAH;AAAA,QACA,eAAa,eAAeD,CAAK;AAAA,QACjC,gBAAcJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEfG,KACC,gBAAAO,EAAAE,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIjB;AAAA,UACJ,IAAII;AAAA,UACJ,IAAIJ;AAAA,UACJ,IAAIY;AAAA,UACJ,QAAQlB;AAAA,UACR,aAAa;AAAA,UACb,eAAa,aAAagB,CAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAEjC,gBAAAO;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIjB;AAAA,UACJ,IAAIa;AAAA,UACJ,IAAIb;AAAA,UACJ,IAAIK;AAAA,UACJ,QAAQX;AAAA,UACR,aAAa;AAAA,UACb,eAAa,YAAYgB,CAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IAChC,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAASS,GAAW;AAAA,EAClB,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AACF,GAMG;AACD,QAAMC,IAAQC,EAAQ,MAAM;AAC1B,UAAMC,KAAQN,IAAYD,MAAcG,IAAY;AACpD,WAAO,MAAM,KAAK,EAAE,QAAQA,EAAA,GAAa,CAACK,GAAGC,MAAMT,IAAYS,IAAIF,CAAI;AAAA,EACzE,GAAG,CAACP,GAAWC,GAAWE,CAAS,CAAC,GAE9BO,IAAS,CAACjC,MAAcyB,KAAgBzB,IAAIuB,MAAcC,IAAYD,KAAcE;AAE1F,SACE,gBAAAN,EAAC,KAAA,EAAE,eAAY,UACb,UAAA;AAAA,IAAA,gBAAAC,EAAC,QAAA,EAAK,IAAI,GAAG,IAAIK,GAAa,QAAO,gBAAe,aAAa,EAAA,CAAG;AAAA,IACnEG,EAAM,IAAI,CAACM,GAAMF,MAChB,gBAAAb,EAAC,KAAA,EAAU,WAAW,gBAAgBc,EAAOC,CAAI,CAAC,KAChD,UAAA;AAAA,MAAA,gBAAAd,EAAC,QAAA,EAAK,IAAI,GAAG,IAAI,IAAI,QAAO,gBAAe,aAAa,EAAA,CAAG;AAAA,MAC3D,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAG;AAAA,UACH,YAAW;AAAA,UACX,kBAAiB;AAAA,UACjB,UAAU;AAAA,UACV,MAAK;AAAA,UACL,WAAU;AAAA,UAET,UAAAO,IAASA,EAAOO,CAAI,IAAIA,EAAK,eAAA;AAAA,QAAe;AAAA,MAAA;AAAA,MAE/C,gBAAAd,EAAC,QAAA,EAAK,IAAI,GAAG,IAAG,QAAO,QAAO,gBAAe,eAAe,KAAK,aAAa,EAAA,CAAG;AAAA,IAAA,EAAA,GAZ3EY,CAaR,CACD;AAAA,EAAA,GACH;AAEJ;AAEA,MAAMG,KAAmBC,EAAM,KAAK,SAA0B;AAAA,EAC5D,MAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC,IAAgB,CAAA;AAAA,EAChB,QAAAC,IAAS;AAAA,EACT,kBAAAC;AAAA,EACA,cAAAC;AACF,GAAe;AACb,QAAMC,IAAeC,EAAuB,IAAI,GAC1C,CAACC,GAAYC,CAAa,IAAIC,EAAS,EAAE,OAAO,GAAG,QAAQ,GAAG;AAEpE,EAAAC,EAAgB,MAAM;AACpB,UAAMC,IAAKN,EAAa;AACxB,QAAI,CAACM,EAAI;AACT,UAAMC,IAAW,IAAI,eAAe,CAACC,MAAY;AAC/C,iBAAWC,KAASD,GAAS;AAC3B,cAAM,EAAE,OAAAE,GAAO,QAAQC,EAAA,IAAMF,EAAM;AACnC,QAAIC,IAAQ,KAAKC,IAAI,OAAiB,EAAE,OAAAD,GAAO,QAAQC,GAAG;AAAA,MAC5D;AAAA,IACF,CAAC;AACD,IAAAJ,EAAS,QAAQD,CAAE;AACnB,UAAMM,IAAON,EAAG,sBAAA;AAChB,WAAIM,EAAK,QAAQ,KAAKA,EAAK,SAAS,KAAGT,EAAc,EAAE,OAAOS,EAAK,OAAO,QAAQA,EAAK,QAAQ,GACxF,MAAML,EAAS,WAAA;AAAA,EACxB,GAAG,CAAA,CAAE;AAEL,QAAMxC,IAAY6B,GAAe,aAAa5C,GACxCgB,IAAY4B,GAAe,aAAa3C,IACxCgB,IAAY2B,GAAe,aAAa,IACxCiB,IAAYjB,GAAe,aAAa,QACxCkB,IAAclB,GAAe,iBAE7B,EAAE,QAAAmB,GAAQ,WAAAC,GAAW,YAAAC,GAAY,WAAAC,GAAW,UAAAC,GAAU,aAAAC,MAAgBlC,EAAQ,MAAM;AACxF,UAAM6B,IAAS,MAAM,QAAQpB,GAAa,KAAK,IAC3CA,EAAY,MAAM,CAAC,IACnBA,GAAa,SAASA,GAAa,GAEjC0B,IAAwB,MAAM,QAAQ1B,GAAa,KAAK,IAC1DA,EAAY,QACZ,CAAA,GAEEqB,IAAYK,EAAY,CAAC,KAAK,IAC9BJ,KAAcJ,MAAc,UAAUQ,EAAY,CAAC,IAAIA,EAAY,CAAC,MAAM,IAC1EH,KAAaL,MAAc,UAAUQ,EAAY,CAAC,IAAIA,EAAY,CAAC,MAAM,IACzEF,KAAYN,MAAc,UAAUQ,EAAY,CAAC,IAAIA,EAAY,CAAC,MAAM;AAE9E,WAAKN,IAWDF,MAAc,YAAY,CAACK,KAAa,CAACC,KACpC;AAAA,MACL,QAAAJ;AAAAA,MACA,WAAAC;AAAAA,MACA,YAAAC;AAAAA,MACA,WAAAC;AAAAA,MACA,UAAAC;AAAAA,MACA,aAAa;AAAA,IAAA,IAIbN,MAAc,WAAW,CAACG,KAAa,CAACC,KACnC;AAAA,MACL,QAAAF;AAAAA,MACA,WAAAC;AAAAA,MACA,YAAAC;AAAAA,MACA,WAAAC;AAAAA,MACA,UAAAC;AAAAA,MACA,aAAa;AAAA,IAAA,IAIV,EAAE,QAAAJ,GAAQ,WAAAC,GAAW,YAAAC,GAAY,WAAAC,GAAW,UAAAC,GAAU,aAAa,KAAA,IAhCjE;AAAA,MACL,QAAAJ;AAAAA,MACA,WAAAC;AAAAA,MACA,YAAAC;AAAAA,MACA,WAAAC;AAAAA,MACA,UAAAC;AAAAA,MACA,aAAa;AAAA,IAAA;AAAA,EA2BnB,GAAG,CAACxB,GAAakB,CAAS,CAAC,GAErBS,IAAwBpC,EAAQ,MAAM;AAC1C,QAAIkC,KAAe,CAAC1B,KAAQA,EAAK,WAAW,UAAU,CAAA;AACtD,UAAM6B,IAAQ7B,EAAmC,MAAM,GAAGvC,CAAW,GAC/DqE,IAAuB,CAAA;AAC7B,aAAS,IAAI,GAAG,IAAID,EAAK,QAAQ,KAAK;AACpC,YAAME,IAAMF,EAAK,CAAC,GACZrD,IAAQ,OAAOuD,EAAIV,CAAO,KAAK,OAAO,IAAI,CAAC,EAAE,GAC7CW,IAAUtE,EAASqE,EAAIT,CAAS,CAAC,GACjCW,IAAWvE,EAASqE,EAAIR,CAAU,CAAC;AACzC,UAAIS,MAAY,QAAQC,MAAa,KAAM;AAE3C,UAAIC,IAAOF,GACPG,IAAQF;AACZ,YAAMG,IAAOZ,IAAa9D,EAASqE,EAAIP,CAAS,CAAC,KAAK,KAAK,IAAIU,GAAMC,CAAK,IAAK,KAAK,IAAID,GAAMC,CAAK,GAC7FE,IAAMZ,IAAY/D,EAASqE,EAAIN,CAAQ,CAAC,KAAK,KAAK,IAAIS,GAAMC,CAAK,IAAK,KAAK,IAAID,GAAMC,CAAK;AAEhG,MAAIhB,MAAc,YAChBe,IAAOG,GACPF,IAAQC,IAGVN,EAAO,KAAK;AAAA,QACV,OAAAtD;AAAA,QACA,MAAA0D;AAAA,QACA,OAAAC;AAAA,QACA,MAAM,KAAK,IAAID,GAAMC,GAAOC,CAAI;AAAA,QAChC,KAAK,KAAK,IAAIF,GAAMC,GAAOE,CAAG;AAAA,QAC9B,WAAWF,KAASD;AAAA,QACpB,eAAe;AAAA,MAAA,CAChB;AAAA,IACH;AACA,WAAOJ;AAAA,EACT,GAAG,CAAC9B,GAAMqB,GAAQC,GAAWC,GAAYC,GAAWC,GAAUN,GAAWO,CAAW,CAAC;AAErF,MAAI;AACF,QAAI,CAAC1B,KAAQA,EAAK,WAAW;AAC3B,aACE,gBAAAjB,EAAC,OAAA,EAAI,WAAU,0EAAyE,OAAO,EAAE,QAAAoB,EAAA,GAC/F,UAAA,gBAAArB,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,uCAAsC,UAAA,qBAAiB;AAAA,QACtE,gBAAAA,EAAC,OAAA,EAAI,WAAU,qCAAoC,UAAA,iDAAA,CAA8C;AAAA,MAAA,EAAA,CACnG,EAAA,CACF;AAIJ,QAAI2C;AACF,aACE,gBAAA3C,EAAC,OAAA,EAAI,WAAU,uEAAsE,OAAO,EAAE,QAAAoB,EAAA,GAC5F,UAAA,gBAAArB,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,uCAAsC,UAAA,uBAAmB;AAAA,QACxE,gBAAAA,EAAC,OAAA,EAAI,WAAU,cAAc,UAAA2C,EAAA,CAAY;AAAA,MAAA,EAAA,CAC3C,EAAA,CACF;AAGJ,UAAMY,IAAS,EAAE,KAAK,IAAI,OAAO,IAAI,QAAQ,IAAI,MAAM,GAAA,GACjDC,IAAiB/B,EAAW,SAAS,KACrCgC,IACJ,OAAOrC,KAAW,WAAWA,IAASK,EAAW,UAAU,KACvDiC,IAAa,KAAK,IAAIF,IAAiBD,EAAO,OAAOA,EAAO,OAAO,EAAE,GACrElD,IAAc,KAAK;AAAA,OACtB,OAAOoD,KAAoB,WAAWA,IAAkB,SAAS,OAAOA,CAAe,CAAC,KAAK,OAC5FF,EAAO,MACPA,EAAO;AAAA,MACT;AAAA,IAAA,GAGII,IAAYd,EAAQ,QAAQ,CAACe,MAAM,CAACA,EAAE,KAAKA,EAAE,IAAI,CAAC,GAClDC,IAAS,KAAK,IAAI,GAAGF,CAAS,GAC9BG,IAAS,KAAK,IAAI,GAAGH,CAAS,GAC9BI,KAAOD,IAASD,KAAU,QAAQ,GAClC1D,IAAY0D,IAASE,GACrB3D,IAAY0D,IAASC,GAErBlD,IAAS,CAACjC,MACdyB,KAAgBzB,IAAIuB,MAAcC,IAAYD,KAAcE,GAExD2D,IAAgBN,IAAab,EAAQ,QACrC7D,IAAc,KAAK,IAAIgF,IAAgB,KAAK,EAAE,GAE9CC,IAAehD,EAAmB,SAASvC;AAEjD,WACE,gBAAAqB,EAAC,SAAI,KAAKwB,GAAc,WAAU,yBAAwB,OAAO,EAAE,QAAAH,EAAA,GACjE,UAAA;AAAA,MAAA,gBAAApB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAM;AAAA,UACN,QAAQiE,IAAc,sBAAsB;AAAA,UAC5C,SAAS,OAAOT,CAAc,IAAI,OAAOC,KAAoB,WAAWA,IAAkB,GAAG;AAAA,UAC7F,eAAY;AAAA,UAEZ,UAAA,gBAAA1D,EAAC,OAAE,WAAW,aAAawD,EAAO,IAAI,KAAKA,EAAO,GAAG,KACnD,UAAA;AAAA,YAAA,gBAAAvD;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,WAAAC;AAAA,gBACA,WAAAC;AAAA,gBACA,aAAAC;AAAA,gBACA,WAAW;AAAA,gBACX,QAAQgC,IAAc,CAACzD,MAAMsF,EAAgBtF,GAAGyD,CAAW,IAAI;AAAA,cAAA;AAAA,YAAA;AAAA,YAGhEQ,EAAQ,IAAI,CAACsB,GAAQvD,MAAM;AAC1B,oBAAMwD,IAAKJ,IAAgBpD,IAAIoD,IAAgB;AAC/C,qBACE,gBAAAjE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,SAAS,CAACsE,MAA4B;AACpC,oBAAIhD,KAAoBC,KACtBD,EAAiB;AAAA,sBACf,WAAW,EAAE,GAAG8C,EAAA;AAAA,sBAChB,cAAc7B,KAAU;AAAA,sBACxB,QAAQ6B,EAAO;AAAA,sBACf,UAAU,EAAE,GAAGE,EAAM,SAAS,GAAGA,EAAM,QAAA;AAAA,sBACvC,aAAaA;AAAA,oBAAA,CACd;AAAA,kBAEL;AAAA,kBACA,QAAQ/C,IAAe,YAAY;AAAA,kBAEnC,UAAA;AAAA,oBAAA,gBAAAtB,EAAC,WAAO,UAAA,GAAGmE,EAAO,KAAK,OAAOA,EAAO,IAAI,MAAMA,EAAO,IAAI,MAAMA,EAAO,GAAG,MAAMA,EAAO,KAAK,IAAG;AAAA,oBAC/F,gBAAAnE;AAAA,sBAAClB;AAAA,sBAAA;AAAA,wBACC,GAAGsF;AAAA,wBACH,aAAApF;AAAA,wBACA,OAAO6B,EAAOsD,EAAO,IAAI;AAAA,wBACzB,QAAQtD,EAAOsD,EAAO,KAAK;AAAA,wBAC3B,OAAOtD,EAAOsD,EAAO,IAAI;AAAA,wBACzB,MAAMtD,EAAOsD,EAAO,GAAG;AAAA,wBACvB,WAAWA,EAAO;AAAA,wBAClB,WAAA7E;AAAA,wBACA,WAAAC;AAAA,wBACA,WAAAC;AAAA,wBACA,OAAO2E,EAAO;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEhB,gBAAAnE;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,GAAGoE;AAAA,wBACH,GAAG/D,IAAc;AAAA,wBACjB,YAAW;AAAA,wBACX,UAAU;AAAA,wBACV,MAAK;AAAA,wBACL,WAAU;AAAA,wBACV,eAAa,WAAW8D,EAAO,KAAK;AAAA,wBAEnC,UAAAA,EAAO;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACV;AAAA,gBAAA;AAAA,gBAtCKA,EAAO,QAAQvD;AAAA,cAAA;AAAA,YAyC1B,CAAC;AAAA,UAAA,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,MAEDqD,KACC,gBAAAlE,EAAC,OAAA,EAAI,WAAU,qDAAoD,UAAA;AAAA,QAAA;AAAA,QAClDrB;AAAA,QAAY;AAAA,QAAmBuC,EAAmB;AAAA,QAAO;AAAA,MAAA,EAAA,CAC1E;AAAA,IAAA,GAEJ;AAAA,EAEJ,SAASqD,GAAO;AACd,WACE,gBAAAtE,EAAC,OAAA,EAAI,WAAU,wFAAuF,OAAO,EAAE,QAAAoB,EAAA,GAC7G,UAAA,gBAAArB,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,uCAAsC,UAAA,2BAAuB;AAAA,MAC5E,gBAAAA,EAAC,SAAI,WAAU,sBAAsB,uBAAiB,QAAQsE,EAAM,UAAU,0BAAA,CAA0B;AAAA,MACxG,gBAAAtE,EAAC,OAAA,EAAI,WAAU,iCAAgC,UAAA,mCAAA,CAAgC;AAAA,IAAA,EAAA,CACjF,EAAA,CACF;AAAA,EAEJ;AACF,CAAC;"}
@@ -0,0 +1,38 @@
1
+ const e = {
2
+ label: "Box Plot",
3
+ description: "Show statistical distribution (median, IQR, whiskers) across categories",
4
+ useCase: "Best for P&L spread per symbol, trade size distribution, latency distribution across platforms",
5
+ displayOptions: ["hideHeader"],
6
+ dropZones: [
7
+ {
8
+ key: "xAxis",
9
+ label: "X-Axis (Groups)",
10
+ description: "Dimension to group boxes by (e.g. symbol, platform)",
11
+ mandatory: !0,
12
+ maxItems: 1,
13
+ acceptTypes: ["dimension", "timeDimension"],
14
+ emptyText: "Drop a dimension here"
15
+ },
16
+ {
17
+ key: "yAxis",
18
+ label: "Y-Axis (Measures)",
19
+ description: "Drop 1 measure for auto mode, 3 for avg/stddev/median mode, or 5 for min/q1/median/q3/max mode",
20
+ mandatory: !0,
21
+ maxItems: 5,
22
+ acceptTypes: ["measure"],
23
+ emptyText: "Drop 1, 3, or 5 measures here"
24
+ }
25
+ ],
26
+ displayOptionsConfig: [
27
+ {
28
+ key: "leftYAxisFormat",
29
+ label: "Y-Axis Format",
30
+ type: "axisFormat",
31
+ description: "Number formatting for the value axis"
32
+ }
33
+ ]
34
+ };
35
+ export {
36
+ e as boxPlotChartConfig
37
+ };
38
+ //# sourceMappingURL=chart-config-box-plot-D_E_SSc2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-config-box-plot-D_E_SSc2.js","sources":["../../../src/client/components/charts/BoxPlotChart.config.ts"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\n\n/**\n * Configuration for the box plot chart type\n */\nexport const boxPlotChartConfig: ChartTypeConfig = {\n label: 'Box Plot',\n description: 'Show statistical distribution (median, IQR, whiskers) across categories',\n useCase:\n 'Best for P&L spread per symbol, trade size distribution, latency distribution across platforms',\n displayOptions: ['hideHeader'],\n dropZones: [\n {\n key: 'xAxis',\n label: 'X-Axis (Groups)',\n description: 'Dimension to group boxes by (e.g. symbol, platform)',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['dimension', 'timeDimension'],\n emptyText: 'Drop a dimension here',\n },\n {\n key: 'yAxis',\n label: 'Y-Axis (Measures)',\n description:\n 'Drop 1 measure for auto mode, 3 for avg/stddev/median mode, or 5 for min/q1/median/q3/max mode',\n mandatory: true,\n maxItems: 5,\n acceptTypes: ['measure'],\n emptyText: 'Drop 1, 3, or 5 measures here',\n },\n ],\n displayOptionsConfig: [\n {\n key: 'leftYAxisFormat',\n label: 'Y-Axis Format',\n type: 'axisFormat',\n description: 'Number formatting for the value axis',\n },\n ],\n}\n"],"names":["boxPlotChartConfig"],"mappings":"AAKO,MAAMA,IAAsC;AAAA,EACjD,OAAO;AAAA,EACP,aAAa;AAAA,EACb,SACE;AAAA,EACF,gBAAgB,CAAC,YAAY;AAAA,EAC7B,WAAW;AAAA,IACT;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa,CAAC,aAAa,eAAe;AAAA,MAC1C,WAAW;AAAA,IAAA;AAAA,IAEb;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aACE;AAAA,MACF,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa,CAAC,SAAS;AAAA,MACvB,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,sBAAsB;AAAA,IACpB;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}
@@ -0,0 +1,70 @@
1
+ const e = {
2
+ label: "Candlestick Chart",
3
+ description: "Financial candlestick chart showing open/close body and high/low wicks",
4
+ useCase: "Best for EOD quotes (bid/ask spread per date/symbol), markout distribution bands, or OHLC price data",
5
+ clickableElements: { bar: !0 },
6
+ displayOptions: ["hideHeader"],
7
+ dropZones: [
8
+ {
9
+ key: "xAxis",
10
+ label: "X-Axis (Time / Category)",
11
+ description: "Time dimension or category for each candle (e.g. date, symbol)",
12
+ mandatory: !0,
13
+ maxItems: 1,
14
+ acceptTypes: ["timeDimension", "dimension"],
15
+ emptyText: "Drop a time or dimension here"
16
+ },
17
+ {
18
+ key: "yAxis",
19
+ label: "OHLC Measures (open, close, high, low)",
20
+ description: "Drop 2–4 measures in order: open, close, high, low (OHLC mode). For range mode drop 2: high, low.",
21
+ mandatory: !0,
22
+ acceptTypes: ["measure"],
23
+ emptyText: "Drop 2+ measures here"
24
+ }
25
+ ],
26
+ displayOptionsConfig: [
27
+ {
28
+ key: "rangeMode",
29
+ label: "Chart Mode",
30
+ type: "select",
31
+ defaultValue: "ohlc",
32
+ options: [
33
+ { value: "ohlc", label: "OHLC (open, close, high, low)" },
34
+ { value: "range", label: "Range (high, low / bid, ask)" }
35
+ ],
36
+ description: "OHLC: 4 measures. Range: 2 measures (high + low)."
37
+ },
38
+ {
39
+ key: "bullColor",
40
+ label: "Bullish Colour",
41
+ type: "color",
42
+ defaultValue: "#22c55e",
43
+ description: "Candle colour when close ≥ open"
44
+ },
45
+ {
46
+ key: "bearColor",
47
+ label: "Bearish Colour",
48
+ type: "color",
49
+ defaultValue: "#ef4444",
50
+ description: "Candle colour when close < open"
51
+ },
52
+ {
53
+ key: "showWicks",
54
+ label: "Show Wicks",
55
+ type: "boolean",
56
+ defaultValue: !0,
57
+ description: "Draw high/low wicks above and below the body"
58
+ },
59
+ {
60
+ key: "leftYAxisFormat",
61
+ label: "Y-Axis Format",
62
+ type: "axisFormat",
63
+ description: "Number formatting for the price axis"
64
+ }
65
+ ]
66
+ };
67
+ export {
68
+ e as candlestickChartConfig
69
+ };
70
+ //# sourceMappingURL=chart-config-candlestick-CRCpD43-.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-config-candlestick-CRCpD43-.js","sources":["../../../src/client/components/charts/CandlestickChart.config.ts"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\n\n/**\n * Configuration for the candlestick chart type\n */\nexport const candlestickChartConfig: ChartTypeConfig = {\n label: 'Candlestick Chart',\n description: 'Financial candlestick chart showing open/close body and high/low wicks',\n useCase:\n 'Best for EOD quotes (bid/ask spread per date/symbol), markout distribution bands, or OHLC price data',\n clickableElements: { bar: true },\n displayOptions: ['hideHeader'],\n dropZones: [\n {\n key: 'xAxis',\n label: 'X-Axis (Time / Category)',\n description: 'Time dimension or category for each candle (e.g. date, symbol)',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['timeDimension', 'dimension'],\n emptyText: 'Drop a time or dimension here',\n },\n {\n key: 'yAxis',\n label: 'OHLC Measures (open, close, high, low)',\n description:\n 'Drop 2–4 measures in order: open, close, high, low (OHLC mode). For range mode drop 2: high, low.',\n mandatory: true,\n acceptTypes: ['measure'],\n emptyText: 'Drop 2+ measures here',\n },\n ],\n displayOptionsConfig: [\n {\n key: 'rangeMode',\n label: 'Chart Mode',\n type: 'select',\n defaultValue: 'ohlc',\n options: [\n { value: 'ohlc', label: 'OHLC (open, close, high, low)' },\n { value: 'range', label: 'Range (high, low / bid, ask)' },\n ],\n description: 'OHLC: 4 measures. Range: 2 measures (high + low).',\n },\n {\n key: 'bullColor',\n label: 'Bullish Colour',\n type: 'color',\n defaultValue: '#22c55e',\n description: 'Candle colour when close ≥ open',\n },\n {\n key: 'bearColor',\n label: 'Bearish Colour',\n type: 'color',\n defaultValue: '#ef4444',\n description: 'Candle colour when close < open',\n },\n {\n key: 'showWicks',\n label: 'Show Wicks',\n type: 'boolean',\n defaultValue: true,\n description: 'Draw high/low wicks above and below the body',\n },\n {\n key: 'leftYAxisFormat',\n label: 'Y-Axis Format',\n type: 'axisFormat',\n description: 'Number formatting for the price axis',\n },\n ],\n}\n"],"names":["candlestickChartConfig"],"mappings":"AAKO,MAAMA,IAA0C;AAAA,EACrD,OAAO;AAAA,EACP,aAAa;AAAA,EACb,SACE;AAAA,EACF,mBAAmB,EAAE,KAAK,GAAA;AAAA,EAC1B,gBAAgB,CAAC,YAAY;AAAA,EAC7B,WAAW;AAAA,IACT;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa,CAAC,iBAAiB,WAAW;AAAA,MAC1C,WAAW;AAAA,IAAA;AAAA,IAEb;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aACE;AAAA,MACF,WAAW;AAAA,MACX,aAAa,CAAC,SAAS;AAAA,MACvB,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,sBAAsB;AAAA,IACpB;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,SAAS;AAAA,QACP,EAAE,OAAO,QAAQ,OAAO,gCAAA;AAAA,QACxB,EAAE,OAAO,SAAS,OAAO,+BAAA;AAAA,MAA+B;AAAA,MAE1D,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}
@@ -0,0 +1,64 @@
1
+ const e = {
2
+ label: "Gauge Chart",
3
+ description: "Half-circle arc gauge for a single KPI value versus a maximum target",
4
+ useCase: "Best for high-water marks vs equity, margin utilisation, or any single value progress toward a goal",
5
+ clickableElements: {},
6
+ displayOptions: ["hideHeader"],
7
+ dropZones: [
8
+ {
9
+ key: "yAxis",
10
+ label: "Value Measure",
11
+ description: "Current value to display on the gauge (e.g. current equity, margin used)",
12
+ mandatory: !0,
13
+ maxItems: 2,
14
+ acceptTypes: ["measure"],
15
+ emptyText: "Drop 1 measure here (optional 2nd for dynamic max)"
16
+ }
17
+ ],
18
+ displayOptionsConfig: [
19
+ {
20
+ key: "minValue",
21
+ label: "Minimum Value",
22
+ type: "number",
23
+ defaultValue: 0,
24
+ description: "Lower bound of the gauge arc (default 0)"
25
+ },
26
+ {
27
+ key: "maxValue",
28
+ label: "Maximum Value (static)",
29
+ type: "number",
30
+ description: "Upper bound of the gauge. Leave empty to use yAxis[1] or default 100"
31
+ },
32
+ {
33
+ key: "thresholds",
34
+ label: "Threshold Bands",
35
+ type: "string",
36
+ placeholder: '[{"value":0.33,"color":"#22c55e"},{"value":0.66,"color":"#f59e0b"},{"value":1,"color":"#ef4444"}]',
37
+ description: "Array of {value (0–1 fraction), color} bands shown as outer arc markers"
38
+ },
39
+ {
40
+ key: "showCenterLabel",
41
+ label: "Show Centre Label",
42
+ type: "boolean",
43
+ defaultValue: !0,
44
+ description: "Display current value and field name in the centre of the gauge"
45
+ },
46
+ {
47
+ key: "showPercentage",
48
+ label: "Show as Percentage",
49
+ type: "boolean",
50
+ defaultValue: !1,
51
+ description: "Display value as % of max instead of raw number"
52
+ },
53
+ {
54
+ key: "leftYAxisFormat",
55
+ label: "Value Format",
56
+ type: "axisFormat",
57
+ description: "Number formatting for the displayed value and axis labels"
58
+ }
59
+ ]
60
+ };
61
+ export {
62
+ e as gaugeChartConfig
63
+ };
64
+ //# sourceMappingURL=chart-config-gauge-CQx9w3d4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-config-gauge-CQx9w3d4.js","sources":["../../../src/client/components/charts/GaugeChart.config.ts"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\n\n/**\n * Configuration for the gauge chart type\n */\nexport const gaugeChartConfig: ChartTypeConfig = {\n label: 'Gauge Chart',\n description: 'Half-circle arc gauge for a single KPI value versus a maximum target',\n useCase:\n 'Best for high-water marks vs equity, margin utilisation, or any single value progress toward a goal',\n clickableElements: {},\n displayOptions: ['hideHeader'],\n dropZones: [\n {\n key: 'yAxis',\n label: 'Value Measure',\n description: 'Current value to display on the gauge (e.g. current equity, margin used)',\n mandatory: true,\n maxItems: 2,\n acceptTypes: ['measure'],\n emptyText: 'Drop 1 measure here (optional 2nd for dynamic max)',\n },\n ],\n displayOptionsConfig: [\n {\n key: 'minValue',\n label: 'Minimum Value',\n type: 'number',\n defaultValue: 0,\n description: 'Lower bound of the gauge arc (default 0)',\n },\n {\n key: 'maxValue',\n label: 'Maximum Value (static)',\n type: 'number',\n description: 'Upper bound of the gauge. Leave empty to use yAxis[1] or default 100',\n },\n {\n key: 'thresholds',\n label: 'Threshold Bands',\n type: 'string',\n placeholder: '[{\"value\":0.33,\"color\":\"#22c55e\"},{\"value\":0.66,\"color\":\"#f59e0b\"},{\"value\":1,\"color\":\"#ef4444\"}]',\n description: 'Array of {value (0–1 fraction), color} bands shown as outer arc markers',\n },\n {\n key: 'showCenterLabel',\n label: 'Show Centre Label',\n type: 'boolean',\n defaultValue: true,\n description: 'Display current value and field name in the centre of the gauge',\n },\n {\n key: 'showPercentage',\n label: 'Show as Percentage',\n type: 'boolean',\n defaultValue: false,\n description: 'Display value as % of max instead of raw number',\n },\n {\n key: 'leftYAxisFormat',\n label: 'Value Format',\n type: 'axisFormat',\n description: 'Number formatting for the displayed value and axis labels',\n },\n ],\n}\n"],"names":["gaugeChartConfig"],"mappings":"AAKO,MAAMA,IAAoC;AAAA,EAC/C,OAAO;AAAA,EACP,aAAa;AAAA,EACb,SACE;AAAA,EACF,mBAAmB,CAAA;AAAA,EACnB,gBAAgB,CAAC,YAAY;AAAA,EAC7B,WAAW;AAAA,IACT;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa,CAAC,SAAS;AAAA,MACvB,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,sBAAsB;AAAA,IACpB;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}
@@ -0,0 +1,70 @@
1
+ const e = {
2
+ label: "Measure Profile",
3
+ description: "Plot N measures as sequential X-axis points to visualise a profile or shape across intervals",
4
+ useCase: "Best for markout interval analysis (e.g. avgMinus2m → avgAtEvent → avgPlus2h), metric profiles, or any pattern across ordered measures",
5
+ displayOptions: ["showLegend", "showTooltip", "hideHeader"],
6
+ dropZones: [
7
+ {
8
+ key: "yAxis",
9
+ label: "Measures (X-Axis Order)",
10
+ description: "Add 2 or more measures — they become the X-axis categories in the order listed",
11
+ mandatory: !0,
12
+ acceptTypes: ["measure"],
13
+ emptyText: "Drop 2+ measures here (displayed left → right)"
14
+ },
15
+ {
16
+ key: "series",
17
+ label: "Series (Split into Multiple Lines)",
18
+ description: "Dimension to split data into separate profile lines (e.g. symbol, platform)",
19
+ mandatory: !1,
20
+ maxItems: 1,
21
+ acceptTypes: ["dimension"],
22
+ emptyText: "Drop a dimension here to create multiple lines"
23
+ }
24
+ ],
25
+ displayOptionsConfig: [
26
+ {
27
+ key: "showReferenceLineAtZero",
28
+ label: "Show Zero Reference Line",
29
+ type: "boolean",
30
+ defaultValue: !0,
31
+ description: "Draw a dashed line at Y = 0"
32
+ },
33
+ {
34
+ key: "showDataLabels",
35
+ label: "Show Data Labels",
36
+ type: "boolean",
37
+ defaultValue: !1,
38
+ description: "Display value at each data point"
39
+ },
40
+ {
41
+ key: "showLegend",
42
+ label: "Show Legend",
43
+ type: "boolean",
44
+ defaultValue: !0,
45
+ description: "Show series legend (only visible with a Series dimension)"
46
+ },
47
+ {
48
+ key: "lineType",
49
+ label: "Line Interpolation",
50
+ type: "select",
51
+ defaultValue: "monotone",
52
+ options: [
53
+ { value: "monotone", label: "Smooth (monotone)" },
54
+ { value: "linear", label: "Linear" },
55
+ { value: "step", label: "Step" }
56
+ ],
57
+ description: "How data points are connected"
58
+ },
59
+ {
60
+ key: "leftYAxisFormat",
61
+ label: "Y-Axis Format",
62
+ type: "axisFormat",
63
+ description: "Number formatting for the Y-axis"
64
+ }
65
+ ]
66
+ };
67
+ export {
68
+ e as measureProfileChartConfig
69
+ };
70
+ //# sourceMappingURL=chart-config-measure-profile-ZYaMrtws.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-config-measure-profile-ZYaMrtws.js","sources":["../../../src/client/components/charts/MeasureProfileChart.config.ts"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\n\n/**\n * Configuration for the measure profile chart type\n */\nexport const measureProfileChartConfig: ChartTypeConfig = {\n label: 'Measure Profile',\n description: 'Plot N measures as sequential X-axis points to visualise a profile or shape across intervals',\n useCase:\n 'Best for markout interval analysis (e.g. avgMinus2m → avgAtEvent → avgPlus2h), metric profiles, or any pattern across ordered measures',\n displayOptions: ['showLegend', 'showTooltip', 'hideHeader'],\n dropZones: [\n {\n key: 'yAxis',\n label: 'Measures (X-Axis Order)',\n description: 'Add 2 or more measures — they become the X-axis categories in the order listed',\n mandatory: true,\n acceptTypes: ['measure'],\n emptyText: 'Drop 2+ measures here (displayed left → right)',\n },\n {\n key: 'series',\n label: 'Series (Split into Multiple Lines)',\n description: 'Dimension to split data into separate profile lines (e.g. symbol, platform)',\n mandatory: false,\n maxItems: 1,\n acceptTypes: ['dimension'],\n emptyText: 'Drop a dimension here to create multiple lines',\n },\n ],\n displayOptionsConfig: [\n {\n key: 'showReferenceLineAtZero',\n label: 'Show Zero Reference Line',\n type: 'boolean',\n defaultValue: true,\n description: 'Draw a dashed line at Y = 0',\n },\n {\n key: 'showDataLabels',\n label: 'Show Data Labels',\n type: 'boolean',\n defaultValue: false,\n description: 'Display value at each data point',\n },\n {\n key: 'showLegend',\n label: 'Show Legend',\n type: 'boolean',\n defaultValue: true,\n description: 'Show series legend (only visible with a Series dimension)',\n },\n {\n key: 'lineType',\n label: 'Line Interpolation',\n type: 'select',\n defaultValue: 'monotone',\n options: [\n { value: 'monotone', label: 'Smooth (monotone)' },\n { value: 'linear', label: 'Linear' },\n { value: 'step', label: 'Step' },\n ],\n description: 'How data points are connected',\n },\n {\n key: 'leftYAxisFormat',\n label: 'Y-Axis Format',\n type: 'axisFormat',\n description: 'Number formatting for the Y-axis',\n },\n ],\n}\n"],"names":["measureProfileChartConfig"],"mappings":"AAKO,MAAMA,IAA6C;AAAA,EACxD,OAAO;AAAA,EACP,aAAa;AAAA,EACb,SACE;AAAA,EACF,gBAAgB,CAAC,cAAc,eAAe,YAAY;AAAA,EAC1D,WAAW;AAAA,IACT;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,aAAa,CAAC,SAAS;AAAA,MACvB,WAAW;AAAA,IAAA;AAAA,IAEb;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa,CAAC,WAAW;AAAA,MACzB,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,sBAAsB;AAAA,IACpB;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,SAAS;AAAA,QACP,EAAE,OAAO,YAAY,OAAO,oBAAA;AAAA,QAC5B,EAAE,OAAO,UAAU,OAAO,SAAA;AAAA,QAC1B,EAAE,OAAO,QAAQ,OAAO,OAAA;AAAA,MAAO;AAAA,MAEjC,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}