drizzle-cube 0.4.52 → 0.5.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/express/index.cjs +2 -2
- package/dist/adapters/express/index.js +92 -83
- package/dist/adapters/fastify/index.cjs +2 -2
- package/dist/adapters/fastify/index.js +126 -116
- package/dist/adapters/{handler-RItnSaEl.js → handler-3LGcjLtr.js} +617 -612
- package/dist/adapters/handler-BzzbVpcl.cjs +25 -0
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +94 -86
- package/dist/adapters/{compiler-D_o2IzHn.js → locale-DTnJrxm1.js} +1363 -1079
- package/dist/adapters/locale-DueXjqMh.cjs +198 -0
- package/dist/adapters/locale.d.ts +8 -0
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/mcp-tools.js +14 -14
- package/dist/adapters/mcp-transport-45SiFcCH.cjs +39 -0
- package/dist/adapters/mcp-transport-Bxpc4mRy.js +553 -0
- package/dist/adapters/mcp-transport.d.ts +11 -0
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +138 -122
- package/dist/adapters/utils-DNrj-ryp.cjs +17 -0
- package/dist/adapters/{utils-IH1ePsBd.js → utils-DOg9oGdt.js} +2341 -819
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/utils.d.ts +7 -0
- package/dist/adapters/utils.js +1 -1
- package/dist/client/charts.js +12 -12
- package/dist/client/chunks/{DashboardEditModal-BTdV528l.js → DashboardEditModal-cSSIAZGy.js} +1968 -1973
- package/dist/client/chunks/DashboardEditModal-cSSIAZGy.js.map +1 -0
- package/dist/client/chunks/{FieldSearchModal-D75vy4Wb.js → FieldSearchModal-CZNo4pNK.js} +550 -536
- package/dist/client/chunks/FieldSearchModal-CZNo4pNK.js.map +1 -0
- package/dist/client/chunks/KpiDelta-Dll_eCV1.js +2 -0
- package/dist/client/chunks/KpiNumber-BPlR92hI.js +2 -0
- package/dist/client/chunks/KpiText-BIxq7Jso.js +2 -0
- package/dist/client/chunks/{RetentionCombinedChart-DIhK5pD8.js → RetentionCombinedChart-BD8tGeM_.js} +96 -96
- package/dist/client/chunks/RetentionCombinedChart-BD8tGeM_.js.map +1 -0
- package/dist/client/chunks/{RetentionHeatmap-CyREolyP.js → RetentionHeatmap-B_5sewwi.js} +77 -77
- package/dist/client/chunks/RetentionHeatmap-B_5sewwi.js.map +1 -0
- package/dist/client/chunks/SchemaVisualization-CCICjhvv.js +2 -0
- package/dist/client/chunks/SchemaVisualizationLazy-DraGsMx6.js +2 -0
- package/dist/client/chunks/af-ZA-xDmO5F0s.js +1431 -0
- package/dist/client/chunks/af-ZA-xDmO5F0s.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-C1CJ0c7L.js → analysis-builder-BeVZhiQ5.js} +1519 -1507
- package/dist/client/chunks/analysis-builder-BeVZhiQ5.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-shared-rkjJfWLT.js → analysis-builder-shared-BWc7ZZnG.js} +925 -954
- package/dist/client/chunks/analysis-builder-shared-BWc7ZZnG.js.map +1 -0
- package/dist/client/chunks/chart-activity-grid-CWT0gLv4.js +2376 -0
- package/dist/client/chunks/chart-activity-grid-CWT0gLv4.js.map +1 -0
- package/dist/client/chunks/{chart-area-BwYaflNk.js → chart-area-D63kG8OT.js} +157 -157
- package/dist/client/chunks/chart-area-D63kG8OT.js.map +1 -0
- package/dist/client/chunks/{chart-bar-BiENfFgE.js → chart-bar-BEfsCLjl.js} +78 -78
- package/dist/client/chunks/chart-bar-BEfsCLjl.js.map +1 -0
- package/dist/client/chunks/{chart-box-plot-BJF1tBXC.js → chart-box-plot-o-h9MRX5.js} +111 -114
- package/dist/client/chunks/chart-box-plot-o-h9MRX5.js.map +1 -0
- package/dist/client/chunks/{chart-bubble-DQQhGVDJ.js → chart-bubble-CMDp4Pfm.js} +121 -121
- package/dist/client/chunks/chart-bubble-CMDp4Pfm.js.map +1 -0
- package/dist/client/chunks/chart-candlestick-WyANJ0Ky.js +303 -0
- package/dist/client/chunks/chart-candlestick-WyANJ0Ky.js.map +1 -0
- package/dist/client/chunks/chart-config-activity-grid-C-EkgYoa.js +51 -0
- package/dist/client/chunks/chart-config-activity-grid-C-EkgYoa.js.map +1 -0
- package/dist/client/chunks/chart-config-area-CMZpbIah.js +93 -0
- package/dist/client/chunks/chart-config-area-CMZpbIah.js.map +1 -0
- package/dist/client/chunks/chart-config-bar-B8_V4YLg.js +87 -0
- package/dist/client/chunks/chart-config-bar-B8_V4YLg.js.map +1 -0
- package/dist/client/chunks/chart-config-box-plot-Dwj7sEbU.js +35 -0
- package/dist/client/chunks/chart-config-box-plot-Dwj7sEbU.js.map +1 -0
- package/dist/client/chunks/chart-config-bubble-B0w0ZVp4.js +82 -0
- package/dist/client/chunks/chart-config-bubble-B0w0ZVp4.js.map +1 -0
- package/dist/client/chunks/chart-config-candlestick-Bvo3zeIn.js +72 -0
- package/dist/client/chunks/chart-config-candlestick-Bvo3zeIn.js.map +1 -0
- package/dist/client/chunks/{chart-config-data-table-Bhdx5Hem.js → chart-config-data-table-BQXSn4b_.js} +9 -9
- package/dist/client/chunks/chart-config-data-table-BQXSn4b_.js.map +1 -0
- package/dist/client/chunks/chart-config-funnel-BzEsHmjR.js +93 -0
- package/dist/client/chunks/chart-config-funnel-BzEsHmjR.js.map +1 -0
- package/dist/client/chunks/chart-config-gauge-C5ZiyZy7.js +64 -0
- package/dist/client/chunks/chart-config-gauge-C5ZiyZy7.js.map +1 -0
- package/dist/client/chunks/chart-config-heat-map-Cv8qNnVP.js +91 -0
- package/dist/client/chunks/chart-config-heat-map-Cv8qNnVP.js.map +1 -0
- package/dist/client/chunks/chart-config-kpi-delta-BraHQc2E.js +94 -0
- package/dist/client/chunks/chart-config-kpi-delta-BraHQc2E.js.map +1 -0
- package/dist/client/chunks/chart-config-kpi-number-CeCkx7mC.js +75 -0
- package/dist/client/chunks/chart-config-kpi-number-CeCkx7mC.js.map +1 -0
- package/dist/client/chunks/chart-config-kpi-text-CImM3SvH.js +47 -0
- package/dist/client/chunks/chart-config-kpi-text-CImM3SvH.js.map +1 -0
- package/dist/client/chunks/chart-config-line-BVKapAQK.js +104 -0
- package/dist/client/chunks/chart-config-line-BVKapAQK.js.map +1 -0
- package/dist/client/chunks/chart-config-markdown-C-_g_8te.js +117 -0
- package/dist/client/chunks/chart-config-markdown-C-_g_8te.js.map +1 -0
- package/dist/client/chunks/chart-config-measure-profile-KTVV1gO3.js +82 -0
- package/dist/client/chunks/chart-config-measure-profile-KTVV1gO3.js.map +1 -0
- package/dist/client/chunks/chart-config-pie-BZxVl25X.js +68 -0
- package/dist/client/chunks/chart-config-pie-BZxVl25X.js.map +1 -0
- package/dist/client/chunks/chart-config-radar-B7FByX3t.js +49 -0
- package/dist/client/chunks/chart-config-radar-B7FByX3t.js.map +1 -0
- package/dist/client/chunks/chart-config-radial-bar-UfW_3yyX.js +38 -0
- package/dist/client/chunks/chart-config-radial-bar-UfW_3yyX.js.map +1 -0
- package/dist/client/chunks/chart-config-sankey-DGAThN9i.js +66 -0
- package/dist/client/chunks/chart-config-sankey-DGAThN9i.js.map +1 -0
- package/dist/client/chunks/chart-config-scatter-BVVJuOnt.js +61 -0
- package/dist/client/chunks/chart-config-scatter-BVVJuOnt.js.map +1 -0
- package/dist/client/chunks/chart-config-sunburst-utejM2YS.js +45 -0
- package/dist/client/chunks/chart-config-sunburst-utejM2YS.js.map +1 -0
- package/dist/client/chunks/chart-config-tree-map-IHp97OyV.js +51 -0
- package/dist/client/chunks/chart-config-tree-map-IHp97OyV.js.map +1 -0
- package/dist/client/chunks/chart-config-waterfall-BdqG1V-x.js +59 -0
- package/dist/client/chunks/chart-config-waterfall-BdqG1V-x.js.map +1 -0
- package/dist/client/chunks/{chart-data-table-2iCsn0CF.js → chart-data-table-C3Xh9jwL.js} +1083 -1086
- package/dist/client/chunks/chart-data-table-C3Xh9jwL.js.map +1 -0
- package/dist/client/chunks/{chart-funnel-poyOf7-e.js → chart-funnel-C7pgktN5.js} +132 -132
- package/dist/client/chunks/chart-funnel-C7pgktN5.js.map +1 -0
- package/dist/client/chunks/{chart-gauge-D5J4gRky.js → chart-gauge-D2r2B_AR.js} +150 -150
- package/dist/client/chunks/chart-gauge-D2r2B_AR.js.map +1 -0
- package/dist/client/chunks/{chart-heat-map-BAMVhLGG.js → chart-heat-map-Dw2yjwfO.js} +75 -80
- package/dist/client/chunks/chart-heat-map-Dw2yjwfO.js.map +1 -0
- package/dist/client/chunks/{chart-kpi-delta-KQjUIeal.js → chart-kpi-delta-CYE0S1x_.js} +117 -117
- package/dist/client/chunks/chart-kpi-delta-CYE0S1x_.js.map +1 -0
- package/dist/client/chunks/chart-kpi-number-BlZ79xHW.js +321 -0
- package/dist/client/chunks/chart-kpi-number-BlZ79xHW.js.map +1 -0
- package/dist/client/chunks/chart-kpi-text-DY1BnxPe.js +148 -0
- package/dist/client/chunks/chart-kpi-text-DY1BnxPe.js.map +1 -0
- package/dist/client/chunks/{chart-line-B5_WntY5.js → chart-line-CBsTThTv.js} +123 -123
- package/dist/client/chunks/chart-line-CBsTThTv.js.map +1 -0
- package/dist/client/chunks/chart-markdown-BWaWVkuz.js +3474 -0
- package/dist/client/chunks/chart-markdown-BWaWVkuz.js.map +1 -0
- package/dist/client/chunks/chart-measure-profile-B41qCTBG.js +179 -0
- package/dist/client/chunks/chart-measure-profile-B41qCTBG.js.map +1 -0
- package/dist/client/chunks/chart-pie-Djbu8x2v.js +172 -0
- package/dist/client/chunks/chart-pie-Djbu8x2v.js.map +1 -0
- package/dist/client/chunks/chart-radar-BsTcKV0K.js +154 -0
- package/dist/client/chunks/chart-radar-BsTcKV0K.js.map +1 -0
- package/dist/client/chunks/chart-radial-bar-Du7XNnwE.js +148 -0
- package/dist/client/chunks/chart-radial-bar-Du7XNnwE.js.map +1 -0
- package/dist/client/chunks/{chart-sankey-BOyxfG1Q.js → chart-sankey-WwkZAhLy.js} +73 -73
- package/dist/client/chunks/chart-sankey-WwkZAhLy.js.map +1 -0
- package/dist/client/chunks/chart-scatter-D8krEYsA.js +255 -0
- package/dist/client/chunks/chart-scatter-D8krEYsA.js.map +1 -0
- package/dist/client/chunks/{chart-sunburst-D9lGEOCc.js → chart-sunburst-CIDB_pTl.js} +66 -66
- package/dist/client/chunks/chart-sunburst-CIDB_pTl.js.map +1 -0
- package/dist/client/chunks/chart-tree-map-C5C2iaWM.js +298 -0
- package/dist/client/chunks/chart-tree-map-C5C2iaWM.js.map +1 -0
- package/dist/client/chunks/{chart-waterfall-BCdUx4DC.js → chart-waterfall-BGdPrJ5Y.js} +80 -80
- package/dist/client/chunks/chart-waterfall-BGdPrJ5Y.js.map +1 -0
- package/dist/client/chunks/{charts-core-C5Yokk-x.js → charts-core-BXOqaYFn.js} +92 -92
- package/dist/client/chunks/charts-core-BXOqaYFn.js.map +1 -0
- package/dist/client/chunks/en-US-5xPTdCXg.js +35 -0
- package/dist/client/chunks/en-US-5xPTdCXg.js.map +1 -0
- package/dist/client/chunks/nl-NL-vCifBijs.js +1491 -0
- package/dist/client/chunks/nl-NL-vCifBijs.js.map +1 -0
- package/dist/client/chunks/{schema-visualization-t1KiOORo.js → schema-visualization-Xp60Ff2W.js} +352 -364
- package/dist/client/chunks/schema-visualization-Xp60Ff2W.js.map +1 -0
- package/dist/client/chunks/{useDebounce-CKqkM42n.js → useDebounce-CfmUMFau.js} +85 -85
- package/dist/client/chunks/useDebounce-CfmUMFau.js.map +1 -0
- package/dist/client/chunks/{useExplainAI-DBIfYwz-.js → useExplainAI-BKGmejIj.js} +4 -4
- package/dist/client/chunks/{useExplainAI-DBIfYwz-.js.map → useExplainAI-BKGmejIj.js.map} +1 -1
- package/dist/client/chunks/{utils--qCr8Yn5.js → utils-BldkcRHv.js} +2 -2
- package/dist/client/chunks/{utils--qCr8Yn5.js.map → utils-BldkcRHv.js.map} +1 -1
- package/dist/client/chunks/{vendor-BRlsCGnK.js → vendor-ClXpIiea.js} +2 -2
- package/dist/client/chunks/{vendor-BRlsCGnK.js.map → vendor-ClXpIiea.js.map} +1 -1
- package/dist/client/components/AnalysisBuilder/types.d.ts +6 -6
- package/dist/client/components.js +3 -3
- package/dist/client/hooks/useTranslation.d.ts +21 -0
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons.js +1 -1
- package/dist/client/index.js +493 -488
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers/CubeApiProvider.d.ts +2 -1
- package/dist/client/providers/CubeProvider.d.ts +7 -1
- package/dist/client/providers/I18nProvider.d.ts +18 -0
- package/dist/client/providers.js +1 -1
- package/dist/client/schema.js +1 -1
- package/dist/client/shared/types.d.ts +5 -20
- package/dist/client/styles.css +1 -1
- package/dist/client/utils.js +5 -5
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +26 -24
- package/dist/server/index.cjs +42 -40
- package/dist/server/index.js +3353 -1567
- package/package.json +5 -2
- package/dist/adapters/compiler-Bbsijr3W.cjs +0 -198
- package/dist/adapters/handler-DumFgnNM.cjs +0 -25
- package/dist/adapters/mcp-transport-C6bsIOSV.js +0 -545
- package/dist/adapters/mcp-transport-DMhuYmFp.cjs +0 -39
- package/dist/adapters/utils-CyBt-as9.cjs +0 -15
- package/dist/client/chunks/DashboardEditModal-BTdV528l.js.map +0 -1
- package/dist/client/chunks/FieldSearchModal-D75vy4Wb.js.map +0 -1
- package/dist/client/chunks/KpiDelta-Bk8bzKYM.js +0 -2
- package/dist/client/chunks/KpiNumber-CKF-8e_T.js +0 -2
- package/dist/client/chunks/KpiText-Iz1vIvu_.js +0 -2
- package/dist/client/chunks/RetentionCombinedChart-DIhK5pD8.js.map +0 -1
- package/dist/client/chunks/RetentionHeatmap-CyREolyP.js.map +0 -1
- package/dist/client/chunks/SchemaVisualization-B1GUT-FM.js +0 -2
- package/dist/client/chunks/SchemaVisualizationLazy-DymwT34e.js +0 -2
- package/dist/client/chunks/analysis-builder-C1CJ0c7L.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-rkjJfWLT.js.map +0 -1
- package/dist/client/chunks/chart-activity-grid-DLktOINm.js +0 -806
- package/dist/client/chunks/chart-activity-grid-DLktOINm.js.map +0 -1
- package/dist/client/chunks/chart-area-BwYaflNk.js.map +0 -1
- package/dist/client/chunks/chart-bar-BiENfFgE.js.map +0 -1
- package/dist/client/chunks/chart-box-plot-BJF1tBXC.js.map +0 -1
- package/dist/client/chunks/chart-bubble-DQQhGVDJ.js.map +0 -1
- package/dist/client/chunks/chart-candlestick-C2UuXbLe.js +0 -306
- package/dist/client/chunks/chart-candlestick-C2UuXbLe.js.map +0 -1
- package/dist/client/chunks/chart-config-activity-grid-DJOU3TEz.js +0 -51
- package/dist/client/chunks/chart-config-activity-grid-DJOU3TEz.js.map +0 -1
- package/dist/client/chunks/chart-config-area-CWnWVT6a.js +0 -93
- package/dist/client/chunks/chart-config-area-CWnWVT6a.js.map +0 -1
- package/dist/client/chunks/chart-config-bar-C-7Dr1Ho.js +0 -87
- package/dist/client/chunks/chart-config-bar-C-7Dr1Ho.js.map +0 -1
- package/dist/client/chunks/chart-config-box-plot-mVOwmLdu.js +0 -35
- package/dist/client/chunks/chart-config-box-plot-mVOwmLdu.js.map +0 -1
- package/dist/client/chunks/chart-config-bubble-BPE2CeiD.js +0 -82
- package/dist/client/chunks/chart-config-bubble-BPE2CeiD.js.map +0 -1
- package/dist/client/chunks/chart-config-candlestick-BSB9DRy2.js +0 -72
- package/dist/client/chunks/chart-config-candlestick-BSB9DRy2.js.map +0 -1
- package/dist/client/chunks/chart-config-data-table-Bhdx5Hem.js.map +0 -1
- package/dist/client/chunks/chart-config-funnel-Cl-v-bm1.js +0 -93
- package/dist/client/chunks/chart-config-funnel-Cl-v-bm1.js.map +0 -1
- package/dist/client/chunks/chart-config-gauge-CdrUTJMJ.js +0 -64
- package/dist/client/chunks/chart-config-gauge-CdrUTJMJ.js.map +0 -1
- package/dist/client/chunks/chart-config-heat-map-DGE3NzoF.js +0 -91
- package/dist/client/chunks/chart-config-heat-map-DGE3NzoF.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-delta-DMrQerUW.js +0 -94
- package/dist/client/chunks/chart-config-kpi-delta-DMrQerUW.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-number-DCytCytn.js +0 -75
- package/dist/client/chunks/chart-config-kpi-number-DCytCytn.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-text-KdKQUvHo.js +0 -47
- package/dist/client/chunks/chart-config-kpi-text-KdKQUvHo.js.map +0 -1
- package/dist/client/chunks/chart-config-line-Bl9VDAdz.js +0 -104
- package/dist/client/chunks/chart-config-line-Bl9VDAdz.js.map +0 -1
- package/dist/client/chunks/chart-config-markdown-BX26b94i.js +0 -117
- package/dist/client/chunks/chart-config-markdown-BX26b94i.js.map +0 -1
- package/dist/client/chunks/chart-config-measure-profile-DwtRhEFh.js +0 -82
- package/dist/client/chunks/chart-config-measure-profile-DwtRhEFh.js.map +0 -1
- package/dist/client/chunks/chart-config-pie-BzBcqPMJ.js +0 -68
- package/dist/client/chunks/chart-config-pie-BzBcqPMJ.js.map +0 -1
- package/dist/client/chunks/chart-config-radar-6ZOgt__z.js +0 -49
- package/dist/client/chunks/chart-config-radar-6ZOgt__z.js.map +0 -1
- package/dist/client/chunks/chart-config-radial-bar-Df6Eta7N.js +0 -38
- package/dist/client/chunks/chart-config-radial-bar-Df6Eta7N.js.map +0 -1
- package/dist/client/chunks/chart-config-sankey-DgqKBFvN.js +0 -66
- package/dist/client/chunks/chart-config-sankey-DgqKBFvN.js.map +0 -1
- package/dist/client/chunks/chart-config-scatter-D5nVLDvi.js +0 -61
- package/dist/client/chunks/chart-config-scatter-D5nVLDvi.js.map +0 -1
- package/dist/client/chunks/chart-config-sunburst-Ca3FX9nW.js +0 -45
- package/dist/client/chunks/chart-config-sunburst-Ca3FX9nW.js.map +0 -1
- package/dist/client/chunks/chart-config-tree-map-Bjy4QNa3.js +0 -51
- package/dist/client/chunks/chart-config-tree-map-Bjy4QNa3.js.map +0 -1
- package/dist/client/chunks/chart-config-waterfall-C5K2eqR7.js +0 -59
- package/dist/client/chunks/chart-config-waterfall-C5K2eqR7.js.map +0 -1
- package/dist/client/chunks/chart-data-table-2iCsn0CF.js.map +0 -1
- package/dist/client/chunks/chart-funnel-poyOf7-e.js.map +0 -1
- package/dist/client/chunks/chart-gauge-D5J4gRky.js.map +0 -1
- package/dist/client/chunks/chart-heat-map-BAMVhLGG.js.map +0 -1
- package/dist/client/chunks/chart-kpi-delta-KQjUIeal.js.map +0 -1
- package/dist/client/chunks/chart-kpi-number-CsQgV_x3.js +0 -325
- package/dist/client/chunks/chart-kpi-number-CsQgV_x3.js.map +0 -1
- package/dist/client/chunks/chart-kpi-text-BR0IyeUU.js +0 -148
- package/dist/client/chunks/chart-kpi-text-BR0IyeUU.js.map +0 -1
- package/dist/client/chunks/chart-line-B5_WntY5.js.map +0 -1
- package/dist/client/chunks/chart-markdown-B6bENbel.js +0 -3473
- package/dist/client/chunks/chart-markdown-B6bENbel.js.map +0 -1
- package/dist/client/chunks/chart-measure-profile-yWk-obNb.js +0 -179
- package/dist/client/chunks/chart-measure-profile-yWk-obNb.js.map +0 -1
- package/dist/client/chunks/chart-pie-BodrUoHv.js +0 -172
- package/dist/client/chunks/chart-pie-BodrUoHv.js.map +0 -1
- package/dist/client/chunks/chart-radar-gG3zfLud.js +0 -154
- package/dist/client/chunks/chart-radar-gG3zfLud.js.map +0 -1
- package/dist/client/chunks/chart-radial-bar-C2IPCV8c.js +0 -148
- package/dist/client/chunks/chart-radial-bar-C2IPCV8c.js.map +0 -1
- package/dist/client/chunks/chart-sankey-BOyxfG1Q.js.map +0 -1
- package/dist/client/chunks/chart-scatter-B8OwlsAX.js +0 -255
- package/dist/client/chunks/chart-scatter-B8OwlsAX.js.map +0 -1
- package/dist/client/chunks/chart-sunburst-D9lGEOCc.js.map +0 -1
- package/dist/client/chunks/chart-tree-map-DZaKy9he.js +0 -298
- package/dist/client/chunks/chart-tree-map-DZaKy9he.js.map +0 -1
- package/dist/client/chunks/chart-waterfall-BCdUx4DC.js.map +0 -1
- package/dist/client/chunks/charts-core-C5Yokk-x.js.map +0 -1
- package/dist/client/chunks/schema-visualization-t1KiOORo.js.map +0 -1
- package/dist/client/chunks/useDebounce-CKqkM42n.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-measure-profile-yWk-obNb.js","names":[],"sources":["../../../src/client/components/charts/MeasureProfileChart.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, ReferenceLine, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport AngledXAxisTick from './AngledXAxisTick'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport { formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport type { ChartProps } from '../../types'\n\n/**\n * Pivots N measures from chartConfig.yAxis[] into sequential X-axis points.\n * Each measure becomes one X-axis category; its numeric value is Y.\n * When a series dimension is provided, values are averaged across all rows\n * that share the same series value.\n *\n * Input (normal cube rows):\n * [{ 'Markouts.avgMinus2m': 10, 'Markouts.avgAtEvent': 0, 'Trades.symbol': 'AAPL' },\n * { 'Markouts.avgMinus2m': 12, 'Markouts.avgAtEvent': 1, 'Trades.symbol': 'AAPL' }]\n *\n * Output (one row per measure, values averaged per series):\n * [{ measureKey: 'Markouts.avgMinus2m', measureLabel: <getFieldLabel result>, AAPL: 11 },\n * { measureKey: 'Markouts.avgAtEvent', measureLabel: <getFieldLabel result>, AAPL: 0.5 }]\n */\nfunction pivotMeasuresToProfile(\n data: Record<string, unknown>[],\n yAxisFields: string[],\n seriesField: string | undefined,\n getFieldLabel: (field: string) => string\n): { profileData: Record<string, unknown>[]; seriesKeys: string[] } {\n if (!data || data.length === 0 || yAxisFields.length === 0) {\n return { profileData: [], seriesKeys: [] }\n }\n\n if (seriesField) {\n const seriesValues = Array.from(new Set(data.map((row) => String(row[seriesField] ?? 'Unknown'))))\n const profileData = yAxisFields.map((field) => {\n const base: Record<string, unknown> = {\n measureKey: field,\n measureLabel: getFieldLabel(field),\n }\n for (const seriesVal of seriesValues) {\n const matchingRows = data.filter((row) => String(row[seriesField] ?? 'Unknown') === seriesVal)\n const values = matchingRows\n .map((r) => {\n const v = r[field]\n return typeof v === 'number' ? v : parseFloat(String(v ?? ''))\n })\n .filter((v) => !isNaN(v))\n base[seriesVal] = values.length > 0 ? values.reduce((a, b) => a + b, 0) / values.length : null\n }\n return base\n })\n return { profileData, seriesKeys: seriesValues }\n } else {\n const VALUE_KEY = '_value'\n const profileData = yAxisFields.map((field) => {\n const values = data\n .map((r) => {\n const v = r[field]\n return typeof v === 'number' ? v : parseFloat(String(v ?? ''))\n })\n .filter((v) => !isNaN(v))\n return {\n measureKey: field,\n measureLabel: getFieldLabel(field),\n [VALUE_KEY]: values.length > 0 ? values.reduce((a, b) => a + b, 0) / values.length : null,\n }\n })\n return { profileData, seriesKeys: [VALUE_KEY] }\n }\n}\n\nconst MeasureProfileChart = React.memo(function MeasureProfileChart({\n data,\n chartConfig,\n displayConfig = {},\n height = '100%',\n colorPalette,\n drillEnabled,\n}: ChartProps) {\n const getFieldLabel = useCubeFieldLabel()\n\n const showReferenceLineAtZero = displayConfig?.showReferenceLineAtZero ?? true\n const showDataLabels = displayConfig?.showDataLabels ?? false\n const lineType = displayConfig?.lineType ?? 'monotone'\n const yAxisFormat = displayConfig?.leftYAxisFormat\n\n const { yAxisFields, seriesField, configError } = useMemo(() => {\n const yAxisFields: string[] = Array.isArray(chartConfig?.yAxis)\n ? chartConfig.yAxis\n : []\n const seriesField = Array.isArray(chartConfig?.series)\n ? chartConfig.series[0]\n : chartConfig?.series ?? undefined\n const configError =\n yAxisFields.length < 2 ? 'Measure Profile chart requires at least 2 measures in Y-Axis' : null\n return { yAxisFields, seriesField, configError }\n }, [chartConfig])\n\n const { profileData, seriesKeys } = useMemo(() => {\n if (configError || !data || data.length === 0) return { profileData: [], seriesKeys: [] }\n return pivotMeasuresToProfile(\n data as Record<string, unknown>[],\n yAxisFields,\n seriesField,\n getFieldLabel\n )\n }, [data, yAxisFields, seriesField, getFieldLabel, configError])\n\n const showLegend = (displayConfig?.showLegend ?? true) && seriesKeys.length > 1\n\n try {\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in measure profile chart</div>\n </div>\n </div>\n )\n }\n\n if (configError) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">{configError}</div>\n </div>\n </div>\n )\n }\n return (\n <div className=\"dc:relative dc:w-full\" style={{ height }}>\n <ChartContainer height=\"100%\">\n <LineChart data={profileData} margin={{ ...CHART_MARGINS, left: 40 }} accessibilityLayer={false}>\n <CartesianGrid strokeDasharray=\"3 3\" style={{ pointerEvents: 'none' }} />\n <XAxis dataKey=\"measureLabel\" type=\"category\" tick={<AngledXAxisTick />} height={60} />\n <YAxis\n tick={{ fontSize: 12 }}\n tickFormatter={yAxisFormat ? (v) => formatAxisValue(v, yAxisFormat) : undefined}\n />\n <ChartTooltip\n formatter={(value: any, name: any) => {\n if (value === null || value === undefined) return ['No data', name]\n const formatted = yAxisFormat ? formatAxisValue(value, yAxisFormat) : value?.toLocaleString?.() ?? value\n const displayName = name === '_value' ? (getFieldLabel(yAxisFields[0]?.split('.')[0]) || 'Value') : name\n return [formatted, displayName]\n }}\n />\n {showReferenceLineAtZero && (\n <ReferenceLine y={0} stroke=\"var(--dc-border, #94a3b8)\" strokeDasharray=\"4 2\" />\n )}\n {showLegend && (\n <Legend wrapperStyle={{ fontSize: '12px', paddingTop: '8px' }} />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Line\n key={seriesKey}\n type={lineType}\n dataKey={seriesKey}\n name={seriesKey === '_value' ? (getFieldLabel(yAxisFields[0]?.split('.')[0]) || 'Value') : seriesKey}\n stroke={\n (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) ||\n CHART_COLORS[index % CHART_COLORS.length]\n }\n strokeWidth={2}\n dot={showDataLabels ? { r: 4 } : { r: 3 }}\n activeDot={{ r: 5 }}\n label={showDataLabels ? { position: 'top', fontSize: 10 } : undefined}\n isAnimationActive={false}\n cursor={drillEnabled ? 'pointer' : undefined}\n />\n ))}\n </LineChart>\n </ChartContainer>\n </div>\n )\n } catch (error) {\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Measure Profile Chart Error</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n})\n\nexport default MeasureProfileChart\n"],"mappings":"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"}
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { n as e } from "./rolldown-runtime-CCl2IeXn.js";
|
|
2
|
-
import { D as t, S as n, _ as r, n as i, x as a, y as o } from "./chart-activity-grid-DLktOINm.js";
|
|
3
|
-
import { c as s, l as c } from "./chart-area-BwYaflNk.js";
|
|
4
|
-
import l, { useState as u } from "react";
|
|
5
|
-
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
6
|
-
import { Cell as p, Legend as m, Pie as h, PieChart as g } from "recharts";
|
|
7
|
-
//#region src/client/components/charts/PieChart.tsx
|
|
8
|
-
var _ = /* @__PURE__ */ e({ default: () => v }), v = l.memo(function({ data: e, chartConfig: l, displayConfig: _ = {}, queryObject: v, height: y = "100%", colorPalette: b, onDataPointClick: x, drillEnabled: S }) {
|
|
9
|
-
let [C, w] = u(null), T = r();
|
|
10
|
-
try {
|
|
11
|
-
let r = {
|
|
12
|
-
showLegend: _?.showLegend ?? !0,
|
|
13
|
-
showTooltip: _?.showTooltip ?? !0,
|
|
14
|
-
leftYAxisFormat: _?.leftYAxisFormat,
|
|
15
|
-
innerRadius: _?.innerRadius || "0%"
|
|
16
|
-
};
|
|
17
|
-
if (!e || e.length === 0) return /* @__PURE__ */ d("div", {
|
|
18
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
19
|
-
style: { height: y },
|
|
20
|
-
children: /* @__PURE__ */ f("div", {
|
|
21
|
-
className: "dc:text-center",
|
|
22
|
-
children: [/* @__PURE__ */ d("div", {
|
|
23
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
24
|
-
children: "No data available"
|
|
25
|
-
}), /* @__PURE__ */ d("div", {
|
|
26
|
-
className: "dc:text-xs text-dc-text-secondary",
|
|
27
|
-
children: "No data points to display in pie chart"
|
|
28
|
-
})]
|
|
29
|
-
})
|
|
30
|
-
});
|
|
31
|
-
let u, E, D, O = [];
|
|
32
|
-
if (l?.xAxis && l?.yAxis) E = Array.isArray(l.xAxis) ? l.xAxis[0] : l.xAxis, D = Array.isArray(l.yAxis) ? l.yAxis : [l.yAxis], O = l.series || [];
|
|
33
|
-
else if (l?.x && l?.y) E = l.x, D = Array.isArray(l.y) ? l.y : [l.y];
|
|
34
|
-
else return /* @__PURE__ */ d("div", {
|
|
35
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
|
|
36
|
-
style: { height: y },
|
|
37
|
-
children: /* @__PURE__ */ f("div", {
|
|
38
|
-
className: "dc:text-center",
|
|
39
|
-
children: [/* @__PURE__ */ d("div", {
|
|
40
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
41
|
-
children: "Configuration Error"
|
|
42
|
-
}), /* @__PURE__ */ d("div", {
|
|
43
|
-
className: "dc:text-xs",
|
|
44
|
-
children: "chartConfig.x/y or chartConfig.xAxis/yAxis required for pie chart"
|
|
45
|
-
})]
|
|
46
|
-
})
|
|
47
|
-
});
|
|
48
|
-
if (!E || !D || D.length === 0) return /* @__PURE__ */ d("div", {
|
|
49
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
|
|
50
|
-
style: { height: y },
|
|
51
|
-
children: /* @__PURE__ */ f("div", {
|
|
52
|
-
className: "dc:text-center",
|
|
53
|
-
children: [/* @__PURE__ */ d("div", {
|
|
54
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
55
|
-
children: "Configuration Error"
|
|
56
|
-
}), /* @__PURE__ */ d("div", {
|
|
57
|
-
className: "dc:text-xs",
|
|
58
|
-
children: "Missing required X-axis or Y-axis fields"
|
|
59
|
-
})]
|
|
60
|
-
})
|
|
61
|
-
});
|
|
62
|
-
if (O.length > 0) {
|
|
63
|
-
let { data: n } = t(e, E, D, v, O, T);
|
|
64
|
-
if (u = [], n.length > 0) {
|
|
65
|
-
let e = n[0];
|
|
66
|
-
Object.keys(e).forEach((t) => {
|
|
67
|
-
t !== "name" && typeof e[t] == "number" && u.push({
|
|
68
|
-
name: String(t),
|
|
69
|
-
value: e[t]
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
} else {
|
|
74
|
-
let t = n(v, E);
|
|
75
|
-
u = e.map((e) => {
|
|
76
|
-
let n = a(e[E], t) || String(e[E]) || "Unknown";
|
|
77
|
-
return typeof e[E] == "boolean" ? n = e[E] ? "Active" : "Inactive" : (n === "true" || n === "false") && (n = n === "true" ? "Active" : "Inactive"), {
|
|
78
|
-
name: n,
|
|
79
|
-
value: typeof e[D[0]] == "string" ? parseFloat(e[D[0]]) : e[D[0]] || 0
|
|
80
|
-
};
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
let k = u.length;
|
|
84
|
-
return u = u.filter((e) => e.value != null && !isNaN(e.value) && e.value !== 0 && e.value > 0), u.length === 0 ? /* @__PURE__ */ d("div", {
|
|
85
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
86
|
-
style: { height: y },
|
|
87
|
-
children: /* @__PURE__ */ f("div", {
|
|
88
|
-
className: "dc:text-center",
|
|
89
|
-
children: [/* @__PURE__ */ d("div", {
|
|
90
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
91
|
-
children: "No valid data"
|
|
92
|
-
}), /* @__PURE__ */ d("div", {
|
|
93
|
-
className: "dc:text-xs text-dc-text-secondary",
|
|
94
|
-
children: k > 0 ? `Filtered out ${k} data points (zero or invalid values)` : "No data points to display in pie chart"
|
|
95
|
-
})]
|
|
96
|
-
})
|
|
97
|
-
}) : /* @__PURE__ */ d(c, {
|
|
98
|
-
height: y,
|
|
99
|
-
children: /* @__PURE__ */ f(g, {
|
|
100
|
-
accessibilityLayer: !1,
|
|
101
|
-
children: [
|
|
102
|
-
/* @__PURE__ */ d(h, {
|
|
103
|
-
data: u,
|
|
104
|
-
cx: "50%",
|
|
105
|
-
cy: "50%",
|
|
106
|
-
innerRadius: r.innerRadius === "0%" ? void 0 : r.innerRadius,
|
|
107
|
-
outerRadius: "70%",
|
|
108
|
-
dataKey: "value",
|
|
109
|
-
label: r.showLegend ? void 0 : ({ name: e, percent: t }) => `${e} ${((t || 0) * 100).toFixed(0)}%`,
|
|
110
|
-
cursor: S ? "pointer" : void 0,
|
|
111
|
-
onClick: (e, t, n) => {
|
|
112
|
-
x && S && e && x({
|
|
113
|
-
dataPoint: e,
|
|
114
|
-
clickedField: D[0],
|
|
115
|
-
xValue: e.name,
|
|
116
|
-
position: {
|
|
117
|
-
x: n.clientX,
|
|
118
|
-
y: n.clientY
|
|
119
|
-
},
|
|
120
|
-
nativeEvent: n
|
|
121
|
-
});
|
|
122
|
-
},
|
|
123
|
-
children: u.map((e, t) => /* @__PURE__ */ d(p, {
|
|
124
|
-
fill: b?.colors && b.colors[t % b.colors.length] || i[t % i.length],
|
|
125
|
-
fillOpacity: C ? C === u[t].name ? 1 : .3 : 1
|
|
126
|
-
}, `cell-${t}`))
|
|
127
|
-
}),
|
|
128
|
-
r.showTooltip && /* @__PURE__ */ d(s, { formatter: r.leftYAxisFormat ? (e, t) => [o(e, r.leftYAxisFormat), t] : void 0 }),
|
|
129
|
-
r.showLegend && /* @__PURE__ */ d(m, {
|
|
130
|
-
wrapperStyle: {
|
|
131
|
-
fontSize: "12px",
|
|
132
|
-
paddingTop: "10px"
|
|
133
|
-
},
|
|
134
|
-
iconType: "circle",
|
|
135
|
-
iconSize: 8,
|
|
136
|
-
layout: "horizontal",
|
|
137
|
-
align: "center",
|
|
138
|
-
verticalAlign: "bottom",
|
|
139
|
-
onMouseEnter: (e) => w(String(e.value || "")),
|
|
140
|
-
onMouseLeave: () => w(null)
|
|
141
|
-
})
|
|
142
|
-
]
|
|
143
|
-
})
|
|
144
|
-
});
|
|
145
|
-
} catch (e) {
|
|
146
|
-
return /* @__PURE__ */ d("div", {
|
|
147
|
-
className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
|
|
148
|
-
style: { height: y },
|
|
149
|
-
children: /* @__PURE__ */ f("div", {
|
|
150
|
-
className: "dc:text-center",
|
|
151
|
-
children: [
|
|
152
|
-
/* @__PURE__ */ d("div", {
|
|
153
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
154
|
-
children: "Pie Chart Error"
|
|
155
|
-
}),
|
|
156
|
-
/* @__PURE__ */ d("div", {
|
|
157
|
-
className: "dc:text-xs dc:mb-2",
|
|
158
|
-
children: e instanceof Error ? e.message : "Unknown rendering error"
|
|
159
|
-
}),
|
|
160
|
-
/* @__PURE__ */ d("div", {
|
|
161
|
-
className: "dc:text-xs text-dc-text-muted",
|
|
162
|
-
children: "Check the data and configuration"
|
|
163
|
-
})
|
|
164
|
-
]
|
|
165
|
-
})
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
//#endregion
|
|
170
|
-
export { _ as n, v as t };
|
|
171
|
-
|
|
172
|
-
//# sourceMappingURL=chart-pie-BodrUoHv.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-pie-BodrUoHv.js","names":[],"sources":["../../../src/client/components/charts/PieChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { PieChart as RechartsPieChart, Pie, Cell, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatTimeValue, getFieldGranularity, formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport type { ChartProps } from '../../types'\n\nconst PieChart = React.memo(function PieChart({\n data,\n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette,\n onDataPointClick,\n drillEnabled\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | 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 showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n leftYAxisFormat: displayConfig?.leftYAxisFormat,\n innerRadius: displayConfig?.innerRadius || '0%'\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in pie chart</div>\n </div>\n </div>\n )\n }\n\n let pieData: Array<{name: string, value: number}>\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">chartConfig.x/y or chartConfig.xAxis/yAxis required for pie chart</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n if (seriesFields.length > 0) {\n // Use series-based transformation for dimension-based pie slices\n const { data: chartData } = transformChartDataWithSeries(\n data,\n xAxisField,\n yAxisFields,\n queryObject,\n seriesFields,\n getFieldLabel\n )\n \n // Convert series data to pie format\n pieData = []\n if (chartData.length > 0) {\n const firstRow = chartData[0]\n Object.keys(firstRow).forEach(key => {\n if (key !== 'name' && typeof firstRow[key] === 'number') {\n pieData.push({\n name: String(key),\n value: firstRow[key]\n })\n }\n })\n }\n } else {\n // Standard measure-based pie chart\n const granularity = getFieldGranularity(queryObject, xAxisField)\n pieData = data.map(item => {\n let name = formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown'\n // Handle boolean values with better labels\n if (typeof item[xAxisField] === 'boolean') {\n name = item[xAxisField] ? 'Active' : 'Inactive'\n } else if (name === 'true' || name === 'false') {\n name = name === 'true' ? 'Active' : 'Inactive'\n }\n return {\n name,\n value: typeof item[yAxisFields[0]] === 'string' \n ? parseFloat(item[yAxisFields[0]]) \n : (item[yAxisFields[0]] || 0)\n }\n })\n }\n\n // Filter out invalid values (null, undefined, NaN, or zero)\n const originalLength = pieData.length\n pieData = pieData.filter(item => \n item.value != null && \n !isNaN(item.value) && \n item.value !== 0 && \n item.value > 0\n )\n \n if (pieData.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No valid data</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">\n {originalLength > 0\n ? `Filtered out ${originalLength} data points (zero or invalid values)`\n : 'No data points to display in pie chart'\n }\n </div>\n </div>\n </div>\n )\n }\n \n return (\n <ChartContainer height={height}>\n <RechartsPieChart accessibilityLayer={false}>\n <Pie\n data={pieData}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={safeDisplayConfig.innerRadius !== '0%' ? safeDisplayConfig.innerRadius : undefined}\n outerRadius=\"70%\"\n dataKey=\"value\"\n label={!safeDisplayConfig.showLegend ? ({ name, percent }) =>\n `${name} ${((percent || 0) * 100).toFixed(0)}%`\n : undefined}\n cursor={drillEnabled ? 'pointer' : undefined}\n onClick={(sliceData: any, _index: number, event: React.MouseEvent) => {\n if (onDataPointClick && drillEnabled && sliceData) {\n onDataPointClick({\n dataPoint: sliceData,\n clickedField: yAxisFields[0],\n xValue: sliceData.name,\n position: { x: event.clientX, y: event.clientY },\n nativeEvent: event\n })\n }\n }}\n >\n {pieData.map((_entry, index) => (\n <Cell\n key={`cell-${index}`}\n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === pieData[index].name ? 1 : 0.3) : 1}\n />\n ))}\n </Pie>\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any, name: string) => [formatAxisValue(value, safeDisplayConfig.leftYAxisFormat), name]\n : undefined\n }\n />\n )}\n {safeDisplayConfig.showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.value || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n </RechartsPieChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'PieChart rendering error\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Pie Chart Error</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n})\n\nexport default PieChart"],"mappings":";;;;;;;iDASM,IAAW,EAAM,KAAK,SAAkB,EAC5C,SACA,gBACA,mBAAgB,EAAE,EAClB,gBACA,YAAS,QACT,iBACA,qBACA,mBACa;CACb,IAAM,CAAC,GAAe,KAAoB,EAAwB,KAAK,EAEjE,IAAgB,GAAmB;AAEzC,KAAI;EACF,IAAM,IAAoB;GACxB,YAAY,GAAe,cAAc;GACzC,aAAa,GAAe,eAAe;GAC3C,iBAAiB,GAAe;GAChC,aAAa,GAAe,eAAe;GAC5C;AAED,MAAI,CAAC,KAAQ,EAAK,WAAW,EAC3B,QACE,kBAAC,OAAD;GAAK,WAAU;GAAyE,OAAO,EAAE,WAAQ;aACvG,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAsC;KAAuB,CAAA,EAC5E,kBAAC,OAAD;KAAK,WAAU;eAAoC;KAA4C,CAAA,CAC3F;;GACF,CAAA;EAIV,IAAI,GAGA,GACA,GACA,IAAyB,EAAE;AAE/B,MAAI,GAAa,SAAS,GAAa,MAIrC,CAFA,IAAa,MAAM,QAAQ,EAAY,MAAM,GAAG,EAAY,MAAM,KAAK,EAAY,OACnF,IAAc,MAAM,QAAQ,EAAY,MAAM,GAAG,EAAY,QAAQ,CAAC,EAAY,MAAM,EACxF,IAAe,EAAY,UAAU,EAAE;WAC9B,GAAa,KAAK,GAAa,EAGxC,CADA,IAAa,EAAY,GACzB,IAAc,MAAM,QAAQ,EAAY,EAAE,GAAG,EAAY,IAAI,CAAC,EAAY,EAAE;MAE5E,QACE,kBAAC,OAAD;GAAK,WAAU;GAAsE,OAAO,EAAE,WAAQ;aACpG,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAsC;KAAyB,CAAA,EAC9E,kBAAC,OAAD;KAAK,WAAU;eAAa;KAAuE,CAAA,CAC/F;;GACF,CAAA;AAIV,MAAI,CAAC,KAAc,CAAC,KAAe,EAAY,WAAW,EACxD,QACE,kBAAC,OAAD;GAAK,WAAU;GAAsE,OAAO,EAAE,WAAQ;aACpG,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAsC;KAAyB,CAAA,EAC9E,kBAAC,OAAD;KAAK,WAAU;eAAa;KAA8C,CAAA,CACtE;;GACF,CAAA;AAIV,MAAI,EAAa,SAAS,GAAG;GAE3B,IAAM,EAAE,MAAM,MAAc,EAC1B,GACA,GACA,GACA,GACA,GACA,EACD;AAID,OADA,IAAU,EAAE,EACR,EAAU,SAAS,GAAG;IACxB,IAAM,IAAW,EAAU;AAC3B,WAAO,KAAK,EAAS,CAAC,SAAQ,MAAO;AACnC,KAAI,MAAQ,UAAU,OAAO,EAAS,MAAS,YAC7C,EAAQ,KAAK;MACX,MAAM,OAAO,EAAI;MACjB,OAAO,EAAS;MACjB,CAAC;MAEJ;;SAEC;GAEL,IAAM,IAAc,EAAoB,GAAa,EAAW;AAChE,OAAU,EAAK,KAAI,MAAQ;IACzB,IAAI,IAAO,EAAgB,EAAK,IAAa,EAAY,IAAI,OAAO,EAAK,GAAY,IAAI;AAOzF,WALI,OAAO,EAAK,MAAgB,YAC9B,IAAO,EAAK,KAAc,WAAW,cAC5B,MAAS,UAAU,MAAS,aACrC,IAAO,MAAS,SAAS,WAAW,aAE/B;KACL;KACA,OAAO,OAAO,EAAK,EAAY,OAAQ,WACnC,WAAW,EAAK,EAAY,IAAI,GAC/B,EAAK,EAAY,OAAO;KAC9B;KACD;;EAIJ,IAAM,IAAiB,EAAQ;AAwB/B,SAvBA,IAAU,EAAQ,QAAO,MACvB,EAAK,SAAS,QACd,CAAC,MAAM,EAAK,MAAM,IAClB,EAAK,UAAU,KACf,EAAK,QAAQ,EACd,EAEG,EAAQ,WAAW,IAEnB,kBAAC,OAAD;GAAK,WAAU;GAAyE,OAAO,EAAE,WAAQ;aACvG,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAsC;KAAmB,CAAA,EACxE,kBAAC,OAAD;KAAK,WAAU;eACZ,IAAiB,IACd,gBAAgB,EAAe,yCAC/B;KAEA,CAAA,CACF;;GACF,CAAA,GAKR,kBAAC,GAAD;GAAwB;aACtB,kBAAC,GAAD;IAAkB,oBAAoB;cAAtC;KACE,kBAAC,GAAD;MACE,MAAM;MACN,IAAG;MACH,IAAG;MACH,aAAa,EAAkB,gBAAgB,OAAuC,KAAA,IAAhC,EAAkB;MACxE,aAAY;MACZ,SAAQ;MACR,OAAQ,EAAkB,aAExB,KAAA,KAFsC,EAAE,SAAM,iBAC9C,GAAG,EAAK,KAAK,KAAW,KAAK,KAAK,QAAQ,EAAE,CAAC;MAE/C,QAAQ,IAAe,YAAY,KAAA;MACnC,UAAU,GAAgB,GAAgB,MAA4B;AACpE,OAAI,KAAoB,KAAgB,KACtC,EAAiB;QACf,WAAW;QACX,cAAc,EAAY;QAC1B,QAAQ,EAAU;QAClB,UAAU;SAAE,GAAG,EAAM;SAAS,GAAG,EAAM;SAAS;QAChD,aAAa;QACd,CAAC;;gBAIL,EAAQ,KAAK,GAAQ,MACpB,kBAAC,GAAD;OAEE,MAAO,GAAc,UAAU,EAAa,OAAO,IAAQ,EAAa,OAAO,WAAY,EAAa,IAAQ,EAAa;OAC7H,aAAa,IAAiB,MAAkB,EAAQ,GAAO,OAAO,IAAI,KAAO;OACjF,EAHK,QAAQ,IAGb,CACF;MACE,CAAA;KACL,EAAkB,eACjB,kBAAC,GAAD,EACE,WAAW,EAAkB,mBACxB,GAAY,MAAiB,CAAC,EAAgB,GAAO,EAAkB,gBAAgB,EAAE,EAAK,GAC/F,KAAA,GAEJ,CAAA;KAEH,EAAkB,cACjB,kBAAC,GAAD;MACE,cAAc;OAAE,UAAU;OAAQ,YAAY;OAAQ;MACtD,UAAS;MACT,UAAU;MACV,QAAO;MACP,OAAM;MACN,eAAc;MACd,eAAe,MAAM,EAAiB,OAAO,EAAE,SAAS,GAAG,CAAC;MAC5D,oBAAoB,EAAiB,KAAK;MAC1C,CAAA;KAEa;;GACJ,CAAA;UAEZ,GAAO;AAEd,SACE,kBAAC,OAAD;GAAK,WAAU;GAAuF,OAAO,EAAE,WAAQ;aACrH,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAsC;MAAqB,CAAA;KAC1E,kBAAC,OAAD;MAAK,WAAU;gBAAsB,aAAiB,QAAQ,EAAM,UAAU;MAAgC,CAAA;KAC9G,kBAAC,OAAD;MAAK,WAAU;gBAAgC;MAAsC,CAAA;KACjF;;GACF,CAAA;;EAGV"}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { n as e } from "./rolldown-runtime-CCl2IeXn.js";
|
|
2
|
-
import { D as t, S as n, n as r, x as i, y as a } from "./chart-activity-grid-DLktOINm.js";
|
|
3
|
-
import { c as o, l as s } from "./chart-area-BwYaflNk.js";
|
|
4
|
-
import c, { useState as l } from "react";
|
|
5
|
-
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
6
|
-
import { Legend as f, PolarAngleAxis as p, PolarGrid as m, PolarRadiusAxis as h, Radar as g, RadarChart as _ } from "recharts";
|
|
7
|
-
//#region src/client/components/charts/RadarChart.tsx
|
|
8
|
-
var v = /* @__PURE__ */ e({ default: () => y }), y = c.memo(function({ data: e, chartConfig: c, displayConfig: v = {}, queryObject: y, height: b = "100%", colorPalette: x }) {
|
|
9
|
-
let [S, C] = l(null);
|
|
10
|
-
try {
|
|
11
|
-
let l = {
|
|
12
|
-
showLegend: v?.showLegend ?? !0,
|
|
13
|
-
showTooltip: v?.showTooltip ?? !0,
|
|
14
|
-
showGrid: v?.showGrid ?? !0,
|
|
15
|
-
leftYAxisFormat: v?.leftYAxisFormat
|
|
16
|
-
};
|
|
17
|
-
if (!e || e.length === 0) return /* @__PURE__ */ u("div", {
|
|
18
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
19
|
-
style: { height: b },
|
|
20
|
-
children: /* @__PURE__ */ d("div", {
|
|
21
|
-
className: "dc:text-center",
|
|
22
|
-
children: [/* @__PURE__ */ u("div", {
|
|
23
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
24
|
-
children: "No data available"
|
|
25
|
-
}), /* @__PURE__ */ u("div", {
|
|
26
|
-
className: "dc:text-xs text-dc-text-secondary",
|
|
27
|
-
children: "No data points to display in radar chart"
|
|
28
|
-
})]
|
|
29
|
-
})
|
|
30
|
-
});
|
|
31
|
-
let w, T = [];
|
|
32
|
-
if (c?.xAxis && c?.yAxis) {
|
|
33
|
-
let { data: n, seriesKeys: r } = t(e, Array.isArray(c.xAxis) ? c.xAxis[0] : c.xAxis, Array.isArray(c.yAxis) ? c.yAxis : [c.yAxis], y, c.series || []);
|
|
34
|
-
w = n, T = r;
|
|
35
|
-
} else {
|
|
36
|
-
let t = e[0], r = Object.keys(t), a = r.find((e) => typeof t[e] == "string" || e.toLowerCase().includes("subject") || e.toLowerCase().includes("name") || e.toLowerCase().includes("category")) || r[0], o = r.filter((e) => typeof t[e] == "number" && e !== a);
|
|
37
|
-
if (o.length === 0) return /* @__PURE__ */ u("div", {
|
|
38
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
|
|
39
|
-
style: { height: b },
|
|
40
|
-
children: /* @__PURE__ */ d("div", {
|
|
41
|
-
className: "dc:text-center",
|
|
42
|
-
children: [/* @__PURE__ */ u("div", {
|
|
43
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
44
|
-
children: "Configuration Error"
|
|
45
|
-
}), /* @__PURE__ */ u("div", {
|
|
46
|
-
className: "dc:text-xs",
|
|
47
|
-
children: "No numeric fields found for radar chart values"
|
|
48
|
-
})]
|
|
49
|
-
})
|
|
50
|
-
});
|
|
51
|
-
if (a) {
|
|
52
|
-
let t = n(y, a);
|
|
53
|
-
w = e.map((e) => {
|
|
54
|
-
let n = { name: i(e[a], t) || String(e[a]) || "Unknown" };
|
|
55
|
-
return o.forEach((t) => {
|
|
56
|
-
let r = t.split(".").pop() || t;
|
|
57
|
-
n[r] = typeof e[t] == "string" ? parseFloat(e[t]) : e[t] || 0;
|
|
58
|
-
}), n;
|
|
59
|
-
}), T = o.map((e) => e.split(".").pop() || e);
|
|
60
|
-
} else w = e.map((e) => ({
|
|
61
|
-
name: String(e[r[0]] || "Unknown"),
|
|
62
|
-
value: typeof e[o[0]] == "string" ? parseFloat(e[o[0]]) : e[o[0]] || 0
|
|
63
|
-
})), T = ["value"];
|
|
64
|
-
}
|
|
65
|
-
return !w || w.length === 0 ? /* @__PURE__ */ u("div", {
|
|
66
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
67
|
-
style: { height: b },
|
|
68
|
-
children: /* @__PURE__ */ d("div", {
|
|
69
|
-
className: "dc:text-center",
|
|
70
|
-
children: [/* @__PURE__ */ u("div", {
|
|
71
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
72
|
-
children: "No valid data"
|
|
73
|
-
}), /* @__PURE__ */ u("div", {
|
|
74
|
-
className: "dc:text-xs text-dc-text-secondary",
|
|
75
|
-
children: "No valid data points for radar chart after transformation"
|
|
76
|
-
})]
|
|
77
|
-
})
|
|
78
|
-
}) : /* @__PURE__ */ u(s, {
|
|
79
|
-
height: b,
|
|
80
|
-
children: /* @__PURE__ */ d(_, {
|
|
81
|
-
data: w,
|
|
82
|
-
margin: {
|
|
83
|
-
top: 20,
|
|
84
|
-
right: 80,
|
|
85
|
-
bottom: 20,
|
|
86
|
-
left: 80
|
|
87
|
-
},
|
|
88
|
-
accessibilityLayer: !1,
|
|
89
|
-
children: [
|
|
90
|
-
l.showGrid && /* @__PURE__ */ u(m, {}),
|
|
91
|
-
/* @__PURE__ */ u(p, {
|
|
92
|
-
dataKey: "name",
|
|
93
|
-
tick: { fontSize: 12 },
|
|
94
|
-
className: "text-dc-text-muted"
|
|
95
|
-
}),
|
|
96
|
-
/* @__PURE__ */ u(h, {
|
|
97
|
-
tick: { fontSize: 10 },
|
|
98
|
-
className: "text-dc-text-muted",
|
|
99
|
-
tickFormatter: l.leftYAxisFormat ? (e) => a(e, l.leftYAxisFormat) : void 0
|
|
100
|
-
}),
|
|
101
|
-
l.showTooltip && /* @__PURE__ */ u(o, { formatter: l.leftYAxisFormat ? (e, t) => [a(e, l.leftYAxisFormat), t] : void 0 }),
|
|
102
|
-
l.showLegend && T.length > 1 && /* @__PURE__ */ u(f, {
|
|
103
|
-
wrapperStyle: {
|
|
104
|
-
fontSize: "12px",
|
|
105
|
-
paddingTop: "10px"
|
|
106
|
-
},
|
|
107
|
-
iconType: "rect",
|
|
108
|
-
iconSize: 8,
|
|
109
|
-
layout: "horizontal",
|
|
110
|
-
align: "center",
|
|
111
|
-
verticalAlign: "bottom",
|
|
112
|
-
onMouseEnter: (e) => C(String(e.dataKey || "")),
|
|
113
|
-
onMouseLeave: () => C(null)
|
|
114
|
-
}),
|
|
115
|
-
T.map((e, t) => /* @__PURE__ */ u(g, {
|
|
116
|
-
name: e,
|
|
117
|
-
dataKey: e,
|
|
118
|
-
stroke: x?.colors && x.colors[t % x.colors.length] || r[t % r.length],
|
|
119
|
-
fill: x?.colors && x.colors[t % x.colors.length] || r[t % r.length],
|
|
120
|
-
fillOpacity: S ? S === e ? .6 : .1 : .3,
|
|
121
|
-
strokeOpacity: S ? S === e ? 1 : .3 : 1,
|
|
122
|
-
strokeWidth: 2
|
|
123
|
-
}, e))
|
|
124
|
-
]
|
|
125
|
-
})
|
|
126
|
-
});
|
|
127
|
-
} catch (e) {
|
|
128
|
-
return /* @__PURE__ */ u("div", {
|
|
129
|
-
className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
|
|
130
|
-
style: { height: b },
|
|
131
|
-
children: /* @__PURE__ */ d("div", {
|
|
132
|
-
className: "dc:text-center",
|
|
133
|
-
children: [
|
|
134
|
-
/* @__PURE__ */ u("div", {
|
|
135
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
136
|
-
children: "Radar Chart Error"
|
|
137
|
-
}),
|
|
138
|
-
/* @__PURE__ */ u("div", {
|
|
139
|
-
className: "dc:text-xs dc:mb-2",
|
|
140
|
-
children: e instanceof Error ? e.message : "Unknown rendering error"
|
|
141
|
-
}),
|
|
142
|
-
/* @__PURE__ */ u("div", {
|
|
143
|
-
className: "dc:text-xs text-dc-text-muted",
|
|
144
|
-
children: "Check the data and configuration"
|
|
145
|
-
})
|
|
146
|
-
]
|
|
147
|
-
})
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
//#endregion
|
|
152
|
-
export { v as n, y as t };
|
|
153
|
-
|
|
154
|
-
//# sourceMappingURL=chart-radar-gG3zfLud.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-radar-gG3zfLud.js","names":[],"sources":["../../../src/client/components/charts/RadarChart.tsx"],"sourcesContent":["import React, { 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, formatAxisValue } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nconst RadarChart = React.memo(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 leftYAxisFormat: displayConfig?.leftYAxisFormat\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in 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=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">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=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No valid data</div>\n <div className=\"dc: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 }} accessibilityLayer={false}>\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 tickFormatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any) => formatAxisValue(value, safeDisplayConfig.leftYAxisFormat)\n : undefined\n }\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any, name: string) => [formatAxisValue(value, safeDisplayConfig.leftYAxisFormat), name]\n : undefined\n }\n />\n )}\n {(safeDisplayConfig.showLegend && 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=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Radar Chart Error</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n})\n\nexport default RadarChart"],"mappings":"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"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { n as e } from "./rolldown-runtime-CCl2IeXn.js";
|
|
2
|
-
import { S as t, n, x as r, y as i } from "./chart-activity-grid-DLktOINm.js";
|
|
3
|
-
import { c as a, l as o } from "./chart-area-BwYaflNk.js";
|
|
4
|
-
import s, { useState as c } from "react";
|
|
5
|
-
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
6
|
-
import { Cell as d, Legend as f, RadialBar as p, RadialBarChart as m } from "recharts";
|
|
7
|
-
//#region src/client/components/charts/RadialBarChart.tsx
|
|
8
|
-
var h = /* @__PURE__ */ e({ default: () => g }), g = s.memo(function({ data: e, chartConfig: s, displayConfig: h = {}, queryObject: g, height: _ = "100%", colorPalette: v }) {
|
|
9
|
-
let [y, b] = c(null);
|
|
10
|
-
try {
|
|
11
|
-
let c = {
|
|
12
|
-
showLegend: h?.showLegend ?? !0,
|
|
13
|
-
showTooltip: h?.showTooltip ?? !0,
|
|
14
|
-
leftYAxisFormat: h?.leftYAxisFormat
|
|
15
|
-
};
|
|
16
|
-
if (!e || e.length === 0) return /* @__PURE__ */ l("div", {
|
|
17
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
18
|
-
style: { height: _ },
|
|
19
|
-
children: /* @__PURE__ */ u("div", {
|
|
20
|
-
className: "dc:text-center",
|
|
21
|
-
children: [/* @__PURE__ */ l("div", {
|
|
22
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
23
|
-
children: "No data available"
|
|
24
|
-
}), /* @__PURE__ */ l("div", {
|
|
25
|
-
className: "dc:text-xs text-dc-text-secondary",
|
|
26
|
-
children: "No data points to display in radial bar chart"
|
|
27
|
-
})]
|
|
28
|
-
})
|
|
29
|
-
});
|
|
30
|
-
let x;
|
|
31
|
-
if (s?.xAxis && s?.yAxis) {
|
|
32
|
-
let i = Array.isArray(s.xAxis) ? s.xAxis[0] : s.xAxis, a = Array.isArray(s.yAxis) ? s.yAxis[0] : s.yAxis, o = t(g, i);
|
|
33
|
-
x = e.map((e, t) => ({
|
|
34
|
-
name: r(e[i], o) || String(e[i]) || "Unknown",
|
|
35
|
-
value: typeof e[a] == "string" ? parseFloat(e[a]) : e[a] || 0,
|
|
36
|
-
fill: v?.colors && v.colors[t % v.colors.length] || n[t % n.length]
|
|
37
|
-
}));
|
|
38
|
-
} else {
|
|
39
|
-
let t = e[0], r = Object.keys(t), i = r.find((e) => typeof t[e] == "string" || e.toLowerCase().includes("name") || e.toLowerCase().includes("label") || e.toLowerCase().includes("category")) || r[0], a = r.find((e) => typeof t[e] == "number" && e !== i) || r[1];
|
|
40
|
-
if (!a) return /* @__PURE__ */ l("div", {
|
|
41
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
|
|
42
|
-
style: { height: _ },
|
|
43
|
-
children: /* @__PURE__ */ u("div", {
|
|
44
|
-
className: "dc:text-center",
|
|
45
|
-
children: [/* @__PURE__ */ l("div", {
|
|
46
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
47
|
-
children: "Configuration Error"
|
|
48
|
-
}), /* @__PURE__ */ l("div", {
|
|
49
|
-
className: "dc:text-xs",
|
|
50
|
-
children: "No numeric field found for radial bar chart values"
|
|
51
|
-
})]
|
|
52
|
-
})
|
|
53
|
-
});
|
|
54
|
-
x = e.map((e, t) => {
|
|
55
|
-
let r = e[i];
|
|
56
|
-
return r = typeof r == "boolean" ? r ? "Active" : "Inactive" : r === "true" || r === "false" ? r === "true" ? "Active" : "Inactive" : String(r), {
|
|
57
|
-
name: r,
|
|
58
|
-
value: typeof e[a] == "string" ? parseFloat(e[a]) : e[a] || 0,
|
|
59
|
-
fill: v?.colors && v.colors[t % v.colors.length] || n[t % n.length]
|
|
60
|
-
};
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
return x = x.filter((e) => e.value != null && e.value !== 0), x.length === 0 ? /* @__PURE__ */ l("div", {
|
|
64
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
65
|
-
style: { height: _ },
|
|
66
|
-
children: /* @__PURE__ */ u("div", {
|
|
67
|
-
className: "dc:text-center",
|
|
68
|
-
children: [/* @__PURE__ */ l("div", {
|
|
69
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
70
|
-
children: "No valid data"
|
|
71
|
-
}), /* @__PURE__ */ l("div", {
|
|
72
|
-
className: "dc:text-xs text-dc-text-secondary",
|
|
73
|
-
children: "No valid data points for radial bar chart after transformation"
|
|
74
|
-
})]
|
|
75
|
-
})
|
|
76
|
-
}) : /* @__PURE__ */ l(o, {
|
|
77
|
-
height: _,
|
|
78
|
-
children: /* @__PURE__ */ u(m, {
|
|
79
|
-
data: x,
|
|
80
|
-
innerRadius: "10%",
|
|
81
|
-
outerRadius: "80%",
|
|
82
|
-
margin: {
|
|
83
|
-
top: 20,
|
|
84
|
-
right: 30,
|
|
85
|
-
bottom: 20,
|
|
86
|
-
left: 30
|
|
87
|
-
},
|
|
88
|
-
accessibilityLayer: !1,
|
|
89
|
-
children: [
|
|
90
|
-
c.showTooltip && /* @__PURE__ */ l(a, { formatter: c.leftYAxisFormat ? (e, t) => [i(e, c.leftYAxisFormat), t] : void 0 }),
|
|
91
|
-
c.showLegend && /* @__PURE__ */ l(f, {
|
|
92
|
-
wrapperStyle: {
|
|
93
|
-
fontSize: "12px",
|
|
94
|
-
paddingTop: "10px"
|
|
95
|
-
},
|
|
96
|
-
iconType: "circle",
|
|
97
|
-
iconSize: 8,
|
|
98
|
-
layout: "horizontal",
|
|
99
|
-
align: "center",
|
|
100
|
-
verticalAlign: "bottom",
|
|
101
|
-
onMouseEnter: (e) => b(String(e.value || "")),
|
|
102
|
-
onMouseLeave: () => b(null)
|
|
103
|
-
}),
|
|
104
|
-
/* @__PURE__ */ l(p, {
|
|
105
|
-
dataKey: "value",
|
|
106
|
-
cornerRadius: 4,
|
|
107
|
-
label: {
|
|
108
|
-
position: "insideStart",
|
|
109
|
-
fill: "#fff",
|
|
110
|
-
fontSize: 12,
|
|
111
|
-
formatter: c.leftYAxisFormat ? (e) => i(e, c.leftYAxisFormat) : void 0
|
|
112
|
-
},
|
|
113
|
-
children: x.map((e, t) => /* @__PURE__ */ l(d, {
|
|
114
|
-
fill: e.fill,
|
|
115
|
-
fillOpacity: y ? y === e.name ? 1 : .3 : 1
|
|
116
|
-
}, `cell-${t}`))
|
|
117
|
-
})
|
|
118
|
-
]
|
|
119
|
-
})
|
|
120
|
-
});
|
|
121
|
-
} catch (e) {
|
|
122
|
-
return /* @__PURE__ */ l("div", {
|
|
123
|
-
className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
|
|
124
|
-
style: { height: _ },
|
|
125
|
-
children: /* @__PURE__ */ u("div", {
|
|
126
|
-
className: "dc:text-center",
|
|
127
|
-
children: [
|
|
128
|
-
/* @__PURE__ */ l("div", {
|
|
129
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
130
|
-
children: "Radial Bar Chart Error"
|
|
131
|
-
}),
|
|
132
|
-
/* @__PURE__ */ l("div", {
|
|
133
|
-
className: "dc:text-xs dc:mb-2",
|
|
134
|
-
children: e instanceof Error ? e.message : "Unknown rendering error"
|
|
135
|
-
}),
|
|
136
|
-
/* @__PURE__ */ l("div", {
|
|
137
|
-
className: "dc:text-xs text-dc-text-muted",
|
|
138
|
-
children: "Check the data and configuration"
|
|
139
|
-
})
|
|
140
|
-
]
|
|
141
|
-
})
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
//#endregion
|
|
146
|
-
export { h as n, g as t };
|
|
147
|
-
|
|
148
|
-
//# sourceMappingURL=chart-radial-bar-C2IPCV8c.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-radial-bar-C2IPCV8c.js","names":[],"sources":["../../../src/client/components/charts/RadialBarChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { RadialBarChart as RechartsRadialBarChart, RadialBar, Legend, Cell } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, formatAxisValue } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nconst RadialBarChart = React.memo(function RadialBarChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n leftYAxisFormat: displayConfig?.leftYAxisFormat\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in 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=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">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=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No valid data</div>\n <div className=\"dc: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 accessibilityLayer={false}\n >\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any, name: string) => [formatAxisValue(value, safeDisplayConfig.leftYAxisFormat), name]\n : undefined\n }\n />\n )}\n {safeDisplayConfig.showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.value || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n <RadialBar\n dataKey=\"value\"\n cornerRadius={4}\n label={{\n position: 'insideStart',\n fill: '#fff',\n fontSize: 12,\n formatter: safeDisplayConfig.leftYAxisFormat\n ? (value: any) => formatAxisValue(value, safeDisplayConfig.leftYAxisFormat)\n : undefined\n }}\n >\n {radialData.map((entry, index) => (\n <Cell \n key={`cell-${index}`} \n fill={entry.fill}\n fillOpacity={hoveredLegend ? (hoveredLegend === entry.name ? 1 : 0.3) : 1}\n />\n ))}\n </RadialBar>\n </RechartsRadialBarChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'RadialBarChart rendering error\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Radial Bar Chart Error</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n})\n\nexport default RadialBarChart"],"mappings":"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"}
|