drizzle-cube 0.1.69 → 0.2.0
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/adapters/{compiler-CghsDLXl.cjs → compiler-DP1pPIcg.cjs} +9 -9
- package/dist/adapters/{compiler-BnHK-nxh.js → compiler-gcKytLwd.js} +12 -13
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.js +1 -1
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.js +1 -1
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +1 -1
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +1 -1
- package/dist/client/charts/ChartLoader.d.ts +56 -0
- package/dist/client/charts/lazyChartConfigRegistry.d.ts +90 -0
- package/dist/client/charts.d.ts +6 -0
- package/dist/client/charts.js +38 -15
- package/dist/client/charts.js.map +1 -1
- package/dist/client/chunks/chart-activitygridchart-BRk9BNnp.js +3713 -0
- package/dist/client/chunks/chart-activitygridchart-BRk9BNnp.js.map +1 -0
- package/dist/client/chunks/chart-activitygridchart-config-D9CgNH02.js +51 -0
- package/dist/client/chunks/chart-activitygridchart-config-D9CgNH02.js.map +1 -0
- package/dist/client/chunks/chart-areachart-Beu8sO9v.js +204 -0
- package/dist/client/chunks/chart-areachart-Beu8sO9v.js.map +1 -0
- package/dist/client/chunks/chart-areachart-config-InZgxubz.js +66 -0
- package/dist/client/chunks/chart-areachart-config-InZgxubz.js.map +1 -0
- package/dist/client/chunks/chart-barchart-BzoejYkT.js +177 -0
- package/dist/client/chunks/chart-barchart-BzoejYkT.js.map +1 -0
- package/dist/client/chunks/chart-barchart-config-DxatOnVV.js +59 -0
- package/dist/client/chunks/chart-barchart-config-DxatOnVV.js.map +1 -0
- package/dist/client/chunks/chart-bubblechart-Dg7sT_Mm.js +210 -0
- package/dist/client/chunks/chart-bubblechart-Dg7sT_Mm.js.map +1 -0
- package/dist/client/chunks/chart-bubblechart-config-CcZTMTCx.js +59 -0
- package/dist/client/chunks/chart-bubblechart-config-CcZTMTCx.js.map +1 -0
- package/dist/client/chunks/chart-chartcontainer-CdwzIKP1.js +103 -0
- package/dist/client/chunks/chart-chartcontainer-CdwzIKP1.js.map +1 -0
- package/dist/client/chunks/chart-charttooltip-NrFVM1cJ.js +26 -0
- package/dist/client/chunks/chart-charttooltip-NrFVM1cJ.js.map +1 -0
- package/dist/client/chunks/chart-datatable-BvV7gLPZ.js +57 -0
- package/dist/client/chunks/chart-datatable-BvV7gLPZ.js.map +1 -0
- package/dist/client/chunks/chart-datatable-config-D7mojhYA.js +22 -0
- package/dist/client/chunks/chart-datatable-config-D7mojhYA.js.map +1 -0
- package/dist/client/chunks/chart-kpidelta-config-icJXuFxe.js +99 -0
- package/dist/client/chunks/chart-kpidelta-config-icJXuFxe.js.map +1 -0
- package/dist/client/chunks/chart-kpidelta-p1lVVG5v.js +434 -0
- package/dist/client/chunks/chart-kpidelta-p1lVVG5v.js.map +1 -0
- package/dist/client/chunks/chart-kpinumber-BFtxFeqq.js +398 -0
- package/dist/client/chunks/chart-kpinumber-BFtxFeqq.js.map +1 -0
- package/dist/client/chunks/chart-kpinumber-config-T39g03ud.js +77 -0
- package/dist/client/chunks/chart-kpinumber-config-T39g03ud.js.map +1 -0
- package/dist/client/chunks/chart-kpitext-CX1s1u8B.js +165 -0
- package/dist/client/chunks/chart-kpitext-CX1s1u8B.js.map +1 -0
- package/dist/client/chunks/chart-kpitext-config-BbJGXAVk.js +49 -0
- package/dist/client/chunks/chart-kpitext-config-BbJGXAVk.js.map +1 -0
- package/dist/client/chunks/chart-linechart-Dgb10zbj.js +155 -0
- package/dist/client/chunks/chart-linechart-Dgb10zbj.js.map +1 -0
- package/dist/client/chunks/chart-linechart-config-BS1qVC8K.js +54 -0
- package/dist/client/chunks/chart-linechart-config-BS1qVC8K.js.map +1 -0
- package/dist/client/chunks/chart-markdownchart-C3FAQFuO.js +254 -0
- package/dist/client/chunks/chart-markdownchart-C3FAQFuO.js.map +1 -0
- package/dist/client/chunks/chart-markdownchart-config-DMCD8phf.js +62 -0
- package/dist/client/chunks/chart-markdownchart-config-DMCD8phf.js.map +1 -0
- package/dist/client/chunks/chart-piechart-B-0BQh-d.js +121 -0
- package/dist/client/chunks/chart-piechart-B-0BQh-d.js.map +1 -0
- package/dist/client/chunks/chart-piechart-config-6ZK8XaSX.js +32 -0
- package/dist/client/chunks/chart-piechart-config-6ZK8XaSX.js.map +1 -0
- package/dist/client/chunks/chart-radarchart-BwZM1yTd.js +124 -0
- package/dist/client/chunks/chart-radarchart-BwZM1yTd.js.map +1 -0
- package/dist/client/chunks/chart-radarchart-config-CCWOkkwO.js +38 -0
- package/dist/client/chunks/chart-radarchart-config-CCWOkkwO.js.map +1 -0
- package/dist/client/chunks/chart-radialbarchart-CythI1zx.js +109 -0
- package/dist/client/chunks/chart-radialbarchart-CythI1zx.js.map +1 -0
- package/dist/client/chunks/chart-radialbarchart-config-DicXYrMW.js +31 -0
- package/dist/client/chunks/chart-radialbarchart-config-DicXYrMW.js.map +1 -0
- package/dist/client/chunks/chart-scatterchart-config-DgYa-5vm.js +41 -0
- package/dist/client/chunks/chart-scatterchart-config-DgYa-5vm.js.map +1 -0
- package/dist/client/chunks/chart-scatterchart-om9-qmtE.js +201 -0
- package/dist/client/chunks/chart-scatterchart-om9-qmtE.js.map +1 -0
- package/dist/client/chunks/chart-treemapchart-Dc35Miif.js +253 -0
- package/dist/client/chunks/chart-treemapchart-Dc35Miif.js.map +1 -0
- package/dist/client/chunks/chart-treemapchart-config-DGhteyBe.js +40 -0
- package/dist/client/chunks/chart-treemapchart-config-DGhteyBe.js.map +1 -0
- package/dist/client/chunks/charts-DL9XOlaK.js +286 -0
- package/dist/client/chunks/charts-DL9XOlaK.js.map +1 -0
- package/dist/client/chunks/{icons-BWMWCuY7.js → icons-D-n_woAP.js} +614 -614
- package/dist/client/chunks/icons-D-n_woAP.js.map +1 -0
- package/dist/client/chunks/index-DpEuGmcW.js +8707 -0
- package/dist/client/chunks/index-DpEuGmcW.js.map +1 -0
- package/dist/client/components.js +11 -11
- package/dist/client/hooks.js +3 -3
- package/dist/client/index.d.ts +18 -1
- package/dist/client/index.js +9135 -39
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers.js +4 -4
- package/dist/client/styles.css +1 -1
- package/dist/client-bundle-stats.html +1 -1
- package/dist/server/index.cjs +16 -16
- package/dist/server/index.d.ts +0 -286
- package/dist/server/index.js +767 -881
- package/package.json +7 -2
- package/dist/client/chunks/charts-jwgcWeFt.js +0 -2580
- package/dist/client/chunks/charts-jwgcWeFt.js.map +0 -1
- package/dist/client/chunks/components-DALzorPs.js +0 -22432
- package/dist/client/chunks/components-DALzorPs.js.map +0 -1
- package/dist/client/chunks/icons-BWMWCuY7.js.map +0 -1
- package/dist/client/chunks/providers-D7zRgZrO.js +0 -308
- package/dist/client/chunks/providers-D7zRgZrO.js.map +0 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { jsx as e, jsxs as p } from "react/jsx-runtime";
|
|
2
|
+
import { useState as b } from "react";
|
|
3
|
+
import { RadarChart as S, PolarGrid as L, PolarAngleAxis as R, PolarRadiusAxis as j, Legend as C, Radar as F } from "recharts";
|
|
4
|
+
import { C as T } from "./chart-chartcontainer-CdwzIKP1.js";
|
|
5
|
+
import { C as k } from "./chart-charttooltip-NrFVM1cJ.js";
|
|
6
|
+
import { t as z, b as E, c as G, a as y } from "./chart-activitygridchart-BRk9BNnp.js";
|
|
7
|
+
function W({
|
|
8
|
+
data: l,
|
|
9
|
+
chartConfig: a,
|
|
10
|
+
displayConfig: v = {},
|
|
11
|
+
queryObject: N,
|
|
12
|
+
height: x = "100%",
|
|
13
|
+
colorPalette: d
|
|
14
|
+
}) {
|
|
15
|
+
const [h, w] = b(null);
|
|
16
|
+
try {
|
|
17
|
+
const c = {
|
|
18
|
+
showLegend: v?.showLegend ?? !0,
|
|
19
|
+
showTooltip: v?.showTooltip ?? !0,
|
|
20
|
+
showGrid: v?.showGrid ?? !0
|
|
21
|
+
};
|
|
22
|
+
if (!l || l.length === 0)
|
|
23
|
+
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: x }, children: /* @__PURE__ */ p("div", { className: "text-center", children: [
|
|
24
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No data available" }),
|
|
25
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No data points to display in radar chart" })
|
|
26
|
+
] }) });
|
|
27
|
+
let m, u = [];
|
|
28
|
+
if (a?.xAxis && a?.yAxis) {
|
|
29
|
+
const s = Array.isArray(a.xAxis) ? a.xAxis[0] : a.xAxis, r = Array.isArray(a.yAxis) ? a.yAxis : [a.yAxis], i = a.series || [], { data: n, seriesKeys: t } = z(
|
|
30
|
+
l,
|
|
31
|
+
s,
|
|
32
|
+
r,
|
|
33
|
+
N,
|
|
34
|
+
i
|
|
35
|
+
);
|
|
36
|
+
m = n, u = t;
|
|
37
|
+
} else {
|
|
38
|
+
const s = l[0], r = Object.keys(s), i = r.find(
|
|
39
|
+
(t) => typeof s[t] == "string" || t.toLowerCase().includes("subject") || t.toLowerCase().includes("name") || t.toLowerCase().includes("category")
|
|
40
|
+
) || r[0], n = r.filter(
|
|
41
|
+
(t) => typeof s[t] == "number" && t !== i
|
|
42
|
+
);
|
|
43
|
+
if (n.length === 0)
|
|
44
|
+
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-yellow-600", style: { height: x }, children: /* @__PURE__ */ p("div", { className: "text-center", children: [
|
|
45
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
|
|
46
|
+
/* @__PURE__ */ e("div", { className: "text-xs", children: "No numeric fields found for radar chart values" })
|
|
47
|
+
] }) });
|
|
48
|
+
if (i) {
|
|
49
|
+
const t = E(N, i);
|
|
50
|
+
m = l.map((o) => {
|
|
51
|
+
const g = {
|
|
52
|
+
name: G(o[i], t) || String(o[i]) || "Unknown"
|
|
53
|
+
};
|
|
54
|
+
return n.forEach((f) => {
|
|
55
|
+
const A = f.split(".").pop() || f;
|
|
56
|
+
g[A] = typeof o[f] == "string" ? parseFloat(o[f]) : o[f] || 0;
|
|
57
|
+
}), g;
|
|
58
|
+
}), u = n.map((o) => o.split(".").pop() || o);
|
|
59
|
+
} else
|
|
60
|
+
m = l.map((t) => ({
|
|
61
|
+
name: String(t[r[0]] || "Unknown"),
|
|
62
|
+
value: typeof t[n[0]] == "string" ? parseFloat(t[n[0]]) : t[n[0]] || 0
|
|
63
|
+
})), u = ["value"];
|
|
64
|
+
}
|
|
65
|
+
return !m || m.length === 0 ? /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: x }, children: /* @__PURE__ */ p("div", { className: "text-center", children: [
|
|
66
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No valid data" }),
|
|
67
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No valid data points for radar chart after transformation" })
|
|
68
|
+
] }) }) : /* @__PURE__ */ e(T, { height: x, children: /* @__PURE__ */ p(S, { data: m, margin: { top: 20, right: 80, bottom: 20, left: 80 }, children: [
|
|
69
|
+
c.showGrid && /* @__PURE__ */ e(L, {}),
|
|
70
|
+
/* @__PURE__ */ e(
|
|
71
|
+
R,
|
|
72
|
+
{
|
|
73
|
+
dataKey: "name",
|
|
74
|
+
tick: { fontSize: 12 },
|
|
75
|
+
className: "text-dc-text-muted"
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
/* @__PURE__ */ e(
|
|
79
|
+
j,
|
|
80
|
+
{
|
|
81
|
+
tick: { fontSize: 10 },
|
|
82
|
+
className: "text-dc-text-muted"
|
|
83
|
+
}
|
|
84
|
+
),
|
|
85
|
+
c.showTooltip && /* @__PURE__ */ e(k, {}),
|
|
86
|
+
c.showLegend && u.length > 1 && /* @__PURE__ */ e(
|
|
87
|
+
C,
|
|
88
|
+
{
|
|
89
|
+
wrapperStyle: { fontSize: "12px", paddingTop: "10px" },
|
|
90
|
+
iconType: "rect",
|
|
91
|
+
iconSize: 8,
|
|
92
|
+
layout: "horizontal",
|
|
93
|
+
align: "center",
|
|
94
|
+
verticalAlign: "bottom",
|
|
95
|
+
onMouseEnter: (s) => w(String(s.dataKey || "")),
|
|
96
|
+
onMouseLeave: () => w(null)
|
|
97
|
+
}
|
|
98
|
+
),
|
|
99
|
+
u.map((s, r) => /* @__PURE__ */ e(
|
|
100
|
+
F,
|
|
101
|
+
{
|
|
102
|
+
name: s,
|
|
103
|
+
dataKey: s,
|
|
104
|
+
stroke: d?.colors && d.colors[r % d.colors.length] || y[r % y.length],
|
|
105
|
+
fill: d?.colors && d.colors[r % d.colors.length] || y[r % y.length],
|
|
106
|
+
fillOpacity: h ? h === s ? 0.6 : 0.1 : 0.3,
|
|
107
|
+
strokeOpacity: h ? h === s ? 1 : 0.3 : 1,
|
|
108
|
+
strokeWidth: 2
|
|
109
|
+
},
|
|
110
|
+
s
|
|
111
|
+
))
|
|
112
|
+
] }) });
|
|
113
|
+
} catch (c) {
|
|
114
|
+
return /* @__PURE__ */ e("div", { className: "flex flex-col items-center justify-center w-full text-red-500 p-4", style: { height: x }, children: /* @__PURE__ */ p("div", { className: "text-center", children: [
|
|
115
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Radar Chart Error" }),
|
|
116
|
+
/* @__PURE__ */ e("div", { className: "text-xs mb-2", children: c instanceof Error ? c.message : "Unknown rendering error" }),
|
|
117
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-muted", children: "Check the data and configuration" })
|
|
118
|
+
] }) });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export {
|
|
122
|
+
W as default
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=chart-radarchart-BwZM1yTd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-radarchart-BwZM1yTd.js","sources":["../../../src/client/components/charts/RadarChart.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { RadarChart as RechartsRadarChart, PolarGrid, PolarAngleAxis, PolarRadiusAxis, Radar, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatTimeValue, getFieldGranularity } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nexport default function RadarChart({ \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 showGrid: displayConfig?.showGrid ?? 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 radar chart</div>\n </div>\n </div>\n )\n }\n\n let radarData: any[]\n let seriesKeys: 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 // Subject/category field\n const yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis] // Value fields\n const seriesFields = chartConfig.series || []\n\n // Use shared function to transform data and handle series\n const { data: chartData, seriesKeys: transformedSeriesKeys } = transformChartDataWithSeries(\n data, \n xAxisField, \n yAxisFields, \n queryObject,\n seriesFields\n )\n \n radarData = chartData\n seriesKeys = transformedSeriesKeys\n } else {\n // Legacy format or auto-detection - try to find suitable fields\n const firstRow = data[0]\n const keys = Object.keys(firstRow)\n \n // Try to find subject/category field\n const subjectField = keys.find(key => \n typeof firstRow[key] === 'string' ||\n key.toLowerCase().includes('subject') ||\n key.toLowerCase().includes('name') ||\n key.toLowerCase().includes('category')\n ) || keys[0]\n\n // Find numeric fields for values\n const valueFields = keys.filter(key => \n typeof firstRow[key] === 'number' && key !== subjectField\n )\n\n if (valueFields.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\">No numeric fields found for radar chart values</div>\n </div>\n </div>\n )\n }\n\n // Transform data for radar chart\n if (subjectField) {\n // Use subject field for radar categories\n const granularity = getFieldGranularity(queryObject, subjectField)\n radarData = data.map(item => {\n const transformedItem: any = {\n name: formatTimeValue(item[subjectField], granularity) || String(item[subjectField]) || 'Unknown'\n }\n \n valueFields.forEach(field => {\n const displayName = field.split('.').pop() || field\n transformedItem[displayName] = typeof item[field] === 'string' \n ? parseFloat(item[field]) \n : (item[field] || 0)\n })\n \n return transformedItem\n })\n \n seriesKeys = valueFields.map(field => field.split('.').pop() || field)\n } else {\n // Fallback - use first value field only\n radarData = data.map(item => ({\n name: String(item[keys[0]] || 'Unknown'),\n value: typeof item[valueFields[0]] === 'string' \n ? parseFloat(item[valueFields[0]]) \n : (item[valueFields[0]] || 0)\n }))\n seriesKeys = ['value']\n }\n }\n \n // Validate transformed data\n if (!radarData || radarData.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 radar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <ChartContainer height={height}>\n <RechartsRadarChart data={radarData} margin={{ top: 20, right: 80, bottom: 20, left: 80 }}>\n {safeDisplayConfig.showGrid && (\n <PolarGrid />\n )}\n <PolarAngleAxis\n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n className=\"text-dc-text-muted\"\n />\n <PolarRadiusAxis\n tick={{ fontSize: 10 }}\n className=\"text-dc-text-muted\"\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip />\n )}\n {(safeDisplayConfig.showLegend && seriesKeys.length > 1) && (\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 <Radar\n key={seriesKey}\n name={seriesKey}\n dataKey={seriesKey}\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 strokeOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n strokeWidth={2}\n />\n ))}\n </RechartsRadarChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'RadarChart 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\">Radar 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":["RadarChart","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredLegend","setHoveredLegend","useState","safeDisplayConfig","jsx","jsxs","radarData","seriesKeys","xAxisField","yAxisFields","seriesFields","chartData","transformedSeriesKeys","transformChartDataWithSeries","firstRow","keys","subjectField","key","valueFields","granularity","getFieldGranularity","item","transformedItem","formatTimeValue","field","displayName","ChartContainer","RechartsRadarChart","PolarGrid","PolarAngleAxis","PolarRadiusAxis","ChartTooltip","Legend","o","seriesKey","index","Radar","CHART_COLORS","error"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { I as a, m as r } from "./icons-D-n_woAP.js";
|
|
3
|
+
const t = {
|
|
4
|
+
icon: ({ className: e }) => /* @__PURE__ */ s(a, { icon: r, className: e }),
|
|
5
|
+
description: "Compare multiple metrics across categories",
|
|
6
|
+
useCase: "Best for multivariate comparisons, performance metrics, strengths/weaknesses analysis",
|
|
7
|
+
dropZones: [
|
|
8
|
+
{
|
|
9
|
+
key: "xAxis",
|
|
10
|
+
label: "Axes (Categories)",
|
|
11
|
+
description: "Dimensions for radar axes",
|
|
12
|
+
mandatory: !0,
|
|
13
|
+
acceptTypes: ["dimension"],
|
|
14
|
+
emptyText: "Drop dimensions for radar axes"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
key: "yAxis",
|
|
18
|
+
label: "Values",
|
|
19
|
+
description: "Measures for radar values",
|
|
20
|
+
mandatory: !0,
|
|
21
|
+
acceptTypes: ["measure"],
|
|
22
|
+
emptyText: "Drop measures for values"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
key: "series",
|
|
26
|
+
label: "Series (Multiple Shapes)",
|
|
27
|
+
description: "Dimensions to create multiple radar shapes",
|
|
28
|
+
mandatory: !1,
|
|
29
|
+
acceptTypes: ["dimension"],
|
|
30
|
+
emptyText: "Drop dimensions for multiple shapes"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
displayOptions: ["showLegend", "showGrid", "showTooltip", "hideHeader"]
|
|
34
|
+
};
|
|
35
|
+
export {
|
|
36
|
+
t as radarChartConfig
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=chart-radarchart-config-CCWOkkwO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-radarchart-config-CCWOkkwO.js","sources":["../../../src/client/components/charts/RadarChart.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { Icon } from '@iconify/react'\nimport chartRadarIcon from '@iconify-icons/tabler/chart-radar'\n\n/**\n * Configuration for the radar chart type\n */\nexport const radarChartConfig: ChartTypeConfig = {\n icon: ({ className }) => <Icon icon={chartRadarIcon} className={className} />,\n description: 'Compare multiple metrics across categories',\n useCase: 'Best for multivariate comparisons, performance metrics, strengths/weaknesses analysis',\n dropZones: [\n {\n key: 'xAxis',\n label: 'Axes (Categories)',\n description: 'Dimensions for radar axes',\n mandatory: true,\n acceptTypes: ['dimension'],\n emptyText: 'Drop dimensions for radar axes'\n },\n {\n key: 'yAxis',\n label: 'Values',\n description: 'Measures for radar values',\n mandatory: true,\n acceptTypes: ['measure'],\n emptyText: 'Drop measures for values'\n },\n {\n key: 'series',\n label: 'Series (Multiple Shapes)',\n description: 'Dimensions to create multiple radar shapes',\n mandatory: false,\n acceptTypes: ['dimension'],\n emptyText: 'Drop dimensions for multiple shapes'\n }\n ],\n displayOptions: ['showLegend', 'showGrid', 'showTooltip', 'hideHeader']\n}"],"names":["radarChartConfig","className","jsx","Icon","chartRadarIcon"],"mappings":";;AAOO,MAAMA,IAAoC;AAAA,EAC/C,MAAM,CAAC,EAAE,WAAAC,EAAA,MAAgB,gBAAAC,EAACC,GAAA,EAAK,MAAMC,GAAgB,WAAAH,GAAsB;AAAA,EAC3E,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,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;AACxE;"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx as e, jsxs as f } from "react/jsx-runtime";
|
|
2
|
+
import { useState as b } from "react";
|
|
3
|
+
import { RadialBarChart as g, Legend as w, RadialBar as A, Cell as L } from "recharts";
|
|
4
|
+
import { C as R } from "./chart-chartcontainer-CdwzIKP1.js";
|
|
5
|
+
import { C } from "./chart-charttooltip-NrFVM1cJ.js";
|
|
6
|
+
import { b as S, a as x, c as T } from "./chart-activitygridchart-BRk9BNnp.js";
|
|
7
|
+
function D({
|
|
8
|
+
data: d,
|
|
9
|
+
chartConfig: i,
|
|
10
|
+
displayConfig: v = {},
|
|
11
|
+
queryObject: N,
|
|
12
|
+
height: c = "100%",
|
|
13
|
+
colorPalette: o
|
|
14
|
+
}) {
|
|
15
|
+
const [p, h] = b(null);
|
|
16
|
+
try {
|
|
17
|
+
const m = {
|
|
18
|
+
showLegend: v?.showLegend ?? !0,
|
|
19
|
+
showTooltip: v?.showTooltip ?? !0
|
|
20
|
+
};
|
|
21
|
+
if (!d || d.length === 0)
|
|
22
|
+
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: c }, children: /* @__PURE__ */ f("div", { className: "text-center", children: [
|
|
23
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No data available" }),
|
|
24
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No data points to display in radial bar chart" })
|
|
25
|
+
] }) });
|
|
26
|
+
let n;
|
|
27
|
+
if (i?.xAxis && i?.yAxis) {
|
|
28
|
+
const t = Array.isArray(i.xAxis) ? i.xAxis[0] : i.xAxis, a = Array.isArray(i.yAxis) ? i.yAxis[0] : i.yAxis, u = S(N, t);
|
|
29
|
+
n = d.map((l, r) => ({
|
|
30
|
+
name: T(l[t], u) || String(l[t]) || "Unknown",
|
|
31
|
+
value: typeof l[a] == "string" ? parseFloat(l[a]) : l[a] || 0,
|
|
32
|
+
fill: o?.colors && o.colors[r % o.colors.length] || x[r % x.length]
|
|
33
|
+
}));
|
|
34
|
+
} else {
|
|
35
|
+
const t = d[0], a = Object.keys(t), u = a.find(
|
|
36
|
+
(r) => typeof t[r] == "string" || r.toLowerCase().includes("name") || r.toLowerCase().includes("label") || r.toLowerCase().includes("category")
|
|
37
|
+
) || a[0], l = a.find(
|
|
38
|
+
(r) => typeof t[r] == "number" && r !== u
|
|
39
|
+
) || a[1];
|
|
40
|
+
if (!l)
|
|
41
|
+
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-yellow-600", style: { height: c }, children: /* @__PURE__ */ f("div", { className: "text-center", children: [
|
|
42
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
|
|
43
|
+
/* @__PURE__ */ e("div", { className: "text-xs", children: "No numeric field found for radial bar chart values" })
|
|
44
|
+
] }) });
|
|
45
|
+
n = d.map((r, y) => {
|
|
46
|
+
let s = r[u];
|
|
47
|
+
return typeof s == "boolean" ? s = s ? "Active" : "Inactive" : s === "true" || s === "false" ? s = s === "true" ? "Active" : "Inactive" : s = String(s), {
|
|
48
|
+
name: s,
|
|
49
|
+
value: typeof r[l] == "string" ? parseFloat(r[l]) : r[l] || 0,
|
|
50
|
+
fill: o?.colors && o.colors[y % o.colors.length] || x[y % x.length]
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return n = n.filter((t) => t.value != null && t.value !== 0), n.length === 0 ? /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: c }, children: /* @__PURE__ */ f("div", { className: "text-center", children: [
|
|
55
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No valid data" }),
|
|
56
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No valid data points for radial bar chart after transformation" })
|
|
57
|
+
] }) }) : /* @__PURE__ */ e(R, { height: c, children: /* @__PURE__ */ f(
|
|
58
|
+
g,
|
|
59
|
+
{
|
|
60
|
+
data: n,
|
|
61
|
+
innerRadius: "10%",
|
|
62
|
+
outerRadius: "80%",
|
|
63
|
+
margin: { top: 20, right: 30, bottom: 20, left: 30 },
|
|
64
|
+
children: [
|
|
65
|
+
m.showTooltip && /* @__PURE__ */ e(C, {}),
|
|
66
|
+
m.showLegend && /* @__PURE__ */ e(
|
|
67
|
+
w,
|
|
68
|
+
{
|
|
69
|
+
wrapperStyle: { fontSize: "12px", paddingTop: "10px" },
|
|
70
|
+
iconType: "circle",
|
|
71
|
+
iconSize: 8,
|
|
72
|
+
layout: "horizontal",
|
|
73
|
+
align: "center",
|
|
74
|
+
verticalAlign: "bottom",
|
|
75
|
+
onMouseEnter: (t) => h(String(t.value || "")),
|
|
76
|
+
onMouseLeave: () => h(null)
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
/* @__PURE__ */ e(
|
|
80
|
+
A,
|
|
81
|
+
{
|
|
82
|
+
dataKey: "value",
|
|
83
|
+
cornerRadius: 4,
|
|
84
|
+
label: { position: "insideStart", fill: "#fff", fontSize: 12 },
|
|
85
|
+
children: n.map((t, a) => /* @__PURE__ */ e(
|
|
86
|
+
L,
|
|
87
|
+
{
|
|
88
|
+
fill: t.fill,
|
|
89
|
+
fillOpacity: p ? p === t.name ? 1 : 0.3 : 1
|
|
90
|
+
},
|
|
91
|
+
`cell-${a}`
|
|
92
|
+
))
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
) });
|
|
98
|
+
} catch (m) {
|
|
99
|
+
return /* @__PURE__ */ e("div", { className: "flex flex-col items-center justify-center w-full text-red-500 p-4", style: { height: c }, children: /* @__PURE__ */ f("div", { className: "text-center", children: [
|
|
100
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Radial Bar Chart Error" }),
|
|
101
|
+
/* @__PURE__ */ e("div", { className: "text-xs mb-2", children: m instanceof Error ? m.message : "Unknown rendering error" }),
|
|
102
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-muted", children: "Check the data and configuration" })
|
|
103
|
+
] }) });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export {
|
|
107
|
+
D as default
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=chart-radialbarchart-CythI1zx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-radialbarchart-CythI1zx.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 } 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 }\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 )}\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={{ position: 'insideStart', fill: '#fff', fontSize: 12 }}\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","Legend","o","RadialBar","entry","Cell","error"],"mappings":";;;;;;AAQA,SAAwBA,EAAe;AAAA,EACrC,MAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC,IAAgB,CAAA;AAAA,EAChB,aAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,cAAAC;AACF,GAAe;AACb,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAwB,IAAI;AAEtE,MAAI;AACF,UAAMC,IAAoB;AAAA,MACxB,YAAYP,GAAe,cAAc;AAAA,MACzC,aAAaA,GAAe,eAAe;AAAA,IAAA;AAG7C,QAAI,CAACF,KAAQA,EAAK,WAAW;AAC3B,aACE,gBAAAU,EAAC,OAAA,EAAI,WAAU,8DAA6D,OAAO,EAAE,QAAAN,EAAA,GACnF,UAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,QAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA,qBAAiB;AAAA,QAC7D,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCAAiC,UAAA,gDAAA,CAA6C;AAAA,MAAA,EAAA,CAC/F,EAAA,CACF;AAIJ,QAAIE;AAEJ,QAAIX,GAAa,SAASA,GAAa,OAAO;AAE5C,YAAMY,IAAa,MAAM,QAAQZ,EAAY,KAAK,IAAIA,EAAY,MAAM,CAAC,IAAIA,EAAY,OACnFa,IAAa,MAAM,QAAQb,EAAY,KAAK,IAAIA,EAAY,MAAM,CAAC,IAAIA,EAAY,OAEnFc,IAAcC,EAAoBb,GAAaU,CAAU;AAC/D,MAAAD,IAAaZ,EAAK,IAAI,CAACiB,GAAMC,OAAW;AAAA,QACtC,MAAMC,EAAgBF,EAAKJ,CAAU,GAAGE,CAAW,KAAK,OAAOE,EAAKJ,CAAU,CAAC,KAAK;AAAA,QACpF,OAAO,OAAOI,EAAKH,CAAU,KAAM,WAC/B,WAAWG,EAAKH,CAAU,CAAC,IAC1BG,EAAKH,CAAU,KAAK;AAAA,QACzB,MAAOT,GAAc,UAAUA,EAAa,OAAOa,IAAQb,EAAa,OAAO,MAAM,KAAMe,EAAaF,IAAQE,EAAa,MAAM;AAAA,MAAA,EACnI;AAAA,IACJ,OAAO;AAEL,YAAMC,IAAWrB,EAAK,CAAC,GACjBsB,IAAO,OAAO,KAAKD,CAAQ,GAG3BE,IAAYD,EAAK;AAAA,QAAK,CAAAE,MAC1B,OAAOH,EAASG,CAAG,KAAM,YACzBA,EAAI,YAAA,EAAc,SAAS,MAAM,KACjCA,EAAI,YAAA,EAAc,SAAS,OAAO,KAClCA,EAAI,cAAc,SAAS,UAAU;AAAA,MAAA,KAClCF,EAAK,CAAC,GAGLG,IAAaH,EAAK;AAAA,QAAK,OAC3B,OAAOD,EAASG,CAAG,KAAM,YAAYA,MAAQD;AAAA,MAAA,KAC1CD,EAAK,CAAC;AAEX,UAAI,CAACG;AACH,eACE,gBAAAf,EAAC,OAAA,EAAI,WAAU,2DAA0D,OAAO,EAAE,QAAAN,EAAA,GAChF,UAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA,uBAAmB;AAAA,UAC/D,gBAAAA,EAAC,OAAA,EAAI,WAAU,WAAU,UAAA,qDAAA,CAAkD;AAAA,QAAA,EAAA,CAC7E,EAAA,CACF;AAKJ,MAAAE,IAAaZ,EAAK,IAAI,CAACiB,GAAMC,MAAU;AACrC,YAAIQ,IAAOT,EAAKM,CAAS;AAEzB,eAAI,OAAOG,KAAS,YAClBA,IAAOA,IAAO,WAAW,aAChBA,MAAS,UAAUA,MAAS,UACrCA,IAAOA,MAAS,SAAS,WAAW,aAEpCA,IAAO,OAAOA,CAAI,GAEb;AAAA,UACL,MAAAA;AAAA,UACA,OAAO,OAAOT,EAAKQ,CAAU,KAAM,WAC/B,WAAWR,EAAKQ,CAAU,CAAC,IAC1BR,EAAKQ,CAAU,KAAK;AAAA,UACzB,MAAOpB,GAAc,UAAUA,EAAa,OAAOa,IAAQb,EAAa,OAAO,MAAM,KAAMe,EAAaF,IAAQE,EAAa,MAAM;AAAA,QAAA;AAAA,MAEvI,CAAC;AAAA,IACH;AAKA,WAFAR,IAAaA,EAAW,OAAO,CAAAK,MAAQA,EAAK,SAAS,QAAQA,EAAK,UAAU,CAAC,GAEzEL,EAAW,WAAW,IAEtB,gBAAAF,EAAC,OAAA,EAAI,WAAU,8DAA6D,OAAO,EAAE,QAAAN,EAAA,GACnF,UAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA,iBAAa;AAAA,MACzD,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCAAiC,UAAA,iEAAA,CAA8D;AAAA,IAAA,EAAA,CAChH,EAAA,CACF,IAKF,gBAAAA,EAACiB,KAAe,QAAAvB,GACd,UAAA,gBAAAO;AAAA,MAACiB;AAAAA,MAAA;AAAA,QACC,MAAMhB;AAAA,QACN,aAAY;AAAA,QACZ,aAAY;AAAA,QACZ,QAAQ,EAAE,KAAK,IAAI,OAAO,IAAI,QAAQ,IAAI,MAAM,GAAA;AAAA,QAE/C,UAAA;AAAA,UAAAH,EAAkB,iCAChBoB,GAAA,CAAA,CAAa;AAAA,UAEfpB,EAAkB,cACjB,gBAAAC;AAAA,YAACoB;AAAA,YAAA;AAAA,cACC,cAAc,EAAE,UAAU,QAAQ,YAAY,OAAA;AAAA,cAC9C,UAAS;AAAA,cACT,UAAU;AAAA,cACV,QAAO;AAAA,cACP,OAAM;AAAA,cACN,eAAc;AAAA,cACd,cAAc,CAACC,MAAMxB,EAAiB,OAAOwB,EAAE,SAAS,EAAE,CAAC;AAAA,cAC3D,cAAc,MAAMxB,EAAiB,IAAI;AAAA,YAAA;AAAA,UAAA;AAAA,UAG7C,gBAAAG;AAAA,YAACsB;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,cAAc;AAAA,cACd,OAAO,EAAE,UAAU,eAAe,MAAM,QAAQ,UAAU,GAAA;AAAA,cAEzD,UAAApB,EAAW,IAAI,CAACqB,GAAOf,MACtB,gBAAAR;AAAA,gBAACwB;AAAA,gBAAA;AAAA,kBAEC,MAAMD,EAAM;AAAA,kBACZ,aAAa3B,IAAiBA,MAAkB2B,EAAM,OAAO,IAAI,MAAO;AAAA,gBAAA;AAAA,gBAFnE,QAAQf,CAAK;AAAA,cAAA,CAIrB;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,EAEJ,SAASiB,GAAO;AAEd,WACE,gBAAAzB,EAAC,OAAA,EAAI,WAAU,qEAAoE,OAAO,EAAE,QAAAN,EAAA,GAC1F,UAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,MAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA,0BAAsB;AAAA,MAClE,gBAAAA,EAAC,SAAI,WAAU,gBAAgB,uBAAiB,QAAQyB,EAAM,UAAU,0BAAA,CAA0B;AAAA,MAClG,gBAAAzB,EAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA,mCAAA,CAAgC;AAAA,IAAA,EAAA,CAC9E,EAAA,CACF;AAAA,EAEJ;AACF;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { I as o, n as a } from "./icons-D-n_woAP.js";
|
|
3
|
+
const t = {
|
|
4
|
+
icon: ({ className: e }) => /* @__PURE__ */ s(o, { icon: a, className: e }),
|
|
5
|
+
description: "Circular progress and KPI visualization",
|
|
6
|
+
useCase: "Best for showing progress toward goals, KPIs, or comparing percentages in a compact form",
|
|
7
|
+
dropZones: [
|
|
8
|
+
{
|
|
9
|
+
key: "xAxis",
|
|
10
|
+
label: "Categories",
|
|
11
|
+
description: "Dimensions for radial segments",
|
|
12
|
+
mandatory: !0,
|
|
13
|
+
acceptTypes: ["dimension"],
|
|
14
|
+
emptyText: "Drop dimensions for categories"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
key: "yAxis",
|
|
18
|
+
label: "Values",
|
|
19
|
+
description: "Measures for radial bar lengths",
|
|
20
|
+
mandatory: !0,
|
|
21
|
+
maxItems: 1,
|
|
22
|
+
acceptTypes: ["measure"],
|
|
23
|
+
emptyText: "Drop a measure for values"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
displayOptions: ["showLegend", "showTooltip", "hideHeader"]
|
|
27
|
+
};
|
|
28
|
+
export {
|
|
29
|
+
t as radialBarChartConfig
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=chart-radialbarchart-config-DicXYrMW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-radialbarchart-config-DicXYrMW.js","sources":["../../../src/client/components/charts/RadialBarChart.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { Icon } from '@iconify/react'\nimport chartRadarIcon from '@iconify-icons/tabler/radar-2'\n\n/**\n * Configuration for the radial bar chart type\n */\nexport const radialBarChartConfig: ChartTypeConfig = {\n icon: ({ className }) => <Icon icon={chartRadarIcon} className={className} />,\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}"],"names":["radialBarChartConfig","className","jsx","Icon","chartRadarIcon"],"mappings":";;AAOO,MAAMA,IAAwC;AAAA,EACnD,MAAM,CAAC,EAAE,WAAAC,EAAA,MAAgB,gBAAAC,EAACC,GAAA,EAAK,MAAMC,GAAgB,WAAAH,GAAsB;AAAA,EAC3E,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;AAC5D;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { I as s, o as i } from "./icons-D-n_woAP.js";
|
|
3
|
+
const a = {
|
|
4
|
+
icon: ({ className: e }) => /* @__PURE__ */ o(s, { icon: i, className: e }),
|
|
5
|
+
description: "Reveal correlations between variables",
|
|
6
|
+
useCase: "Best for identifying patterns, correlations, outliers, and relationships between two measures",
|
|
7
|
+
dropZones: [
|
|
8
|
+
{
|
|
9
|
+
key: "xAxis",
|
|
10
|
+
label: "X-Axis",
|
|
11
|
+
description: "Measure or dimension for X position",
|
|
12
|
+
mandatory: !0,
|
|
13
|
+
maxItems: 1,
|
|
14
|
+
acceptTypes: ["dimension", "timeDimension", "measure"],
|
|
15
|
+
emptyText: "Drop a field for X-axis"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
key: "yAxis",
|
|
19
|
+
label: "Y-Axis",
|
|
20
|
+
description: "Measure for Y position",
|
|
21
|
+
mandatory: !0,
|
|
22
|
+
maxItems: 1,
|
|
23
|
+
acceptTypes: ["measure"],
|
|
24
|
+
emptyText: "Drop a measure for Y-axis"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
key: "series",
|
|
28
|
+
label: "Series (Color Groups)",
|
|
29
|
+
description: "Dimension to color points by category",
|
|
30
|
+
mandatory: !1,
|
|
31
|
+
maxItems: 1,
|
|
32
|
+
acceptTypes: ["dimension"],
|
|
33
|
+
emptyText: "Drop a dimension to color points"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
displayOptions: ["showLegend", "showGrid", "showTooltip", "hideHeader"]
|
|
37
|
+
};
|
|
38
|
+
export {
|
|
39
|
+
a as scatterChartConfig
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=chart-scatterchart-config-DgYa-5vm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-scatterchart-config-DgYa-5vm.js","sources":["../../../src/client/components/charts/ScatterChart.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { Icon } from '@iconify/react'\nimport chartDots2Icon from '@iconify-icons/tabler/chart-dots-2'\n\n/**\n * Configuration for the scatter chart type\n */\nexport const scatterChartConfig: ChartTypeConfig = {\n icon: ({ className }) => <Icon icon={chartDots2Icon} className={className} />,\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}"],"names":["scatterChartConfig","className","jsx","Icon","chartDots2Icon"],"mappings":";;AAOO,MAAMA,IAAsC;AAAA,EACjD,MAAM,CAAC,EAAE,WAAAC,EAAA,MAAgB,gBAAAC,EAACC,GAAA,EAAK,MAAMC,GAAgB,WAAAH,GAAsB;AAAA,EAC3E,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;AACxE;"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { jsx as e, jsxs as l } from "react/jsx-runtime";
|
|
2
|
+
import { useState as _ } from "react";
|
|
3
|
+
import { ScatterChart as H, CartesianGrid as K, XAxis as O, YAxis as B, Tooltip as Y, Legend as U, Scatter as M } from "recharts";
|
|
4
|
+
import { C as W } from "./chart-chartcontainer-CdwzIKP1.js";
|
|
5
|
+
import { u as $, b, c as S, p as j, i as z, C as J, f as R, a as k } from "./chart-activitygridchart-BRk9BNnp.js";
|
|
6
|
+
function re({
|
|
7
|
+
data: N,
|
|
8
|
+
chartConfig: i,
|
|
9
|
+
displayConfig: w = {},
|
|
10
|
+
queryObject: h,
|
|
11
|
+
height: m = "100%",
|
|
12
|
+
colorPalette: p
|
|
13
|
+
}) {
|
|
14
|
+
const [D, L] = _(null), { getFieldLabel: x } = $();
|
|
15
|
+
try {
|
|
16
|
+
const u = {
|
|
17
|
+
showLegend: w?.showLegend ?? !0,
|
|
18
|
+
showGrid: w?.showGrid ?? !0,
|
|
19
|
+
showTooltip: w?.showTooltip ?? !0
|
|
20
|
+
};
|
|
21
|
+
if (!N || N.length === 0)
|
|
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
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No data available" }),
|
|
24
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No data points to display in scatter chart" })
|
|
25
|
+
] }) });
|
|
26
|
+
let a, o, V = [];
|
|
27
|
+
if (i?.xAxis && i?.yAxis) {
|
|
28
|
+
a = Array.isArray(i.xAxis) ? i.xAxis[0] : i.xAxis, o = Array.isArray(i.yAxis) ? i.yAxis[0] : i.yAxis;
|
|
29
|
+
const s = i.series;
|
|
30
|
+
V = s ? Array.isArray(s) ? s : [s] : [];
|
|
31
|
+
} else if (i?.x && i?.y)
|
|
32
|
+
a = i.x, o = Array.isArray(i.y) ? i.y[0] : i.y;
|
|
33
|
+
else
|
|
34
|
+
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-yellow-600", style: { height: m }, children: /* @__PURE__ */ l("div", { className: "text-center", children: [
|
|
35
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
|
|
36
|
+
/* @__PURE__ */ e("div", { className: "text-xs", children: "Invalid or missing chart axis configuration" })
|
|
37
|
+
] }) });
|
|
38
|
+
if (!a || !o)
|
|
39
|
+
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-yellow-600", style: { height: m }, children: /* @__PURE__ */ l("div", { className: "text-center", children: [
|
|
40
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
|
|
41
|
+
/* @__PURE__ */ e("div", { className: "text-xs", children: "Missing required X-axis or Y-axis fields" })
|
|
42
|
+
] }) });
|
|
43
|
+
const F = (h?.timeDimensions || []).map((s) => s.dimension);
|
|
44
|
+
let v, c = {};
|
|
45
|
+
if (V.length > 0) {
|
|
46
|
+
const s = V[0];
|
|
47
|
+
N.forEach((t) => {
|
|
48
|
+
const n = String(t[s] || "Default");
|
|
49
|
+
c[n] || (c[n] = []);
|
|
50
|
+
const y = b(h, a), f = S(t[a], y) || t[a], d = j(t[o]), g = typeof f == "string" ? parseFloat(f) : f;
|
|
51
|
+
if (z(g) && d !== null) {
|
|
52
|
+
const T = {};
|
|
53
|
+
F.forEach((A) => {
|
|
54
|
+
if (t[A]) {
|
|
55
|
+
const X = b(h, A);
|
|
56
|
+
T[A] = S(t[A], X);
|
|
57
|
+
}
|
|
58
|
+
}), c[n].push({
|
|
59
|
+
x: g,
|
|
60
|
+
y: d,
|
|
61
|
+
name: n,
|
|
62
|
+
timeValues: T,
|
|
63
|
+
originalItem: t
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}), v = Object.keys(c).flatMap((t) => c[t]);
|
|
67
|
+
} else {
|
|
68
|
+
const s = b(h, a);
|
|
69
|
+
v = N.map((r) => {
|
|
70
|
+
const t = S(r[a], s) || r[a], n = j(r[o]), y = typeof t == "string" ? parseFloat(t) : t, f = {};
|
|
71
|
+
return F.forEach((d) => {
|
|
72
|
+
if (r[d]) {
|
|
73
|
+
const g = b(h, d);
|
|
74
|
+
f[d] = S(r[d], g);
|
|
75
|
+
}
|
|
76
|
+
}), {
|
|
77
|
+
x: y,
|
|
78
|
+
y: n,
|
|
79
|
+
name: "Point",
|
|
80
|
+
timeValues: f,
|
|
81
|
+
originalItem: r,
|
|
82
|
+
isValid: z(y) && n !== null
|
|
83
|
+
};
|
|
84
|
+
}).filter((r) => r.isValid);
|
|
85
|
+
}
|
|
86
|
+
if (!v || v.length === 0)
|
|
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
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No valid data" }),
|
|
89
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No valid data points for scatter chart after transformation" })
|
|
90
|
+
] }) });
|
|
91
|
+
const E = Object.keys(c), G = E.length > 1 && E.length <= 20, I = u.showLegend && G, C = {
|
|
92
|
+
...J,
|
|
93
|
+
left: 40
|
|
94
|
+
// Increased from 20 to 40 for Y-axis label space
|
|
95
|
+
};
|
|
96
|
+
return /* @__PURE__ */ e(W, { height: m, children: /* @__PURE__ */ l(H, { margin: C, children: [
|
|
97
|
+
u.showGrid && /* @__PURE__ */ e(K, { strokeDasharray: "3 3" }),
|
|
98
|
+
/* @__PURE__ */ e(
|
|
99
|
+
O,
|
|
100
|
+
{
|
|
101
|
+
type: "number",
|
|
102
|
+
dataKey: "x",
|
|
103
|
+
name: x(a),
|
|
104
|
+
tick: { fontSize: 12 }
|
|
105
|
+
}
|
|
106
|
+
),
|
|
107
|
+
/* @__PURE__ */ e(
|
|
108
|
+
B,
|
|
109
|
+
{
|
|
110
|
+
type: "number",
|
|
111
|
+
dataKey: "y",
|
|
112
|
+
name: x(o),
|
|
113
|
+
tick: { fontSize: 12 },
|
|
114
|
+
label: { value: x(o), angle: -90, position: "left", style: { textAnchor: "middle", fontSize: "12px" } }
|
|
115
|
+
}
|
|
116
|
+
),
|
|
117
|
+
u.showTooltip && /* @__PURE__ */ e(
|
|
118
|
+
Y,
|
|
119
|
+
{
|
|
120
|
+
cursor: { strokeDasharray: "3 3" },
|
|
121
|
+
content: ({ active: s, payload: r }) => {
|
|
122
|
+
if (!s || !r || r.length === 0) return null;
|
|
123
|
+
const t = r[0]?.payload;
|
|
124
|
+
return t ? /* @__PURE__ */ l("div", { style: {
|
|
125
|
+
backgroundColor: "white",
|
|
126
|
+
border: "1px solid #e5e7eb",
|
|
127
|
+
borderRadius: "0.5rem",
|
|
128
|
+
fontSize: "0.875rem",
|
|
129
|
+
color: "#1f2937",
|
|
130
|
+
boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
131
|
+
padding: "8px 12px"
|
|
132
|
+
}, children: [
|
|
133
|
+
/* @__PURE__ */ e("div", { style: { fontWeight: 600, marginBottom: "4px" }, children: t.name }),
|
|
134
|
+
t.timeValues && Object.keys(t.timeValues).length > 0 && /* @__PURE__ */ e("div", { style: { marginBottom: "4px", color: "#6b7280" }, children: Object.entries(t.timeValues).map(([n, y]) => /* @__PURE__ */ l("div", { children: [
|
|
135
|
+
x(n),
|
|
136
|
+
": ",
|
|
137
|
+
y
|
|
138
|
+
] }, n)) }),
|
|
139
|
+
/* @__PURE__ */ l("div", { children: [
|
|
140
|
+
x(a),
|
|
141
|
+
": ",
|
|
142
|
+
R(t.x)
|
|
143
|
+
] }),
|
|
144
|
+
/* @__PURE__ */ l("div", { children: [
|
|
145
|
+
x(o),
|
|
146
|
+
": ",
|
|
147
|
+
R(t.y)
|
|
148
|
+
] })
|
|
149
|
+
] }) : null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
),
|
|
153
|
+
I && /* @__PURE__ */ e(
|
|
154
|
+
U,
|
|
155
|
+
{
|
|
156
|
+
wrapperStyle: { fontSize: "12px", paddingTop: "10px" },
|
|
157
|
+
iconType: "circle",
|
|
158
|
+
iconSize: 8,
|
|
159
|
+
layout: "horizontal",
|
|
160
|
+
align: "center",
|
|
161
|
+
verticalAlign: "bottom",
|
|
162
|
+
onMouseEnter: (s) => L(String(s.dataKey || "")),
|
|
163
|
+
onMouseLeave: () => L(null)
|
|
164
|
+
}
|
|
165
|
+
),
|
|
166
|
+
G ? (
|
|
167
|
+
// Multiple series
|
|
168
|
+
E.map((s, r) => /* @__PURE__ */ e(
|
|
169
|
+
M,
|
|
170
|
+
{
|
|
171
|
+
name: s,
|
|
172
|
+
data: c[s],
|
|
173
|
+
fill: p?.colors && p.colors[r % p.colors.length] || k[r % k.length],
|
|
174
|
+
fillOpacity: D ? D === s ? 1 : 0.3 : 1
|
|
175
|
+
},
|
|
176
|
+
s
|
|
177
|
+
))
|
|
178
|
+
) : (
|
|
179
|
+
// Single series
|
|
180
|
+
/* @__PURE__ */ e(
|
|
181
|
+
M,
|
|
182
|
+
{
|
|
183
|
+
name: "Data",
|
|
184
|
+
data: v,
|
|
185
|
+
fill: p?.colors && p.colors[0] || k[0]
|
|
186
|
+
}
|
|
187
|
+
)
|
|
188
|
+
)
|
|
189
|
+
] }) });
|
|
190
|
+
} catch (u) {
|
|
191
|
+
return /* @__PURE__ */ e("div", { className: "flex flex-col items-center justify-center w-full text-red-500 p-4", style: { height: m }, children: /* @__PURE__ */ l("div", { className: "text-center", children: [
|
|
192
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Scatter Chart Error" }),
|
|
193
|
+
/* @__PURE__ */ e("div", { className: "text-xs mb-2", children: u instanceof Error ? u.message : "Unknown rendering error" }),
|
|
194
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-muted", children: "Check the data and configuration" })
|
|
195
|
+
] }) });
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
export {
|
|
199
|
+
re as default
|
|
200
|
+
};
|
|
201
|
+
//# sourceMappingURL=chart-scatterchart-om9-qmtE.js.map
|