drizzle-cube 0.5.8 → 0.6.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/README.md +2 -0
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/{adapters/express → express}/index.d.ts +3 -3
- package/dist/adapters/express/index.js +50 -50
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/{adapters/fastify → fastify}/index.d.ts +3 -3
- package/dist/adapters/fastify/index.js +78 -78
- package/dist/adapters/google-BOnRIN1w.cjs +2 -0
- package/dist/{server/google-CFYljAOF.js → adapters/google-CvKM9yVM.js} +83 -71
- package/dist/adapters/{handler-Cx8QYLk6.js → handler-CfgE0JSL.js} +499 -576
- package/dist/adapters/handler-Cn0dOctE.cjs +25 -0
- package/dist/adapters/hono/agent-handler.d.ts +9 -0
- package/dist/adapters/hono/index.cjs +2 -2
- package/dist/adapters/{adapters/hono → hono}/index.d.ts +4 -4
- package/dist/adapters/hono/index.js +205 -175
- package/dist/adapters/hono/mcp-handler.d.ts +37 -0
- package/dist/adapters/locale-DDvZDFVn.js +8114 -0
- package/dist/adapters/locale-ZLUUNUxr.cjs +166 -0
- package/dist/adapters/{adapters/locale.d.ts → locale.d.ts} +1 -1
- package/dist/adapters/mcp-tools-handlers.d.ts +18 -0
- package/dist/adapters/mcp-tools.cjs +1 -1
- package/dist/adapters/{adapters/mcp-tools.d.ts → mcp-tools.d.ts} +5 -5
- package/dist/adapters/mcp-tools.js +49 -38
- package/dist/adapters/mcp-transport-B7ddET3M.cjs +40 -0
- package/dist/adapters/mcp-transport-Dfuj4j4q.js +591 -0
- package/dist/adapters/{adapters/mcp-transport.d.ts → mcp-transport.d.ts} +3 -3
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/{adapters/nextjs → nextjs}/index.d.ts +3 -3
- package/dist/adapters/nextjs/index.js +190 -197
- package/dist/adapters/nextjs/mcp-handler.d.ts +36 -0
- package/dist/adapters/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
- package/dist/adapters/openai-vXvLni8v.cjs +1 -0
- package/dist/adapters/{adapters/types.d.ts → types.d.ts} +1 -1
- package/dist/adapters/{utils-D9JPLmfl.js → utils-BPWZsX7k.js} +1271 -1218
- package/dist/adapters/utils-_whV4fXL.cjs +128 -0
- package/dist/adapters/utils.cjs +1 -1
- package/dist/adapters/{adapters/utils.d.ts → utils.d.ts} +17 -92
- package/dist/adapters/utils.js +2 -2
- package/dist/cli/index.cjs +2 -2
- package/dist/client/adapters/adapterRegistry.d.ts +2 -2
- package/dist/client/adapters/flowModeAdapter.d.ts +2 -2
- package/dist/client/adapters/funnelModeAdapter.d.ts +2 -2
- package/dist/client/adapters/index.d.ts +9 -9
- package/dist/client/adapters/modeAdapter.d.ts +1 -1
- package/dist/client/adapters/queryModeAdapter.d.ts +3 -3
- package/dist/client/adapters/retentionModeAdapter.d.ts +2 -2
- package/dist/client/charts/ChartLoader.d.ts +3 -17
- package/dist/client/charts/chartComponentRegistry.d.ts +46 -0
- package/dist/client/charts/chartConfigHelpers.d.ts +38 -0
- package/dist/client/charts/chartConfigRegistry.d.ts +1 -1
- package/dist/client/charts/chartPlugin.d.ts +3 -3
- package/dist/client/charts/lazyChartConfigRegistry.d.ts +2 -2
- package/dist/client/charts.d.ts +8 -8
- package/dist/client/charts.js +14 -13
- package/dist/client/chunks/{DashboardEditModal-CjCIAT-J.js → DashboardEditModal-okVfH8ZK.js} +5296 -4544
- package/dist/client/chunks/DashboardEditModal-okVfH8ZK.js.map +1 -0
- package/dist/client/chunks/{RetentionCombinedChart-BPkfcTa8.js → RetentionCombinedChart-BgbDhsPz.js} +10 -10
- package/dist/client/chunks/RetentionCombinedChart-BgbDhsPz.js.map +1 -0
- package/dist/client/chunks/{RetentionHeatmap-DGzLzr7h.js → RetentionHeatmap-DjXZaTPq.js} +5 -5
- package/dist/client/chunks/RetentionHeatmap-DjXZaTPq.js.map +1 -0
- package/dist/client/chunks/analysis-builder-DB88FojM.js +5674 -0
- package/dist/client/chunks/analysis-builder-DB88FojM.js.map +1 -0
- package/dist/client/chunks/{analysis-builder-shared-CYVwSPqt.js → analysis-builder-shared-BVK4TYfR.js} +1578 -1292
- package/dist/client/chunks/analysis-builder-shared-BVK4TYfR.js.map +1 -0
- package/dist/client/chunks/{chart-activity-grid-DmruKPab.js → chart-activity-grid-DX0SJbxs.js} +635 -492
- package/dist/client/chunks/chart-activity-grid-DX0SJbxs.js.map +1 -0
- package/dist/client/chunks/chart-area-of01_62R.js +775 -0
- package/dist/client/chunks/chart-area-of01_62R.js.map +1 -0
- package/dist/client/chunks/chart-bar-BqelQE_I.js +194 -0
- package/dist/client/chunks/chart-bar-BqelQE_I.js.map +1 -0
- package/dist/client/chunks/{chart-box-plot-DYKfyOI8.js → chart-box-plot-kkBixZ27.js} +2 -2
- package/dist/client/chunks/chart-box-plot-kkBixZ27.js.map +1 -0
- package/dist/client/chunks/chart-bubble-B2he1--4.js +221 -0
- package/dist/client/chunks/chart-bubble-B2he1--4.js.map +1 -0
- package/dist/client/chunks/{chart-candlestick-Dwc92Mrj.js → chart-candlestick-DZp19Tzh.js} +2 -2
- package/dist/client/chunks/chart-candlestick-DZp19Tzh.js.map +1 -0
- package/dist/client/chunks/chart-config-activity-grid-D_UX4NHC.js.map +1 -1
- package/dist/client/chunks/chart-config-area-BNigHUy8.js +124 -0
- package/dist/client/chunks/chart-config-area-BNigHUy8.js.map +1 -0
- package/dist/client/chunks/chart-config-bar-DSO_LRTx.js +54 -0
- package/dist/client/chunks/chart-config-bar-DSO_LRTx.js.map +1 -0
- package/dist/client/chunks/{chart-config-box-plot-DJ-dWWXA.js → chart-config-box-plot-oW8axV2q.js} +5 -10
- package/dist/client/chunks/chart-config-box-plot-oW8axV2q.js.map +1 -0
- package/dist/client/chunks/chart-config-bubble-gIoqVyjZ.js.map +1 -1
- package/dist/client/chunks/chart-config-candlestick-N6DchAA3.js.map +1 -1
- package/dist/client/chunks/chart-config-data-table-d7VBY-y_.js.map +1 -1
- package/dist/client/chunks/chart-config-funnel-DEYMcxsD.js.map +1 -1
- package/dist/client/chunks/{chart-config-gauge-DSwC04l0.js → chart-config-gauge-Dq-_H9UN.js} +5 -7
- package/dist/client/chunks/chart-config-gauge-Dq-_H9UN.js.map +1 -0
- package/dist/client/chunks/chart-config-heat-map-CfRnRNcw.js.map +1 -1
- package/dist/client/chunks/{chart-config-kpi-delta-D6BIkHL3.js → chart-config-kpi-delta-DSQbvqu_.js} +5 -10
- package/dist/client/chunks/chart-config-kpi-delta-DSQbvqu_.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-number-Bx-V9a62.js → chart-config-kpi-number-EFSWY1We.js} +5 -7
- package/dist/client/chunks/chart-config-kpi-number-EFSWY1We.js.map +1 -0
- package/dist/client/chunks/{chart-config-kpi-text-CcqC1u-8.js → chart-config-kpi-text-KM3V5X2u.js} +5 -7
- package/dist/client/chunks/chart-config-kpi-text-KM3V5X2u.js.map +1 -0
- package/dist/client/chunks/{chart-config-line-Db3jDsWc.js → chart-config-line-D6jG8PCH.js} +9 -36
- package/dist/client/chunks/chart-config-line-D6jG8PCH.js.map +1 -0
- package/dist/client/chunks/chart-config-markdown-BtRIe8JN.js.map +1 -1
- package/dist/client/chunks/chart-config-measure-profile-DxRGa-zf.js.map +1 -1
- package/dist/client/chunks/{chart-config-pie-DD4SmRTF.js → chart-config-pie-BhzW-fdn.js} +6 -16
- package/dist/client/chunks/chart-config-pie-BhzW-fdn.js.map +1 -0
- package/dist/client/chunks/{chart-config-radar-CC2XAaGr.js → chart-config-radar-D7REP1q_.js} +6 -16
- package/dist/client/chunks/chart-config-radar-D7REP1q_.js.map +1 -0
- package/dist/client/chunks/{chart-config-radial-bar-DmxKx1R0.js → chart-config-radial-bar-Byx6qOPU.js} +6 -16
- package/dist/client/chunks/chart-config-radial-bar-Byx6qOPU.js.map +1 -0
- package/dist/client/chunks/chart-config-sankey-BTnWA7EW.js.map +1 -1
- package/dist/client/chunks/chart-config-scatter-DSYTjwRb.js.map +1 -1
- package/dist/client/chunks/chart-config-sunburst-Bwjtdf7X.js.map +1 -1
- package/dist/client/chunks/{chart-config-tree-map-BI-oQStO.js → chart-config-tree-map-DVrvf3yQ.js} +6 -16
- package/dist/client/chunks/chart-config-tree-map-DVrvf3yQ.js.map +1 -0
- package/dist/client/chunks/{chart-config-waterfall-DSnyixbI.js → chart-config-waterfall-DmFeQdIk.js} +5 -10
- package/dist/client/chunks/chart-config-waterfall-DmFeQdIk.js.map +1 -0
- package/dist/client/chunks/{chart-data-table-BO4sXsim.js → chart-data-table-CKauQXme.js} +1046 -1121
- package/dist/client/chunks/chart-data-table-CKauQXme.js.map +1 -0
- package/dist/client/chunks/{chart-funnel-DnWRsmnS.js → chart-funnel-CToKSBaL.js} +184 -222
- package/dist/client/chunks/chart-funnel-CToKSBaL.js.map +1 -0
- package/dist/client/chunks/chart-gauge-DTVezSk7.js +403 -0
- package/dist/client/chunks/chart-gauge-DTVezSk7.js.map +1 -0
- package/dist/client/chunks/chart-heat-map-DTuUl0BR.js +236 -0
- package/dist/client/chunks/chart-heat-map-DTuUl0BR.js.map +1 -0
- package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js +408 -0
- package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js.map +1 -0
- package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js +244 -0
- package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js.map +1 -0
- package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js +185 -0
- package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js.map +1 -0
- package/dist/client/chunks/chart-line-DKgrQA6c.js +101 -0
- package/dist/client/chunks/chart-line-DKgrQA6c.js.map +1 -0
- package/dist/client/chunks/{chart-markdown-dgUetjyM.js → chart-markdown-CV75S_zL.js} +2 -2
- package/dist/client/chunks/chart-markdown-CV75S_zL.js.map +1 -0
- package/dist/client/chunks/{chart-measure-profile-ClfpLs4q.js → chart-measure-profile-Ket8fJyf.js} +7 -7
- package/dist/client/chunks/chart-measure-profile-Ket8fJyf.js.map +1 -0
- package/dist/client/chunks/chart-pie-ByieAX5H.js +119 -0
- package/dist/client/chunks/chart-pie-ByieAX5H.js.map +1 -0
- package/dist/client/chunks/chart-radar-CiSwHWp4.js +138 -0
- package/dist/client/chunks/chart-radar-CiSwHWp4.js.map +1 -0
- package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js +122 -0
- package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js.map +1 -0
- package/dist/client/chunks/{chart-sankey-M3XpO_ah.js → chart-sankey-DjrvKw6K.js} +36 -39
- package/dist/client/chunks/chart-sankey-DjrvKw6K.js.map +1 -0
- package/dist/client/chunks/chart-scatter-Dd9WFqnS.js +258 -0
- package/dist/client/chunks/chart-scatter-Dd9WFqnS.js.map +1 -0
- package/dist/client/chunks/{chart-sunburst-A_u6lqlS.js → chart-sunburst-leGpuDj7.js} +3 -3
- package/dist/client/chunks/chart-sunburst-leGpuDj7.js.map +1 -0
- package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js +323 -0
- package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js.map +1 -0
- package/dist/client/chunks/{chart-waterfall-BuhMoagf.js → chart-waterfall-DyvQReN5.js} +7 -7
- package/dist/client/chunks/chart-waterfall-DyvQReN5.js.map +1 -0
- package/dist/client/chunks/{charts-core-jRtb0S2M.js → charts-core-DaXSt1Dd.js} +2 -2
- package/dist/client/chunks/charts-core-DaXSt1Dd.js.map +1 -0
- package/dist/client/chunks/charts-loader-DdTeCeNo.js +84 -0
- package/dist/client/chunks/charts-loader-DdTeCeNo.js.map +1 -0
- package/dist/client/chunks/{nl-NL-CpVs7ox3.js → nl-NL-2zTAWTej.js} +2 -1
- package/dist/client/chunks/{nl-NL-CpVs7ox3.js.map → nl-NL-2zTAWTej.js.map} +1 -1
- package/dist/client/chunks/retention-ChW9jYdy.js.map +1 -1
- package/dist/client/chunks/{schema-visualization-DE09kQE3.js → schema-visualization-Cb_E9_Gd.js} +12 -12
- package/dist/client/chunks/schema-visualization-Cb_E9_Gd.js.map +1 -0
- package/dist/client/chunks/{useDirtyStateTracking-CoeQbprt.js → useDirtyStateTracking-MbpxH_v6.js} +95 -84
- package/dist/client/chunks/useDirtyStateTracking-MbpxH_v6.js.map +1 -0
- package/dist/client/chunks/{useExplainAI-DlnXWdmz.js → useExplainAI-evnZkjCY.js} +14 -14
- package/dist/client/chunks/useExplainAI-evnZkjCY.js.map +1 -0
- package/dist/client/chunks/{utils-CTKNaXS8.js → utils-3P6z1vz5.js} +2 -2
- package/dist/client/chunks/utils-3P6z1vz5.js.map +1 -0
- package/dist/client/chunks/{vendor-CPIYyeuD.js → vendor-DSpR0IW6.js} +43 -43
- package/dist/client/chunks/{vendor-CPIYyeuD.js.map → vendor-DSpR0IW6.js.map} +1 -1
- package/dist/client/client/BatchCoordinator.d.ts +1 -1
- package/dist/client/client/CubeClient.d.ts +1 -1
- package/dist/client/components/AIAssistant/index.d.ts +3 -3
- package/dist/client/components/AIAssistant/utils.d.ts +1 -1
- package/dist/client/components/AgenticNotebook/ChatMessage.d.ts +1 -1
- package/dist/client/components/AgenticNotebook/NotebookCanvas.d.ts +1 -1
- package/dist/client/components/AgenticNotebook/NotebookMarkdownBlock.d.ts +1 -1
- package/dist/client/components/AgenticNotebook/NotebookPortletBlock.d.ts +2 -2
- package/dist/client/components/AgenticNotebook/agentChatParts.d.ts +34 -0
- package/dist/client/components/AgenticNotebook/chatMessageParts.d.ts +39 -0
- package/dist/client/components/AgenticNotebook/index.d.ts +2 -2
- package/dist/client/components/AgenticNotebook/useAgentChatController.d.ts +25 -0
- package/dist/client/components/AgenticNotebook/useNotebookAutosave.d.ts +12 -0
- package/dist/client/components/AnalysisBuilder/AnalysisAxisDropZone.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisChartConfigPanel.d.ts +4 -4
- package/dist/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisFilterGroup.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/AnalysisFilterItem.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/AnalysisFilterSection.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisQueryPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisQueryPanelParts.d.ts +64 -0
- package/dist/client/components/AnalysisBuilder/AnalysisResultsHeader.d.ts +67 -0
- package/dist/client/components/AnalysisBuilder/AnalysisResultsPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisTypeSelector.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/BreakdownComparisonToggle.d.ts +13 -0
- package/dist/client/components/AnalysisBuilder/BreakdownItemCard.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/BreakdownRow.d.ts +26 -0
- package/dist/client/components/AnalysisBuilder/BreakdownSection.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/DisplayOptionControl.d.ts +10 -0
- package/dist/client/components/AnalysisBuilder/ExecutionPlanPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/ExecutionPlanPanelParts.d.ts +22 -0
- package/dist/client/components/AnalysisBuilder/ExplainAIPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldDetailPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldSearchItem.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldSearchModal.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FieldSearchResults.d.ts +16 -0
- package/dist/client/components/AnalysisBuilder/FilterConfigModal.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/FilterValueInput.d.ts +63 -0
- package/dist/client/components/AnalysisBuilder/FlowConfigPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FlowDepthControls.d.ts +10 -0
- package/dist/client/components/AnalysisBuilder/FlowModeContent.d.ts +3 -3
- package/dist/client/components/AnalysisBuilder/FlowVisualizationPicker.d.ts +7 -0
- package/dist/client/components/AnalysisBuilder/FunnelBindingKeySelector.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FunnelConfigPanel.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FunnelModeContent.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/FunnelStepCard.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/FunnelStepList.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/LegacyBooleanOptions.d.ts +8 -0
- package/dist/client/components/AnalysisBuilder/MetricItemCard.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/MetricRow.d.ts +23 -0
- package/dist/client/components/AnalysisBuilder/MetricsSection.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/RetentionConfigPanel.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/RetentionModeContent.d.ts +3 -3
- package/dist/client/components/AnalysisBuilder/SortToggleButton.d.ts +13 -0
- package/dist/client/components/AnalysisBuilder/StringArrayInput.d.ts +17 -0
- package/dist/client/components/AnalysisBuilder/filterConfigModalUtils.d.ts +30 -0
- package/dist/client/components/AnalysisBuilder/hooks/useAnalysisBuilderImperativeHandle.d.ts +13 -0
- package/dist/client/components/AnalysisBuilder/hooks/useDragReorder.d.ts +25 -0
- package/dist/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.d.ts +11 -0
- package/dist/client/components/AnalysisBuilder/index.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/types.d.ts +28 -28
- package/dist/client/components/AnalysisBuilder/utils/axisConfigUtils.d.ts +23 -0
- package/dist/client/components/AnalysisBuilder/utils/executionPlanMarkdown.d.ts +8 -0
- package/dist/client/components/AnalysisBuilder/utils/fieldUtils.d.ts +7 -2
- package/dist/client/components/AnalysisBuilder/utils/filterUtils.d.ts +1 -1
- package/dist/client/components/AnalysisBuilder/utils/index.d.ts +6 -6
- package/dist/client/components/AnalysisBuilder/utils/queryUtils.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/utils/recentFieldsUtils.d.ts +2 -2
- package/dist/client/components/AnalysisBuilder/utils/resultsPanelDerive.d.ts +68 -0
- package/dist/client/components/AnalysisBuilder/utils/shareStateUtils.d.ts +68 -0
- package/dist/client/components/AnalysisBuilder/utils/sortUtils.d.ts +7 -0
- package/dist/client/components/AnalysisBuilder/utils/storageUtils.d.ts +2 -2
- package/dist/client/components/AnalysisBuilderLazy.d.ts +1 -1
- package/dist/client/components/AnalyticsDashboard.d.ts +1 -1
- package/dist/client/components/AnalyticsPortlet.d.ts +1 -1
- package/dist/client/components/ChartTypeSelector.d.ts +2 -2
- package/dist/client/components/DashboardFilterPanel.d.ts +1 -1
- package/dist/client/components/DashboardFilters/CompactFilterBar.d.ts +1 -1
- package/dist/client/components/DashboardFilters/CompactFilterBarParts.d.ts +26 -0
- package/dist/client/components/DashboardFilters/DashboardFilterConfigModal.d.ts +2 -2
- package/dist/client/components/DashboardFilters/DashboardFilterConfigModalParts.d.ts +27 -0
- package/dist/client/components/DashboardFilters/DashboardFilterItem.d.ts +2 -2
- package/dist/client/components/DashboardFilters/DashboardFilterValueInput.d.ts +39 -0
- package/dist/client/components/DashboardFilters/EditModeFilterList.d.ts +1 -1
- package/dist/client/components/DashboardFilters/FilterChip.d.ts +1 -1
- package/dist/client/components/DashboardFilters/FilterEditModal.d.ts +2 -2
- package/dist/client/components/DashboardFilters/FilterValuePopover.d.ts +1 -1
- package/dist/client/components/DashboardFilters/ReadOnlyFilterList.d.ts +2 -2
- package/dist/client/components/DashboardFilters/dashboardFilterConfigModalUtils.d.ts +21 -0
- package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +19 -0
- package/dist/client/components/DashboardFilters/useDashboardFilterConfigModal.d.ts +69 -0
- package/dist/client/components/DashboardFilters/useDateRangeState.d.ts +19 -0
- package/dist/client/components/DashboardFilters/useFilterDropdowns.d.ts +21 -0
- package/dist/client/components/DashboardFilters/useFilterValueFetch.d.ts +23 -0
- package/dist/client/components/DashboardGrid.d.ts +2 -2
- package/dist/client/components/DashboardPortletCard.d.ts +2 -57
- package/dist/client/components/DebugModal.d.ts +2 -2
- package/dist/client/components/DrillBreadcrumb.d.ts +1 -1
- package/dist/client/components/DrillMenu.d.ts +1 -1
- package/dist/client/components/FloatingEditToolbar.d.ts +1 -1
- package/dist/client/components/MobileStackedLayout.d.ts +2 -2
- package/dist/client/components/PortletAnalysisModal.d.ts +1 -1
- package/dist/client/components/PortletContainer.d.ts +1 -1
- package/dist/client/components/PortletFilterConfigModal.d.ts +1 -1
- package/dist/client/components/RowManagedLayout.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/CubeNode.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/FieldDetailPanel.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/RelationshipEdge.d.ts +1 -1
- package/dist/client/components/SchemaVisualization/SchemaVisualizationLazy.d.ts +1 -1
- package/dist/client/components/TextPortletModal.d.ts +2 -2
- package/dist/client/components/analyticsPortlet/PortletChart.d.ts +31 -0
- package/dist/client/components/analyticsPortlet/PortletChartView.d.ts +35 -0
- package/dist/client/components/analyticsPortlet/PortletStates.d.ts +65 -0
- package/dist/client/components/analyticsPortlet/parsePortletQuery.d.ts +22 -0
- package/dist/client/components/analyticsPortlet/portletRenderState.d.ts +31 -0
- package/dist/client/components/analyticsPortlet/usePortletDebugData.d.ts +37 -0
- package/dist/client/components/analyticsPortlet/usePortletDrillState.d.ts +17 -0
- package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +37 -0
- package/dist/client/components/charts/ActivityGridChart.config.d.ts +1 -1
- package/dist/client/components/charts/ActivityGridChart.d.ts +1 -1
- package/dist/client/components/charts/ActivityGridChart.helpers.d.ts +33 -0
- package/dist/client/components/charts/ActivityGridChart.render.d.ts +31 -0
- package/dist/client/components/charts/AreaChart.config.d.ts +1 -1
- package/dist/client/components/charts/AreaChart.d.ts +1 -1
- package/dist/client/components/charts/AxisFormatControls.d.ts +4 -2
- package/dist/client/components/charts/BarChart.config.d.ts +1 -1
- package/dist/client/components/charts/BarChart.d.ts +1 -1
- package/dist/client/components/charts/BarChart.helpers.d.ts +23 -0
- package/dist/client/components/charts/BarSeries.d.ts +29 -0
- package/dist/client/components/charts/BoxPlotChart.config.d.ts +1 -1
- package/dist/client/components/charts/BoxPlotChart.d.ts +1 -1
- package/dist/client/components/charts/BubbleChart.config.d.ts +1 -1
- package/dist/client/components/charts/BubbleChart.d.ts +1 -1
- package/dist/client/components/charts/BubbleChart.helpers.d.ts +43 -0
- package/dist/client/components/charts/BubbleChart.render.d.ts +21 -0
- package/dist/client/components/charts/CandlestickChart.config.d.ts +1 -1
- package/dist/client/components/charts/CandlestickChart.d.ts +1 -1
- package/dist/client/components/charts/ChartStates.d.ts +38 -0
- package/dist/client/components/charts/DataTable.config.d.ts +1 -1
- package/dist/client/components/charts/DataTable.d.ts +1 -1
- package/dist/client/components/charts/FunnelChart.config.d.ts +1 -1
- package/dist/client/components/charts/FunnelChart.d.ts +1 -1
- package/dist/client/components/charts/FunnelChart.helpers.d.ts +25 -0
- package/dist/client/components/charts/FunnelViews.d.ts +16 -0
- package/dist/client/components/charts/GaugeChart.config.d.ts +1 -1
- package/dist/client/components/charts/GaugeChart.d.ts +1 -1
- package/dist/client/components/charts/HeatMapCanvas.d.ts +25 -0
- package/dist/client/components/charts/HeatMapChart.config.d.ts +1 -1
- package/dist/client/components/charts/HeatMapChart.d.ts +1 -1
- package/dist/client/components/charts/HeatMapChart.helpers.d.ts +64 -0
- package/dist/client/components/charts/KpiDelta.config.d.ts +1 -1
- package/dist/client/components/charts/KpiDelta.d.ts +1 -1
- package/dist/client/components/charts/KpiDelta.helpers.d.ts +20 -0
- package/dist/client/components/charts/KpiNumber.config.d.ts +1 -1
- package/dist/client/components/charts/KpiNumber.d.ts +1 -1
- package/dist/client/components/charts/KpiNumber.helpers.d.ts +30 -0
- package/dist/client/components/charts/KpiStates.d.ts +19 -0
- package/dist/client/components/charts/KpiText.config.d.ts +1 -1
- package/dist/client/components/charts/KpiText.d.ts +1 -1
- package/dist/client/components/charts/LineChart.config.d.ts +1 -1
- package/dist/client/components/charts/LineChart.d.ts +1 -1
- package/dist/client/components/charts/MarkdownChart.config.d.ts +1 -1
- package/dist/client/components/charts/MarkdownChart.d.ts +1 -1
- package/dist/client/components/charts/MeasureProfileChart.config.d.ts +1 -1
- package/dist/client/components/charts/MeasureProfileChart.d.ts +1 -1
- package/dist/client/components/charts/PieChart.config.d.ts +1 -1
- package/dist/client/components/charts/PieChart.d.ts +1 -1
- package/dist/client/components/charts/RadarChart.config.d.ts +1 -1
- package/dist/client/components/charts/RadarChart.d.ts +1 -1
- package/dist/client/components/charts/RadialBarChart.config.d.ts +1 -1
- package/dist/client/components/charts/RadialBarChart.d.ts +1 -1
- package/dist/client/components/charts/RetentionCombinedChart.config.d.ts +1 -1
- package/dist/client/components/charts/RetentionCombinedChart.d.ts +1 -1
- package/dist/client/components/charts/RetentionHeatmap.config.d.ts +1 -1
- package/dist/client/components/charts/RetentionHeatmap.d.ts +1 -1
- package/dist/client/components/charts/SankeyChart.config.d.ts +1 -1
- package/dist/client/components/charts/SankeyChart.d.ts +1 -1
- package/dist/client/components/charts/ScatterChart.config.d.ts +1 -1
- package/dist/client/components/charts/ScatterChart.d.ts +1 -1
- package/dist/client/components/charts/ScatterChart.helpers.d.ts +43 -0
- package/dist/client/components/charts/ScatterSeries.d.ts +17 -0
- package/dist/client/components/charts/ScatterTooltip.d.ts +21 -0
- package/dist/client/components/charts/SunburstChart.config.d.ts +1 -1
- package/dist/client/components/charts/SunburstChart.d.ts +1 -1
- package/dist/client/components/charts/TreeMapChart.config.d.ts +1 -1
- package/dist/client/components/charts/TreeMapChart.d.ts +1 -1
- package/dist/client/components/charts/TreeMapChart.helpers.d.ts +37 -0
- package/dist/client/components/charts/TreeMapContent.d.ts +24 -0
- package/dist/client/components/charts/TreeMapLegend.d.ts +13 -0
- package/dist/client/components/charts/WaterfallChart.config.d.ts +1 -1
- package/dist/client/components/charts/WaterfallChart.d.ts +1 -1
- package/dist/client/components/charts/cartesianChartHelpers.d.ts +126 -0
- package/dist/client/components/charts/chartAxisResolution.d.ts +32 -0
- package/dist/client/components/charts/chartScaffolding.d.ts +77 -0
- package/dist/client/components/charts/gaugeChartHelpers.d.ts +36 -0
- package/dist/client/components/charts/index.d.ts +21 -21
- package/dist/client/components/charts/kpiTextHelpers.d.ts +46 -0
- package/dist/client/components/charts/radarChartHelpers.d.ts +14 -0
- package/dist/client/components/charts/radialBarChartHelpers.d.ts +22 -0
- package/dist/client/components/charts/useChartDimensions.d.ts +20 -0
- package/dist/client/components/charts/useKpiDimensions.d.ts +30 -0
- package/dist/client/components/dashboard/DashboardContext.d.ts +6 -6
- package/dist/client/components/dashboard/DashboardCoordinator.d.ts +1 -1
- package/dist/client/components/dashboard/DashboardEditBar.d.ts +5 -0
- package/dist/client/components/dashboard/DashboardProvider.d.ts +1 -1
- package/dist/client/components/dashboard/LayoutModeToggle.d.ts +10 -0
- package/dist/client/components/dashboard/dashboardGridUtils.d.ts +1 -1
- package/dist/client/components/dashboard/index.d.ts +7 -7
- package/dist/client/components/dashboardPortletCard/FilterFieldChip.d.ts +12 -0
- package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +43 -0
- package/dist/client/components/dashboardPortletCard/cardStyles.d.ts +33 -0
- package/dist/client/components/dashboardPortletCard/filterField.d.ts +12 -0
- package/dist/client/components/dashboardPortletCard/propsEqual.d.ts +55 -0
- package/dist/client/components/dashboardPortletCard/usePortletCardActions.d.ts +16 -0
- package/dist/client/components/portletAnalysisModal/saveValidation.d.ts +8 -0
- package/dist/client/components/shared/DateRangeFilter.d.ts +1 -1
- package/dist/client/components/shared/FilterBuilder.d.ts +1 -1
- package/dist/client/components/shared/FilterGroup.d.ts +1 -1
- package/dist/client/components/shared/FilterItem.d.ts +1 -1
- package/dist/client/components/shared/FilterValueSelector.d.ts +1 -1
- package/dist/client/components/shared/dateRangeUtils.d.ts +40 -0
- package/dist/client/components/shared/filterDisplayUtils.d.ts +10 -0
- package/dist/client/components/shared/filterItem/FilterDateRangeSelector.d.ts +17 -0
- package/dist/client/components/shared/filterItem/FilterFieldDropdown.d.ts +16 -0
- package/dist/client/components/shared/filterItem/dateRangeSync.d.ts +14 -0
- package/dist/client/components/shared/filterItem/fieldVisuals.d.ts +5 -0
- package/dist/client/components/shared/filterValueSelector/FilterValueInputs.d.ts +55 -0
- package/dist/client/components/shared/filterValueSelector/useFilterValueSelectorState.d.ts +25 -0
- package/dist/client/components/shared/queryFieldUtils.d.ts +21 -0
- package/dist/client/components/shared/types.d.ts +8 -8
- package/dist/client/components/shared/utils.d.ts +7 -46
- package/dist/client/components.d.ts +11 -11
- package/dist/client/components.js +3 -3
- package/dist/client/hooks/agentChatStream.d.ts +39 -0
- package/dist/client/hooks/analysisQueryExecutionModes.d.ts +133 -0
- package/dist/client/hooks/dashboard/layoutUtils.d.ts +1 -1
- package/dist/client/hooks/dashboard/useDashboardController.d.ts +2 -2
- package/dist/client/hooks/dashboard/useGridLayoutEngine.d.ts +1 -1
- package/dist/client/hooks/dashboard/useRowLayoutEngine.d.ts +1 -1
- package/dist/client/hooks/drillNavigation.d.ts +25 -0
- package/dist/client/hooks/queries/index.d.ts +9 -9
- package/dist/client/hooks/queries/useCubeLoadQuery.d.ts +2 -2
- package/dist/client/hooks/queries/useCubeMetaQuery.d.ts +2 -2
- package/dist/client/hooks/queries/useDryRunQuery.d.ts +2 -2
- package/dist/client/hooks/queries/useExplainAI.d.ts +1 -1
- package/dist/client/hooks/queries/useExplainQuery.d.ts +1 -1
- package/dist/client/hooks/queries/useFlowQuery.d.ts +1 -1
- package/dist/client/hooks/queries/useFunnelQuery.d.ts +1 -1
- package/dist/client/hooks/queries/useMultiCubeLoadQuery.d.ts +1 -1
- package/dist/client/hooks/queries/useRetentionQuery.d.ts +1 -1
- package/dist/client/hooks/useAgentChat.d.ts +1 -1
- package/dist/client/hooks/useAnalysisAI.d.ts +4 -4
- package/dist/client/hooks/useAnalysisBuilderHook.d.ts +27 -27
- package/dist/client/hooks/useAnalysisChartDefaults.d.ts +4 -4
- package/dist/client/hooks/useAnalysisCombinedFields.d.ts +2 -2
- package/dist/client/hooks/useAnalysisInitialization.d.ts +1 -1
- package/dist/client/hooks/useAnalysisQueryBuilder.d.ts +3 -3
- package/dist/client/hooks/useAnalysisQueryExecution.d.ts +7 -7
- package/dist/client/hooks/useAnalysisShare.d.ts +1 -1
- package/dist/client/hooks/useAnalysisUIState.d.ts +2 -2
- package/dist/client/hooks/useDashboardHook.d.ts +2 -2
- package/dist/client/hooks/useDataBrowser.d.ts +5 -5
- package/dist/client/hooks/useDrillInteraction.d.ts +1 -1
- package/dist/client/hooks/useTheme.d.ts +1 -1
- package/dist/client/hooks/useTranslation.d.ts +1 -1
- package/dist/client/hooks.d.ts +11 -11
- package/dist/client/hooks.js +3 -3
- package/dist/client/icons/defaultIcons.d.ts +1 -1
- package/dist/client/icons/index.d.ts +3 -3
- package/dist/client/icons/registry.d.ts +1 -1
- package/dist/client/icons.js +2 -2
- package/dist/client/index.d.ts +74 -74
- package/dist/client/index.js +816 -669
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers/CubeApiProvider.d.ts +3 -3
- package/dist/client/providers/CubeFeaturesProvider.d.ts +1 -1
- package/dist/client/providers/CubeMetaContext.d.ts +1 -1
- package/dist/client/providers/CubeProvider.d.ts +7 -7
- package/dist/client/providers/I18nProvider.d.ts +1 -1
- package/dist/client/providers.d.ts +4 -4
- package/dist/client/providers.js +3 -3
- package/dist/client/schema.d.ts +2 -2
- package/dist/client/schema.js +1 -1
- package/dist/client/shared/chartConfigBuilders.d.ts +18 -0
- package/dist/client/shared/chartDefaults.d.ts +4 -4
- package/dist/client/shared/components/QueryAnalysisPanel.d.ts +1 -1
- package/dist/client/shared/components/QueryAnalysisPanel.sections.d.ts +41 -0
- package/dist/client/shared/index.d.ts +7 -7
- package/dist/client/shared/queryTransforms.d.ts +20 -0
- package/dist/client/shared/types.d.ts +1 -1
- package/dist/client/shared/utils.d.ts +4 -6
- package/dist/client/stores/analysisBuilderStore.d.ts +9 -9
- package/dist/client/stores/dashboardStore.d.ts +3 -3
- package/dist/client/stores/dataBrowserStore.d.ts +1 -1
- package/dist/client/stores/notebookStore.d.ts +1 -1
- package/dist/client/stores/optionsToAnalysisConfig.d.ts +17 -0
- package/dist/client/stores/slices/coreSlice.d.ts +3 -3
- package/dist/client/stores/slices/flowSlice.d.ts +3 -3
- package/dist/client/stores/slices/funnelSlice.d.ts +3 -3
- package/dist/client/stores/slices/index.d.ts +7 -7
- package/dist/client/stores/slices/querySlice.d.ts +3 -3
- package/dist/client/stores/slices/retentionSlice.d.ts +3 -3
- package/dist/client/stores/slices/uiSlice.d.ts +2 -2
- package/dist/client/styles.css +1 -1
- package/dist/client/types/analysisConfig.d.ts +4 -4
- package/dist/client/types/drill.d.ts +5 -5
- package/dist/client/types/flow.d.ts +2 -2
- package/dist/client/types/funnel.d.ts +1 -1
- package/dist/client/types/retention.d.ts +2 -2
- package/dist/client/types.d.ts +12 -12
- package/dist/client/utils/axisValueFormatting.d.ts +32 -0
- package/dist/client/utils/chartUtils.d.ts +1 -1
- package/dist/client/utils/configMigration.d.ts +2 -2
- package/dist/client/utils/drillQueryBuilder.d.ts +2 -2
- package/dist/client/utils/exportXlsx.d.ts +2 -2
- package/dist/client/utils/filterUtils.d.ts +1 -1
- package/dist/client/utils/funnelExecution.d.ts +2 -2
- package/dist/client/utils/funnelValidation.d.ts +2 -2
- package/dist/client/utils/index.d.ts +10 -10
- package/dist/client/utils/joinReachability.d.ts +1 -1
- package/dist/client/utils/multiQueryUtils.d.ts +1 -1
- package/dist/client/utils/multiQueryValidation.d.ts +1 -1
- package/dist/client/utils/pivotUtils.d.ts +1 -1
- package/dist/client/utils/shareUtils.d.ts +1 -1
- package/dist/client/utils/thumbnail.d.ts +1 -1
- package/dist/client/utils/timeValueFormatting.d.ts +32 -0
- package/dist/client/utils.d.ts +2 -2
- package/dist/client/utils.js +6 -6
- package/dist/client-bundle-stats.html +1 -1
- package/dist/mcp-app/mcp-app.html +55 -55
- package/dist/server/{server/adapters → adapters}/base-adapter.d.ts +81 -36
- package/dist/server/adapters/databend-adapter.d.ts +63 -0
- package/dist/server/{server/adapters → adapters}/duckdb-adapter.d.ts +6 -60
- package/dist/server/adapters/mysql-adapter.d.ts +65 -0
- package/dist/server/adapters/postgres-adapter.d.ts +55 -0
- package/dist/server/{server/adapters → adapters}/singlestore-adapter.d.ts +1 -1
- package/dist/server/adapters/snowflake-adapter.d.ts +53 -0
- package/dist/server/{server/adapters → adapters}/sqlite-adapter.d.ts +13 -33
- package/dist/server/adapters/window-function-builder.d.ts +11 -0
- package/dist/server/{server/agent → agent}/chart-validation.d.ts +0 -5
- package/dist/server/agent/handler-steps.d.ts +37 -0
- package/dist/server/{server/agent → agent}/handler.d.ts +3 -3
- package/dist/server/agent/index.d.ts +11 -0
- package/dist/server/{server/agent → agent}/providers/anthropic.d.ts +1 -1
- package/dist/server/{server/agent → agent}/providers/factory.d.ts +1 -1
- package/dist/server/{server/agent → agent}/providers/google.d.ts +1 -1
- package/dist/server/agent/providers/index.d.ts +6 -0
- package/dist/server/{server/agent → agent}/providers/openai.d.ts +1 -1
- package/dist/server/{server/agent → agent}/system-prompt.d.ts +1 -1
- package/dist/server/{server/agent → agent}/tools.d.ts +4 -4
- package/dist/server/{server/agent → agent}/types.d.ts +1 -1
- package/dist/server/ai/discovery-helpers.d.ts +29 -0
- package/dist/server/{server/ai → ai}/discovery.d.ts +6 -2
- package/dist/server/{server/ai → ai}/index.d.ts +6 -6
- package/dist/server/ai/suggestion-helpers.d.ts +33 -0
- package/dist/server/{server/ai → ai}/suggestion.d.ts +2 -5
- package/dist/server/ai/validation-helpers.d.ts +21 -0
- package/dist/server/{server/ai → ai}/validation.d.ts +2 -5
- package/dist/server/builders/analysis-utils.d.ts +106 -0
- package/dist/server/{server/builders → builders}/comparison-query-builder.d.ts +2 -2
- package/dist/server/{server/builders → builders}/cte-builder.d.ts +48 -2
- package/dist/server/{server/builders → builders}/date-time-builder.d.ts +7 -2
- package/dist/server/builders/date-time-helpers.d.ts +34 -0
- package/dist/server/{server/builders → builders}/filter-builder.d.ts +5 -3
- package/dist/server/builders/filter-operators.d.ts +23 -0
- package/dist/server/builders/flow-query-builder.d.ts +136 -0
- package/dist/server/{server/builders → builders}/funnel-query-builder.d.ts +18 -7
- package/dist/server/{server/builders → builders}/group-by-builder.d.ts +13 -2
- package/dist/server/builders/index.d.ts +13 -0
- package/dist/server/{server/builders → builders}/measure-builder.d.ts +46 -3
- package/dist/server/{server/builders → builders}/retention-query-builder.d.ts +14 -16
- package/dist/server/cache-providers/index.d.ts +5 -0
- package/dist/server/{server/cache-providers → cache-providers}/memory.d.ts +1 -1
- package/dist/server/{server/cache-utils.d.ts → cache-utils.d.ts} +26 -6
- package/dist/server/compiler-metadata.d.ts +11 -0
- package/dist/server/{server/compiler.d.ts → compiler.d.ts} +9 -15
- package/dist/server/{server/cube-utils.d.ts → cube-utils.d.ts} +29 -4
- package/dist/server/{server/database-utils.d.ts → database-utils.d.ts} +1 -1
- package/dist/server/execution/annotation-builder.d.ts +12 -0
- package/dist/server/execution/filter-cache-preloader.d.ts +19 -0
- package/dist/server/execution/mode-router.d.ts +25 -0
- package/dist/server/execution/query-result-cache.d.ts +21 -0
- package/dist/server/execution/result-post-processor.d.ts +10 -0
- package/dist/server/{server/executor.d.ts → executor.d.ts} +35 -32
- package/dist/server/{server/executors → executors}/base-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/databend-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/duckdb-executor.d.ts +2 -2
- package/dist/server/executors/explain-utils.d.ts +28 -0
- package/dist/server/{server/executors → executors}/index.d.ts +9 -9
- package/dist/server/{server/executors → executors}/mysql-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/postgres-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/singlestore-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/snowflake-executor.d.ts +2 -2
- package/dist/server/{server/executors → executors}/sqlite-executor.d.ts +2 -2
- package/dist/server/{server/explain → explain}/databend-parser.d.ts +1 -1
- package/dist/server/{server/explain → explain}/duckdb-parser.d.ts +1 -1
- package/dist/server/explain/explain-tree.d.ts +20 -0
- package/dist/server/explain/index.d.ts +9 -0
- package/dist/server/{server/explain → explain}/mysql-parser.d.ts +1 -1
- package/dist/server/{server/explain → explain}/postgres-parser.d.ts +1 -1
- package/dist/server/{server/explain → explain}/snowflake-parser.d.ts +1 -1
- package/dist/server/{server/explain → explain}/sqlite-parser.d.ts +1 -1
- package/dist/server/{server/filter-cache.d.ts → filter-cache.d.ts} +2 -2
- package/dist/server/{server/gap-filler.d.ts → gap-filler.d.ts} +8 -2
- package/dist/server/google-BOnRIN1w.cjs +2 -0
- package/dist/{adapters/google-CFYljAOF.js → server/google-CvKM9yVM.js} +83 -71
- package/dist/server/index.cjs +179 -211
- package/dist/server/index.d.ts +38 -2
- package/dist/server/index.js +6330 -6458
- package/dist/server/logical-plan/cte-planner-helpers.d.ts +37 -0
- package/dist/server/logical-plan/cte-planner.d.ts +104 -0
- package/dist/server/logical-plan/filter-propagation.d.ts +44 -0
- package/dist/server/{server/logical-plan → logical-plan}/index.d.ts +11 -6
- package/dist/server/logical-plan/join-planner.d.ts +27 -0
- package/dist/server/{server/logical-plan → logical-plan}/logical-plan-builder.d.ts +5 -5
- package/dist/server/logical-plan/logical-planner.d.ts +39 -0
- package/dist/server/{server/logical-plan → logical-plan}/optimiser.d.ts +4 -2
- package/dist/server/logical-plan/plan-analysis-reporter.d.ts +59 -0
- package/dist/server/logical-plan/planner-utils.d.ts +20 -0
- package/dist/server/{server/logical-plan → logical-plan}/types.d.ts +18 -10
- package/dist/server/measure-classification.d.ts +40 -0
- package/dist/server/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
- package/dist/server/openai-vXvLni8v.cjs +1 -0
- package/dist/server/physical-plan/drizzle-plan-builder.d.ts +50 -0
- package/dist/server/{server/physical-plan → physical-plan}/drizzle-sql-builder.d.ts +14 -3
- package/dist/server/physical-plan/index.d.ts +2 -0
- package/dist/server/{server/physical-plan → physical-plan}/processors/cte-processor.d.ts +2 -2
- package/dist/server/physical-plan/processors/index.d.ts +8 -0
- package/dist/server/{server/physical-plan → physical-plan}/processors/joins-processor.d.ts +2 -2
- package/dist/server/physical-plan/processors/keys-dedup-processor.d.ts +13 -0
- package/dist/server/physical-plan/processors/multi-fact-processor.d.ts +13 -0
- package/dist/server/{server/physical-plan → physical-plan}/processors/predicates-processor.d.ts +2 -2
- package/dist/server/{server/physical-plan → physical-plan}/processors/selection-processor.d.ts +2 -2
- package/dist/server/{server/physical-plan → physical-plan}/processors/shared.d.ts +9 -4
- package/dist/server/{server/physical-plan → physical-plan}/processors/window-processor.d.ts +2 -2
- package/dist/server/query-handlers.d.ts +79 -0
- package/dist/server/query-modes.d.ts +28 -0
- package/dist/server/query-validator.d.ts +9 -0
- package/dist/server/{server/resolvers → resolvers}/calculated-measure-resolver.d.ts +6 -1
- package/dist/server/{server/resolvers → resolvers}/index.d.ts +2 -2
- package/dist/server/{server/resolvers → resolvers}/join-path-resolver.d.ts +7 -1
- package/dist/server/sql-format.d.ts +11 -0
- package/dist/server/{server/template-substitution.d.ts → template-substitution.d.ts} +1 -1
- package/dist/server/{server/types → types}/cache.d.ts +1 -1
- package/dist/server/{server/types → types}/cube.d.ts +22 -8
- package/dist/server/{server/types → types}/executor.d.ts +2 -2
- package/dist/server/{server/types → types}/flow.d.ts +7 -6
- package/dist/server/{server/types → types}/funnel.d.ts +1 -1
- package/dist/server/types/index.d.ts +11 -0
- package/dist/server/{server/types → types}/metadata.d.ts +1 -1
- package/dist/server/{server/types → types}/query.d.ts +4 -4
- package/dist/server/{server/types → types}/retention.d.ts +1 -1
- package/dist/server/{server/types → types}/utils.d.ts +1 -1
- package/dist/server/types/validation.d.ts +14 -0
- package/package.json +22 -7
- package/dist/adapters/google-DUlXeeDA.cjs +0 -2
- package/dist/adapters/handler-CzbCuS6_.cjs +0 -25
- package/dist/adapters/locale-BPB7flIG.js +0 -8249
- package/dist/adapters/locale-tIMrNcCr.cjs +0 -198
- package/dist/adapters/mcp-transport-C2QzXm6h.cjs +0 -40
- package/dist/adapters/mcp-transport-D0B3S1tB.js +0 -579
- package/dist/adapters/openai-D_U4V0kT.cjs +0 -1
- package/dist/adapters/utils-KV37IBIv.cjs +0 -128
- package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js.map +0 -1
- package/dist/client/chunks/RetentionCombinedChart-BPkfcTa8.js.map +0 -1
- package/dist/client/chunks/RetentionHeatmap-DGzLzr7h.js.map +0 -1
- package/dist/client/chunks/analysis-builder-MuMIzoRq.js +0 -5367
- package/dist/client/chunks/analysis-builder-MuMIzoRq.js.map +0 -1
- package/dist/client/chunks/analysis-builder-shared-CYVwSPqt.js.map +0 -1
- package/dist/client/chunks/chart-activity-grid-DmruKPab.js.map +0 -1
- package/dist/client/chunks/chart-area-DHCPM4Em.js +0 -450
- package/dist/client/chunks/chart-area-DHCPM4Em.js.map +0 -1
- package/dist/client/chunks/chart-bar-KddciGDv.js +0 -271
- package/dist/client/chunks/chart-bar-KddciGDv.js.map +0 -1
- package/dist/client/chunks/chart-box-plot-DYKfyOI8.js.map +0 -1
- package/dist/client/chunks/chart-bubble-CfqiB538.js +0 -273
- package/dist/client/chunks/chart-bubble-CfqiB538.js.map +0 -1
- package/dist/client/chunks/chart-candlestick-Dwc92Mrj.js.map +0 -1
- package/dist/client/chunks/chart-config-area-Bq_UsW3x.js +0 -101
- package/dist/client/chunks/chart-config-area-Bq_UsW3x.js.map +0 -1
- package/dist/client/chunks/chart-config-bar-_JEGZnAu.js +0 -95
- package/dist/client/chunks/chart-config-bar-_JEGZnAu.js.map +0 -1
- package/dist/client/chunks/chart-config-box-plot-DJ-dWWXA.js.map +0 -1
- package/dist/client/chunks/chart-config-gauge-DSwC04l0.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-delta-D6BIkHL3.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-number-Bx-V9a62.js.map +0 -1
- package/dist/client/chunks/chart-config-kpi-text-CcqC1u-8.js.map +0 -1
- package/dist/client/chunks/chart-config-line-Db3jDsWc.js.map +0 -1
- package/dist/client/chunks/chart-config-pie-DD4SmRTF.js.map +0 -1
- package/dist/client/chunks/chart-config-radar-CC2XAaGr.js.map +0 -1
- package/dist/client/chunks/chart-config-radial-bar-DmxKx1R0.js.map +0 -1
- package/dist/client/chunks/chart-config-tree-map-BI-oQStO.js.map +0 -1
- package/dist/client/chunks/chart-config-waterfall-DSnyixbI.js.map +0 -1
- package/dist/client/chunks/chart-data-table-BO4sXsim.js.map +0 -1
- package/dist/client/chunks/chart-funnel-DnWRsmnS.js.map +0 -1
- package/dist/client/chunks/chart-gauge-CgMeqeGb.js +0 -424
- package/dist/client/chunks/chart-gauge-CgMeqeGb.js.map +0 -1
- package/dist/client/chunks/chart-heat-map-DcGm9SWK.js +0 -231
- package/dist/client/chunks/chart-heat-map-DcGm9SWK.js.map +0 -1
- package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js +0 -343
- package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js.map +0 -1
- package/dist/client/chunks/chart-kpi-number-gWYF44ol.js +0 -322
- package/dist/client/chunks/chart-kpi-number-gWYF44ol.js.map +0 -1
- package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js +0 -149
- package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js.map +0 -1
- package/dist/client/chunks/chart-line-9BEGN5Ti.js +0 -433
- package/dist/client/chunks/chart-line-9BEGN5Ti.js.map +0 -1
- package/dist/client/chunks/chart-markdown-dgUetjyM.js.map +0 -1
- package/dist/client/chunks/chart-measure-profile-ClfpLs4q.js.map +0 -1
- package/dist/client/chunks/chart-pie-BjAIhyOi.js +0 -172
- package/dist/client/chunks/chart-pie-BjAIhyOi.js.map +0 -1
- package/dist/client/chunks/chart-radar-Dgkcl2bN.js +0 -154
- package/dist/client/chunks/chart-radar-Dgkcl2bN.js.map +0 -1
- package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js +0 -148
- package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js.map +0 -1
- package/dist/client/chunks/chart-sankey-M3XpO_ah.js.map +0 -1
- package/dist/client/chunks/chart-scatter-DaHYP_OL.js +0 -255
- package/dist/client/chunks/chart-scatter-DaHYP_OL.js.map +0 -1
- package/dist/client/chunks/chart-sunburst-A_u6lqlS.js.map +0 -1
- package/dist/client/chunks/chart-tree-map-uiwUU4nb.js +0 -298
- package/dist/client/chunks/chart-tree-map-uiwUU4nb.js.map +0 -1
- package/dist/client/chunks/chart-waterfall-BuhMoagf.js.map +0 -1
- package/dist/client/chunks/charts-core-jRtb0S2M.js.map +0 -1
- package/dist/client/chunks/schema-visualization-DE09kQE3.js.map +0 -1
- package/dist/client/chunks/useDirtyStateTracking-CoeQbprt.js.map +0 -1
- package/dist/client/chunks/useExplainAI-DlnXWdmz.js.map +0 -1
- package/dist/client/chunks/utils-CTKNaXS8.js.map +0 -1
- package/dist/server/google-DUlXeeDA.cjs +0 -2
- package/dist/server/openai-D_U4V0kT.cjs +0 -1
- package/dist/server/server/adapters/databend-adapter.d.ts +0 -114
- package/dist/server/server/adapters/mysql-adapter.d.ts +0 -122
- package/dist/server/server/adapters/postgres-adapter.d.ts +0 -119
- package/dist/server/server/adapters/snowflake-adapter.d.ts +0 -116
- package/dist/server/server/agent/index.d.ts +0 -11
- package/dist/server/server/agent/providers/index.d.ts +0 -6
- package/dist/server/server/builders/flow-query-builder.d.ts +0 -109
- package/dist/server/server/builders/index.d.ts +0 -13
- package/dist/server/server/cache-providers/index.d.ts +0 -5
- package/dist/server/server/explain/index.d.ts +0 -9
- package/dist/server/server/index.d.ts +0 -36
- package/dist/server/server/logical-plan/logical-planner.d.ts +0 -232
- package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +0 -50
- package/dist/server/server/physical-plan/index.d.ts +0 -2
- package/dist/server/server/physical-plan/processors/index.d.ts +0 -6
- package/dist/server/server/types/index.d.ts +0 -11
- /package/dist/server/{server/agent → agent}/providers/types.d.ts +0 -0
- /package/dist/server/{server/ai → ai}/mcp-prompts.d.ts +0 -0
- /package/dist/server/{server/ai → ai}/query-schema.d.ts +0 -0
- /package/dist/server/{server/ai → ai}/schemas.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/explain-analysis-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/index.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/single-step-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/step0-validation-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/step1-shape-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/step2-complete-prompt.d.ts +0 -0
- /package/dist/server/{server/prompts → prompts}/types.d.ts +0 -0
- /package/dist/server/{server/types → types}/analysis.d.ts +0 -0
- /package/dist/server/{server/types → types}/core.d.ts +0 -0
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
import { n as e } from "./rolldown-runtime-CWhphoD1.js";
|
|
2
|
-
import { D as t, _ as n, i as r, k as i, n as a, o as ee, w as o, y as s } from "./chart-activity-grid-DmruKPab.js";
|
|
3
|
-
import { a as c, c as l, l as u, o as d, s as f } from "./chart-area-DHCPM4Em.js";
|
|
4
|
-
import p, { useMemo as m, useState as h } from "react";
|
|
5
|
-
import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
6
|
-
import { Bar as y, CartesianGrid as b, Cell as x, ComposedChart as S, Legend as te, Line as C, XAxis as ne, YAxis as w } from "recharts";
|
|
7
|
-
//#region src/client/components/charts/BarChart.tsx
|
|
8
|
-
var T = /* @__PURE__ */ e({ default: () => E }), E = p.memo(function({ data: e, chartConfig: p, displayConfig: T = {}, queryObject: E, height: D = "100%", colorPalette: O, onDataPointClick: k, drillEnabled: A }) {
|
|
9
|
-
let { t: j } = i(), [M, N] = h(null), P = n(), F = T?.stackType ?? (T?.stacked ? "normal" : "none"), I = F !== "none", L = F === "percent", R = {
|
|
10
|
-
showLegend: T?.showLegend ?? !0,
|
|
11
|
-
showGrid: T?.showGrid ?? !0,
|
|
12
|
-
showTooltip: T?.showTooltip ?? !0
|
|
13
|
-
}, re = T?.showAllXLabels ?? !0, z = T?.leftYAxisFormat, B = T?.rightYAxisFormat, { xAxisField: V, yAxisFields: H, seriesFields: U, configError: W } = m(() => {
|
|
14
|
-
let e, t = [], n = [], r = null;
|
|
15
|
-
return p?.xAxis && p?.yAxis ? (e = Array.isArray(p.xAxis) ? p.xAxis[0] : p.xAxis, t = Array.isArray(p.yAxis) ? p.yAxis : [p.yAxis], n = p.series || []) : p?.x && p?.y ? (e = p.x, t = Array.isArray(p.y) ? p.y : [p.y]) : r = "Invalid or missing chart axis configuration", !r && (!e || !t || t.length === 0) && (r = "Missing required X-axis or Y-axis fields"), {
|
|
16
|
-
xAxisField: e,
|
|
17
|
-
yAxisFields: t,
|
|
18
|
-
seriesFields: n,
|
|
19
|
-
configError: r
|
|
20
|
-
};
|
|
21
|
-
}, [p]), { data: G, seriesKeys: K } = m(() => W || !e || e.length === 0 || !V ? {
|
|
22
|
-
data: [],
|
|
23
|
-
seriesKeys: []
|
|
24
|
-
} : t(e, V, H, E, U, P), [
|
|
25
|
-
e,
|
|
26
|
-
V,
|
|
27
|
-
H,
|
|
28
|
-
E,
|
|
29
|
-
U,
|
|
30
|
-
P,
|
|
31
|
-
W
|
|
32
|
-
]), q = m(() => p?.yAxisAssignment || {}, [p?.yAxisAssignment]), J = m(() => {
|
|
33
|
-
let e = {};
|
|
34
|
-
return H.forEach((t) => {
|
|
35
|
-
let n = P(t);
|
|
36
|
-
e[n] = t;
|
|
37
|
-
}), e;
|
|
38
|
-
}, [H, P]), Y = H.some((e) => q[e] === "right"), X = H.filter((e) => (q[e] || "left") === "left"), Z = H.filter((e) => q[e] === "right"), { chartData: Q, skippedCount: $ } = m(() => {
|
|
39
|
-
if (G.length === 0 || K.length === 0) return {
|
|
40
|
-
chartData: [],
|
|
41
|
-
skippedCount: 0
|
|
42
|
-
};
|
|
43
|
-
let e = G.filter((e) => K.some((t) => o(e[t])));
|
|
44
|
-
return {
|
|
45
|
-
chartData: e,
|
|
46
|
-
skippedCount: G.length - e.length
|
|
47
|
-
};
|
|
48
|
-
}, [G, K]);
|
|
49
|
-
try {
|
|
50
|
-
if (!e || e.length === 0) return /* @__PURE__ */ _("div", {
|
|
51
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
52
|
-
style: { height: D },
|
|
53
|
-
children: /* @__PURE__ */ v("div", {
|
|
54
|
-
className: "dc:text-center",
|
|
55
|
-
children: [/* @__PURE__ */ _("div", {
|
|
56
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
57
|
-
children: j("chart.runtime.noData")
|
|
58
|
-
}), /* @__PURE__ */ _("div", {
|
|
59
|
-
className: "dc:text-xs text-dc-text-secondary",
|
|
60
|
-
children: "No data points to display in bar chart"
|
|
61
|
-
})]
|
|
62
|
-
})
|
|
63
|
-
});
|
|
64
|
-
if (W) return /* @__PURE__ */ _("div", {
|
|
65
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
|
|
66
|
-
style: { height: D },
|
|
67
|
-
children: /* @__PURE__ */ v("div", {
|
|
68
|
-
className: "dc:text-center",
|
|
69
|
-
children: [/* @__PURE__ */ _("div", {
|
|
70
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
71
|
-
children: j("chart.runtime.configError")
|
|
72
|
-
}), /* @__PURE__ */ _("div", {
|
|
73
|
-
className: "dc:text-xs",
|
|
74
|
-
children: W
|
|
75
|
-
})]
|
|
76
|
-
})
|
|
77
|
-
});
|
|
78
|
-
let t = I && !Y, n = L && !Y, i = n ? "expand" : void 0, o = K.length === 1 && Q.some((e) => {
|
|
79
|
-
let t = e[K[0]];
|
|
80
|
-
return typeof t == "number" && t < 0;
|
|
81
|
-
}), p = K.length === 1 && !o && !U.length && Q.length > 1, m = R.showLegend, h = {
|
|
82
|
-
...r,
|
|
83
|
-
left: 40,
|
|
84
|
-
right: Y ? 40 : 20
|
|
85
|
-
}, E = d(c(T?.target || ""), Q.length), F = Q;
|
|
86
|
-
return E.length > 0 && (F = Q.map((e, t) => ({
|
|
87
|
-
...e,
|
|
88
|
-
__target: E[t] || null
|
|
89
|
-
}))), !Q || Q.length === 0 ? /* @__PURE__ */ _("div", {
|
|
90
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
91
|
-
style: { height: D },
|
|
92
|
-
children: /* @__PURE__ */ v("div", {
|
|
93
|
-
className: "dc:text-center",
|
|
94
|
-
children: [/* @__PURE__ */ _("div", {
|
|
95
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
96
|
-
children: j("chart.runtime.noValidData")
|
|
97
|
-
}), /* @__PURE__ */ _("div", {
|
|
98
|
-
className: "dc:text-xs text-dc-text-secondary",
|
|
99
|
-
children: "No valid data points for bar chart after transformation"
|
|
100
|
-
})]
|
|
101
|
-
})
|
|
102
|
-
}) : /* @__PURE__ */ v("div", {
|
|
103
|
-
className: "dc:relative dc:w-full",
|
|
104
|
-
style: { height: D },
|
|
105
|
-
children: [/* @__PURE__ */ _(u, {
|
|
106
|
-
height: $ > 0 ? "calc(100% - 20px)" : "100%",
|
|
107
|
-
children: /* @__PURE__ */ v(S, {
|
|
108
|
-
data: F,
|
|
109
|
-
margin: h,
|
|
110
|
-
stackOffset: i,
|
|
111
|
-
accessibilityLayer: !1,
|
|
112
|
-
children: [
|
|
113
|
-
R.showGrid && /* @__PURE__ */ _(b, {
|
|
114
|
-
strokeDasharray: "3 3",
|
|
115
|
-
style: { pointerEvents: "none" }
|
|
116
|
-
}),
|
|
117
|
-
/* @__PURE__ */ _(ne, {
|
|
118
|
-
dataKey: "name",
|
|
119
|
-
type: "category",
|
|
120
|
-
tick: /* @__PURE__ */ _(f, {}),
|
|
121
|
-
height: 60,
|
|
122
|
-
interval: re ? 0 : void 0
|
|
123
|
-
}),
|
|
124
|
-
/* @__PURE__ */ _(w, {
|
|
125
|
-
yAxisId: "left",
|
|
126
|
-
orientation: "left",
|
|
127
|
-
tick: { fontSize: 12 },
|
|
128
|
-
tickFormatter: n ? (e) => `${(e * 100).toFixed(0)}%` : z ? (e) => s(e, z) : void 0,
|
|
129
|
-
domain: n ? [0, 1] : void 0,
|
|
130
|
-
label: n ? void 0 : X.length > 0 ? {
|
|
131
|
-
value: z?.label || P(X[0]),
|
|
132
|
-
angle: -90,
|
|
133
|
-
position: "left",
|
|
134
|
-
style: {
|
|
135
|
-
textAnchor: "middle",
|
|
136
|
-
fontSize: "12px"
|
|
137
|
-
}
|
|
138
|
-
} : void 0
|
|
139
|
-
}),
|
|
140
|
-
Y && /* @__PURE__ */ _(w, {
|
|
141
|
-
yAxisId: "right",
|
|
142
|
-
orientation: "right",
|
|
143
|
-
tick: { fontSize: 12 },
|
|
144
|
-
tickFormatter: B ? (e) => s(e, B) : void 0,
|
|
145
|
-
label: Z.length > 0 ? {
|
|
146
|
-
value: B?.label || P(Z[0]),
|
|
147
|
-
angle: 90,
|
|
148
|
-
position: "right",
|
|
149
|
-
style: {
|
|
150
|
-
textAnchor: "middle",
|
|
151
|
-
fontSize: "12px"
|
|
152
|
-
}
|
|
153
|
-
} : void 0
|
|
154
|
-
}),
|
|
155
|
-
R.showTooltip && /* @__PURE__ */ _(l, { formatter: (e, t) => {
|
|
156
|
-
if (e == null) return ["No data", t];
|
|
157
|
-
if (t === "Target") return [s(e, z), "Target Value"];
|
|
158
|
-
if (n && typeof e == "number") return [`${(e * 100).toFixed(1)}%`, t];
|
|
159
|
-
let r = J[t];
|
|
160
|
-
return [s(e, (r && q[r] === "right" ? "right" : "left") == "right" ? B : z), t];
|
|
161
|
-
} }),
|
|
162
|
-
m && /* @__PURE__ */ _(te, {
|
|
163
|
-
wrapperStyle: {
|
|
164
|
-
fontSize: "12px",
|
|
165
|
-
paddingTop: "25px"
|
|
166
|
-
},
|
|
167
|
-
iconType: "rect",
|
|
168
|
-
iconSize: 8,
|
|
169
|
-
layout: "horizontal",
|
|
170
|
-
align: "center",
|
|
171
|
-
verticalAlign: "bottom",
|
|
172
|
-
onMouseEnter: (e) => N(String(e.dataKey || "")),
|
|
173
|
-
onMouseLeave: () => N(null)
|
|
174
|
-
}),
|
|
175
|
-
K.map((e, n) => {
|
|
176
|
-
let r = J[e];
|
|
177
|
-
return /* @__PURE__ */ v(y, {
|
|
178
|
-
dataKey: e,
|
|
179
|
-
yAxisId: r && q[r] === "right" ? "right" : "left",
|
|
180
|
-
stackId: t ? "stack" : void 0,
|
|
181
|
-
fill: o ? ee : O?.colors && O.colors[n % O.colors.length] || a[n % a.length],
|
|
182
|
-
fillOpacity: M ? M === e ? 1 : .3 : 1,
|
|
183
|
-
cursor: A ? "pointer" : void 0,
|
|
184
|
-
onClick: (t, n, i) => {
|
|
185
|
-
k && A && t && k({
|
|
186
|
-
dataPoint: F[n] || t,
|
|
187
|
-
clickedField: r || e,
|
|
188
|
-
xValue: t.name,
|
|
189
|
-
position: {
|
|
190
|
-
x: i.clientX,
|
|
191
|
-
y: i.clientY
|
|
192
|
-
},
|
|
193
|
-
nativeEvent: i
|
|
194
|
-
});
|
|
195
|
-
},
|
|
196
|
-
children: [o && Q.map((t, n) => {
|
|
197
|
-
let r = t[e];
|
|
198
|
-
return /* @__PURE__ */ _(x, {
|
|
199
|
-
fill: typeof r == "number" && r < 0 ? "#ef4444" : "#10b981",
|
|
200
|
-
fillOpacity: M ? M === e ? 1 : .3 : 1
|
|
201
|
-
}, `cell-${n}`);
|
|
202
|
-
}), p && Q.map((t, n) => {
|
|
203
|
-
let r = O?.colors || a;
|
|
204
|
-
return /* @__PURE__ */ _(x, {
|
|
205
|
-
fill: r[n % r.length],
|
|
206
|
-
fillOpacity: M ? M === e ? 1 : .3 : 1
|
|
207
|
-
}, `cat-${n}`);
|
|
208
|
-
})]
|
|
209
|
-
}, e);
|
|
210
|
-
}),
|
|
211
|
-
E.length > 0 && /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ _(C, {
|
|
212
|
-
type: "monotone",
|
|
213
|
-
dataKey: "__target",
|
|
214
|
-
yAxisId: "left",
|
|
215
|
-
stroke: "#ffffff",
|
|
216
|
-
strokeWidth: 2,
|
|
217
|
-
dot: !1,
|
|
218
|
-
activeDot: !1,
|
|
219
|
-
connectNulls: !1
|
|
220
|
-
}), /* @__PURE__ */ _(C, {
|
|
221
|
-
type: "monotone",
|
|
222
|
-
dataKey: "__target",
|
|
223
|
-
yAxisId: "left",
|
|
224
|
-
name: "Target",
|
|
225
|
-
stroke: "#8B5CF6",
|
|
226
|
-
strokeWidth: 2,
|
|
227
|
-
strokeDasharray: "2 3",
|
|
228
|
-
dot: !1,
|
|
229
|
-
activeDot: !1,
|
|
230
|
-
connectNulls: !1
|
|
231
|
-
})] })
|
|
232
|
-
]
|
|
233
|
-
})
|
|
234
|
-
}), $ > 0 && /* @__PURE__ */ v("div", {
|
|
235
|
-
className: "dc:text-xs text-dc-text-muted dc:text-center dc:mt-1",
|
|
236
|
-
children: [
|
|
237
|
-
$,
|
|
238
|
-
" data point",
|
|
239
|
-
$ === 1 ? "" : "s",
|
|
240
|
-
" with no values hidden"
|
|
241
|
-
]
|
|
242
|
-
})]
|
|
243
|
-
});
|
|
244
|
-
} catch (e) {
|
|
245
|
-
return /* @__PURE__ */ _("div", {
|
|
246
|
-
className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
|
|
247
|
-
style: { height: D },
|
|
248
|
-
children: /* @__PURE__ */ v("div", {
|
|
249
|
-
className: "dc:text-center",
|
|
250
|
-
children: [
|
|
251
|
-
/* @__PURE__ */ _("div", {
|
|
252
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
253
|
-
children: j("chart.runtime.chartError", { chartType: "Bar Chart" })
|
|
254
|
-
}),
|
|
255
|
-
/* @__PURE__ */ _("div", {
|
|
256
|
-
className: "dc:text-xs dc:mb-2",
|
|
257
|
-
children: e instanceof Error ? e.message : j("chart.runtime.unknownError")
|
|
258
|
-
}),
|
|
259
|
-
/* @__PURE__ */ _("div", {
|
|
260
|
-
className: "dc:text-xs text-dc-text-muted",
|
|
261
|
-
children: j("chart.runtime.checkConfig")
|
|
262
|
-
})
|
|
263
|
-
]
|
|
264
|
-
})
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
});
|
|
268
|
-
//#endregion
|
|
269
|
-
export { T as n, E as t };
|
|
270
|
-
|
|
271
|
-
//# sourceMappingURL=chart-bar-KddciGDv.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-bar-KddciGDv.js","names":[],"sources":["../../../src/client/components/charts/BarChart.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { ComposedChart, Bar, Line, XAxis, YAxis, CartesianGrid, Cell, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport AngledXAxisTick from './AngledXAxisTick'\nimport { CHART_COLORS, POSITIVE_COLOR, NEGATIVE_COLOR, CHART_MARGINS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, isValidNumericValue, formatAxisValue } from '../../utils/chartUtils'\nimport { parseTargetValues, spreadTargetValues } from '../../utils/targetUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport type { ChartProps } from '../../types'\n\nconst BarChart = React.memo(function BarChart({\n data,\n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette,\n onDataPointClick,\n drillEnabled\n}: ChartProps) {\n const { t } = useTranslation()\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n // Use specialized hook to avoid re-renders from unrelated context changes\n const getFieldLabel = useCubeFieldLabel()\n\n // Determine stacking from stackType (new) or stacked (legacy)\n const stackType = displayConfig?.stackType ?? (displayConfig?.stacked ? 'normal' : 'none')\n const shouldStack = stackType !== 'none'\n const isPercentStack = stackType === 'percent'\n\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n const showAllXLabels = displayConfig?.showAllXLabels ?? true\n\n // Extract axis format configs\n const leftYAxisFormat = displayConfig?.leftYAxisFormat\n const rightYAxisFormat = displayConfig?.rightYAxisFormat\n\n // Validate chartConfig - support both legacy and new formats\n // Do validation but don't early return yet (hooks must come first)\n const { xAxisField, yAxisFields, seriesFields, configError } = useMemo(() => {\n let xAxisField: string | undefined\n let yAxisFields: string[] = []\n let seriesFields: string[] = []\n let configError: string | null = null\n\n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n configError = 'Invalid or missing chart axis configuration'\n }\n\n if (!configError && (!xAxisField || !yAxisFields || yAxisFields.length === 0)) {\n configError = 'Missing required X-axis or Y-axis fields'\n }\n\n return { xAxisField, yAxisFields, seriesFields, configError }\n }, [chartConfig])\n\n // Transform data (will be empty arrays if config is invalid)\n const { data: transformedData, seriesKeys } = useMemo(() => {\n if (configError || !data || data.length === 0 || !xAxisField) {\n return { data: [], seriesKeys: [] }\n }\n return transformChartDataWithSeries(\n data,\n xAxisField,\n yAxisFields,\n queryObject,\n seriesFields,\n getFieldLabel\n )\n }, [data, xAxisField, yAxisFields, queryObject, seriesFields, getFieldLabel, configError])\n\n // Dual Y-axis support: extract yAxisAssignment from chartConfig (memoized to prevent object recreation)\n const yAxisAssignment = useMemo(() =>\n chartConfig?.yAxisAssignment || {},\n [chartConfig?.yAxisAssignment]\n )\n\n // Build mapping from series key (label) to original field name\n const seriesKeyToField: Record<string, string> = useMemo(() => {\n const mapping: Record<string, string> = {}\n yAxisFields.forEach((field) => {\n const label = getFieldLabel(field)\n mapping[label] = field\n })\n return mapping\n }, [yAxisFields, getFieldLabel])\n\n // Determine if we need a right Y-axis\n const hasRightAxis = yAxisFields.some((field) => yAxisAssignment[field] === 'right')\n\n // Get fields for left and right axes for labels\n const leftAxisFields = yAxisFields.filter((f) => (yAxisAssignment[f] || 'left') === 'left')\n const rightAxisFields = yAxisFields.filter((f) => yAxisAssignment[f] === 'right')\n\n // Null handling: Filter out data points where ALL measure values are null\n // This prevents rendering empty bars and makes the chart clearer\n const { chartData, skippedCount } = useMemo(() => {\n if (transformedData.length === 0 || seriesKeys.length === 0) {\n return { chartData: [], skippedCount: 0 }\n }\n const filtered = transformedData.filter(row => {\n // Keep the row if at least one series has a valid numeric value\n return seriesKeys.some(key => isValidNumericValue(row[key]))\n })\n const skipped = transformedData.length - filtered.length\n return { chartData: filtered, skippedCount: skipped }\n }, [transformedData, seriesKeys])\n\n // Now handle early returns AFTER all hooks\n try {\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.noData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in bar chart</div>\n </div>\n </div>\n )\n }\n\n if (configError) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.configError')}</div>\n <div className=\"dc:text-xs\">{configError}</div>\n </div>\n </div>\n )\n }\n\n // Determine stack offset for percentage stacking\n // Disable stacking when dual Y-axis is used (bars on different axes can't be stacked)\n const effectiveShouldStack = shouldStack && !hasRightAxis\n const effectiveIsPercentStack = isPercentStack && !hasRightAxis\n const stackOffset = effectiveIsPercentStack ? 'expand' as const : undefined\n\n // Check if we should use positive/negative coloring\n // This is enabled when we have single series data with mixed positive/negative values\n const usePositiveNegativeColoring = seriesKeys.length === 1 && chartData.some(row => {\n const value = row[seriesKeys[0]]\n return typeof value === 'number' && value < 0\n })\n\n // Color each bar by its x-axis category when there's a single measure and no series dimension.\n // This gives each category a distinct color without needing to abuse the series field.\n const useColorByCategory = seriesKeys.length === 1\n && !usePositiveNegativeColoring\n && !seriesFields.length\n && chartData.length > 1\n\n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend\n\n // Use custom chart margins with extra space for Y-axis labels\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40, // Space for left Y-axis label\n right: hasRightAxis ? 40 : 20 // Extra space for right Y-axis label if needed\n }\n \n // Process target values and add to chart data\n const targetValues = parseTargetValues(displayConfig?.target || '')\n const spreadTargets = spreadTargetValues(targetValues, chartData.length)\n \n // Add target data to chart data if targets exist\n let enhancedChartData = chartData\n if (spreadTargets.length > 0) {\n enhancedChartData = chartData.map((dataPoint, index) => ({\n ...dataPoint,\n __target: spreadTargets[index] || null\n }))\n }\n \n // Validate transformed data\n if (!chartData || chartData.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.noValidData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No valid data points for bar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"dc:relative dc:w-full\" style={{ height }}>\n <ChartContainer height={skippedCount > 0 ? `calc(100% - 20px)` : \"100%\"}>\n <ComposedChart data={enhancedChartData} margin={chartMargins} stackOffset={stackOffset} accessibilityLayer={false}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" style={{ pointerEvents: 'none' }} />\n )}\n <XAxis\n dataKey=\"name\"\n type=\"category\"\n tick={<AngledXAxisTick />}\n height={60}\n interval={showAllXLabels ? 0 : undefined}\n />\n <YAxis\n yAxisId=\"left\"\n orientation=\"left\"\n tick={{ fontSize: 12 }}\n tickFormatter={\n effectiveIsPercentStack\n ? (v) => `${(v * 100).toFixed(0)}%`\n : leftYAxisFormat\n ? (value) => formatAxisValue(value, leftYAxisFormat)\n : undefined\n }\n domain={effectiveIsPercentStack ? [0, 1] : undefined}\n label={\n effectiveIsPercentStack\n ? undefined\n : leftAxisFields.length > 0\n ? {\n value: leftYAxisFormat?.label || getFieldLabel(leftAxisFields[0]),\n angle: -90,\n position: 'left',\n style: { textAnchor: 'middle', fontSize: '12px' }\n }\n : undefined\n }\n />\n {hasRightAxis && (\n <YAxis\n yAxisId=\"right\"\n orientation=\"right\"\n tick={{ fontSize: 12 }}\n tickFormatter={rightYAxisFormat ? (value) => formatAxisValue(value, rightYAxisFormat) : undefined}\n label={\n rightAxisFields.length > 0\n ? {\n value: rightYAxisFormat?.label || getFieldLabel(rightAxisFields[0]),\n angle: 90,\n position: 'right',\n style: { textAnchor: 'middle', fontSize: '12px' }\n }\n : undefined\n }\n />\n )}\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={(value: any, name: any) => {\n // Handle null values in tooltip\n if (value === null || value === undefined) {\n return ['No data', name]\n }\n if (name === 'Target') {\n // Use left Y-axis format for target values\n return [formatAxisValue(value, leftYAxisFormat), 'Target Value']\n }\n // Format as percentage when using percent stacking\n if (effectiveIsPercentStack && typeof value === 'number') {\n return [`${(value * 100).toFixed(1)}%`, name]\n }\n // Determine which axis format to use based on series name\n const originalField = seriesKeyToField[name]\n const axisId = originalField && yAxisAssignment[originalField] === 'right' ? 'right' : 'left'\n const formatConfig = axisId === 'right' ? rightYAxisFormat : leftYAxisFormat\n return [formatAxisValue(value, formatConfig), name]\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '25px' }}\n iconType=\"rect\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => {\n // Look up the original field name to get its axis assignment\n const originalField = seriesKeyToField[seriesKey]\n const axisId = originalField && yAxisAssignment[originalField] === 'right' ? 'right' : 'left'\n return (\n <Bar\n key={seriesKey}\n dataKey={seriesKey}\n yAxisId={axisId}\n stackId={effectiveShouldStack ? 'stack' : undefined}\n fill={\n usePositiveNegativeColoring\n ? POSITIVE_COLOR\n : (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) ||\n CHART_COLORS[index % CHART_COLORS.length]\n }\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n cursor={drillEnabled ? 'pointer' : undefined}\n onClick={(barData: any, dataIndex: number, event: React.MouseEvent) => {\n if (onDataPointClick && drillEnabled && barData) {\n onDataPointClick({\n dataPoint: enhancedChartData[dataIndex] || barData,\n clickedField: originalField || seriesKey,\n xValue: barData.name,\n position: { x: event.clientX, y: event.clientY },\n nativeEvent: event\n })\n }\n }}\n >\n {usePositiveNegativeColoring &&\n chartData.map((entry, entryIndex) => {\n const value = entry[seriesKey]\n const fillColor = typeof value === 'number' && value < 0 ? NEGATIVE_COLOR : POSITIVE_COLOR\n return (\n <Cell\n key={`cell-${entryIndex}`}\n fill={fillColor}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n />\n )\n })}\n {useColorByCategory &&\n chartData.map((_entry, entryIndex) => {\n const colors = colorPalette?.colors || CHART_COLORS\n return (\n <Cell\n key={`cat-${entryIndex}`}\n fill={colors[entryIndex % colors.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n />\n )\n })}\n </Bar>\n )\n })}\n {spreadTargets.length > 0 && (\n <>\n {/* White background line */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n yAxisId=\"left\"\n stroke=\"#ffffff\"\n strokeWidth={2}\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n {/* Grey dashed line on top */}\n <Line\n type=\"monotone\"\n dataKey=\"__target\"\n yAxisId=\"left\"\n name=\"Target\"\n stroke=\"#8B5CF6\"\n strokeWidth={2}\n strokeDasharray=\"2 3\"\n dot={false}\n activeDot={false}\n connectNulls={false}\n />\n </>\n )}\n </ComposedChart>\n </ChartContainer>\n {skippedCount > 0 && (\n <div className=\"dc:text-xs text-dc-text-muted dc:text-center dc:mt-1\">\n {skippedCount} data point{skippedCount !== 1 ? 's' : ''} with no values hidden\n </div>\n )}\n </div>\n )\n } catch (error) {\n // 'BarChart rendering error\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.chartError', { chartType: 'Bar 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 BarChart"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-box-plot-DYKfyOI8.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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"}
|
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { n as e } from "./rolldown-runtime-CWhphoD1.js";
|
|
2
|
-
import { S as t, T as n, _ as r, g as i, i as a, k as o, m as s, n as c, r as l, u, w as d, x as f, y as p } from "./chart-activity-grid-DmruKPab.js";
|
|
3
|
-
import m, { useCallback as h, useEffect as g, useLayoutEffect as _, useMemo as v, useRef as y, useState as b, useSyncExternalStore as x } from "react";
|
|
4
|
-
import { jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
5
|
-
import { axisBottom as w, axisLeft as T, extent as E, max as D, scaleLinear as O, scaleOrdinal as k, scaleQuantize as ee, scaleSqrt as te, select as A } from "d3";
|
|
6
|
-
//#region src/client/hooks/useTheme.ts
|
|
7
|
-
var j = {
|
|
8
|
-
listeners: /* @__PURE__ */ new Set(),
|
|
9
|
-
subscribe(e) {
|
|
10
|
-
return this.listeners.add(e), () => this.listeners.delete(e);
|
|
11
|
-
},
|
|
12
|
-
notify() {
|
|
13
|
-
this.listeners.forEach((e) => e());
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
i(() => {
|
|
17
|
-
j.notify();
|
|
18
|
-
});
|
|
19
|
-
function M() {
|
|
20
|
-
return {
|
|
21
|
-
theme: x(j.subscribe.bind(j), u, u),
|
|
22
|
-
setTheme: h((e) => {
|
|
23
|
-
s(e), j.notify();
|
|
24
|
-
}, [])
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region src/client/components/charts/BubbleChart.tsx
|
|
29
|
-
var N = /* @__PURE__ */ e({ default: () => P }), P = m.memo(function({ data: e, chartConfig: i, displayConfig: s = {}, queryObject: u, height: m = "100%", colorPalette: h }) {
|
|
30
|
-
let { t: x } = o(), j = y(null), N = y(null), [P, F] = b({
|
|
31
|
-
width: 0,
|
|
32
|
-
height: 0
|
|
33
|
-
}), [I, L] = b(!1), { theme: R } = M(), z = r(), B = v(() => ({
|
|
34
|
-
showLegend: s?.showLegend ?? !0,
|
|
35
|
-
showGrid: s?.showGrid ?? !0,
|
|
36
|
-
showTooltip: s?.showTooltip ?? !0,
|
|
37
|
-
minBubbleSize: s?.minBubbleSize ?? 5,
|
|
38
|
-
maxBubbleSize: s?.maxBubbleSize ?? 50,
|
|
39
|
-
bubbleOpacity: s?.bubbleOpacity ?? .7,
|
|
40
|
-
xAxisFormat: s?.xAxisFormat,
|
|
41
|
-
leftYAxisFormat: s?.leftYAxisFormat
|
|
42
|
-
}), [
|
|
43
|
-
s?.showLegend,
|
|
44
|
-
s?.showGrid,
|
|
45
|
-
s?.showTooltip,
|
|
46
|
-
s?.minBubbleSize,
|
|
47
|
-
s?.maxBubbleSize,
|
|
48
|
-
s?.bubbleOpacity,
|
|
49
|
-
s?.xAxisFormat,
|
|
50
|
-
s?.leftYAxisFormat
|
|
51
|
-
]);
|
|
52
|
-
return _(() => {
|
|
53
|
-
let e = 0, t, n, r = () => {
|
|
54
|
-
if (N.current) {
|
|
55
|
-
let { width: e, height: t } = N.current.getBoundingClientRect();
|
|
56
|
-
if (e > 0 && t > 0) return F({
|
|
57
|
-
width: e,
|
|
58
|
-
height: t
|
|
59
|
-
}), L(!0), !0;
|
|
60
|
-
}
|
|
61
|
-
return !1;
|
|
62
|
-
};
|
|
63
|
-
if (!r() && e < 10) {
|
|
64
|
-
let i = () => {
|
|
65
|
-
!r() && e < 10 && (e++, n = setTimeout(() => {
|
|
66
|
-
t = requestAnimationFrame(i);
|
|
67
|
-
}, 50 * e));
|
|
68
|
-
};
|
|
69
|
-
t = requestAnimationFrame(i);
|
|
70
|
-
}
|
|
71
|
-
return () => {
|
|
72
|
-
t && cancelAnimationFrame(t), n && clearTimeout(n);
|
|
73
|
-
};
|
|
74
|
-
}, []), g(() => {
|
|
75
|
-
let e = null, t = () => {
|
|
76
|
-
if (N.current) {
|
|
77
|
-
let { width: e, height: t } = N.current.getBoundingClientRect();
|
|
78
|
-
e > 0 && t > 0 && (F({
|
|
79
|
-
width: e,
|
|
80
|
-
height: t
|
|
81
|
-
}), I || L(!0));
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
return N.current && (e = new ResizeObserver((e) => {
|
|
85
|
-
for (let t of e) {
|
|
86
|
-
let { width: e, height: n } = t.contentRect;
|
|
87
|
-
e > 0 && n > 0 && (F({
|
|
88
|
-
width: e,
|
|
89
|
-
height: n
|
|
90
|
-
}), I || L(!0));
|
|
91
|
-
}
|
|
92
|
-
}), e.observe(N.current), t()), window.addEventListener("resize", t), () => {
|
|
93
|
-
e && e.disconnect(), window.removeEventListener("resize", t);
|
|
94
|
-
};
|
|
95
|
-
}, [I]), g(() => {
|
|
96
|
-
if (!e || e.length === 0 || !j.current || !I || P.width === 0 || (A(j.current).selectAll("*").remove(), !i?.xAxis || !i?.yAxis || !i?.series)) return;
|
|
97
|
-
let r = Array.isArray(i.xAxis) ? i.xAxis[0] : i.xAxis, o = Array.isArray(i.yAxis) ? i.yAxis[0] : i.yAxis, s = Array.isArray(i.series) ? i.series[0] : i.series, m = Array.isArray(i.sizeField) ? i.sizeField[0] : i.sizeField || o, g = Array.isArray(i.colorField) ? i.colorField[0] : i.colorField;
|
|
98
|
-
if (!r || !o || !s || !m) return;
|
|
99
|
-
let _ = t(u, r), v = u?.timeDimensions?.some((e) => e.dimension === r) || !1, y = e.map((e) => {
|
|
100
|
-
let t = e[r], i, a;
|
|
101
|
-
if (v && t) {
|
|
102
|
-
let e = String(t), n;
|
|
103
|
-
if (e.match(/^\d{4}-\d{2}-\d{2}[T ]/)) {
|
|
104
|
-
let t = e;
|
|
105
|
-
e.includes(" ") && (t = e.replace(" ", "T").replace("+00", "Z").replace(/\+\d{2}:\d{2}$/, "Z")), !t.endsWith("Z") && !t.includes("+") && (t += "Z"), n = new Date(t);
|
|
106
|
-
} else n = new Date(e);
|
|
107
|
-
i = isNaN(n.getTime()) ? parseFloat(e) : n.getTime(), a = f(t, _);
|
|
108
|
-
} else {
|
|
109
|
-
let e = f(t, _) || t;
|
|
110
|
-
i = typeof e == "string" ? parseFloat(e) : e, a = String(e);
|
|
111
|
-
}
|
|
112
|
-
let c = n(e[o]), l = n(e[m]), u = e[s];
|
|
113
|
-
return {
|
|
114
|
-
x: i,
|
|
115
|
-
xLabel: a,
|
|
116
|
-
y: c,
|
|
117
|
-
size: l === null ? 0 : Math.abs(l),
|
|
118
|
-
color: g ? e[g] : u,
|
|
119
|
-
series: u,
|
|
120
|
-
label: `${u || "Unknown"}`,
|
|
121
|
-
isValid: d(i) && c !== null && l !== null && l > 0
|
|
122
|
-
};
|
|
123
|
-
}).filter((e) => e.isValid && e.size > 0);
|
|
124
|
-
if (y.length === 0) return;
|
|
125
|
-
let b = {
|
|
126
|
-
...a,
|
|
127
|
-
left: a.left + 30,
|
|
128
|
-
bottom: B.showLegend && g ? 100 : 40
|
|
129
|
-
}, x = P.width - b.left - b.right, S = P.height - b.top - b.bottom, C = A(j.current).attr("width", P.width).attr("height", P.height), M = C.append("g").attr("transform", `translate(${b.left},${b.top})`), N = O().domain(E(y, (e) => e.x)).range([0, x]).nice(), F = O().domain(E(y, (e) => e.y)).range([S, 0]).nice(), L = te().domain([0, D(y, (e) => e.size)]).range([B.minBubbleSize, B.maxBubbleSize]), V, H = !1, U = [];
|
|
130
|
-
if (g && y.length > 0) {
|
|
131
|
-
let e = y.map((e) => {
|
|
132
|
-
let t = e.color;
|
|
133
|
-
return typeof t == "string" ? parseFloat(t) : t;
|
|
134
|
-
}).filter((e) => !isNaN(e));
|
|
135
|
-
if (H = e.length === y.length && e.every((e) => typeof e == "number"), H) {
|
|
136
|
-
let t = Math.min(...e), n = Math.max(...e);
|
|
137
|
-
V = ee().domain([t, n]).range(h?.gradient || l);
|
|
138
|
-
} else U = [...new Set(y.map((e) => String(e.color)))], V = k().domain(U).range(h?.colors || c);
|
|
139
|
-
} else V = k().domain(["default"]).range([c[0]]);
|
|
140
|
-
let W = (e, t) => getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t, G = R !== "light", K = G ? W("--dc-text-muted", "#cbd5e1") : W("--dc-text-secondary", "#374151"), q = G ? W("--dc-border", "#475569") : "#9ca3af";
|
|
141
|
-
if (B.showGrid) {
|
|
142
|
-
let e = M.append("g").attr("class", "grid").attr("transform", `translate(0,${S})`).call(w(N).tickSize(-S).tickFormat(() => ""));
|
|
143
|
-
e.selectAll("line").style("stroke", q).style("stroke-dasharray", "3,3").style("opacity", .3), e.select(".domain").style("stroke", "none");
|
|
144
|
-
let t = M.append("g").attr("class", "grid").call(T(F).tickSize(-x).tickFormat(() => ""));
|
|
145
|
-
t.selectAll("line").style("stroke", q).style("stroke-dasharray", "3,3").style("opacity", .3), t.select(".domain").style("stroke", "none");
|
|
146
|
-
}
|
|
147
|
-
let J = w(N);
|
|
148
|
-
v ? J.tickFormat((e) => {
|
|
149
|
-
let t = new Date(e);
|
|
150
|
-
if (isNaN(t.getTime())) return String(e);
|
|
151
|
-
switch (_?.toLowerCase()) {
|
|
152
|
-
case "year": return String(t.getUTCFullYear());
|
|
153
|
-
case "quarter": {
|
|
154
|
-
let e = Math.floor(t.getUTCMonth() / 3) + 1;
|
|
155
|
-
return `${t.getUTCFullYear()}-Q${e}`;
|
|
156
|
-
}
|
|
157
|
-
case "month": return `${t.getUTCFullYear()}-${String(t.getUTCMonth() + 1).padStart(2, "0")}`;
|
|
158
|
-
case "week":
|
|
159
|
-
case "day": return `${t.getUTCFullYear()}-${String(t.getUTCMonth() + 1).padStart(2, "0")}-${String(t.getUTCDate()).padStart(2, "0")}`;
|
|
160
|
-
case "hour": return `${String(t.getUTCMonth() + 1).padStart(2, "0")}-${String(t.getUTCDate()).padStart(2, "0")} ${String(t.getUTCHours()).padStart(2, "0")}:00`;
|
|
161
|
-
default: return `${t.getUTCFullYear()}-${String(t.getUTCMonth() + 1).padStart(2, "0")}`;
|
|
162
|
-
}
|
|
163
|
-
}) : B.xAxisFormat && J.tickFormat((e) => p(e, B.xAxisFormat));
|
|
164
|
-
let Y = M.append("g").attr("transform", `translate(0,${S})`).call(J);
|
|
165
|
-
Y.selectAll("text").style("fill", K), Y.selectAll("line, path").style("stroke", q), Y.append("text").attr("x", x / 2).attr("y", 35).attr("fill", K).style("text-anchor", "middle").style("font-size", "12px").text(B.xAxisFormat?.label || z(r));
|
|
166
|
-
let X = T(F);
|
|
167
|
-
B.leftYAxisFormat && X.tickFormat((e) => p(e, B.leftYAxisFormat));
|
|
168
|
-
let Z = M.append("g").call(X);
|
|
169
|
-
Z.selectAll("text").style("fill", K), Z.selectAll("line, path").style("stroke", q), Z.append("text").attr("transform", "rotate(-90)").attr("y", -35).attr("x", -S / 2).attr("fill", K).style("text-anchor", "middle").style("font-size", "12px").text(B.leftYAxisFormat?.label || z(o));
|
|
170
|
-
let Q = A("body").append("div").attr("class", "bubble-chart-tooltip").style("position", "absolute").style("padding", "8px").style("background", "rgba(0, 0, 0, 0.8)").style("color", "white").style("border-radius", "4px").style("font-size", "12px").style("pointer-events", "none").style("opacity", 0).style("z-index", 1e3), $ = M.selectAll(".bubble").data(y).enter().append("circle").attr("class", "bubble").attr("cx", (e) => N(e.x)).attr("cy", (e) => F(e.y)).attr("r", (e) => L(e.size)).style("fill", (e) => g && e.color !== void 0 ? V(H ? e.color : String(e.color)) : c[0]).style("opacity", B.bubbleOpacity).style("stroke", "#fff").style("stroke-width", 1).style("cursor", "pointer");
|
|
171
|
-
if (B.showTooltip && $.on("mouseover", function(e, t) {
|
|
172
|
-
A(this).transition().duration(200).style("opacity", 1).attr("r", L(t.size) * 1.1);
|
|
173
|
-
let n = [
|
|
174
|
-
`<strong>${t.series || "Unknown"}</strong>`,
|
|
175
|
-
`${z(r)}: ${t.xLabel || (B.xAxisFormat ? p(t.x, B.xAxisFormat) : t.x)}`,
|
|
176
|
-
`${z(o)}: ${B.leftYAxisFormat ? p(t.y, B.leftYAxisFormat) : t.y}`,
|
|
177
|
-
`${z(m)}: ${B.leftYAxisFormat ? p(t.size, B.leftYAxisFormat) : t.size}`,
|
|
178
|
-
g && t.color ? `${z(g)}: ${t.color}` : ""
|
|
179
|
-
].filter(Boolean).join("<br>");
|
|
180
|
-
Q.html(n).style("left", e.pageX + 10 + "px").style("top", e.pageY - 10 + "px").transition().duration(200).style("opacity", 1);
|
|
181
|
-
}).on("mousemove", function(e) {
|
|
182
|
-
Q.style("left", e.pageX + 10 + "px").style("top", e.pageY - 10 + "px");
|
|
183
|
-
}).on("mouseout", function(e, t) {
|
|
184
|
-
A(this).transition().duration(200).style("opacity", B.bubbleOpacity).attr("r", L(t.size)), Q.transition().duration(200).style("opacity", 0);
|
|
185
|
-
}), B.showLegend && g) if (H) {
|
|
186
|
-
let e = Math.min(...y.map((e) => e.color)), t = Math.max(...y.map((e) => e.color)), n = M.append("g").attr("class", "color-legend").attr("transform", `translate(${x / 2 - 200 / 2}, ${S + 60})`), r = C.append("defs").append("linearGradient").attr("id", "color-scale-gradient").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%"), i = h?.gradient || l;
|
|
187
|
-
i.forEach((e, t) => {
|
|
188
|
-
r.append("stop").attr("offset", `${t / (i.length - 1) * 100}%`).attr("stop-color", e);
|
|
189
|
-
}), n.append("rect").attr("width", 200).attr("height", 20).style("fill", "url(#color-scale-gradient)").style("stroke", "#ccc").style("stroke-width", 1), n.append("text").attr("x", 0).attr("y", 35).attr("text-anchor", "start").style("font-size", "11px").style("fill", K).text(B.leftYAxisFormat ? p(e, B.leftYAxisFormat) : e.toFixed(2)), n.append("text").attr("x", 200).attr("y", 35).attr("text-anchor", "end").style("font-size", "11px").style("fill", K).text(B.leftYAxisFormat ? p(t, B.leftYAxisFormat) : t.toFixed(2)), n.append("text").attr("x", 200 / 2).attr("y", -5).attr("text-anchor", "middle").style("font-size", "12px").style("font-weight", "bold").style("fill", K).text(z(g));
|
|
190
|
-
} else {
|
|
191
|
-
let e = U;
|
|
192
|
-
if (e.length > 0) {
|
|
193
|
-
let t = M.append("g").attr("class", "legend").attr("transform", `translate(${x / 2 - e.length * 80 / 2}, ${S + 60})`).selectAll(".legend-item").data(e).enter().append("g").attr("class", "legend-item").attr("transform", (e, t) => `translate(${t * 80}, 0)`).style("cursor", "pointer");
|
|
194
|
-
t.append("circle").attr("cx", 5).attr("cy", 5).attr("r", 5).style("fill", (e) => V(e)).style("opacity", B.bubbleOpacity), t.append("text").attr("x", 15).attr("y", 5).attr("dy", ".35em").style("font-size", "11px").style("fill", K).text((e) => String(e)), t.on("mouseover", function(e, t) {
|
|
195
|
-
$.transition().duration(200).style("opacity", (e) => g && String(e.color) === t ? 1 : .2);
|
|
196
|
-
}).on("mouseout", function() {
|
|
197
|
-
$.transition().duration(200).style("opacity", B.bubbleOpacity);
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return () => {
|
|
202
|
-
Q.remove();
|
|
203
|
-
};
|
|
204
|
-
}, [
|
|
205
|
-
e,
|
|
206
|
-
i,
|
|
207
|
-
B,
|
|
208
|
-
u,
|
|
209
|
-
P,
|
|
210
|
-
I,
|
|
211
|
-
h,
|
|
212
|
-
R,
|
|
213
|
-
z
|
|
214
|
-
]), !e || e.length === 0 ? /* @__PURE__ */ S("div", {
|
|
215
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
|
|
216
|
-
style: { height: m },
|
|
217
|
-
children: /* @__PURE__ */ C("div", {
|
|
218
|
-
className: "dc:text-center",
|
|
219
|
-
children: [/* @__PURE__ */ S("div", {
|
|
220
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
221
|
-
children: x("chart.runtime.noData")
|
|
222
|
-
}), /* @__PURE__ */ S("div", {
|
|
223
|
-
className: "dc:text-xs text-dc-text-secondary",
|
|
224
|
-
children: x("chart.runtime.noDataHint.bubble")
|
|
225
|
-
})]
|
|
226
|
-
})
|
|
227
|
-
}) : i?.xAxis && i?.yAxis && i?.series ? /* @__PURE__ */ S("div", {
|
|
228
|
-
className: "dc:w-full dc:flex-1 dc:flex dc:flex-col dc:relative",
|
|
229
|
-
style: {
|
|
230
|
-
height: m,
|
|
231
|
-
minHeight: "250px",
|
|
232
|
-
overflow: "hidden"
|
|
233
|
-
},
|
|
234
|
-
children: /* @__PURE__ */ C("div", {
|
|
235
|
-
ref: N,
|
|
236
|
-
className: "dc:w-full dc:h-full dc:relative",
|
|
237
|
-
children: [/* @__PURE__ */ S("svg", {
|
|
238
|
-
ref: j,
|
|
239
|
-
className: "dc:w-full dc:h-full"
|
|
240
|
-
}), !I && /* @__PURE__ */ S("div", {
|
|
241
|
-
className: "dc:absolute dc:inset-0 dc:flex dc:items-center dc:justify-center",
|
|
242
|
-
children: /* @__PURE__ */ S("div", {
|
|
243
|
-
className: "text-dc-text-muted dc:text-sm",
|
|
244
|
-
children: x("chart.runtime.measuringDimensions")
|
|
245
|
-
})
|
|
246
|
-
})]
|
|
247
|
-
})
|
|
248
|
-
}) : /* @__PURE__ */ S("div", {
|
|
249
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
|
|
250
|
-
style: { height: m },
|
|
251
|
-
children: /* @__PURE__ */ C("div", {
|
|
252
|
-
className: "dc:text-center",
|
|
253
|
-
children: [
|
|
254
|
-
/* @__PURE__ */ S("div", {
|
|
255
|
-
className: "dc:text-sm dc:font-semibold dc:mb-1",
|
|
256
|
-
children: x("chart.runtime.activityGridConfigRequired")
|
|
257
|
-
}),
|
|
258
|
-
/* @__PURE__ */ S("div", {
|
|
259
|
-
className: "dc:text-xs",
|
|
260
|
-
children: x("chart.runtime.configErrorHint.bubbleRequired")
|
|
261
|
-
}),
|
|
262
|
-
/* @__PURE__ */ S("div", {
|
|
263
|
-
className: "dc:text-xs dc:mt-1",
|
|
264
|
-
children: x("chart.runtime.configErrorHint.bubbleOptional")
|
|
265
|
-
})
|
|
266
|
-
]
|
|
267
|
-
})
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
//#endregion
|
|
271
|
-
export { M as n, N as t };
|
|
272
|
-
|
|
273
|
-
//# sourceMappingURL=chart-bubble-CfqiB538.js.map
|