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,28 +1,28 @@
|
|
|
1
1
|
import { n as e } from "./rolldown-runtime-CCl2IeXn.js";
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import { jsx as
|
|
2
|
+
import { k as t, n, y as r } from "./chart-activity-grid-CWT0gLv4.js";
|
|
3
|
+
import i, { useLayoutEffect as a, useMemo as o, useRef as s, useState as c } from "react";
|
|
4
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
5
5
|
//#region src/client/components/charts/BoxPlotChart.tsx
|
|
6
|
-
var
|
|
7
|
-
function
|
|
6
|
+
var d = /* @__PURE__ */ e({ default: () => v }), f = 50;
|
|
7
|
+
function p(e) {
|
|
8
8
|
if (e == null) return null;
|
|
9
9
|
let t = typeof e == "number" ? e : parseFloat(String(e));
|
|
10
10
|
return isNaN(t) ? null : t;
|
|
11
11
|
}
|
|
12
|
-
function
|
|
13
|
-
let c =
|
|
14
|
-
return c === null || l === null || u === null || d === null ||
|
|
12
|
+
function m(e, t, n, r, i, a, o, s) {
|
|
13
|
+
let c = p(e[t]), l = p(e[n]), u = p(e[r]), d = p(e[i]), f = p(e[a]);
|
|
14
|
+
return c === null || l === null || u === null || d === null || f === null ? null : {
|
|
15
15
|
label: o,
|
|
16
16
|
min: c,
|
|
17
17
|
q1: l,
|
|
18
18
|
median: u,
|
|
19
19
|
q3: d,
|
|
20
|
-
max:
|
|
20
|
+
max: f,
|
|
21
21
|
color: s
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
function
|
|
25
|
-
let o =
|
|
24
|
+
function h(e, t, n, r, i, a) {
|
|
25
|
+
let o = p(e[t]), s = p(e[n]), c = p(e[r]);
|
|
26
26
|
if (o === null || s === null || c === null) return null;
|
|
27
27
|
let l = Math.abs(s);
|
|
28
28
|
return {
|
|
@@ -35,12 +35,12 @@ function m(e, t, n, r, i, a) {
|
|
|
35
35
|
color: a
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
-
function
|
|
38
|
+
function g({ x: e, boxWidth: t, minY: n, q1Y: r, medianY: i, q3Y: a, maxY: o, color: s, label: c }) {
|
|
39
39
|
let d = t / 2, f = e, p = t * .4;
|
|
40
|
-
return /* @__PURE__ */
|
|
41
|
-
"data-testid": `box-${
|
|
40
|
+
return /* @__PURE__ */ u("g", {
|
|
41
|
+
"data-testid": `box-${c}`,
|
|
42
42
|
children: [
|
|
43
|
-
/* @__PURE__ */
|
|
43
|
+
/* @__PURE__ */ l("line", {
|
|
44
44
|
x1: f,
|
|
45
45
|
y1: n,
|
|
46
46
|
x2: f,
|
|
@@ -48,7 +48,7 @@ function h({ x: e, boxWidth: t, minY: n, q1Y: r, medianY: i, q3Y: a, maxY: o, co
|
|
|
48
48
|
stroke: s,
|
|
49
49
|
strokeWidth: 1.5
|
|
50
50
|
}),
|
|
51
|
-
/* @__PURE__ */
|
|
51
|
+
/* @__PURE__ */ l("line", {
|
|
52
52
|
x1: f - p / 2,
|
|
53
53
|
y1: n,
|
|
54
54
|
x2: f + p / 2,
|
|
@@ -56,7 +56,7 @@ function h({ x: e, boxWidth: t, minY: n, q1Y: r, medianY: i, q3Y: a, maxY: o, co
|
|
|
56
56
|
stroke: s,
|
|
57
57
|
strokeWidth: 1.5
|
|
58
58
|
}),
|
|
59
|
-
/* @__PURE__ */
|
|
59
|
+
/* @__PURE__ */ l("line", {
|
|
60
60
|
x1: f - p / 2,
|
|
61
61
|
y1: o,
|
|
62
62
|
x2: f + p / 2,
|
|
@@ -64,7 +64,7 @@ function h({ x: e, boxWidth: t, minY: n, q1Y: r, medianY: i, q3Y: a, maxY: o, co
|
|
|
64
64
|
stroke: s,
|
|
65
65
|
strokeWidth: 1.5
|
|
66
66
|
}),
|
|
67
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ l("rect", {
|
|
68
68
|
x: f - d,
|
|
69
69
|
y: Math.min(r, a),
|
|
70
70
|
width: t,
|
|
@@ -74,20 +74,20 @@ function h({ x: e, boxWidth: t, minY: n, q1Y: r, medianY: i, q3Y: a, maxY: o, co
|
|
|
74
74
|
stroke: s,
|
|
75
75
|
strokeWidth: 1.5
|
|
76
76
|
}),
|
|
77
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ l("line", {
|
|
78
78
|
x1: f - d,
|
|
79
79
|
y1: i,
|
|
80
80
|
x2: f + d,
|
|
81
81
|
y2: i,
|
|
82
82
|
stroke: s,
|
|
83
83
|
strokeWidth: 2.5,
|
|
84
|
-
"data-testid": `median-${
|
|
84
|
+
"data-testid": `median-${c}`
|
|
85
85
|
})
|
|
86
86
|
]
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
|
-
function
|
|
90
|
-
let s =
|
|
89
|
+
function _({ scale: e, domainMin: t, domainMax: n, width: r, tickCount: i = 5, format: a }) {
|
|
90
|
+
let s = o(() => {
|
|
91
91
|
let e = n - t;
|
|
92
92
|
if (e === 0) return [t];
|
|
93
93
|
let r = e / (i - 1);
|
|
@@ -97,27 +97,27 @@ function g({ scale: e, domainMin: t, domainMax: n, width: r, tickCount: i = 5, f
|
|
|
97
97
|
n,
|
|
98
98
|
i
|
|
99
99
|
]);
|
|
100
|
-
return /* @__PURE__ */
|
|
100
|
+
return /* @__PURE__ */ u("g", {
|
|
101
101
|
"data-testid": "y-axis",
|
|
102
|
-
children: [s.map((t, n) => /* @__PURE__ */
|
|
102
|
+
children: [s.map((t, n) => /* @__PURE__ */ u("g", {
|
|
103
103
|
transform: `translate(0, ${e(t)})`,
|
|
104
104
|
children: [
|
|
105
|
-
/* @__PURE__ */
|
|
105
|
+
/* @__PURE__ */ l("line", {
|
|
106
106
|
x1: 0,
|
|
107
107
|
x2: -6,
|
|
108
108
|
stroke: "currentColor",
|
|
109
109
|
strokeWidth: 1
|
|
110
110
|
}),
|
|
111
|
-
/* @__PURE__ */
|
|
111
|
+
/* @__PURE__ */ l("text", {
|
|
112
112
|
x: -10,
|
|
113
113
|
textAnchor: "end",
|
|
114
114
|
dominantBaseline: "middle",
|
|
115
115
|
fontSize: 11,
|
|
116
116
|
fill: "currentColor",
|
|
117
117
|
className: "text-dc-text-secondary",
|
|
118
|
-
children:
|
|
118
|
+
children: a ? a(t) : t.toLocaleString()
|
|
119
119
|
}),
|
|
120
|
-
/* @__PURE__ */
|
|
120
|
+
/* @__PURE__ */ l("line", {
|
|
121
121
|
x1: 0,
|
|
122
122
|
x2: r,
|
|
123
123
|
stroke: "currentColor",
|
|
@@ -125,7 +125,7 @@ function g({ scale: e, domainMin: t, domainMax: n, width: r, tickCount: i = 5, f
|
|
|
125
125
|
strokeWidth: 1
|
|
126
126
|
})
|
|
127
127
|
]
|
|
128
|
-
}, n)), /* @__PURE__ */
|
|
128
|
+
}, n)), /* @__PURE__ */ l("line", {
|
|
129
129
|
y1: e(s[0]),
|
|
130
130
|
y2: e(s[s.length - 1]),
|
|
131
131
|
stroke: "currentColor",
|
|
@@ -133,18 +133,18 @@ function g({ scale: e, domainMin: t, domainMax: n, width: r, tickCount: i = 5, f
|
|
|
133
133
|
})]
|
|
134
134
|
});
|
|
135
135
|
}
|
|
136
|
-
var
|
|
137
|
-
let
|
|
136
|
+
var v = i.memo(function({ data: e, chartConfig: i, displayConfig: d = {}, height: v = "100%", colorPalette: y, onDataPointClick: b, drillEnabled: x }) {
|
|
137
|
+
let { t: S } = t(), C = s(null), [w, T] = c({
|
|
138
138
|
width: 0,
|
|
139
139
|
height: 0
|
|
140
140
|
});
|
|
141
|
-
|
|
142
|
-
let e =
|
|
141
|
+
a(() => {
|
|
142
|
+
let e = C.current;
|
|
143
143
|
if (!e) return;
|
|
144
144
|
let t = new ResizeObserver((e) => {
|
|
145
145
|
for (let t of e) {
|
|
146
146
|
let { width: e, height: n } = t.contentRect;
|
|
147
|
-
e > 0 && n > 0 &&
|
|
147
|
+
e > 0 && n > 0 && T({
|
|
148
148
|
width: e,
|
|
149
149
|
height: n
|
|
150
150
|
});
|
|
@@ -152,13 +152,13 @@ var _ = r.memo(function({ data: e, chartConfig: r, displayConfig: u = {}, height
|
|
|
152
152
|
});
|
|
153
153
|
t.observe(e);
|
|
154
154
|
let n = e.getBoundingClientRect();
|
|
155
|
-
return n.width > 0 && n.height > 0 &&
|
|
155
|
+
return n.width > 0 && n.height > 0 && T({
|
|
156
156
|
width: n.width,
|
|
157
157
|
height: n.height
|
|
158
158
|
}), () => t.disconnect();
|
|
159
159
|
}, []);
|
|
160
|
-
let
|
|
161
|
-
let e = Array.isArray(
|
|
160
|
+
let E = d?.leftYAxisFormat, { xField: D, mode: O, fields: k, configError: A } = o(() => {
|
|
161
|
+
let e = Array.isArray(i?.xAxis) ? i.xAxis[0] : i?.xAxis ?? i?.x, t = Array.isArray(i?.yAxis) ? i.yAxis : [];
|
|
162
162
|
return !e || t.length === 0 ? {
|
|
163
163
|
xField: e,
|
|
164
164
|
mode: "none",
|
|
@@ -195,15 +195,15 @@ var _ = r.memo(function({ data: e, chartConfig: r, displayConfig: u = {}, height
|
|
|
195
195
|
fields: { valueField: t[0] },
|
|
196
196
|
configError: null
|
|
197
197
|
};
|
|
198
|
-
}, [
|
|
199
|
-
if (
|
|
200
|
-
let
|
|
201
|
-
for (let e = 0; e <
|
|
202
|
-
let
|
|
203
|
-
if (
|
|
204
|
-
else if (
|
|
198
|
+
}, [i]), j = o(() => {
|
|
199
|
+
if (A || !e || e.length === 0 || O === "none") return [];
|
|
200
|
+
let t = e.slice(0, f), r = y?.colors ?? n, i = [];
|
|
201
|
+
for (let e = 0; e < t.length; e++) {
|
|
202
|
+
let n = t[e], a = D ? String(n[D] ?? `Row ${e + 1}`) : `Row ${e + 1}`, o = r[e % r.length], s = null;
|
|
203
|
+
if (O === "5measure") s = m(n, k.minField, k.q1Field, k.medianField, k.q3Field, k.maxField, a, o);
|
|
204
|
+
else if (O === "3measure") s = h(n, k.avgField, k.stddevField, k.medianField, a, o);
|
|
205
205
|
else {
|
|
206
|
-
let e =
|
|
206
|
+
let e = p(n[k.valueField]);
|
|
207
207
|
e !== null && (s = {
|
|
208
208
|
label: a,
|
|
209
209
|
min: e,
|
|
@@ -219,51 +219,51 @@ var _ = r.memo(function({ data: e, chartConfig: r, displayConfig: u = {}, height
|
|
|
219
219
|
return i;
|
|
220
220
|
}, [
|
|
221
221
|
e,
|
|
222
|
-
T,
|
|
223
|
-
E,
|
|
224
222
|
D,
|
|
225
|
-
|
|
226
|
-
|
|
223
|
+
O,
|
|
224
|
+
k,
|
|
225
|
+
y,
|
|
226
|
+
A
|
|
227
227
|
]);
|
|
228
|
-
if (!e || e.length === 0) return /* @__PURE__ */
|
|
228
|
+
if (!e || e.length === 0) return /* @__PURE__ */ l("div", {
|
|
229
229
|
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
230
|
-
style: { height:
|
|
231
|
-
children: /* @__PURE__ */
|
|
230
|
+
style: { height: v },
|
|
231
|
+
children: /* @__PURE__ */ u("div", {
|
|
232
232
|
className: "dc:text-center",
|
|
233
|
-
children: [/* @__PURE__ */
|
|
233
|
+
children: [/* @__PURE__ */ l("div", {
|
|
234
234
|
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
235
|
-
children: "
|
|
236
|
-
}), /* @__PURE__ */
|
|
235
|
+
children: S("chart.runtime.noData")
|
|
236
|
+
}), /* @__PURE__ */ l("div", {
|
|
237
237
|
className: "dc:text-xs text-dc-text-secondary",
|
|
238
|
-
children: "
|
|
238
|
+
children: S("chart.runtime.noDataHint.boxPlot")
|
|
239
239
|
})]
|
|
240
240
|
})
|
|
241
241
|
});
|
|
242
|
-
if (
|
|
242
|
+
if (A) return /* @__PURE__ */ l("div", {
|
|
243
243
|
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
|
|
244
|
-
style: { height:
|
|
245
|
-
children: /* @__PURE__ */
|
|
244
|
+
style: { height: v },
|
|
245
|
+
children: /* @__PURE__ */ u("div", {
|
|
246
246
|
className: "dc:text-center",
|
|
247
|
-
children: [/* @__PURE__ */
|
|
247
|
+
children: [/* @__PURE__ */ l("div", {
|
|
248
248
|
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
249
|
-
children: "
|
|
250
|
-
}), /* @__PURE__ */
|
|
249
|
+
children: S("chart.runtime.configError")
|
|
250
|
+
}), /* @__PURE__ */ l("div", {
|
|
251
251
|
className: "dc:text-xs",
|
|
252
|
-
children:
|
|
252
|
+
children: A
|
|
253
253
|
})]
|
|
254
254
|
})
|
|
255
255
|
});
|
|
256
|
-
if (
|
|
256
|
+
if (j.length === 0) return /* @__PURE__ */ l("div", {
|
|
257
257
|
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
258
|
-
style: { height:
|
|
259
|
-
children: /* @__PURE__ */
|
|
258
|
+
style: { height: v },
|
|
259
|
+
children: /* @__PURE__ */ u("div", {
|
|
260
260
|
className: "dc:text-center",
|
|
261
|
-
children: [/* @__PURE__ */
|
|
261
|
+
children: [/* @__PURE__ */ l("div", {
|
|
262
262
|
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
263
|
-
children: "
|
|
264
|
-
}), /* @__PURE__ */
|
|
263
|
+
children: S("chart.runtime.noValidData")
|
|
264
|
+
}), /* @__PURE__ */ l("div", {
|
|
265
265
|
className: "dc:text-xs text-dc-text-secondary",
|
|
266
|
-
children: "
|
|
266
|
+
children: S("chart.runtime.noValidDataHint.boxPlot")
|
|
267
267
|
})]
|
|
268
268
|
})
|
|
269
269
|
});
|
|
@@ -273,33 +273,33 @@ var _ = r.memo(function({ data: e, chartConfig: r, displayConfig: u = {}, height
|
|
|
273
273
|
right: 20,
|
|
274
274
|
bottom: 60,
|
|
275
275
|
left: 60
|
|
276
|
-
},
|
|
277
|
-
return /* @__PURE__ */
|
|
278
|
-
ref:
|
|
276
|
+
}, n = w.width || 600, i = typeof v == "number" ? v : w.height || 400, a = Math.max(n - t.left - t.right, 50), o = Math.max(i - t.top - t.bottom, 50), s = j.flatMap((e) => [e.min, e.max]), c = Math.min(...s), d = Math.max(...s), p = (d - c) * .1 || 1, m = c - p, h = d + p, y = h - m, T = (e) => y === 0 ? o / 2 : o - (e - m) / y * o, O = a / j.length, k = Math.min(O * .6, 40), A = e.length > f;
|
|
277
|
+
return /* @__PURE__ */ u("div", {
|
|
278
|
+
ref: C,
|
|
279
279
|
className: "dc:relative dc:w-full",
|
|
280
|
-
style: { height:
|
|
281
|
-
children: [/* @__PURE__ */
|
|
280
|
+
style: { height: v },
|
|
281
|
+
children: [/* @__PURE__ */ l("svg", {
|
|
282
282
|
width: "100%",
|
|
283
283
|
height: A ? "calc(100% - 20px)" : "100%",
|
|
284
|
-
viewBox: `0 0 ${
|
|
284
|
+
viewBox: `0 0 ${n} ${typeof i == "number" ? i : 400}`,
|
|
285
285
|
preserveAspectRatio: "none",
|
|
286
286
|
"data-testid": "boxplot-svg",
|
|
287
|
-
children: /* @__PURE__ */
|
|
287
|
+
children: /* @__PURE__ */ u("g", {
|
|
288
288
|
transform: `translate(${t.left}, ${t.top})`,
|
|
289
|
-
children: [/* @__PURE__ */
|
|
290
|
-
scale:
|
|
289
|
+
children: [/* @__PURE__ */ l(_, {
|
|
290
|
+
scale: T,
|
|
291
291
|
domainMin: m,
|
|
292
|
-
domainMax:
|
|
292
|
+
domainMax: h,
|
|
293
293
|
width: a,
|
|
294
294
|
tickCount: 5,
|
|
295
|
-
format:
|
|
296
|
-
}),
|
|
297
|
-
let n =
|
|
298
|
-
return /* @__PURE__ */
|
|
295
|
+
format: E ? (e) => r(e, E) : void 0
|
|
296
|
+
}), j.map((e, t) => {
|
|
297
|
+
let n = O * t + O / 2;
|
|
298
|
+
return /* @__PURE__ */ u("g", {
|
|
299
299
|
onClick: (t) => {
|
|
300
|
-
|
|
300
|
+
b && x && b({
|
|
301
301
|
dataPoint: { ...e },
|
|
302
|
-
clickedField:
|
|
302
|
+
clickedField: D ?? "",
|
|
303
303
|
xValue: e.label,
|
|
304
304
|
position: {
|
|
305
305
|
x: t.clientX,
|
|
@@ -308,21 +308,21 @@ var _ = r.memo(function({ data: e, chartConfig: r, displayConfig: u = {}, height
|
|
|
308
308
|
nativeEvent: t
|
|
309
309
|
});
|
|
310
310
|
},
|
|
311
|
-
cursor:
|
|
311
|
+
cursor: x ? "pointer" : void 0,
|
|
312
312
|
children: [
|
|
313
|
-
/* @__PURE__ */
|
|
314
|
-
/* @__PURE__ */
|
|
313
|
+
/* @__PURE__ */ l("title", { children: `${e.label}: min=${e.min}, Q1=${e.q1}, median=${e.median}, Q3=${e.q3}, max=${e.max}` }),
|
|
314
|
+
/* @__PURE__ */ l(g, {
|
|
315
315
|
x: n,
|
|
316
|
-
boxWidth:
|
|
317
|
-
minY:
|
|
318
|
-
q1Y:
|
|
319
|
-
medianY:
|
|
320
|
-
q3Y:
|
|
321
|
-
maxY:
|
|
316
|
+
boxWidth: k,
|
|
317
|
+
minY: T(e.min),
|
|
318
|
+
q1Y: T(e.q1),
|
|
319
|
+
medianY: T(e.median),
|
|
320
|
+
q3Y: T(e.q3),
|
|
321
|
+
maxY: T(e.max),
|
|
322
322
|
color: e.color,
|
|
323
323
|
label: e.label
|
|
324
324
|
}),
|
|
325
|
-
/* @__PURE__ */
|
|
325
|
+
/* @__PURE__ */ l("text", {
|
|
326
326
|
x: n,
|
|
327
327
|
y: o + 20,
|
|
328
328
|
textAnchor: "middle",
|
|
@@ -338,33 +338,30 @@ var _ = r.memo(function({ data: e, chartConfig: r, displayConfig: u = {}, height
|
|
|
338
338
|
})
|
|
339
339
|
}), A && /* @__PURE__ */ l("div", {
|
|
340
340
|
className: "dc:text-xs text-dc-warning dc:text-center dc:mt-1",
|
|
341
|
-
children:
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
e.length,
|
|
346
|
-
")"
|
|
347
|
-
]
|
|
341
|
+
children: S("chart.runtime.boxPlot.truncated", {
|
|
342
|
+
max: f,
|
|
343
|
+
total: e.length
|
|
344
|
+
})
|
|
348
345
|
})]
|
|
349
346
|
});
|
|
350
347
|
} catch (e) {
|
|
351
|
-
return /* @__PURE__ */
|
|
348
|
+
return /* @__PURE__ */ l("div", {
|
|
352
349
|
className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
|
|
353
|
-
style: { height:
|
|
354
|
-
children: /* @__PURE__ */
|
|
350
|
+
style: { height: v },
|
|
351
|
+
children: /* @__PURE__ */ u("div", {
|
|
355
352
|
className: "dc:text-center",
|
|
356
353
|
children: [
|
|
357
|
-
/* @__PURE__ */
|
|
354
|
+
/* @__PURE__ */ l("div", {
|
|
358
355
|
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
359
|
-
children: "Box Plot Chart
|
|
356
|
+
children: S("chart.runtime.chartError", { chartType: "Box Plot Chart" })
|
|
360
357
|
}),
|
|
361
|
-
/* @__PURE__ */
|
|
358
|
+
/* @__PURE__ */ l("div", {
|
|
362
359
|
className: "dc:text-xs dc:mb-2",
|
|
363
|
-
children: e instanceof Error ? e.message : "
|
|
360
|
+
children: e instanceof Error ? e.message : S("chart.runtime.unknownError")
|
|
364
361
|
}),
|
|
365
|
-
/* @__PURE__ */
|
|
362
|
+
/* @__PURE__ */ l("div", {
|
|
366
363
|
className: "dc:text-xs text-dc-text-muted",
|
|
367
|
-
children: "
|
|
364
|
+
children: S("chart.runtime.checkConfig")
|
|
368
365
|
})
|
|
369
366
|
]
|
|
370
367
|
})
|
|
@@ -372,6 +369,6 @@ var _ = r.memo(function({ data: e, chartConfig: r, displayConfig: u = {}, height
|
|
|
372
369
|
}
|
|
373
370
|
});
|
|
374
371
|
//#endregion
|
|
375
|
-
export {
|
|
372
|
+
export { d as t };
|
|
376
373
|
|
|
377
|
-
//# sourceMappingURL=chart-box-plot-
|
|
374
|
+
//# sourceMappingURL=chart-box-plot-o-h9MRX5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-box-plot-o-h9MRX5.js","names":[],"sources":["../../../src/client/components/charts/BoxPlotChart.tsx"],"sourcesContent":["import React, { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { formatAxisValue } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nconst MAX_BOXES = 50\n\ninterface BoxStats {\n label: string\n min: number\n q1: number\n median: number\n q3: number\n max: number\n color: string\n}\n\nfunction parseNumeric(v: unknown): number | null {\n if (v === undefined || v === null) return null\n const n = typeof v === 'number' ? v : parseFloat(String(v))\n return isNaN(n) ? null : n\n}\n\nfunction buildFrom5Measures(\n row: Record<string, unknown>,\n minField: string,\n q1Field: string,\n medianField: string,\n q3Field: string,\n maxField: string,\n label: string,\n color: string\n): BoxStats | null {\n const min = parseNumeric(row[minField])\n const q1 = parseNumeric(row[q1Field])\n const median = parseNumeric(row[medianField])\n const q3 = parseNumeric(row[q3Field])\n const max = parseNumeric(row[maxField])\n if (min === null || q1 === null || median === null || q3 === null || max === null) return null\n return { label, min, q1, median, q3, max, color }\n}\n\n/** Build approximate box stats assuming normality: Q1/Q3 at ±1σ, whiskers at ±2σ */\nfunction buildFrom3Measures(\n row: Record<string, unknown>,\n avgField: string,\n stddevField: string,\n medianField: string,\n label: string,\n color: string\n): BoxStats | null {\n const avg = parseNumeric(row[avgField])\n const sd = parseNumeric(row[stddevField])\n const median = parseNumeric(row[medianField])\n if (avg === null || sd === null || median === null) return null\n const absSd = Math.abs(sd)\n return {\n label,\n min: avg - 2 * absSd,\n q1: avg - absSd,\n median,\n q3: avg + absSd,\n max: avg + 2 * absSd,\n color,\n }\n}\n\nfunction BoxElement({\n x,\n boxWidth,\n minY,\n q1Y,\n medianY,\n q3Y,\n maxY,\n color,\n label,\n}: {\n x: number\n boxWidth: number\n minY: number\n q1Y: number\n medianY: number\n q3Y: number\n maxY: number\n color: string\n label: string\n}) {\n const halfWidth = boxWidth / 2\n const whiskerX = x\n const capWidth = boxWidth * 0.4\n\n return (\n <g data-testid={`box-${label}`}>\n {/* Whisker line (min to max) */}\n <line x1={whiskerX} y1={minY} x2={whiskerX} y2={maxY} stroke={color} strokeWidth={1.5} />\n {/* Min cap */}\n <line\n x1={whiskerX - capWidth / 2}\n y1={minY}\n x2={whiskerX + capWidth / 2}\n y2={minY}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* Max cap */}\n <line\n x1={whiskerX - capWidth / 2}\n y1={maxY}\n x2={whiskerX + capWidth / 2}\n y2={maxY}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* IQR Box (Q1 to Q3) */}\n <rect\n x={whiskerX - halfWidth}\n y={Math.min(q1Y, q3Y)}\n width={boxWidth}\n height={Math.abs(q3Y - q1Y) || 2}\n fill={color}\n fillOpacity={0.3}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* Median line */}\n <line\n x1={whiskerX - halfWidth}\n y1={medianY}\n x2={whiskerX + halfWidth}\n y2={medianY}\n stroke={color}\n strokeWidth={2.5}\n data-testid={`median-${label}`}\n />\n </g>\n )\n}\n\nfunction YAxis({\n scale,\n domainMin,\n domainMax,\n width,\n tickCount = 5,\n format,\n}: {\n scale: (v: number) => number\n domainMin: number\n domainMax: number\n width: number\n tickCount?: number\n format?: (v: number) => string\n}) {\n const ticks = useMemo(() => {\n const range = domainMax - domainMin\n if (range === 0) return [domainMin]\n const step = range / (tickCount - 1)\n return Array.from({ length: tickCount }, (_, i) => domainMin + i * step)\n }, [domainMin, domainMax, tickCount])\n\n return (\n <g data-testid=\"y-axis\">\n {ticks.map((tick, i) => (\n <g key={i} transform={`translate(0, ${scale(tick)})`}>\n <line x1={0} x2={-6} stroke=\"currentColor\" strokeWidth={1} />\n <text\n x={-10}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={11}\n fill=\"currentColor\"\n className=\"text-dc-text-secondary\"\n >\n {format ? format(tick) : tick.toLocaleString()}\n </text>\n <line x1={0} x2={width} stroke=\"currentColor\" strokeOpacity={0.1} strokeWidth={1} />\n </g>\n ))}\n <line y1={scale(ticks[0])} y2={scale(ticks[ticks.length - 1])} stroke=\"currentColor\" strokeWidth={1} />\n </g>\n )\n}\n\nconst BoxPlotChart = React.memo(function BoxPlotChart({\n data,\n chartConfig,\n displayConfig = {},\n height = '100%',\n colorPalette,\n onDataPointClick,\n drillEnabled,\n}: ChartProps) {\n const { t } = useTranslation()\n const containerRef = useRef<HTMLDivElement>(null)\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 })\n\n useLayoutEffect(() => {\n const el = containerRef.current\n if (!el) return\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height: h } = entry.contentRect\n if (width > 0 && h > 0) setDimensions({ width, height: h })\n }\n })\n observer.observe(el)\n const rect = el.getBoundingClientRect()\n if (rect.width > 0 && rect.height > 0) setDimensions({ width: rect.width, height: rect.height })\n return () => observer.disconnect()\n }, [])\n\n const yAxisFormat = displayConfig?.leftYAxisFormat\n\n const { xField, mode, fields, configError } = useMemo(() => {\n const xField = Array.isArray(chartConfig?.xAxis)\n ? chartConfig.xAxis[0]\n : chartConfig?.xAxis ?? chartConfig?.x\n\n const yAxisFields: string[] = Array.isArray(chartConfig?.yAxis)\n ? chartConfig.yAxis\n : []\n\n if (!xField || yAxisFields.length === 0) {\n return {\n xField,\n mode: 'none' as const,\n fields: {},\n configError: 'BoxPlot requires an X-Axis dimension and at least one measure in Y-Axis',\n }\n }\n\n // 5-measure mode: yAxis = [min, q1, median, q3, max]\n if (yAxisFields.length >= 5) {\n return {\n xField,\n mode: '5measure' as const,\n fields: {\n minField: yAxisFields[0],\n q1Field: yAxisFields[1],\n medianField: yAxisFields[2],\n q3Field: yAxisFields[3],\n maxField: yAxisFields[4],\n },\n configError: null,\n }\n }\n\n // 3-measure mode: yAxis = [avg, stddev, median]\n if (yAxisFields.length >= 3) {\n return {\n xField,\n mode: '3measure' as const,\n fields: {\n avgField: yAxisFields[0],\n stddevField: yAxisFields[1],\n medianField: yAxisFields[2],\n },\n configError: null,\n }\n }\n\n if (yAxisFields.length === 2) {\n return {\n xField,\n mode: 'none' as const,\n fields: {},\n configError: 'BoxPlot requires 1 measure (auto), 3 (avg/stddev/median), or 5 (min/q1/median/q3/max)',\n }\n }\n\n // Auto mode: use yAxis[0] as the value field (treated as median/value)\n return {\n xField,\n mode: 'auto' as const,\n fields: { valueField: yAxisFields[0] },\n configError: null,\n }\n }, [chartConfig])\n\n const boxes: BoxStats[] = useMemo(() => {\n if (configError || !data || data.length === 0 || mode === 'none') return []\n const rows = (data as Record<string, unknown>[]).slice(0, MAX_BOXES)\n const palette = colorPalette?.colors ?? CHART_COLORS\n\n const results: BoxStats[] = []\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const label = xField ? String(row[xField] ?? `Row ${i + 1}`) : `Row ${i + 1}`\n const color = palette[i % palette.length]\n\n let box: BoxStats | null = null\n if (mode === '5measure') {\n box = buildFrom5Measures(\n row,\n fields.minField!,\n fields.q1Field!,\n fields.medianField!,\n fields.q3Field!,\n fields.maxField!,\n label,\n color\n )\n } else if (mode === '3measure') {\n box = buildFrom3Measures(row, fields.avgField!, fields.stddevField!, fields.medianField!, label, color)\n } else {\n // Auto: use value as median, build minimal box (value ± 0)\n const v = parseNumeric(row[fields.valueField!])\n if (v !== null) {\n box = { label, min: v, q1: v, median: v, q3: v, max: v, color }\n }\n }\n if (box) results.push(box)\n }\n return results\n }, [data, xField, mode, fields, colorPalette, configError])\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.boxPlot')}</div>\n </div>\n </div>\n )\n }\n\n if (configError) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.configError')}</div>\n <div className=\"dc:text-xs\">{configError}</div>\n </div>\n </div>\n )\n }\n\n if (boxes.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\">\n {t('chart.runtime.noValidDataHint.boxPlot')}\n </div>\n </div>\n </div>\n )\n }\n\n try {\n const margin = { top: 20, right: 20, bottom: 60, left: 60 }\n const containerWidth = dimensions.width || 600\n const containerHeight = typeof height === 'number' ? height : (dimensions.height || 400)\n const innerWidth = Math.max(containerWidth - margin.left - margin.right, 50)\n const innerHeight = Math.max(containerHeight - margin.top - margin.bottom, 50)\n\n const allValues = boxes.flatMap((b) => [b.min, b.max])\n const rawMin = Math.min(...allValues)\n const rawMax = Math.max(...allValues)\n const padding = (rawMax - rawMin) * 0.1 || 1\n const domainMin = rawMin - padding\n const domainMax = rawMax + padding\n\n const domainRange = domainMax - domainMin\n const yScale = (v: number) =>\n domainRange === 0 ? innerHeight / 2 : innerHeight - ((v - domainMin) / domainRange) * innerHeight\n\n const boxSpacing = innerWidth / boxes.length\n const boxWidth = Math.min(boxSpacing * 0.6, 40)\n\n const isTruncated = (data as unknown[]).length > MAX_BOXES\n\n return (\n <div ref={containerRef} className=\"dc:relative dc:w-full\" style={{ height }}>\n <svg\n width=\"100%\"\n height={isTruncated ? `calc(100% - 20px)` : '100%'}\n viewBox={`0 0 ${containerWidth} ${typeof containerHeight === 'number' ? containerHeight : 400}`}\n preserveAspectRatio=\"none\"\n data-testid=\"boxplot-svg\"\n >\n <g transform={`translate(${margin.left}, ${margin.top})`}>\n <YAxis\n scale={yScale}\n domainMin={domainMin}\n domainMax={domainMax}\n width={innerWidth}\n tickCount={5}\n format={yAxisFormat ? (v) => formatAxisValue(v, yAxisFormat) : undefined}\n />\n\n {boxes.map((box, i) => {\n const cx = boxSpacing * i + boxSpacing / 2\n return (\n <g\n key={`${box.label}-${i}`}\n onClick={(event: React.MouseEvent) => {\n if (onDataPointClick && drillEnabled) {\n onDataPointClick({\n dataPoint: { ...box },\n clickedField: xField ?? '',\n xValue: box.label,\n position: { x: event.clientX, y: event.clientY },\n nativeEvent: event,\n })\n }\n }}\n cursor={drillEnabled ? 'pointer' : undefined}\n >\n <title>{`${box.label}: min=${box.min}, Q1=${box.q1}, median=${box.median}, Q3=${box.q3}, max=${box.max}`}</title>\n <BoxElement\n x={cx}\n boxWidth={boxWidth}\n minY={yScale(box.min)}\n q1Y={yScale(box.q1)}\n medianY={yScale(box.median)}\n q3Y={yScale(box.q3)}\n maxY={yScale(box.max)}\n color={box.color}\n label={box.label}\n />\n <text\n x={cx}\n y={innerHeight + 20}\n textAnchor=\"middle\"\n fontSize={11}\n fill=\"currentColor\"\n className=\"text-dc-text-secondary\"\n data-testid={`x-label-${box.label}`}\n >\n {box.label}\n </text>\n </g>\n )\n })}\n </g>\n </svg>\n {isTruncated && (\n <div className=\"dc:text-xs text-dc-warning dc:text-center dc:mt-1\">\n {t('chart.runtime.boxPlot.truncated', {\n max: MAX_BOXES,\n total: (data as unknown[]).length\n })}\n </div>\n )}\n </div>\n )\n } catch (error) {\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.chartError', { chartType: 'Box Plot 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 BoxPlotChart\n"],"mappings":"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"}
|