drizzle-cube 0.2.9 → 0.2.11
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/chartConfigs.d.ts +3 -1
- package/dist/client/charts.js +15 -15
- package/dist/client/chunks/{chart-activitygridchart-Cz4bEf3V.js → chart-activitygridchart-D17Fxiuf.js} +841 -732
- package/dist/client/chunks/chart-activitygridchart-D17Fxiuf.js.map +1 -0
- package/dist/client/chunks/{chart-activitygridchart-config-DVH-sdYZ.js → chart-activitygridchart-config-AVBoHdRn.js} +6 -6
- package/dist/client/chunks/{chart-activitygridchart-config-DVH-sdYZ.js.map → chart-activitygridchart-config-AVBoHdRn.js.map} +1 -1
- package/dist/client/chunks/{chart-areachart-config-C2iwLEgm.js → chart-areachart-config-D9pPUKHZ.js} +16 -3
- package/dist/client/chunks/chart-areachart-config-D9pPUKHZ.js.map +1 -0
- package/dist/client/chunks/chart-areachart-udSbAzl1.js +239 -0
- package/dist/client/chunks/chart-areachart-udSbAzl1.js.map +1 -0
- package/dist/client/chunks/chart-axisformatcontrols-DqSa245M.js +196 -0
- package/dist/client/chunks/chart-axisformatcontrols-DqSa245M.js.map +1 -0
- package/dist/client/chunks/chart-barchart-CDIpqCKS.js +216 -0
- package/dist/client/chunks/chart-barchart-CDIpqCKS.js.map +1 -0
- package/dist/client/chunks/{chart-barchart-config-CAsUZfHw.js → chart-barchart-config-iniz62ni.js} +16 -3
- package/dist/client/chunks/chart-barchart-config-iniz62ni.js.map +1 -0
- package/dist/client/chunks/chart-bubblechart-CivK_yfh.js +214 -0
- package/dist/client/chunks/chart-bubblechart-CivK_yfh.js.map +1 -0
- package/dist/client/chunks/{chart-bubblechart-config-DRuY0m7S.js → chart-bubblechart-config-yLq2oyR3.js} +19 -5
- package/dist/client/chunks/{chart-bubblechart-config-DRuY0m7S.js.map → chart-bubblechart-config-yLq2oyR3.js.map} +1 -1
- package/dist/client/chunks/{chart-charttooltip-k8soCd2n.js → chart-charttooltip-BVEdz4Q-.js} +4 -4
- package/dist/client/chunks/{chart-charttooltip-k8soCd2n.js.map → chart-charttooltip-BVEdz4Q-.js.map} +1 -1
- package/dist/client/chunks/chart-datatable-NHE7BTMr.js +283 -0
- package/dist/client/chunks/chart-datatable-NHE7BTMr.js.map +1 -0
- package/dist/client/chunks/{chart-datatable-config-C0MoGDgo.js → chart-datatable-config-DmEA3A-7.js} +11 -3
- package/dist/client/chunks/{chart-datatable-config-C0MoGDgo.js.map → chart-datatable-config-DmEA3A-7.js.map} +1 -1
- package/dist/client/chunks/{chart-kpidelta-CTcuIO9G.js → chart-kpidelta-D-FR2o4V.js} +2 -2
- package/dist/client/chunks/{chart-kpidelta-CTcuIO9G.js.map → chart-kpidelta-D-FR2o4V.js.map} +1 -1
- package/dist/client/chunks/{chart-kpidelta-config-Bq2Ph_Sp.js → chart-kpidelta-config-DtSDG4Kl.js} +2 -2
- package/dist/client/chunks/{chart-kpidelta-config-Bq2Ph_Sp.js.map → chart-kpidelta-config-DtSDG4Kl.js.map} +1 -1
- package/dist/client/chunks/{chart-kpinumber-slEXt8C-.js → chart-kpinumber-DSH8RJxb.js} +4 -4
- package/dist/client/chunks/{chart-kpinumber-slEXt8C-.js.map → chart-kpinumber-DSH8RJxb.js.map} +1 -1
- package/dist/client/chunks/{chart-kpinumber-config-OMNhJXdH.js → chart-kpinumber-config-Da2LFeKM.js} +2 -2
- package/dist/client/chunks/{chart-kpinumber-config-OMNhJXdH.js.map → chart-kpinumber-config-Da2LFeKM.js.map} +1 -1
- package/dist/client/chunks/{chart-kpitext-giq03TOK.js → chart-kpitext-Z9oh0bJq.js} +3 -3
- package/dist/client/chunks/{chart-kpitext-giq03TOK.js.map → chart-kpitext-Z9oh0bJq.js.map} +1 -1
- package/dist/client/chunks/{chart-kpitext-config-BLiwQIVN.js → chart-kpitext-config-DjvigyfE.js} +2 -2
- package/dist/client/chunks/{chart-kpitext-config-BLiwQIVN.js.map → chart-kpitext-config-DjvigyfE.js.map} +1 -1
- package/dist/client/chunks/chart-linechart-D4r0uD1j.js +198 -0
- package/dist/client/chunks/chart-linechart-D4r0uD1j.js.map +1 -0
- package/dist/client/chunks/{chart-linechart-config-CVbDAvCB.js → chart-linechart-config-DLVS2Zxc.js} +18 -5
- package/dist/client/chunks/chart-linechart-config-DLVS2Zxc.js.map +1 -0
- package/dist/client/chunks/{chart-markdownchart-config-uttA9Th4.js → chart-markdownchart-config-CgOA3YSw.js} +2 -2
- package/dist/client/chunks/{chart-markdownchart-config-uttA9Th4.js.map → chart-markdownchart-config-CgOA3YSw.js.map} +1 -1
- package/dist/client/chunks/{chart-piechart-CZRDQxeB.js → chart-piechart-BhttUWuH.js} +61 -55
- package/dist/client/chunks/chart-piechart-BhttUWuH.js.map +1 -0
- package/dist/client/chunks/{chart-piechart-config-J748ISAR.js → chart-piechart-config-DgwOeKHr.js} +13 -5
- package/dist/client/chunks/{chart-piechart-config-J748ISAR.js.map → chart-piechart-config-DgwOeKHr.js.map} +1 -1
- package/dist/client/chunks/chart-radarchart-DnqlfoGr.js +131 -0
- package/dist/client/chunks/chart-radarchart-DnqlfoGr.js.map +1 -0
- package/dist/client/chunks/{chart-radarchart-config-CU_MwXOg.js → chart-radarchart-config-BAV8D5PR.js} +13 -5
- package/dist/client/chunks/{chart-radarchart-config-CU_MwXOg.js.map → chart-radarchart-config-BAV8D5PR.js.map} +1 -1
- package/dist/client/chunks/chart-radialbarchart-BFxxiqLw.js +120 -0
- package/dist/client/chunks/chart-radialbarchart-BFxxiqLw.js.map +1 -0
- package/dist/client/chunks/{chart-radialbarchart-config-D0eEa2hb.js → chart-radialbarchart-config-CKozBBEC.js} +11 -3
- package/dist/client/chunks/{chart-radialbarchart-config-D0eEa2hb.js.map → chart-radialbarchart-config-CKozBBEC.js.map} +1 -1
- package/dist/client/chunks/{chart-scatterchart-C83KgqYY.js → chart-scatterchart-MN4SM-w7.js} +86 -84
- package/dist/client/chunks/chart-scatterchart-MN4SM-w7.js.map +1 -0
- package/dist/client/chunks/{chart-scatterchart-config-Bh0qBq9F.js → chart-scatterchart-config-UdHmbZ3s.js} +19 -5
- package/dist/client/chunks/{chart-scatterchart-config-Bh0qBq9F.js.map → chart-scatterchart-config-UdHmbZ3s.js.map} +1 -1
- package/dist/client/chunks/chart-treemapchart-Nozh2m26.js +265 -0
- package/dist/client/chunks/chart-treemapchart-Nozh2m26.js.map +1 -0
- package/dist/client/chunks/{chart-treemapchart-config-Bl0wYGhB.js → chart-treemapchart-config-D17VOwTM.js} +13 -5
- package/dist/client/chunks/{chart-treemapchart-config-Bl0wYGhB.js.map → chart-treemapchart-config-D17VOwTM.js.map} +1 -1
- package/dist/client/chunks/{charts-BUq4jszb.js → charts-BSDHSv4l.js} +42 -42
- package/dist/client/chunks/charts-BSDHSv4l.js.map +1 -0
- package/dist/client/chunks/components-CbDovlG-.js +13923 -0
- package/dist/client/chunks/components-CbDovlG-.js.map +1 -0
- package/dist/client/chunks/{index-CSeLP8gq.js → index-th92_8oL.js} +2 -2
- package/dist/client/chunks/{index-CSeLP8gq.js.map → index-th92_8oL.js.map} +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisAIPanel.d.ts +25 -0
- package/dist/client/components/AnalysisBuilder/AnalysisAxisDropZone.d.ts +3 -1
- package/dist/client/components/AnalysisBuilder/AnalysisChartConfigPanel.d.ts +2 -5
- package/dist/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +9 -0
- package/dist/client/components/AnalysisBuilder/SectionHeading.d.ts +17 -0
- package/dist/client/components/AnalysisBuilder/types.d.ts +49 -1
- package/dist/client/components/PortletAnalysisModal.d.ts +25 -0
- package/dist/client/components/charts/AxisFormatControls.d.ts +35 -0
- package/dist/client/components.js +3 -3
- package/dist/client/hooks.js +10 -10
- package/dist/client/icons.js +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.js +51 -3466
- 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 +13 -0
- package/dist/client/utils/chartUtils.d.ts +20 -0
- package/dist/client/utils/pivotUtils.d.ts +11 -1
- package/dist/client-bundle-stats.html +1 -1
- package/package.json +2 -1
- package/dist/client/chunks/chart-activitygridchart-Cz4bEf3V.js.map +0 -1
- package/dist/client/chunks/chart-areachart-DLdolSnU.js +0 -204
- package/dist/client/chunks/chart-areachart-DLdolSnU.js.map +0 -1
- package/dist/client/chunks/chart-areachart-config-C2iwLEgm.js.map +0 -1
- package/dist/client/chunks/chart-barchart-Bdjz8DJp.js +0 -171
- package/dist/client/chunks/chart-barchart-Bdjz8DJp.js.map +0 -1
- package/dist/client/chunks/chart-barchart-config-CAsUZfHw.js.map +0 -1
- package/dist/client/chunks/chart-bubblechart-BlQkmqkI.js +0 -210
- package/dist/client/chunks/chart-bubblechart-BlQkmqkI.js.map +0 -1
- package/dist/client/chunks/chart-datatable-zyVFtRJ_.js +0 -249
- package/dist/client/chunks/chart-datatable-zyVFtRJ_.js.map +0 -1
- package/dist/client/chunks/chart-linechart-BfnU6L-D.js +0 -155
- package/dist/client/chunks/chart-linechart-BfnU6L-D.js.map +0 -1
- package/dist/client/chunks/chart-linechart-config-CVbDAvCB.js.map +0 -1
- package/dist/client/chunks/chart-piechart-CZRDQxeB.js.map +0 -1
- package/dist/client/chunks/chart-radarchart-D5yRnY9j.js +0 -124
- package/dist/client/chunks/chart-radarchart-D5yRnY9j.js.map +0 -1
- package/dist/client/chunks/chart-radialbarchart-Djtcn7aH.js +0 -109
- package/dist/client/chunks/chart-radialbarchart-Djtcn7aH.js.map +0 -1
- package/dist/client/chunks/chart-scatterchart-C83KgqYY.js.map +0 -1
- package/dist/client/chunks/chart-treemapchart-BDKnKGTz.js +0 -253
- package/dist/client/chunks/chart-treemapchart-BDKnKGTz.js.map +0 -1
- package/dist/client/chunks/charts-BUq4jszb.js.map +0 -1
- package/dist/client/chunks/components-DnhfrXo3.js +0 -9846
- package/dist/client/chunks/components-DnhfrXo3.js.map +0 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { jsx as t, jsxs as f } from "react/jsx-runtime";
|
|
2
|
+
import { useState as b } from "react";
|
|
3
|
+
import { RadialBarChart as g, Legend as w, RadialBar as F, Cell as L } from "recharts";
|
|
4
|
+
import { C as R } from "./chart-chartcontainer-CdwzIKP1.js";
|
|
5
|
+
import { C as S } from "./chart-charttooltip-BVEdz4Q-.js";
|
|
6
|
+
import { b as C, a as u, c as T, f as A } from "./chart-activitygridchart-D17Fxiuf.js";
|
|
7
|
+
function D({
|
|
8
|
+
data: c,
|
|
9
|
+
chartConfig: n,
|
|
10
|
+
displayConfig: v = {},
|
|
11
|
+
queryObject: N,
|
|
12
|
+
height: m = "100%",
|
|
13
|
+
colorPalette: d
|
|
14
|
+
}) {
|
|
15
|
+
const [p, h] = b(null);
|
|
16
|
+
try {
|
|
17
|
+
const i = {
|
|
18
|
+
showLegend: v?.showLegend ?? !0,
|
|
19
|
+
showTooltip: v?.showTooltip ?? !0,
|
|
20
|
+
leftYAxisFormat: v?.leftYAxisFormat
|
|
21
|
+
};
|
|
22
|
+
if (!c || c.length === 0)
|
|
23
|
+
return /* @__PURE__ */ t("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: m }, children: /* @__PURE__ */ f("div", { className: "text-center", children: [
|
|
24
|
+
/* @__PURE__ */ t("div", { className: "text-sm font-semibold mb-1", children: "No data available" }),
|
|
25
|
+
/* @__PURE__ */ t("div", { className: "text-xs text-dc-text-secondary", children: "No data points to display in radial bar chart" })
|
|
26
|
+
] }) });
|
|
27
|
+
let o;
|
|
28
|
+
if (n?.xAxis && n?.yAxis) {
|
|
29
|
+
const e = Array.isArray(n.xAxis) ? n.xAxis[0] : n.xAxis, a = Array.isArray(n.yAxis) ? n.yAxis[0] : n.yAxis, x = C(N, e);
|
|
30
|
+
o = c.map((l, r) => ({
|
|
31
|
+
name: T(l[e], x) || String(l[e]) || "Unknown",
|
|
32
|
+
value: typeof l[a] == "string" ? parseFloat(l[a]) : l[a] || 0,
|
|
33
|
+
fill: d?.colors && d.colors[r % d.colors.length] || u[r % u.length]
|
|
34
|
+
}));
|
|
35
|
+
} else {
|
|
36
|
+
const e = c[0], a = Object.keys(e), x = a.find(
|
|
37
|
+
(r) => typeof e[r] == "string" || r.toLowerCase().includes("name") || r.toLowerCase().includes("label") || r.toLowerCase().includes("category")
|
|
38
|
+
) || a[0], l = a.find(
|
|
39
|
+
(r) => typeof e[r] == "number" && r !== x
|
|
40
|
+
) || a[1];
|
|
41
|
+
if (!l)
|
|
42
|
+
return /* @__PURE__ */ t("div", { className: "flex items-center justify-center w-full text-yellow-600", style: { height: m }, children: /* @__PURE__ */ f("div", { className: "text-center", children: [
|
|
43
|
+
/* @__PURE__ */ t("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
|
|
44
|
+
/* @__PURE__ */ t("div", { className: "text-xs", children: "No numeric field found for radial bar chart values" })
|
|
45
|
+
] }) });
|
|
46
|
+
o = c.map((r, y) => {
|
|
47
|
+
let s = r[x];
|
|
48
|
+
return typeof s == "boolean" ? s = s ? "Active" : "Inactive" : s === "true" || s === "false" ? s = s === "true" ? "Active" : "Inactive" : s = String(s), {
|
|
49
|
+
name: s,
|
|
50
|
+
value: typeof r[l] == "string" ? parseFloat(r[l]) : r[l] || 0,
|
|
51
|
+
fill: d?.colors && d.colors[y % d.colors.length] || u[y % u.length]
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return o = o.filter((e) => e.value != null && e.value !== 0), o.length === 0 ? /* @__PURE__ */ t("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: m }, children: /* @__PURE__ */ f("div", { className: "text-center", children: [
|
|
56
|
+
/* @__PURE__ */ t("div", { className: "text-sm font-semibold mb-1", children: "No valid data" }),
|
|
57
|
+
/* @__PURE__ */ t("div", { className: "text-xs text-dc-text-secondary", children: "No valid data points for radial bar chart after transformation" })
|
|
58
|
+
] }) }) : /* @__PURE__ */ t(R, { height: m, children: /* @__PURE__ */ f(
|
|
59
|
+
g,
|
|
60
|
+
{
|
|
61
|
+
data: o,
|
|
62
|
+
innerRadius: "10%",
|
|
63
|
+
outerRadius: "80%",
|
|
64
|
+
margin: { top: 20, right: 30, bottom: 20, left: 30 },
|
|
65
|
+
children: [
|
|
66
|
+
i.showTooltip && /* @__PURE__ */ t(
|
|
67
|
+
S,
|
|
68
|
+
{
|
|
69
|
+
formatter: i.leftYAxisFormat ? (e, a) => [A(e, i.leftYAxisFormat), a] : void 0
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
i.showLegend && /* @__PURE__ */ t(
|
|
73
|
+
w,
|
|
74
|
+
{
|
|
75
|
+
wrapperStyle: { fontSize: "12px", paddingTop: "10px" },
|
|
76
|
+
iconType: "circle",
|
|
77
|
+
iconSize: 8,
|
|
78
|
+
layout: "horizontal",
|
|
79
|
+
align: "center",
|
|
80
|
+
verticalAlign: "bottom",
|
|
81
|
+
onMouseEnter: (e) => h(String(e.value || "")),
|
|
82
|
+
onMouseLeave: () => h(null)
|
|
83
|
+
}
|
|
84
|
+
),
|
|
85
|
+
/* @__PURE__ */ t(
|
|
86
|
+
F,
|
|
87
|
+
{
|
|
88
|
+
dataKey: "value",
|
|
89
|
+
cornerRadius: 4,
|
|
90
|
+
label: {
|
|
91
|
+
position: "insideStart",
|
|
92
|
+
fill: "#fff",
|
|
93
|
+
fontSize: 12,
|
|
94
|
+
formatter: i.leftYAxisFormat ? (e) => A(e, i.leftYAxisFormat) : void 0
|
|
95
|
+
},
|
|
96
|
+
children: o.map((e, a) => /* @__PURE__ */ t(
|
|
97
|
+
L,
|
|
98
|
+
{
|
|
99
|
+
fill: e.fill,
|
|
100
|
+
fillOpacity: p ? p === e.name ? 1 : 0.3 : 1
|
|
101
|
+
},
|
|
102
|
+
`cell-${a}`
|
|
103
|
+
))
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
) });
|
|
109
|
+
} catch (i) {
|
|
110
|
+
return /* @__PURE__ */ t("div", { className: "flex flex-col items-center justify-center w-full text-red-500 p-4", style: { height: m }, children: /* @__PURE__ */ f("div", { className: "text-center", children: [
|
|
111
|
+
/* @__PURE__ */ t("div", { className: "text-sm font-semibold mb-1", children: "Radial Bar Chart Error" }),
|
|
112
|
+
/* @__PURE__ */ t("div", { className: "text-xs mb-2", children: i instanceof Error ? i.message : "Unknown rendering error" }),
|
|
113
|
+
/* @__PURE__ */ t("div", { className: "text-xs text-dc-text-muted", children: "Check the data and configuration" })
|
|
114
|
+
] }) });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export {
|
|
118
|
+
D as default
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=chart-radialbarchart-BFxxiqLw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-radialbarchart-BFxxiqLw.js","sources":["../../../src/client/components/charts/RadialBarChart.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { RadialBarChart as RechartsRadialBarChart, RadialBar, Legend, Cell } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, formatAxisValue } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nexport default function RadialBarChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n leftYAxisFormat: displayConfig?.leftYAxisFormat\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 radial bar chart</div>\n </div>\n </div>\n )\n }\n\n let radialData: Array<{name: string, value: number, fill?: string}>\n\n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - use chart config\n const xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis // Name/category field\n const yAxisField = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis[0] : chartConfig.yAxis // Value field\n\n const granularity = getFieldGranularity(queryObject, xAxisField)\n radialData = data.map((item, index) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n value: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }))\n } else {\n // Legacy format or auto-detection\n const firstRow = data[0]\n const keys = Object.keys(firstRow)\n \n // Try to find name/label field\n const nameField = keys.find(key => \n typeof firstRow[key] === 'string' ||\n key.toLowerCase().includes('name') ||\n key.toLowerCase().includes('label') ||\n key.toLowerCase().includes('category')\n ) || keys[0]\n\n // Find a numeric field for values\n const valueField = keys.find(key => \n typeof firstRow[key] === 'number' && key !== nameField\n ) || keys[1]\n\n if (!valueField) {\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\">No numeric field found for radial bar chart values</div>\n </div>\n </div>\n )\n }\n\n // Transform data for radial bar chart\n radialData = data.map((item, index) => {\n let name = item[nameField]\n // Handle boolean values with better labels\n if (typeof name === 'boolean') {\n name = name ? 'Active' : 'Inactive'\n } else if (name === 'true' || name === 'false') {\n name = name === 'true' ? 'Active' : 'Inactive'\n } else {\n name = String(name)\n }\n return {\n name,\n value: typeof item[valueField] === 'string' \n ? parseFloat(item[valueField]) \n : (item[valueField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }\n })\n }\n\n // Filter out zero/null values\n radialData = radialData.filter(item => item.value != null && item.value !== 0)\n \n if (radialData.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 radial bar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <ChartContainer height={height}>\n <RechartsRadialBarChart \n data={radialData}\n innerRadius=\"10%\"\n outerRadius=\"80%\"\n margin={{ top: 20, right: 30, bottom: 20, left: 30 }}\n >\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any, name: string) => [formatAxisValue(value, safeDisplayConfig.leftYAxisFormat), name]\n : undefined\n }\n />\n )}\n {safeDisplayConfig.showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.value || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n <RadialBar\n dataKey=\"value\"\n cornerRadius={4}\n label={{\n position: 'insideStart',\n fill: '#fff',\n fontSize: 12,\n formatter: safeDisplayConfig.leftYAxisFormat\n ? (value: any) => formatAxisValue(value, safeDisplayConfig.leftYAxisFormat)\n : undefined\n }}\n >\n {radialData.map((entry, index) => (\n <Cell \n key={`cell-${index}`} \n fill={entry.fill}\n fillOpacity={hoveredLegend ? (hoveredLegend === entry.name ? 1 : 0.3) : 1}\n />\n ))}\n </RadialBar>\n </RechartsRadialBarChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'RadialBarChart 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\">Radial 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":["RadialBarChart","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredLegend","setHoveredLegend","useState","safeDisplayConfig","jsx","jsxs","radialData","xAxisField","yAxisField","granularity","getFieldGranularity","item","index","formatTimeValue","CHART_COLORS","firstRow","keys","nameField","key","valueField","name","ChartContainer","RechartsRadialBarChart","ChartTooltip","value","formatAxisValue","Legend","o","RadialBar","entry","Cell","error"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as e } from "./chart-activitygridchart-config-
|
|
1
|
+
import { g as e } from "./chart-activitygridchart-config-AVBoHdRn.js";
|
|
2
2
|
const r = {
|
|
3
3
|
icon: e("radialBar"),
|
|
4
4
|
description: "Circular progress and KPI visualization",
|
|
@@ -22,9 +22,17 @@ const r = {
|
|
|
22
22
|
emptyText: "Drop a measure for values"
|
|
23
23
|
}
|
|
24
24
|
],
|
|
25
|
-
displayOptions: ["showLegend", "showTooltip", "hideHeader"]
|
|
25
|
+
displayOptions: ["showLegend", "showTooltip", "hideHeader"],
|
|
26
|
+
displayOptionsConfig: [
|
|
27
|
+
{
|
|
28
|
+
key: "leftYAxisFormat",
|
|
29
|
+
label: "Value Format",
|
|
30
|
+
type: "axisFormat",
|
|
31
|
+
description: "Number formatting for values"
|
|
32
|
+
}
|
|
33
|
+
]
|
|
26
34
|
};
|
|
27
35
|
export {
|
|
28
36
|
r as radialBarChartConfig
|
|
29
37
|
};
|
|
30
|
-
//# sourceMappingURL=chart-radialbarchart-config-
|
|
38
|
+
//# sourceMappingURL=chart-radialbarchart-config-CKozBBEC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-radialbarchart-config-
|
|
1
|
+
{"version":3,"file":"chart-radialbarchart-config-CKozBBEC.js","sources":["../../../src/client/components/charts/RadialBarChart.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { getChartTypeIcon } from '../../icons'\n\n/**\n * Configuration for the radial bar chart type\n */\nexport const radialBarChartConfig: ChartTypeConfig = {\n icon: getChartTypeIcon('radialBar'),\n description: 'Circular progress and KPI visualization',\n useCase: 'Best for showing progress toward goals, KPIs, or comparing percentages in a compact form',\n dropZones: [\n {\n key: 'xAxis',\n label: 'Categories',\n description: 'Dimensions for radial segments',\n mandatory: true,\n acceptTypes: ['dimension'],\n emptyText: 'Drop dimensions for categories'\n },\n {\n key: 'yAxis',\n label: 'Values',\n description: 'Measures for radial bar lengths',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['measure'],\n emptyText: 'Drop a measure for values'\n }\n ],\n displayOptions: ['showLegend', 'showTooltip', 'hideHeader'],\n displayOptionsConfig: [\n {\n key: 'leftYAxisFormat',\n label: 'Value Format',\n type: 'axisFormat',\n description: 'Number formatting for values'\n }\n ]\n}"],"names":["radialBarChartConfig","getChartTypeIcon"],"mappings":";AAMO,MAAMA,IAAwC;AAAA,EACnD,MAAMC,EAAiB,WAAW;AAAA,EAClC,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,WAAW;AAAA,MACzB,WAAW;AAAA,IAAA;AAAA,IAEb;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,gBAAgB,CAAC,cAAc,eAAe,YAAY;AAAA,EAC1D,sBAAsB;AAAA,IACpB;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}
|
package/dist/client/chunks/{chart-scatterchart-C83KgqYY.js → chart-scatterchart-MN4SM-w7.js}
RENAMED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import { jsx as e, jsxs as l } from "react/jsx-runtime";
|
|
2
|
-
import { useState as
|
|
3
|
-
import { ScatterChart as
|
|
4
|
-
import { C as
|
|
5
|
-
import { u as
|
|
6
|
-
function
|
|
7
|
-
data:
|
|
2
|
+
import { useState as O } from "react";
|
|
3
|
+
import { ScatterChart as Y, CartesianGrid as B, XAxis as C, YAxis as U, Tooltip as W, Legend as $, Scatter as R } from "recharts";
|
|
4
|
+
import { C as J } from "./chart-chartcontainer-CdwzIKP1.js";
|
|
5
|
+
import { u as Q, b as V, c as F, p as I, i as X, C as Z, f as k, a as L } from "./chart-activitygridchart-D17Fxiuf.js";
|
|
6
|
+
function ae({
|
|
7
|
+
data: g,
|
|
8
8
|
chartConfig: i,
|
|
9
|
-
displayConfig:
|
|
10
|
-
queryObject:
|
|
9
|
+
displayConfig: p = {},
|
|
10
|
+
queryObject: v,
|
|
11
11
|
height: m = "100%",
|
|
12
|
-
colorPalette:
|
|
12
|
+
colorPalette: A
|
|
13
13
|
}) {
|
|
14
|
-
const [
|
|
14
|
+
const [G, T] = O(null), { getFieldLabel: x } = Q();
|
|
15
15
|
try {
|
|
16
16
|
const u = {
|
|
17
|
-
showLegend:
|
|
18
|
-
showGrid:
|
|
19
|
-
showTooltip:
|
|
20
|
-
};
|
|
21
|
-
if (!
|
|
17
|
+
showLegend: p?.showLegend ?? !0,
|
|
18
|
+
showGrid: p?.showGrid ?? !0,
|
|
19
|
+
showTooltip: p?.showTooltip ?? !0
|
|
20
|
+
}, b = p?.xAxisFormat, y = p?.leftYAxisFormat;
|
|
21
|
+
if (!g || g.length === 0)
|
|
22
22
|
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: m }, children: /* @__PURE__ */ l("div", { className: "text-center", children: [
|
|
23
23
|
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No data available" }),
|
|
24
24
|
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No data points to display in scatter chart" })
|
|
25
25
|
] }) });
|
|
26
|
-
let a, o,
|
|
26
|
+
let a, o, E = [];
|
|
27
27
|
if (i?.xAxis && i?.yAxis) {
|
|
28
28
|
a = Array.isArray(i.xAxis) ? i.xAxis[0] : i.xAxis, o = Array.isArray(i.yAxis) ? i.yAxis[0] : i.yAxis;
|
|
29
|
-
const
|
|
30
|
-
|
|
29
|
+
const t = i.series;
|
|
30
|
+
E = t ? Array.isArray(t) ? t : [t] : [];
|
|
31
31
|
} else if (i?.x && i?.y)
|
|
32
32
|
a = i.x, o = Array.isArray(i.y) ? i.y[0] : i.y;
|
|
33
33
|
else
|
|
@@ -40,88 +40,90 @@ function re({
|
|
|
40
40
|
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
|
|
41
41
|
/* @__PURE__ */ e("div", { className: "text-xs", children: "Missing required X-axis or Y-axis fields" })
|
|
42
42
|
] }) });
|
|
43
|
-
const
|
|
44
|
-
let
|
|
45
|
-
if (
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
const n = String(t
|
|
43
|
+
const M = (v?.timeDimensions || []).map((t) => t.dimension);
|
|
44
|
+
let N, c = {};
|
|
45
|
+
if (E.length > 0) {
|
|
46
|
+
const t = E[0];
|
|
47
|
+
g.forEach((s) => {
|
|
48
|
+
const n = String(s[t] || "Default");
|
|
49
49
|
c[n] || (c[n] = []);
|
|
50
|
-
const
|
|
51
|
-
if (
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
if (
|
|
55
|
-
const
|
|
56
|
-
|
|
50
|
+
const f = V(v, a), h = F(s[a], f) || s[a], d = I(s[o]), S = typeof h == "string" ? parseFloat(h) : h;
|
|
51
|
+
if (X(S) && d !== null) {
|
|
52
|
+
const z = {};
|
|
53
|
+
M.forEach((w) => {
|
|
54
|
+
if (s[w]) {
|
|
55
|
+
const K = V(v, w);
|
|
56
|
+
z[w] = F(s[w], K);
|
|
57
57
|
}
|
|
58
58
|
}), c[n].push({
|
|
59
|
-
x:
|
|
59
|
+
x: S,
|
|
60
60
|
y: d,
|
|
61
61
|
name: n,
|
|
62
|
-
timeValues:
|
|
63
|
-
originalItem:
|
|
62
|
+
timeValues: z,
|
|
63
|
+
originalItem: s
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
-
}),
|
|
66
|
+
}), N = Object.keys(c).flatMap((s) => c[s]);
|
|
67
67
|
} else {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
return
|
|
68
|
+
const t = V(v, a);
|
|
69
|
+
N = g.map((r) => {
|
|
70
|
+
const s = F(r[a], t) || r[a], n = I(r[o]), f = typeof s == "string" ? parseFloat(s) : s, h = {};
|
|
71
|
+
return M.forEach((d) => {
|
|
72
72
|
if (r[d]) {
|
|
73
|
-
const
|
|
74
|
-
|
|
73
|
+
const S = V(v, d);
|
|
74
|
+
h[d] = F(r[d], S);
|
|
75
75
|
}
|
|
76
76
|
}), {
|
|
77
|
-
x:
|
|
77
|
+
x: f,
|
|
78
78
|
y: n,
|
|
79
79
|
name: "Point",
|
|
80
|
-
timeValues:
|
|
80
|
+
timeValues: h,
|
|
81
81
|
originalItem: r,
|
|
82
|
-
isValid:
|
|
82
|
+
isValid: X(f) && n !== null
|
|
83
83
|
};
|
|
84
84
|
}).filter((r) => r.isValid);
|
|
85
85
|
}
|
|
86
|
-
if (!
|
|
86
|
+
if (!N || N.length === 0)
|
|
87
87
|
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: m }, children: /* @__PURE__ */ l("div", { className: "text-center", children: [
|
|
88
88
|
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No valid data" }),
|
|
89
89
|
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No valid data points for scatter chart after transformation" })
|
|
90
90
|
] }) });
|
|
91
|
-
const
|
|
92
|
-
...
|
|
91
|
+
const D = Object.keys(c), j = D.length > 1 && D.length <= 20, _ = u.showLegend && j, H = {
|
|
92
|
+
...Z,
|
|
93
93
|
left: 40
|
|
94
94
|
// Increased from 20 to 40 for Y-axis label space
|
|
95
95
|
};
|
|
96
|
-
return /* @__PURE__ */ e(
|
|
97
|
-
u.showGrid && /* @__PURE__ */ e(
|
|
96
|
+
return /* @__PURE__ */ e(J, { height: m, children: /* @__PURE__ */ l(Y, { margin: H, children: [
|
|
97
|
+
u.showGrid && /* @__PURE__ */ e(B, { strokeDasharray: "3 3" }),
|
|
98
98
|
/* @__PURE__ */ e(
|
|
99
|
-
|
|
99
|
+
C,
|
|
100
100
|
{
|
|
101
101
|
type: "number",
|
|
102
102
|
dataKey: "x",
|
|
103
|
-
name: x(a),
|
|
104
|
-
tick: { fontSize: 12 }
|
|
103
|
+
name: b?.label || x(a),
|
|
104
|
+
tick: { fontSize: 12 },
|
|
105
|
+
tickFormatter: b ? (t) => k(t, b) : void 0
|
|
105
106
|
}
|
|
106
107
|
),
|
|
107
108
|
/* @__PURE__ */ e(
|
|
108
|
-
|
|
109
|
+
U,
|
|
109
110
|
{
|
|
110
111
|
type: "number",
|
|
111
112
|
dataKey: "y",
|
|
112
|
-
name: x(o),
|
|
113
|
+
name: y?.label || x(o),
|
|
113
114
|
tick: { fontSize: 12 },
|
|
114
|
-
|
|
115
|
+
tickFormatter: y ? (t) => k(t, y) : void 0,
|
|
116
|
+
label: { value: y?.label || x(o), angle: -90, position: "left", style: { textAnchor: "middle", fontSize: "12px" } }
|
|
115
117
|
}
|
|
116
118
|
),
|
|
117
119
|
u.showTooltip && /* @__PURE__ */ e(
|
|
118
|
-
|
|
120
|
+
W,
|
|
119
121
|
{
|
|
120
122
|
cursor: { strokeDasharray: "3 3" },
|
|
121
|
-
content: ({ active:
|
|
122
|
-
if (!
|
|
123
|
-
const
|
|
124
|
-
return
|
|
123
|
+
content: ({ active: t, payload: r }) => {
|
|
124
|
+
if (!t || !r || r.length === 0) return null;
|
|
125
|
+
const s = r[0]?.payload;
|
|
126
|
+
return s ? /* @__PURE__ */ l("div", { style: {
|
|
125
127
|
backgroundColor: "white",
|
|
126
128
|
border: "1px solid #e5e7eb",
|
|
127
129
|
borderRadius: "0.5rem",
|
|
@@ -130,28 +132,28 @@ function re({
|
|
|
130
132
|
boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
131
133
|
padding: "8px 12px"
|
|
132
134
|
}, children: [
|
|
133
|
-
/* @__PURE__ */ e("div", { style: { fontWeight: 600, marginBottom: "4px" }, children:
|
|
134
|
-
|
|
135
|
+
/* @__PURE__ */ e("div", { style: { fontWeight: 600, marginBottom: "4px" }, children: s.name }),
|
|
136
|
+
s.timeValues && Object.keys(s.timeValues).length > 0 && /* @__PURE__ */ e("div", { style: { marginBottom: "4px", color: "#6b7280" }, children: Object.entries(s.timeValues).map(([n, f]) => /* @__PURE__ */ l("div", { children: [
|
|
135
137
|
x(n),
|
|
136
138
|
": ",
|
|
137
|
-
|
|
139
|
+
f
|
|
138
140
|
] }, n)) }),
|
|
139
141
|
/* @__PURE__ */ l("div", { children: [
|
|
140
|
-
x(a),
|
|
142
|
+
b?.label || x(a),
|
|
141
143
|
": ",
|
|
142
|
-
|
|
144
|
+
k(s.x, b)
|
|
143
145
|
] }),
|
|
144
146
|
/* @__PURE__ */ l("div", { children: [
|
|
145
|
-
x(o),
|
|
147
|
+
y?.label || x(o),
|
|
146
148
|
": ",
|
|
147
|
-
|
|
149
|
+
k(s.y, y)
|
|
148
150
|
] })
|
|
149
151
|
] }) : null;
|
|
150
152
|
}
|
|
151
153
|
}
|
|
152
154
|
),
|
|
153
|
-
|
|
154
|
-
|
|
155
|
+
_ && /* @__PURE__ */ e(
|
|
156
|
+
$,
|
|
155
157
|
{
|
|
156
158
|
wrapperStyle: { fontSize: "12px", paddingTop: "10px" },
|
|
157
159
|
iconType: "circle",
|
|
@@ -159,30 +161,30 @@ function re({
|
|
|
159
161
|
layout: "horizontal",
|
|
160
162
|
align: "center",
|
|
161
163
|
verticalAlign: "bottom",
|
|
162
|
-
onMouseEnter: (
|
|
163
|
-
onMouseLeave: () =>
|
|
164
|
+
onMouseEnter: (t) => T(String(t.dataKey || "")),
|
|
165
|
+
onMouseLeave: () => T(null)
|
|
164
166
|
}
|
|
165
167
|
),
|
|
166
|
-
|
|
168
|
+
j ? (
|
|
167
169
|
// Multiple series
|
|
168
|
-
|
|
169
|
-
|
|
170
|
+
D.map((t, r) => /* @__PURE__ */ e(
|
|
171
|
+
R,
|
|
170
172
|
{
|
|
171
|
-
name:
|
|
172
|
-
data: c[
|
|
173
|
-
fill:
|
|
174
|
-
fillOpacity:
|
|
173
|
+
name: t,
|
|
174
|
+
data: c[t],
|
|
175
|
+
fill: A?.colors && A.colors[r % A.colors.length] || L[r % L.length],
|
|
176
|
+
fillOpacity: G ? G === t ? 1 : 0.3 : 1
|
|
175
177
|
},
|
|
176
|
-
|
|
178
|
+
t
|
|
177
179
|
))
|
|
178
180
|
) : (
|
|
179
181
|
// Single series
|
|
180
182
|
/* @__PURE__ */ e(
|
|
181
|
-
|
|
183
|
+
R,
|
|
182
184
|
{
|
|
183
185
|
name: "Data",
|
|
184
|
-
data:
|
|
185
|
-
fill:
|
|
186
|
+
data: N,
|
|
187
|
+
fill: A?.colors && A.colors[0] || L[0]
|
|
186
188
|
}
|
|
187
189
|
)
|
|
188
190
|
)
|
|
@@ -196,6 +198,6 @@ function re({
|
|
|
196
198
|
}
|
|
197
199
|
}
|
|
198
200
|
export {
|
|
199
|
-
|
|
201
|
+
ae as default
|
|
200
202
|
};
|
|
201
|
-
//# sourceMappingURL=chart-scatterchart-
|
|
203
|
+
//# sourceMappingURL=chart-scatterchart-MN4SM-w7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-scatterchart-MN4SM-w7.js","sources":["../../../src/client/components/charts/ScatterChart.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { ScatterChart as RechartsScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Legend, Tooltip } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, parseNumericValue, isValidNumericValue, formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function ScatterChart({ \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 { getFieldLabel } = useCubeContext()\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n // Extract axis format configs\n // For scatter charts, xAxis uses xAxisFormat, yAxis uses leftYAxisFormat\n const xAxisFormat = displayConfig?.xAxisFormat\n const yAxisFormat = displayConfig?.leftYAxisFormat\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 scatter chart</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisField: string\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - handle both string and array values\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisField = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis[0] : chartConfig.yAxis\n // Normalize series to array\n const seriesConfig = chartConfig.series\n seriesFields = seriesConfig ? (Array.isArray(seriesConfig) ? seriesConfig : [seriesConfig]) : []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format (adapt for scatter chart)\n xAxisField = chartConfig.x\n yAxisField = Array.isArray(chartConfig.y) ? chartConfig.y[0] : 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 || !yAxisField) {\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 // Extract time dimensions from query for tooltip display\n const timeDimensions = queryObject?.timeDimensions || []\n const timeDimensionFields = timeDimensions.map((td: any) => td.dimension)\n\n // Transform data for scatter plot\n // Null handling: Filter out data points where x or y coordinates are null\n let scatterData: any[]\n let seriesGroups: { [key: string]: any[] } = {}\n\n if (seriesFields.length > 0) {\n // Group data by series field\n const seriesField = seriesFields[0]\n data.forEach(item => {\n const seriesValue = String(item[seriesField] || 'Default')\n if (!seriesGroups[seriesValue]) {\n seriesGroups[seriesValue] = []\n }\n\n const xGranularity = getFieldGranularity(queryObject, xAxisField)\n const xValue = formatTimeValue(item[xAxisField], xGranularity) || item[xAxisField]\n const yValue = parseNumericValue(item[yAxisField])\n\n // Only add point if both x and y are valid numbers\n const xNum = typeof xValue === 'string' ? parseFloat(xValue) : xValue\n if (isValidNumericValue(xNum) && yValue !== null) {\n // Extract time dimension values for tooltip\n const timeValues: { [key: string]: string } = {}\n timeDimensionFields.forEach((field: string) => {\n if (item[field]) {\n const granularity = getFieldGranularity(queryObject, field)\n timeValues[field] = formatTimeValue(item[field], granularity)\n }\n })\n\n seriesGroups[seriesValue].push({\n x: xNum,\n y: yValue,\n name: seriesValue,\n timeValues,\n originalItem: item\n })\n }\n })\n\n // Collect all valid points from all series for validation\n // (The actual rendering uses seriesGroups with series separated)\n const seriesKeys = Object.keys(seriesGroups)\n scatterData = seriesKeys.flatMap(key => seriesGroups[key])\n } else {\n // Single series scatter plot\n const xGranularity = getFieldGranularity(queryObject, xAxisField)\n scatterData = data\n .map(item => {\n const xValue = formatTimeValue(item[xAxisField], xGranularity) || item[xAxisField]\n const yValue = parseNumericValue(item[yAxisField])\n const xNum = typeof xValue === 'string' ? parseFloat(xValue) : xValue\n\n // Extract time dimension values for tooltip\n const timeValues: { [key: string]: string } = {}\n timeDimensionFields.forEach((field: string) => {\n if (item[field]) {\n const granularity = getFieldGranularity(queryObject, field)\n timeValues[field] = formatTimeValue(item[field], granularity)\n }\n })\n\n return {\n x: xNum,\n y: yValue,\n name: `Point`,\n timeValues,\n originalItem: item,\n isValid: isValidNumericValue(xNum) && yValue !== null\n }\n })\n .filter(point => point.isValid)\n }\n \n // Validate transformed data\n if (!scatterData || scatterData.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 scatter chart after transformation</div>\n </div>\n </div>\n )\n }\n\n const seriesKeys = Object.keys(seriesGroups)\n // Limit series to prevent performance issues with high-cardinality fields (e.g., dates)\n // If more than 20 unique series, fall back to single-series mode\n const MAX_SERIES = 20\n const hasSeries = seriesKeys.length > 1 && seriesKeys.length <= MAX_SERIES\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend && hasSeries\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 return (\n <ChartContainer height={height}>\n <RechartsScatterChart margin={chartMargins}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n name={xAxisFormat?.label || getFieldLabel(xAxisField)}\n tick={{ fontSize: 12 }}\n tickFormatter={xAxisFormat ? (value) => formatAxisValue(value, xAxisFormat) : undefined}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n name={yAxisFormat?.label || getFieldLabel(yAxisField)}\n tick={{ fontSize: 12 }}\n tickFormatter={yAxisFormat ? (value) => formatAxisValue(value, yAxisFormat) : undefined}\n label={{ value: yAxisFormat?.label || getFieldLabel(yAxisField), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <Tooltip\n cursor={{ strokeDasharray: '3 3' }}\n content={({ active, payload }) => {\n if (!active || !payload || payload.length === 0) return null\n // Only show the first (active) point\n const point = payload[0]?.payload\n if (!point) return null\n\n return (\n <div style={{\n backgroundColor: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n color: '#1f2937',\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\n padding: '8px 12px'\n }}>\n <div style={{ fontWeight: 600, marginBottom: '4px' }}>{point.name}</div>\n {/* Show time dimension values if present */}\n {point.timeValues && Object.keys(point.timeValues).length > 0 && (\n <div style={{ marginBottom: '4px', color: '#6b7280' }}>\n {Object.entries(point.timeValues).map(([field, value]) => (\n <div key={field}>{getFieldLabel(field)}: {value as string}</div>\n ))}\n </div>\n )}\n <div>{xAxisFormat?.label || getFieldLabel(xAxisField)}: {formatAxisValue(point.x, xAxisFormat)}</div>\n <div>{yAxisFormat?.label || getFieldLabel(yAxisField)}: {formatAxisValue(point.y, yAxisFormat)}</div>\n </div>\n )\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\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 {hasSeries ? (\n // Multiple series\n seriesKeys.map((seriesKey, index) => (\n <Scatter\n key={seriesKey}\n name={seriesKey}\n data={seriesGroups[seriesKey]}\n fill={(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 ))\n ) : (\n // Single series\n <Scatter\n name=\"Data\"\n data={scatterData}\n fill={(colorPalette?.colors && colorPalette.colors[0]) || CHART_COLORS[0]}\n />\n )}\n </RechartsScatterChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'ScatterChart 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\">Scatter 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":["ScatterChart","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredLegend","setHoveredLegend","useState","getFieldLabel","useCubeContext","safeDisplayConfig","xAxisFormat","yAxisFormat","jsx","jsxs","xAxisField","yAxisField","seriesFields","seriesConfig","timeDimensionFields","td","scatterData","seriesGroups","seriesField","item","seriesValue","xGranularity","getFieldGranularity","xValue","formatTimeValue","yValue","parseNumericValue","xNum","isValidNumericValue","timeValues","field","granularity","key","point","seriesKeys","hasSeries","showLegend","chartMargins","CHART_MARGINS","ChartContainer","RechartsScatterChart","CartesianGrid","XAxis","value","formatAxisValue","YAxis","Tooltip","active","payload","Legend","o","seriesKey","index","Scatter","CHART_COLORS","error"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { g as e } from "./chart-activitygridchart-config-
|
|
2
|
-
const
|
|
1
|
+
import { g as e } from "./chart-activitygridchart-config-AVBoHdRn.js";
|
|
2
|
+
const i = {
|
|
3
3
|
icon: e("scatter"),
|
|
4
4
|
description: "Reveal correlations between variables",
|
|
5
5
|
useCase: "Best for identifying patterns, correlations, outliers, and relationships between two measures",
|
|
@@ -32,9 +32,23 @@ const s = {
|
|
|
32
32
|
emptyText: "Drop a dimension to color points"
|
|
33
33
|
}
|
|
34
34
|
],
|
|
35
|
-
displayOptions: ["showLegend", "showGrid", "showTooltip", "hideHeader"]
|
|
35
|
+
displayOptions: ["showLegend", "showGrid", "showTooltip", "hideHeader"],
|
|
36
|
+
displayOptionsConfig: [
|
|
37
|
+
{
|
|
38
|
+
key: "xAxisFormat",
|
|
39
|
+
label: "X-Axis Format",
|
|
40
|
+
type: "axisFormat",
|
|
41
|
+
description: "Number formatting for X-axis"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: "leftYAxisFormat",
|
|
45
|
+
label: "Y-Axis Format",
|
|
46
|
+
type: "axisFormat",
|
|
47
|
+
description: "Number formatting for Y-axis"
|
|
48
|
+
}
|
|
49
|
+
]
|
|
36
50
|
};
|
|
37
51
|
export {
|
|
38
|
-
|
|
52
|
+
i as scatterChartConfig
|
|
39
53
|
};
|
|
40
|
-
//# sourceMappingURL=chart-scatterchart-config-
|
|
54
|
+
//# sourceMappingURL=chart-scatterchart-config-UdHmbZ3s.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-scatterchart-config-
|
|
1
|
+
{"version":3,"file":"chart-scatterchart-config-UdHmbZ3s.js","sources":["../../../src/client/components/charts/ScatterChart.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { getChartTypeIcon } from '../../icons'\n\n/**\n * Configuration for the scatter chart type\n */\nexport const scatterChartConfig: ChartTypeConfig = {\n icon: getChartTypeIcon('scatter'),\n description: 'Reveal correlations between variables',\n useCase: 'Best for identifying patterns, correlations, outliers, and relationships between two measures',\n dropZones: [\n {\n key: 'xAxis',\n label: 'X-Axis',\n description: 'Measure or dimension for X position',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['dimension', 'timeDimension', 'measure'],\n emptyText: 'Drop a field for X-axis'\n },\n {\n key: 'yAxis',\n label: 'Y-Axis',\n description: 'Measure for Y position',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['measure'],\n emptyText: 'Drop a measure for Y-axis'\n },\n {\n key: 'series',\n label: 'Series (Color Groups)',\n description: 'Dimension to color points by category',\n mandatory: false,\n maxItems: 1,\n acceptTypes: ['dimension'],\n emptyText: 'Drop a dimension to color points'\n }\n ],\n displayOptions: ['showLegend', 'showGrid', 'showTooltip', 'hideHeader'],\n displayOptionsConfig: [\n {\n key: 'xAxisFormat',\n label: 'X-Axis Format',\n type: 'axisFormat',\n description: 'Number formatting for X-axis'\n },\n {\n key: 'leftYAxisFormat',\n label: 'Y-Axis Format',\n type: 'axisFormat',\n description: 'Number formatting for Y-axis'\n }\n ]\n}"],"names":["scatterChartConfig","getChartTypeIcon"],"mappings":";AAMO,MAAMA,IAAsC;AAAA,EACjD,MAAMC,EAAiB,SAAS;AAAA,EAChC,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,IACT;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa,CAAC,aAAa,iBAAiB,SAAS;AAAA,MACrD,WAAW;AAAA,IAAA;AAAA,IAEb;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,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,gBAAgB,CAAC,cAAc,YAAY,eAAe,YAAY;AAAA,EACtE,sBAAsB;AAAA,IACpB;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,IAAA;AAAA,EACf;AAEJ;"}
|