drizzle-cube 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/charts.js +11 -11
- package/dist/client/chunks/chart-activitygridchart-BzL97Vnm.js +2510 -0
- package/dist/client/chunks/chart-activitygridchart-BzL97Vnm.js.map +1 -0
- package/dist/client/chunks/chart-activitygridchart-config-48WqIofo.js +230 -0
- package/dist/client/chunks/chart-activitygridchart-config-48WqIofo.js.map +1 -0
- package/dist/client/chunks/{chart-areachart-C_luzpU9.js → chart-areachart-BtH3SvAM.js} +3 -3
- package/dist/client/chunks/{chart-areachart-C_luzpU9.js.map → chart-areachart-BtH3SvAM.js.map} +1 -1
- package/dist/client/chunks/{chart-areachart-config-InZgxubz.js → chart-areachart-config-D8taXdn1.js} +5 -6
- package/dist/client/chunks/chart-areachart-config-D8taXdn1.js.map +1 -0
- package/dist/client/chunks/{chart-barchart-CJzMunji.js → chart-barchart-DX6DIoIp.js} +4 -4
- package/dist/client/chunks/{chart-barchart-CJzMunji.js.map → chart-barchart-DX6DIoIp.js.map} +1 -1
- package/dist/client/chunks/{chart-barchart-config-DxatOnVV.js → chart-barchart-config-DjRZBtLb.js} +5 -6
- package/dist/client/chunks/chart-barchart-config-DjRZBtLb.js.map +1 -0
- package/dist/client/chunks/{chart-bubblechart-DPyYu4B-.js → chart-bubblechart-Lj_PnppP.js} +2 -2
- package/dist/client/chunks/{chart-bubblechart-DPyYu4B-.js.map → chart-bubblechart-Lj_PnppP.js.map} +1 -1
- package/dist/client/chunks/{chart-bubblechart-config-CcZTMTCx.js → chart-bubblechart-config-C6ck2qmg.js} +5 -6
- package/dist/client/chunks/chart-bubblechart-config-C6ck2qmg.js.map +1 -0
- package/dist/client/chunks/{chart-charttooltip-CyhJAnW_.js → chart-charttooltip-D9BKscsw.js} +2 -2
- package/dist/client/chunks/{chart-charttooltip-CyhJAnW_.js.map → chart-charttooltip-D9BKscsw.js.map} +1 -1
- package/dist/client/chunks/{chart-datatable-xonQ9udl.js → chart-datatable-BaECYDn2.js} +2 -2
- package/dist/client/chunks/{chart-datatable-xonQ9udl.js.map → chart-datatable-BaECYDn2.js.map} +1 -1
- package/dist/client/chunks/{chart-datatable-config-D7mojhYA.js → chart-datatable-config-B5z0SlOJ.js} +5 -6
- package/dist/client/chunks/chart-datatable-config-B5z0SlOJ.js.map +1 -0
- package/dist/client/chunks/{chart-kpidelta-DTq92DyT.js → chart-kpidelta-Bx-stIIk.js} +23 -23
- package/dist/client/chunks/{chart-kpidelta-DTq92DyT.js.map → chart-kpidelta-Bx-stIIk.js.map} +1 -1
- package/dist/client/chunks/{chart-kpidelta-config-icJXuFxe.js → chart-kpidelta-config-CnZfi_P2.js} +5 -6
- package/dist/client/chunks/chart-kpidelta-config-CnZfi_P2.js.map +1 -0
- package/dist/client/chunks/{chart-kpinumber-CiOvJAlz.js → chart-kpinumber-BrXgyKGP.js} +23 -23
- package/dist/client/chunks/{chart-kpinumber-CiOvJAlz.js.map → chart-kpinumber-BrXgyKGP.js.map} +1 -1
- package/dist/client/chunks/{chart-kpinumber-config-T39g03ud.js → chart-kpinumber-config-CVikHojM.js} +5 -6
- package/dist/client/chunks/chart-kpinumber-config-CVikHojM.js.map +1 -0
- package/dist/client/chunks/{chart-kpitext-D5kNrcSl.js → chart-kpitext-_2tnYN_z.js} +3 -3
- package/dist/client/chunks/{chart-kpitext-D5kNrcSl.js.map → chart-kpitext-_2tnYN_z.js.map} +1 -1
- package/dist/client/chunks/{chart-kpitext-config-BbJGXAVk.js → chart-kpitext-config-B2MovXSw.js} +5 -6
- package/dist/client/chunks/chart-kpitext-config-B2MovXSw.js.map +1 -0
- package/dist/client/chunks/{chart-linechart-4AF7Q_zF.js → chart-linechart-DBdIULsM.js} +4 -4
- package/dist/client/chunks/{chart-linechart-4AF7Q_zF.js.map → chart-linechart-DBdIULsM.js.map} +1 -1
- package/dist/client/chunks/{chart-linechart-config-BS1qVC8K.js → chart-linechart-config-CVBVB7nS.js} +5 -6
- package/dist/client/chunks/chart-linechart-config-CVBVB7nS.js.map +1 -0
- package/dist/client/chunks/{chart-markdownchart-config-DMCD8phf.js → chart-markdownchart-config-Cq5Sxrgq.js} +5 -6
- package/dist/client/chunks/chart-markdownchart-config-Cq5Sxrgq.js.map +1 -0
- package/dist/client/chunks/{chart-piechart-Bf4TMIJP.js → chart-piechart-CzesCpZ_.js} +3 -3
- package/dist/client/chunks/{chart-piechart-Bf4TMIJP.js.map → chart-piechart-CzesCpZ_.js.map} +1 -1
- package/dist/client/chunks/{chart-piechart-config-6ZK8XaSX.js → chart-piechart-config-Bdd31Gdi.js} +5 -6
- package/dist/client/chunks/chart-piechart-config-Bdd31Gdi.js.map +1 -0
- package/dist/client/chunks/{chart-radarchart-DYar9VDH.js → chart-radarchart-B3WUEiTh.js} +3 -3
- package/dist/client/chunks/{chart-radarchart-DYar9VDH.js.map → chart-radarchart-B3WUEiTh.js.map} +1 -1
- package/dist/client/chunks/{chart-radarchart-config-CCWOkkwO.js → chart-radarchart-config-BWyfn0ij.js} +5 -6
- package/dist/client/chunks/chart-radarchart-config-BWyfn0ij.js.map +1 -0
- package/dist/client/chunks/{chart-radialbarchart-BzRlxNfh.js → chart-radialbarchart-DBiRcLd9.js} +3 -3
- package/dist/client/chunks/{chart-radialbarchart-BzRlxNfh.js.map → chart-radialbarchart-DBiRcLd9.js.map} +1 -1
- package/dist/client/chunks/{chart-radialbarchart-config-DicXYrMW.js → chart-radialbarchart-config-lU2_NQCD.js} +5 -6
- package/dist/client/chunks/chart-radialbarchart-config-lU2_NQCD.js.map +1 -0
- package/dist/client/chunks/{chart-scatterchart-DNVKc7nQ.js → chart-scatterchart-C_D9OqA1.js} +2 -2
- package/dist/client/chunks/{chart-scatterchart-DNVKc7nQ.js.map → chart-scatterchart-C_D9OqA1.js.map} +1 -1
- package/dist/client/chunks/{chart-scatterchart-config-DgYa-5vm.js → chart-scatterchart-config-DtLnut1M.js} +5 -6
- package/dist/client/chunks/chart-scatterchart-config-DtLnut1M.js.map +1 -0
- package/dist/client/chunks/{chart-treemapchart-CworQneQ.js → chart-treemapchart-DJqy3Sy7.js} +3 -3
- package/dist/client/chunks/{chart-treemapchart-CworQneQ.js.map → chart-treemapchart-DJqy3Sy7.js.map} +1 -1
- package/dist/client/chunks/{chart-treemapchart-config-DGhteyBe.js → chart-treemapchart-config-BEiIWQnR.js} +5 -6
- package/dist/client/chunks/chart-treemapchart-config-BEiIWQnR.js.map +1 -0
- package/dist/client/chunks/{charts-Cjl5gNIQ.js → charts-DFbr7EGW.js} +45 -45
- package/dist/client/chunks/{charts-Cjl5gNIQ.js.map → charts-DFbr7EGW.js.map} +1 -1
- package/dist/client/chunks/icons-D6z-_9sa.js +1400 -0
- package/dist/client/chunks/icons-D6z-_9sa.js.map +1 -0
- package/dist/client/chunks/index-_pVwmFVW.js +551 -0
- package/dist/client/chunks/index-_pVwmFVW.js.map +1 -0
- package/dist/client/components.js +3149 -3132
- package/dist/client/components.js.map +1 -1
- package/dist/client/hooks.js +5 -5
- package/dist/client/icons/defaultIcons.d.ts +5 -0
- package/dist/client/icons/index.d.ts +22 -0
- package/dist/client/icons/registry.d.ts +58 -0
- package/dist/client/icons/types.d.ts +111 -0
- package/dist/client/icons.d.ts +2 -0
- package/dist/client/icons.js +15 -0
- package/dist/client/icons.js.map +1 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +44 -32
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers/CubeProvider.d.ts +1 -1
- package/dist/client/providers.js +1 -1
- package/dist/client/styles.css +1 -1
- package/dist/client/types.d.ts +1 -0
- package/dist/client-bundle-stats.html +1 -1
- package/package.json +21 -9
- package/dist/client/chunks/chart-activitygridchart--4a5X5eV.js +0 -3713
- package/dist/client/chunks/chart-activitygridchart--4a5X5eV.js.map +0 -1
- package/dist/client/chunks/chart-activitygridchart-config-D9CgNH02.js +0 -51
- package/dist/client/chunks/chart-activitygridchart-config-D9CgNH02.js.map +0 -1
- package/dist/client/chunks/chart-areachart-config-InZgxubz.js.map +0 -1
- package/dist/client/chunks/chart-barchart-config-DxatOnVV.js.map +0 -1
- package/dist/client/chunks/chart-bubblechart-config-CcZTMTCx.js.map +0 -1
- package/dist/client/chunks/chart-datatable-config-D7mojhYA.js.map +0 -1
- package/dist/client/chunks/chart-kpidelta-config-icJXuFxe.js.map +0 -1
- package/dist/client/chunks/chart-kpinumber-config-T39g03ud.js.map +0 -1
- package/dist/client/chunks/chart-kpitext-config-BbJGXAVk.js.map +0 -1
- package/dist/client/chunks/chart-linechart-config-BS1qVC8K.js.map +0 -1
- package/dist/client/chunks/chart-markdownchart-config-DMCD8phf.js.map +0 -1
- package/dist/client/chunks/chart-piechart-config-6ZK8XaSX.js.map +0 -1
- package/dist/client/chunks/chart-radarchart-config-CCWOkkwO.js.map +0 -1
- package/dist/client/chunks/chart-radialbarchart-config-DicXYrMW.js.map +0 -1
- package/dist/client/chunks/chart-scatterchart-config-DgYa-5vm.js.map +0 -1
- package/dist/client/chunks/chart-treemapchart-config-DGhteyBe.js.map +0 -1
- package/dist/client/chunks/icons-D-n_woAP.js +0 -2386
- package/dist/client/chunks/icons-D-n_woAP.js.map +0 -1
- package/dist/client/chunks/index-Cn50vSlx.js +0 -8707
- package/dist/client/chunks/index-Cn50vSlx.js.map +0 -1
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { d as c, a as h, b as d, c as y, e as p, f, g as $, h as u, i as g, j as v, k as b, l as D, m as T, n as k, o as w, p as A, q as C, r as x, s as M, t as I, u as B, v as N, w as R, x as O, y as S, z as F, A as G, B as K, C as j, D as _, E as q, F as L, G as P, H as U, I as V, J as z, K as H, L as W, M as E, N as J, O as Q, P as X, Q as Z, R as Y, S as aa, T as ta, U as ea, V as ia, W as oa, X as ra, Y as ca, Z as na, _ as sa, $ as da, a0 as ya, a1 as ua, a2 as ga, a3 as ma, a4 as la, a5 as ha, a6 as m } from "./icons-D6z-_9sa.js";
|
|
3
|
+
const l = {
|
|
4
|
+
// Action icons
|
|
5
|
+
close: { icon: ha, category: "action" },
|
|
6
|
+
add: { icon: la, category: "action" },
|
|
7
|
+
edit: { icon: ma, category: "action" },
|
|
8
|
+
delete: { icon: ga, category: "action" },
|
|
9
|
+
refresh: { icon: c, category: "action" },
|
|
10
|
+
copy: { icon: ua, category: "action" },
|
|
11
|
+
duplicate: { icon: ya, category: "action" },
|
|
12
|
+
settings: { icon: da, category: "action" },
|
|
13
|
+
filter: { icon: sa, category: "action" },
|
|
14
|
+
share: { icon: na, category: "action" },
|
|
15
|
+
expand: { icon: u, category: "action" },
|
|
16
|
+
collapse: { icon: g, category: "action" },
|
|
17
|
+
search: { icon: ca, category: "action" },
|
|
18
|
+
menu: { icon: ra, category: "action" },
|
|
19
|
+
run: { icon: oa, category: "action" },
|
|
20
|
+
check: { icon: ia, category: "action" },
|
|
21
|
+
link: { icon: ea, category: "action" },
|
|
22
|
+
eye: { icon: ta, category: "action" },
|
|
23
|
+
eyeOff: { icon: aa, category: "action" },
|
|
24
|
+
adjustments: { icon: Y, category: "action" },
|
|
25
|
+
desktop: { icon: Z, category: "action" },
|
|
26
|
+
table: { icon: X, category: "action" },
|
|
27
|
+
// Field type icons (solid for visual distinction)
|
|
28
|
+
measure: { icon: Q, category: "field" },
|
|
29
|
+
dimension: { icon: J, category: "field" },
|
|
30
|
+
timeDimension: { icon: E, category: "field" },
|
|
31
|
+
segment: { icon: W, category: "field" },
|
|
32
|
+
// Chart type icons (Tabler - keeping existing visuals)
|
|
33
|
+
chartBar: { icon: H, category: "chart" },
|
|
34
|
+
chartLine: { icon: z, category: "chart" },
|
|
35
|
+
chartArea: { icon: V, category: "chart" },
|
|
36
|
+
chartPie: { icon: U, category: "chart" },
|
|
37
|
+
chartScatter: { icon: P, category: "chart" },
|
|
38
|
+
chartBubble: { icon: L, category: "chart" },
|
|
39
|
+
chartRadar: { icon: q, category: "chart" },
|
|
40
|
+
chartRadialBar: { icon: _, category: "chart" },
|
|
41
|
+
chartTreemap: { icon: j, category: "chart" },
|
|
42
|
+
chartTable: { icon: K, category: "chart" },
|
|
43
|
+
chartActivityGrid: { icon: G, category: "chart" },
|
|
44
|
+
chartKpiNumber: { icon: F, category: "chart" },
|
|
45
|
+
chartKpiDelta: { icon: S, category: "chart" },
|
|
46
|
+
chartKpiText: { icon: O, category: "chart" },
|
|
47
|
+
chartMarkdown: { icon: R, category: "chart" },
|
|
48
|
+
// Measure type icons (solid)
|
|
49
|
+
measureCount: { icon: N, category: "measure" },
|
|
50
|
+
measureCountDistinct: { icon: B, category: "measure" },
|
|
51
|
+
measureCountDistinctApprox: { icon: I, category: "measure" },
|
|
52
|
+
measureSum: { icon: M, category: "measure" },
|
|
53
|
+
measureAvg: { icon: x, category: "measure" },
|
|
54
|
+
measureMin: { icon: d, category: "measure" },
|
|
55
|
+
measureMax: { icon: y, category: "measure" },
|
|
56
|
+
measureRunningTotal: { icon: C, category: "measure" },
|
|
57
|
+
measureCalculated: { icon: A, category: "measure" },
|
|
58
|
+
measureNumber: { icon: w, category: "measure" },
|
|
59
|
+
// State icons
|
|
60
|
+
success: { icon: k, category: "state" },
|
|
61
|
+
warning: { icon: T, category: "state" },
|
|
62
|
+
error: { icon: D, category: "state" },
|
|
63
|
+
info: { icon: b, category: "state" },
|
|
64
|
+
loading: { icon: c, category: "state" },
|
|
65
|
+
sparkles: { icon: v, category: "state" },
|
|
66
|
+
// Navigation icons
|
|
67
|
+
chevronUp: { icon: g, category: "navigation" },
|
|
68
|
+
chevronDown: { icon: u, category: "navigation" },
|
|
69
|
+
chevronLeft: { icon: $, category: "navigation" },
|
|
70
|
+
chevronRight: { icon: f, category: "navigation" },
|
|
71
|
+
chevronUpDown: { icon: p, category: "navigation" },
|
|
72
|
+
arrowUp: { icon: y, category: "navigation" },
|
|
73
|
+
arrowDown: { icon: d, category: "navigation" },
|
|
74
|
+
arrowRight: { icon: h, category: "navigation" },
|
|
75
|
+
arrowPath: { icon: c, category: "navigation" }
|
|
76
|
+
};
|
|
77
|
+
let i = { ...l };
|
|
78
|
+
function ba() {
|
|
79
|
+
return i;
|
|
80
|
+
}
|
|
81
|
+
function r(t) {
|
|
82
|
+
const e = i[t];
|
|
83
|
+
return e ? ({ className: a, ...o }) => /* @__PURE__ */ s(m, { icon: e.icon, className: a, ...o }) : (console.warn(`Icon "${t}" not found in registry, using fallback`), ({ className: a, ...o }) => /* @__PURE__ */ s(m, { icon: i.info.icon, className: a, ...o }));
|
|
84
|
+
}
|
|
85
|
+
function Da(t) {
|
|
86
|
+
return i[t]?.icon ?? i.info.icon;
|
|
87
|
+
}
|
|
88
|
+
function Ta(t, e) {
|
|
89
|
+
i[t] && (i[t] = {
|
|
90
|
+
...i[t],
|
|
91
|
+
icon: e
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function ka(t) {
|
|
95
|
+
for (const [e, a] of Object.entries(t))
|
|
96
|
+
if (a && e in i) {
|
|
97
|
+
const o = e;
|
|
98
|
+
if ("body" in a)
|
|
99
|
+
i[o] = {
|
|
100
|
+
...i[o],
|
|
101
|
+
icon: a
|
|
102
|
+
};
|
|
103
|
+
else {
|
|
104
|
+
const n = a;
|
|
105
|
+
i[o] = {
|
|
106
|
+
...i[o],
|
|
107
|
+
...n,
|
|
108
|
+
icon: n.icon ?? i[o].icon
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function wa() {
|
|
114
|
+
i = { ...l };
|
|
115
|
+
}
|
|
116
|
+
function Aa(t) {
|
|
117
|
+
const e = {};
|
|
118
|
+
for (const [a, o] of Object.entries(i))
|
|
119
|
+
o.category === t && (e[a] = r(a));
|
|
120
|
+
return e;
|
|
121
|
+
}
|
|
122
|
+
function Ca(t) {
|
|
123
|
+
const a = {
|
|
124
|
+
count: "measureCount",
|
|
125
|
+
countDistinct: "measureCountDistinct",
|
|
126
|
+
countDistinctApprox: "measureCountDistinctApprox",
|
|
127
|
+
sum: "measureSum",
|
|
128
|
+
avg: "measureAvg",
|
|
129
|
+
min: "measureMin",
|
|
130
|
+
max: "measureMax",
|
|
131
|
+
runningTotal: "measureRunningTotal",
|
|
132
|
+
calculated: "measureCalculated",
|
|
133
|
+
number: "measureNumber"
|
|
134
|
+
}[t || ""] || "measureCount";
|
|
135
|
+
return r(a);
|
|
136
|
+
}
|
|
137
|
+
function pa(t) {
|
|
138
|
+
const a = {
|
|
139
|
+
bar: "chartBar",
|
|
140
|
+
line: "chartLine",
|
|
141
|
+
area: "chartArea",
|
|
142
|
+
pie: "chartPie",
|
|
143
|
+
scatter: "chartScatter",
|
|
144
|
+
bubble: "chartBubble",
|
|
145
|
+
radar: "chartRadar",
|
|
146
|
+
radialBar: "chartRadialBar",
|
|
147
|
+
treemap: "chartTreemap",
|
|
148
|
+
table: "chartTable",
|
|
149
|
+
activityGrid: "chartActivityGrid",
|
|
150
|
+
kpiNumber: "chartKpiNumber",
|
|
151
|
+
kpiDelta: "chartKpiDelta",
|
|
152
|
+
kpiText: "chartKpiText",
|
|
153
|
+
markdown: "chartMarkdown"
|
|
154
|
+
}[t] || "chartBar";
|
|
155
|
+
return r(a);
|
|
156
|
+
}
|
|
157
|
+
function xa(t) {
|
|
158
|
+
const a = {
|
|
159
|
+
measure: "measure",
|
|
160
|
+
dimension: "dimension",
|
|
161
|
+
timeDimension: "timeDimension",
|
|
162
|
+
time: "timeDimension",
|
|
163
|
+
segment: "segment"
|
|
164
|
+
}[t] || "dimension";
|
|
165
|
+
return r(a);
|
|
166
|
+
}
|
|
167
|
+
const fa = {
|
|
168
|
+
icon: pa("activityGrid"),
|
|
169
|
+
description: "GitHub-style activity grid showing temporal patterns across different time scales",
|
|
170
|
+
useCase: "Best for visualizing activity patterns over time. Supports hour (3hr blocks × days), day (days × weeks), week (weeks × months), month (months × quarters), and quarter (quarters × years) granularities",
|
|
171
|
+
dropZones: [
|
|
172
|
+
{
|
|
173
|
+
key: "dateField",
|
|
174
|
+
label: "Time Dimension",
|
|
175
|
+
description: "Time field that determines grid structure (granularity affects layout)",
|
|
176
|
+
mandatory: !0,
|
|
177
|
+
maxItems: 1,
|
|
178
|
+
acceptTypes: ["timeDimension"],
|
|
179
|
+
emptyText: "Drop a time dimension (granularity affects grid structure)"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
key: "valueField",
|
|
183
|
+
label: "Activity Measure",
|
|
184
|
+
description: "Measure used for activity intensity (color coding)",
|
|
185
|
+
mandatory: !0,
|
|
186
|
+
maxItems: 1,
|
|
187
|
+
acceptTypes: ["measure"],
|
|
188
|
+
emptyText: "Drop a measure for activity intensity"
|
|
189
|
+
}
|
|
190
|
+
],
|
|
191
|
+
displayOptions: ["showLabels", "showTooltip", "hideHeader"],
|
|
192
|
+
displayOptionsConfig: [
|
|
193
|
+
{
|
|
194
|
+
key: "fitToWidth",
|
|
195
|
+
label: "Fit to Width",
|
|
196
|
+
type: "boolean",
|
|
197
|
+
defaultValue: !1,
|
|
198
|
+
description: "Automatically size blocks to fill portlet width and height while maintaining aspect ratio"
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
validate: (t) => {
|
|
202
|
+
const { dateField: e, valueField: a } = t;
|
|
203
|
+
return !e || Array.isArray(e) && e.length === 0 ? {
|
|
204
|
+
isValid: !1,
|
|
205
|
+
message: "Time dimension is required for activity grid"
|
|
206
|
+
} : !a || Array.isArray(a) && a.length === 0 ? {
|
|
207
|
+
isValid: !1,
|
|
208
|
+
message: "Activity measure is required for intensity mapping"
|
|
209
|
+
} : { isValid: !0 };
|
|
210
|
+
}
|
|
211
|
+
}, Ma = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
212
|
+
__proto__: null,
|
|
213
|
+
activityGridChartConfig: fa
|
|
214
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
215
|
+
export {
|
|
216
|
+
Ma as A,
|
|
217
|
+
l as D,
|
|
218
|
+
r as a,
|
|
219
|
+
Da as b,
|
|
220
|
+
wa as c,
|
|
221
|
+
ba as d,
|
|
222
|
+
Aa as e,
|
|
223
|
+
Ca as f,
|
|
224
|
+
pa as g,
|
|
225
|
+
xa as h,
|
|
226
|
+
fa as i,
|
|
227
|
+
ka as r,
|
|
228
|
+
Ta as s
|
|
229
|
+
};
|
|
230
|
+
//# sourceMappingURL=chart-activitygridchart-config-48WqIofo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-activitygridchart-config-48WqIofo.js","sources":["../../../src/client/icons/defaultIcons.ts","../../../src/client/icons/registry.tsx","../../../src/client/components/charts/ActivityGridChart.config.tsx"],"sourcesContent":["/**\n * Default icon definitions using Iconify icon sets\n * Uses HeroIcons (outline/solid) and Tabler icons via Iconify\n */\n\n// HeroIcons Outline\nimport xMark from '@iconify-icons/heroicons-outline/x-mark'\nimport plus from '@iconify-icons/heroicons-outline/plus'\nimport pencil from '@iconify-icons/heroicons-outline/pencil'\nimport trash from '@iconify-icons/heroicons-outline/trash'\nimport arrowPath from '@iconify-icons/heroicons-outline/arrow-path'\nimport clipboardDocument from '@iconify-icons/heroicons-outline/clipboard-document'\nimport documentDuplicate from '@iconify-icons/heroicons-outline/document-duplicate'\nimport cog from '@iconify-icons/heroicons-outline/cog'\nimport funnel from '@iconify-icons/heroicons-outline/funnel'\nimport share from '@iconify-icons/heroicons-outline/share'\nimport chevronUp from '@iconify-icons/heroicons-outline/chevron-up'\nimport chevronDown from '@iconify-icons/heroicons-outline/chevron-down'\nimport chevronLeft from '@iconify-icons/heroicons-outline/chevron-left'\nimport chevronRight from '@iconify-icons/heroicons-outline/chevron-right'\nimport magnifyingGlass from '@iconify-icons/heroicons-outline/magnifying-glass'\nimport bars3 from '@iconify-icons/heroicons-outline/bars-3'\nimport checkCircle from '@iconify-icons/heroicons-outline/check-circle'\nimport exclamationTriangle from '@iconify-icons/heroicons-outline/exclaimation-triangle'\nimport exclamationCircle from '@iconify-icons/heroicons-outline/exclamation-circle'\nimport sparkles from '@iconify-icons/heroicons-outline/sparkles'\nimport eye from '@iconify-icons/heroicons-outline/eye'\nimport eyeSlash from '@iconify-icons/heroicons-outline/eye-slash'\nimport adjustmentsHorizontal from '@iconify-icons/heroicons-outline/adjustments-horizontal'\nimport computerDesktop from '@iconify-icons/heroicons-outline/computer-desktop'\nimport tableCells from '@iconify-icons/heroicons-outline/table-cells'\nimport link from '@iconify-icons/heroicons-outline/link'\nimport arrowRight from '@iconify-icons/heroicons-outline/arrow-right'\n\n// HeroIcons Solid (for field type indicators and measures)\nimport chartBarSolid from '@iconify-icons/heroicons-solid/chart-bar'\nimport tagSolid from '@iconify-icons/heroicons-solid/tag'\nimport calendarSolid from '@iconify-icons/heroicons-solid/calendar'\nimport rectangleGroupSolid from '@iconify-icons/heroicons-solid/rectangle-group'\nimport playSolid from '@iconify-icons/heroicons-solid/play'\nimport checkSolid from '@iconify-icons/heroicons-solid/check'\nimport scaleSolid from '@iconify-icons/heroicons-solid/scale'\nimport arrowDownCircleSolid from '@iconify-icons/heroicons-solid/arrow-down-circle'\nimport arrowUpCircleSolid from '@iconify-icons/heroicons-solid/arrow-up-circle'\nimport arrowTrendingUpSolid from '@iconify-icons/heroicons-solid/arrow-trending-up'\nimport beakerSolid from '@iconify-icons/heroicons-solid/beaker'\nimport bars3BottomLeftSolid from '@iconify-icons/heroicons-solid/bars-3-bottom-left'\nimport fingerPrintSolid from '@iconify-icons/heroicons-solid/finger-print'\nimport chartBarSquareSolid from '@iconify-icons/heroicons-solid/chart-bar-square'\nimport plusCircleSolid from '@iconify-icons/heroicons-solid/plus-circle'\nimport hashtagSolid from '@iconify-icons/heroicons-solid/hashtag'\n\n// Tabler icons for chart types (already using these)\nimport chartBarTabler from '@iconify-icons/tabler/chart-bar'\nimport chartLine from '@iconify-icons/tabler/chart-line'\nimport chartAreaLine from '@iconify-icons/tabler/chart-area-line'\nimport chartPie from '@iconify-icons/tabler/chart-pie'\nimport chartDots2 from '@iconify-icons/tabler/chart-dots-2'\nimport chartBubble from '@iconify-icons/tabler/chart-bubble'\nimport chartRadar from '@iconify-icons/tabler/chart-radar'\nimport radar2 from '@iconify-icons/tabler/radar-2'\nimport chartTreemap from '@iconify-icons/tabler/chart-treemap'\nimport table from '@iconify-icons/tabler/table'\nimport calendarStats from '@iconify-icons/tabler/calendar-stats'\nimport number from '@iconify-icons/tabler/number'\nimport trendingUp from '@iconify-icons/tabler/trending-up'\nimport typography from '@iconify-icons/tabler/typography'\nimport fileText from '@iconify-icons/tabler/file-text'\nimport infoCircle from '@iconify-icons/tabler/info-circle'\nimport selector from '@iconify-icons/tabler/selector'\n\nimport type { IconRegistry } from './types'\n\n/**\n * Default icon registry with all icons used in drizzle-cube\n */\nexport const DEFAULT_ICONS: IconRegistry = {\n // Action icons\n close: { icon: xMark, category: 'action' },\n add: { icon: plus, category: 'action' },\n edit: { icon: pencil, category: 'action' },\n delete: { icon: trash, category: 'action' },\n refresh: { icon: arrowPath, category: 'action' },\n copy: { icon: clipboardDocument, category: 'action' },\n duplicate: { icon: documentDuplicate, category: 'action' },\n settings: { icon: cog, category: 'action' },\n filter: { icon: funnel, category: 'action' },\n share: { icon: share, category: 'action' },\n expand: { icon: chevronDown, category: 'action' },\n collapse: { icon: chevronUp, category: 'action' },\n search: { icon: magnifyingGlass, category: 'action' },\n menu: { icon: bars3, category: 'action' },\n run: { icon: playSolid, category: 'action' },\n check: { icon: checkSolid, category: 'action' },\n link: { icon: link, category: 'action' },\n eye: { icon: eye, category: 'action' },\n eyeOff: { icon: eyeSlash, category: 'action' },\n adjustments: { icon: adjustmentsHorizontal, category: 'action' },\n desktop: { icon: computerDesktop, category: 'action' },\n table: { icon: tableCells, category: 'action' },\n\n // Field type icons (solid for visual distinction)\n measure: { icon: chartBarSolid, category: 'field' },\n dimension: { icon: tagSolid, category: 'field' },\n timeDimension: { icon: calendarSolid, category: 'field' },\n segment: { icon: rectangleGroupSolid, category: 'field' },\n\n // Chart type icons (Tabler - keeping existing visuals)\n chartBar: { icon: chartBarTabler, category: 'chart' },\n chartLine: { icon: chartLine, category: 'chart' },\n chartArea: { icon: chartAreaLine, category: 'chart' },\n chartPie: { icon: chartPie, category: 'chart' },\n chartScatter: { icon: chartDots2, category: 'chart' },\n chartBubble: { icon: chartBubble, category: 'chart' },\n chartRadar: { icon: chartRadar, category: 'chart' },\n chartRadialBar: { icon: radar2, category: 'chart' },\n chartTreemap: { icon: chartTreemap, category: 'chart' },\n chartTable: { icon: table, category: 'chart' },\n chartActivityGrid: { icon: calendarStats, category: 'chart' },\n chartKpiNumber: { icon: number, category: 'chart' },\n chartKpiDelta: { icon: trendingUp, category: 'chart' },\n chartKpiText: { icon: typography, category: 'chart' },\n chartMarkdown: { icon: fileText, category: 'chart' },\n\n // Measure type icons (solid)\n measureCount: { icon: bars3BottomLeftSolid, category: 'measure' },\n measureCountDistinct: { icon: fingerPrintSolid, category: 'measure' },\n measureCountDistinctApprox: { icon: chartBarSquareSolid, category: 'measure' },\n measureSum: { icon: plusCircleSolid, category: 'measure' },\n measureAvg: { icon: scaleSolid, category: 'measure' },\n measureMin: { icon: arrowDownCircleSolid, category: 'measure' },\n measureMax: { icon: arrowUpCircleSolid, category: 'measure' },\n measureRunningTotal: { icon: arrowTrendingUpSolid, category: 'measure' },\n measureCalculated: { icon: beakerSolid, category: 'measure' },\n measureNumber: { icon: hashtagSolid, category: 'measure' },\n\n // State icons\n success: { icon: checkCircle, category: 'state' },\n warning: { icon: exclamationTriangle, category: 'state' },\n error: { icon: exclamationCircle, category: 'state' },\n info: { icon: infoCircle, category: 'state' },\n loading: { icon: arrowPath, category: 'state' },\n sparkles: { icon: sparkles, category: 'state' },\n\n // Navigation icons\n chevronUp: { icon: chevronUp, category: 'navigation' },\n chevronDown: { icon: chevronDown, category: 'navigation' },\n chevronLeft: { icon: chevronLeft, category: 'navigation' },\n chevronRight: { icon: chevronRight, category: 'navigation' },\n chevronUpDown: { icon: selector, category: 'navigation' },\n arrowUp: { icon: arrowUpCircleSolid, category: 'navigation' },\n arrowDown: { icon: arrowDownCircleSolid, category: 'navigation' },\n arrowRight: { icon: arrowRight, category: 'navigation' },\n arrowPath: { icon: arrowPath, category: 'navigation' },\n}\n","/**\n * Icon Registry - Centralized icon management following the theme pattern\n * Allows users to override any icon with their own implementations\n */\n\nimport { Icon } from '@iconify/react'\nimport type { IconifyIcon } from '@iconify/types'\nimport type { ComponentType } from 'react'\nimport { DEFAULT_ICONS } from './defaultIcons'\nimport type { IconRegistry, IconName, IconDefinition, IconCategory, IconProps, PartialIconRegistry } from './types'\n\n// Internal mutable registry - starts with defaults\nlet _registry: IconRegistry = { ...DEFAULT_ICONS }\n\n/**\n * Get the full icon registry\n */\nexport function getIconRegistry(): IconRegistry {\n return _registry\n}\n\n/**\n * Get a specific icon as a React component\n * @param name The icon name from the registry\n * @returns A React component that renders the icon\n */\nexport function getIcon(name: IconName): ComponentType<IconProps> {\n const iconDef = _registry[name]\n if (!iconDef) {\n console.warn(`Icon \"${name}\" not found in registry, using fallback`)\n return ({ className, ...props }: IconProps) => (\n <Icon icon={_registry.info.icon} className={className} {...props} />\n )\n }\n\n return ({ className, ...props }: IconProps) => (\n <Icon icon={iconDef.icon} className={className} {...props} />\n )\n}\n\n/**\n * Get icon data directly (for use with Iconify's Icon component)\n * @param name The icon name from the registry\n * @returns The IconifyIcon data\n */\nexport function getIconData(name: IconName): IconifyIcon {\n return _registry[name]?.icon ?? _registry.info.icon\n}\n\n/**\n * Override a single icon in the registry\n * @param name The icon name to override\n * @param icon The new IconifyIcon data\n */\nexport function setIcon(name: IconName, icon: IconifyIcon): void {\n if (_registry[name]) {\n _registry[name] = {\n ..._registry[name],\n icon\n }\n }\n}\n\n/**\n * Register multiple icon overrides at once\n * @param overrides Partial registry with icons to override\n */\nexport function registerIcons(overrides: PartialIconRegistry): void {\n for (const [key, value] of Object.entries(overrides)) {\n if (value && key in _registry) {\n const iconKey = key as IconName\n\n // Check if it's a raw IconifyIcon or a full IconDefinition\n if ('body' in value) {\n // It's an IconifyIcon\n _registry[iconKey] = {\n ..._registry[iconKey],\n icon: value as IconifyIcon\n }\n } else {\n // It's a partial IconDefinition\n const partial = value as Partial<IconDefinition>\n _registry[iconKey] = {\n ..._registry[iconKey],\n ...partial,\n icon: partial.icon ?? _registry[iconKey].icon\n }\n }\n }\n }\n}\n\n/**\n * Reset the registry to default icons\n */\nexport function resetIcons(): void {\n _registry = { ...DEFAULT_ICONS }\n}\n\n/**\n * Get all icons in a specific category\n * @param category The icon category to filter by\n * @returns Record of icon names to their components\n */\nexport function getIconsByCategory(category: IconCategory): Record<string, ComponentType<IconProps>> {\n const result: Record<string, ComponentType<IconProps>> = {}\n\n for (const [key, value] of Object.entries(_registry)) {\n if (value.category === category) {\n result[key] = getIcon(key as IconName)\n }\n }\n\n return result\n}\n\n/**\n * Helper to get measure type icon component\n * @param measureType The measure type (count, avg, sum, etc.)\n * @returns React component for the icon\n */\nexport function getMeasureTypeIcon(measureType: string | undefined): ComponentType<IconProps> {\n const typeMap: Record<string, IconName> = {\n count: 'measureCount',\n countDistinct: 'measureCountDistinct',\n countDistinctApprox: 'measureCountDistinctApprox',\n sum: 'measureSum',\n avg: 'measureAvg',\n min: 'measureMin',\n max: 'measureMax',\n runningTotal: 'measureRunningTotal',\n calculated: 'measureCalculated',\n number: 'measureNumber'\n }\n\n const iconName = typeMap[measureType || ''] || 'measureCount'\n return getIcon(iconName)\n}\n\n/**\n * Helper to get chart type icon component\n * @param chartType The chart type (bar, line, pie, etc.)\n * @returns React component for the icon\n */\nexport function getChartTypeIcon(chartType: string): ComponentType<IconProps> {\n const typeMap: Record<string, IconName> = {\n bar: 'chartBar',\n line: 'chartLine',\n area: 'chartArea',\n pie: 'chartPie',\n scatter: 'chartScatter',\n bubble: 'chartBubble',\n radar: 'chartRadar',\n radialBar: 'chartRadialBar',\n treemap: 'chartTreemap',\n table: 'chartTable',\n activityGrid: 'chartActivityGrid',\n kpiNumber: 'chartKpiNumber',\n kpiDelta: 'chartKpiDelta',\n kpiText: 'chartKpiText',\n markdown: 'chartMarkdown'\n }\n\n const iconName = typeMap[chartType] || 'chartBar'\n return getIcon(iconName)\n}\n\n/**\n * Helper to get field type icon component\n * @param fieldType The field type (measure, dimension, timeDimension)\n * @returns React component for the icon\n */\nexport function getFieldTypeIcon(fieldType: string): ComponentType<IconProps> {\n const typeMap: Record<string, IconName> = {\n measure: 'measure',\n dimension: 'dimension',\n timeDimension: 'timeDimension',\n time: 'timeDimension',\n segment: 'segment'\n }\n\n const iconName = typeMap[fieldType] || 'dimension'\n return getIcon(iconName)\n}\n","import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { getChartTypeIcon } from '../../icons'\n\n/**\n * Configuration for the activity grid chart type\n */\nexport const activityGridChartConfig: ChartTypeConfig = {\n icon: getChartTypeIcon('activityGrid'),\n description: 'GitHub-style activity grid showing temporal patterns across different time scales',\n useCase: 'Best for visualizing activity patterns over time. Supports hour (3hr blocks × days), day (days × weeks), week (weeks × months), month (months × quarters), and quarter (quarters × years) granularities',\n dropZones: [\n {\n key: 'dateField',\n label: 'Time Dimension',\n description: 'Time field that determines grid structure (granularity affects layout)',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['timeDimension'],\n emptyText: 'Drop a time dimension (granularity affects grid structure)'\n },\n {\n key: 'valueField',\n label: 'Activity Measure',\n description: 'Measure used for activity intensity (color coding)',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['measure'],\n emptyText: 'Drop a measure for activity intensity'\n }\n ],\n displayOptions: ['showLabels', 'showTooltip', 'hideHeader'],\n displayOptionsConfig: [\n {\n key: 'fitToWidth',\n label: 'Fit to Width',\n type: 'boolean',\n defaultValue: false,\n description: 'Automatically size blocks to fill portlet width and height while maintaining aspect ratio'\n }\n ],\n validate: (config) => {\n const { dateField, valueField } = config\n \n if (!dateField || (Array.isArray(dateField) && dateField.length === 0)) {\n return {\n isValid: false,\n message: 'Time dimension is required for activity grid'\n }\n }\n \n if (!valueField || (Array.isArray(valueField) && valueField.length === 0)) {\n return {\n isValid: false,\n message: 'Activity measure is required for intensity mapping'\n }\n }\n \n return { isValid: true }\n }\n}"],"names":["DEFAULT_ICONS","xMark","plus","pencil","trash","arrowPath","clipboardDocument","documentDuplicate","cog","funnel","share","chevronDown","chevronUp","magnifyingGlass","bars3","playSolid","checkSolid","link","eye","eyeSlash","adjustmentsHorizontal","computerDesktop","tableCells","chartBarSolid","tagSolid","calendarSolid","rectangleGroupSolid","chartBarTabler","chartLine","chartAreaLine","chartPie","chartDots2","chartBubble","chartRadar","radar2","chartTreemap","table","calendarStats","number","trendingUp","typography","fileText","bars3BottomLeftSolid","fingerPrintSolid","chartBarSquareSolid","plusCircleSolid","scaleSolid","arrowDownCircleSolid","arrowUpCircleSolid","arrowTrendingUpSolid","beakerSolid","hashtagSolid","checkCircle","exclamationTriangle","exclamationCircle","infoCircle","sparkles","chevronLeft","chevronRight","selector","arrowRight","_registry","getIconRegistry","getIcon","name","iconDef","className","props","jsx","Icon","getIconData","setIcon","icon","registerIcons","overrides","key","value","iconKey","partial","resetIcons","getIconsByCategory","category","result","getMeasureTypeIcon","measureType","iconName","getChartTypeIcon","chartType","getFieldTypeIcon","fieldType","activityGridChartConfig","config","dateField","valueField"],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import { jsx as t, jsxs as d, Fragment as D } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState as L } from "react";
|
|
3
3
|
import { ComposedChart as M, CartesianGrid as O, XAxis as V, YAxis as E, Legend as G, Area as $, Line as b } from "recharts";
|
|
4
4
|
import { C as I } from "./chart-chartcontainer-CdwzIKP1.js";
|
|
5
|
-
import { C } from "./chart-charttooltip-
|
|
6
|
-
import { u as R, t as W, C as H, f as g, a as N } from "./chart-activitygridchart
|
|
5
|
+
import { C } from "./chart-charttooltip-D9BKscsw.js";
|
|
6
|
+
import { u as R, t as W, C as H, f as g, a as N } from "./chart-activitygridchart-BzL97Vnm.js";
|
|
7
7
|
function K(r) {
|
|
8
8
|
if (!r || typeof r != "string")
|
|
9
9
|
return [];
|
|
@@ -201,4 +201,4 @@ export {
|
|
|
201
201
|
K as p,
|
|
202
202
|
X as s
|
|
203
203
|
};
|
|
204
|
-
//# sourceMappingURL=chart-areachart-
|
|
204
|
+
//# sourceMappingURL=chart-areachart-BtH3SvAM.js.map
|
package/dist/client/chunks/{chart-areachart-C_luzpU9.js.map → chart-areachart-BtH3SvAM.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-areachart-C_luzpU9.js","sources":["../../../src/client/utils/targetUtils.ts","../../../src/client/components/charts/AreaChart.tsx"],"sourcesContent":["/**\n * Utility functions for handling target values in charts\n */\n\n/**\n * Parse target values from string format\n * @param targetString - String containing target values (e.g., \"100\" or \"50,75,100\")\n * @returns Array of numeric target values\n */\nexport function parseTargetValues(targetString: string): number[] {\n if (!targetString || typeof targetString !== 'string') {\n return []\n }\n\n const trimmed = targetString.trim()\n if (!trimmed) {\n return []\n }\n\n try {\n // Split by comma and parse each value\n const values = trimmed\n .split(',')\n .map(val => val.trim())\n .filter(val => val !== '')\n .map(val => {\n const num = parseFloat(val)\n if (isNaN(num)) {\n throw new Error(`Invalid numeric value: ${val}`)\n }\n return num\n })\n\n return values.length > 0 ? values : []\n } catch (error) {\n console.warn('Failed to parse target values:', error)\n return []\n }\n}\n\n/**\n * Spread target values across data points\n * @param targets - Array of target values\n * @param dataLength - Number of data points to spread across\n * @returns Array of target values for each data point\n */\nexport function spreadTargetValues(targets: number[], dataLength: number): number[] {\n if (targets.length === 0 || dataLength <= 0) {\n return []\n }\n\n // If only one target value, repeat for all data points\n if (targets.length === 1) {\n return new Array(dataLength).fill(targets[0])\n }\n\n // If we have multiple targets, spread them evenly across data points\n const result: number[] = []\n const baseGroupSize = Math.floor(dataLength / targets.length)\n const remainder = dataLength % targets.length\n\n let currentIndex = 0\n \n for (let i = 0; i < targets.length; i++) {\n // Calculate group size for this target\n // First 'remainder' groups get an extra item\n const groupSize = baseGroupSize + (i < remainder ? 1 : 0)\n \n // Fill this group with the current target value\n for (let j = 0; j < groupSize; j++) {\n result[currentIndex++] = targets[i]\n }\n }\n\n return result\n}\n\n/**\n * Calculate variance between actual and target values\n * @param actual - Actual value\n * @param target - Target value\n * @returns Variance as percentage\n */\nexport function calculateVariance(actual: number, target: number): number {\n if (target === 0) {\n return actual === 0 ? 0 : (actual > 0 ? 100 : -100)\n }\n return ((actual - target) / target) * 100\n}\n\n/**\n * Format variance as percentage string with appropriate sign and color indication\n * @param variance - Variance percentage\n * @param decimals - Number of decimal places (default: 1)\n * @returns Formatted variance string (e.g., \"+12.5%\" or \"-8.3%\")\n */\nexport function formatVariance(variance: number, decimals: number = 1): string {\n const sign = variance >= 0 ? '+' : ''\n return `${sign}${variance.toFixed(decimals)}%`\n}\n\n/**\n * Get unique target values for reference lines\n * @param targets - Array of target values (may contain duplicates)\n * @returns Array of unique target values\n */\nexport function getUniqueTargets(targets: number[]): number[] {\n return [...new Set(targets)].sort((a, b) => a - b)\n}","import { useState } from 'react'\nimport { ComposedChart, Area, Line, XAxis, YAxis, CartesianGrid, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatNumericValue } from '../../utils/chartUtils'\nimport { parseTargetValues, spreadTargetValues } from '../../utils/targetUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function AreaChart({ \n data, \n chartConfig, \n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { labelMap, getFieldLabel } = useCubeContext()\n \n try {\n // Determine stacking from stackType (new) or stacked (legacy)\n const stackType = displayConfig?.stackType ?? (displayConfig?.stacked ? 'normal' : 'none')\n const shouldStack = stackType !== 'none'\n const isPercentStack = stackType === 'percent'\n\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n connectNulls: displayConfig?.connectNulls ?? false\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in area chart</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Invalid or missing chart axis configuration</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n // Use shared function to transform data and handle series\n const { data: chartData, seriesKeys } = transformChartDataWithSeries(\n data, \n xAxisField, \n yAxisFields, \n queryObject,\n seriesFields,\n labelMap\n )\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend\n \n // Use custom chart margins with extra left space for Y-axis label\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40 // Increased from 20 to 40 for Y-axis label space\n }\n \n // Process target values and add to chart data\n const targetValues = parseTargetValues(displayConfig?.target || '')\n const spreadTargets = spreadTargetValues(targetValues, chartData.length)\n \n // Add target data to chart data if targets exist\n let enhancedChartData = chartData\n if (spreadTargets.length > 0) {\n enhancedChartData = chartData.map((dataPoint, index) => ({\n ...dataPoint,\n __target: spreadTargets[index] || null\n }))\n }\n \n // Validate transformed data\n if (!chartData || chartData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for area chart after transformation</div>\n </div>\n </div>\n )\n }\n\n // Determine stack offset for percentage stacking\n const stackOffset = isPercentStack ? 'expand' as const : undefined\n\n return (\n <ChartContainer height={height}>\n <ComposedChart data={enhancedChartData} margin={chartMargins} stackOffset={stackOffset}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis\n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n angle={-45}\n textAnchor=\"end\"\n height={60}\n />\n <YAxis\n tick={{ fontSize: 12 }}\n tickFormatter={isPercentStack ? (v) => `${(v * 100).toFixed(0)}%` : undefined}\n domain={isPercentStack ? [0, 1] : undefined}\n label={isPercentStack ? undefined : { value: getFieldLabel(yAxisFields[0]), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={(value: any, name: any) => {\n // Handle null values in tooltip\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n if (name === 'Target') {\n return [formatNumericValue(value), 'Target Value']\n }\n // Format as percentage when using percent stacking\n if (isPercentStack && typeof value === 'number') {\n return [`${(value * 100).toFixed(1)}%`, name]\n }\n return [formatNumericValue(value), name]\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"rect\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Area\n key={seriesKey}\n type=\"monotone\"\n dataKey={seriesKey}\n stackId={shouldStack ? \"stack\" : undefined}\n stroke={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 0.6 : 0.1) : 0.3}\n strokeWidth={2}\n strokeOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n connectNulls={safeDisplayConfig.connectNulls}\n />\n ))}\n {spreadTargets.length > 0 && (\n <>\n {/* White background line */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n stroke=\"#ffffff\"\n strokeWidth={2}\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n {/* Grey dashed line on top */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n name=\"Target\"\n stroke=\"#8B5CF6\"\n strokeWidth={2}\n strokeDasharray=\"2 3\"\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n </>\n )}\n </ComposedChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'AreaChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Area Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}"],"names":["parseTargetValues","targetString","trimmed","values","val","num","error","spreadTargetValues","targets","dataLength","result","baseGroupSize","remainder","currentIndex","groupSize","j","calculateVariance","actual","target","formatVariance","variance","decimals","AreaChart","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredLegend","setHoveredLegend","useState","labelMap","getFieldLabel","useCubeContext","stackType","shouldStack","isPercentStack","safeDisplayConfig","jsx","jsxs","xAxisField","yAxisFields","seriesFields","chartData","seriesKeys","transformChartDataWithSeries","showLegend","chartMargins","CHART_MARGINS","targetValues","spreadTargets","enhancedChartData","dataPoint","index","ChartContainer","ComposedChart","CartesianGrid","XAxis","YAxis","v","ChartTooltip","value","name","formatNumericValue","Legend","o","seriesKey","Area","CHART_COLORS","Fragment","Line"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chart-areachart-BtH3SvAM.js","sources":["../../../src/client/utils/targetUtils.ts","../../../src/client/components/charts/AreaChart.tsx"],"sourcesContent":["/**\n * Utility functions for handling target values in charts\n */\n\n/**\n * Parse target values from string format\n * @param targetString - String containing target values (e.g., \"100\" or \"50,75,100\")\n * @returns Array of numeric target values\n */\nexport function parseTargetValues(targetString: string): number[] {\n if (!targetString || typeof targetString !== 'string') {\n return []\n }\n\n const trimmed = targetString.trim()\n if (!trimmed) {\n return []\n }\n\n try {\n // Split by comma and parse each value\n const values = trimmed\n .split(',')\n .map(val => val.trim())\n .filter(val => val !== '')\n .map(val => {\n const num = parseFloat(val)\n if (isNaN(num)) {\n throw new Error(`Invalid numeric value: ${val}`)\n }\n return num\n })\n\n return values.length > 0 ? values : []\n } catch (error) {\n console.warn('Failed to parse target values:', error)\n return []\n }\n}\n\n/**\n * Spread target values across data points\n * @param targets - Array of target values\n * @param dataLength - Number of data points to spread across\n * @returns Array of target values for each data point\n */\nexport function spreadTargetValues(targets: number[], dataLength: number): number[] {\n if (targets.length === 0 || dataLength <= 0) {\n return []\n }\n\n // If only one target value, repeat for all data points\n if (targets.length === 1) {\n return new Array(dataLength).fill(targets[0])\n }\n\n // If we have multiple targets, spread them evenly across data points\n const result: number[] = []\n const baseGroupSize = Math.floor(dataLength / targets.length)\n const remainder = dataLength % targets.length\n\n let currentIndex = 0\n \n for (let i = 0; i < targets.length; i++) {\n // Calculate group size for this target\n // First 'remainder' groups get an extra item\n const groupSize = baseGroupSize + (i < remainder ? 1 : 0)\n \n // Fill this group with the current target value\n for (let j = 0; j < groupSize; j++) {\n result[currentIndex++] = targets[i]\n }\n }\n\n return result\n}\n\n/**\n * Calculate variance between actual and target values\n * @param actual - Actual value\n * @param target - Target value\n * @returns Variance as percentage\n */\nexport function calculateVariance(actual: number, target: number): number {\n if (target === 0) {\n return actual === 0 ? 0 : (actual > 0 ? 100 : -100)\n }\n return ((actual - target) / target) * 100\n}\n\n/**\n * Format variance as percentage string with appropriate sign and color indication\n * @param variance - Variance percentage\n * @param decimals - Number of decimal places (default: 1)\n * @returns Formatted variance string (e.g., \"+12.5%\" or \"-8.3%\")\n */\nexport function formatVariance(variance: number, decimals: number = 1): string {\n const sign = variance >= 0 ? '+' : ''\n return `${sign}${variance.toFixed(decimals)}%`\n}\n\n/**\n * Get unique target values for reference lines\n * @param targets - Array of target values (may contain duplicates)\n * @returns Array of unique target values\n */\nexport function getUniqueTargets(targets: number[]): number[] {\n return [...new Set(targets)].sort((a, b) => a - b)\n}","import { useState } from 'react'\nimport { ComposedChart, Area, Line, XAxis, YAxis, CartesianGrid, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatNumericValue } from '../../utils/chartUtils'\nimport { parseTargetValues, spreadTargetValues } from '../../utils/targetUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function AreaChart({ \n data, \n chartConfig, \n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { labelMap, getFieldLabel } = useCubeContext()\n \n try {\n // Determine stacking from stackType (new) or stacked (legacy)\n const stackType = displayConfig?.stackType ?? (displayConfig?.stacked ? 'normal' : 'none')\n const shouldStack = stackType !== 'none'\n const isPercentStack = stackType === 'percent'\n\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n connectNulls: displayConfig?.connectNulls ?? false\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in area chart</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Invalid or missing chart axis configuration</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n // Use shared function to transform data and handle series\n const { data: chartData, seriesKeys } = transformChartDataWithSeries(\n data, \n xAxisField, \n yAxisFields, \n queryObject,\n seriesFields,\n labelMap\n )\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend\n \n // Use custom chart margins with extra left space for Y-axis label\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40 // Increased from 20 to 40 for Y-axis label space\n }\n \n // Process target values and add to chart data\n const targetValues = parseTargetValues(displayConfig?.target || '')\n const spreadTargets = spreadTargetValues(targetValues, chartData.length)\n \n // Add target data to chart data if targets exist\n let enhancedChartData = chartData\n if (spreadTargets.length > 0) {\n enhancedChartData = chartData.map((dataPoint, index) => ({\n ...dataPoint,\n __target: spreadTargets[index] || null\n }))\n }\n \n // Validate transformed data\n if (!chartData || chartData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for area chart after transformation</div>\n </div>\n </div>\n )\n }\n\n // Determine stack offset for percentage stacking\n const stackOffset = isPercentStack ? 'expand' as const : undefined\n\n return (\n <ChartContainer height={height}>\n <ComposedChart data={enhancedChartData} margin={chartMargins} stackOffset={stackOffset}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis\n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n angle={-45}\n textAnchor=\"end\"\n height={60}\n />\n <YAxis\n tick={{ fontSize: 12 }}\n tickFormatter={isPercentStack ? (v) => `${(v * 100).toFixed(0)}%` : undefined}\n domain={isPercentStack ? [0, 1] : undefined}\n label={isPercentStack ? undefined : { value: getFieldLabel(yAxisFields[0]), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={(value: any, name: any) => {\n // Handle null values in tooltip\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n if (name === 'Target') {\n return [formatNumericValue(value), 'Target Value']\n }\n // Format as percentage when using percent stacking\n if (isPercentStack && typeof value === 'number') {\n return [`${(value * 100).toFixed(1)}%`, name]\n }\n return [formatNumericValue(value), name]\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"rect\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Area\n key={seriesKey}\n type=\"monotone\"\n dataKey={seriesKey}\n stackId={shouldStack ? \"stack\" : undefined}\n stroke={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 0.6 : 0.1) : 0.3}\n strokeWidth={2}\n strokeOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n connectNulls={safeDisplayConfig.connectNulls}\n />\n ))}\n {spreadTargets.length > 0 && (\n <>\n {/* White background line */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n stroke=\"#ffffff\"\n strokeWidth={2}\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n {/* Grey dashed line on top */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n name=\"Target\"\n stroke=\"#8B5CF6\"\n strokeWidth={2}\n strokeDasharray=\"2 3\"\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n </>\n )}\n </ComposedChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'AreaChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Area Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}"],"names":["parseTargetValues","targetString","trimmed","values","val","num","error","spreadTargetValues","targets","dataLength","result","baseGroupSize","remainder","currentIndex","groupSize","j","calculateVariance","actual","target","formatVariance","variance","decimals","AreaChart","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredLegend","setHoveredLegend","useState","labelMap","getFieldLabel","useCubeContext","stackType","shouldStack","isPercentStack","safeDisplayConfig","jsx","jsxs","xAxisField","yAxisFields","seriesFields","chartData","seriesKeys","transformChartDataWithSeries","showLegend","chartMargins","CHART_MARGINS","targetValues","spreadTargets","enhancedChartData","dataPoint","index","ChartContainer","ComposedChart","CartesianGrid","XAxis","YAxis","v","ChartTooltip","value","name","formatNumericValue","Legend","o","seriesKey","Area","CHART_COLORS","Fragment","Line"],"mappings":"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"}
|
package/dist/client/chunks/{chart-areachart-config-InZgxubz.js → chart-areachart-config-D8taXdn1.js}
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
icon: ({ className: e }) => /* @__PURE__ */ s(a, { icon: o, className: e }),
|
|
1
|
+
import { g as e } from "./chart-activitygridchart-config-48WqIofo.js";
|
|
2
|
+
const s = {
|
|
3
|
+
icon: e("area"),
|
|
5
4
|
description: "Emphasize magnitude of change over time",
|
|
6
5
|
useCase: "Best for showing cumulative totals, volume changes, or stacked comparisons over time",
|
|
7
6
|
dropZones: [
|
|
@@ -61,6 +60,6 @@ const r = {
|
|
|
61
60
|
]
|
|
62
61
|
};
|
|
63
62
|
export {
|
|
64
|
-
|
|
63
|
+
s as areaChartConfig
|
|
65
64
|
};
|
|
66
|
-
//# sourceMappingURL=chart-areachart-config-
|
|
65
|
+
//# sourceMappingURL=chart-areachart-config-D8taXdn1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-areachart-config-D8taXdn1.js","sources":["../../../src/client/components/charts/AreaChart.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { getChartTypeIcon } from '../../icons'\n\n/**\n * Configuration for the area chart type\n */\nexport const areaChartConfig: ChartTypeConfig = {\n icon: getChartTypeIcon('area'),\n description: 'Emphasize magnitude of change over time',\n useCase: 'Best for showing cumulative totals, volume changes, or stacked comparisons over time',\n dropZones: [\n {\n key: 'xAxis',\n label: 'X-Axis (Time/Categories)',\n description: 'Time dimensions or dimensions for X-axis',\n mandatory: true,\n acceptTypes: ['dimension', 'timeDimension'],\n emptyText: 'Drop time dimensions or dimensions here'\n },\n {\n key: 'yAxis',\n label: 'Y-Axis (Values)',\n description: 'Measures for area values',\n mandatory: true,\n acceptTypes: ['measure'],\n emptyText: 'Drop measures here'\n },\n {\n key: 'series',\n label: 'Series (Stack Areas)',\n description: 'Dimensions to create stacked areas',\n mandatory: false,\n acceptTypes: ['dimension'],\n emptyText: 'Drop dimensions here for stacked areas'\n }\n ],\n displayOptions: ['showLegend', 'showGrid', 'showTooltip', 'hideHeader'],\n displayOptionsConfig: [\n {\n key: 'stackType',\n label: 'Stacking',\n type: 'select',\n defaultValue: 'none',\n options: [\n { value: 'none', label: 'None' },\n { value: 'normal', label: 'Stacked' },\n { value: 'percent', label: 'Stacked 100%' }\n ],\n description: 'How to stack multiple area series'\n },\n {\n key: 'connectNulls',\n label: 'Connect Nulls',\n type: 'boolean',\n defaultValue: false,\n description: 'Draw continuous line through missing data points'\n },\n {\n key: 'target',\n label: 'Target Values',\n type: 'string',\n placeholder: 'e.g., 100 or 50,75 for spread',\n description: 'Single value or comma-separated values to spread across X-axis'\n }\n ]\n}"],"names":["areaChartConfig","getChartTypeIcon"],"mappings":";AAMO,MAAMA,IAAmC;AAAA,EAC9C,MAAMC,EAAiB,MAAM;AAAA,EAC7B,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,IACT;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,aAAa,CAAC,aAAa,eAAe;AAAA,MAC1C,WAAW;AAAA,IAAA;AAAA,IAEb;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,aAAa,CAAC,WAAW;AAAA,MACzB,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,gBAAgB,CAAC,cAAc,YAAY,eAAe,YAAY;AAAA,EACtE,sBAAsB;AAAA,IACpB;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,SAAS;AAAA,QACP,EAAE,OAAO,QAAQ,OAAO,OAAA;AAAA,QACxB,EAAE,OAAO,UAAU,OAAO,UAAA;AAAA,QAC1B,EAAE,OAAO,WAAW,OAAO,eAAA;AAAA,MAAe;AAAA,MAE5C,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,MACb,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}
|
|
@@ -2,9 +2,9 @@ import { jsx as e, jsxs as a, Fragment as R } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState as B, useMemo as H } from "react";
|
|
3
3
|
import { ComposedChart as W, CartesianGrid as $, XAxis as K, YAxis as P, Legend as X, Bar as Y, Cell as q, Line as S } from "recharts";
|
|
4
4
|
import { C as U } from "./chart-chartcontainer-CdwzIKP1.js";
|
|
5
|
-
import { C as J } from "./chart-charttooltip-
|
|
6
|
-
import { u as Q, t as Z, i as ee, C as te, f as C, N as se, P as D, a as F } from "./chart-activitygridchart
|
|
7
|
-
import { p as re, s as ae } from "./chart-areachart-
|
|
5
|
+
import { C as J } from "./chart-charttooltip-D9BKscsw.js";
|
|
6
|
+
import { u as Q, t as Z, i as ee, C as te, f as C, N as se, P as D, a as F } from "./chart-activitygridchart-BzL97Vnm.js";
|
|
7
|
+
import { p as re, s as ae } from "./chart-areachart-BtH3SvAM.js";
|
|
8
8
|
function xe({
|
|
9
9
|
data: h,
|
|
10
10
|
chartConfig: s,
|
|
@@ -174,4 +174,4 @@ function xe({
|
|
|
174
174
|
export {
|
|
175
175
|
xe as default
|
|
176
176
|
};
|
|
177
|
-
//# sourceMappingURL=chart-barchart-
|
|
177
|
+
//# sourceMappingURL=chart-barchart-DX6DIoIp.js.map
|
package/dist/client/chunks/{chart-barchart-CJzMunji.js.map → chart-barchart-DX6DIoIp.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-barchart-CJzMunji.js","sources":["../../../src/client/components/charts/BarChart.tsx"],"sourcesContent":["import { useState, useMemo } from 'react'\nimport { ComposedChart, Bar, Line, XAxis, YAxis, CartesianGrid, Cell, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, POSITIVE_COLOR, NEGATIVE_COLOR, CHART_MARGINS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, isValidNumericValue, formatNumericValue } from '../../utils/chartUtils'\nimport { parseTargetValues, spreadTargetValues } from '../../utils/targetUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function BarChart({ \n data, \n chartConfig, \n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { labelMap, getFieldLabel: contextGetFieldLabel } = useCubeContext()\n \n try {\n // Determine stacking from stackType (new) or stacked (legacy)\n const stackType = displayConfig?.stackType ?? (displayConfig?.stacked ? 'normal' : 'none')\n const shouldStack = stackType !== 'none'\n const isPercentStack = stackType === 'percent'\n\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in bar chart</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Invalid or missing chart axis configuration</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n // Use shared function to transform data and handle series\n const { data: transformedData, seriesKeys } = transformChartDataWithSeries(\n data,\n xAxisField,\n yAxisFields,\n queryObject,\n seriesFields,\n labelMap\n )\n\n // Null handling: Filter out data points where ALL measure values are null\n // This prevents rendering empty bars and makes the chart clearer\n const { chartData, skippedCount } = useMemo(() => {\n const filtered = transformedData.filter(row => {\n // Keep the row if at least one series has a valid numeric value\n return seriesKeys.some(key => isValidNumericValue(row[key]))\n })\n const skipped = transformedData.length - filtered.length\n return { chartData: filtered, skippedCount: skipped }\n }, [transformedData, seriesKeys])\n\n // Determine stack offset for percentage stacking\n const stackOffset = isPercentStack ? 'expand' as const : undefined\n \n // Check if we should use positive/negative coloring\n // This is enabled when we have single series data with mixed positive/negative values\n const usePositiveNegativeColoring = seriesKeys.length === 1 && chartData.some(row => {\n const value = row[seriesKeys[0]]\n return typeof value === 'number' && value < 0\n })\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend\n \n // Use custom chart margins with extra left space for Y-axis label\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40 // Increased from 20 to 40 for Y-axis label space\n }\n \n // Process target values and add to chart data\n const targetValues = parseTargetValues(displayConfig?.target || '')\n const spreadTargets = spreadTargetValues(targetValues, chartData.length)\n \n // Add target data to chart data if targets exist\n let enhancedChartData = chartData\n if (spreadTargets.length > 0) {\n enhancedChartData = chartData.map((dataPoint, index) => ({\n ...dataPoint,\n __target: spreadTargets[index] || null\n }))\n }\n \n // Validate transformed data\n if (!chartData || chartData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for bar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"relative w-full\" style={{ height }}>\n <ChartContainer height={skippedCount > 0 ? `calc(100% - 20px)` : \"100%\"}>\n <ComposedChart data={enhancedChartData} margin={chartMargins} stackOffset={stackOffset}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis\n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n angle={-45}\n textAnchor=\"end\"\n height={60}\n />\n <YAxis\n tick={{ fontSize: 12 }}\n tickFormatter={isPercentStack ? (v) => `${(v * 100).toFixed(0)}%` : undefined}\n domain={isPercentStack ? [0, 1] : undefined}\n label={isPercentStack ? undefined : { value: contextGetFieldLabel(yAxisFields[0]), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={(value: any, name: any) => {\n // Handle null values in tooltip\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n if (name === 'Target') {\n return [formatNumericValue(value), 'Target Value']\n }\n // Format as percentage when using percent stacking\n if (isPercentStack && typeof value === 'number') {\n return [`${(value * 100).toFixed(1)}%`, name]\n }\n return [formatNumericValue(value), name]\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '25px' }}\n iconType=\"rect\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Bar\n key={seriesKey}\n dataKey={seriesKey}\n stackId={shouldStack ? \"stack\" : undefined}\n fill={usePositiveNegativeColoring ? POSITIVE_COLOR : ((colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length])}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n >\n {usePositiveNegativeColoring && chartData.map((entry, entryIndex) => {\n const value = entry[seriesKey]\n const fillColor = typeof value === 'number' && value < 0 ? NEGATIVE_COLOR : POSITIVE_COLOR\n return (\n <Cell \n key={`cell-${entryIndex}`} \n fill={fillColor}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n />\n )\n })}\n </Bar>\n ))}\n {spreadTargets.length > 0 && (\n <>\n {/* White background line */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n stroke=\"#ffffff\"\n strokeWidth={2}\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n {/* Grey dashed line on top */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n name=\"Target\"\n stroke=\"#8B5CF6\"\n strokeWidth={2}\n strokeDasharray=\"2 3\"\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n </>\n )}\n </ComposedChart>\n </ChartContainer>\n {skippedCount > 0 && (\n <div className=\"text-xs text-dc-text-muted text-center mt-1\">\n {skippedCount} data point{skippedCount !== 1 ? 's' : ''} with no values hidden\n </div>\n )}\n </div>\n )\n } catch (error) {\n // 'BarChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Bar Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}"],"names":["BarChart","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredLegend","setHoveredLegend","useState","labelMap","contextGetFieldLabel","useCubeContext","stackType","shouldStack","isPercentStack","safeDisplayConfig","jsx","jsxs","xAxisField","yAxisFields","seriesFields","transformedData","seriesKeys","transformChartDataWithSeries","chartData","skippedCount","useMemo","filtered","row","key","isValidNumericValue","skipped","stackOffset","usePositiveNegativeColoring","value","showLegend","chartMargins","CHART_MARGINS","targetValues","parseTargetValues","spreadTargets","spreadTargetValues","enhancedChartData","dataPoint","index","ChartContainer","ComposedChart","CartesianGrid","XAxis","YAxis","v","ChartTooltip","name","formatNumericValue","Legend","o","seriesKey","Bar","POSITIVE_COLOR","CHART_COLORS","entry","entryIndex","fillColor","NEGATIVE_COLOR","Cell","Fragment","Line","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chart-barchart-DX6DIoIp.js","sources":["../../../src/client/components/charts/BarChart.tsx"],"sourcesContent":["import { useState, useMemo } from 'react'\nimport { ComposedChart, Bar, Line, XAxis, YAxis, CartesianGrid, Cell, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, POSITIVE_COLOR, NEGATIVE_COLOR, CHART_MARGINS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, isValidNumericValue, formatNumericValue } from '../../utils/chartUtils'\nimport { parseTargetValues, spreadTargetValues } from '../../utils/targetUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function BarChart({ \n data, \n chartConfig, \n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { labelMap, getFieldLabel: contextGetFieldLabel } = useCubeContext()\n \n try {\n // Determine stacking from stackType (new) or stacked (legacy)\n const stackType = displayConfig?.stackType ?? (displayConfig?.stacked ? 'normal' : 'none')\n const shouldStack = stackType !== 'none'\n const isPercentStack = stackType === 'percent'\n\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in bar chart</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Invalid or missing chart axis configuration</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n // Use shared function to transform data and handle series\n const { data: transformedData, seriesKeys } = transformChartDataWithSeries(\n data,\n xAxisField,\n yAxisFields,\n queryObject,\n seriesFields,\n labelMap\n )\n\n // Null handling: Filter out data points where ALL measure values are null\n // This prevents rendering empty bars and makes the chart clearer\n const { chartData, skippedCount } = useMemo(() => {\n const filtered = transformedData.filter(row => {\n // Keep the row if at least one series has a valid numeric value\n return seriesKeys.some(key => isValidNumericValue(row[key]))\n })\n const skipped = transformedData.length - filtered.length\n return { chartData: filtered, skippedCount: skipped }\n }, [transformedData, seriesKeys])\n\n // Determine stack offset for percentage stacking\n const stackOffset = isPercentStack ? 'expand' as const : undefined\n \n // Check if we should use positive/negative coloring\n // This is enabled when we have single series data with mixed positive/negative values\n const usePositiveNegativeColoring = seriesKeys.length === 1 && chartData.some(row => {\n const value = row[seriesKeys[0]]\n return typeof value === 'number' && value < 0\n })\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend\n \n // Use custom chart margins with extra left space for Y-axis label\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40 // Increased from 20 to 40 for Y-axis label space\n }\n \n // Process target values and add to chart data\n const targetValues = parseTargetValues(displayConfig?.target || '')\n const spreadTargets = spreadTargetValues(targetValues, chartData.length)\n \n // Add target data to chart data if targets exist\n let enhancedChartData = chartData\n if (spreadTargets.length > 0) {\n enhancedChartData = chartData.map((dataPoint, index) => ({\n ...dataPoint,\n __target: spreadTargets[index] || null\n }))\n }\n \n // Validate transformed data\n if (!chartData || chartData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">No valid data points for bar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"relative w-full\" style={{ height }}>\n <ChartContainer height={skippedCount > 0 ? `calc(100% - 20px)` : \"100%\"}>\n <ComposedChart data={enhancedChartData} margin={chartMargins} stackOffset={stackOffset}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis\n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n angle={-45}\n textAnchor=\"end\"\n height={60}\n />\n <YAxis\n tick={{ fontSize: 12 }}\n tickFormatter={isPercentStack ? (v) => `${(v * 100).toFixed(0)}%` : undefined}\n domain={isPercentStack ? [0, 1] : undefined}\n label={isPercentStack ? undefined : { value: contextGetFieldLabel(yAxisFields[0]), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={(value: any, name: any) => {\n // Handle null values in tooltip\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n if (name === 'Target') {\n return [formatNumericValue(value), 'Target Value']\n }\n // Format as percentage when using percent stacking\n if (isPercentStack && typeof value === 'number') {\n return [`${(value * 100).toFixed(1)}%`, name]\n }\n return [formatNumericValue(value), name]\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '25px' }}\n iconType=\"rect\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Bar\n key={seriesKey}\n dataKey={seriesKey}\n stackId={shouldStack ? \"stack\" : undefined}\n fill={usePositiveNegativeColoring ? POSITIVE_COLOR : ((colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length])}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n >\n {usePositiveNegativeColoring && chartData.map((entry, entryIndex) => {\n const value = entry[seriesKey]\n const fillColor = typeof value === 'number' && value < 0 ? NEGATIVE_COLOR : POSITIVE_COLOR\n return (\n <Cell \n key={`cell-${entryIndex}`} \n fill={fillColor}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n />\n )\n })}\n </Bar>\n ))}\n {spreadTargets.length > 0 && (\n <>\n {/* White background line */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n stroke=\"#ffffff\"\n strokeWidth={2}\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n {/* Grey dashed line on top */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n name=\"Target\"\n stroke=\"#8B5CF6\"\n strokeWidth={2}\n strokeDasharray=\"2 3\"\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n </>\n )}\n </ComposedChart>\n </ChartContainer>\n {skippedCount > 0 && (\n <div className=\"text-xs text-dc-text-muted text-center mt-1\">\n {skippedCount} data point{skippedCount !== 1 ? 's' : ''} with no values hidden\n </div>\n )}\n </div>\n )\n } catch (error) {\n // 'BarChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Bar Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}"],"names":["BarChart","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredLegend","setHoveredLegend","useState","labelMap","contextGetFieldLabel","useCubeContext","stackType","shouldStack","isPercentStack","safeDisplayConfig","jsx","jsxs","xAxisField","yAxisFields","seriesFields","transformedData","seriesKeys","transformChartDataWithSeries","chartData","skippedCount","useMemo","filtered","row","key","isValidNumericValue","skipped","stackOffset","usePositiveNegativeColoring","value","showLegend","chartMargins","CHART_MARGINS","targetValues","parseTargetValues","spreadTargets","spreadTargetValues","enhancedChartData","dataPoint","index","ChartContainer","ComposedChart","CartesianGrid","XAxis","YAxis","v","ChartTooltip","name","formatNumericValue","Legend","o","seriesKey","Bar","POSITIVE_COLOR","CHART_COLORS","entry","entryIndex","fillColor","NEGATIVE_COLOR","Cell","Fragment","Line","error"],"mappings":"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"}
|
package/dist/client/chunks/{chart-barchart-config-DxatOnVV.js → chart-barchart-config-DjRZBtLb.js}
RENAMED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
icon: ({ className: e }) => /* @__PURE__ */ s(i, { icon: a, className: e }),
|
|
1
|
+
import { g as e } from "./chart-activitygridchart-config-48WqIofo.js";
|
|
2
|
+
const i = {
|
|
3
|
+
icon: e("bar"),
|
|
5
4
|
description: "Compare values across categories",
|
|
6
5
|
useCase: "Best for comparing discrete categories, showing rankings, or displaying changes over time",
|
|
7
6
|
dropZones: [
|
|
@@ -54,6 +53,6 @@ const r = {
|
|
|
54
53
|
]
|
|
55
54
|
};
|
|
56
55
|
export {
|
|
57
|
-
|
|
56
|
+
i as barChartConfig
|
|
58
57
|
};
|
|
59
|
-
//# sourceMappingURL=chart-barchart-config-
|
|
58
|
+
//# sourceMappingURL=chart-barchart-config-DjRZBtLb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-barchart-config-DjRZBtLb.js","sources":["../../../src/client/components/charts/BarChart.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { getChartTypeIcon } from '../../icons'\n\n/**\n * Configuration for the bar chart type\n */\nexport const barChartConfig: ChartTypeConfig = {\n icon: getChartTypeIcon('bar'),\n description: 'Compare values across categories',\n useCase: 'Best for comparing discrete categories, showing rankings, or displaying changes over time',\n dropZones: [\n {\n key: 'xAxis',\n label: 'X-Axis (Categories)',\n description: 'Dimensions and time dimensions for grouping',\n mandatory: false,\n acceptTypes: ['dimension', 'timeDimension'],\n emptyText: 'Drop dimensions & time dimensions here'\n },\n {\n key: 'yAxis',\n label: 'Y-Axis (Values)',\n description: 'Measures for bar heights',\n mandatory: true,\n acceptTypes: ['measure'],\n emptyText: 'Drop measures here'\n },\n {\n key: 'series',\n label: 'Series (Split into Multiple Series)',\n description: 'Dimensions to create separate data series',\n mandatory: false,\n acceptTypes: ['dimension'],\n emptyText: 'Drop dimensions here to split data into series'\n }\n ],\n displayOptions: ['showLegend', 'showGrid', 'showTooltip', 'hideHeader'],\n displayOptionsConfig: [\n {\n key: 'stackType',\n label: 'Stacking',\n type: 'select',\n defaultValue: 'none',\n options: [\n { value: 'none', label: 'None' },\n { value: 'normal', label: 'Stacked' },\n { value: 'percent', label: 'Stacked 100%' }\n ],\n description: 'How to stack multiple bar series'\n },\n {\n key: 'target',\n label: 'Target Values',\n type: 'string',\n placeholder: 'e.g., 100 or 50,75 for spread',\n description: 'Single value or comma-separated values to spread across X-axis'\n }\n ]\n}"],"names":["barChartConfig","getChartTypeIcon"],"mappings":";AAMO,MAAMA,IAAkC;AAAA,EAC7C,MAAMC,EAAiB,KAAK;AAAA,EAC5B,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,IACT;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,aAAa,CAAC,aAAa,eAAe;AAAA,MAC1C,WAAW;AAAA,IAAA;AAAA,IAEb;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,aAAa,CAAC,WAAW;AAAA,MACzB,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,gBAAgB,CAAC,cAAc,YAAY,eAAe,YAAY;AAAA,EACtE,sBAAsB;AAAA,IACpB;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,SAAS;AAAA,QACP,EAAE,OAAO,QAAQ,OAAO,OAAA;AAAA,QACxB,EAAE,OAAO,UAAU,OAAO,UAAA;AAAA,QAC1B,EAAE,OAAO,WAAW,OAAO,eAAA;AAAA,MAAe;AAAA,MAE5C,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as p, jsxs as K } from "react/jsx-runtime";
|
|
2
2
|
import { useRef as ae, useState as O, useEffect as P, useLayoutEffect as ge } from "react";
|
|
3
|
-
import { u as fe, g as be, w as we, s as D, b as Se, c as oe, i as Ae, p as ce, C as de, l as ue, e as me, d as ve, m as ze, q as Te, h as ye, o as pe, a as ee, j as xe, k as he } from "./chart-activitygridchart
|
|
3
|
+
import { u as fe, g as be, w as we, s as D, b as Se, c as oe, i as Ae, p as ce, C as de, l as ue, e as me, d as ve, m as ze, q as Te, h as ye, o as pe, a as ee, j as xe, k as he } from "./chart-activitygridchart-BzL97Vnm.js";
|
|
4
4
|
function Re({
|
|
5
5
|
data: $,
|
|
6
6
|
chartConfig: s,
|
|
@@ -207,4 +207,4 @@ function Re({
|
|
|
207
207
|
export {
|
|
208
208
|
Re as default
|
|
209
209
|
};
|
|
210
|
-
//# sourceMappingURL=chart-bubblechart-
|
|
210
|
+
//# sourceMappingURL=chart-bubblechart-Lj_PnppP.js.map
|