drizzle-cube 0.3.13 → 0.3.16
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/express/index.cjs +1 -1
- package/dist/adapters/express/index.d.ts +8 -1
- package/dist/adapters/express/index.js +162 -99
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.d.ts +8 -1
- package/dist/adapters/fastify/index.js +183 -96
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.d.ts +8 -1
- package/dist/adapters/hono/index.js +198 -142
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.d.ts +29 -1
- package/dist/adapters/nextjs/index.js +251 -132
- package/dist/adapters/utils.d.ts +100 -1
- package/dist/adapters/validation-Bgauxvm6.cjs +214 -0
- package/dist/adapters/{compiler-DTOU8IsK.js → validation-_UkKJ2pC.js} +9582 -5295
- package/dist/client/adapters/index.d.ts +2 -0
- package/dist/client/adapters/retentionModeAdapter.d.ts +3 -0
- package/dist/client/charts.js +12 -12
- package/dist/client/chunks/RetentionCombinedChart-DirfDaZH.js +256 -0
- package/dist/client/chunks/RetentionCombinedChart-DirfDaZH.js.map +1 -0
- package/dist/client/chunks/RetentionCombinedChart.config-C-ILIaEb.js +47 -0
- package/dist/client/chunks/RetentionCombinedChart.config-C-ILIaEb.js.map +1 -0
- package/dist/client/chunks/RetentionHeatmap-Bofadstm.js +178 -0
- package/dist/client/chunks/RetentionHeatmap-Bofadstm.js.map +1 -0
- package/dist/client/chunks/RetentionHeatmap.config-CIvhc-GT.js +28 -0
- package/dist/client/chunks/RetentionHeatmap.config-CIvhc-GT.js.map +1 -0
- package/dist/client/chunks/analysis-builder-APeCxkEH.js +6939 -0
- package/dist/client/chunks/analysis-builder-APeCxkEH.js.map +1 -0
- package/dist/client/chunks/analysis-builder-shared-DEovRjrp.js +2779 -0
- package/dist/client/chunks/analysis-builder-shared-DEovRjrp.js.map +1 -0
- package/dist/client/chunks/{chart-activity-grid-CuPARsr1.js → chart-activity-grid-BnweuBvr.js} +11 -11
- package/dist/client/chunks/{chart-activity-grid-CuPARsr1.js.map → chart-activity-grid-BnweuBvr.js.map} +1 -1
- package/dist/client/chunks/{chart-area-cPrJnhLj.js → chart-area-DLmXFWWy.js} +2 -2
- package/dist/client/chunks/{chart-area-cPrJnhLj.js.map → chart-area-DLmXFWWy.js.map} +1 -1
- package/dist/client/chunks/{chart-bar-D68HFPpa.js → chart-bar-7y0-F27Q.js} +2 -2
- package/dist/client/chunks/{chart-bar-D68HFPpa.js.map → chart-bar-7y0-F27Q.js.map} +1 -1
- package/dist/client/chunks/{chart-bubble-CquyYfNO.js → chart-bubble-3jYKCA2B.js} +2 -2
- package/dist/client/chunks/{chart-bubble-CquyYfNO.js.map → chart-bubble-3jYKCA2B.js.map} +1 -1
- package/dist/client/chunks/{chart-config-activity-grid-Bkvx0F-G.js → chart-config-activity-grid-BBSNCbkb.js} +2 -2
- package/dist/client/chunks/{chart-config-activity-grid-Bkvx0F-G.js.map → chart-config-activity-grid-BBSNCbkb.js.map} +1 -1
- package/dist/client/chunks/{chart-config-area-OApsRaYC.js → chart-config-area-CyyJOO2T.js} +2 -2
- package/dist/client/chunks/{chart-config-area-OApsRaYC.js.map → chart-config-area-CyyJOO2T.js.map} +1 -1
- package/dist/client/chunks/{chart-config-bar-Dy21oaIA.js → chart-config-bar-BJKGnfLt.js} +2 -2
- package/dist/client/chunks/{chart-config-bar-Dy21oaIA.js.map → chart-config-bar-BJKGnfLt.js.map} +1 -1
- package/dist/client/chunks/{chart-config-bubble-Chv0SoFm.js → chart-config-bubble-CuSsCHZ4.js} +2 -2
- package/dist/client/chunks/{chart-config-bubble-Chv0SoFm.js.map → chart-config-bubble-CuSsCHZ4.js.map} +1 -1
- package/dist/client/chunks/{chart-config-data-table-DTIdC35a.js → chart-config-data-table-BhgqwoqT.js} +2 -2
- package/dist/client/chunks/{chart-config-data-table-DTIdC35a.js.map → chart-config-data-table-BhgqwoqT.js.map} +1 -1
- package/dist/client/chunks/{chart-config-funnel-f17Livgr.js → chart-config-funnel-BlSQYng0.js} +4 -4
- package/dist/client/chunks/{chart-config-funnel-f17Livgr.js.map → chart-config-funnel-BlSQYng0.js.map} +1 -1
- package/dist/client/chunks/{chart-config-heat-map-DPhNICha.js → chart-config-heat-map-DHQGFZhX.js} +2 -2
- package/dist/client/chunks/{chart-config-heat-map-DPhNICha.js.map → chart-config-heat-map-DHQGFZhX.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-delta-CCl1d-St.js → chart-config-kpi-delta-yTA5ug_l.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-delta-CCl1d-St.js.map → chart-config-kpi-delta-yTA5ug_l.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-number-DkE3eSwH.js → chart-config-kpi-number-nVAwDXzq.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-number-DkE3eSwH.js.map → chart-config-kpi-number-nVAwDXzq.js.map} +1 -1
- package/dist/client/chunks/{chart-config-kpi-text-BMbgdxZm.js → chart-config-kpi-text-DZjqsx-b.js} +2 -2
- package/dist/client/chunks/{chart-config-kpi-text-BMbgdxZm.js.map → chart-config-kpi-text-DZjqsx-b.js.map} +1 -1
- package/dist/client/chunks/{chart-config-line-BnLlRUQE.js → chart-config-line-DR0ThxZy.js} +2 -2
- package/dist/client/chunks/{chart-config-line-BnLlRUQE.js.map → chart-config-line-DR0ThxZy.js.map} +1 -1
- package/dist/client/chunks/{chart-config-markdown-DIaMFC0Z.js → chart-config-markdown-DZxdGNVQ.js} +2 -2
- package/dist/client/chunks/{chart-config-markdown-DIaMFC0Z.js.map → chart-config-markdown-DZxdGNVQ.js.map} +1 -1
- package/dist/client/chunks/{chart-config-pie-O9y_T0BQ.js → chart-config-pie-BM5lgH-w.js} +2 -2
- package/dist/client/chunks/{chart-config-pie-O9y_T0BQ.js.map → chart-config-pie-BM5lgH-w.js.map} +1 -1
- package/dist/client/chunks/{chart-config-radar-CXa0354h.js → chart-config-radar-BBAVIF0S.js} +2 -2
- package/dist/client/chunks/{chart-config-radar-CXa0354h.js.map → chart-config-radar-BBAVIF0S.js.map} +1 -1
- package/dist/client/chunks/{chart-config-radial-bar-BppJU8-Q.js → chart-config-radial-bar-CTwjDRnB.js} +2 -2
- package/dist/client/chunks/{chart-config-radial-bar-BppJU8-Q.js.map → chart-config-radial-bar-CTwjDRnB.js.map} +1 -1
- package/dist/client/chunks/{chart-config-sankey-BfBHgL4x.js → chart-config-sankey-CNAgsMQ4.js} +2 -2
- package/dist/client/chunks/{chart-config-sankey-BfBHgL4x.js.map → chart-config-sankey-CNAgsMQ4.js.map} +1 -1
- package/dist/client/chunks/{chart-config-scatter-BTt8a10R.js → chart-config-scatter-CWvN2E-X.js} +2 -2
- package/dist/client/chunks/{chart-config-scatter-BTt8a10R.js.map → chart-config-scatter-CWvN2E-X.js.map} +1 -1
- package/dist/client/chunks/{chart-config-sunburst-DNmQpIIx.js → chart-config-sunburst-W_SKwaj0.js} +4 -4
- package/dist/client/chunks/{chart-config-sunburst-DNmQpIIx.js.map → chart-config-sunburst-W_SKwaj0.js.map} +1 -1
- package/dist/client/chunks/{chart-config-tree-map-HVgG4oa0.js → chart-config-tree-map-CLmRvvMR.js} +2 -2
- package/dist/client/chunks/{chart-config-tree-map-HVgG4oa0.js.map → chart-config-tree-map-CLmRvvMR.js.map} +1 -1
- package/dist/client/chunks/{chart-data-table-D4WDqbM0.js → chart-data-table-rUFLqysu.js} +4 -4
- package/dist/client/chunks/{chart-data-table-D4WDqbM0.js.map → chart-data-table-rUFLqysu.js.map} +1 -1
- package/dist/client/chunks/{chart-funnel-Csdn4FbN.js → chart-funnel-C7zGBfSw.js} +2 -2
- package/dist/client/chunks/{chart-funnel-Csdn4FbN.js.map → chart-funnel-C7zGBfSw.js.map} +1 -1
- package/dist/client/chunks/{chart-heat-map-v1afxnjq.js → chart-heat-map-B-l8hK8b.js} +2 -2
- package/dist/client/chunks/{chart-heat-map-v1afxnjq.js.map → chart-heat-map-B-l8hK8b.js.map} +1 -1
- package/dist/client/chunks/chart-kpi-delta-sfZEvQZm.js +351 -0
- package/dist/client/chunks/chart-kpi-delta-sfZEvQZm.js.map +1 -0
- package/dist/client/chunks/chart-kpi-number-BxGNOtzI.js +473 -0
- package/dist/client/chunks/chart-kpi-number-BxGNOtzI.js.map +1 -0
- package/dist/client/chunks/{chart-kpi-text-CRp8QWYG.js → chart-kpi-text-BLQ_CWQP.js} +3 -3
- package/dist/client/chunks/{chart-kpi-text-CRp8QWYG.js.map → chart-kpi-text-BLQ_CWQP.js.map} +1 -1
- package/dist/client/chunks/{chart-line-DqqE7ky9.js → chart-line-FSEpBk6Y.js} +5 -5
- package/dist/client/chunks/{chart-line-DqqE7ky9.js.map → chart-line-FSEpBk6Y.js.map} +1 -1
- package/dist/client/chunks/{chart-pie-B5WBzIRH.js → chart-pie-BRQEH9e-.js} +2 -2
- package/dist/client/chunks/{chart-pie-B5WBzIRH.js.map → chart-pie-BRQEH9e-.js.map} +1 -1
- package/dist/client/chunks/{chart-radar-DL_dvhA-.js → chart-radar-DgsFyiIP.js} +2 -2
- package/dist/client/chunks/{chart-radar-DL_dvhA-.js.map → chart-radar-DgsFyiIP.js.map} +1 -1
- package/dist/client/chunks/{chart-radial-bar-DDRo6nz-.js → chart-radial-bar-CUMoXyl9.js} +2 -2
- package/dist/client/chunks/{chart-radial-bar-DDRo6nz-.js.map → chart-radial-bar-CUMoXyl9.js.map} +1 -1
- package/dist/client/chunks/{chart-sankey-C_bgIfg-.js → chart-sankey-IAKDEe7A.js} +2 -2
- package/dist/client/chunks/{chart-sankey-C_bgIfg-.js.map → chart-sankey-IAKDEe7A.js.map} +1 -1
- package/dist/client/chunks/{chart-scatter-DjmJRlK0.js → chart-scatter-D6XwOD2W.js} +15 -15
- package/dist/client/chunks/{chart-scatter-DjmJRlK0.js.map → chart-scatter-D6XwOD2W.js.map} +1 -1
- package/dist/client/chunks/{chart-sunburst-CbMEnaes.js → chart-sunburst-CP_pnj0S.js} +2 -2
- package/dist/client/chunks/{chart-sunburst-CbMEnaes.js.map → chart-sunburst-CP_pnj0S.js.map} +1 -1
- package/dist/client/chunks/{chart-tree-map-DEfJtJVC.js → chart-tree-map-DQMsn47a.js} +30 -30
- package/dist/client/chunks/{chart-tree-map-DEfJtJVC.js.map → chart-tree-map-DQMsn47a.js.map} +1 -1
- package/dist/client/chunks/chartConfigRegistry-BumUIPw4.js +44 -0
- package/dist/client/chunks/{chartConfigRegistry-CiOq-PqX.js.map → chartConfigRegistry-BumUIPw4.js.map} +1 -1
- package/dist/client/chunks/charts-Dk_9XrA7.js +230 -0
- package/dist/client/chunks/charts-Dk_9XrA7.js.map +1 -0
- package/dist/client/chunks/{charts-core-CXrhEEVF.js → charts-core-CjQZBxmv.js} +10 -10
- package/dist/client/chunks/{charts-core-CXrhEEVF.js.map → charts-core-CjQZBxmv.js.map} +1 -1
- package/dist/client/chunks/{charts-loader-BtsnUO4Q.js → charts-loader-ChTUa_-G.js} +30 -28
- package/dist/client/chunks/charts-loader-ChTUa_-G.js.map +1 -0
- package/dist/client/chunks/{components-BDrlf9Er.js → components-BKZ7EAg0.js} +3575 -3208
- package/dist/client/chunks/components-BKZ7EAg0.js.map +1 -0
- package/dist/client/chunks/{core-B8zw0qRf.js → core-BRC075EG.js} +2 -2
- package/dist/client/chunks/{core-B8zw0qRf.js.map → core-BRC075EG.js.map} +1 -1
- package/dist/client/chunks/hooks-D7APQ8uS.js +150 -0
- package/dist/client/chunks/{hooks-B8Zw5PfL.js.map → hooks-D7APQ8uS.js.map} +1 -1
- package/dist/client/chunks/{icons-NzFHtqeM.js → icons-DRreo6m8.js} +128 -112
- package/dist/client/chunks/{icons-NzFHtqeM.js.map → icons-DRreo6m8.js.map} +1 -1
- package/dist/client/chunks/{providers-CqCiJTEj.js → providers-Cj7PQfXn.js} +2 -2
- package/dist/client/chunks/{providers-CqCiJTEj.js.map → providers-Cj7PQfXn.js.map} +1 -1
- package/dist/client/chunks/retention-CzCo8262.js +120 -0
- package/dist/client/chunks/retention-CzCo8262.js.map +1 -0
- package/dist/client/chunks/{useDirtyStateTracking-C_mitVwh.js → useDirtyStateTracking-ZSi3voVl.js} +101 -99
- package/dist/client/chunks/useDirtyStateTracking-ZSi3voVl.js.map +1 -0
- package/dist/client/chunks/{vendor-DzzxS7Ay.js → vendor-cTQhZ_G3.js} +549 -541
- package/dist/client/chunks/vendor-cTQhZ_G3.js.map +1 -0
- package/dist/client/components/AnalysisBuilder/AnalysisTypeSelector.d.ts +3 -1
- package/dist/client/components/AnalysisBuilder/RetentionConfigPanel.d.ts +36 -0
- package/dist/client/components/AnalysisBuilder/RetentionModeContent.d.ts +71 -0
- package/dist/client/components/AnalysisBuilder/types.d.ts +99 -0
- package/dist/client/components/DebugModal.d.ts +2 -1
- package/dist/client/components/charts/RetentionCombinedChart.config.d.ts +2 -0
- package/dist/client/components/charts/RetentionCombinedChart.d.ts +14 -0
- package/dist/client/components/charts/RetentionHeatmap.config.d.ts +2 -0
- package/dist/client/components/charts/RetentionHeatmap.d.ts +7 -0
- package/dist/client/components.js +2 -2
- package/dist/client/hooks/queries/index.d.ts +2 -1
- package/dist/client/hooks/queries/useDryRunQuery.d.ts +26 -0
- package/dist/client/hooks/queries/useExplainQuery.d.ts +3 -1
- package/dist/client/hooks/queries/useFlowQuery.d.ts +5 -0
- package/dist/client/hooks/queries/useRetentionQuery.d.ts +67 -0
- package/dist/client/hooks/useAnalysisBuilderHook.d.ts +61 -0
- package/dist/client/hooks/useAnalysisQueryExecution.d.ts +42 -1
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons/customIcons.d.ts +7 -0
- package/dist/client/icons/types.d.ts +1 -0
- package/dist/client/icons.js +1 -1
- package/dist/client/index.js +11 -11
- package/dist/client/providers.js +1 -1
- package/dist/client/stores/analysisBuilderStore.d.ts +86 -1
- package/dist/client/stores/dashboardStore.d.ts +2 -1
- package/dist/client/stores/slices/index.d.ts +2 -0
- package/dist/client/stores/slices/retentionSlice.d.ts +66 -0
- package/dist/client/styles.css +1 -1
- package/dist/client/types/analysisConfig.d.ts +29 -4
- package/dist/client/types/funnel.d.ts +5 -0
- package/dist/client/types/retention.d.ts +301 -0
- package/dist/client/types.d.ts +6 -3
- package/dist/client-bundle-stats.html +1 -1
- package/dist/server/index.cjs +101 -79
- package/dist/server/index.d.ts +427 -0
- package/dist/server/index.js +9140 -4934
- package/package.json +5 -2
- package/dist/adapters/compiler-CO13DaEb.cjs +0 -192
- package/dist/client/chunks/analysis-builder-Dc9NrG_N.js +0 -6013
- package/dist/client/chunks/analysis-builder-Dc9NrG_N.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-B3-UWqQ2.js +0 -2540
- package/dist/client/chunks/analysis-builder-shared-B3-UWqQ2.js.map +0 -1
- package/dist/client/chunks/chart-kpi-delta-Bs5R5xr4.js +0 -435
- package/dist/client/chunks/chart-kpi-delta-Bs5R5xr4.js.map +0 -1
- package/dist/client/chunks/chart-kpi-number-Cf4Pgkm9.js +0 -392
- package/dist/client/chunks/chart-kpi-number-Cf4Pgkm9.js.map +0 -1
- package/dist/client/chunks/chartConfigRegistry-CiOq-PqX.js +0 -44
- package/dist/client/chunks/charts-loader-BtsnUO4Q.js.map +0 -1
- package/dist/client/chunks/charts-xNubY0vm.js +0 -226
- package/dist/client/chunks/charts-xNubY0vm.js.map +0 -1
- package/dist/client/chunks/components-BDrlf9Er.js.map +0 -1
- package/dist/client/chunks/hooks-B8Zw5PfL.js +0 -123
- package/dist/client/chunks/useDirtyStateTracking-C_mitVwh.js.map +0 -1
- package/dist/client/chunks/vendor-DzzxS7Ay.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { jsx as n, jsxs as h } from "react/jsx-runtime";
|
|
|
2
2
|
import V, { useState as O } from "react";
|
|
3
3
|
import { Treemap as R } from "recharts";
|
|
4
4
|
import { scaleQuantize as D, scaleOrdinal as E } from "d3";
|
|
5
|
-
import { u as I, g as H,
|
|
5
|
+
import { u as I, g as H, h as A, d as b, c as y, f as g, a as _, b as U } from "./charts-core-CjQZBxmv.js";
|
|
6
6
|
const J = V.memo(function({
|
|
7
7
|
data: o,
|
|
8
8
|
chartConfig: f,
|
|
@@ -23,34 +23,34 @@ const J = V.memo(function({
|
|
|
23
23
|
/* @__PURE__ */ n("div", { className: "text-sm font-semibold mb-1", children: "No data available" }),
|
|
24
24
|
/* @__PURE__ */ n("div", { className: "text-xs text-dc-text-secondary", children: "No data points to display in treemap chart" })
|
|
25
25
|
] }) });
|
|
26
|
-
let u, v = !1,
|
|
26
|
+
let u, v = !1, a;
|
|
27
27
|
if (f?.xAxis && f?.yAxis) {
|
|
28
28
|
const t = Array.isArray(f.xAxis) ? f.xAxis[0] : f.xAxis, e = Array.isArray(f.yAxis) ? f.yAxis[0] : f.yAxis;
|
|
29
|
-
|
|
29
|
+
a = Array.isArray(f.series) ? f.series[0] : f.series;
|
|
30
30
|
const d = H(L, t);
|
|
31
|
-
if (
|
|
31
|
+
if (a) {
|
|
32
32
|
const r = o.map((s) => {
|
|
33
|
-
const
|
|
34
|
-
return typeof
|
|
33
|
+
const i = s[a];
|
|
34
|
+
return typeof i == "string" ? parseFloat(i) : i;
|
|
35
35
|
}).filter((s) => !isNaN(s));
|
|
36
36
|
if (v = r.length === o.length && r.every((s) => typeof s == "number"), v) {
|
|
37
|
-
const s = Math.min(...r),
|
|
37
|
+
const s = Math.min(...r), i = Math.max(...r), l = D().domain([s, i]).range(A);
|
|
38
38
|
u = o.map((m) => {
|
|
39
|
-
const
|
|
39
|
+
const k = typeof m[a] == "string" ? parseFloat(m[a]) : m[a], C = l(k);
|
|
40
40
|
return {
|
|
41
41
|
name: b(m[t], d) || String(m[t]) || "Unknown",
|
|
42
42
|
size: typeof m[e] == "string" ? parseFloat(m[e]) : m[e] || 0,
|
|
43
|
-
fill:
|
|
44
|
-
series: String(m[
|
|
43
|
+
fill: C,
|
|
44
|
+
series: String(m[a])
|
|
45
45
|
};
|
|
46
46
|
});
|
|
47
47
|
} else {
|
|
48
|
-
const s = [...new Set(o.map((l) => String(l[
|
|
48
|
+
const s = [...new Set(o.map((l) => String(l[a])))], i = E().domain(s).range(p?.colors || y);
|
|
49
49
|
u = o.map((l) => ({
|
|
50
50
|
name: b(l[t], d) || String(l[t]) || "Unknown",
|
|
51
51
|
size: typeof l[e] == "string" ? parseFloat(l[e]) : l[e] || 0,
|
|
52
|
-
fill:
|
|
53
|
-
series: String(l[
|
|
52
|
+
fill: i(String(l[a])),
|
|
53
|
+
series: String(l[a])
|
|
54
54
|
}));
|
|
55
55
|
}
|
|
56
56
|
} else
|
|
@@ -70,12 +70,12 @@ const J = V.memo(function({
|
|
|
70
70
|
/* @__PURE__ */ n("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
|
|
71
71
|
/* @__PURE__ */ n("div", { className: "text-xs", children: "No numeric field found for treemap chart size" })
|
|
72
72
|
] }) });
|
|
73
|
-
u = o.map((s,
|
|
73
|
+
u = o.map((s, i) => {
|
|
74
74
|
let l = s[d];
|
|
75
75
|
return typeof l == "boolean" ? l = l ? "Active" : "Inactive" : l === "true" || l === "false" ? l = l === "true" ? "Active" : "Inactive" : l = String(l), {
|
|
76
76
|
name: l,
|
|
77
77
|
size: typeof s[r] == "string" ? parseFloat(s[r]) : s[r] || 0,
|
|
78
|
-
fill: p?.colors && p.colors[
|
|
78
|
+
fill: p?.colors && p.colors[i % p.colors.length] || y[i % y.length]
|
|
79
79
|
};
|
|
80
80
|
});
|
|
81
81
|
}
|
|
@@ -85,7 +85,7 @@ const J = V.memo(function({
|
|
|
85
85
|
/* @__PURE__ */ n("div", { className: "text-xs text-dc-text-secondary", children: "No valid data points for treemap chart after transformation" })
|
|
86
86
|
] }) });
|
|
87
87
|
const T = (t) => {
|
|
88
|
-
const { x: e, y: d, width: r, height: s, index:
|
|
88
|
+
const { x: e, y: d, width: r, height: s, index: i, name: l, size: m } = t;
|
|
89
89
|
return r < 20 || s < 20 ? null : /* @__PURE__ */ h("g", { children: [
|
|
90
90
|
/* @__PURE__ */ n(
|
|
91
91
|
"rect",
|
|
@@ -95,13 +95,13 @@ const J = V.memo(function({
|
|
|
95
95
|
width: r,
|
|
96
96
|
height: s,
|
|
97
97
|
style: {
|
|
98
|
-
fill: u[
|
|
99
|
-
fillOpacity: S !== null ? S ===
|
|
98
|
+
fill: u[i]?.fill || p?.colors && p.colors[i % p.colors.length] || y[i % y.length],
|
|
99
|
+
fillOpacity: S !== null ? S === i ? 1 : 0.6 : 0.8,
|
|
100
100
|
stroke: "#fff",
|
|
101
101
|
strokeWidth: 2,
|
|
102
102
|
cursor: "pointer"
|
|
103
103
|
},
|
|
104
|
-
onMouseEnter: () => M(
|
|
104
|
+
onMouseEnter: () => M(i),
|
|
105
105
|
onMouseLeave: () => M(null)
|
|
106
106
|
}
|
|
107
107
|
),
|
|
@@ -165,19 +165,19 @@ const J = V.memo(function({
|
|
|
165
165
|
] });
|
|
166
166
|
}, z = u.some((t) => "series" in t) ? [...new Set(u.map((t) => t.series).filter(Boolean))] : [];
|
|
167
167
|
let N = [];
|
|
168
|
-
if (c.showLegend &&
|
|
168
|
+
if (c.showLegend && a)
|
|
169
169
|
if (v) {
|
|
170
170
|
const t = Math.min(...o.map((d) => {
|
|
171
|
-
const r = d[
|
|
171
|
+
const r = d[a];
|
|
172
172
|
return typeof r == "string" ? parseFloat(r) : r;
|
|
173
173
|
})), e = Math.max(...o.map((d) => {
|
|
174
|
-
const r = d[
|
|
174
|
+
const r = d[a];
|
|
175
175
|
return typeof r == "string" ? parseFloat(r) : r;
|
|
176
176
|
}));
|
|
177
177
|
N = A.map((d, r) => {
|
|
178
|
-
const s = r / (A.length - 1),
|
|
178
|
+
const s = r / (A.length - 1), i = t + (e - t) * s;
|
|
179
179
|
return {
|
|
180
|
-
value: c.leftYAxisFormat ? g(
|
|
180
|
+
value: c.leftYAxisFormat ? g(i, c.leftYAxisFormat) : i.toFixed(2),
|
|
181
181
|
type: "rect",
|
|
182
182
|
color: d
|
|
183
183
|
};
|
|
@@ -208,13 +208,13 @@ const J = V.memo(function({
|
|
|
208
208
|
w && /* @__PURE__ */ n("div", { className: "flex justify-center items-center mt-4 pb-2", children: v ? (
|
|
209
209
|
// Gradient legend for numeric series
|
|
210
210
|
/* @__PURE__ */ h("div", { className: "flex flex-col items-center", children: [
|
|
211
|
-
/* @__PURE__ */ n("div", { className: "text-xs font-semibold text-dc-text-primary mb-2", children:
|
|
211
|
+
/* @__PURE__ */ n("div", { className: "text-xs font-semibold text-dc-text-primary mb-2", children: a ? j(a) : "" }),
|
|
212
212
|
/* @__PURE__ */ h("div", { className: "flex items-center gap-2", children: [
|
|
213
213
|
/* @__PURE__ */ n("span", { className: "text-xs text-dc-text-muted", children: c.leftYAxisFormat ? g(Math.min(...o.map((t) => {
|
|
214
|
-
const e = t[
|
|
214
|
+
const e = t[a];
|
|
215
215
|
return typeof e == "string" ? parseFloat(e) : e;
|
|
216
216
|
})), c.leftYAxisFormat) : Math.min(...o.map((t) => {
|
|
217
|
-
const e = t[
|
|
217
|
+
const e = t[a];
|
|
218
218
|
return typeof e == "string" ? parseFloat(e) : e;
|
|
219
219
|
})).toFixed(2) }),
|
|
220
220
|
/* @__PURE__ */ n(
|
|
@@ -228,10 +228,10 @@ const J = V.memo(function({
|
|
|
228
228
|
}
|
|
229
229
|
),
|
|
230
230
|
/* @__PURE__ */ n("span", { className: "text-xs text-dc-text-muted", children: c.leftYAxisFormat ? g(Math.max(...o.map((t) => {
|
|
231
|
-
const e = t[
|
|
231
|
+
const e = t[a];
|
|
232
232
|
return typeof e == "string" ? parseFloat(e) : e;
|
|
233
233
|
})), c.leftYAxisFormat) : Math.max(...o.map((t) => {
|
|
234
|
-
const e = t[
|
|
234
|
+
const e = t[a];
|
|
235
235
|
return typeof e == "string" ? parseFloat(e) : e;
|
|
236
236
|
})).toFixed(2) })
|
|
237
237
|
] })
|
|
@@ -261,4 +261,4 @@ const J = V.memo(function({
|
|
|
261
261
|
export {
|
|
262
262
|
J as default
|
|
263
263
|
};
|
|
264
|
-
//# sourceMappingURL=chart-tree-map-
|
|
264
|
+
//# sourceMappingURL=chart-tree-map-DQMsn47a.js.map
|
package/dist/client/chunks/{chart-tree-map-DEfJtJVC.js.map → chart-tree-map-DQMsn47a.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-tree-map-DEfJtJVC.js","sources":["../../../src/client/components/charts/TreeMapChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { Treemap } from 'recharts'\nimport { scaleQuantize, scaleOrdinal } from 'd3'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, CHART_COLORS_GRADIENT } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport type { ChartProps } from '../../types'\n\nconst TreeMapChart = React.memo(function TreeMapChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n // Use specialized hook to avoid re-renders from unrelated context changes\n const getFieldLabel = useCubeFieldLabel()\n \n try {\n const safeDisplayConfig = {\n showTooltip: displayConfig?.showTooltip ?? true,\n showLegend: displayConfig?.showLegend ?? 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 treemap chart</div>\n </div>\n </div>\n )\n }\n\n let treemapData: Array<{name: string, size: number, fill?: string, series?: string}>\n let isNumericSeries = false\n let seriesField: string | undefined\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 // Size field\n seriesField = Array.isArray(chartConfig.series) ? chartConfig.series[0] : chartConfig.series // Color grouping field\n\n const granularity = getFieldGranularity(queryObject, xAxisField)\n \n if (seriesField) {\n // Check if series field is numeric for color scaling\n const seriesValues = data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }).filter(val => !isNaN(val))\n \n isNumericSeries = seriesValues.length === data.length && seriesValues.every(val => typeof val === 'number')\n \n \n if (isNumericSeries) {\n // Use D3 quantize scale for better color distribution with small ranges\n const minValue = Math.min(...seriesValues)\n const maxValue = Math.max(...seriesValues)\n \n // Create D3 quantize color scale - maps continuous data to discrete color bands\n const colorScale = scaleQuantize<string>()\n .domain([minValue, maxValue])\n .range(CHART_COLORS_GRADIENT)\n \n treemapData = data.map((item) => {\n const seriesValue = typeof item[seriesField!] === 'string' \n ? parseFloat(item[seriesField!]) \n : item[seriesField!]\n \n const color = colorScale(seriesValue)\n \n return {\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: color,\n series: String(item[seriesField!])\n }\n })\n } else {\n // Use D3 ordinal color scale for categorical series\n const uniqueSeriesValues = [...new Set(data.map(item => String(item[seriesField!])))]\n const colorScale = scaleOrdinal<string>()\n .domain(uniqueSeriesValues)\n .range(colorPalette?.colors || CHART_COLORS)\n \n treemapData = data.map((item) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: colorScale(String(item[seriesField!])),\n series: String(item[seriesField!])\n }))\n }\n } else {\n // No series grouping - use index-based colors\n treemapData = data.map((item, index) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: 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 }\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 size - look for 'size' field first, then any numeric\n const sizeField = keys.find(key => key.toLowerCase().includes('size')) ||\n keys.find(key => \n typeof firstRow[key] === 'number' && key !== nameField\n ) || keys[1]\n\n if (!sizeField) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-warning\" 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 treemap chart size</div>\n </div>\n </div>\n )\n }\n\n // Transform data for treemap chart\n treemapData = 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 size: typeof item[sizeField] === 'string' \n ? parseFloat(item[sizeField]) \n : (item[sizeField] || 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 and ensure positive sizes\n treemapData = treemapData.filter(item => item.size != null && item.size > 0)\n \n if (treemapData.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 treemap chart after transformation</div>\n </div>\n </div>\n )\n }\n\n // Custom content renderer for treemap cells with HTML overlays\n const CustomizedContent = (props: any) => {\n const { x, y, width, height, index, name, size } = props\n \n if (width < 20 || height < 20) return null // Don't render content for very small cells\n \n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n style={{\n fill: treemapData[index]?.fill || ((colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]),\n fillOpacity: hoveredIndex !== null ? (hoveredIndex === index ? 1 : 0.6) : 0.8,\n stroke: '#fff',\n strokeWidth: 2,\n cursor: 'pointer'\n }}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n />\n <foreignObject \n x={x} \n y={y} \n width={width} \n height={height}\n style={{ pointerEvents: 'none', overflow: 'visible' }}\n >\n <div \n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px',\n boxSizing: 'border-box',\n color: '#ffffff',\n textShadow: '0 1px 2px rgba(0,0,0,0.8)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n overflow: 'hidden'\n }}\n >\n {width > 40 && height > 30 && (\n <div \n style={{\n fontSize: `${Math.max(10, Math.min(width / 8, height / 8, 16))}px`,\n fontWeight: '600',\n textAlign: 'center',\n lineHeight: '1.2',\n marginBottom: width > 60 && height > 45 ? '4px' : '0',\n wordBreak: 'break-word',\n hyphens: 'auto'\n }}\n >\n {name}\n </div>\n )}\n {width > 60 && height > 45 && (\n <div\n style={{\n fontSize: `${Math.max(8, Math.min(width / 10, height / 10, 14))}px`,\n textAlign: 'center',\n opacity: 0.9\n }}\n >\n {safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(size, safeDisplayConfig.leftYAxisFormat)\n : (typeof size === 'number' ? size.toLocaleString() : size)\n }\n </div>\n )}\n </div>\n </foreignObject>\n </g>\n )\n }\n\n // Check if we have series data for legend\n const hasSeriesData = treemapData.some(item => 'series' in item)\n const uniqueSeries = hasSeriesData \n ? [...new Set(treemapData.map(item => item.series).filter(Boolean))]\n : []\n \n // For numeric series, create a legend showing the color scale\n let legendPayload: any[] = []\n if (safeDisplayConfig.showLegend && seriesField) {\n \n if (isNumericSeries) {\n // Create color scale legend for numeric values\n const minValue = Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }))\n const maxValue = Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }))\n \n \n // Create legend entries showing color scale\n legendPayload = CHART_COLORS_GRADIENT.map((color, index) => {\n const ratio = index / (CHART_COLORS_GRADIENT.length - 1)\n const value = minValue + (maxValue - minValue) * ratio\n return {\n value: safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(value, safeDisplayConfig.leftYAxisFormat)\n : value.toFixed(2),\n type: 'rect',\n color: color\n }\n })\n } else if (uniqueSeries.length > 1) {\n // Use categorical legend for non-numeric series\n legendPayload = uniqueSeries.map((series, index) => ({\n value: series,\n type: 'rect',\n color: CHART_COLORS[index % CHART_COLORS.length]\n }))\n }\n \n }\n\n // Calculate height adjustment for legend\n const hasLegend = safeDisplayConfig.showLegend && legendPayload.length > 0\n const adjustedHeight = hasLegend \n ? (typeof height === 'string' && height.includes('%') \n ? height \n : typeof height === 'number' \n ? height + 60 \n : `calc(${height} + 60px)`)\n : height\n\n return (\n <div className=\"w-full\" style={{ height: adjustedHeight }}>\n <ChartContainer height={hasLegend ? `calc(100% - 50px)` : \"100%\"}>\n <Treemap\n data={treemapData}\n dataKey=\"size\"\n aspectRatio={4/3}\n stroke=\"#fff\"\n content={<CustomizedContent />}\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 </Treemap>\n </ChartContainer>\n \n {/* Custom Legend outside ChartContainer */}\n {hasLegend && (\n <div className=\"flex justify-center items-center mt-4 pb-2\">\n {isNumericSeries ? (\n // Gradient legend for numeric series\n <div className=\"flex flex-col items-center\">\n <div className=\"text-xs font-semibold text-dc-text-primary mb-2\">\n {seriesField ? getFieldLabel(seriesField) : ''}\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-dc-text-muted\">\n {safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })), safeDisplayConfig.leftYAxisFormat)\n : Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })).toFixed(2)\n }\n </span>\n <div\n className=\"h-4 rounded-sm\"\n style={{\n width: '200px',\n background: `linear-gradient(to right, ${CHART_COLORS_GRADIENT.join(', ')})`\n }}\n />\n <span className=\"text-xs text-dc-text-muted\">\n {safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })), safeDisplayConfig.leftYAxisFormat)\n : Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })).toFixed(2)\n }\n </span>\n </div>\n </div>\n ) : (\n // Discrete legend for categorical series\n <div className=\"flex flex-wrap justify-center gap-4\">\n {legendPayload.map((item, index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-xs\"\n style={{ backgroundColor: item.color }}\n />\n <span className=\"text-xs text-dc-text-muted\">\n {item.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )\n } catch (error) {\n // 'TreeMapChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-dc-error p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">TreeMap 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})\n\nexport default TreeMapChart"],"names":["TreeMapChart","React","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredIndex","setHoveredIndex","useState","getFieldLabel","useCubeFieldLabel","safeDisplayConfig","jsx","jsxs","treemapData","isNumericSeries","seriesField","xAxisField","yAxisField","granularity","getFieldGranularity","seriesValues","item","value","val","minValue","maxValue","colorScale","scaleQuantize","CHART_COLORS_GRADIENT","seriesValue","color","formatTimeValue","uniqueSeriesValues","scaleOrdinal","CHART_COLORS","index","firstRow","keys","nameField","key","sizeField","name","CustomizedContent","props","x","y","width","size","formatAxisValue","uniqueSeries","legendPayload","ratio","series","hasLegend","adjustedHeight","ChartContainer","Treemap","ChartTooltip","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chart-tree-map-DQMsn47a.js","sources":["../../../src/client/components/charts/TreeMapChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { Treemap } from 'recharts'\nimport { scaleQuantize, scaleOrdinal } from 'd3'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, CHART_COLORS_GRADIENT } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport type { ChartProps } from '../../types'\n\nconst TreeMapChart = React.memo(function TreeMapChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n // Use specialized hook to avoid re-renders from unrelated context changes\n const getFieldLabel = useCubeFieldLabel()\n \n try {\n const safeDisplayConfig = {\n showTooltip: displayConfig?.showTooltip ?? true,\n showLegend: displayConfig?.showLegend ?? 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 treemap chart</div>\n </div>\n </div>\n )\n }\n\n let treemapData: Array<{name: string, size: number, fill?: string, series?: string}>\n let isNumericSeries = false\n let seriesField: string | undefined\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 // Size field\n seriesField = Array.isArray(chartConfig.series) ? chartConfig.series[0] : chartConfig.series // Color grouping field\n\n const granularity = getFieldGranularity(queryObject, xAxisField)\n \n if (seriesField) {\n // Check if series field is numeric for color scaling\n const seriesValues = data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }).filter(val => !isNaN(val))\n \n isNumericSeries = seriesValues.length === data.length && seriesValues.every(val => typeof val === 'number')\n \n \n if (isNumericSeries) {\n // Use D3 quantize scale for better color distribution with small ranges\n const minValue = Math.min(...seriesValues)\n const maxValue = Math.max(...seriesValues)\n \n // Create D3 quantize color scale - maps continuous data to discrete color bands\n const colorScale = scaleQuantize<string>()\n .domain([minValue, maxValue])\n .range(CHART_COLORS_GRADIENT)\n \n treemapData = data.map((item) => {\n const seriesValue = typeof item[seriesField!] === 'string' \n ? parseFloat(item[seriesField!]) \n : item[seriesField!]\n \n const color = colorScale(seriesValue)\n \n return {\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: color,\n series: String(item[seriesField!])\n }\n })\n } else {\n // Use D3 ordinal color scale for categorical series\n const uniqueSeriesValues = [...new Set(data.map(item => String(item[seriesField!])))]\n const colorScale = scaleOrdinal<string>()\n .domain(uniqueSeriesValues)\n .range(colorPalette?.colors || CHART_COLORS)\n \n treemapData = data.map((item) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: colorScale(String(item[seriesField!])),\n series: String(item[seriesField!])\n }))\n }\n } else {\n // No series grouping - use index-based colors\n treemapData = data.map((item, index) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: 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 }\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 size - look for 'size' field first, then any numeric\n const sizeField = keys.find(key => key.toLowerCase().includes('size')) ||\n keys.find(key => \n typeof firstRow[key] === 'number' && key !== nameField\n ) || keys[1]\n\n if (!sizeField) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-warning\" 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 treemap chart size</div>\n </div>\n </div>\n )\n }\n\n // Transform data for treemap chart\n treemapData = 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 size: typeof item[sizeField] === 'string' \n ? parseFloat(item[sizeField]) \n : (item[sizeField] || 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 and ensure positive sizes\n treemapData = treemapData.filter(item => item.size != null && item.size > 0)\n \n if (treemapData.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 treemap chart after transformation</div>\n </div>\n </div>\n )\n }\n\n // Custom content renderer for treemap cells with HTML overlays\n const CustomizedContent = (props: any) => {\n const { x, y, width, height, index, name, size } = props\n \n if (width < 20 || height < 20) return null // Don't render content for very small cells\n \n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n style={{\n fill: treemapData[index]?.fill || ((colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]),\n fillOpacity: hoveredIndex !== null ? (hoveredIndex === index ? 1 : 0.6) : 0.8,\n stroke: '#fff',\n strokeWidth: 2,\n cursor: 'pointer'\n }}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n />\n <foreignObject \n x={x} \n y={y} \n width={width} \n height={height}\n style={{ pointerEvents: 'none', overflow: 'visible' }}\n >\n <div \n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px',\n boxSizing: 'border-box',\n color: '#ffffff',\n textShadow: '0 1px 2px rgba(0,0,0,0.8)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n overflow: 'hidden'\n }}\n >\n {width > 40 && height > 30 && (\n <div \n style={{\n fontSize: `${Math.max(10, Math.min(width / 8, height / 8, 16))}px`,\n fontWeight: '600',\n textAlign: 'center',\n lineHeight: '1.2',\n marginBottom: width > 60 && height > 45 ? '4px' : '0',\n wordBreak: 'break-word',\n hyphens: 'auto'\n }}\n >\n {name}\n </div>\n )}\n {width > 60 && height > 45 && (\n <div\n style={{\n fontSize: `${Math.max(8, Math.min(width / 10, height / 10, 14))}px`,\n textAlign: 'center',\n opacity: 0.9\n }}\n >\n {safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(size, safeDisplayConfig.leftYAxisFormat)\n : (typeof size === 'number' ? size.toLocaleString() : size)\n }\n </div>\n )}\n </div>\n </foreignObject>\n </g>\n )\n }\n\n // Check if we have series data for legend\n const hasSeriesData = treemapData.some(item => 'series' in item)\n const uniqueSeries = hasSeriesData \n ? [...new Set(treemapData.map(item => item.series).filter(Boolean))]\n : []\n \n // For numeric series, create a legend showing the color scale\n let legendPayload: any[] = []\n if (safeDisplayConfig.showLegend && seriesField) {\n \n if (isNumericSeries) {\n // Create color scale legend for numeric values\n const minValue = Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }))\n const maxValue = Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }))\n \n \n // Create legend entries showing color scale\n legendPayload = CHART_COLORS_GRADIENT.map((color, index) => {\n const ratio = index / (CHART_COLORS_GRADIENT.length - 1)\n const value = minValue + (maxValue - minValue) * ratio\n return {\n value: safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(value, safeDisplayConfig.leftYAxisFormat)\n : value.toFixed(2),\n type: 'rect',\n color: color\n }\n })\n } else if (uniqueSeries.length > 1) {\n // Use categorical legend for non-numeric series\n legendPayload = uniqueSeries.map((series, index) => ({\n value: series,\n type: 'rect',\n color: CHART_COLORS[index % CHART_COLORS.length]\n }))\n }\n \n }\n\n // Calculate height adjustment for legend\n const hasLegend = safeDisplayConfig.showLegend && legendPayload.length > 0\n const adjustedHeight = hasLegend \n ? (typeof height === 'string' && height.includes('%') \n ? height \n : typeof height === 'number' \n ? height + 60 \n : `calc(${height} + 60px)`)\n : height\n\n return (\n <div className=\"w-full\" style={{ height: adjustedHeight }}>\n <ChartContainer height={hasLegend ? `calc(100% - 50px)` : \"100%\"}>\n <Treemap\n data={treemapData}\n dataKey=\"size\"\n aspectRatio={4/3}\n stroke=\"#fff\"\n content={<CustomizedContent />}\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 </Treemap>\n </ChartContainer>\n \n {/* Custom Legend outside ChartContainer */}\n {hasLegend && (\n <div className=\"flex justify-center items-center mt-4 pb-2\">\n {isNumericSeries ? (\n // Gradient legend for numeric series\n <div className=\"flex flex-col items-center\">\n <div className=\"text-xs font-semibold text-dc-text-primary mb-2\">\n {seriesField ? getFieldLabel(seriesField) : ''}\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-dc-text-muted\">\n {safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })), safeDisplayConfig.leftYAxisFormat)\n : Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })).toFixed(2)\n }\n </span>\n <div\n className=\"h-4 rounded-sm\"\n style={{\n width: '200px',\n background: `linear-gradient(to right, ${CHART_COLORS_GRADIENT.join(', ')})`\n }}\n />\n <span className=\"text-xs text-dc-text-muted\">\n {safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })), safeDisplayConfig.leftYAxisFormat)\n : Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })).toFixed(2)\n }\n </span>\n </div>\n </div>\n ) : (\n // Discrete legend for categorical series\n <div className=\"flex flex-wrap justify-center gap-4\">\n {legendPayload.map((item, index) => (\n <div key={index} className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-xs\"\n style={{ backgroundColor: item.color }}\n />\n <span className=\"text-xs text-dc-text-muted\">\n {item.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )\n } catch (error) {\n // 'TreeMapChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-dc-error p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">TreeMap 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})\n\nexport default TreeMapChart"],"names":["TreeMapChart","React","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredIndex","setHoveredIndex","useState","getFieldLabel","useCubeFieldLabel","safeDisplayConfig","jsx","jsxs","treemapData","isNumericSeries","seriesField","xAxisField","yAxisField","granularity","getFieldGranularity","seriesValues","item","value","val","minValue","maxValue","colorScale","scaleQuantize","CHART_COLORS_GRADIENT","seriesValue","color","formatTimeValue","uniqueSeriesValues","scaleOrdinal","CHART_COLORS","index","firstRow","keys","nameField","key","sizeField","name","CustomizedContent","props","x","y","width","size","formatAxisValue","uniqueSeries","legendPayload","ratio","series","hasLegend","adjustedHeight","ChartContainer","Treemap","ChartTooltip","error"],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { barChartConfig as r } from "./chart-config-bar-BJKGnfLt.js";
|
|
2
|
+
import { lineChartConfig as o } from "./chart-config-line-DR0ThxZy.js";
|
|
3
|
+
import { areaChartConfig as i } from "./chart-config-area-CyyJOO2T.js";
|
|
4
|
+
import { pieChartConfig as t } from "./chart-config-pie-BM5lgH-w.js";
|
|
5
|
+
import { scatterChartConfig as a } from "./chart-config-scatter-CWvN2E-X.js";
|
|
6
|
+
import { bubbleChartConfig as m } from "./chart-config-bubble-CuSsCHZ4.js";
|
|
7
|
+
import { radarChartConfig as f } from "./chart-config-radar-BBAVIF0S.js";
|
|
8
|
+
import { radialBarChartConfig as C } from "./chart-config-radial-bar-CTwjDRnB.js";
|
|
9
|
+
import { treemapChartConfig as n } from "./chart-config-tree-map-CLmRvvMR.js";
|
|
10
|
+
import { dataTableConfig as p } from "./chart-config-data-table-BhgqwoqT.js";
|
|
11
|
+
import { activityGridChartConfig as e } from "./chart-config-activity-grid-BBSNCbkb.js";
|
|
12
|
+
import { kpiNumberConfig as g } from "./chart-config-kpi-number-nVAwDXzq.js";
|
|
13
|
+
import { kpiDeltaConfig as h } from "./chart-config-kpi-delta-yTA5ug_l.js";
|
|
14
|
+
import { kpiTextConfig as b } from "./chart-config-kpi-text-DZjqsx-b.js";
|
|
15
|
+
import { markdownConfig as l } from "./chart-config-markdown-DZxdGNVQ.js";
|
|
16
|
+
import { funnelChartConfig as k } from "./chart-config-funnel-BlSQYng0.js";
|
|
17
|
+
import { sankeyChartConfig as s } from "./chart-config-sankey-CNAgsMQ4.js";
|
|
18
|
+
import { sunburstChartConfig as u } from "./chart-config-sunburst-W_SKwaj0.js";
|
|
19
|
+
import { heatmapChartConfig as d } from "./chart-config-heat-map-DHQGFZhX.js";
|
|
20
|
+
const J = {
|
|
21
|
+
bar: r,
|
|
22
|
+
line: o,
|
|
23
|
+
area: i,
|
|
24
|
+
pie: t,
|
|
25
|
+
scatter: a,
|
|
26
|
+
bubble: m,
|
|
27
|
+
radar: f,
|
|
28
|
+
radialBar: C,
|
|
29
|
+
treemap: n,
|
|
30
|
+
table: p,
|
|
31
|
+
activityGrid: e,
|
|
32
|
+
kpiNumber: g,
|
|
33
|
+
kpiDelta: h,
|
|
34
|
+
kpiText: b,
|
|
35
|
+
markdown: l,
|
|
36
|
+
funnel: k,
|
|
37
|
+
sankey: s,
|
|
38
|
+
sunburst: u,
|
|
39
|
+
heatmap: d
|
|
40
|
+
};
|
|
41
|
+
export {
|
|
42
|
+
J as chartConfigRegistry
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=chartConfigRegistry-BumUIPw4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chartConfigRegistry-
|
|
1
|
+
{"version":3,"file":"chartConfigRegistry-BumUIPw4.js","sources":["../../../src/client/charts/chartConfigRegistry.ts"],"sourcesContent":["import { barChartConfig } from '../components/charts/BarChart.config'\nimport { lineChartConfig } from '../components/charts/LineChart.config'\nimport { areaChartConfig } from '../components/charts/AreaChart.config'\nimport { pieChartConfig } from '../components/charts/PieChart.config'\nimport { scatterChartConfig } from '../components/charts/ScatterChart.config'\nimport { bubbleChartConfig } from '../components/charts/BubbleChart.config'\nimport { radarChartConfig } from '../components/charts/RadarChart.config'\nimport { radialBarChartConfig } from '../components/charts/RadialBarChart.config'\nimport { treemapChartConfig } from '../components/charts/TreeMapChart.config'\nimport { dataTableConfig } from '../components/charts/DataTable.config'\nimport { activityGridChartConfig } from '../components/charts/ActivityGridChart.config'\nimport { kpiNumberConfig } from '../components/charts/KpiNumber.config'\nimport { kpiDeltaConfig } from '../components/charts/KpiDelta.config'\nimport { kpiTextConfig } from '../components/charts/KpiText.config'\nimport { markdownConfig } from '../components/charts/MarkdownChart.config'\nimport { funnelChartConfig } from '../components/charts/FunnelChart.config'\nimport { sankeyChartConfig } from '../components/charts/SankeyChart.config'\nimport { sunburstChartConfig } from '../components/charts/SunburstChart.config'\nimport { heatmapChartConfig } from '../components/charts/HeatMapChart.config'\nimport type { ChartConfigRegistry } from './chartConfigs'\n\n/**\n * Registry of all chart type configurations\n */\nexport const chartConfigRegistry: ChartConfigRegistry = {\n bar: barChartConfig,\n line: lineChartConfig,\n area: areaChartConfig,\n pie: pieChartConfig,\n scatter: scatterChartConfig,\n bubble: bubbleChartConfig,\n radar: radarChartConfig,\n radialBar: radialBarChartConfig,\n treemap: treemapChartConfig,\n table: dataTableConfig,\n activityGrid: activityGridChartConfig,\n kpiNumber: kpiNumberConfig,\n kpiDelta: kpiDeltaConfig,\n kpiText: kpiTextConfig,\n markdown: markdownConfig,\n funnel: funnelChartConfig,\n sankey: sankeyChartConfig,\n sunburst: sunburstChartConfig,\n heatmap: heatmapChartConfig,\n}"],"names":["chartConfigRegistry","barChartConfig","lineChartConfig","areaChartConfig","pieChartConfig","scatterChartConfig","bubbleChartConfig","radarChartConfig","radialBarChartConfig","treemapChartConfig","dataTableConfig","activityGridChartConfig","kpiNumberConfig","kpiDeltaConfig","kpiTextConfig","markdownConfig","funnelChartConfig","sankeyChartConfig","sunburstChartConfig","heatmapChartConfig"],"mappings":";;;;;;;;;;;;;;;;;;;AAwBO,MAAMA,IAA2C;AAAA,EACtD,KAAKC;AAAA,EACL,MAAMC;AAAA,EACN,MAAMC;AAAA,EACN,KAAKC;AAAA,EACL,SAASC;AAAA,EACT,QAAQC;AAAA,EACR,OAAOC;AAAA,EACP,WAAWC;AAAA,EACX,SAASC;AAAA,EACT,OAAOC;AAAA,EACP,cAAcC;AAAA,EACd,WAAWC;AAAA,EACX,UAAUC;AAAA,EACV,SAASC;AAAA,EACT,UAAUC;AAAA,EACV,QAAQC;AAAA,EACR,QAAQC;AAAA,EACR,UAAUC;AAAA,EACV,SAASC;AACX;"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import "./charts-loader-ChTUa_-G.js";
|
|
2
|
+
import { useState as f, useEffect as c } from "react";
|
|
3
|
+
import "./charts-core-CjQZBxmv.js";
|
|
4
|
+
import "./chart-bar-7y0-F27Q.js";
|
|
5
|
+
import "./chart-line-FSEpBk6Y.js";
|
|
6
|
+
import "./chart-area-DLmXFWWy.js";
|
|
7
|
+
import "./chart-pie-BRQEH9e-.js";
|
|
8
|
+
import "./chart-scatter-D6XwOD2W.js";
|
|
9
|
+
import "./chart-radar-DgsFyiIP.js";
|
|
10
|
+
import "./chart-radial-bar-CUMoXyl9.js";
|
|
11
|
+
import "./chart-tree-map-DQMsn47a.js";
|
|
12
|
+
import "./chart-data-table-rUFLqysu.js";
|
|
13
|
+
const u = {
|
|
14
|
+
dropZones: [
|
|
15
|
+
{
|
|
16
|
+
key: "xAxis",
|
|
17
|
+
label: "X-Axis (Categories)",
|
|
18
|
+
description: "Dimensions and time dimensions for grouping",
|
|
19
|
+
mandatory: !1,
|
|
20
|
+
acceptTypes: ["dimension", "timeDimension"],
|
|
21
|
+
emptyText: "Drop dimensions & time dimensions here"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
key: "yAxis",
|
|
25
|
+
label: "Y-Axis (Values)",
|
|
26
|
+
description: "Measures for values or dimensions for series",
|
|
27
|
+
mandatory: !1,
|
|
28
|
+
acceptTypes: ["measure", "dimension"],
|
|
29
|
+
emptyText: "Drop measures or dimensions here"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
key: "series",
|
|
33
|
+
label: "Series (Split into Multiple Series)",
|
|
34
|
+
description: "Dimensions to create separate data series",
|
|
35
|
+
mandatory: !1,
|
|
36
|
+
acceptTypes: ["dimension"],
|
|
37
|
+
emptyText: "Drop dimensions here to split data into series"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
displayOptions: ["showLegend", "showGrid", "showTooltip"]
|
|
41
|
+
}, l = {
|
|
42
|
+
bar: () => import("./chart-config-bar-BJKGnfLt.js"),
|
|
43
|
+
line: () => import("./chart-config-line-DR0ThxZy.js"),
|
|
44
|
+
area: () => import("./chart-config-area-CyyJOO2T.js"),
|
|
45
|
+
pie: () => import("./chart-config-pie-BM5lgH-w.js"),
|
|
46
|
+
scatter: () => import("./chart-config-scatter-CWvN2E-X.js"),
|
|
47
|
+
radar: () => import("./chart-config-radar-BBAVIF0S.js"),
|
|
48
|
+
radialBar: () => import("./chart-config-radial-bar-CTwjDRnB.js"),
|
|
49
|
+
treemap: () => import("./chart-config-tree-map-CLmRvvMR.js"),
|
|
50
|
+
bubble: () => import("./chart-config-bubble-CuSsCHZ4.js"),
|
|
51
|
+
table: () => import("./chart-config-data-table-BhgqwoqT.js"),
|
|
52
|
+
activityGrid: () => import("./chart-config-activity-grid-BBSNCbkb.js"),
|
|
53
|
+
kpiNumber: () => import("./chart-config-kpi-number-nVAwDXzq.js"),
|
|
54
|
+
kpiDelta: () => import("./chart-config-kpi-delta-yTA5ug_l.js"),
|
|
55
|
+
kpiText: () => import("./chart-config-kpi-text-DZjqsx-b.js"),
|
|
56
|
+
markdown: () => import("./chart-config-markdown-DZxdGNVQ.js"),
|
|
57
|
+
funnel: () => import("./chart-config-funnel-BlSQYng0.js"),
|
|
58
|
+
sankey: () => import("./chart-config-sankey-CNAgsMQ4.js"),
|
|
59
|
+
sunburst: () => import("./chart-config-sunburst-W_SKwaj0.js"),
|
|
60
|
+
heatmap: () => import("./chart-config-heat-map-DHQGFZhX.js"),
|
|
61
|
+
retentionHeatmap: () => import("./RetentionHeatmap.config-CIvhc-GT.js"),
|
|
62
|
+
retentionCombined: () => import("./RetentionCombinedChart.config-C-ILIaEb.js")
|
|
63
|
+
}, d = {
|
|
64
|
+
bar: "barChartConfig",
|
|
65
|
+
line: "lineChartConfig",
|
|
66
|
+
area: "areaChartConfig",
|
|
67
|
+
pie: "pieChartConfig",
|
|
68
|
+
scatter: "scatterChartConfig",
|
|
69
|
+
radar: "radarChartConfig",
|
|
70
|
+
radialBar: "radialBarChartConfig",
|
|
71
|
+
treemap: "treemapChartConfig",
|
|
72
|
+
bubble: "bubbleChartConfig",
|
|
73
|
+
table: "dataTableConfig",
|
|
74
|
+
activityGrid: "activityGridChartConfig",
|
|
75
|
+
kpiNumber: "kpiNumberConfig",
|
|
76
|
+
kpiDelta: "kpiDeltaConfig",
|
|
77
|
+
kpiText: "kpiTextConfig",
|
|
78
|
+
markdown: "markdownConfig",
|
|
79
|
+
funnel: "funnelChartConfig",
|
|
80
|
+
sankey: "sankeyChartConfig",
|
|
81
|
+
sunburst: "sunburstChartConfig",
|
|
82
|
+
heatmap: "heatmapChartConfig",
|
|
83
|
+
retentionHeatmap: "retentionHeatmapConfig",
|
|
84
|
+
retentionCombined: "retentionCombinedConfig"
|
|
85
|
+
}, n = /* @__PURE__ */ new Map();
|
|
86
|
+
async function p(e) {
|
|
87
|
+
if (n.has(e))
|
|
88
|
+
return n.get(e);
|
|
89
|
+
const r = l[e];
|
|
90
|
+
if (!r)
|
|
91
|
+
return null;
|
|
92
|
+
try {
|
|
93
|
+
const t = await r(), a = d[e], i = t[a];
|
|
94
|
+
return i ? (n.set(e, i), i) : null;
|
|
95
|
+
} catch (t) {
|
|
96
|
+
return console.error(`Failed to load config for chart type: ${e}`, t), null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function C(e) {
|
|
100
|
+
return n.get(e) || u;
|
|
101
|
+
}
|
|
102
|
+
function A(e) {
|
|
103
|
+
return n.has(e);
|
|
104
|
+
}
|
|
105
|
+
function j(e) {
|
|
106
|
+
const [r, t] = f(
|
|
107
|
+
e ? C(e) : u
|
|
108
|
+
), [a, i] = f(!1), [m, o] = f(!1);
|
|
109
|
+
return c(() => {
|
|
110
|
+
if (!e) {
|
|
111
|
+
t(u), o(!1);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (n.has(e)) {
|
|
115
|
+
t(n.get(e)), o(!0);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
i(!0), p(e).then((s) => {
|
|
119
|
+
s ? (t(s), o(!0)) : (t(u), o(!0));
|
|
120
|
+
}).finally(() => i(!1));
|
|
121
|
+
}, [e]), { config: r, loading: a, loaded: m };
|
|
122
|
+
}
|
|
123
|
+
async function g(e) {
|
|
124
|
+
n.has(e) || await p(e);
|
|
125
|
+
}
|
|
126
|
+
async function G(e) {
|
|
127
|
+
await Promise.all(e.map(g));
|
|
128
|
+
}
|
|
129
|
+
async function H() {
|
|
130
|
+
const e = Object.keys(l);
|
|
131
|
+
await Promise.all(e.map(p));
|
|
132
|
+
const r = {};
|
|
133
|
+
for (const t of e) {
|
|
134
|
+
const a = n.get(t);
|
|
135
|
+
a && (r[t] = a);
|
|
136
|
+
}
|
|
137
|
+
return r;
|
|
138
|
+
}
|
|
139
|
+
function J() {
|
|
140
|
+
n.clear();
|
|
141
|
+
}
|
|
142
|
+
function P(e) {
|
|
143
|
+
const r = h(e);
|
|
144
|
+
return {
|
|
145
|
+
portlets: e,
|
|
146
|
+
layouts: r
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
function h(e) {
|
|
150
|
+
const r = e.map((t) => ({
|
|
151
|
+
i: t.id,
|
|
152
|
+
x: t.x,
|
|
153
|
+
y: t.y,
|
|
154
|
+
w: t.w,
|
|
155
|
+
h: t.h,
|
|
156
|
+
minW: 3,
|
|
157
|
+
minH: 3
|
|
158
|
+
}));
|
|
159
|
+
return {
|
|
160
|
+
lg: r,
|
|
161
|
+
md: r.map((t) => ({ ...t, w: Math.min(t.w, 8) })),
|
|
162
|
+
sm: r.map((t) => ({ ...t, w: Math.min(t.w, 6) })),
|
|
163
|
+
xs: r.map((t) => ({ ...t, w: Math.min(t.w, 4) })),
|
|
164
|
+
xxs: r.map((t) => ({ ...t, w: 2 }))
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function B(e, r = {}) {
|
|
168
|
+
const { formatNumbers: t = !0, precision: a = 2 } = r;
|
|
169
|
+
return t ? e.map((i) => {
|
|
170
|
+
const m = {};
|
|
171
|
+
for (const [o, s] of Object.entries(i))
|
|
172
|
+
typeof s == "number" ? m[o] = Number(s.toFixed(a)) : m[o] = s;
|
|
173
|
+
return m;
|
|
174
|
+
}) : e;
|
|
175
|
+
}
|
|
176
|
+
function F() {
|
|
177
|
+
return `portlet-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
178
|
+
}
|
|
179
|
+
function I(e, r = 6, t = 4) {
|
|
180
|
+
return e.length === 0 ? { x: 0, y: 0 } : { x: 0, y: Math.max(...e.map((i) => i.y + i.h)) };
|
|
181
|
+
}
|
|
182
|
+
function Q(e) {
|
|
183
|
+
try {
|
|
184
|
+
const r = JSON.parse(e);
|
|
185
|
+
return typeof r != "object" || r === null ? { valid: !1, error: "Query must be a JSON object" } : !r.measures && !r.dimensions ? { valid: !1, error: "Query must have at least measures or dimensions" } : { valid: !0, query: r };
|
|
186
|
+
} catch {
|
|
187
|
+
return { valid: !1, error: "Invalid JSON format" };
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
function T() {
|
|
191
|
+
return {
|
|
192
|
+
title: "Sample Chart",
|
|
193
|
+
query: JSON.stringify({
|
|
194
|
+
measures: ["count"],
|
|
195
|
+
dimensions: ["category"]
|
|
196
|
+
}, null, 2),
|
|
197
|
+
chartType: "bar",
|
|
198
|
+
chartConfig: {
|
|
199
|
+
x: "category",
|
|
200
|
+
y: ["count"]
|
|
201
|
+
},
|
|
202
|
+
displayConfig: {
|
|
203
|
+
showLegend: !0,
|
|
204
|
+
showGrid: !0,
|
|
205
|
+
showTooltip: !0
|
|
206
|
+
},
|
|
207
|
+
w: 6,
|
|
208
|
+
h: 4,
|
|
209
|
+
x: 0,
|
|
210
|
+
y: 0
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
export {
|
|
214
|
+
F as a,
|
|
215
|
+
I as b,
|
|
216
|
+
P as c,
|
|
217
|
+
T as d,
|
|
218
|
+
p as e,
|
|
219
|
+
B as f,
|
|
220
|
+
h as g,
|
|
221
|
+
C as h,
|
|
222
|
+
A as i,
|
|
223
|
+
G as j,
|
|
224
|
+
J as k,
|
|
225
|
+
H as l,
|
|
226
|
+
g as p,
|
|
227
|
+
j as u,
|
|
228
|
+
Q as v
|
|
229
|
+
};
|
|
230
|
+
//# sourceMappingURL=charts-Dk_9XrA7.js.map
|