drizzle-cube 0.4.53 → 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-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.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 +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
package/dist/client/chunks/{RetentionCombinedChart-DIhK5pD8.js → RetentionCombinedChart-BD8tGeM_.js}
RENAMED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { i as e,
|
|
2
|
-
import { c as
|
|
3
|
-
import { c as
|
|
4
|
-
import
|
|
5
|
-
import { jsx as
|
|
6
|
-
import { CartesianGrid as
|
|
1
|
+
import { i as e, k as t, n } from "./chart-activity-grid-CWT0gLv4.js";
|
|
2
|
+
import { c as r, l as i } from "./chart-area-D63kG8OT.js";
|
|
3
|
+
import { c as a } from "./retention-YhT1Oohi.js";
|
|
4
|
+
import o, { useMemo as s, useState as c } from "react";
|
|
5
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
6
|
+
import { CartesianGrid as d, ComposedChart as f, Legend as p, Line as m, XAxis as h, YAxis as g } from "recharts";
|
|
7
7
|
//#region src/client/components/charts/RetentionCombinedChart.tsx
|
|
8
|
-
function
|
|
8
|
+
function _(e) {
|
|
9
9
|
return `rgba(34, 197, 94, ${.1 + Math.max(0, Math.min(1, e)) * .7})`;
|
|
10
10
|
}
|
|
11
|
-
function
|
|
11
|
+
function v(e) {
|
|
12
12
|
return `${Math.round(e * 100)}%`;
|
|
13
13
|
}
|
|
14
|
-
function
|
|
14
|
+
function y(e, t) {
|
|
15
15
|
let n = t === "day" ? "Day" : t === "week" ? "Week" : t === "month" ? "Month" : "P";
|
|
16
16
|
return e === 0 ? t ? `< 1 ${n}` : "P0" : t ? `${n} ${e}` : `P${e}`;
|
|
17
17
|
}
|
|
18
|
-
function
|
|
18
|
+
function b(e) {
|
|
19
19
|
return "Total";
|
|
20
20
|
}
|
|
21
|
-
function
|
|
21
|
+
function x(e) {
|
|
22
22
|
return e ? `${e} Retention` : "Retention";
|
|
23
23
|
}
|
|
24
|
-
function
|
|
25
|
-
let a =
|
|
24
|
+
function S(e, t, n, r, i) {
|
|
25
|
+
let a = x(i);
|
|
26
26
|
return !n || n.length === 0 ? {
|
|
27
27
|
chartData: t.map((t) => {
|
|
28
28
|
let n = e.find((e) => e.period === t && !e.breakdownValue);
|
|
29
29
|
return {
|
|
30
30
|
period: t,
|
|
31
|
-
periodLabel:
|
|
31
|
+
periodLabel: y(t, r),
|
|
32
32
|
[a]: n ? n.retentionRate : null,
|
|
33
33
|
cohortSize: n?.cohortSize ?? 0,
|
|
34
34
|
retainedUsers: n?.retainedUsers ?? 0
|
|
@@ -40,7 +40,7 @@ function x(e, t, n, r, i) {
|
|
|
40
40
|
chartData: t.map((t) => {
|
|
41
41
|
let i = {
|
|
42
42
|
period: t,
|
|
43
|
-
periodLabel:
|
|
43
|
+
periodLabel: y(t, r)
|
|
44
44
|
};
|
|
45
45
|
return n.forEach((n) => {
|
|
46
46
|
let r = e.find((e) => e.period === t && e.breakdownValue === n);
|
|
@@ -51,12 +51,12 @@ function x(e, t, n, r, i) {
|
|
|
51
51
|
defaultSeriesName: a
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
-
var
|
|
55
|
-
let
|
|
56
|
-
if (!
|
|
57
|
-
if (
|
|
58
|
-
if (Array.isArray(
|
|
59
|
-
let e =
|
|
54
|
+
var C = o.memo(function({ data: o, height: x = "100%", displayConfig: C, colorPalette: w }) {
|
|
55
|
+
let { t: T } = t(), [E, D] = c(null), [O, k] = c(null), A = s(() => {
|
|
56
|
+
if (!o) return null;
|
|
57
|
+
if (a(o)) return o;
|
|
58
|
+
if (Array.isArray(o) && o.length > 0) {
|
|
59
|
+
let e = o, t = [...new Set(e.map((e) => e.period))].sort((e, t) => e - t), n = [...new Set(e.filter((e) => e.breakdownValue).map((e) => e.breakdownValue))];
|
|
60
60
|
return {
|
|
61
61
|
rows: e,
|
|
62
62
|
periods: t,
|
|
@@ -64,43 +64,43 @@ var S = a.memo(function({ data: a, height: b = "100%", displayConfig: S, colorPa
|
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
66
|
return null;
|
|
67
|
-
}, [
|
|
67
|
+
}, [o]), { chartData: j, seriesKeys: M, defaultSeriesName: N } = s(() => A ? S(A.rows, A.periods, A.breakdownValues, A.granularity, A.bindingKeyLabel) : {
|
|
68
68
|
chartData: [],
|
|
69
69
|
seriesKeys: [],
|
|
70
70
|
defaultSeriesName: "Retention"
|
|
71
|
-
}, [
|
|
72
|
-
if (!
|
|
71
|
+
}, [A]), P = b(A?.bindingKeyLabel), F = C?.retentionDisplayMode || "line", I = C?.showLegend ?? !0, L = C?.showGrid ?? !0, R = C?.showTooltip ?? !0;
|
|
72
|
+
if (!o || Array.isArray(o) && o.length === 0) return /* @__PURE__ */ l("div", {
|
|
73
73
|
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
74
|
-
style: { height:
|
|
75
|
-
children: /* @__PURE__ */
|
|
74
|
+
style: { height: x },
|
|
75
|
+
children: /* @__PURE__ */ u("div", {
|
|
76
76
|
className: "dc:text-center",
|
|
77
|
-
children: [/* @__PURE__ */
|
|
77
|
+
children: [/* @__PURE__ */ l("div", {
|
|
78
78
|
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
79
|
-
children: "
|
|
80
|
-
}), /* @__PURE__ */
|
|
79
|
+
children: T("chart.runtime.noData")
|
|
80
|
+
}), /* @__PURE__ */ l("div", {
|
|
81
81
|
className: "dc:text-xs text-dc-text-secondary",
|
|
82
|
-
children: "
|
|
82
|
+
children: T("chart.runtime.noDataHint.retention")
|
|
83
83
|
})]
|
|
84
84
|
})
|
|
85
85
|
});
|
|
86
|
-
if (!
|
|
86
|
+
if (!j || j.length === 0) return /* @__PURE__ */ l("div", {
|
|
87
87
|
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
88
|
-
style: { height:
|
|
89
|
-
children: /* @__PURE__ */
|
|
88
|
+
style: { height: x },
|
|
89
|
+
children: /* @__PURE__ */ u("div", {
|
|
90
90
|
className: "dc:text-center",
|
|
91
|
-
children: [/* @__PURE__ */
|
|
91
|
+
children: [/* @__PURE__ */ l("div", {
|
|
92
92
|
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
93
|
-
children: "
|
|
94
|
-
}), /* @__PURE__ */
|
|
93
|
+
children: T("chart.runtime.unableToRender")
|
|
94
|
+
}), /* @__PURE__ */ l("div", {
|
|
95
95
|
className: "dc:text-xs text-dc-text-secondary",
|
|
96
|
-
children: "
|
|
96
|
+
children: T("chart.runtime.dataFormatIncorrect")
|
|
97
97
|
})]
|
|
98
98
|
})
|
|
99
99
|
});
|
|
100
|
-
let
|
|
101
|
-
height:
|
|
102
|
-
children: /* @__PURE__ */
|
|
103
|
-
data:
|
|
100
|
+
let z = (t) => /* @__PURE__ */ l(i, {
|
|
101
|
+
height: t,
|
|
102
|
+
children: /* @__PURE__ */ u(f, {
|
|
103
|
+
data: j,
|
|
104
104
|
margin: {
|
|
105
105
|
...e,
|
|
106
106
|
left: 50,
|
|
@@ -108,16 +108,16 @@ var S = a.memo(function({ data: a, height: b = "100%", displayConfig: S, colorPa
|
|
|
108
108
|
},
|
|
109
109
|
accessibilityLayer: !1,
|
|
110
110
|
children: [
|
|
111
|
-
|
|
112
|
-
/* @__PURE__ */
|
|
111
|
+
L && /* @__PURE__ */ l(d, { strokeDasharray: "3 3" }),
|
|
112
|
+
/* @__PURE__ */ l(h, {
|
|
113
113
|
dataKey: "periodLabel",
|
|
114
114
|
tick: { fontSize: 12 },
|
|
115
115
|
axisLine: { stroke: "var(--dc-border)" },
|
|
116
116
|
tickLine: { stroke: "var(--dc-border)" }
|
|
117
117
|
}),
|
|
118
|
-
/* @__PURE__ */
|
|
118
|
+
/* @__PURE__ */ l(g, {
|
|
119
119
|
domain: [0, 1],
|
|
120
|
-
tickFormatter: (e) =>
|
|
120
|
+
tickFormatter: (e) => v(e),
|
|
121
121
|
tick: { fontSize: 12 },
|
|
122
122
|
axisLine: { stroke: "var(--dc-border)" },
|
|
123
123
|
tickLine: { stroke: "var(--dc-border)" },
|
|
@@ -132,11 +132,11 @@ var S = a.memo(function({ data: a, height: b = "100%", displayConfig: S, colorPa
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
}),
|
|
135
|
-
|
|
136
|
-
formatter: (e, t) => e == null ? ["No data", t] : [
|
|
135
|
+
R && /* @__PURE__ */ l(r, {
|
|
136
|
+
formatter: (e, t) => e == null ? ["No data", t] : [v(e), t],
|
|
137
137
|
labelFormatter: (e) => e
|
|
138
138
|
}),
|
|
139
|
-
|
|
139
|
+
I && /* @__PURE__ */ l(p, {
|
|
140
140
|
wrapperStyle: {
|
|
141
141
|
fontSize: "12px",
|
|
142
142
|
paddingTop: "10px"
|
|
@@ -146,66 +146,66 @@ var S = a.memo(function({ data: a, height: b = "100%", displayConfig: S, colorPa
|
|
|
146
146
|
layout: "horizontal",
|
|
147
147
|
align: "center",
|
|
148
148
|
verticalAlign: "bottom",
|
|
149
|
-
onMouseEnter: (e) =>
|
|
150
|
-
onMouseLeave: () =>
|
|
149
|
+
onMouseEnter: (e) => D(String(e.dataKey || "")),
|
|
150
|
+
onMouseLeave: () => D(null)
|
|
151
151
|
}),
|
|
152
|
-
|
|
152
|
+
M.map((e, t) => /* @__PURE__ */ l(m, {
|
|
153
153
|
type: "monotone",
|
|
154
154
|
dataKey: e,
|
|
155
|
-
stroke:
|
|
155
|
+
stroke: w?.colors && w.colors[t % w.colors.length] || n[t % n.length],
|
|
156
156
|
strokeWidth: 2,
|
|
157
157
|
dot: {
|
|
158
158
|
r: 4,
|
|
159
159
|
strokeWidth: 2
|
|
160
160
|
},
|
|
161
161
|
activeDot: { r: 6 },
|
|
162
|
-
strokeOpacity:
|
|
162
|
+
strokeOpacity: E ? E === e ? 1 : .3 : 1,
|
|
163
163
|
connectNulls: !1
|
|
164
164
|
}, e))
|
|
165
165
|
]
|
|
166
166
|
})
|
|
167
|
-
}),
|
|
167
|
+
}), B = () => /* @__PURE__ */ u("table", {
|
|
168
168
|
className: "dc:w-full dc:border-collapse dc:text-sm",
|
|
169
|
-
children: [/* @__PURE__ */
|
|
169
|
+
children: [/* @__PURE__ */ l("thead", {
|
|
170
170
|
className: "dc:sticky dc:top-0 bg-dc-bg dc:z-10",
|
|
171
|
-
children: /* @__PURE__ */
|
|
172
|
-
/* @__PURE__ */
|
|
171
|
+
children: /* @__PURE__ */ u("tr", { children: [
|
|
172
|
+
/* @__PURE__ */ l("th", {
|
|
173
173
|
className: "dc:text-left dc:p-2 dc:font-medium text-dc-text dc:border-b border-dc-border dc:min-w-[100px] dc:whitespace-nowrap",
|
|
174
|
-
children:
|
|
174
|
+
children: A?.breakdownValues?.length ? "Segment" : "Cohort"
|
|
175
175
|
}),
|
|
176
|
-
/* @__PURE__ */
|
|
176
|
+
/* @__PURE__ */ l("th", {
|
|
177
177
|
className: "dc:text-right dc:p-2 dc:font-medium text-dc-text dc:border-b border-dc-border dc:min-w-[60px] dc:whitespace-nowrap",
|
|
178
|
-
children:
|
|
178
|
+
children: P
|
|
179
179
|
}),
|
|
180
|
-
|
|
180
|
+
A?.periods.map((e) => /* @__PURE__ */ l("th", {
|
|
181
181
|
className: "dc:text-center dc:p-2 dc:font-medium text-dc-text dc:border-b border-dc-border dc:min-w-[70px] dc:whitespace-nowrap",
|
|
182
|
-
children:
|
|
182
|
+
children: y(e, A?.granularity)
|
|
183
183
|
}, e))
|
|
184
184
|
] })
|
|
185
|
-
}), /* @__PURE__ */
|
|
186
|
-
let n =
|
|
187
|
-
return /* @__PURE__ */
|
|
185
|
+
}), /* @__PURE__ */ l("tbody", { children: M.map((e, t) => {
|
|
186
|
+
let n = j.find((e) => e.period === 0), r = e === N, i = r ? n?.cohortSize ?? 0 : n?.[`${e}_cohortSize`] ?? 0;
|
|
187
|
+
return /* @__PURE__ */ u("tr", {
|
|
188
188
|
className: t % 2 == 0 ? "bg-dc-bg" : "bg-dc-surface-secondary",
|
|
189
189
|
children: [
|
|
190
|
-
/* @__PURE__ */
|
|
190
|
+
/* @__PURE__ */ l("td", {
|
|
191
191
|
className: "dc:p-2 dc:font-medium text-dc-text dc:border-b border-dc-border dc:whitespace-nowrap",
|
|
192
192
|
children: e
|
|
193
193
|
}),
|
|
194
|
-
/* @__PURE__ */
|
|
194
|
+
/* @__PURE__ */ l("td", {
|
|
195
195
|
className: "dc:p-2 dc:text-right text-dc-text-secondary dc:border-b border-dc-border",
|
|
196
196
|
children: i.toLocaleString()
|
|
197
197
|
}),
|
|
198
|
-
|
|
199
|
-
let n =
|
|
200
|
-
return /* @__PURE__ */
|
|
198
|
+
A?.periods.map((t) => {
|
|
199
|
+
let n = j.find((e) => e.period === t), a = n?.[e] ?? 0;
|
|
200
|
+
return /* @__PURE__ */ l("td", {
|
|
201
201
|
className: "dc:p-2 dc:text-center dc:border-b border-dc-border dc:cursor-default dc:transition-opacity dc:hover:opacity-80",
|
|
202
202
|
style: {
|
|
203
|
-
backgroundColor: a > 0 ?
|
|
203
|
+
backgroundColor: a > 0 ? _(a) : "transparent",
|
|
204
204
|
color: a > .5 ? "#ffffff" : "var(--dc-text)"
|
|
205
205
|
},
|
|
206
206
|
onMouseEnter: (o) => {
|
|
207
207
|
let s = o.currentTarget.getBoundingClientRect();
|
|
208
|
-
|
|
208
|
+
k({
|
|
209
209
|
period: t,
|
|
210
210
|
breakdownValue: r ? null : e,
|
|
211
211
|
cohortSize: i,
|
|
@@ -215,56 +215,56 @@ var S = a.memo(function({ data: a, height: b = "100%", displayConfig: S, colorPa
|
|
|
215
215
|
y: s.top
|
|
216
216
|
});
|
|
217
217
|
},
|
|
218
|
-
onMouseLeave: () =>
|
|
219
|
-
children: a > 0 ?
|
|
218
|
+
onMouseLeave: () => k(null),
|
|
219
|
+
children: a > 0 ? v(a) : "-"
|
|
220
220
|
}, t);
|
|
221
221
|
})
|
|
222
222
|
]
|
|
223
223
|
}, e);
|
|
224
224
|
}) })]
|
|
225
|
-
}),
|
|
225
|
+
}), V = () => O && /* @__PURE__ */ u("div", {
|
|
226
226
|
className: "dc:fixed dc:z-50 dc:px-3 dc:py-2 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:text-sm dc:pointer-events-none",
|
|
227
227
|
style: {
|
|
228
|
-
left:
|
|
229
|
-
top:
|
|
228
|
+
left: O.x,
|
|
229
|
+
top: O.y - 10,
|
|
230
230
|
transform: "translate(-50%, -100%)"
|
|
231
231
|
},
|
|
232
|
-
children: [/* @__PURE__ */
|
|
232
|
+
children: [/* @__PURE__ */ l("div", {
|
|
233
233
|
className: "dc:font-medium text-dc-text dc:mb-1",
|
|
234
|
-
children:
|
|
235
|
-
}), /* @__PURE__ */
|
|
234
|
+
children: O.breakdownValue ? `${O.breakdownValue} - ${y(O.period, A?.granularity)}` : y(O.period, A?.granularity)
|
|
235
|
+
}), /* @__PURE__ */ u("div", {
|
|
236
236
|
className: "text-dc-text-secondary dc:space-y-0.5",
|
|
237
237
|
children: [
|
|
238
|
-
/* @__PURE__ */ l("div", { children:
|
|
239
|
-
/* @__PURE__ */ l("div", { children:
|
|
238
|
+
/* @__PURE__ */ l("div", { children: T("chart.runtime.retention.cohortSize", { count: O.cohortSize.toLocaleString() }) }),
|
|
239
|
+
/* @__PURE__ */ l("div", { children: T("chart.runtime.retention.retained", { count: O.retainedUsers.toLocaleString() }) }),
|
|
240
240
|
/* @__PURE__ */ l("div", {
|
|
241
241
|
className: "dc:font-medium text-dc-text",
|
|
242
|
-
children:
|
|
242
|
+
children: T("chart.runtime.retention.rate", { rate: v(O.retentionRate) })
|
|
243
243
|
})
|
|
244
244
|
]
|
|
245
245
|
})]
|
|
246
246
|
});
|
|
247
|
-
return
|
|
247
|
+
return F === "heatmap" ? /* @__PURE__ */ u("div", {
|
|
248
248
|
className: "dc:relative dc:w-full dc:h-full dc:overflow-auto",
|
|
249
|
-
style: { height:
|
|
250
|
-
children: [
|
|
251
|
-
}) :
|
|
249
|
+
style: { height: x },
|
|
250
|
+
children: [B(), V()]
|
|
251
|
+
}) : F === "combined" ? /* @__PURE__ */ u("div", {
|
|
252
252
|
className: "dc:flex dc:flex-col dc:w-full dc:h-full",
|
|
253
|
-
style: { height:
|
|
253
|
+
style: { height: x },
|
|
254
254
|
children: [
|
|
255
|
-
/* @__PURE__ */
|
|
255
|
+
/* @__PURE__ */ l("div", {
|
|
256
256
|
className: "dc:flex-1 dc:min-h-[200px]",
|
|
257
|
-
children:
|
|
257
|
+
children: z("100%")
|
|
258
258
|
}),
|
|
259
|
-
/* @__PURE__ */
|
|
259
|
+
/* @__PURE__ */ l("div", {
|
|
260
260
|
className: "dc:flex-shrink-0 dc:max-h-[40%] dc:overflow-auto dc:border-t border-dc-border",
|
|
261
|
-
children:
|
|
261
|
+
children: B()
|
|
262
262
|
}),
|
|
263
|
-
|
|
263
|
+
V()
|
|
264
264
|
]
|
|
265
|
-
}) :
|
|
265
|
+
}) : z(x);
|
|
266
266
|
});
|
|
267
267
|
//#endregion
|
|
268
|
-
export {
|
|
268
|
+
export { C as default };
|
|
269
269
|
|
|
270
|
-
//# sourceMappingURL=RetentionCombinedChart-
|
|
270
|
+
//# sourceMappingURL=RetentionCombinedChart-BD8tGeM_.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RetentionCombinedChart-BD8tGeM_.js","names":[],"sources":["../../../src/client/components/charts/RetentionCombinedChart.tsx"],"sourcesContent":["/**\n * RetentionCombinedChart Component\n *\n * Combined visualization for retention analysis data.\n * Supports multiple display modes: heatmap, line chart, or combined view.\n *\n * Features:\n * - X-axis: Period numbers (P0, P1, P2...)\n * - Y-axis: Retention % (0-100%)\n * - Lines: One per breakdown value (or single if no breakdown)\n * - Display modes: 'heatmap' | 'line' | 'combined'\n * - Heatmap shows color-coded retention matrix\n * - Line chart shows retention curves over periods\n */\n\nimport React, { useMemo, useState } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport {\n ComposedChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Legend,\n} from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport type { ChartProps } from '../../types'\nimport type { RetentionChartData, RetentionResultRow, RetentionGranularity } from '../../types/retention'\nimport { isRetentionData } from '../../types/retention'\n\n/**\n * Retention display mode\n * - 'heatmap': Show retention as color-coded bars\n * - 'line': Show retention as line curves\n * - 'combined': Show both heatmap background and line overlay\n */\nexport type RetentionDisplayMode = 'heatmap' | 'line' | 'combined'\n\n/**\n * Get color with opacity based on retention rate for heatmap cells\n * Uses a green gradient: higher retention = more saturated green\n */\nfunction getRetentionColor(rate: number): string {\n const clampedRate = Math.max(0, Math.min(1, rate))\n const alpha = 0.1 + clampedRate * 0.7\n return `rgba(34, 197, 94, ${alpha})`\n}\n\n/**\n * Format percentage for display\n */\nfunction formatPercentage(rate: number): string {\n return `${Math.round(rate * 100)}%`\n}\n\n/**\n * Format period label based on granularity\n * Period 0 shows \"< 1 Day\" / \"< 1 Week\" etc. to indicate the initial cohort\n * e.g., Period 0 with 'week' granularity → \"< 1 Week\", Period 1 → \"Week 1\"\n */\nfunction formatPeriodLabel(period: number, granularity?: RetentionGranularity): string {\n const prefix = granularity === 'day' ? 'Day'\n : granularity === 'week' ? 'Week'\n : granularity === 'month' ? 'Month'\n : 'P' // Fallback to P0, P1, etc.\n\n // Period 0 is special - shows \"< 1 Day\" / \"< 1 Week\" etc.\n if (period === 0) {\n return granularity ? `< 1 ${prefix}` : 'P0'\n }\n\n return granularity ? `${prefix} ${period}` : `P${period}`\n}\n\n/**\n * Get display label for the cohort total column\n * Shows \"Total\" regardless of binding key - it's the cohort size count\n */\nfunction getCohortLabel(_bindingKeyLabel?: string): string {\n return 'Total'\n}\n\n/**\n * Get default series name based on binding key\n * e.g., \"userId\" → \"userId Retention\", null → \"Retention\"\n */\nfunction getDefaultSeriesName(bindingKeyLabel?: string): string {\n if (!bindingKeyLabel) return 'Retention'\n return `${bindingKeyLabel} Retention`\n}\n\n/**\n * Transform retention data for chart display\n * Groups data by period with breakdown values as series\n */\nfunction transformRetentionData(\n rows: RetentionResultRow[],\n periods: number[],\n breakdownValues?: string[],\n granularity?: RetentionGranularity,\n bindingKeyLabel?: string\n): { chartData: any[]; seriesKeys: string[]; defaultSeriesName: string } {\n const defaultSeriesName = getDefaultSeriesName(bindingKeyLabel)\n\n // If no breakdown, single series\n if (!breakdownValues || breakdownValues.length === 0) {\n const chartData = periods.map((period) => {\n const row = rows.find((r) => r.period === period && !r.breakdownValue)\n return {\n period,\n periodLabel: formatPeriodLabel(period, granularity),\n [defaultSeriesName]: row ? row.retentionRate : null,\n cohortSize: row?.cohortSize ?? 0,\n retainedUsers: row?.retainedUsers ?? 0,\n }\n })\n return { chartData, seriesKeys: [defaultSeriesName], defaultSeriesName }\n }\n\n // With breakdown, create series per breakdown value\n const chartData = periods.map((period) => {\n const dataPoint: any = {\n period,\n periodLabel: formatPeriodLabel(period, granularity),\n }\n\n breakdownValues.forEach((bv) => {\n const row = rows.find((r) => r.period === period && r.breakdownValue === bv)\n dataPoint[bv] = row ? row.retentionRate : null\n dataPoint[`${bv}_cohortSize`] = row?.cohortSize ?? 0\n dataPoint[`${bv}_retainedUsers`] = row?.retainedUsers ?? 0\n })\n\n return dataPoint\n })\n\n return { chartData, seriesKeys: breakdownValues, defaultSeriesName }\n}\n\ninterface TooltipData {\n period: number\n breakdownValue?: string | null\n cohortSize: number\n retainedUsers: number\n retentionRate: number\n x: number\n y: number\n}\n\n/**\n * RetentionCombinedChart Component\n */\nconst RetentionCombinedChart = React.memo(function RetentionCombinedChart({\n data,\n height = '100%',\n displayConfig,\n colorPalette,\n}: ChartProps) {\n const { t } = useTranslation()\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const [heatmapTooltip, setHeatmapTooltip] = useState<TooltipData | null>(null)\n\n // Parse retention data\n const retentionData = useMemo<RetentionChartData | null>(() => {\n if (!data) return null\n\n // Check if data is already in RetentionChartData format\n if (isRetentionData(data)) {\n return data\n }\n\n // If data is an array of RetentionResultRow, convert it\n if (Array.isArray(data) && data.length > 0) {\n const rows = data as RetentionResultRow[]\n const periods = [...new Set(rows.map((r) => r.period))].sort((a, b) => a - b)\n const breakdownValues = [\n ...new Set(rows.filter((r) => r.breakdownValue).map((r) => r.breakdownValue!)),\n ]\n\n return {\n rows,\n periods,\n breakdownValues: breakdownValues.length > 0 ? breakdownValues : undefined,\n }\n }\n\n return null\n }, [data])\n\n // Transform data for chart\n const { chartData, seriesKeys, defaultSeriesName } = useMemo(() => {\n if (!retentionData) {\n return { chartData: [], seriesKeys: [], defaultSeriesName: 'Retention' }\n }\n return transformRetentionData(\n retentionData.rows,\n retentionData.periods,\n retentionData.breakdownValues,\n retentionData.granularity,\n retentionData.bindingKeyLabel\n )\n }, [retentionData])\n\n // Get cohort label for heatmap column header\n const cohortLabel = getCohortLabel(retentionData?.bindingKeyLabel)\n\n // Display mode from config\n const displayMode: RetentionDisplayMode =\n (displayConfig as any)?.retentionDisplayMode || 'line'\n\n const showLegend = displayConfig?.showLegend ?? true\n const showGrid = displayConfig?.showGrid ?? true\n const showTooltip = displayConfig?.showTooltip ?? true\n\n // Handle empty/loading states\n if (!data || (Array.isArray(data) && data.length === 0)) {\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.noData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">\n {t('chart.runtime.noDataHint.retention')}\n </div>\n </div>\n </div>\n )\n }\n\n if (!chartData || chartData.length === 0) {\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.unableToRender')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.dataFormatIncorrect')}</div>\n </div>\n </div>\n )\n }\n\n // Render line chart component (reused in line and combined modes)\n const renderLineChart = (chartHeight: string | number) => {\n const chartMargins = {\n ...CHART_MARGINS,\n left: 50,\n right: 20,\n }\n\n return (\n <ChartContainer height={chartHeight}>\n <ComposedChart data={chartData} margin={chartMargins} accessibilityLayer={false}>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" />}\n <XAxis\n dataKey=\"periodLabel\"\n tick={{ fontSize: 12 }}\n axisLine={{ stroke: 'var(--dc-border)' }}\n tickLine={{ stroke: 'var(--dc-border)' }}\n />\n <YAxis\n domain={[0, 1]}\n tickFormatter={(value) => formatPercentage(value)}\n tick={{ fontSize: 12 }}\n axisLine={{ stroke: 'var(--dc-border)' }}\n tickLine={{ stroke: 'var(--dc-border)' }}\n label={{\n value: 'Retention %',\n angle: -90,\n position: 'insideLeft',\n style: { textAnchor: 'middle', fontSize: '12px', fill: 'var(--dc-text-secondary)' },\n }}\n />\n {showTooltip && (\n <ChartTooltip\n formatter={(value: any, name: string) => {\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n return [formatPercentage(value), name]\n }}\n labelFormatter={(label: string) => label}\n />\n )}\n {showLegend && (\n <Legend\n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"line\"\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\n {/* Render lines */}\n {seriesKeys.map((seriesKey, index) => (\n <Line\n key={seriesKey}\n type=\"monotone\"\n dataKey={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={{ r: 4, strokeWidth: 2 }}\n activeDot={{ r: 6 }}\n strokeOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n connectNulls={false}\n />\n ))}\n </ComposedChart>\n </ChartContainer>\n )\n }\n\n // Render heatmap table component (reused in heatmap and combined modes)\n const renderHeatmapTable = () => (\n <table className=\"dc:w-full dc:border-collapse dc:text-sm\">\n <thead className=\"dc:sticky dc:top-0 bg-dc-bg dc:z-10\">\n <tr>\n <th className=\"dc:text-left dc:p-2 dc:font-medium text-dc-text dc:border-b border-dc-border dc:min-w-[100px] dc:whitespace-nowrap\">\n {retentionData?.breakdownValues?.length ? 'Segment' : 'Cohort'}\n </th>\n <th className=\"dc:text-right dc:p-2 dc:font-medium text-dc-text dc:border-b border-dc-border dc:min-w-[60px] dc:whitespace-nowrap\">\n {cohortLabel}\n </th>\n {retentionData?.periods.map((period) => (\n <th\n key={period}\n className=\"dc:text-center dc:p-2 dc:font-medium text-dc-text dc:border-b border-dc-border dc:min-w-[70px] dc:whitespace-nowrap\"\n >\n {formatPeriodLabel(period, retentionData?.granularity)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {seriesKeys.map((seriesKey, rowIndex) => {\n const period0Data = chartData.find((d) => d.period === 0)\n const isDefaultSeries = seriesKey === defaultSeriesName\n const cohortSize = isDefaultSeries\n ? period0Data?.cohortSize ?? 0\n : period0Data?.[`${seriesKey}_cohortSize`] ?? 0\n\n return (\n <tr\n key={seriesKey}\n className={rowIndex % 2 === 0 ? 'bg-dc-bg' : 'bg-dc-surface-secondary'}\n >\n <td className=\"dc:p-2 dc:font-medium text-dc-text dc:border-b border-dc-border dc:whitespace-nowrap\">\n {seriesKey}\n </td>\n <td className=\"dc:p-2 dc:text-right text-dc-text-secondary dc:border-b border-dc-border\">\n {cohortSize.toLocaleString()}\n </td>\n {retentionData?.periods.map((period) => {\n const dataPoint = chartData.find((d) => d.period === period)\n const rate = dataPoint?.[seriesKey] ?? 0\n const bgColor = rate > 0 ? getRetentionColor(rate) : 'transparent'\n const textColor = rate > 0.5 ? '#ffffff' : 'var(--dc-text)'\n\n return (\n <td\n key={period}\n className=\"dc:p-2 dc:text-center dc:border-b border-dc-border dc:cursor-default dc:transition-opacity dc:hover:opacity-80\"\n style={{ backgroundColor: bgColor, color: textColor }}\n onMouseEnter={(e) => {\n const rect = e.currentTarget.getBoundingClientRect()\n const retainedUsers = isDefaultSeries\n ? dataPoint?.retainedUsers ?? 0\n : dataPoint?.[`${seriesKey}_retainedUsers`] ?? 0\n setHeatmapTooltip({\n period,\n breakdownValue: isDefaultSeries ? null : seriesKey,\n cohortSize,\n retainedUsers,\n retentionRate: rate,\n x: rect.left + rect.width / 2,\n y: rect.top,\n })\n }}\n onMouseLeave={() => setHeatmapTooltip(null)}\n >\n {rate > 0 ? formatPercentage(rate) : '-'}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n )\n\n // Render heatmap tooltip (shared between heatmap and combined modes)\n const renderHeatmapTooltip = () =>\n heatmapTooltip && (\n <div\n className=\"dc:fixed dc:z-50 dc:px-3 dc:py-2 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:text-sm dc:pointer-events-none\"\n style={{\n left: heatmapTooltip.x,\n top: heatmapTooltip.y - 10,\n transform: 'translate(-50%, -100%)',\n }}\n >\n <div className=\"dc:font-medium text-dc-text dc:mb-1\">\n {heatmapTooltip.breakdownValue\n ? `${heatmapTooltip.breakdownValue} - ${formatPeriodLabel(heatmapTooltip.period, retentionData?.granularity)}`\n : formatPeriodLabel(heatmapTooltip.period, retentionData?.granularity)}\n </div>\n <div className=\"text-dc-text-secondary dc:space-y-0.5\">\n <div>{t('chart.runtime.retention.cohortSize', { count: heatmapTooltip.cohortSize.toLocaleString() })}</div>\n <div>{t('chart.runtime.retention.retained', { count: heatmapTooltip.retainedUsers.toLocaleString() })}</div>\n <div className=\"dc:font-medium text-dc-text\">\n {t('chart.runtime.retention.rate', { rate: formatPercentage(heatmapTooltip.retentionRate) })}\n </div>\n </div>\n </div>\n )\n\n // Render heatmap mode (table-based only)\n if (displayMode === 'heatmap') {\n return (\n <div className=\"dc:relative dc:w-full dc:h-full dc:overflow-auto\" style={{ height }}>\n {renderHeatmapTable()}\n {renderHeatmapTooltip()}\n </div>\n )\n }\n\n // Combined mode: line chart on top, heatmap table below\n if (displayMode === 'combined') {\n return (\n <div className=\"dc:flex dc:flex-col dc:w-full dc:h-full\" style={{ height }}>\n {/* Line chart - takes remaining space after heatmap */}\n <div className=\"dc:flex-1 dc:min-h-[200px]\">\n {renderLineChart('100%')}\n </div>\n {/* Heatmap table - auto-height based on content, scrolls if needed */}\n <div className=\"dc:flex-shrink-0 dc:max-h-[40%] dc:overflow-auto dc:border-t border-dc-border\">\n {renderHeatmapTable()}\n </div>\n {/* Shared heatmap tooltip */}\n {renderHeatmapTooltip()}\n </div>\n )\n }\n\n // Line mode: just the line chart\n return renderLineChart(height)\n})\n\nexport default RetentionCombinedChart\n"],"mappings":"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"}
|