drizzle-cube 0.4.53 → 0.5.1
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 +109 -96
- package/dist/adapters/fastify/index.cjs +2 -2
- package/dist/adapters/fastify/index.js +148 -134
- 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 +103 -99
- package/dist/adapters/{compiler-S6KHiOY6.js → locale-DTnJrxm1.js} +1700 -1563
- 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.d.ts +7 -3
- package/dist/adapters/mcp-tools.js +27 -27
- package/dist/adapters/mcp-transport-C7VLf4T5.js +579 -0
- package/dist/adapters/mcp-transport-poPHl_2j.cjs +39 -0
- package/dist/adapters/mcp-transport.d.ts +25 -2
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +152 -132
- 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 +45 -2
- 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 +40 -36
- package/dist/server/index.cjs +42 -40
- package/dist/server/index.js +3311 -1672
- package/package.json +5 -2
- package/dist/adapters/compiler-CRgLzmSn.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,24 +1,24 @@
|
|
|
1
1
|
import { n as e } from "./rolldown-runtime-CCl2IeXn.js";
|
|
2
|
-
import { n as t } from "./chart-sankey-
|
|
3
|
-
import { n } from "./chart-activity-grid-
|
|
4
|
-
import
|
|
5
|
-
import { jsx as
|
|
6
|
-
import { ResponsiveContainer as
|
|
2
|
+
import { n as t } from "./chart-sankey-WwkZAhLy.js";
|
|
3
|
+
import { k as n, n as r } from "./chart-activity-grid-CWT0gLv4.js";
|
|
4
|
+
import i, { useEffect as a, useMemo as o, useRef as s, useState as c } from "react";
|
|
5
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
6
|
+
import { ResponsiveContainer as d, SunburstChart as f, Tooltip as p } from "recharts";
|
|
7
7
|
//#region src/client/components/charts/SunburstChart.tsx
|
|
8
|
-
var
|
|
9
|
-
function
|
|
8
|
+
var m = /* @__PURE__ */ e({ default: () => v });
|
|
9
|
+
function h(e) {
|
|
10
10
|
if (!e || e.length === 0) return null;
|
|
11
11
|
if (t(e[0])) return e[0];
|
|
12
12
|
if (t(e)) return e;
|
|
13
13
|
let n = e;
|
|
14
14
|
return n.nodes && n.links ? n : null;
|
|
15
15
|
}
|
|
16
|
-
function
|
|
17
|
-
let { nodes:
|
|
18
|
-
if (!
|
|
19
|
-
let a =
|
|
16
|
+
function g(e, t) {
|
|
17
|
+
let { nodes: n, links: i } = e;
|
|
18
|
+
if (!n || n.length === 0) return null;
|
|
19
|
+
let a = n.filter((e) => e.layer >= 0);
|
|
20
20
|
if (a.length === 0) return null;
|
|
21
|
-
let o = t ||
|
|
21
|
+
let o = t || r, s = [...new Set(a.map((e) => e.name))], c = /* @__PURE__ */ new Map();
|
|
22
22
|
s.forEach((e, t) => {
|
|
23
23
|
c.set(e, o[t % o.length]);
|
|
24
24
|
});
|
|
@@ -76,46 +76,46 @@ function h(e, t) {
|
|
|
76
76
|
})
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
-
function
|
|
79
|
+
function _({ active: e, payload: t }) {
|
|
80
80
|
if (!e || !t || t.length === 0) return null;
|
|
81
81
|
let n = t[0].payload;
|
|
82
|
-
return /* @__PURE__ */
|
|
82
|
+
return /* @__PURE__ */ u("div", {
|
|
83
83
|
className: "bg-dc-surface dc:border border-dc-border dc:rounded-md dc:px-3 dc:py-2 dc:shadow-lg dc:text-sm",
|
|
84
|
-
children: [/* @__PURE__ */
|
|
84
|
+
children: [/* @__PURE__ */ l("div", {
|
|
85
85
|
className: "dc:font-medium text-dc-text",
|
|
86
86
|
children: n.originalName || n.name
|
|
87
|
-
}), n.value !== void 0 && /* @__PURE__ */
|
|
87
|
+
}), n.value !== void 0 && /* @__PURE__ */ u("div", {
|
|
88
88
|
className: "text-dc-text-secondary dc:mt-1",
|
|
89
|
-
children: [/* @__PURE__ */
|
|
89
|
+
children: [/* @__PURE__ */ l("span", {
|
|
90
90
|
className: "dc:font-medium",
|
|
91
91
|
children: n.value.toLocaleString()
|
|
92
92
|
}), " entities"]
|
|
93
93
|
})]
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
|
-
var
|
|
97
|
-
let
|
|
96
|
+
var v = i.memo(function({ data: e, height: t = "100%", colorPalette: i, displayConfig: m }) {
|
|
97
|
+
let { t: v } = n(), y = s(null), [b, x] = c({
|
|
98
98
|
width: 400,
|
|
99
99
|
height: 400
|
|
100
100
|
});
|
|
101
|
-
|
|
101
|
+
a(() => {
|
|
102
102
|
let e = () => {
|
|
103
|
-
|
|
104
|
-
width:
|
|
105
|
-
height:
|
|
103
|
+
y.current && x({
|
|
104
|
+
width: y.current.offsetWidth,
|
|
105
|
+
height: y.current.offsetHeight
|
|
106
106
|
});
|
|
107
107
|
};
|
|
108
108
|
e(), window.addEventListener("resize", e);
|
|
109
109
|
let t = new ResizeObserver(e);
|
|
110
|
-
return
|
|
110
|
+
return y.current && t.observe(y.current), () => {
|
|
111
111
|
window.removeEventListener("resize", e), t.disconnect();
|
|
112
112
|
};
|
|
113
113
|
}, []);
|
|
114
|
-
let
|
|
115
|
-
let t =
|
|
116
|
-
return t ?
|
|
117
|
-
}, [e,
|
|
118
|
-
let t =
|
|
114
|
+
let S = m, C = S?.innerRadius ?? 40, w = o(() => {
|
|
115
|
+
let t = h(e || []);
|
|
116
|
+
return t ? g(t, i?.colors || r) : null;
|
|
117
|
+
}, [e, i]), T = o(() => {
|
|
118
|
+
let t = h(e || []);
|
|
119
119
|
if (!t) return null;
|
|
120
120
|
let n = t.nodes.filter((e) => e.layer >= 0), r = t.links.filter((e) => {
|
|
121
121
|
let n = t.nodes.find((t) => t.id === e.source);
|
|
@@ -127,84 +127,84 @@ var _ = r.memo(function({ data: e, height: t = "100%", colorPalette: r, displayC
|
|
|
127
127
|
totalEntities: i
|
|
128
128
|
};
|
|
129
129
|
}, [e]);
|
|
130
|
-
if (!e || e.length === 0 || !
|
|
130
|
+
if (!e || e.length === 0 || !w) return /* @__PURE__ */ l("div", {
|
|
131
131
|
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
132
132
|
style: { height: t },
|
|
133
|
-
children: /* @__PURE__ */
|
|
133
|
+
children: /* @__PURE__ */ u("div", {
|
|
134
134
|
className: "dc:text-center",
|
|
135
|
-
children: [/* @__PURE__ */
|
|
135
|
+
children: [/* @__PURE__ */ l("div", {
|
|
136
136
|
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
137
|
-
children: "
|
|
138
|
-
}), /* @__PURE__ */
|
|
137
|
+
children: v("chart.runtime.flow.noData")
|
|
138
|
+
}), /* @__PURE__ */ l("div", {
|
|
139
139
|
className: "dc:text-xs text-dc-text-secondary",
|
|
140
|
-
children: "
|
|
140
|
+
children: v("chart.runtime.noDataHint.flow")
|
|
141
141
|
})]
|
|
142
142
|
})
|
|
143
143
|
});
|
|
144
|
-
let
|
|
145
|
-
return /* @__PURE__ */
|
|
144
|
+
let E = Math.max(Math.min(b.width, b.height) / 2 - 40, 100), D = w.originalName || w.name, O = w.value;
|
|
145
|
+
return /* @__PURE__ */ u("div", {
|
|
146
146
|
className: "dc:relative dc:w-full dc:h-full dc:flex dc:flex-col",
|
|
147
147
|
style: { height: t },
|
|
148
|
-
children: [/* @__PURE__ */
|
|
149
|
-
ref:
|
|
148
|
+
children: [/* @__PURE__ */ u("div", {
|
|
149
|
+
ref: y,
|
|
150
150
|
className: "dc:flex-1 dc:min-h-0 dc:relative",
|
|
151
|
-
children: [/* @__PURE__ */
|
|
151
|
+
children: [/* @__PURE__ */ l(d, {
|
|
152
152
|
width: "100%",
|
|
153
153
|
height: "100%",
|
|
154
|
-
children: /* @__PURE__ */
|
|
155
|
-
data:
|
|
154
|
+
children: /* @__PURE__ */ l(f, {
|
|
155
|
+
data: w,
|
|
156
156
|
dataKey: "value",
|
|
157
|
-
innerRadius:
|
|
158
|
-
outerRadius:
|
|
157
|
+
innerRadius: C,
|
|
158
|
+
outerRadius: E,
|
|
159
159
|
stroke: "var(--dc-bg)",
|
|
160
|
-
children: /* @__PURE__ */
|
|
160
|
+
children: /* @__PURE__ */ l(p, { content: /* @__PURE__ */ l(_, {}) })
|
|
161
161
|
})
|
|
162
|
-
}),
|
|
162
|
+
}), C > 0 && /* @__PURE__ */ l("div", {
|
|
163
163
|
className: "dc:absolute dc:inset-0 dc:flex dc:items-center dc:justify-center dc:pointer-events-none",
|
|
164
164
|
style: { zIndex: 10 },
|
|
165
|
-
children: /* @__PURE__ */
|
|
165
|
+
children: /* @__PURE__ */ u("div", {
|
|
166
166
|
className: "dc:text-center",
|
|
167
|
-
children: [/* @__PURE__ */
|
|
167
|
+
children: [/* @__PURE__ */ l("div", {
|
|
168
168
|
className: "dc:text-sm dc:font-semibold text-dc-text",
|
|
169
|
-
children:
|
|
170
|
-
}),
|
|
169
|
+
children: D
|
|
170
|
+
}), O !== void 0 && /* @__PURE__ */ l("div", {
|
|
171
171
|
className: "dc:text-xs text-dc-text-secondary",
|
|
172
|
-
children:
|
|
172
|
+
children: O.toLocaleString()
|
|
173
173
|
})]
|
|
174
174
|
})
|
|
175
175
|
})]
|
|
176
|
-
}), !
|
|
176
|
+
}), !S?.hideSummaryFooter && T && /* @__PURE__ */ l("div", {
|
|
177
177
|
className: "dc:flex-shrink-0 dc:px-4 dc:py-2 dc:border-t border-dc-border bg-dc-surface-secondary",
|
|
178
|
-
children: /* @__PURE__ */
|
|
178
|
+
children: /* @__PURE__ */ u("div", {
|
|
179
179
|
className: "dc:flex dc:items-center dc:justify-between dc:text-sm",
|
|
180
180
|
children: [
|
|
181
|
-
/* @__PURE__ */
|
|
181
|
+
/* @__PURE__ */ u("div", {
|
|
182
182
|
className: "text-dc-text-muted",
|
|
183
|
-
children: [/* @__PURE__ */
|
|
183
|
+
children: [/* @__PURE__ */ l("span", {
|
|
184
184
|
className: "dc:font-medium",
|
|
185
|
-
children:
|
|
185
|
+
children: T.nodeCount
|
|
186
186
|
}), " events (after)"]
|
|
187
187
|
}),
|
|
188
|
-
/* @__PURE__ */
|
|
188
|
+
/* @__PURE__ */ u("div", {
|
|
189
189
|
className: "text-dc-text",
|
|
190
190
|
children: [
|
|
191
|
-
/* @__PURE__ */
|
|
191
|
+
/* @__PURE__ */ l("span", {
|
|
192
192
|
className: "text-dc-text-muted",
|
|
193
|
-
children: "
|
|
193
|
+
children: v("chart.runtime.flow.paths")
|
|
194
194
|
}),
|
|
195
195
|
" ",
|
|
196
|
-
/* @__PURE__ */
|
|
196
|
+
/* @__PURE__ */ l("span", {
|
|
197
197
|
className: "dc:font-medium",
|
|
198
|
-
children:
|
|
198
|
+
children: T.linkCount
|
|
199
199
|
})
|
|
200
200
|
]
|
|
201
201
|
}),
|
|
202
|
-
/* @__PURE__ */
|
|
202
|
+
/* @__PURE__ */ u("div", {
|
|
203
203
|
className: "text-dc-text-muted",
|
|
204
204
|
children: [
|
|
205
|
-
/* @__PURE__ */
|
|
205
|
+
/* @__PURE__ */ l("span", {
|
|
206
206
|
className: "dc:font-medium",
|
|
207
|
-
children:
|
|
207
|
+
children: T.totalEntities.toLocaleString()
|
|
208
208
|
}),
|
|
209
209
|
" ",
|
|
210
210
|
"starting entities"
|
|
@@ -216,6 +216,6 @@ var _ = r.memo(function({ data: e, height: t = "100%", colorPalette: r, displayC
|
|
|
216
216
|
});
|
|
217
217
|
});
|
|
218
218
|
//#endregion
|
|
219
|
-
export {
|
|
219
|
+
export { m as t };
|
|
220
220
|
|
|
221
|
-
//# sourceMappingURL=chart-sunburst-
|
|
221
|
+
//# sourceMappingURL=chart-sunburst-CIDB_pTl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-sunburst-CIDB_pTl.js","names":[],"sources":["../../../src/client/components/charts/SunburstChart.tsx"],"sourcesContent":["/**\n * SunburstChart Component\n *\n * Visualizes flow data using a radial sunburst diagram showing paths from a starting step.\n * Works with the same data as SankeyChart but displays it as hierarchical rings.\n *\n * The chart displays:\n * - Center: Starting step (layer 0)\n * - Outward rings: Steps after the starting step (layers 1, 2, 3...)\n * - Values indicating count of entities following each path\n *\n * Note: Unlike Sankey, Sunburst only shows \"after\" steps for cleaner visualization.\n */\n\nimport React, { useMemo, useRef, useState, useEffect } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { SunburstChart as RechartsSunburst, ResponsiveContainer, Tooltip } from 'recharts'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport type { ChartProps } from '../../types'\nimport type { FlowChartData, SankeyNode, SankeyLink } from '../../types/flow'\nimport { isSankeyData } from '../../types/flow'\n\n/**\n * Hierarchical data structure for Recharts Sunburst\n */\ninterface SunburstNode {\n name: string\n value?: number\n fill?: string\n children?: SunburstNode[]\n /** Original event name (before path prefix was added) */\n originalName?: string\n}\n\n\n/**\n * Extract FlowChartData from various data formats\n */\nfunction extractFlowData(data: unknown[]): FlowChartData | null {\n if (!data || data.length === 0) return null\n\n // If first element is already FlowChartData (server returns as single-row array)\n if (isSankeyData(data[0])) {\n return data[0] as FlowChartData\n }\n\n // If data itself is FlowChartData shape\n if (isSankeyData(data)) {\n return data as unknown as FlowChartData\n }\n\n // Check if data is an array with nodes and links at top level\n const asAny = data as unknown as Record<string, unknown>\n if (asAny.nodes && asAny.links) {\n return asAny as unknown as FlowChartData\n }\n\n return null\n}\n\n/**\n * Transform FlowChartData (nodes + links) into hierarchical Sunburst format\n * Only includes layer 0 (starting) and positive layers (after steps)\n *\n * The transformation builds a tree where:\n * - Root = starting event(s) at layer 0\n * - Children = events linked from parent, following the flow\n * - Each path in the tree represents a unique user journey\n */\nfunction transformToSunburstFormat(\n data: FlowChartData,\n colorPalette?: string[]\n): SunburstNode | null {\n const { nodes, links } = data\n\n if (!nodes || nodes.length === 0) return null\n\n // Filter to only include layer 0 and positive layers (after steps)\n const afterNodes = nodes.filter((n) => n.layer >= 0)\n if (afterNodes.length === 0) return null\n\n // Use theme colors - either from palette or default CHART_COLORS\n const colors = colorPalette || CHART_COLORS\n\n // Get unique event names and create a color map\n // This ensures each event type gets a consistent, distinct color\n const uniqueNames = [...new Set(afterNodes.map((n) => n.name))]\n const colorMap = new Map<string, string>()\n uniqueNames.forEach((name, index) => {\n colorMap.set(name, colors[index % colors.length])\n })\n\n // Create a map of node IDs for quick lookup\n const nodeMap = new Map<string, SankeyNode>()\n afterNodes.forEach((node) => nodeMap.set(node.id, node))\n\n // Create a map of links from source to targets\n // Key: source node ID, Value: array of links from that source\n const linksBySource = new Map<string, SankeyLink[]>()\n links.forEach((link) => {\n // Only include links where source is in our afterNodes set\n if (!nodeMap.has(link.source)) return\n const sourceLinks = linksBySource.get(link.source) || []\n sourceLinks.push(link)\n linksBySource.set(link.source, sourceLinks)\n })\n\n // Find max layer for determining depth\n const maxLayer = Math.max(...afterNodes.map((n) => n.layer))\n\n // Counter for generating unique IDs\n let nodeCounter = 0\n\n /**\n * Recursively build children for a node by following outgoing links\n * Each link becomes a child node in the tree\n *\n * @param nodeId - The source node ID to build children from\n * @param currentLayer - Current layer depth\n * @param pathPrefix - Path from root to this node (for unique naming)\n */\n function buildChildren(nodeId: string, currentLayer: number, pathPrefix: string): SunburstNode[] {\n if (currentLayer >= maxLayer) return []\n\n const outgoingLinks = linksBySource.get(nodeId) || []\n if (outgoingLinks.length === 0) return []\n\n // Filter and map links to children\n const children: SunburstNode[] = []\n\n for (const link of outgoingLinks) {\n const targetNode = nodeMap.get(link.target)\n\n // Only include links to nodes in the next layer\n if (!targetNode || targetNode.layer !== currentLayer + 1) continue\n\n // Generate a unique name by including counter to avoid React key collisions\n nodeCounter++\n const uniqueName = `${targetNode.name}_${nodeCounter}`\n\n // Recursively build grandchildren with updated path\n const newPath = pathPrefix ? `${pathPrefix}→${targetNode.name}` : targetNode.name\n const grandchildren = buildChildren(link.target, currentLayer + 1, newPath)\n\n const child: SunburstNode = {\n name: uniqueName,\n originalName: targetNode.name,\n value: link.value,\n fill: colorMap.get(targetNode.name) || colors[0],\n }\n\n if (grandchildren.length > 0) {\n child.children = grandchildren\n }\n\n children.push(child)\n }\n\n return children\n }\n\n // Get starting nodes (layer 0)\n const startingNodes = afterNodes.filter((n) => n.layer === 0)\n if (startingNodes.length === 0) return null\n\n // Build the tree starting from layer 0 nodes\n if (startingNodes.length === 1) {\n // Single starting node - use it as root\n const startNode = startingNodes[0]\n const children = buildChildren(startNode.id, 0, startNode.name)\n\n const result: SunburstNode = {\n name: startNode.name,\n originalName: startNode.name,\n value: startNode.value || children.reduce((sum, c) => sum + (c.value || 0), 0),\n fill: colorMap.get(startNode.name) || colors[0],\n }\n\n if (children.length > 0) {\n result.children = children\n }\n\n return result\n }\n\n // Multiple starting nodes - create a virtual root\n const rootChildren = startingNodes.map((startNode, index) => {\n nodeCounter++\n const children = buildChildren(startNode.id, 0, startNode.name)\n\n const child: SunburstNode = {\n name: `${startNode.name}_root_${index}`,\n originalName: startNode.name,\n value: startNode.value || children.reduce((sum, c) => sum + (c.value || 0), 0),\n fill: colorMap.get(startNode.name) || colors[0],\n }\n\n if (children.length > 0) {\n child.children = children\n }\n\n return child\n })\n\n return {\n name: 'Start',\n originalName: 'Start',\n children: rootChildren,\n }\n}\n\n/**\n * Custom tooltip for Sunburst chart\n * Shows the original event name (not the unique key used internally)\n */\nfunction SunburstTooltip({\n active,\n payload,\n}: {\n active?: boolean\n payload?: Array<{ payload: SunburstNode }>\n}) {\n if (!active || !payload || payload.length === 0) return null\n\n const data = payload[0].payload\n // Use originalName if available, otherwise fall back to name\n const displayName = data.originalName || data.name\n\n return (\n <div className=\"bg-dc-surface dc:border border-dc-border dc:rounded-md dc:px-3 dc:py-2 dc:shadow-lg dc:text-sm\">\n <div className=\"dc:font-medium text-dc-text\">{displayName}</div>\n {data.value !== undefined && (\n <div className=\"text-dc-text-secondary dc:mt-1\">\n <span className=\"dc:font-medium\">{data.value.toLocaleString()}</span> entities\n </div>\n )}\n </div>\n )\n}\n\n/**\n * SunburstChart Component\n *\n * Renders a sunburst diagram visualization from FlowChartData.\n * Shows hierarchical flow paths radiating from a central starting step.\n */\nconst SunburstChart = React.memo(function SunburstChart({\n data,\n height = '100%',\n colorPalette,\n displayConfig,\n}: ChartProps) {\n const { t } = useTranslation()\n // Track chart area dimensions (not the full container which includes footer)\n const chartAreaRef = useRef<HTMLDivElement>(null)\n const [chartSize, setChartSize] = useState({ width: 400, height: 400 })\n\n useEffect(() => {\n const updateSize = () => {\n if (chartAreaRef.current) {\n setChartSize({\n width: chartAreaRef.current.offsetWidth,\n height: chartAreaRef.current.offsetHeight,\n })\n }\n }\n updateSize()\n window.addEventListener('resize', updateSize)\n\n // Use ResizeObserver for more accurate size tracking\n const resizeObserver = new ResizeObserver(updateSize)\n if (chartAreaRef.current) {\n resizeObserver.observe(chartAreaRef.current)\n }\n\n return () => {\n window.removeEventListener('resize', updateSize)\n resizeObserver.disconnect()\n }\n }, [])\n\n // Get display config options\n const displayConfigAny = displayConfig as Record<string, unknown> | undefined\n const innerRadius = (displayConfigAny?.innerRadius as number) ?? 40\n\n // Extract and transform data\n const sunburstData = useMemo(() => {\n const extracted = extractFlowData(data || [])\n if (!extracted) return null\n\n return transformToSunburstFormat(extracted, colorPalette?.colors || CHART_COLORS)\n }, [data, colorPalette])\n\n // Calculate summary stats from original flow data\n const summaryStats = useMemo(() => {\n const extracted = extractFlowData(data || [])\n if (!extracted) return null\n\n // Only count after nodes (layer >= 0)\n const afterNodes = extracted.nodes.filter((n) => n.layer >= 0)\n const afterLinks = extracted.links.filter((link) => {\n const sourceNode = extracted.nodes.find((n) => n.id === link.source)\n return sourceNode && sourceNode.layer >= 0\n })\n\n const totalEntities = extracted.nodes\n .filter((n) => n.layer === 0)\n .reduce((sum, n) => sum + (n.value || 0), 0)\n\n return {\n nodeCount: afterNodes.length,\n linkCount: afterLinks.length,\n totalEntities,\n }\n }, [data])\n\n // Handle no data\n if (!data || data.length === 0 || !sunburstData) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\"\n style={{ height }}\n >\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.flow.noData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">\n {t('chart.runtime.noDataHint.flow')}\n </div>\n </div>\n </div>\n )\n }\n\n // Calculate outer radius based on chart area size\n const minDimension = Math.min(chartSize.width, chartSize.height)\n const outerRadius = Math.max(minDimension / 2 - 40, 100)\n\n // Get root node info for center label\n const rootName = sunburstData.originalName || sunburstData.name\n const rootValue = sunburstData.value\n\n return (\n <div className=\"dc:relative dc:w-full dc:h-full dc:flex dc:flex-col\" style={{ height }}>\n {/* Sunburst Diagram */}\n <div ref={chartAreaRef} className=\"dc:flex-1 dc:min-h-0 dc:relative\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsSunburst\n data={sunburstData}\n dataKey=\"value\"\n innerRadius={innerRadius}\n outerRadius={outerRadius}\n stroke=\"var(--dc-bg)\"\n >\n <Tooltip content={<SunburstTooltip />} />\n </RechartsSunburst>\n </ResponsiveContainer>\n\n {/* Center label showing the root node (starting event) */}\n {innerRadius > 0 && (\n <div\n className=\"dc:absolute dc:inset-0 dc:flex dc:items-center dc:justify-center dc:pointer-events-none\"\n style={{ zIndex: 10 }}\n >\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold text-dc-text\">{rootName}</div>\n {rootValue !== undefined && (\n <div className=\"dc:text-xs text-dc-text-secondary\">\n {rootValue.toLocaleString()}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n\n {/* Summary Footer */}\n {!displayConfigAny?.hideSummaryFooter && summaryStats && (\n <div className=\"dc:flex-shrink-0 dc:px-4 dc:py-2 dc:border-t border-dc-border bg-dc-surface-secondary\">\n <div className=\"dc:flex dc:items-center dc:justify-between dc:text-sm\">\n <div className=\"text-dc-text-muted\">\n <span className=\"dc:font-medium\">{summaryStats.nodeCount}</span> events (after)\n </div>\n <div className=\"text-dc-text\">\n <span className=\"text-dc-text-muted\">{t('chart.runtime.flow.paths')}</span>{' '}\n <span className=\"dc:font-medium\">{summaryStats.linkCount}</span>\n </div>\n <div className=\"text-dc-text-muted\">\n <span className=\"dc:font-medium\">{summaryStats.totalEntities.toLocaleString()}</span>{' '}\n starting entities\n </div>\n </div>\n </div>\n )}\n </div>\n )\n})\n\nexport default SunburstChart\n"],"mappings":"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"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { n as e } from "./rolldown-runtime-CCl2IeXn.js";
|
|
2
|
+
import { S as t, _ as n, k as r, n as i, r as a, x as o, y as s } from "./chart-activity-grid-CWT0gLv4.js";
|
|
3
|
+
import { c, l } from "./chart-area-D63kG8OT.js";
|
|
4
|
+
import u, { useState as d } from "react";
|
|
5
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
6
|
+
import { Treemap as m } from "recharts";
|
|
7
|
+
import { scaleOrdinal as h, scaleQuantize as g } from "d3";
|
|
8
|
+
//#region src/client/components/charts/TreeMapChart.tsx
|
|
9
|
+
var _ = /* @__PURE__ */ e({ default: () => v }), v = u.memo(function({ data: e, chartConfig: u, displayConfig: _ = {}, queryObject: v, height: y = "100%", colorPalette: b, onDataPointClick: x, drillEnabled: S }) {
|
|
10
|
+
let { t: C } = r(), [w, T] = d(null), E = n();
|
|
11
|
+
try {
|
|
12
|
+
let n = {
|
|
13
|
+
showTooltip: _?.showTooltip ?? !0,
|
|
14
|
+
showLegend: _?.showLegend ?? !0,
|
|
15
|
+
leftYAxisFormat: _?.leftYAxisFormat
|
|
16
|
+
};
|
|
17
|
+
if (!e || e.length === 0) return /* @__PURE__ */ f("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__ */ p("div", {
|
|
21
|
+
className: "dc:text-center",
|
|
22
|
+
children: [/* @__PURE__ */ f("div", {
|
|
23
|
+
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
24
|
+
children: C("chart.runtime.noData")
|
|
25
|
+
}), /* @__PURE__ */ f("div", {
|
|
26
|
+
className: "dc:text-xs text-dc-text-secondary",
|
|
27
|
+
children: C("chart.runtime.noDataHint.treemap")
|
|
28
|
+
})]
|
|
29
|
+
})
|
|
30
|
+
});
|
|
31
|
+
let r, d = !1, D;
|
|
32
|
+
if (u?.xAxis && u?.yAxis) {
|
|
33
|
+
let n = Array.isArray(u.xAxis) ? u.xAxis[0] : u.xAxis, s = Array.isArray(u.yAxis) ? u.yAxis[0] : u.yAxis;
|
|
34
|
+
D = Array.isArray(u.series) ? u.series[0] : u.series;
|
|
35
|
+
let c = t(v, n);
|
|
36
|
+
if (D) {
|
|
37
|
+
let t = e.map((e) => {
|
|
38
|
+
let t = e[D];
|
|
39
|
+
return typeof t == "string" ? parseFloat(t) : t;
|
|
40
|
+
}).filter((e) => !isNaN(e));
|
|
41
|
+
if (d = t.length === e.length && t.every((e) => typeof e == "number"), d) {
|
|
42
|
+
let i = Math.min(...t), l = Math.max(...t), u = g().domain([i, l]).range(a);
|
|
43
|
+
r = e.map((e) => {
|
|
44
|
+
let t = u(typeof e[D] == "string" ? parseFloat(e[D]) : e[D]);
|
|
45
|
+
return {
|
|
46
|
+
name: o(e[n], c) || String(e[n]) || "Unknown",
|
|
47
|
+
size: typeof e[s] == "string" ? parseFloat(e[s]) : e[s] || 0,
|
|
48
|
+
fill: t,
|
|
49
|
+
series: String(e[D])
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
} else {
|
|
53
|
+
let t = [...new Set(e.map((e) => String(e[D])))], a = h().domain(t).range(b?.colors || i);
|
|
54
|
+
r = e.map((e) => ({
|
|
55
|
+
name: o(e[n], c) || String(e[n]) || "Unknown",
|
|
56
|
+
size: typeof e[s] == "string" ? parseFloat(e[s]) : e[s] || 0,
|
|
57
|
+
fill: a(String(e[D])),
|
|
58
|
+
series: String(e[D])
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
} else r = e.map((e, t) => ({
|
|
62
|
+
name: o(e[n], c) || String(e[n]) || "Unknown",
|
|
63
|
+
size: typeof e[s] == "string" ? parseFloat(e[s]) : e[s] || 0,
|
|
64
|
+
fill: b?.colors && b.colors[t % b.colors.length] || i[t % i.length]
|
|
65
|
+
}));
|
|
66
|
+
} else {
|
|
67
|
+
let t = e[0], n = Object.keys(t), a = n.find((e) => typeof t[e] == "string" || e.toLowerCase().includes("name") || e.toLowerCase().includes("label") || e.toLowerCase().includes("category")) || n[0], o = n.find((e) => e.toLowerCase().includes("size")) || n.find((e) => typeof t[e] == "number" && e !== a) || n[1];
|
|
68
|
+
if (!o) return /* @__PURE__ */ f("div", {
|
|
69
|
+
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
|
|
70
|
+
style: { height: y },
|
|
71
|
+
children: /* @__PURE__ */ p("div", {
|
|
72
|
+
className: "dc:text-center",
|
|
73
|
+
children: [/* @__PURE__ */ f("div", {
|
|
74
|
+
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
75
|
+
children: C("chart.runtime.configError")
|
|
76
|
+
}), /* @__PURE__ */ f("div", {
|
|
77
|
+
className: "dc:text-xs",
|
|
78
|
+
children: C("chart.runtime.configErrorHint.treemapNumeric")
|
|
79
|
+
})]
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
|
+
r = e.map((e, t) => {
|
|
83
|
+
let n = e[a];
|
|
84
|
+
return n = typeof n == "boolean" ? n ? "Active" : "Inactive" : n === "true" || n === "false" ? n === "true" ? "Active" : "Inactive" : String(n), {
|
|
85
|
+
name: n,
|
|
86
|
+
size: typeof e[o] == "string" ? parseFloat(e[o]) : e[o] || 0,
|
|
87
|
+
fill: b?.colors && b.colors[t % b.colors.length] || i[t % i.length]
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (r = r.filter((e) => e.size != null && e.size > 0), r.length === 0) return /* @__PURE__ */ f("div", {
|
|
92
|
+
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
93
|
+
style: { height: y },
|
|
94
|
+
children: /* @__PURE__ */ p("div", {
|
|
95
|
+
className: "dc:text-center",
|
|
96
|
+
children: [/* @__PURE__ */ f("div", {
|
|
97
|
+
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
98
|
+
children: C("chart.runtime.noValidData")
|
|
99
|
+
}), /* @__PURE__ */ f("div", {
|
|
100
|
+
className: "dc:text-xs text-dc-text-secondary",
|
|
101
|
+
children: "No valid data points for treemap chart after transformation"
|
|
102
|
+
})]
|
|
103
|
+
})
|
|
104
|
+
});
|
|
105
|
+
let O = (e) => {
|
|
106
|
+
let { x: t, y: a, width: o, height: c, index: l, name: d, size: m } = e;
|
|
107
|
+
return o < 20 || c < 20 ? null : /* @__PURE__ */ p("g", { children: [/* @__PURE__ */ f("rect", {
|
|
108
|
+
x: t,
|
|
109
|
+
y: a,
|
|
110
|
+
width: o,
|
|
111
|
+
height: c,
|
|
112
|
+
style: {
|
|
113
|
+
fill: r[l]?.fill || b?.colors && b.colors[l % b.colors.length] || i[l % i.length],
|
|
114
|
+
fillOpacity: w === null ? .8 : w === l ? 1 : .6,
|
|
115
|
+
stroke: "#fff",
|
|
116
|
+
strokeWidth: 2,
|
|
117
|
+
cursor: S ? "pointer" : "default",
|
|
118
|
+
pointerEvents: "all"
|
|
119
|
+
},
|
|
120
|
+
onMouseEnter: () => T(l),
|
|
121
|
+
onMouseLeave: () => T(null),
|
|
122
|
+
onClick: S && x ? (e) => {
|
|
123
|
+
e.stopPropagation();
|
|
124
|
+
let t = r[l];
|
|
125
|
+
t && x && x({
|
|
126
|
+
dataPoint: t,
|
|
127
|
+
clickedField: v?.measures?.[0] || u?.yAxis?.[0] || "",
|
|
128
|
+
xValue: d,
|
|
129
|
+
position: {
|
|
130
|
+
x: e.clientX,
|
|
131
|
+
y: e.clientY
|
|
132
|
+
},
|
|
133
|
+
nativeEvent: e
|
|
134
|
+
});
|
|
135
|
+
} : void 0
|
|
136
|
+
}), /* @__PURE__ */ f("foreignObject", {
|
|
137
|
+
x: t,
|
|
138
|
+
y: a,
|
|
139
|
+
width: o,
|
|
140
|
+
height: c,
|
|
141
|
+
style: {
|
|
142
|
+
pointerEvents: "none",
|
|
143
|
+
overflow: "visible"
|
|
144
|
+
},
|
|
145
|
+
children: /* @__PURE__ */ p("div", {
|
|
146
|
+
style: {
|
|
147
|
+
width: "100%",
|
|
148
|
+
height: "100%",
|
|
149
|
+
display: "flex",
|
|
150
|
+
flexDirection: "column",
|
|
151
|
+
alignItems: "center",
|
|
152
|
+
justifyContent: "center",
|
|
153
|
+
padding: "4px",
|
|
154
|
+
boxSizing: "border-box",
|
|
155
|
+
color: "#ffffff",
|
|
156
|
+
textShadow: "0 1px 2px rgba(0,0,0,0.8)",
|
|
157
|
+
fontFamily: "system-ui, -apple-system, sans-serif",
|
|
158
|
+
overflow: "hidden"
|
|
159
|
+
},
|
|
160
|
+
children: [o > 40 && c > 30 && /* @__PURE__ */ f("div", {
|
|
161
|
+
style: {
|
|
162
|
+
fontSize: `${Math.max(10, Math.min(o / 8, c / 8, 16))}px`,
|
|
163
|
+
fontWeight: "600",
|
|
164
|
+
textAlign: "center",
|
|
165
|
+
lineHeight: "1.2",
|
|
166
|
+
marginBottom: o > 60 && c > 45 ? "4px" : "0",
|
|
167
|
+
wordBreak: "break-word",
|
|
168
|
+
hyphens: "auto"
|
|
169
|
+
},
|
|
170
|
+
children: d
|
|
171
|
+
}), o > 60 && c > 45 && /* @__PURE__ */ f("div", {
|
|
172
|
+
style: {
|
|
173
|
+
fontSize: `${Math.max(8, Math.min(o / 10, c / 10, 14))}px`,
|
|
174
|
+
textAlign: "center",
|
|
175
|
+
opacity: .9
|
|
176
|
+
},
|
|
177
|
+
children: n.leftYAxisFormat ? s(m, n.leftYAxisFormat) : typeof m == "number" ? m.toLocaleString() : m
|
|
178
|
+
})]
|
|
179
|
+
})
|
|
180
|
+
})] });
|
|
181
|
+
}, k = r.some((e) => "series" in e) ? [...new Set(r.map((e) => e.series).filter(Boolean))] : [], A = [];
|
|
182
|
+
if (n.showLegend && D) if (d) {
|
|
183
|
+
let t = Math.min(...e.map((e) => {
|
|
184
|
+
let t = e[D];
|
|
185
|
+
return typeof t == "string" ? parseFloat(t) : t;
|
|
186
|
+
})), r = Math.max(...e.map((e) => {
|
|
187
|
+
let t = e[D];
|
|
188
|
+
return typeof t == "string" ? parseFloat(t) : t;
|
|
189
|
+
}));
|
|
190
|
+
A = a.map((e, i) => {
|
|
191
|
+
let o = i / (a.length - 1), c = t + (r - t) * o;
|
|
192
|
+
return {
|
|
193
|
+
value: n.leftYAxisFormat ? s(c, n.leftYAxisFormat) : c.toFixed(2),
|
|
194
|
+
type: "rect",
|
|
195
|
+
color: e
|
|
196
|
+
};
|
|
197
|
+
});
|
|
198
|
+
} else k.length > 1 && (A = k.map((e, t) => ({
|
|
199
|
+
value: e,
|
|
200
|
+
type: "rect",
|
|
201
|
+
color: i[t % i.length]
|
|
202
|
+
})));
|
|
203
|
+
let j = n.showLegend && A.length > 0;
|
|
204
|
+
return /* @__PURE__ */ p("div", {
|
|
205
|
+
className: "dc:w-full",
|
|
206
|
+
style: { height: j ? typeof y == "string" && y.includes("%") ? y : typeof y == "number" ? y + 60 : `calc(${y} + 60px)` : y },
|
|
207
|
+
children: [/* @__PURE__ */ f(l, {
|
|
208
|
+
height: j ? "calc(100% - 50px)" : "100%",
|
|
209
|
+
children: /* @__PURE__ */ f(m, {
|
|
210
|
+
data: r,
|
|
211
|
+
dataKey: "size",
|
|
212
|
+
aspectRatio: 4 / 3,
|
|
213
|
+
stroke: "#fff",
|
|
214
|
+
content: /* @__PURE__ */ f(O, {}),
|
|
215
|
+
children: n.showTooltip && /* @__PURE__ */ f(c, { formatter: n.leftYAxisFormat ? (e, t) => [s(e, n.leftYAxisFormat), t] : void 0 })
|
|
216
|
+
})
|
|
217
|
+
}), j && /* @__PURE__ */ f("div", {
|
|
218
|
+
className: "dc:flex dc:justify-center dc:items-center dc:mt-4 dc:pb-2",
|
|
219
|
+
children: d ? /* @__PURE__ */ p("div", {
|
|
220
|
+
className: "dc:flex dc:flex-col dc:items-center",
|
|
221
|
+
children: [/* @__PURE__ */ f("div", {
|
|
222
|
+
className: "dc:text-xs dc:font-semibold text-dc-text-primary dc:mb-2",
|
|
223
|
+
children: D ? E(D) : ""
|
|
224
|
+
}), /* @__PURE__ */ p("div", {
|
|
225
|
+
className: "dc:flex dc:items-center dc:gap-2",
|
|
226
|
+
children: [
|
|
227
|
+
/* @__PURE__ */ f("span", {
|
|
228
|
+
className: "dc:text-xs text-dc-text-muted",
|
|
229
|
+
children: n.leftYAxisFormat ? s(Math.min(...e.map((e) => {
|
|
230
|
+
let t = e[D];
|
|
231
|
+
return typeof t == "string" ? parseFloat(t) : t;
|
|
232
|
+
})), n.leftYAxisFormat) : Math.min(...e.map((e) => {
|
|
233
|
+
let t = e[D];
|
|
234
|
+
return typeof t == "string" ? parseFloat(t) : t;
|
|
235
|
+
})).toFixed(2)
|
|
236
|
+
}),
|
|
237
|
+
/* @__PURE__ */ f("div", {
|
|
238
|
+
className: "dc:h-4 dc:rounded-sm",
|
|
239
|
+
style: {
|
|
240
|
+
width: "200px",
|
|
241
|
+
background: `linear-gradient(to right, ${a.join(", ")})`
|
|
242
|
+
}
|
|
243
|
+
}),
|
|
244
|
+
/* @__PURE__ */ f("span", {
|
|
245
|
+
className: "dc:text-xs text-dc-text-muted",
|
|
246
|
+
children: n.leftYAxisFormat ? s(Math.max(...e.map((e) => {
|
|
247
|
+
let t = e[D];
|
|
248
|
+
return typeof t == "string" ? parseFloat(t) : t;
|
|
249
|
+
})), n.leftYAxisFormat) : Math.max(...e.map((e) => {
|
|
250
|
+
let t = e[D];
|
|
251
|
+
return typeof t == "string" ? parseFloat(t) : t;
|
|
252
|
+
})).toFixed(2)
|
|
253
|
+
})
|
|
254
|
+
]
|
|
255
|
+
})]
|
|
256
|
+
}) : /* @__PURE__ */ f("div", {
|
|
257
|
+
className: "dc:flex dc:flex-wrap dc:justify-center dc:gap-4",
|
|
258
|
+
children: A.map((e, t) => /* @__PURE__ */ p("div", {
|
|
259
|
+
className: "dc:flex dc:items-center dc:gap-2",
|
|
260
|
+
children: [/* @__PURE__ */ f("div", {
|
|
261
|
+
className: "dc:w-3 dc:h-3 rounded-xs",
|
|
262
|
+
style: { backgroundColor: e.color }
|
|
263
|
+
}), /* @__PURE__ */ f("span", {
|
|
264
|
+
className: "dc:text-xs text-dc-text-muted",
|
|
265
|
+
children: e.value
|
|
266
|
+
})]
|
|
267
|
+
}, t))
|
|
268
|
+
})
|
|
269
|
+
})]
|
|
270
|
+
});
|
|
271
|
+
} catch (e) {
|
|
272
|
+
return /* @__PURE__ */ f("div", {
|
|
273
|
+
className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
|
|
274
|
+
style: { height: y },
|
|
275
|
+
children: /* @__PURE__ */ p("div", {
|
|
276
|
+
className: "dc:text-center",
|
|
277
|
+
children: [
|
|
278
|
+
/* @__PURE__ */ f("div", {
|
|
279
|
+
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
280
|
+
children: C("chart.runtime.chartError", { chartType: "TreeMap Chart" })
|
|
281
|
+
}),
|
|
282
|
+
/* @__PURE__ */ f("div", {
|
|
283
|
+
className: "dc:text-xs dc:mb-2",
|
|
284
|
+
children: e instanceof Error ? e.message : C("chart.runtime.unknownError")
|
|
285
|
+
}),
|
|
286
|
+
/* @__PURE__ */ f("div", {
|
|
287
|
+
className: "dc:text-xs text-dc-text-muted",
|
|
288
|
+
children: C("chart.runtime.checkConfig")
|
|
289
|
+
})
|
|
290
|
+
]
|
|
291
|
+
})
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
//#endregion
|
|
296
|
+
export { _ as n, v as t };
|
|
297
|
+
|
|
298
|
+
//# sourceMappingURL=chart-tree-map-C5C2iaWM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-tree-map-C5C2iaWM.js","names":[],"sources":["../../../src/client/components/charts/TreeMapChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation'\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 onDataPointClick,\n drillEnabled\n}: ChartProps) {\n const { t } = useTranslation()\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=\"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\">{t('chart.runtime.noData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.noDataHint.treemap')}</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=\"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\">{t('chart.runtime.configError')}</div>\n <div className=\"dc:text-xs\">{t('chart.runtime.configErrorHint.treemapNumeric')}</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=\"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\">{t('chart.runtime.noValidData')}</div>\n <div className=\"dc: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 const handleClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n const cellData = treemapData[index]\n if (cellData && onDataPointClick) {\n // Use query measures for proper field name (chartConfig.yAxis may contain display labels)\n const measureField = queryObject?.measures?.[0] || chartConfig?.yAxis?.[0] || ''\n onDataPointClick({\n dataPoint: cellData,\n clickedField: measureField,\n xValue: name,\n position: { x: event.clientX, y: event.clientY },\n nativeEvent: event\n })\n }\n }\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: drillEnabled ? 'pointer' : 'default',\n pointerEvents: 'all' // Ensure rect captures click events\n }}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n onClick={drillEnabled && onDataPointClick ? handleClick : undefined}\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=\"dc: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=\"dc:flex dc:justify-center dc:items-center dc:mt-4 dc:pb-2\">\n {isNumericSeries ? (\n // Gradient legend for numeric series\n <div className=\"dc:flex dc:flex-col dc:items-center\">\n <div className=\"dc:text-xs dc:font-semibold text-dc-text-primary dc:mb-2\">\n {seriesField ? getFieldLabel(seriesField) : ''}\n </div>\n <div className=\"dc:flex dc:items-center dc:gap-2\">\n <span className=\"dc: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=\"dc:h-4 dc:rounded-sm\"\n style={{\n width: '200px',\n background: `linear-gradient(to right, ${CHART_COLORS_GRADIENT.join(', ')})`\n }}\n />\n <span className=\"dc: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=\"dc:flex dc:flex-wrap dc:justify-center dc:gap-4\">\n {legendPayload.map((item, index) => (\n <div key={index} className=\"dc:flex dc:items-center dc:gap-2\">\n <div\n className=\"dc:w-3 dc:h-3 rounded-xs\"\n style={{ backgroundColor: item.color }}\n />\n <span className=\"dc: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=\"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\">{t('chart.runtime.chartError', { chartType: 'TreeMap Chart' })}</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : t('chart.runtime.unknownError')}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">{t('chart.runtime.checkConfig')}</div>\n </div>\n </div>\n )\n }\n})\n\nexport default TreeMapChart"],"mappings":"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"}
|