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,16 +1,16 @@
|
|
|
1
|
-
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./vendor-
|
|
2
|
-
import {
|
|
3
|
-
import { A as u,
|
|
4
|
-
import { a as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { n as
|
|
10
|
-
import
|
|
11
|
-
import { Fragment as
|
|
1
|
+
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./vendor-DSpR0IW6.js";
|
|
2
|
+
import { k as s, u as c, v as l } from "./chart-data-table-CKauQXme.js";
|
|
3
|
+
import { A as u, S as d, T as f, _ as p, _t as m, d as h, et as g, g as _, gt as v, l as y, u as b, v as x, x as S, y as C } from "./DashboardEditModal-okVfH8ZK.js";
|
|
4
|
+
import { a as w, s as T, t as E } from "./retention-ChW9jYdy.js";
|
|
5
|
+
import { P as D, z as ee } from "./chart-activity-grid-DX0SJbxs.js";
|
|
6
|
+
import { A as O, D as k, O as te, S as ne, T as A, a as re, d as ie, k as ae, l as oe, n as se, r as ce, s as le } from "./useDirtyStateTracking-MbpxH_v6.js";
|
|
7
|
+
import { a as ue, i as de } from "./useExplainAI-evnZkjCY.js";
|
|
8
|
+
import { r as fe, s as j } from "./chart-funnel-CToKSBaL.js";
|
|
9
|
+
import { n as M } from "./charts-core-DaXSt1Dd.js";
|
|
10
|
+
import N, { createContext as P, memo as F, useCallback as I, useContext as pe, useEffect as L, useMemo as R, useRef as z, useState as B } from "react";
|
|
11
|
+
import { Fragment as V, jsx as H, jsxs as U } from "react/jsx-runtime";
|
|
12
12
|
//#region src/shared/date-utils.ts
|
|
13
|
-
function
|
|
13
|
+
function me(e) {
|
|
14
14
|
let t = /* @__PURE__ */ new Date(), n = e.toLowerCase().trim(), r = t.getUTCFullYear(), i = t.getUTCMonth(), a = t.getUTCDate(), o = t.getUTCDay();
|
|
15
15
|
if (n === "today") {
|
|
16
16
|
let e = new Date(t);
|
|
@@ -123,7 +123,7 @@ function de(e) {
|
|
|
123
123
|
}
|
|
124
124
|
return null;
|
|
125
125
|
}
|
|
126
|
-
function
|
|
126
|
+
function W(e) {
|
|
127
127
|
if (Array.isArray(e)) {
|
|
128
128
|
if (e.length < 2) return null;
|
|
129
129
|
let t = new Date(e[0]), n = new Date(e[1]);
|
|
@@ -132,12 +132,12 @@ function fe(e) {
|
|
|
132
132
|
end: n
|
|
133
133
|
});
|
|
134
134
|
}
|
|
135
|
-
return
|
|
135
|
+
return me(e);
|
|
136
136
|
}
|
|
137
|
-
function
|
|
137
|
+
function he(e) {
|
|
138
138
|
return e.toISOString().split("T")[0];
|
|
139
139
|
}
|
|
140
|
-
function
|
|
140
|
+
function ge(e, t) {
|
|
141
141
|
let n = t.getTime() - e.getTime(), r = Math.ceil(n / (1e3 * 60 * 60 * 24)), i = new Date(e);
|
|
142
142
|
i.setUTCDate(i.getUTCDate() - 1), i.setUTCHours(23, 59, 59, 999);
|
|
143
143
|
let a = new Date(i);
|
|
@@ -148,27 +148,27 @@ function me(e, t) {
|
|
|
148
148
|
}
|
|
149
149
|
//#endregion
|
|
150
150
|
//#region src/client/components/AnalysisBuilder/utils/filterUtils.ts
|
|
151
|
-
function
|
|
151
|
+
function _e(e, t) {
|
|
152
152
|
for (let n of e) if ("type" in n && "filters" in n) {
|
|
153
|
-
let e =
|
|
153
|
+
let e = _e(n.filters, t);
|
|
154
154
|
if (e) return e;
|
|
155
155
|
} else if ("member" in n) {
|
|
156
156
|
let e = n;
|
|
157
157
|
if (e.member === t && e.operator === "inDateRange" && e.dateRange) return { dateRange: e.dateRange };
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
function
|
|
161
|
-
let n =
|
|
160
|
+
function ve(e, t) {
|
|
161
|
+
let n = _e(t, e);
|
|
162
162
|
if (!n?.dateRange) return;
|
|
163
|
-
let r =
|
|
163
|
+
let r = W(n.dateRange);
|
|
164
164
|
if (!r) return;
|
|
165
|
-
let i =
|
|
166
|
-
return [[
|
|
165
|
+
let i = ge(r.start, r.end);
|
|
166
|
+
return [[he(r.start), he(r.end)], [he(i.start), he(i.end)]];
|
|
167
167
|
}
|
|
168
|
-
function
|
|
168
|
+
function ye(e, t) {
|
|
169
169
|
return e.reduce((e, n) => {
|
|
170
170
|
if ("type" in n && "filters" in n) {
|
|
171
|
-
let r = n, i =
|
|
171
|
+
let r = n, i = ye(r.filters, t);
|
|
172
172
|
i.length > 0 && e.push({
|
|
173
173
|
type: r.type,
|
|
174
174
|
filters: i
|
|
@@ -182,10 +182,10 @@ function _e(e, t) {
|
|
|
182
182
|
}
|
|
183
183
|
//#endregion
|
|
184
184
|
//#region src/client/components/AnalysisBuilder/utils/queryUtils.ts
|
|
185
|
-
function
|
|
185
|
+
function G(e, t, n, r, i = !1, a) {
|
|
186
186
|
let o = t.filter((e) => e.isTimeDimension && e.enableComparison).map((e) => e.field), s = n;
|
|
187
|
-
if (!i) for (let e of o) s =
|
|
188
|
-
s = s.filter((e) =>
|
|
187
|
+
if (!i) for (let e of o) s = ye(s, e);
|
|
188
|
+
s = s.filter((e) => g(e));
|
|
189
189
|
let c = {
|
|
190
190
|
measures: e.map((e) => e.field),
|
|
191
191
|
dimensions: t.filter((e) => !e.isTimeDimension).map((e) => e.field),
|
|
@@ -195,7 +195,7 @@ function ve(e, t, n, r, i = !1, a) {
|
|
|
195
195
|
granularity: e.granularity || "day"
|
|
196
196
|
};
|
|
197
197
|
if (e.enableComparison) {
|
|
198
|
-
let r =
|
|
198
|
+
let r = ve(e.field, n);
|
|
199
199
|
r && (t.compareDateRange = r);
|
|
200
200
|
}
|
|
201
201
|
return t;
|
|
@@ -218,122 +218,324 @@ function K() {
|
|
|
218
218
|
};
|
|
219
219
|
}
|
|
220
220
|
//#endregion
|
|
221
|
+
//#region src/client/components/AnalysisBuilder/filterConfigModalUtils.ts
|
|
222
|
+
function q(e, t, n, r) {
|
|
223
|
+
if (!t || n === 0) return { type: "none" };
|
|
224
|
+
switch (e) {
|
|
225
|
+
case "ArrowDown": return {
|
|
226
|
+
type: "highlight",
|
|
227
|
+
index: r < n - 1 ? r + 1 : 0
|
|
228
|
+
};
|
|
229
|
+
case "ArrowUp": return {
|
|
230
|
+
type: "highlight",
|
|
231
|
+
index: r > 0 ? r - 1 : n - 1
|
|
232
|
+
};
|
|
233
|
+
case "Enter": return r >= 0 && r < n ? {
|
|
234
|
+
type: "select",
|
|
235
|
+
index: r
|
|
236
|
+
} : { type: "none" };
|
|
237
|
+
case "Escape": return { type: "close" };
|
|
238
|
+
default: return { type: "none" };
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//#endregion
|
|
242
|
+
//#region src/client/components/AnalysisBuilder/FilterValueInput.tsx
|
|
243
|
+
var J = l("close"), be = l("chevronDown");
|
|
244
|
+
function xe({ filter: e, dateRange: t }) {
|
|
245
|
+
let { t: n } = D(), { rangeType: r, numberValue: i, label: a, isOpen: o, onToggle: s, onRangeTypeChange: c, onNumberValueChange: l, onCustomStartDate: u, onCustomEndDate: d, onOpen: f } = t;
|
|
246
|
+
return /* @__PURE__ */ U("div", {
|
|
247
|
+
className: "dc:space-y-2",
|
|
248
|
+
children: [
|
|
249
|
+
/* @__PURE__ */ U("div", {
|
|
250
|
+
className: "dc:relative",
|
|
251
|
+
children: [/* @__PURE__ */ U("button", {
|
|
252
|
+
onClick: () => {
|
|
253
|
+
f(), s(!o);
|
|
254
|
+
},
|
|
255
|
+
className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
|
|
256
|
+
children: [/* @__PURE__ */ H("span", {
|
|
257
|
+
className: "dc:truncate",
|
|
258
|
+
children: a
|
|
259
|
+
}), /* @__PURE__ */ H(be, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${o ? "dc:rotate-180" : ""}` })]
|
|
260
|
+
}), o && /* @__PURE__ */ H("div", {
|
|
261
|
+
className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-48 dc:overflow-y-auto",
|
|
262
|
+
children: ae.map((e) => /* @__PURE__ */ H("button", {
|
|
263
|
+
onClick: () => c(e.value),
|
|
264
|
+
className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm hover:bg-dc-surface-hover ${e.value === r ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text"}`,
|
|
265
|
+
children: n(e.label)
|
|
266
|
+
}, e.value))
|
|
267
|
+
})]
|
|
268
|
+
}),
|
|
269
|
+
te(r) && /* @__PURE__ */ U("div", {
|
|
270
|
+
className: "dc:flex dc:items-center dc:gap-2",
|
|
271
|
+
children: [/* @__PURE__ */ H("input", {
|
|
272
|
+
type: "number",
|
|
273
|
+
min: "1",
|
|
274
|
+
max: "1000",
|
|
275
|
+
value: i,
|
|
276
|
+
onChange: (e) => l(Math.max(1, parseInt(e.target.value) || 1)),
|
|
277
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text dc:w-20"
|
|
278
|
+
}), /* @__PURE__ */ H("span", {
|
|
279
|
+
className: "dc:text-sm text-dc-text-muted",
|
|
280
|
+
children: r.replace("last_n_", "")
|
|
281
|
+
})]
|
|
282
|
+
}),
|
|
283
|
+
r === "custom" && /* @__PURE__ */ U("div", {
|
|
284
|
+
className: "dc:flex dc:items-center dc:gap-2",
|
|
285
|
+
children: [
|
|
286
|
+
/* @__PURE__ */ H("input", {
|
|
287
|
+
type: "date",
|
|
288
|
+
value: Array.isArray(e.dateRange) ? e.dateRange[0] : "",
|
|
289
|
+
onChange: u,
|
|
290
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
|
|
291
|
+
}),
|
|
292
|
+
/* @__PURE__ */ H("span", {
|
|
293
|
+
className: "dc:text-sm text-dc-text-muted",
|
|
294
|
+
children: n("filter.modal.dateTo")
|
|
295
|
+
}),
|
|
296
|
+
/* @__PURE__ */ H("input", {
|
|
297
|
+
type: "date",
|
|
298
|
+
value: Array.isArray(e.dateRange) ? e.dateRange[1] : "",
|
|
299
|
+
onChange: d,
|
|
300
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
|
|
301
|
+
})
|
|
302
|
+
]
|
|
303
|
+
})
|
|
304
|
+
]
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
function Se({ filter: e, combo: t }) {
|
|
308
|
+
let { t: n } = D(), { options: r, loading: i, error: a, highlightedIndex: o, listRef: s, onSelect: c } = t;
|
|
309
|
+
return i ? /* @__PURE__ */ H("div", {
|
|
310
|
+
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
311
|
+
children: n("filter.modal.loading")
|
|
312
|
+
}) : a ? /* @__PURE__ */ U("div", {
|
|
313
|
+
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-error",
|
|
314
|
+
children: [n("filter.modal.errorPrefix"), String(a)]
|
|
315
|
+
}) : r.length === 0 ? /* @__PURE__ */ H("div", {
|
|
316
|
+
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
317
|
+
children: n("filter.modal.noValues")
|
|
318
|
+
}) : /* @__PURE__ */ H("div", {
|
|
319
|
+
ref: s,
|
|
320
|
+
className: "dc:max-h-40 dc:overflow-y-auto",
|
|
321
|
+
children: r.map((t, n) => {
|
|
322
|
+
let r = e.values?.includes(t);
|
|
323
|
+
return /* @__PURE__ */ U("button", {
|
|
324
|
+
onClick: (e) => c(t, e),
|
|
325
|
+
className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm dc:transition-colors ${n === o ? "bg-dc-surface-hover" : ""} ${r ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text hover:bg-dc-surface-hover"}`,
|
|
326
|
+
children: [String(t), r && /* @__PURE__ */ H("span", {
|
|
327
|
+
className: "dc:float-right",
|
|
328
|
+
children: "✓"
|
|
329
|
+
})]
|
|
330
|
+
}, `${t}-${n}`);
|
|
331
|
+
})
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
function Ce({ filter: e, operatorMeta: t, combo: n }) {
|
|
335
|
+
let { t: r } = D(), { isOpen: i, loading: a, searchText: o, onSearchTextChange: s, onHighlightedIndexChange: c, onRemove: l, onKeyDown: u, onOpen: d } = n;
|
|
336
|
+
return /* @__PURE__ */ U("div", {
|
|
337
|
+
className: "dc:space-y-2",
|
|
338
|
+
children: [
|
|
339
|
+
e.values && e.values.length > 0 && /* @__PURE__ */ H("div", {
|
|
340
|
+
className: "dc:flex dc:flex-wrap dc:gap-1.5",
|
|
341
|
+
children: e.values.map((e, t) => /* @__PURE__ */ U("span", {
|
|
342
|
+
className: "dc:inline-flex dc:items-center dc:gap-1 bg-dc-primary/10 text-dc-primary dc:text-sm dc:px-2 dc:py-1 dc:rounded",
|
|
343
|
+
children: [/* @__PURE__ */ H("span", {
|
|
344
|
+
className: "dc:max-w-[150px] dc:truncate",
|
|
345
|
+
children: String(e)
|
|
346
|
+
}), /* @__PURE__ */ H("button", {
|
|
347
|
+
onClick: () => l(e),
|
|
348
|
+
className: "hover:text-dc-danger",
|
|
349
|
+
children: /* @__PURE__ */ H(J, { className: "dc:w-3.5 dc:h-3.5" })
|
|
350
|
+
})]
|
|
351
|
+
}, t))
|
|
352
|
+
}),
|
|
353
|
+
/* @__PURE__ */ U("div", {
|
|
354
|
+
className: "dc:relative",
|
|
355
|
+
children: [/* @__PURE__ */ U("button", {
|
|
356
|
+
onClick: () => {
|
|
357
|
+
d();
|
|
358
|
+
},
|
|
359
|
+
className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
|
|
360
|
+
children: [/* @__PURE__ */ H("span", {
|
|
361
|
+
className: "text-dc-text-muted dc:truncate",
|
|
362
|
+
children: r(a ? "filter.modal.loading" : "filter.modal.selectValue")
|
|
363
|
+
}), /* @__PURE__ */ H(be, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${i ? "dc:rotate-180" : ""}` })]
|
|
364
|
+
}), i && /* @__PURE__ */ U("div", {
|
|
365
|
+
className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-56 dc:overflow-hidden",
|
|
366
|
+
children: [/* @__PURE__ */ H("div", {
|
|
367
|
+
className: "dc:p-2 dc:border-b border-dc-border",
|
|
368
|
+
children: /* @__PURE__ */ H("input", {
|
|
369
|
+
type: "text",
|
|
370
|
+
value: o,
|
|
371
|
+
onChange: (e) => {
|
|
372
|
+
s(e.target.value), c(-1);
|
|
373
|
+
},
|
|
374
|
+
onKeyDown: u,
|
|
375
|
+
placeholder: r("filter.modal.search"),
|
|
376
|
+
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text",
|
|
377
|
+
autoFocus: !0
|
|
378
|
+
})
|
|
379
|
+
}), /* @__PURE__ */ H(Se, {
|
|
380
|
+
filter: e,
|
|
381
|
+
combo: n
|
|
382
|
+
})]
|
|
383
|
+
})]
|
|
384
|
+
}),
|
|
385
|
+
t?.supportsMultipleValues && /* @__PURE__ */ H("p", {
|
|
386
|
+
className: "dc:text-xs text-dc-text-muted",
|
|
387
|
+
children: r("filter.modal.multiSelectHint")
|
|
388
|
+
})
|
|
389
|
+
]
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
function we({ field: e, dateRange: t, combo: n, inputs: r }) {
|
|
393
|
+
let { t: i } = D(), { filter: a, operatorMeta: o, shouldShowDateRange: s, shouldShowComboBox: c } = e, { onBetweenStart: l, onBetweenEnd: u, onDate: d, onDirect: f } = r;
|
|
394
|
+
return o?.requiresValues ? s ? /* @__PURE__ */ H(xe, {
|
|
395
|
+
filter: a,
|
|
396
|
+
dateRange: t
|
|
397
|
+
}) : a.operator === "between" || a.operator === "notBetween" ? /* @__PURE__ */ U("div", {
|
|
398
|
+
className: "dc:flex dc:items-center dc:gap-2",
|
|
399
|
+
children: [
|
|
400
|
+
/* @__PURE__ */ H("input", {
|
|
401
|
+
type: "number",
|
|
402
|
+
value: a.values?.[0] ?? "",
|
|
403
|
+
onChange: l,
|
|
404
|
+
placeholder: i("filter.modal.min"),
|
|
405
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
406
|
+
}),
|
|
407
|
+
/* @__PURE__ */ H("span", {
|
|
408
|
+
className: "dc:text-sm text-dc-text-muted",
|
|
409
|
+
children: i("filter.modal.to")
|
|
410
|
+
}),
|
|
411
|
+
/* @__PURE__ */ H("input", {
|
|
412
|
+
type: "number",
|
|
413
|
+
value: a.values?.[1] ?? "",
|
|
414
|
+
onChange: u,
|
|
415
|
+
placeholder: i("filter.modal.max"),
|
|
416
|
+
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
417
|
+
})
|
|
418
|
+
]
|
|
419
|
+
}) : o?.valueType === "date" ? /* @__PURE__ */ H("input", {
|
|
420
|
+
type: "date",
|
|
421
|
+
value: a.values?.[0] || "",
|
|
422
|
+
onChange: d,
|
|
423
|
+
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
424
|
+
}) : o?.valueType === "number" ? /* @__PURE__ */ H("input", {
|
|
425
|
+
type: "number",
|
|
426
|
+
value: a.values?.[0] ?? "",
|
|
427
|
+
onChange: f,
|
|
428
|
+
placeholder: i("filter.modal.enterNumber"),
|
|
429
|
+
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
430
|
+
}) : c ? /* @__PURE__ */ H(Ce, {
|
|
431
|
+
filter: a,
|
|
432
|
+
operatorMeta: o,
|
|
433
|
+
combo: n
|
|
434
|
+
}) : /* @__PURE__ */ H("input", {
|
|
435
|
+
type: "text",
|
|
436
|
+
value: a.values?.[0] ?? "",
|
|
437
|
+
onChange: f,
|
|
438
|
+
placeholder: i("filter.modal.enterValue"),
|
|
439
|
+
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text placeholder-dc-text-muted"
|
|
440
|
+
}) : /* @__PURE__ */ H("div", {
|
|
441
|
+
className: "dc:text-sm text-dc-text-muted dc:italic dc:py-2",
|
|
442
|
+
children: i("filter.modal.noValueRequired")
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
//#endregion
|
|
221
446
|
//#region src/client/components/AnalysisBuilder/FilterConfigModal.tsx
|
|
222
|
-
var
|
|
223
|
-
function
|
|
224
|
-
let { t: a } =
|
|
447
|
+
var Te = l("close"), Ee = l("chevronDown"), De = l("dimension"), Oe = l("timeDimension"), ke = l("measure");
|
|
448
|
+
function Ae({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i }) {
|
|
449
|
+
let { t: a } = D(), [o, s] = B(e), [c, l] = B(!1), [u, d] = B(!1), [f, p] = B(!1), [m, h] = B("this_month"), [g, v] = B(1), [y, b] = B(""), [S, w] = B(null), [T, E] = B(-1), ee = z(null), ne = z(null), re = se(y, 300), ie = x(o.member, t), oe = ie?.field.type || "string", le = oe === "time", ue = ie?.fieldType === "measure", de = ie?.fieldType === "dimension", fe = C(o.member, t), j = O[o.operator], M = k(oe), N = le && o.operator === "inDateRange", P = I(() => [
|
|
225
450
|
"equals",
|
|
226
451
|
"notEquals",
|
|
227
452
|
"in",
|
|
228
453
|
"notIn"
|
|
229
|
-
].includes(o.operator) &&
|
|
454
|
+
].includes(o.operator) && de && !le, [
|
|
230
455
|
o.operator,
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
])(), { values:
|
|
234
|
-
|
|
456
|
+
de,
|
|
457
|
+
le
|
|
458
|
+
])(), { values: F, loading: pe, error: me, searchValues: W } = ce(o.member, P);
|
|
459
|
+
L(() => {
|
|
235
460
|
if (!i) {
|
|
236
|
-
|
|
461
|
+
w(null);
|
|
237
462
|
return;
|
|
238
463
|
}
|
|
239
464
|
let e = i.getBoundingClientRect(), t = e.top, n = window.innerHeight - e.bottom, r = t > 500 || t > n, a = Math.max(16, Math.min(e.left, window.innerWidth - 400 - 16));
|
|
240
|
-
|
|
465
|
+
w(r ? {
|
|
241
466
|
bottom: window.innerHeight - e.top + 8,
|
|
242
467
|
left: a
|
|
243
468
|
} : {
|
|
244
469
|
top: e.bottom + 8,
|
|
245
470
|
left: a
|
|
246
471
|
});
|
|
247
|
-
}, [i]),
|
|
472
|
+
}, [i]), L(() => {
|
|
248
473
|
let e = (e) => {
|
|
249
|
-
|
|
474
|
+
ee.current && !ee.current.contains(e.target) && (l(!1), d(!1), p(!1));
|
|
250
475
|
};
|
|
251
476
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
252
|
-
}, []),
|
|
253
|
-
|
|
477
|
+
}, []), L(() => {
|
|
478
|
+
u && P && W && W("", !0), u || E(-1);
|
|
254
479
|
}, [
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
]),
|
|
259
|
-
if (
|
|
260
|
-
let e =
|
|
480
|
+
u,
|
|
481
|
+
P,
|
|
482
|
+
W
|
|
483
|
+
]), L(() => {
|
|
484
|
+
if (T >= 0 && ne.current) {
|
|
485
|
+
let e = ne.current.children[T];
|
|
261
486
|
e && e.scrollIntoView({ block: "nearest" });
|
|
262
487
|
}
|
|
263
|
-
}, [
|
|
264
|
-
|
|
488
|
+
}, [T]), L(() => {
|
|
489
|
+
u && P && W && re !== void 0 && W(re);
|
|
265
490
|
}, [
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
]),
|
|
271
|
-
if (!
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
S(`last_n_${n}`), ee(parseInt(t) || 1);
|
|
277
|
-
} else if (t) {
|
|
278
|
-
let [, e] = t;
|
|
279
|
-
S(`last_n_${e === "day" ? "days" : e === "week" ? "weeks" : e === "month" ? "months" : e === "quarter" ? "quarters" : "years"}`), ee(1);
|
|
280
|
-
} else {
|
|
281
|
-
let e = !1;
|
|
282
|
-
for (let t of _) if (t.value !== "custom" && !f(t.value) && m(t.value) === o.dateRange) {
|
|
283
|
-
S(t.value), e = !0;
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
e || S("custom");
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}, [o.dateRange, I]);
|
|
290
|
-
let fe = R((e) => {
|
|
491
|
+
re,
|
|
492
|
+
u,
|
|
493
|
+
P,
|
|
494
|
+
W
|
|
495
|
+
]), L(() => {
|
|
496
|
+
if (!N) return;
|
|
497
|
+
let e = _(o.dateRange);
|
|
498
|
+
e && (h(e.rangeType), e.numberValue !== void 0 && v(e.numberValue));
|
|
499
|
+
}, [o.dateRange, N]);
|
|
500
|
+
let he = I((e) => {
|
|
291
501
|
s({
|
|
292
502
|
member: o.member,
|
|
293
503
|
operator: e,
|
|
294
504
|
values: []
|
|
295
505
|
}), l(!1);
|
|
296
|
-
}, [o.member]),
|
|
506
|
+
}, [o.member]), ge = I((e, t) => {
|
|
297
507
|
let n = t?.shiftKey ?? !1, r = o.values || [];
|
|
298
|
-
|
|
508
|
+
j?.supportsMultipleValues ? (r.includes(e) ? s({
|
|
299
509
|
...o,
|
|
300
510
|
values: r.filter((t) => t !== e)
|
|
301
511
|
}) : s({
|
|
302
512
|
...o,
|
|
303
513
|
values: [...r, e]
|
|
304
|
-
}), n ||
|
|
514
|
+
}), n || d(!1)) : (s({
|
|
305
515
|
...o,
|
|
306
516
|
values: [e]
|
|
307
|
-
}),
|
|
308
|
-
}, [o,
|
|
517
|
+
}), d(!1)), b(""), E(-1);
|
|
518
|
+
}, [o, j?.supportsMultipleValues]), _e = I((e) => {
|
|
309
519
|
let t = (o.values || []).filter((t) => t !== e);
|
|
310
520
|
s({
|
|
311
521
|
...o,
|
|
312
522
|
values: t
|
|
313
523
|
});
|
|
314
|
-
}, [o]),
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
e.preventDefault(), k((e) => e > 0 ? e - 1 : L.length - 1);
|
|
321
|
-
break;
|
|
322
|
-
case "Enter":
|
|
323
|
-
e.preventDefault(), O >= 0 && O < L.length && pe(L[O], { shiftKey: e.shiftKey });
|
|
324
|
-
break;
|
|
325
|
-
case "Escape":
|
|
326
|
-
e.preventDefault(), h(!1), k(-1);
|
|
327
|
-
break;
|
|
524
|
+
}, [o]), ve = I((e) => {
|
|
525
|
+
let t = q(e.key, u, F.length, T);
|
|
526
|
+
if (t.type !== "none") {
|
|
527
|
+
if (e.preventDefault(), t.type === "highlight") return E(t.index);
|
|
528
|
+
if (t.type === "select") return ge(F[t.index], { shiftKey: e.shiftKey });
|
|
529
|
+
d(!1), E(-1);
|
|
328
530
|
}
|
|
329
531
|
}, [
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
]),
|
|
532
|
+
u,
|
|
533
|
+
F,
|
|
534
|
+
T,
|
|
535
|
+
ge
|
|
536
|
+
]), ye = I((e) => {
|
|
335
537
|
let t = e.target.value;
|
|
336
|
-
if (
|
|
538
|
+
if (j?.valueType === "number") {
|
|
337
539
|
let e = parseFloat(t);
|
|
338
540
|
isNaN(e) ? (t === "" || t === "-") && s({
|
|
339
541
|
...o,
|
|
@@ -346,241 +548,110 @@ function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
346
548
|
...o,
|
|
347
549
|
values: t ? [t] : []
|
|
348
550
|
});
|
|
349
|
-
}, [o,
|
|
551
|
+
}, [o, j?.valueType]), G = I((e) => {
|
|
350
552
|
let t = parseFloat(e.target.value), n = [isNaN(t) ? "" : t, (o.values?.length >= 2 ? o.values : ["", ""])[1]].filter((e) => e !== "");
|
|
351
553
|
s({
|
|
352
554
|
...o,
|
|
353
555
|
values: n
|
|
354
556
|
});
|
|
355
|
-
}, [o]),
|
|
557
|
+
}, [o]), K = I((e) => {
|
|
356
558
|
let t = parseFloat(e.target.value), n = [(o.values?.length >= 2 ? o.values : ["", ""])[0], isNaN(t) ? "" : t].filter((e) => e !== "");
|
|
357
559
|
s({
|
|
358
560
|
...o,
|
|
359
561
|
values: n
|
|
360
562
|
});
|
|
361
|
-
}, [o]),
|
|
563
|
+
}, [o]), J = I((e) => {
|
|
362
564
|
let t = e.target.value;
|
|
363
565
|
s({
|
|
364
566
|
...o,
|
|
365
567
|
values: t ? [t] : []
|
|
366
568
|
});
|
|
367
|
-
}, [o]),
|
|
368
|
-
|
|
569
|
+
}, [o]), be = I((e) => {
|
|
570
|
+
h(e), p(!1);
|
|
369
571
|
let t;
|
|
370
572
|
if (e === "custom") {
|
|
371
573
|
let e = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
372
574
|
t = [e, e];
|
|
373
|
-
} else t =
|
|
575
|
+
} else t = te(e) ? A(e, g) : A(e);
|
|
374
576
|
s({
|
|
375
577
|
...o,
|
|
376
578
|
dateRange: t
|
|
377
579
|
});
|
|
378
|
-
}, [o,
|
|
379
|
-
if (
|
|
380
|
-
let t = m
|
|
580
|
+
}, [o, g]), xe = I((e) => {
|
|
581
|
+
if (v(e), te(m)) {
|
|
582
|
+
let t = A(m, e);
|
|
381
583
|
s({
|
|
382
584
|
...o,
|
|
383
585
|
dateRange: t
|
|
384
586
|
});
|
|
385
587
|
}
|
|
386
|
-
}, [o,
|
|
588
|
+
}, [o, m]), Se = I((e) => {
|
|
387
589
|
let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : [o.dateRange || "", ""])[1] || t;
|
|
388
590
|
s({
|
|
389
591
|
...o,
|
|
390
592
|
dateRange: [t, n]
|
|
391
593
|
});
|
|
392
|
-
}, [o]),
|
|
594
|
+
}, [o]), Ce = I((e) => {
|
|
393
595
|
let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : ["", o.dateRange || ""])[0] || t;
|
|
394
596
|
s({
|
|
395
597
|
...o,
|
|
396
598
|
dateRange: [n, t]
|
|
397
599
|
});
|
|
398
|
-
}, [o]),
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
className: "dc:text-sm text-dc-text-muted",
|
|
446
|
-
children: a("filter.modal.dateTo")
|
|
447
|
-
}),
|
|
448
|
-
/* @__PURE__ */ W("input", {
|
|
449
|
-
type: "date",
|
|
450
|
-
value: Array.isArray(o.dateRange) ? o.dateRange[1] : "",
|
|
451
|
-
onChange: we,
|
|
452
|
-
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
|
|
453
|
-
})
|
|
454
|
-
]
|
|
455
|
-
})
|
|
456
|
-
]
|
|
457
|
-
}) : o.operator === "between" || o.operator === "notBetween" ? /* @__PURE__ */ G("div", {
|
|
458
|
-
className: "dc:flex dc:items-center dc:gap-2",
|
|
459
|
-
children: [
|
|
460
|
-
/* @__PURE__ */ W("input", {
|
|
461
|
-
type: "number",
|
|
462
|
-
value: o.values?.[0] ?? "",
|
|
463
|
-
onChange: _e,
|
|
464
|
-
placeholder: a("filter.modal.min"),
|
|
465
|
-
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
466
|
-
}),
|
|
467
|
-
/* @__PURE__ */ W("span", {
|
|
468
|
-
className: "dc:text-sm text-dc-text-muted",
|
|
469
|
-
children: a("filter.modal.to")
|
|
470
|
-
}),
|
|
471
|
-
/* @__PURE__ */ W("input", {
|
|
472
|
-
type: "number",
|
|
473
|
-
value: o.values?.[1] ?? "",
|
|
474
|
-
onChange: ve,
|
|
475
|
-
placeholder: a("filter.modal.max"),
|
|
476
|
-
className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
477
|
-
})
|
|
478
|
-
]
|
|
479
|
-
}) : F?.valueType === "date" ? /* @__PURE__ */ W("input", {
|
|
480
|
-
type: "date",
|
|
481
|
-
value: o.values?.[0] || "",
|
|
482
|
-
onChange: K,
|
|
483
|
-
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
484
|
-
}) : F?.valueType === "number" ? /* @__PURE__ */ W("input", {
|
|
485
|
-
type: "number",
|
|
486
|
-
value: o.values?.[0] ?? "",
|
|
487
|
-
onChange: ge,
|
|
488
|
-
placeholder: a("filter.modal.enterNumber"),
|
|
489
|
-
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
|
|
490
|
-
}) : le ? /* @__PURE__ */ G("div", {
|
|
491
|
-
className: "dc:space-y-2",
|
|
492
|
-
children: [
|
|
493
|
-
o.values && o.values.length > 0 && /* @__PURE__ */ W("div", {
|
|
494
|
-
className: "dc:flex dc:flex-wrap dc:gap-1.5",
|
|
495
|
-
children: o.values.map((e, t) => /* @__PURE__ */ G("span", {
|
|
496
|
-
className: "dc:inline-flex dc:items-center dc:gap-1 bg-dc-primary/10 text-dc-primary dc:text-sm dc:px-2 dc:py-1 dc:rounded",
|
|
497
|
-
children: [/* @__PURE__ */ W("span", {
|
|
498
|
-
className: "dc:max-w-[150px] dc:truncate",
|
|
499
|
-
children: String(e)
|
|
500
|
-
}), /* @__PURE__ */ W("button", {
|
|
501
|
-
onClick: () => me(e),
|
|
502
|
-
className: "hover:text-dc-danger",
|
|
503
|
-
children: /* @__PURE__ */ W(q, { className: "dc:w-3.5 dc:h-3.5" })
|
|
504
|
-
})]
|
|
505
|
-
}, t))
|
|
506
|
-
}),
|
|
507
|
-
/* @__PURE__ */ G("div", {
|
|
508
|
-
className: "dc:relative",
|
|
509
|
-
children: [/* @__PURE__ */ G("button", {
|
|
510
|
-
onClick: () => {
|
|
511
|
-
l(!1), v(!1), h(!p);
|
|
512
|
-
},
|
|
513
|
-
className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
|
|
514
|
-
children: [/* @__PURE__ */ W("span", {
|
|
515
|
-
className: "text-dc-text-muted dc:truncate",
|
|
516
|
-
children: a(ue ? "filter.modal.loading" : "filter.modal.selectValue")
|
|
517
|
-
}), /* @__PURE__ */ W(J, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${p ? "dc:rotate-180" : ""}` })]
|
|
518
|
-
}), p && /* @__PURE__ */ G("div", {
|
|
519
|
-
className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-56 dc:overflow-hidden",
|
|
520
|
-
children: [/* @__PURE__ */ W("div", {
|
|
521
|
-
className: "dc:p-2 dc:border-b border-dc-border",
|
|
522
|
-
children: /* @__PURE__ */ W("input", {
|
|
523
|
-
type: "text",
|
|
524
|
-
value: w,
|
|
525
|
-
onChange: (e) => {
|
|
526
|
-
te(e.target.value), k(-1);
|
|
527
|
-
},
|
|
528
|
-
onKeyDown: he,
|
|
529
|
-
placeholder: a("filter.modal.search"),
|
|
530
|
-
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text",
|
|
531
|
-
autoFocus: !0
|
|
532
|
-
})
|
|
533
|
-
}), /* @__PURE__ */ W("div", {
|
|
534
|
-
ref: j,
|
|
535
|
-
className: "dc:max-h-40 dc:overflow-y-auto",
|
|
536
|
-
children: ue ? /* @__PURE__ */ W("div", {
|
|
537
|
-
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
538
|
-
children: a("filter.modal.loading")
|
|
539
|
-
}) : B ? /* @__PURE__ */ G("div", {
|
|
540
|
-
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-error",
|
|
541
|
-
children: [a("filter.modal.errorPrefix"), B]
|
|
542
|
-
}) : L.length === 0 ? /* @__PURE__ */ W("div", {
|
|
543
|
-
className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
|
|
544
|
-
children: a("filter.modal.noValues")
|
|
545
|
-
}) : L.map((e, t) => {
|
|
546
|
-
let n = o.values?.includes(e);
|
|
547
|
-
return /* @__PURE__ */ G("button", {
|
|
548
|
-
onClick: (t) => pe(e, t),
|
|
549
|
-
className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm dc:transition-colors ${t === O ? "bg-dc-surface-hover" : ""} ${n ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text hover:bg-dc-surface-hover"}`,
|
|
550
|
-
children: [String(e), n && /* @__PURE__ */ W("span", {
|
|
551
|
-
className: "dc:float-right",
|
|
552
|
-
children: "✓"
|
|
553
|
-
})]
|
|
554
|
-
}, `${e}-${t}`);
|
|
555
|
-
})
|
|
556
|
-
})]
|
|
557
|
-
})]
|
|
558
|
-
}),
|
|
559
|
-
F?.supportsMultipleValues && /* @__PURE__ */ W("p", {
|
|
560
|
-
className: "dc:text-xs text-dc-text-muted",
|
|
561
|
-
children: a("filter.modal.multiSelectHint")
|
|
562
|
-
})
|
|
563
|
-
]
|
|
564
|
-
}) : /* @__PURE__ */ W("input", {
|
|
565
|
-
type: "text",
|
|
566
|
-
value: o.values?.[0] ?? "",
|
|
567
|
-
onChange: ge,
|
|
568
|
-
placeholder: a("filter.modal.enterValue"),
|
|
569
|
-
className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text placeholder-dc-text-muted"
|
|
570
|
-
}) : /* @__PURE__ */ W("div", {
|
|
571
|
-
className: "dc:text-sm text-dc-text-muted dc:italic dc:py-2",
|
|
572
|
-
children: a("filter.modal.noValueRequired")
|
|
573
|
-
});
|
|
574
|
-
return /* @__PURE__ */ W(U, { children: /* @__PURE__ */ W("div", {
|
|
575
|
-
className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${E ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
|
|
600
|
+
}, [o]), Ae = a(M.find((e) => e.operator === o.operator)?.label || o.operator), je = a(ae.find((e) => e.value === m)?.label || "filter.modal.selectRange"), Me = {
|
|
601
|
+
filter: o,
|
|
602
|
+
operatorMeta: j,
|
|
603
|
+
shouldShowDateRange: N,
|
|
604
|
+
shouldShowComboBox: P
|
|
605
|
+
}, Ne = {
|
|
606
|
+
rangeType: m,
|
|
607
|
+
numberValue: g,
|
|
608
|
+
label: je,
|
|
609
|
+
isOpen: f,
|
|
610
|
+
onToggle: p,
|
|
611
|
+
onRangeTypeChange: be,
|
|
612
|
+
onNumberValueChange: xe,
|
|
613
|
+
onCustomStartDate: Se,
|
|
614
|
+
onCustomEndDate: Ce,
|
|
615
|
+
onOpen: I(() => {
|
|
616
|
+
l(!1), d(!1);
|
|
617
|
+
}, [])
|
|
618
|
+
}, Pe = {
|
|
619
|
+
isOpen: u,
|
|
620
|
+
options: F,
|
|
621
|
+
loading: pe,
|
|
622
|
+
error: me,
|
|
623
|
+
searchText: y,
|
|
624
|
+
highlightedIndex: T,
|
|
625
|
+
listRef: ne,
|
|
626
|
+
onSearchTextChange: b,
|
|
627
|
+
onHighlightedIndexChange: E,
|
|
628
|
+
onSelect: ge,
|
|
629
|
+
onRemove: _e,
|
|
630
|
+
onKeyDown: ve,
|
|
631
|
+
onOpen: I(() => {
|
|
632
|
+
l(!1), p(!1), d((e) => !e);
|
|
633
|
+
}, [])
|
|
634
|
+
}, Fe = R(() => ({
|
|
635
|
+
onBetweenStart: G,
|
|
636
|
+
onBetweenEnd: K,
|
|
637
|
+
onDate: J,
|
|
638
|
+
onDirect: ye
|
|
639
|
+
}), [
|
|
640
|
+
G,
|
|
641
|
+
K,
|
|
642
|
+
J,
|
|
643
|
+
ye
|
|
644
|
+
]), Ie = le ? Oe : ue ? ke : De;
|
|
645
|
+
return /* @__PURE__ */ H(V, { children: /* @__PURE__ */ H("div", {
|
|
646
|
+
className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${S ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
|
|
576
647
|
onClick: r,
|
|
577
|
-
children: /* @__PURE__ */
|
|
578
|
-
ref:
|
|
579
|
-
className:
|
|
648
|
+
children: /* @__PURE__ */ U("div", {
|
|
649
|
+
ref: ee,
|
|
650
|
+
className: S ? "bg-dc-surface rounded-lg border border-dc-border" : "bg-dc-surface rounded-lg border border-dc-border max-w-md w-full",
|
|
580
651
|
style: {
|
|
581
|
-
...
|
|
652
|
+
...S ? {
|
|
582
653
|
position: "fixed",
|
|
583
|
-
...
|
|
654
|
+
...S,
|
|
584
655
|
maxWidth: "400px",
|
|
585
656
|
width: "100%"
|
|
586
657
|
} : {},
|
|
@@ -588,66 +659,71 @@ function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
588
659
|
},
|
|
589
660
|
onClick: (e) => e.stopPropagation(),
|
|
590
661
|
children: [
|
|
591
|
-
/* @__PURE__ */
|
|
662
|
+
/* @__PURE__ */ U("div", {
|
|
592
663
|
className: "dc:flex dc:items-center dc:justify-between dc:p-4 dc:border-b border-dc-border",
|
|
593
|
-
children: [/* @__PURE__ */
|
|
664
|
+
children: [/* @__PURE__ */ H("h2", {
|
|
594
665
|
className: "dc:text-lg dc:font-semibold text-dc-text",
|
|
595
666
|
children: a("filter.modal.title")
|
|
596
|
-
}), /* @__PURE__ */
|
|
667
|
+
}), /* @__PURE__ */ H("button", {
|
|
597
668
|
onClick: r,
|
|
598
669
|
className: "dc:p-1 text-dc-text-muted hover:text-dc-text dc:transition-colors",
|
|
599
|
-
children: /* @__PURE__ */
|
|
670
|
+
children: /* @__PURE__ */ H(Te, { className: "dc:w-5 dc:h-5" })
|
|
600
671
|
})]
|
|
601
672
|
}),
|
|
602
|
-
/* @__PURE__ */
|
|
673
|
+
/* @__PURE__ */ U("div", {
|
|
603
674
|
className: "dc:p-4 dc:space-y-4",
|
|
604
675
|
children: [
|
|
605
|
-
/* @__PURE__ */
|
|
676
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
606
677
|
className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
|
|
607
678
|
children: a("filter.modal.fieldLabel")
|
|
608
|
-
}), /* @__PURE__ */
|
|
679
|
+
}), /* @__PURE__ */ U("div", {
|
|
609
680
|
className: "dc:flex dc:items-center dc:gap-2 dc:p-3 bg-dc-surface-secondary dc:rounded",
|
|
610
|
-
children: [/* @__PURE__ */
|
|
681
|
+
children: [/* @__PURE__ */ H(Ie, { className: "dc:w-5 dc:h-5 text-dc-filter-text" }), /* @__PURE__ */ H("span", {
|
|
611
682
|
className: "dc:text-sm dc:font-medium text-dc-text",
|
|
612
|
-
children:
|
|
683
|
+
children: fe
|
|
613
684
|
})]
|
|
614
685
|
})] }),
|
|
615
|
-
/* @__PURE__ */
|
|
686
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
616
687
|
className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
|
|
617
688
|
children: a("filter.modal.operatorLabel")
|
|
618
|
-
}), /* @__PURE__ */
|
|
689
|
+
}), /* @__PURE__ */ U("div", {
|
|
619
690
|
className: "dc:relative",
|
|
620
|
-
children: [/* @__PURE__ */
|
|
691
|
+
children: [/* @__PURE__ */ U("button", {
|
|
621
692
|
onClick: () => {
|
|
622
|
-
|
|
693
|
+
d(!1), p(!1), l(!c);
|
|
623
694
|
},
|
|
624
695
|
className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
|
|
625
|
-
children: [/* @__PURE__ */
|
|
696
|
+
children: [/* @__PURE__ */ H("span", {
|
|
626
697
|
className: "dc:truncate",
|
|
627
|
-
children:
|
|
628
|
-
}), /* @__PURE__ */
|
|
629
|
-
}), c && /* @__PURE__ */
|
|
698
|
+
children: Ae
|
|
699
|
+
}), /* @__PURE__ */ H(Ee, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${c ? "dc:rotate-180" : ""}` })]
|
|
700
|
+
}), c && /* @__PURE__ */ H("div", {
|
|
630
701
|
className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-48 dc:overflow-y-auto",
|
|
631
|
-
children:
|
|
632
|
-
onClick: () =>
|
|
702
|
+
children: M.map((e) => /* @__PURE__ */ H("button", {
|
|
703
|
+
onClick: () => he(e.operator),
|
|
633
704
|
className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm hover:bg-dc-surface-hover ${e.operator === o.operator ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text"}`,
|
|
634
705
|
children: a(e.label)
|
|
635
706
|
}, e.operator))
|
|
636
707
|
})]
|
|
637
708
|
})] }),
|
|
638
|
-
/* @__PURE__ */
|
|
709
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
|
|
639
710
|
className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
|
|
640
711
|
children: a("filter.modal.valueLabel")
|
|
641
|
-
}),
|
|
712
|
+
}), /* @__PURE__ */ H(we, {
|
|
713
|
+
field: Me,
|
|
714
|
+
dateRange: Ne,
|
|
715
|
+
combo: Pe,
|
|
716
|
+
inputs: Fe
|
|
717
|
+
})] })
|
|
642
718
|
]
|
|
643
719
|
}),
|
|
644
|
-
/* @__PURE__ */
|
|
720
|
+
/* @__PURE__ */ U("div", {
|
|
645
721
|
className: "dc:flex dc:items-center dc:justify-end dc:gap-2 dc:p-4 dc:border-t border-dc-border",
|
|
646
|
-
children: [/* @__PURE__ */
|
|
722
|
+
children: [/* @__PURE__ */ H("button", {
|
|
647
723
|
onClick: r,
|
|
648
724
|
className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium text-dc-text-secondary hover:text-dc-text dc:transition-colors",
|
|
649
725
|
children: a("common.actions.cancel")
|
|
650
|
-
}), /* @__PURE__ */
|
|
726
|
+
}), /* @__PURE__ */ H("button", {
|
|
651
727
|
onClick: () => n(o),
|
|
652
728
|
className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium text-dc-primary-content bg-dc-primary hover:bg-dc-primary-hover dc:rounded dc:transition-colors",
|
|
653
729
|
children: a("common.actions.save")
|
|
@@ -659,47 +735,47 @@ function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
|
|
|
659
735
|
}
|
|
660
736
|
//#endregion
|
|
661
737
|
//#region src/client/components/AnalysisBuilder/AnalysisFilterItem.tsx
|
|
662
|
-
var
|
|
663
|
-
function
|
|
664
|
-
let { t: i } =
|
|
665
|
-
return /* @__PURE__ */
|
|
738
|
+
var je = l("close"), Me = l("dimension"), Ne = l("timeDimension"), Pe = l("measure");
|
|
739
|
+
function Fe({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
|
|
740
|
+
let { t: i } = D(), [a, o] = B(!1), s = z(null), c = x(e.member, t), l = (c?.field.type || "string") === "time", u = c?.fieldType === "measure", d = C(e.member, t), f = O[e.operator], p = f?.label ? i(f.label) : e.operator, m = Ie(e, f, i), h = l ? Ne : u ? Pe : Me;
|
|
741
|
+
return /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ U("div", {
|
|
666
742
|
className: "dc:flex dc:items-start dc:gap-2 dc:px-2 dc:py-1.5 bg-dc-surface-secondary dc:rounded-lg dc:group hover:bg-dc-surface-tertiary dc:transition-all dc:duration-150 dc:w-full",
|
|
667
743
|
children: [
|
|
668
|
-
/* @__PURE__ */
|
|
669
|
-
className: `dc:w-6 dc:h-6 dc:flex dc:items-center dc:justify-center dc:rounded ${l ? "bg-dc-time-dimension" :
|
|
670
|
-
children:
|
|
744
|
+
/* @__PURE__ */ H("span", {
|
|
745
|
+
className: `dc:w-6 dc:h-6 dc:flex dc:items-center dc:justify-center dc:rounded ${l ? "bg-dc-time-dimension" : u ? "bg-dc-measure" : "bg-dc-dimension"} ${l ? "text-dc-time-dimension-text" : u ? "text-dc-measure-text" : "text-dc-dimension-text"} dc:flex-shrink-0 dc:mt-0.5`,
|
|
746
|
+
children: h && /* @__PURE__ */ H(h, { className: "dc:w-4 dc:h-4" })
|
|
671
747
|
}),
|
|
672
|
-
/* @__PURE__ */
|
|
748
|
+
/* @__PURE__ */ H("button", {
|
|
673
749
|
ref: s,
|
|
674
750
|
onClick: () => o(!0),
|
|
675
751
|
className: "dc:flex-1 dc:min-w-0 dc:text-left",
|
|
676
|
-
title: `${
|
|
677
|
-
children: /* @__PURE__ */
|
|
752
|
+
title: `${d} ${p} ${m}`,
|
|
753
|
+
children: /* @__PURE__ */ U("div", {
|
|
678
754
|
className: "dc:text-sm text-dc-text dc:break-words",
|
|
679
755
|
children: [
|
|
680
|
-
/* @__PURE__ */
|
|
756
|
+
/* @__PURE__ */ H("span", {
|
|
681
757
|
className: "dc:font-medium",
|
|
682
|
-
children:
|
|
758
|
+
children: d
|
|
683
759
|
}),
|
|
684
|
-
/* @__PURE__ */
|
|
760
|
+
/* @__PURE__ */ H("span", {
|
|
685
761
|
className: "text-dc-text-muted dc:mx-1",
|
|
686
|
-
children:
|
|
762
|
+
children: p
|
|
687
763
|
}),
|
|
688
|
-
/* @__PURE__ */
|
|
764
|
+
/* @__PURE__ */ H("span", {
|
|
689
765
|
className: "text-dc-primary",
|
|
690
|
-
children:
|
|
766
|
+
children: m
|
|
691
767
|
})
|
|
692
768
|
]
|
|
693
769
|
})
|
|
694
770
|
}),
|
|
695
|
-
/* @__PURE__ */
|
|
771
|
+
/* @__PURE__ */ H("button", {
|
|
696
772
|
onClick: n,
|
|
697
773
|
className: "dc:p-1 text-dc-text-muted hover:text-dc-danger dc:opacity-100 dc:sm:opacity-0 dc:sm:group-hover:opacity-100 dc:transition-opacity dc:flex-shrink-0 dc:mt-0.5",
|
|
698
774
|
title: i("filter.removeButton.title"),
|
|
699
|
-
children:
|
|
775
|
+
children: je && /* @__PURE__ */ H(je, { className: "dc:w-4 dc:h-4" })
|
|
700
776
|
})
|
|
701
777
|
]
|
|
702
|
-
}), a && /* @__PURE__ */
|
|
778
|
+
}), a && /* @__PURE__ */ H(Ae, {
|
|
703
779
|
filter: e,
|
|
704
780
|
schema: t,
|
|
705
781
|
onSave: (e) => {
|
|
@@ -709,7 +785,7 @@ function Ee({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
|
|
|
709
785
|
anchorElement: s.current
|
|
710
786
|
})] });
|
|
711
787
|
}
|
|
712
|
-
function
|
|
788
|
+
function Ie(e, t, n) {
|
|
713
789
|
if (!t?.requiresValues) return "";
|
|
714
790
|
if (e.dateRange) return Array.isArray(e.dateRange) ? `${e.dateRange[0]} to ${e.dateRange[1]}` : e.dateRange;
|
|
715
791
|
let r = e.values || [];
|
|
@@ -717,34 +793,34 @@ function De(e, t, n) {
|
|
|
717
793
|
}
|
|
718
794
|
//#endregion
|
|
719
795
|
//#region src/client/components/AnalysisBuilder/AnalysisFilterGroup.tsx
|
|
720
|
-
var
|
|
721
|
-
function
|
|
796
|
+
var Le = l("add"), Re = l("close");
|
|
797
|
+
function ze(e) {
|
|
722
798
|
return "member" in e && typeof e.member == "string";
|
|
723
799
|
}
|
|
724
|
-
function
|
|
800
|
+
function Be(e) {
|
|
725
801
|
return "type" in e && (e.type === "and" || e.type === "or");
|
|
726
802
|
}
|
|
727
|
-
function
|
|
728
|
-
let { t: s } =
|
|
729
|
-
|
|
803
|
+
function Ve({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, depth: a = 0, hideRemoveButton: o = !1 }) {
|
|
804
|
+
let { t: s } = D(), [c, l] = B(!1), u = z(null);
|
|
805
|
+
L(() => {
|
|
730
806
|
let e = (e) => {
|
|
731
807
|
u.current && !u.current.contains(e.target) && l(!1);
|
|
732
808
|
};
|
|
733
809
|
return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
|
|
734
810
|
}, []);
|
|
735
|
-
let d =
|
|
811
|
+
let d = I(() => {
|
|
736
812
|
let t = e.type === "and" ? "or" : "and";
|
|
737
813
|
n({
|
|
738
814
|
...e,
|
|
739
815
|
type: t
|
|
740
816
|
});
|
|
741
|
-
}, [e, n]), f =
|
|
817
|
+
}, [e, n]), f = I((t, r) => {
|
|
742
818
|
let i = [...e.filters];
|
|
743
819
|
i[t] = r, n({
|
|
744
820
|
...e,
|
|
745
821
|
filters: i
|
|
746
822
|
});
|
|
747
|
-
}, [e, n]), p =
|
|
823
|
+
}, [e, n]), p = I((t) => {
|
|
748
824
|
let i = e.filters.filter((e, n) => n !== t);
|
|
749
825
|
i.length === 0 ? r() : n({
|
|
750
826
|
...e,
|
|
@@ -755,7 +831,7 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
755
831
|
n,
|
|
756
832
|
r,
|
|
757
833
|
a
|
|
758
|
-
]), m =
|
|
834
|
+
]), m = I((t) => {
|
|
759
835
|
let r = {
|
|
760
836
|
type: t,
|
|
761
837
|
filters: []
|
|
@@ -764,23 +840,23 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
764
840
|
...e,
|
|
765
841
|
filters: [...e.filters, r]
|
|
766
842
|
}), l(!1);
|
|
767
|
-
}, [e, n]), h =
|
|
843
|
+
}, [e, n]), h = I(() => {
|
|
768
844
|
i([]), l(!1);
|
|
769
|
-
}, [i]), g =
|
|
845
|
+
}, [i]), g = I((e) => (t = []) => {
|
|
770
846
|
i([e, ...t]);
|
|
771
847
|
}, [i]), _ = () => a % 2 == 0 ? "border-dc-border" : "border-dc-border dark:border-dc-border", v = () => e.type === "and" ? "bg-dc-info-bg/50" : "bg-dc-warning-bg/50", y = e.filters.length, b = s(y === 1 ? "filter.group.condition" : "filter.group.conditions");
|
|
772
|
-
return /* @__PURE__ */
|
|
848
|
+
return /* @__PURE__ */ U("div", {
|
|
773
849
|
className: `dc:border ${_()} dc:rounded-lg bg-dc-surface dc:w-full`,
|
|
774
|
-
children: [/* @__PURE__ */
|
|
850
|
+
children: [/* @__PURE__ */ U("div", {
|
|
775
851
|
className: `dc:flex dc:items-center dc:justify-between dc:px-2 dc:py-1.5 dc:border-b border-dc-border/50 dc:rounded-t-lg ${v()}`,
|
|
776
|
-
children: [/* @__PURE__ */
|
|
852
|
+
children: [/* @__PURE__ */ U("div", {
|
|
777
853
|
className: "dc:flex dc:items-center dc:gap-2",
|
|
778
|
-
children: [/* @__PURE__ */
|
|
854
|
+
children: [/* @__PURE__ */ H("button", {
|
|
779
855
|
onClick: d,
|
|
780
856
|
className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-semibold dc:rounded dc:transition-colors ${e.type === "and" ? "bg-dc-info-bg text-dc-info dc:hover:opacity-80" : "bg-dc-warning-bg text-dc-warning dc:hover:opacity-80"}`,
|
|
781
857
|
title: `Click to switch to ${e.type === "and" ? "OR" : "AND"}`,
|
|
782
858
|
children: e.type.toUpperCase()
|
|
783
|
-
}), /* @__PURE__ */
|
|
859
|
+
}), /* @__PURE__ */ U("span", {
|
|
784
860
|
className: "dc:text-xs text-dc-text-muted",
|
|
785
861
|
children: [
|
|
786
862
|
y,
|
|
@@ -788,61 +864,61 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
788
864
|
b
|
|
789
865
|
]
|
|
790
866
|
})]
|
|
791
|
-
}), /* @__PURE__ */
|
|
867
|
+
}), /* @__PURE__ */ U("div", {
|
|
792
868
|
className: "dc:flex dc:items-center dc:gap-1",
|
|
793
|
-
children: [/* @__PURE__ */
|
|
869
|
+
children: [/* @__PURE__ */ U("div", {
|
|
794
870
|
className: "dc:relative",
|
|
795
871
|
ref: u,
|
|
796
|
-
children: [/* @__PURE__ */
|
|
872
|
+
children: [/* @__PURE__ */ H("button", {
|
|
797
873
|
onClick: () => l(!c),
|
|
798
874
|
className: "dc:p-1 text-dc-text-secondary hover:text-dc-primary hover:bg-dc-surface-hover dc:rounded dc:transition-colors",
|
|
799
875
|
title: "Add condition",
|
|
800
|
-
children: /* @__PURE__ */
|
|
801
|
-
}), c && /* @__PURE__ */
|
|
876
|
+
children: /* @__PURE__ */ H(Le, { className: "dc:w-4 dc:h-4" })
|
|
877
|
+
}), c && /* @__PURE__ */ U("div", {
|
|
802
878
|
className: "dc:absolute dc:right-0 dc:mt-1 dc:z-40 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:py-1 dc:min-w-[120px]",
|
|
803
879
|
children: [
|
|
804
|
-
/* @__PURE__ */
|
|
880
|
+
/* @__PURE__ */ H("button", {
|
|
805
881
|
onClick: h,
|
|
806
882
|
className: "dc:w-full dc:text-left dc:px-3 dc:py-1.5 dc:text-xs text-dc-text hover:bg-dc-surface-hover",
|
|
807
883
|
children: s("filter.group.addFilter")
|
|
808
884
|
}),
|
|
809
|
-
/* @__PURE__ */
|
|
885
|
+
/* @__PURE__ */ H("button", {
|
|
810
886
|
onClick: () => m("and"),
|
|
811
887
|
className: "dc:w-full dc:text-left dc:px-3 dc:py-1.5 dc:text-xs text-dc-text hover:bg-dc-surface-hover",
|
|
812
888
|
children: s("filter.group.addAndGroup")
|
|
813
889
|
}),
|
|
814
|
-
/* @__PURE__ */
|
|
890
|
+
/* @__PURE__ */ H("button", {
|
|
815
891
|
onClick: () => m("or"),
|
|
816
892
|
className: "dc:w-full dc:text-left dc:px-3 dc:py-1.5 dc:text-xs text-dc-text hover:bg-dc-surface-hover",
|
|
817
893
|
children: s("filter.group.addOrGroup")
|
|
818
894
|
})
|
|
819
895
|
]
|
|
820
896
|
})]
|
|
821
|
-
}), !o && /* @__PURE__ */
|
|
897
|
+
}), !o && /* @__PURE__ */ H("button", {
|
|
822
898
|
onClick: r,
|
|
823
899
|
className: "dc:p-1 text-dc-text-muted hover:text-dc-danger dc:transition-colors",
|
|
824
900
|
title: s("filter.group.removeGroup"),
|
|
825
|
-
children: /* @__PURE__ */
|
|
901
|
+
children: /* @__PURE__ */ H(Re, { className: "dc:w-4 dc:h-4" })
|
|
826
902
|
})]
|
|
827
903
|
})]
|
|
828
|
-
}), /* @__PURE__ */
|
|
904
|
+
}), /* @__PURE__ */ H("div", {
|
|
829
905
|
className: "dc:p-1.5 dc:flex dc:flex-wrap dc:gap-2",
|
|
830
|
-
children: e.filters.length === 0 ? /* @__PURE__ */
|
|
906
|
+
children: e.filters.length === 0 ? /* @__PURE__ */ U("div", {
|
|
831
907
|
className: "dc:text-center dc:py-3",
|
|
832
|
-
children: [/* @__PURE__ */
|
|
908
|
+
children: [/* @__PURE__ */ H("p", {
|
|
833
909
|
className: "dc:text-xs text-dc-text-muted dc:mb-1",
|
|
834
910
|
children: s("filter.group.empty")
|
|
835
|
-
}), /* @__PURE__ */
|
|
911
|
+
}), /* @__PURE__ */ H("button", {
|
|
836
912
|
onClick: () => i([]),
|
|
837
913
|
className: "dc:text-xs text-dc-primary dc:hover:underline",
|
|
838
914
|
children: s("filter.group.addFilterLink")
|
|
839
915
|
})]
|
|
840
|
-
}) : e.filters.map((e, n) =>
|
|
916
|
+
}) : e.filters.map((e, n) => ze(e) ? /* @__PURE__ */ H(Fe, {
|
|
841
917
|
filter: e,
|
|
842
918
|
schema: t,
|
|
843
919
|
onUpdate: (e) => f(n, e),
|
|
844
920
|
onRemove: () => p(n)
|
|
845
|
-
}, `filter-${n}`) :
|
|
921
|
+
}, `filter-${n}`) : Be(e) ? /* @__PURE__ */ H(Ve, {
|
|
846
922
|
group: e,
|
|
847
923
|
schema: t,
|
|
848
924
|
onUpdate: (e) => f(n, e),
|
|
@@ -855,28 +931,28 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
|
|
|
855
931
|
}
|
|
856
932
|
//#endregion
|
|
857
933
|
//#region src/client/components/AnalysisBuilder/AnalysisFilterSection.tsx
|
|
858
|
-
var
|
|
859
|
-
function
|
|
934
|
+
var He = l("add");
|
|
935
|
+
function Ue(e) {
|
|
860
936
|
return "member" in e && typeof e.member == "string";
|
|
861
937
|
}
|
|
862
|
-
function
|
|
938
|
+
function We(e) {
|
|
863
939
|
return "type" in e && (e.type === "and" || e.type === "or");
|
|
864
940
|
}
|
|
865
|
-
function
|
|
941
|
+
function Ge(e) {
|
|
866
942
|
let t = 0;
|
|
867
|
-
for (let n of e)
|
|
943
|
+
for (let n of e) Ue(n) ? t++ : We(n) && (t += Ge(n.filters));
|
|
868
944
|
return t;
|
|
869
945
|
}
|
|
870
|
-
function
|
|
946
|
+
function Ke(e) {
|
|
871
947
|
let t = [];
|
|
872
|
-
for (let n of e)
|
|
948
|
+
for (let n of e) Ue(n) ? t.push(n.member) : We(n) && t.push(...Ke(n.filters));
|
|
873
949
|
return t;
|
|
874
950
|
}
|
|
875
|
-
function
|
|
876
|
-
if (t.length === 0) return e.length === 0 ? [n] : e.length === 1 &&
|
|
951
|
+
function qe(e, t, n) {
|
|
952
|
+
if (t.length === 0) return e.length === 0 ? [n] : e.length === 1 && Ue(e[0]) ? [{
|
|
877
953
|
type: "and",
|
|
878
954
|
filters: [e[0], n]
|
|
879
|
-
}] : e.length === 1 &&
|
|
955
|
+
}] : e.length === 1 && We(e[0]) ? [{
|
|
880
956
|
...e[0],
|
|
881
957
|
filters: [...e[0].filters, n]
|
|
882
958
|
}] : [{
|
|
@@ -884,38 +960,38 @@ function Re(e, t, n) {
|
|
|
884
960
|
filters: [...e, n]
|
|
885
961
|
}];
|
|
886
962
|
let [r, ...i] = t, a = [...e], o = a[r];
|
|
887
|
-
return
|
|
963
|
+
return We(o) && (i.length === 0 ? a[r] = {
|
|
888
964
|
...o,
|
|
889
965
|
filters: [...o.filters, n]
|
|
890
966
|
} : a[r] = {
|
|
891
967
|
...o,
|
|
892
|
-
filters:
|
|
968
|
+
filters: qe(o.filters, i, n)
|
|
893
969
|
}), a;
|
|
894
970
|
}
|
|
895
|
-
function
|
|
896
|
-
let { t: a } =
|
|
971
|
+
function Je({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dimensionsOnly: i = !1 }) {
|
|
972
|
+
let { t: a } = D(), [o, s] = B(!1), [c, l] = B(!1), u = z([]), d = Ge(e), f = I((e) => {
|
|
897
973
|
e.preventDefault(), e.stopPropagation(), l(!0);
|
|
898
|
-
}, []),
|
|
974
|
+
}, []), m = I((e) => {
|
|
899
975
|
e.preventDefault(), e.stopPropagation(), l(!1);
|
|
900
|
-
}, []), h =
|
|
976
|
+
}, []), h = I((e) => {
|
|
901
977
|
e.preventDefault(), e.stopPropagation(), l(!1);
|
|
902
978
|
try {
|
|
903
979
|
let t = JSON.parse(e.dataTransfer.getData("text/plain"));
|
|
904
980
|
t.field && r && r(t.field);
|
|
905
981
|
} catch {}
|
|
906
|
-
}, [r]), g =
|
|
982
|
+
}, [r]), g = Ke(e), _ = I((t, r, i) => {
|
|
907
983
|
let a = t.type === "time", o = a ? "inDateRange" : "equals", c = {
|
|
908
984
|
member: t.name,
|
|
909
985
|
operator: o,
|
|
910
986
|
values: []
|
|
911
987
|
};
|
|
912
|
-
a && o === "inDateRange" && (c.dateRange =
|
|
913
|
-
}, [e, n]), v =
|
|
988
|
+
a && o === "inDateRange" && (c.dateRange = A("this_month")), n(qe(e, u.current, c)), s(!1), u.current = [];
|
|
989
|
+
}, [e, n]), v = I((t, r) => {
|
|
914
990
|
let i = [...e];
|
|
915
991
|
i[t] = r, n(i);
|
|
916
|
-
}, [e, n]), y =
|
|
992
|
+
}, [e, n]), y = I((t) => {
|
|
917
993
|
let r = e.filter((e, n) => n !== t);
|
|
918
|
-
if (r.length === 1 &&
|
|
994
|
+
if (r.length === 1 && We(r[0])) {
|
|
919
995
|
let e = r[0];
|
|
920
996
|
if (e.filters.length === 1) {
|
|
921
997
|
n([e.filters[0]]);
|
|
@@ -923,20 +999,20 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
|
|
|
923
999
|
}
|
|
924
1000
|
}
|
|
925
1001
|
n(r);
|
|
926
|
-
}, [e, n]), b =
|
|
1002
|
+
}, [e, n]), b = I(() => {
|
|
927
1003
|
n([]);
|
|
928
|
-
}, [n]), x =
|
|
1004
|
+
}, [n]), x = I(() => {
|
|
929
1005
|
u.current = [], s(!0);
|
|
930
|
-
}, []), S =
|
|
1006
|
+
}, []), S = I((e) => (t = []) => {
|
|
931
1007
|
u.current = [...e, ...t], s(!0);
|
|
932
1008
|
}, []), C = (n, r, i = []) => {
|
|
933
1009
|
let a = [...i, r];
|
|
934
|
-
return
|
|
1010
|
+
return Ue(n) ? /* @__PURE__ */ H(Fe, {
|
|
935
1011
|
filter: n,
|
|
936
1012
|
schema: t,
|
|
937
1013
|
onUpdate: (e) => v(r, e),
|
|
938
1014
|
onRemove: () => y(r)
|
|
939
|
-
}, `filter-${a.join("-")}`) :
|
|
1015
|
+
}, `filter-${a.join("-")}`) : We(n) ? /* @__PURE__ */ H(Ve, {
|
|
940
1016
|
group: n,
|
|
941
1017
|
schema: t,
|
|
942
1018
|
onUpdate: (e) => v(r, e),
|
|
@@ -945,21 +1021,21 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
|
|
|
945
1021
|
hideRemoveButton: e.length === 1
|
|
946
1022
|
}, `group-${a.join("-")}`) : null;
|
|
947
1023
|
};
|
|
948
|
-
return /* @__PURE__ */
|
|
949
|
-
/* @__PURE__ */
|
|
1024
|
+
return /* @__PURE__ */ U("div", { children: [
|
|
1025
|
+
/* @__PURE__ */ U("button", {
|
|
950
1026
|
onClick: x,
|
|
951
1027
|
className: "dc:flex dc:items-center dc:justify-between dc:mb-3 dc:w-full dc:py-1 dc:px-2 dc:-ml-2 dc:rounded-lg hover:bg-dc-primary/10 dc:transition-colors dc:group",
|
|
952
1028
|
title: "Add filter",
|
|
953
|
-
children: [/* @__PURE__ */
|
|
1029
|
+
children: [/* @__PURE__ */ U(M, { children: [a("analysis.sections.filters"), d > 0 && /* @__PURE__ */ U("span", {
|
|
954
1030
|
className: "dc:ml-1.5 dc:text-xs dc:font-normal text-dc-text-muted dc:normal-case dc:tracking-normal",
|
|
955
1031
|
children: [
|
|
956
1032
|
"(",
|
|
957
1033
|
d,
|
|
958
1034
|
")"
|
|
959
1035
|
]
|
|
960
|
-
})] }), /* @__PURE__ */
|
|
1036
|
+
})] }), /* @__PURE__ */ U("div", {
|
|
961
1037
|
className: "dc:flex dc:items-center dc:gap-2",
|
|
962
|
-
children: [d > 0 && /* @__PURE__ */
|
|
1038
|
+
children: [d > 0 && /* @__PURE__ */ H("span", {
|
|
963
1039
|
role: "button",
|
|
964
1040
|
tabIndex: 0,
|
|
965
1041
|
onClick: (e) => {
|
|
@@ -970,23 +1046,23 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
|
|
|
970
1046
|
},
|
|
971
1047
|
className: "dc:text-xs text-dc-text-muted hover:text-dc-error dc:underline dc:cursor-pointer",
|
|
972
1048
|
children: a("filter.section.clearAll")
|
|
973
|
-
}), /* @__PURE__ */
|
|
1049
|
+
}), /* @__PURE__ */ H(He, { className: "dc:w-5 dc:h-5 text-dc-text-secondary group-hover:text-dc-primary dc:transition-colors" })]
|
|
974
1050
|
})]
|
|
975
1051
|
}),
|
|
976
|
-
/* @__PURE__ */
|
|
1052
|
+
/* @__PURE__ */ H("div", {
|
|
977
1053
|
onDragOver: r ? f : void 0,
|
|
978
|
-
onDragLeave: r ?
|
|
1054
|
+
onDragLeave: r ? m : void 0,
|
|
979
1055
|
onDrop: r ? h : void 0,
|
|
980
1056
|
className: `dc:p-2 dc:-mx-2 dc:rounded-lg dc:border-2 dc:border-dashed dc:transition-all ${c ? "border-dc-primary bg-dc-primary/5" : "border-transparent"}`,
|
|
981
|
-
children: e.length === 0 ? /* @__PURE__ */
|
|
1057
|
+
children: e.length === 0 ? /* @__PURE__ */ H("p", {
|
|
982
1058
|
className: `dc:text-sm ${c ? "text-dc-primary dc:font-medium" : "text-dc-text-muted"}`,
|
|
983
1059
|
children: a(c ? "filter.section.dropHint" : "filter.section.empty")
|
|
984
|
-
}) : /* @__PURE__ */
|
|
1060
|
+
}) : /* @__PURE__ */ H("div", {
|
|
985
1061
|
className: "dc:flex dc:flex-wrap dc:gap-2",
|
|
986
1062
|
children: e.map((e, t) => C(e, t))
|
|
987
1063
|
})
|
|
988
1064
|
}),
|
|
989
|
-
/* @__PURE__ */
|
|
1065
|
+
/* @__PURE__ */ H(p, {
|
|
990
1066
|
isOpen: o,
|
|
991
1067
|
onClose: () => {
|
|
992
1068
|
s(!1), u.current = [];
|
|
@@ -999,138 +1075,34 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
|
|
|
999
1075
|
] });
|
|
1000
1076
|
}
|
|
1001
1077
|
//#endregion
|
|
1002
|
-
//#region src/client/shared/chartDefaults.ts
|
|
1003
|
-
function Be(e) {
|
|
1004
|
-
return e.isTimeDimension;
|
|
1005
|
-
}
|
|
1006
|
-
function Ve(e) {
|
|
1007
|
-
return e.find(Be);
|
|
1008
|
-
}
|
|
1009
|
-
function He(e) {
|
|
1010
|
-
return e.find((e) => !e.isTimeDimension);
|
|
1011
|
-
}
|
|
1012
|
-
function Ue(e) {
|
|
1013
|
-
return e.filter((e) => !e.isTimeDimension);
|
|
1014
|
-
}
|
|
1015
|
-
function We(e) {
|
|
1016
|
-
return e.filter(Be);
|
|
1017
|
-
}
|
|
1018
|
-
function Ge(e, t) {
|
|
1019
|
-
return {
|
|
1020
|
-
measureCount: e.length,
|
|
1021
|
-
dimensionCount: t.length,
|
|
1022
|
-
timeDimensionCount: We(t).length
|
|
1023
|
-
};
|
|
1024
|
-
}
|
|
1025
|
-
function Ke(e, t, n) {
|
|
1026
|
-
let r = l[e];
|
|
1027
|
-
return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(Ge(t, n));
|
|
1028
|
-
}
|
|
1029
|
-
function qe(e, t) {
|
|
1030
|
-
let n = Object.keys(l), r = {};
|
|
1031
|
-
for (let i of n) r[i] = Ke(i, e, t);
|
|
1032
|
-
return r;
|
|
1033
|
-
}
|
|
1034
|
-
function Je(e, t, n) {
|
|
1035
|
-
if (Ke(n, e, t).available || e.length === 0 && t.length === 0) return n;
|
|
1036
|
-
let r = We(t).length > 0, i = Ue(t).length > 0, a = e.length > 0;
|
|
1037
|
-
return r && a ? "line" : i && a ? "bar" : a && !i && !r ? "kpiNumber" : "table";
|
|
1038
|
-
}
|
|
1039
|
-
function Ye(e, t, n) {
|
|
1040
|
-
let r = Je(e, t, n);
|
|
1041
|
-
return {
|
|
1042
|
-
chartType: r,
|
|
1043
|
-
chartConfig: Xe(r, e, t)
|
|
1044
|
-
};
|
|
1045
|
-
}
|
|
1046
|
-
function Xe(e, t, n) {
|
|
1047
|
-
let r = Ve(n), i = He(n), a = Ue(n), o = n;
|
|
1048
|
-
switch (e) {
|
|
1049
|
-
case "line":
|
|
1050
|
-
case "area": return {
|
|
1051
|
-
xAxis: r ? [r.field] : i ? [i.field] : [],
|
|
1052
|
-
yAxis: t.map((e) => e.field),
|
|
1053
|
-
series: a.length > 1 ? [a[1].field] : i && r ? [i.field] : []
|
|
1054
|
-
};
|
|
1055
|
-
case "bar": return {
|
|
1056
|
-
xAxis: i ? [i.field] : r ? [r.field] : [],
|
|
1057
|
-
yAxis: t.map((e) => e.field),
|
|
1058
|
-
series: a.length > 1 ? [a[1].field] : r && i ? [r.field] : []
|
|
1059
|
-
};
|
|
1060
|
-
case "pie": return {
|
|
1061
|
-
xAxis: i ? [i.field] : [],
|
|
1062
|
-
yAxis: t.length > 0 ? [t[0].field] : []
|
|
1063
|
-
};
|
|
1064
|
-
case "scatter": return t.length >= 2 ? {
|
|
1065
|
-
xAxis: [t[0].field],
|
|
1066
|
-
yAxis: [t[1].field],
|
|
1067
|
-
series: i ? [i.field] : []
|
|
1068
|
-
} : {
|
|
1069
|
-
xAxis: o.length > 0 ? [o[0].field] : [],
|
|
1070
|
-
yAxis: t.length > 0 ? [t[0].field] : [],
|
|
1071
|
-
series: a.length > 1 ? [a[1].field] : []
|
|
1072
|
-
};
|
|
1073
|
-
case "bubble": return {
|
|
1074
|
-
xAxis: t.length > 0 ? [t[0].field] : [],
|
|
1075
|
-
yAxis: t.length > 1 ? [t[1].field] : [],
|
|
1076
|
-
sizeField: t.length > 2 ? t[2].field : t.length > 1 ? t[1].field : void 0,
|
|
1077
|
-
series: i ? [i.field] : r ? [r.field] : []
|
|
1078
|
-
};
|
|
1079
|
-
case "radar":
|
|
1080
|
-
case "radialBar":
|
|
1081
|
-
case "treemap": return {
|
|
1082
|
-
xAxis: i ? [i.field] : [],
|
|
1083
|
-
yAxis: t.length > 0 ? [t[0].field] : []
|
|
1084
|
-
};
|
|
1085
|
-
case "activityGrid": return {
|
|
1086
|
-
dateField: r ? [r.field] : [],
|
|
1087
|
-
valueField: t.length > 0 ? [t[0].field] : []
|
|
1088
|
-
};
|
|
1089
|
-
case "kpiNumber":
|
|
1090
|
-
case "kpiDelta":
|
|
1091
|
-
case "kpiText": return { yAxis: t.length > 0 ? [t[0].field] : [] };
|
|
1092
|
-
case "table": return { xAxis: [...n.map((e) => e.field), ...t.map((e) => e.field)] };
|
|
1093
|
-
case "markdown": return {};
|
|
1094
|
-
default: return {
|
|
1095
|
-
xAxis: o.length > 0 ? [o[0].field] : [],
|
|
1096
|
-
yAxis: t.map((e) => e.field)
|
|
1097
|
-
};
|
|
1098
|
-
}
|
|
1099
|
-
}
|
|
1100
|
-
function Ze(e, t, n, r) {
|
|
1101
|
-
if (r && Ke(n, e, t).available) return null;
|
|
1102
|
-
let i = Je(e, t, n);
|
|
1103
|
-
return i === n ? null : i;
|
|
1104
|
-
}
|
|
1105
|
-
//#endregion
|
|
1106
1078
|
//#region src/client/components/AnalysisBuilder/ExplainAIPanel.tsx
|
|
1107
|
-
function
|
|
1079
|
+
function Y(e) {
|
|
1108
1080
|
return typeof e == "string" ? e : typeof e == "object" && e ? JSON.stringify(e) : String(e ?? "");
|
|
1109
1081
|
}
|
|
1110
|
-
var
|
|
1082
|
+
var Ye = {
|
|
1111
1083
|
good: "bg-dc-success-bg text-dc-success border-dc-success",
|
|
1112
1084
|
warning: "bg-dc-warning-bg text-dc-warning border-dc-warning",
|
|
1113
1085
|
critical: "bg-dc-danger-bg text-dc-error border-dc-error"
|
|
1114
|
-
},
|
|
1086
|
+
}, Xe = {
|
|
1115
1087
|
critical: "bg-dc-danger-bg text-dc-error",
|
|
1116
1088
|
warning: "bg-dc-warning-bg text-dc-warning",
|
|
1117
1089
|
suggestion: "bg-dc-accent-bg text-dc-accent"
|
|
1118
|
-
},
|
|
1090
|
+
}, Ze = {
|
|
1119
1091
|
high: "text-dc-error",
|
|
1120
1092
|
medium: "text-dc-warning",
|
|
1121
1093
|
low: "text-dc-text-muted"
|
|
1122
1094
|
};
|
|
1123
|
-
function
|
|
1124
|
-
let { t: n } =
|
|
1095
|
+
function Qe({ assessment: e, reason: t }) {
|
|
1096
|
+
let { t: n } = D(), r = {
|
|
1125
1097
|
good: n("explainAI.assessment.good"),
|
|
1126
1098
|
warning: n("explainAI.assessment.warning"),
|
|
1127
1099
|
critical: n("explainAI.assessment.critical")
|
|
1128
1100
|
};
|
|
1129
|
-
return /* @__PURE__ */
|
|
1130
|
-
className: `dc:p-4 dc:rounded-lg dc:border ${
|
|
1131
|
-
children: [/* @__PURE__ */
|
|
1101
|
+
return /* @__PURE__ */ U("div", {
|
|
1102
|
+
className: `dc:p-4 dc:rounded-lg dc:border ${Ye[e]}`,
|
|
1103
|
+
children: [/* @__PURE__ */ H("div", {
|
|
1132
1104
|
className: "dc:flex dc:items-center dc:gap-2 dc:mb-1",
|
|
1133
|
-
children: /* @__PURE__ */
|
|
1105
|
+
children: /* @__PURE__ */ U("span", {
|
|
1134
1106
|
className: "dc:font-semibold dc:uppercase dc:text-base",
|
|
1135
1107
|
children: [
|
|
1136
1108
|
e === "good" && "✓ ",
|
|
@@ -1139,33 +1111,33 @@ function nt({ assessment: e, reason: t }) {
|
|
|
1139
1111
|
r[e]
|
|
1140
1112
|
]
|
|
1141
1113
|
})
|
|
1142
|
-
}), /* @__PURE__ */
|
|
1114
|
+
}), /* @__PURE__ */ H("p", {
|
|
1143
1115
|
className: "dc:text-sm",
|
|
1144
|
-
children:
|
|
1116
|
+
children: Y(t)
|
|
1145
1117
|
})]
|
|
1146
1118
|
});
|
|
1147
1119
|
}
|
|
1148
|
-
function
|
|
1149
|
-
return /* @__PURE__ */
|
|
1120
|
+
function $e({ issue: e }) {
|
|
1121
|
+
return /* @__PURE__ */ U("div", {
|
|
1150
1122
|
className: "dc:flex dc:items-start dc:gap-2 dc:py-2",
|
|
1151
|
-
children: [/* @__PURE__ */
|
|
1152
|
-
className: `dc:text-sm ${
|
|
1123
|
+
children: [/* @__PURE__ */ U("span", {
|
|
1124
|
+
className: `dc:text-sm ${Ze[e.severity]}`,
|
|
1153
1125
|
children: [
|
|
1154
1126
|
e.severity === "high" && "●",
|
|
1155
1127
|
e.severity === "medium" && "○",
|
|
1156
1128
|
e.severity === "low" && "○"
|
|
1157
1129
|
]
|
|
1158
|
-
}), /* @__PURE__ */
|
|
1130
|
+
}), /* @__PURE__ */ H("span", {
|
|
1159
1131
|
className: "dc:text-sm text-dc-text-secondary",
|
|
1160
|
-
children:
|
|
1132
|
+
children: Y(e.description)
|
|
1161
1133
|
})]
|
|
1162
1134
|
});
|
|
1163
1135
|
}
|
|
1164
|
-
function
|
|
1165
|
-
let { t } =
|
|
1166
|
-
return
|
|
1136
|
+
function et({ text: e }) {
|
|
1137
|
+
let { t } = D(), [n, r] = N.useState(!1), i = N.useRef(null);
|
|
1138
|
+
return N.useEffect(() => () => {
|
|
1167
1139
|
i.current && clearTimeout(i.current);
|
|
1168
|
-
}, []), /* @__PURE__ */
|
|
1140
|
+
}, []), /* @__PURE__ */ H("button", {
|
|
1169
1141
|
onClick: async () => {
|
|
1170
1142
|
try {
|
|
1171
1143
|
await navigator.clipboard.writeText(e), r(!0), i.current && clearTimeout(i.current), i.current = setTimeout(() => r(!1), 2e3);
|
|
@@ -1178,104 +1150,104 @@ function it({ text: e }) {
|
|
|
1178
1150
|
children: t(n ? "explainAI.copied" : "explainAI.copy")
|
|
1179
1151
|
});
|
|
1180
1152
|
}
|
|
1181
|
-
function
|
|
1182
|
-
let { t } =
|
|
1153
|
+
function tt({ rec: e }) {
|
|
1154
|
+
let { t } = D(), n = {
|
|
1183
1155
|
index: t("explainAI.type.index"),
|
|
1184
1156
|
table: t("explainAI.type.table"),
|
|
1185
1157
|
cube: t("explainAI.type.cube"),
|
|
1186
1158
|
general: t("explainAI.type.general")
|
|
1187
1159
|
};
|
|
1188
|
-
return /* @__PURE__ */
|
|
1160
|
+
return /* @__PURE__ */ U("div", {
|
|
1189
1161
|
className: "dc:p-4 dc:border border-dc-border dc:rounded-lg bg-dc-surface",
|
|
1190
1162
|
children: [
|
|
1191
|
-
/* @__PURE__ */
|
|
1163
|
+
/* @__PURE__ */ U("div", {
|
|
1192
1164
|
className: "dc:flex dc:items-center dc:gap-2 dc:mb-2",
|
|
1193
|
-
children: [/* @__PURE__ */
|
|
1194
|
-
className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded ${
|
|
1165
|
+
children: [/* @__PURE__ */ H("span", {
|
|
1166
|
+
className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded ${Xe[e.severity]}`,
|
|
1195
1167
|
children: n[e.type]
|
|
1196
|
-
}), /* @__PURE__ */
|
|
1168
|
+
}), /* @__PURE__ */ H("h5", {
|
|
1197
1169
|
className: "dc:font-medium text-dc-text",
|
|
1198
|
-
children:
|
|
1170
|
+
children: Y(e.title)
|
|
1199
1171
|
})]
|
|
1200
1172
|
}),
|
|
1201
|
-
/* @__PURE__ */
|
|
1173
|
+
/* @__PURE__ */ H("p", {
|
|
1202
1174
|
className: "dc:text-sm text-dc-text-secondary dc:mb-3",
|
|
1203
|
-
children:
|
|
1175
|
+
children: Y(e.description)
|
|
1204
1176
|
}),
|
|
1205
|
-
e.sql && /* @__PURE__ */
|
|
1177
|
+
e.sql && /* @__PURE__ */ H("div", {
|
|
1206
1178
|
className: "dc:mt-2",
|
|
1207
|
-
children: /* @__PURE__ */
|
|
1179
|
+
children: /* @__PURE__ */ H(u, {
|
|
1208
1180
|
code: e.sql,
|
|
1209
1181
|
language: "sql",
|
|
1210
|
-
headerRight: /* @__PURE__ */
|
|
1182
|
+
headerRight: /* @__PURE__ */ H(et, { text: e.sql })
|
|
1211
1183
|
})
|
|
1212
1184
|
}),
|
|
1213
|
-
e.cubeCode && /* @__PURE__ */
|
|
1185
|
+
e.cubeCode && /* @__PURE__ */ U("div", {
|
|
1214
1186
|
className: "dc:mt-2",
|
|
1215
|
-
children: [e.cubeName && /* @__PURE__ */
|
|
1187
|
+
children: [e.cubeName && /* @__PURE__ */ H("p", {
|
|
1216
1188
|
className: "dc:text-xs text-dc-text-muted dc:mb-1",
|
|
1217
1189
|
children: t("explainAI.addToCube", { cubeName: e.cubeName })
|
|
1218
|
-
}), /* @__PURE__ */
|
|
1190
|
+
}), /* @__PURE__ */ U("div", {
|
|
1219
1191
|
className: "dc:relative",
|
|
1220
|
-
children: [/* @__PURE__ */
|
|
1192
|
+
children: [/* @__PURE__ */ H("pre", {
|
|
1221
1193
|
className: "dc:p-3 dc:text-xs bg-dc-surface-secondary dc:rounded dc:overflow-x-auto dc:font-mono text-dc-text",
|
|
1222
1194
|
children: e.cubeCode
|
|
1223
|
-
}), /* @__PURE__ */
|
|
1195
|
+
}), /* @__PURE__ */ H("div", {
|
|
1224
1196
|
className: "dc:absolute dc:top-1 dc:right-1",
|
|
1225
|
-
children: /* @__PURE__ */
|
|
1197
|
+
children: /* @__PURE__ */ H(et, { text: e.cubeCode })
|
|
1226
1198
|
})]
|
|
1227
1199
|
})]
|
|
1228
1200
|
}),
|
|
1229
|
-
e.estimatedImpact && /* @__PURE__ */
|
|
1201
|
+
e.estimatedImpact && /* @__PURE__ */ U("p", {
|
|
1230
1202
|
className: "dc:text-xs text-dc-text-muted dc:mt-2",
|
|
1231
1203
|
children: [
|
|
1232
|
-
/* @__PURE__ */
|
|
1204
|
+
/* @__PURE__ */ H("strong", { children: t("explainAI.expectedImpact") }),
|
|
1233
1205
|
" ",
|
|
1234
|
-
|
|
1206
|
+
Y(e.estimatedImpact)
|
|
1235
1207
|
]
|
|
1236
1208
|
})
|
|
1237
1209
|
]
|
|
1238
1210
|
});
|
|
1239
1211
|
}
|
|
1240
|
-
function
|
|
1241
|
-
let { t: r } =
|
|
1242
|
-
return
|
|
1212
|
+
function nt({ analysis: e, onClose: t, onClear: n }) {
|
|
1213
|
+
let { t: r } = D(), i = t || n;
|
|
1214
|
+
return N.useEffect(() => {
|
|
1243
1215
|
let e = (e) => {
|
|
1244
1216
|
e.key === "Escape" && i && i();
|
|
1245
1217
|
};
|
|
1246
1218
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
1247
|
-
}, [i]),
|
|
1219
|
+
}, [i]), N.useEffect(() => (document.body.style.overflow = "hidden", () => {
|
|
1248
1220
|
document.body.style.overflow = "";
|
|
1249
|
-
}), []), /* @__PURE__ */
|
|
1221
|
+
}), []), /* @__PURE__ */ U("div", {
|
|
1250
1222
|
className: "dc:fixed dc:inset-0 dc:z-50 dc:flex dc:items-center dc:justify-center dc:p-4 bg-black/50",
|
|
1251
|
-
children: [/* @__PURE__ */
|
|
1223
|
+
children: [/* @__PURE__ */ H("div", {
|
|
1252
1224
|
className: "dc:absolute dc:inset-0",
|
|
1253
1225
|
onClick: i,
|
|
1254
1226
|
"aria-hidden": "true"
|
|
1255
|
-
}), /* @__PURE__ */
|
|
1227
|
+
}), /* @__PURE__ */ U("div", {
|
|
1256
1228
|
className: "dc:relative dc:w-full dc:max-w-4xl dc:max-h-[90vh] bg-dc-surface dc:rounded-lg dc:shadow-xl dc:flex dc:flex-col",
|
|
1257
1229
|
children: [
|
|
1258
|
-
/* @__PURE__ */
|
|
1230
|
+
/* @__PURE__ */ U("div", {
|
|
1259
1231
|
className: "dc:flex dc:items-center dc:justify-between dc:px-6 dc:py-4 dc:border-b border-dc-border dc:flex-shrink-0",
|
|
1260
|
-
children: [/* @__PURE__ */
|
|
1232
|
+
children: [/* @__PURE__ */ U("div", {
|
|
1261
1233
|
className: "dc:flex dc:items-center dc:gap-3",
|
|
1262
|
-
children: [/* @__PURE__ */
|
|
1234
|
+
children: [/* @__PURE__ */ H("span", {
|
|
1263
1235
|
className: "dc:text-lg",
|
|
1264
1236
|
children: "✨"
|
|
1265
|
-
}), /* @__PURE__ */
|
|
1237
|
+
}), /* @__PURE__ */ H("h3", {
|
|
1266
1238
|
className: "dc:text-lg dc:font-semibold text-dc-text",
|
|
1267
1239
|
children: r("explainAI.title")
|
|
1268
1240
|
})]
|
|
1269
|
-
}), /* @__PURE__ */
|
|
1241
|
+
}), /* @__PURE__ */ H("button", {
|
|
1270
1242
|
onClick: i,
|
|
1271
1243
|
className: "dc:p-2 dc:rounded-lg hover:bg-dc-surface-hover text-dc-text-secondary hover:text-dc-text dc:transition-colors",
|
|
1272
1244
|
"aria-label": "Close",
|
|
1273
|
-
children: /* @__PURE__ */
|
|
1245
|
+
children: /* @__PURE__ */ H("svg", {
|
|
1274
1246
|
className: "dc:w-5 dc:h-5",
|
|
1275
1247
|
fill: "none",
|
|
1276
1248
|
stroke: "currentColor",
|
|
1277
1249
|
viewBox: "0 0 24 24",
|
|
1278
|
-
children: /* @__PURE__ */
|
|
1250
|
+
children: /* @__PURE__ */ H("path", {
|
|
1279
1251
|
strokeLinecap: "round",
|
|
1280
1252
|
strokeLinejoin: "round",
|
|
1281
1253
|
strokeWidth: 2,
|
|
@@ -1284,50 +1256,50 @@ function ot({ analysis: e, onClose: t, onClear: n }) {
|
|
|
1284
1256
|
})
|
|
1285
1257
|
})]
|
|
1286
1258
|
}),
|
|
1287
|
-
/* @__PURE__ */
|
|
1259
|
+
/* @__PURE__ */ U("div", {
|
|
1288
1260
|
className: "dc:flex-1 dc:overflow-y-auto dc:px-6 dc:py-4 dc:space-y-6",
|
|
1289
1261
|
children: [
|
|
1290
|
-
/* @__PURE__ */
|
|
1262
|
+
/* @__PURE__ */ H(Qe, {
|
|
1291
1263
|
assessment: e.assessment,
|
|
1292
1264
|
reason: e.assessmentReason
|
|
1293
1265
|
}),
|
|
1294
|
-
/* @__PURE__ */
|
|
1266
|
+
/* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
|
|
1295
1267
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
|
|
1296
1268
|
children: r("explainAI.summary")
|
|
1297
|
-
}), /* @__PURE__ */
|
|
1269
|
+
}), /* @__PURE__ */ H("p", {
|
|
1298
1270
|
className: "text-dc-text",
|
|
1299
|
-
children:
|
|
1271
|
+
children: Y(e.summary)
|
|
1300
1272
|
})] }),
|
|
1301
|
-
e.queryUnderstanding && /* @__PURE__ */
|
|
1273
|
+
e.queryUnderstanding && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
|
|
1302
1274
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
|
|
1303
1275
|
children: r("explainAI.queryAnalysis")
|
|
1304
|
-
}), /* @__PURE__ */
|
|
1276
|
+
}), /* @__PURE__ */ H("p", {
|
|
1305
1277
|
className: "text-dc-text-secondary",
|
|
1306
|
-
children:
|
|
1278
|
+
children: Y(e.queryUnderstanding)
|
|
1307
1279
|
})] }),
|
|
1308
|
-
e.issues && e.issues.length > 0 && /* @__PURE__ */
|
|
1280
|
+
e.issues && e.issues.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
|
|
1309
1281
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
|
|
1310
1282
|
children: r("explainAI.issuesFound", { count: e.issues.length })
|
|
1311
|
-
}), /* @__PURE__ */
|
|
1283
|
+
}), /* @__PURE__ */ H("div", {
|
|
1312
1284
|
className: "dc:space-y-1 bg-dc-surface-secondary dc:rounded-lg dc:p-3",
|
|
1313
|
-
children: e.issues.map((e, t) => /* @__PURE__ */
|
|
1285
|
+
children: e.issues.map((e, t) => /* @__PURE__ */ H($e, { issue: e }, t))
|
|
1314
1286
|
})] }),
|
|
1315
|
-
e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */
|
|
1287
|
+
e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
|
|
1316
1288
|
className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-3",
|
|
1317
1289
|
children: r("explainAI.recommendations", { count: e.recommendations.length })
|
|
1318
|
-
}), /* @__PURE__ */
|
|
1290
|
+
}), /* @__PURE__ */ H("div", {
|
|
1319
1291
|
className: "dc:space-y-4",
|
|
1320
|
-
children: e.recommendations.map((e, t) => /* @__PURE__ */
|
|
1292
|
+
children: e.recommendations.map((e, t) => /* @__PURE__ */ H(tt, { rec: e }, t))
|
|
1321
1293
|
})] }),
|
|
1322
|
-
(!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */
|
|
1294
|
+
(!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */ H("div", {
|
|
1323
1295
|
className: "text-dc-text-muted dc:italic dc:p-4 bg-dc-surface-secondary dc:rounded-lg",
|
|
1324
1296
|
children: r("explainAI.noRecommendations")
|
|
1325
1297
|
})
|
|
1326
1298
|
]
|
|
1327
1299
|
}),
|
|
1328
|
-
/* @__PURE__ */
|
|
1300
|
+
/* @__PURE__ */ U("div", {
|
|
1329
1301
|
className: "dc:flex dc:items-center dc:justify-between dc:px-6 dc:py-3 dc:border-t border-dc-border dc:flex-shrink-0 bg-dc-surface-secondary",
|
|
1330
|
-
children: [e._meta && /* @__PURE__ */
|
|
1302
|
+
children: [e._meta && /* @__PURE__ */ U("div", {
|
|
1331
1303
|
className: "dc:text-xs text-dc-text-muted",
|
|
1332
1304
|
children: [
|
|
1333
1305
|
r("explainAI.modelLabel"),
|
|
@@ -1335,7 +1307,7 @@ function ot({ analysis: e, onClose: t, onClear: n }) {
|
|
|
1335
1307
|
e._meta.model,
|
|
1336
1308
|
e._meta.usingUserKey && ` ${r("explainAI.usingUserKey")}`
|
|
1337
1309
|
]
|
|
1338
|
-
}), /* @__PURE__ */
|
|
1310
|
+
}), /* @__PURE__ */ H("button", {
|
|
1339
1311
|
onClick: i,
|
|
1340
1312
|
className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium dc:rounded-lg bg-dc-primary text-white hover:bg-dc-primary-hover dc:transition-colors",
|
|
1341
1313
|
children: r("common.actions.close")
|
|
@@ -1346,142 +1318,332 @@ function ot({ analysis: e, onClose: t, onClear: n }) {
|
|
|
1346
1318
|
});
|
|
1347
1319
|
}
|
|
1348
1320
|
//#endregion
|
|
1321
|
+
//#region src/client/shared/chartConfigBuilders.ts
|
|
1322
|
+
var rt = (e) => e.map((e) => e.field), it = (e) => e.length > 0 ? [e[0].field] : [];
|
|
1323
|
+
function at(e) {
|
|
1324
|
+
let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
|
|
1325
|
+
return {
|
|
1326
|
+
xAxis: n ? [n.field] : r ? [r.field] : [],
|
|
1327
|
+
yAxis: rt(t),
|
|
1328
|
+
series: i.length > 1 ? [i[1].field] : r && n ? [r.field] : []
|
|
1329
|
+
};
|
|
1330
|
+
}
|
|
1331
|
+
function ot(e) {
|
|
1332
|
+
let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
|
|
1333
|
+
return {
|
|
1334
|
+
xAxis: r ? [r.field] : n ? [n.field] : [],
|
|
1335
|
+
yAxis: rt(t),
|
|
1336
|
+
series: i.length > 1 ? [i[1].field] : n && r ? [n.field] : []
|
|
1337
|
+
};
|
|
1338
|
+
}
|
|
1339
|
+
function st(e) {
|
|
1340
|
+
let { metrics: t, dimension: n } = e;
|
|
1341
|
+
return {
|
|
1342
|
+
xAxis: n ? [n.field] : [],
|
|
1343
|
+
yAxis: it(t)
|
|
1344
|
+
};
|
|
1345
|
+
}
|
|
1346
|
+
function ct(e) {
|
|
1347
|
+
let { metrics: t, breakdowns: n, dimension: r, dimensions: i } = e;
|
|
1348
|
+
return t.length >= 2 ? {
|
|
1349
|
+
xAxis: [t[0].field],
|
|
1350
|
+
yAxis: [t[1].field],
|
|
1351
|
+
series: r ? [r.field] : []
|
|
1352
|
+
} : {
|
|
1353
|
+
xAxis: n.length > 0 ? [n[0].field] : [],
|
|
1354
|
+
yAxis: it(t),
|
|
1355
|
+
series: i.length > 1 ? [i[1].field] : []
|
|
1356
|
+
};
|
|
1357
|
+
}
|
|
1358
|
+
function lt(e) {
|
|
1359
|
+
let { metrics: t, timeDimension: n, dimension: r } = e;
|
|
1360
|
+
return {
|
|
1361
|
+
xAxis: t.length > 0 ? [t[0].field] : [],
|
|
1362
|
+
yAxis: t.length > 1 ? [t[1].field] : [],
|
|
1363
|
+
sizeField: t.length > 2 ? t[2].field : t.length > 1 ? t[1].field : void 0,
|
|
1364
|
+
series: r ? [r.field] : n ? [n.field] : []
|
|
1365
|
+
};
|
|
1366
|
+
}
|
|
1367
|
+
function ut(e) {
|
|
1368
|
+
let { metrics: t, dimension: n } = e;
|
|
1369
|
+
return {
|
|
1370
|
+
xAxis: n ? [n.field] : [],
|
|
1371
|
+
yAxis: it(t)
|
|
1372
|
+
};
|
|
1373
|
+
}
|
|
1374
|
+
function dt(e) {
|
|
1375
|
+
let { metrics: t, timeDimension: n } = e;
|
|
1376
|
+
return {
|
|
1377
|
+
dateField: n ? [n.field] : [],
|
|
1378
|
+
valueField: it(t)
|
|
1379
|
+
};
|
|
1380
|
+
}
|
|
1381
|
+
function ft(e) {
|
|
1382
|
+
return { yAxis: it(e.metrics) };
|
|
1383
|
+
}
|
|
1384
|
+
function pt(e) {
|
|
1385
|
+
let { metrics: t, breakdowns: n } = e;
|
|
1386
|
+
return { xAxis: [...n.map((e) => e.field), ...t.map((e) => e.field)] };
|
|
1387
|
+
}
|
|
1388
|
+
function mt() {
|
|
1389
|
+
return {};
|
|
1390
|
+
}
|
|
1391
|
+
function ht(e) {
|
|
1392
|
+
let { metrics: t, breakdowns: n } = e;
|
|
1393
|
+
return {
|
|
1394
|
+
xAxis: n.length > 0 ? [n[0].field] : [],
|
|
1395
|
+
yAxis: rt(t)
|
|
1396
|
+
};
|
|
1397
|
+
}
|
|
1398
|
+
var gt = {
|
|
1399
|
+
line: at,
|
|
1400
|
+
area: at,
|
|
1401
|
+
bar: ot,
|
|
1402
|
+
pie: st,
|
|
1403
|
+
scatter: ct,
|
|
1404
|
+
bubble: lt,
|
|
1405
|
+
radar: ut,
|
|
1406
|
+
radialBar: ut,
|
|
1407
|
+
treemap: ut,
|
|
1408
|
+
activityGrid: dt,
|
|
1409
|
+
kpiNumber: ft,
|
|
1410
|
+
kpiDelta: ft,
|
|
1411
|
+
kpiText: ft,
|
|
1412
|
+
table: pt,
|
|
1413
|
+
markdown: mt
|
|
1414
|
+
};
|
|
1415
|
+
function _t(e) {
|
|
1416
|
+
return gt[e] || ht;
|
|
1417
|
+
}
|
|
1418
|
+
//#endregion
|
|
1419
|
+
//#region src/client/shared/chartDefaults.ts
|
|
1420
|
+
function vt(e) {
|
|
1421
|
+
return e.isTimeDimension;
|
|
1422
|
+
}
|
|
1423
|
+
function yt(e) {
|
|
1424
|
+
return e.find(vt);
|
|
1425
|
+
}
|
|
1426
|
+
function bt(e) {
|
|
1427
|
+
return e.find((e) => !e.isTimeDimension);
|
|
1428
|
+
}
|
|
1429
|
+
function xt(e) {
|
|
1430
|
+
return e.filter((e) => !e.isTimeDimension);
|
|
1431
|
+
}
|
|
1432
|
+
function St(e) {
|
|
1433
|
+
return e.filter(vt);
|
|
1434
|
+
}
|
|
1435
|
+
function Ct(e, t) {
|
|
1436
|
+
return {
|
|
1437
|
+
measureCount: e.length,
|
|
1438
|
+
dimensionCount: t.length,
|
|
1439
|
+
timeDimensionCount: St(t).length
|
|
1440
|
+
};
|
|
1441
|
+
}
|
|
1442
|
+
function wt(e, t, n) {
|
|
1443
|
+
let r = c[e];
|
|
1444
|
+
return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(Ct(t, n));
|
|
1445
|
+
}
|
|
1446
|
+
function Tt(e, t) {
|
|
1447
|
+
let n = Object.keys(c), r = {};
|
|
1448
|
+
for (let i of n) r[i] = wt(i, e, t);
|
|
1449
|
+
return r;
|
|
1450
|
+
}
|
|
1451
|
+
function Et(e, t, n) {
|
|
1452
|
+
if (wt(n, e, t).available || e.length === 0 && t.length === 0) return n;
|
|
1453
|
+
let r = St(t).length > 0, i = xt(t).length > 0, a = e.length > 0;
|
|
1454
|
+
return r && a ? "line" : i && a ? "bar" : a && !i && !r ? "kpiNumber" : "table";
|
|
1455
|
+
}
|
|
1456
|
+
function Dt(e, t, n) {
|
|
1457
|
+
let r = Et(e, t, n);
|
|
1458
|
+
return {
|
|
1459
|
+
chartType: r,
|
|
1460
|
+
chartConfig: Ot(r, e, t)
|
|
1461
|
+
};
|
|
1462
|
+
}
|
|
1463
|
+
function Ot(e, t, n) {
|
|
1464
|
+
return _t(e)({
|
|
1465
|
+
metrics: t,
|
|
1466
|
+
breakdowns: n,
|
|
1467
|
+
timeDimension: yt(n),
|
|
1468
|
+
dimension: bt(n),
|
|
1469
|
+
dimensions: xt(n)
|
|
1470
|
+
});
|
|
1471
|
+
}
|
|
1472
|
+
function kt(e, t, n, r) {
|
|
1473
|
+
if (r && wt(n, e, t).available) return null;
|
|
1474
|
+
let i = Et(e, t, n);
|
|
1475
|
+
return i === n ? null : i;
|
|
1476
|
+
}
|
|
1477
|
+
//#endregion
|
|
1478
|
+
//#region src/client/components/AnalysisBuilder/ExecutionPlanPanelParts.tsx
|
|
1479
|
+
function At({ title: e, height: t, className: n, children: r }) {
|
|
1480
|
+
return /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H("h4", {
|
|
1481
|
+
className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
|
|
1482
|
+
children: e
|
|
1483
|
+
}), /* @__PURE__ */ H("div", {
|
|
1484
|
+
className: n,
|
|
1485
|
+
style: { height: t },
|
|
1486
|
+
children: r
|
|
1487
|
+
})] });
|
|
1488
|
+
}
|
|
1489
|
+
function jt({ sql: e, sqlLoading: t, sqlError: n, sqlPlaceholder: r, formattedSql: i, title: a, height: o, headerRight: s }) {
|
|
1490
|
+
let { t: c } = D();
|
|
1491
|
+
return t ? /* @__PURE__ */ H(At, {
|
|
1492
|
+
title: a,
|
|
1493
|
+
height: o,
|
|
1494
|
+
className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
|
|
1495
|
+
children: c("results.debug.loadingSql")
|
|
1496
|
+
}) : n ? /* @__PURE__ */ H(At, {
|
|
1497
|
+
title: a,
|
|
1498
|
+
height: o,
|
|
1499
|
+
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1500
|
+
children: n.message
|
|
1501
|
+
}) : e ? /* @__PURE__ */ H(u, {
|
|
1502
|
+
code: i,
|
|
1503
|
+
language: "sql",
|
|
1504
|
+
title: a,
|
|
1505
|
+
height: o,
|
|
1506
|
+
headerRight: s
|
|
1507
|
+
}) : /* @__PURE__ */ H(At, {
|
|
1508
|
+
title: a,
|
|
1509
|
+
height: o,
|
|
1510
|
+
className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm",
|
|
1511
|
+
children: r
|
|
1512
|
+
});
|
|
1513
|
+
}
|
|
1514
|
+
function Mt({ summary: e }) {
|
|
1515
|
+
let { t } = D();
|
|
1516
|
+
return /* @__PURE__ */ U("div", {
|
|
1517
|
+
className: "dc:flex dc:flex-wrap dc:items-center dc:gap-2",
|
|
1518
|
+
children: [
|
|
1519
|
+
/* @__PURE__ */ H("span", {
|
|
1520
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-accent text-white dc:rounded",
|
|
1521
|
+
children: e.database.toUpperCase()
|
|
1522
|
+
}),
|
|
1523
|
+
e.hasSequentialScans && /* @__PURE__ */ H("span", {
|
|
1524
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-warning-bg text-dc-warning dc:border border-dc-warning dc:rounded",
|
|
1525
|
+
children: t("debug.sequentialScans")
|
|
1526
|
+
}),
|
|
1527
|
+
e.usedIndexes.length > 0 && /* @__PURE__ */ H("span", {
|
|
1528
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-success-bg text-dc-success dc:border border-dc-success dc:rounded",
|
|
1529
|
+
children: t(e.usedIndexes.length === 1 ? "debug.indexesUsed" : "debug.indexesUsedPlural", { count: e.usedIndexes.length })
|
|
1530
|
+
}),
|
|
1531
|
+
e.executionTime !== void 0 && /* @__PURE__ */ H("span", {
|
|
1532
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1533
|
+
children: t("debug.executionTime", { time: e.executionTime.toFixed(2) })
|
|
1534
|
+
}),
|
|
1535
|
+
e.planningTime !== void 0 && /* @__PURE__ */ H("span", {
|
|
1536
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1537
|
+
children: t("debug.planningTime", { time: e.planningTime.toFixed(2) })
|
|
1538
|
+
}),
|
|
1539
|
+
e.totalCost !== void 0 && /* @__PURE__ */ H("span", {
|
|
1540
|
+
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1541
|
+
children: t("debug.cost", { cost: e.totalCost.toFixed(2) })
|
|
1542
|
+
})
|
|
1543
|
+
]
|
|
1544
|
+
});
|
|
1545
|
+
}
|
|
1546
|
+
function Nt({ explainLoading: e, explainError: t, explainResult: n, useAnalyze: r, aiButton: i }) {
|
|
1547
|
+
let { t: a } = D();
|
|
1548
|
+
return e ? /* @__PURE__ */ H("div", {
|
|
1549
|
+
className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
|
|
1550
|
+
children: a(r ? "debug.explainRunningAnalyze" : "debug.explainRunningBasic")
|
|
1551
|
+
}) : t ? /* @__PURE__ */ U("div", {
|
|
1552
|
+
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1553
|
+
children: [
|
|
1554
|
+
/* @__PURE__ */ H("strong", { children: a("debug.explainError") }),
|
|
1555
|
+
" ",
|
|
1556
|
+
t.message
|
|
1557
|
+
]
|
|
1558
|
+
}) : n ? /* @__PURE__ */ U("div", {
|
|
1559
|
+
className: "dc:space-y-3",
|
|
1560
|
+
children: [
|
|
1561
|
+
/* @__PURE__ */ H(Mt, { summary: n.summary }),
|
|
1562
|
+
n.summary.usedIndexes.length > 0 && /* @__PURE__ */ U("div", {
|
|
1563
|
+
className: "dc:text-xs text-dc-text-muted",
|
|
1564
|
+
children: [
|
|
1565
|
+
/* @__PURE__ */ H("strong", { children: a("debug.indexes") }),
|
|
1566
|
+
" ",
|
|
1567
|
+
n.summary.usedIndexes.join(", ")
|
|
1568
|
+
]
|
|
1569
|
+
}),
|
|
1570
|
+
/* @__PURE__ */ H(u, {
|
|
1571
|
+
code: n.raw,
|
|
1572
|
+
language: "sql",
|
|
1573
|
+
title: a("debug.executionPlanTitle", { database: n.summary.database }),
|
|
1574
|
+
height: "16rem",
|
|
1575
|
+
headerRight: i
|
|
1576
|
+
})
|
|
1577
|
+
]
|
|
1578
|
+
}) : null;
|
|
1579
|
+
}
|
|
1580
|
+
//#endregion
|
|
1349
1581
|
//#region src/client/components/AnalysisBuilder/ExecutionPlanPanel.tsx
|
|
1350
|
-
var
|
|
1351
|
-
let { t: v } =
|
|
1582
|
+
var Pt = F(function({ sql: e, sqlLoading: t = !1, sqlError: n, sqlPlaceholder: r = "Add metrics to generate SQL", explainResult: i, explainLoading: a = !1, explainHasRun: o = !1, explainError: s, runExplain: c, aiAnalysis: l, aiAnalysisLoading: u = !1, aiAnalysisError: d, runAIAnalysis: f, clearAIAnalysis: p, enableAI: m = !1, query: h, title: g = "Generated SQL", height: _ = "16rem" }) {
|
|
1583
|
+
let { t: v } = D(), [y, b] = B(!1), [x, S] = B(!1), C = e ? e.sql + (e.params && e.params.length > 0 ? "\n\n-- Parameters:\n" + JSON.stringify(e.params, null, 2) : "") : "", w = () => {
|
|
1352
1584
|
f && i && h && (f(i, h), S(!0));
|
|
1353
|
-
},
|
|
1585
|
+
}, T = () => {
|
|
1354
1586
|
S(!1);
|
|
1355
|
-
},
|
|
1356
|
-
onClick:
|
|
1587
|
+
}, E = m && i ? /* @__PURE__ */ H("button", {
|
|
1588
|
+
onClick: w,
|
|
1357
1589
|
disabled: u,
|
|
1358
1590
|
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium dc:rounded bg-dc-accent text-white hover:bg-dc-accent-hover dc:disabled:opacity-50 dc:disabled:cursor-not-allowed dc:flex dc:items-center dc:gap-1",
|
|
1359
|
-
children: u ? /* @__PURE__ */
|
|
1591
|
+
children: u ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H("span", {
|
|
1360
1592
|
className: "dc:animate-spin",
|
|
1361
1593
|
children: "⟳"
|
|
1362
|
-
}), v("debug.aiAnalyzing")] }) : /* @__PURE__ */
|
|
1594
|
+
}), v("debug.aiAnalyzing")] }) : /* @__PURE__ */ H(V, { children: `✨ ${v("debug.aiAnalysis")}` })
|
|
1363
1595
|
}) : null;
|
|
1364
|
-
return /* @__PURE__ */
|
|
1596
|
+
return /* @__PURE__ */ U("div", {
|
|
1365
1597
|
className: "dc:space-y-3",
|
|
1366
1598
|
children: [
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
children: v("results.debug.loadingSql")
|
|
1374
|
-
})] }) : n ? /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ W("h4", {
|
|
1375
|
-
className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
|
|
1376
|
-
children: g
|
|
1377
|
-
}), /* @__PURE__ */ W("div", {
|
|
1378
|
-
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1379
|
-
style: { height: _ },
|
|
1380
|
-
children: n.message
|
|
1381
|
-
})] }) : e ? /* @__PURE__ */ W(j, {
|
|
1382
|
-
code: C,
|
|
1383
|
-
language: "sql",
|
|
1599
|
+
/* @__PURE__ */ H(jt, {
|
|
1600
|
+
sql: e,
|
|
1601
|
+
sqlLoading: t,
|
|
1602
|
+
sqlError: n,
|
|
1603
|
+
sqlPlaceholder: r,
|
|
1604
|
+
formattedSql: C,
|
|
1384
1605
|
title: g,
|
|
1385
1606
|
height: _,
|
|
1386
|
-
headerRight: /* @__PURE__ */
|
|
1607
|
+
headerRight: /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ U("label", {
|
|
1387
1608
|
className: "dc:flex dc:items-center dc:gap-1 dc:text-xs text-dc-text-secondary dc:cursor-pointer",
|
|
1388
|
-
children: [/* @__PURE__ */
|
|
1609
|
+
children: [/* @__PURE__ */ H("input", {
|
|
1389
1610
|
type: "checkbox",
|
|
1390
1611
|
checked: y,
|
|
1391
1612
|
onChange: (e) => b(e.target.checked),
|
|
1392
1613
|
className: "dc:w-3 dc:h-3 dc:rounded border-dc-border text-dc-accent focus:ring-dc-accent"
|
|
1393
1614
|
}), v("debug.explainIncludeTiming")]
|
|
1394
|
-
}), /* @__PURE__ */
|
|
1615
|
+
}), /* @__PURE__ */ H("button", {
|
|
1395
1616
|
onClick: () => c({ analyze: y }),
|
|
1396
1617
|
disabled: a,
|
|
1397
1618
|
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium dc:rounded dc:border border-dc-border bg-dc-surface hover:bg-dc-surface-hover text-dc-text-secondary hover:text-dc-text dc:transition-colors dc:disabled:opacity-50 dc:disabled:cursor-not-allowed",
|
|
1398
1619
|
children: v(a ? "debug.explainRunning" : "debug.explainPlan")
|
|
1399
1620
|
})] })
|
|
1400
|
-
})
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
})
|
|
1408
|
-
|
|
1409
|
-
className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
|
|
1410
|
-
children: v(y ? "debug.explainRunningAnalyze" : "debug.explainRunningBasic")
|
|
1411
|
-
}) : s ? /* @__PURE__ */ G("div", {
|
|
1412
|
-
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1413
|
-
children: [
|
|
1414
|
-
/* @__PURE__ */ W("strong", { children: v("debug.explainError") }),
|
|
1415
|
-
" ",
|
|
1416
|
-
s.message
|
|
1417
|
-
]
|
|
1418
|
-
}) : i ? /* @__PURE__ */ G("div", {
|
|
1419
|
-
className: "dc:space-y-3",
|
|
1420
|
-
children: [
|
|
1421
|
-
/* @__PURE__ */ G("div", {
|
|
1422
|
-
className: "dc:flex dc:flex-wrap dc:items-center dc:gap-2",
|
|
1423
|
-
children: [
|
|
1424
|
-
/* @__PURE__ */ W("span", {
|
|
1425
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-accent text-white dc:rounded",
|
|
1426
|
-
children: i.summary.database.toUpperCase()
|
|
1427
|
-
}),
|
|
1428
|
-
i.summary.hasSequentialScans && /* @__PURE__ */ W("span", {
|
|
1429
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-warning-bg text-dc-warning dc:border border-dc-warning dc:rounded",
|
|
1430
|
-
children: v("debug.sequentialScans")
|
|
1431
|
-
}),
|
|
1432
|
-
i.summary.usedIndexes.length > 0 && /* @__PURE__ */ W("span", {
|
|
1433
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-success-bg text-dc-success dc:border border-dc-success dc:rounded",
|
|
1434
|
-
children: v(i.summary.usedIndexes.length === 1 ? "debug.indexesUsed" : "debug.indexesUsedPlural", { count: i.summary.usedIndexes.length })
|
|
1435
|
-
}),
|
|
1436
|
-
i.summary.executionTime !== void 0 && /* @__PURE__ */ W("span", {
|
|
1437
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1438
|
-
children: v("debug.executionTime", { time: i.summary.executionTime.toFixed(2) })
|
|
1439
|
-
}),
|
|
1440
|
-
i.summary.planningTime !== void 0 && /* @__PURE__ */ W("span", {
|
|
1441
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1442
|
-
children: v("debug.planningTime", { time: i.summary.planningTime.toFixed(2) })
|
|
1443
|
-
}),
|
|
1444
|
-
i.summary.totalCost !== void 0 && /* @__PURE__ */ W("span", {
|
|
1445
|
-
className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
|
|
1446
|
-
children: v("debug.cost", { cost: i.summary.totalCost.toFixed(2) })
|
|
1447
|
-
})
|
|
1448
|
-
]
|
|
1449
|
-
}),
|
|
1450
|
-
i.summary.usedIndexes.length > 0 && /* @__PURE__ */ G("div", {
|
|
1451
|
-
className: "dc:text-xs text-dc-text-muted",
|
|
1452
|
-
children: [
|
|
1453
|
-
/* @__PURE__ */ W("strong", { children: v("debug.indexes") }),
|
|
1454
|
-
" ",
|
|
1455
|
-
i.summary.usedIndexes.join(", ")
|
|
1456
|
-
]
|
|
1457
|
-
}),
|
|
1458
|
-
/* @__PURE__ */ W(j, {
|
|
1459
|
-
code: i.raw,
|
|
1460
|
-
language: "sql",
|
|
1461
|
-
title: v("debug.executionPlanTitle", { database: i.summary.database }),
|
|
1462
|
-
height: "16rem",
|
|
1463
|
-
headerRight: te
|
|
1464
|
-
})
|
|
1465
|
-
]
|
|
1466
|
-
}) : null }),
|
|
1467
|
-
d && /* @__PURE__ */ G("div", {
|
|
1621
|
+
}),
|
|
1622
|
+
o && /* @__PURE__ */ H("div", { children: /* @__PURE__ */ H(Nt, {
|
|
1623
|
+
explainLoading: a,
|
|
1624
|
+
explainError: s,
|
|
1625
|
+
explainResult: i,
|
|
1626
|
+
useAnalyze: y,
|
|
1627
|
+
aiButton: E
|
|
1628
|
+
}) }),
|
|
1629
|
+
d && /* @__PURE__ */ U("div", {
|
|
1468
1630
|
className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
|
|
1469
1631
|
children: [
|
|
1470
|
-
/* @__PURE__ */
|
|
1632
|
+
/* @__PURE__ */ H("strong", { children: v("debug.aiAnalysisError") }),
|
|
1471
1633
|
" ",
|
|
1472
1634
|
d.message
|
|
1473
1635
|
]
|
|
1474
1636
|
}),
|
|
1475
|
-
x && l && /* @__PURE__ */
|
|
1637
|
+
x && l && /* @__PURE__ */ H(nt, {
|
|
1476
1638
|
analysis: l,
|
|
1477
|
-
onClose:
|
|
1639
|
+
onClose: T
|
|
1478
1640
|
})
|
|
1479
1641
|
]
|
|
1480
1642
|
});
|
|
1481
1643
|
});
|
|
1482
1644
|
//#endregion
|
|
1483
1645
|
//#region src/client/adapters/queryModeAdapter.ts
|
|
1484
|
-
function
|
|
1646
|
+
function Ft() {
|
|
1485
1647
|
return {
|
|
1486
1648
|
metrics: [],
|
|
1487
1649
|
breakdowns: [],
|
|
@@ -1492,10 +1654,10 @@ function ct() {
|
|
|
1492
1654
|
validationError: null
|
|
1493
1655
|
};
|
|
1494
1656
|
}
|
|
1495
|
-
function
|
|
1657
|
+
function It(e) {
|
|
1496
1658
|
return e.map((e) => e.field);
|
|
1497
1659
|
}
|
|
1498
|
-
function
|
|
1660
|
+
function Lt(e, t) {
|
|
1499
1661
|
let n = [], r = [];
|
|
1500
1662
|
for (let i of e) if (i.isTimeDimension) {
|
|
1501
1663
|
let e = {
|
|
@@ -1503,7 +1665,7 @@ function ut(e, t) {
|
|
|
1503
1665
|
granularity: i.granularity || "day"
|
|
1504
1666
|
};
|
|
1505
1667
|
if (i.enableComparison) {
|
|
1506
|
-
let n =
|
|
1668
|
+
let n = ve(i.field, t);
|
|
1507
1669
|
n && (e.compareDateRange = n);
|
|
1508
1670
|
}
|
|
1509
1671
|
r.push(e);
|
|
@@ -1513,31 +1675,31 @@ function ut(e, t) {
|
|
|
1513
1675
|
timeDimensions: r
|
|
1514
1676
|
};
|
|
1515
1677
|
}
|
|
1516
|
-
function
|
|
1517
|
-
let { dimensions: t, timeDimensions: n } =
|
|
1518
|
-
measures:
|
|
1678
|
+
function Rt(e) {
|
|
1679
|
+
let { dimensions: t, timeDimensions: n } = Lt(e.breakdowns, e.filters), r = {
|
|
1680
|
+
measures: It(e.metrics),
|
|
1519
1681
|
dimensions: t
|
|
1520
1682
|
};
|
|
1521
1683
|
return n.length > 0 && (r.timeDimensions = n), e.filters.length > 0 && (r.filters = e.filters), e.order && Object.keys(e.order).length > 0 && (r.order = e.order), e.limit != null && (r.limit = e.limit), r;
|
|
1522
1684
|
}
|
|
1523
|
-
function
|
|
1685
|
+
function zt(e) {
|
|
1524
1686
|
return e.map((e, t) => ({
|
|
1525
|
-
id:
|
|
1687
|
+
id: S(),
|
|
1526
1688
|
field: e,
|
|
1527
|
-
label:
|
|
1689
|
+
label: d(t)
|
|
1528
1690
|
}));
|
|
1529
1691
|
}
|
|
1530
|
-
function
|
|
1692
|
+
function Bt(e) {
|
|
1531
1693
|
let t = [];
|
|
1532
1694
|
if (e.dimensions) for (let n of e.dimensions) t.push({
|
|
1533
|
-
id:
|
|
1695
|
+
id: S(),
|
|
1534
1696
|
field: n,
|
|
1535
1697
|
isTimeDimension: !1
|
|
1536
1698
|
});
|
|
1537
1699
|
if (e.timeDimensions) for (let n of e.timeDimensions) {
|
|
1538
1700
|
let e = !!(n.compareDateRange && n.compareDateRange.length > 0);
|
|
1539
1701
|
t.push({
|
|
1540
|
-
id:
|
|
1702
|
+
id: S(),
|
|
1541
1703
|
field: n.dimension,
|
|
1542
1704
|
granularity: n.granularity,
|
|
1543
1705
|
isTimeDimension: !0,
|
|
@@ -1546,10 +1708,10 @@ function pt(e) {
|
|
|
1546
1708
|
}
|
|
1547
1709
|
return t;
|
|
1548
1710
|
}
|
|
1549
|
-
function
|
|
1711
|
+
function Vt(e) {
|
|
1550
1712
|
return {
|
|
1551
|
-
metrics:
|
|
1552
|
-
breakdowns:
|
|
1713
|
+
metrics: zt(e.measures || []),
|
|
1714
|
+
breakdowns: Bt(e),
|
|
1553
1715
|
filters: e.filters || [],
|
|
1554
1716
|
order: e.order,
|
|
1555
1717
|
limit: e.limit,
|
|
@@ -1557,14 +1719,14 @@ function mt(e) {
|
|
|
1557
1719
|
validationError: null
|
|
1558
1720
|
};
|
|
1559
1721
|
}
|
|
1560
|
-
function
|
|
1722
|
+
function Ht(e) {
|
|
1561
1723
|
return typeof e == "object" && !!e && "queries" in e && Array.isArray(e.queries);
|
|
1562
1724
|
}
|
|
1563
1725
|
var X = {
|
|
1564
1726
|
type: "query",
|
|
1565
1727
|
createInitial() {
|
|
1566
1728
|
return {
|
|
1567
|
-
queryStates: [
|
|
1729
|
+
queryStates: [Ft()],
|
|
1568
1730
|
activeQueryIndex: 0,
|
|
1569
1731
|
mergeStrategy: "concat"
|
|
1570
1732
|
};
|
|
@@ -1584,22 +1746,22 @@ var X = {
|
|
|
1584
1746
|
load(e) {
|
|
1585
1747
|
if (e.analysisType !== "query") throw Error(`Cannot load ${e.analysisType} config with query adapter`);
|
|
1586
1748
|
let t = e;
|
|
1587
|
-
if (
|
|
1588
|
-
let e = t.query, n = e.queries.map(
|
|
1589
|
-
return n.length === 0 && n.push(
|
|
1749
|
+
if (Ht(t.query)) {
|
|
1750
|
+
let e = t.query, n = e.queries.map(Vt);
|
|
1751
|
+
return n.length === 0 && n.push(Ft()), {
|
|
1590
1752
|
queryStates: n,
|
|
1591
1753
|
activeQueryIndex: 0,
|
|
1592
1754
|
mergeStrategy: e.mergeStrategy || "concat"
|
|
1593
1755
|
};
|
|
1594
1756
|
}
|
|
1595
1757
|
return {
|
|
1596
|
-
queryStates: [
|
|
1758
|
+
queryStates: [Vt(t.query)],
|
|
1597
1759
|
activeQueryIndex: 0,
|
|
1598
1760
|
mergeStrategy: "concat"
|
|
1599
1761
|
};
|
|
1600
1762
|
},
|
|
1601
1763
|
save(e, t, n) {
|
|
1602
|
-
let r = e.queryStates.map(
|
|
1764
|
+
let r = e.queryStates.map(Rt), i = r.length === 1 && e.mergeStrategy === "concat" ? r[0] : {
|
|
1603
1765
|
queries: r,
|
|
1604
1766
|
mergeStrategy: e.mergeStrategy
|
|
1605
1767
|
};
|
|
@@ -1640,36 +1802,36 @@ var X = {
|
|
|
1640
1802
|
}
|
|
1641
1803
|
};
|
|
1642
1804
|
}
|
|
1643
|
-
}, Z = /* @__PURE__ */ new Map(),
|
|
1644
|
-
function
|
|
1645
|
-
|
|
1805
|
+
}, Z = /* @__PURE__ */ new Map(), Ut = !1;
|
|
1806
|
+
function Wt() {
|
|
1807
|
+
Ut ||= (Z.has("query") || Z.set("query", X), Z.has("funnel") || Z.set("funnel", h), Z.has("flow") || Z.set("flow", b), Z.has("retention") || Z.set("retention", y), !0);
|
|
1646
1808
|
}
|
|
1647
1809
|
var Q = {
|
|
1648
1810
|
register(e) {
|
|
1649
1811
|
Z.has(e.type) && console.warn(`[adapterRegistry] Overwriting existing adapter for type: ${e.type}`), Z.set(e.type, e);
|
|
1650
1812
|
},
|
|
1651
1813
|
get(e) {
|
|
1652
|
-
|
|
1814
|
+
Wt();
|
|
1653
1815
|
let t = Z.get(e);
|
|
1654
1816
|
if (!t) throw Error(`[adapterRegistry] No adapter registered for type: ${e}. Available types: ${Array.from(Z.keys()).join(", ") || "none"}`);
|
|
1655
1817
|
return t;
|
|
1656
1818
|
},
|
|
1657
1819
|
has(e) {
|
|
1658
|
-
return
|
|
1820
|
+
return Wt(), Z.has(e);
|
|
1659
1821
|
},
|
|
1660
1822
|
getRegisteredTypes() {
|
|
1661
|
-
return
|
|
1823
|
+
return Wt(), Array.from(Z.keys());
|
|
1662
1824
|
},
|
|
1663
1825
|
clear() {
|
|
1664
|
-
Z.clear(),
|
|
1826
|
+
Z.clear(), Ut = !1;
|
|
1665
1827
|
}
|
|
1666
|
-
},
|
|
1828
|
+
}, Gt = () => ({
|
|
1667
1829
|
analysisType: "query",
|
|
1668
1830
|
charts: {
|
|
1669
1831
|
query: X.getDefaultChartConfig(),
|
|
1670
|
-
funnel:
|
|
1671
|
-
flow:
|
|
1672
|
-
retention:
|
|
1832
|
+
funnel: h.getDefaultChartConfig(),
|
|
1833
|
+
flow: b.getDefaultChartConfig(),
|
|
1834
|
+
retention: y.getDefaultChartConfig()
|
|
1673
1835
|
},
|
|
1674
1836
|
activeViews: {
|
|
1675
1837
|
query: "chart",
|
|
@@ -1679,8 +1841,8 @@ var Q = {
|
|
|
1679
1841
|
},
|
|
1680
1842
|
userManuallySelectedChart: !1,
|
|
1681
1843
|
localPaletteName: "default"
|
|
1682
|
-
}),
|
|
1683
|
-
...
|
|
1844
|
+
}), Kt = (e, t, n) => ({
|
|
1845
|
+
...Gt(),
|
|
1684
1846
|
setAnalysisType: (t) => {
|
|
1685
1847
|
e((e) => {
|
|
1686
1848
|
let n = { ...e.charts };
|
|
@@ -1893,12 +2055,12 @@ var Q = {
|
|
|
1893
2055
|
...u
|
|
1894
2056
|
});
|
|
1895
2057
|
}
|
|
1896
|
-
}),
|
|
2058
|
+
}), qt = () => ({
|
|
1897
2059
|
queryStates: [K()],
|
|
1898
2060
|
activeQueryIndex: 0,
|
|
1899
2061
|
mergeStrategy: "concat"
|
|
1900
|
-
}),
|
|
1901
|
-
...
|
|
2062
|
+
}), Jt = (e, t, n) => ({
|
|
2063
|
+
...qt(),
|
|
1902
2064
|
setQueryStates: (t) => e({ queryStates: t }),
|
|
1903
2065
|
updateQueryState: (t, n) => e((e) => {
|
|
1904
2066
|
let r = [...e.queryStates];
|
|
@@ -1928,9 +2090,9 @@ var Q = {
|
|
|
1928
2090
|
}),
|
|
1929
2091
|
addMetric: (t, n) => e((e) => {
|
|
1930
2092
|
let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] || K(), o = {
|
|
1931
|
-
id:
|
|
2093
|
+
id: S(),
|
|
1932
2094
|
field: t,
|
|
1933
|
-
label: n ||
|
|
2095
|
+
label: n || d(a.metrics.length)
|
|
1934
2096
|
};
|
|
1935
2097
|
return i[r] = {
|
|
1936
2098
|
...a,
|
|
@@ -1953,9 +2115,9 @@ var Q = {
|
|
|
1953
2115
|
};
|
|
1954
2116
|
else {
|
|
1955
2117
|
let e = {
|
|
1956
|
-
id:
|
|
2118
|
+
id: S(),
|
|
1957
2119
|
field: t,
|
|
1958
|
-
label:
|
|
2120
|
+
label: d(i.metrics.length)
|
|
1959
2121
|
};
|
|
1960
2122
|
r[n] = {
|
|
1961
2123
|
...i,
|
|
@@ -1975,7 +2137,7 @@ var Q = {
|
|
|
1975
2137
|
let i = e.activeQueryIndex, a = [...e.queryStates], o = a[i] || K();
|
|
1976
2138
|
if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
|
|
1977
2139
|
let s = {
|
|
1978
|
-
id:
|
|
2140
|
+
id: S(),
|
|
1979
2141
|
field: t,
|
|
1980
2142
|
isTimeDimension: n,
|
|
1981
2143
|
granularity: n ? r || "month" : void 0
|
|
@@ -2002,7 +2164,7 @@ var Q = {
|
|
|
2002
2164
|
else {
|
|
2003
2165
|
if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
|
|
2004
2166
|
let s = {
|
|
2005
|
-
id:
|
|
2167
|
+
id: S(),
|
|
2006
2168
|
field: t,
|
|
2007
2169
|
isTimeDimension: n,
|
|
2008
2170
|
granularity: n ? r || "month" : void 0
|
|
@@ -2050,7 +2212,7 @@ var Q = {
|
|
|
2050
2212
|
member: l.field,
|
|
2051
2213
|
operator: "inDateRange",
|
|
2052
2214
|
values: [],
|
|
2053
|
-
dateRange:
|
|
2215
|
+
dateRange: A("last_n_months", 3)
|
|
2054
2216
|
};
|
|
2055
2217
|
s[c] = {
|
|
2056
2218
|
...s[c],
|
|
@@ -2139,11 +2301,11 @@ var Q = {
|
|
|
2139
2301
|
},
|
|
2140
2302
|
buildCurrentQuery: () => {
|
|
2141
2303
|
let e = t(), n = e.queryStates[e.activeQueryIndex] || K();
|
|
2142
|
-
return
|
|
2304
|
+
return G(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
|
|
2143
2305
|
},
|
|
2144
2306
|
buildAllQueries: () => {
|
|
2145
2307
|
let e = t(), n = e.queryStates[0]?.breakdowns || [];
|
|
2146
|
-
return e.queryStates.map((t, r) =>
|
|
2308
|
+
return e.queryStates.map((t, r) => G(t.metrics, e.mergeStrategy === "merge" && r > 0 ? n : t.breakdowns, t.filters, t.order, !1, t.limit));
|
|
2147
2309
|
},
|
|
2148
2310
|
buildMultiQueryConfig: () => {
|
|
2149
2311
|
let e = t();
|
|
@@ -2156,18 +2318,18 @@ var Q = {
|
|
|
2156
2318
|
queryLabels: n.map((e, t) => `Q${t + 1}`)
|
|
2157
2319
|
};
|
|
2158
2320
|
}
|
|
2159
|
-
}),
|
|
2321
|
+
}), Yt = () => ({
|
|
2160
2322
|
funnelCube: null,
|
|
2161
2323
|
funnelSteps: [],
|
|
2162
2324
|
activeFunnelStepIndex: 0,
|
|
2163
2325
|
funnelTimeDimension: null,
|
|
2164
2326
|
funnelBindingKey: null,
|
|
2165
2327
|
stepTimeToConvert: []
|
|
2166
|
-
}),
|
|
2167
|
-
...
|
|
2328
|
+
}), Xt = (e, t, n) => ({
|
|
2329
|
+
...Yt(),
|
|
2168
2330
|
addFunnelStep: () => e((e) => {
|
|
2169
2331
|
let t = e.funnelSteps[e.funnelSteps.length - 1], n = {
|
|
2170
|
-
id:
|
|
2332
|
+
id: S(),
|
|
2171
2333
|
name: `Step ${e.funnelSteps.length + 1}`,
|
|
2172
2334
|
cube: e.funnelCube || "",
|
|
2173
2335
|
filters: t?.filters ? JSON.parse(JSON.stringify(t.filters)) : [],
|
|
@@ -2232,7 +2394,7 @@ var Q = {
|
|
|
2232
2394
|
let e = t();
|
|
2233
2395
|
return e.analysisType !== "funnel" || !e.funnelBindingKey || !e.funnelTimeDimension || e.funnelSteps.length < 2 ? !1 : e.funnelSteps.filter((e) => e.cube && e.name).length >= 2;
|
|
2234
2396
|
}
|
|
2235
|
-
}),
|
|
2397
|
+
}), Zt = () => ({
|
|
2236
2398
|
flowCube: null,
|
|
2237
2399
|
flowBindingKey: null,
|
|
2238
2400
|
flowTimeDimension: null,
|
|
@@ -2244,8 +2406,8 @@ var Q = {
|
|
|
2244
2406
|
stepsAfter: 3,
|
|
2245
2407
|
eventDimension: null,
|
|
2246
2408
|
joinStrategy: "auto"
|
|
2247
|
-
}),
|
|
2248
|
-
...
|
|
2409
|
+
}), Qt = (e, t, n) => ({
|
|
2410
|
+
...Zt(),
|
|
2249
2411
|
setFlowCube: (t) => e(() => ({
|
|
2250
2412
|
flowCube: t,
|
|
2251
2413
|
flowBindingKey: null,
|
|
@@ -2315,8 +2477,8 @@ var Q = {
|
|
|
2315
2477
|
joinStrategy: e.joinStrategy
|
|
2316
2478
|
} };
|
|
2317
2479
|
}
|
|
2318
|
-
}),
|
|
2319
|
-
|
|
2480
|
+
}), $t = () => ({ ...w }), en = (e, t, n) => ({
|
|
2481
|
+
...$t(),
|
|
2320
2482
|
setRetentionCube: (t) => e(() => ({
|
|
2321
2483
|
retentionCube: t,
|
|
2322
2484
|
retentionTimeDimension: null,
|
|
@@ -2391,22 +2553,22 @@ var Q = {
|
|
|
2391
2553
|
warnings: r
|
|
2392
2554
|
};
|
|
2393
2555
|
}
|
|
2394
|
-
}),
|
|
2556
|
+
}), tn = {
|
|
2395
2557
|
isOpen: !1,
|
|
2396
2558
|
userPrompt: "",
|
|
2397
2559
|
isGenerating: !1,
|
|
2398
2560
|
error: null,
|
|
2399
2561
|
hasGeneratedQuery: !1,
|
|
2400
2562
|
previousState: null
|
|
2401
|
-
},
|
|
2563
|
+
}, nn = () => ({
|
|
2402
2564
|
activeTab: "query",
|
|
2403
2565
|
activeView: "chart",
|
|
2404
2566
|
displayLimit: 100,
|
|
2405
2567
|
showFieldModal: !1,
|
|
2406
2568
|
fieldModalMode: "metrics",
|
|
2407
|
-
aiState:
|
|
2408
|
-
}),
|
|
2409
|
-
...
|
|
2569
|
+
aiState: tn
|
|
2570
|
+
}), rn = (e, t, n) => ({
|
|
2571
|
+
...nn(),
|
|
2410
2572
|
setActiveTab: (t) => e({ activeTab: t }),
|
|
2411
2573
|
setActiveView: (t) => e((e) => ({
|
|
2412
2574
|
activeView: t,
|
|
@@ -2490,19 +2652,19 @@ var Q = {
|
|
|
2490
2652
|
displayConfig: t.displayConfig
|
|
2491
2653
|
}
|
|
2492
2654
|
},
|
|
2493
|
-
aiState: { ...
|
|
2655
|
+
aiState: { ...tn }
|
|
2494
2656
|
};
|
|
2495
2657
|
})
|
|
2496
2658
|
});
|
|
2497
2659
|
//#endregion
|
|
2498
|
-
//#region src/client/stores/
|
|
2499
|
-
function
|
|
2660
|
+
//#region src/client/stores/optionsToAnalysisConfig.ts
|
|
2661
|
+
function an(e) {
|
|
2500
2662
|
let t = e.filters ? [...e.filters] : [], n = e.timeDimensions || [], r = [...(e.dimensions || []).map((e) => ({
|
|
2501
|
-
id:
|
|
2663
|
+
id: S(),
|
|
2502
2664
|
field: e,
|
|
2503
2665
|
isTimeDimension: !1
|
|
2504
2666
|
})), ...n.map((e) => ({
|
|
2505
|
-
id:
|
|
2667
|
+
id: S(),
|
|
2506
2668
|
field: e.dimension,
|
|
2507
2669
|
granularity: e.granularity,
|
|
2508
2670
|
isTimeDimension: !0,
|
|
@@ -2530,118 +2692,114 @@ function jt(e) {
|
|
|
2530
2692
|
return {
|
|
2531
2693
|
...K(),
|
|
2532
2694
|
metrics: (e.measures || []).map((e, t) => ({
|
|
2533
|
-
id:
|
|
2695
|
+
id: S(),
|
|
2534
2696
|
field: e,
|
|
2535
|
-
label:
|
|
2697
|
+
label: d(t)
|
|
2536
2698
|
})),
|
|
2537
2699
|
breakdowns: r,
|
|
2538
2700
|
filters: i,
|
|
2539
2701
|
order: e.order
|
|
2540
2702
|
};
|
|
2541
2703
|
}
|
|
2542
|
-
function
|
|
2704
|
+
function on(e) {
|
|
2543
2705
|
return "queries" in e && Array.isArray(e.queries);
|
|
2544
2706
|
}
|
|
2545
|
-
function
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
|
|
2576
|
-
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
displayConfig: e.initialChartConfig.displayConfig || t.displayConfig
|
|
2618
|
-
};
|
|
2619
|
-
return X.save({
|
|
2620
|
-
queryStates: [K()],
|
|
2621
|
-
activeQueryIndex: 0,
|
|
2622
|
-
mergeStrategy: "concat"
|
|
2623
|
-
}, { query: n }, e.initialActiveView || "chart");
|
|
2624
|
-
}
|
|
2625
|
-
return e.initialActiveView ? X.save({
|
|
2707
|
+
function sn(e, t) {
|
|
2708
|
+
let n = e.getDefaultChartConfig();
|
|
2709
|
+
return {
|
|
2710
|
+
chartType: t?.chartType || n.chartType,
|
|
2711
|
+
chartConfig: t?.chartConfig || n.chartConfig,
|
|
2712
|
+
displayConfig: t?.displayConfig || n.displayConfig
|
|
2713
|
+
};
|
|
2714
|
+
}
|
|
2715
|
+
function cn(e) {
|
|
2716
|
+
return e.initialActiveView || "chart";
|
|
2717
|
+
}
|
|
2718
|
+
function ln(e) {
|
|
2719
|
+
let t = sn(h, e.initialChartConfig), n = e.initialFunnelState ?? {};
|
|
2720
|
+
return h.save({
|
|
2721
|
+
funnelCube: n.funnelCube ?? null,
|
|
2722
|
+
funnelSteps: n.funnelSteps || [],
|
|
2723
|
+
activeFunnelStepIndex: 0,
|
|
2724
|
+
funnelTimeDimension: n.funnelTimeDimension ?? null,
|
|
2725
|
+
funnelBindingKey: n.funnelBindingKey ?? null
|
|
2726
|
+
}, { funnel: t }, cn(e));
|
|
2727
|
+
}
|
|
2728
|
+
function un(e) {
|
|
2729
|
+
let t = sn(b, e.initialChartConfig), n = e.initialFlowState ?? {};
|
|
2730
|
+
return b.save({
|
|
2731
|
+
flowCube: n.flowCube ?? null,
|
|
2732
|
+
flowBindingKey: n.flowBindingKey ?? null,
|
|
2733
|
+
flowTimeDimension: n.flowTimeDimension ?? null,
|
|
2734
|
+
startingStep: n.startingStep || {
|
|
2735
|
+
name: "",
|
|
2736
|
+
filters: []
|
|
2737
|
+
},
|
|
2738
|
+
stepsBefore: n.stepsBefore ?? 3,
|
|
2739
|
+
stepsAfter: n.stepsAfter ?? 3,
|
|
2740
|
+
eventDimension: n.eventDimension ?? null,
|
|
2741
|
+
joinStrategy: n.joinStrategy ?? "auto"
|
|
2742
|
+
}, { flow: t }, cn(e));
|
|
2743
|
+
}
|
|
2744
|
+
function dn(e) {
|
|
2745
|
+
let t = sn(y, e.initialChartConfig), n = e.initialRetentionState ?? {}, r = T(E);
|
|
2746
|
+
return y.save({
|
|
2747
|
+
retentionCube: n.retentionCube ?? null,
|
|
2748
|
+
retentionBindingKey: n.retentionBindingKey ?? null,
|
|
2749
|
+
retentionTimeDimension: n.retentionTimeDimension ?? null,
|
|
2750
|
+
retentionDateRange: n.retentionDateRange ?? r,
|
|
2751
|
+
retentionCohortFilters: n.retentionCohortFilters || [],
|
|
2752
|
+
retentionActivityFilters: n.retentionActivityFilters || [],
|
|
2753
|
+
retentionBreakdowns: n.retentionBreakdowns || [],
|
|
2754
|
+
retentionViewGranularity: n.retentionViewGranularity ?? "week",
|
|
2755
|
+
retentionPeriods: n.retentionPeriods ?? 12,
|
|
2756
|
+
retentionType: n.retentionType ?? "classic"
|
|
2757
|
+
}, { retention: t }, cn(e));
|
|
2758
|
+
}
|
|
2759
|
+
function fn(e, t) {
|
|
2760
|
+
let n, r = "concat";
|
|
2761
|
+
on(t) ? (n = t.queries.map(an), t.mergeStrategy && (r = t.mergeStrategy)) : n = [an(t)];
|
|
2762
|
+
let i = sn(X, e.initialChartConfig);
|
|
2763
|
+
return X.save({
|
|
2764
|
+
queryStates: n,
|
|
2765
|
+
activeQueryIndex: 0,
|
|
2766
|
+
mergeStrategy: r
|
|
2767
|
+
}, { query: i }, cn(e));
|
|
2768
|
+
}
|
|
2769
|
+
function pn(e) {
|
|
2770
|
+
let t = sn(X, e.initialChartConfig);
|
|
2771
|
+
return X.save({
|
|
2772
|
+
queryStates: [K()],
|
|
2773
|
+
activeQueryIndex: 0,
|
|
2774
|
+
mergeStrategy: "concat"
|
|
2775
|
+
}, { query: t }, cn(e));
|
|
2776
|
+
}
|
|
2777
|
+
function mn(e) {
|
|
2778
|
+
return X.save({
|
|
2626
2779
|
queryStates: [K()],
|
|
2627
2780
|
activeQueryIndex: 0,
|
|
2628
2781
|
mergeStrategy: "concat"
|
|
2629
|
-
}, { query: X.getDefaultChartConfig() }, e.initialActiveView)
|
|
2782
|
+
}, { query: X.getDefaultChartConfig() }, e.initialActiveView);
|
|
2783
|
+
}
|
|
2784
|
+
function hn(e) {
|
|
2785
|
+
return e.initialAnalysisType === "funnel" && e.initialFunnelState ? ln(e) : e.initialAnalysisType === "flow" && e.initialFlowState ? un(e) : e.initialAnalysisType === "retention" && e.initialRetentionState ? dn(e) : e.initialQuery ? fn(e, e.initialQuery) : e.initialChartConfig ? pn(e) : e.initialActiveView ? mn(e) : null;
|
|
2630
2786
|
}
|
|
2631
|
-
|
|
2787
|
+
//#endregion
|
|
2788
|
+
//#region src/client/stores/analysisBuilderStore.tsx
|
|
2789
|
+
function gn(e, t) {
|
|
2632
2790
|
return {
|
|
2633
2791
|
reset: () => {
|
|
2634
2792
|
e({
|
|
2635
|
-
...
|
|
2636
|
-
...
|
|
2637
|
-
...
|
|
2638
|
-
...
|
|
2639
|
-
|
|
2793
|
+
...Gt(),
|
|
2794
|
+
...qt(),
|
|
2795
|
+
...Yt(),
|
|
2796
|
+
...Zt(),
|
|
2797
|
+
...$t(),
|
|
2640
2798
|
charts: {
|
|
2641
2799
|
query: X.getDefaultChartConfig(),
|
|
2642
|
-
funnel:
|
|
2643
|
-
flow:
|
|
2644
|
-
retention:
|
|
2800
|
+
funnel: h.getDefaultChartConfig(),
|
|
2801
|
+
flow: b.getDefaultChartConfig(),
|
|
2802
|
+
retention: y.getDefaultChartConfig()
|
|
2645
2803
|
},
|
|
2646
2804
|
activeViews: {
|
|
2647
2805
|
query: "chart",
|
|
@@ -2654,28 +2812,28 @@ function Pt(e, t) {
|
|
|
2654
2812
|
clearCurrentMode: () => e((e) => {
|
|
2655
2813
|
switch (e.analysisType) {
|
|
2656
2814
|
case "funnel": return {
|
|
2657
|
-
...
|
|
2815
|
+
...Yt(),
|
|
2658
2816
|
charts: {
|
|
2659
2817
|
...e.charts,
|
|
2660
|
-
funnel:
|
|
2818
|
+
funnel: h.getDefaultChartConfig()
|
|
2661
2819
|
}
|
|
2662
2820
|
};
|
|
2663
2821
|
case "flow": return {
|
|
2664
|
-
...
|
|
2822
|
+
...Zt(),
|
|
2665
2823
|
charts: {
|
|
2666
2824
|
...e.charts,
|
|
2667
|
-
flow:
|
|
2825
|
+
flow: b.getDefaultChartConfig()
|
|
2668
2826
|
}
|
|
2669
2827
|
};
|
|
2670
2828
|
case "retention": return {
|
|
2671
|
-
|
|
2829
|
+
...$t(),
|
|
2672
2830
|
charts: {
|
|
2673
2831
|
...e.charts,
|
|
2674
|
-
retention:
|
|
2832
|
+
retention: y.getDefaultChartConfig()
|
|
2675
2833
|
}
|
|
2676
2834
|
};
|
|
2677
2835
|
default: return {
|
|
2678
|
-
...
|
|
2836
|
+
...qt(),
|
|
2679
2837
|
userManuallySelectedChart: !1,
|
|
2680
2838
|
charts: {
|
|
2681
2839
|
...e.charts,
|
|
@@ -2701,15 +2859,15 @@ function Pt(e, t) {
|
|
|
2701
2859
|
}
|
|
2702
2860
|
};
|
|
2703
2861
|
}
|
|
2704
|
-
function
|
|
2705
|
-
let r =
|
|
2706
|
-
...
|
|
2707
|
-
...
|
|
2708
|
-
...
|
|
2709
|
-
...
|
|
2710
|
-
...
|
|
2711
|
-
...
|
|
2712
|
-
...
|
|
2862
|
+
function _n(n = {}) {
|
|
2863
|
+
let r = hn(n), o = (e, t, n) => ({
|
|
2864
|
+
...Kt(e, t, n),
|
|
2865
|
+
...Jt(e, t, n),
|
|
2866
|
+
...Xt(e, t, n),
|
|
2867
|
+
...Qt(e, t, n),
|
|
2868
|
+
...en(e, t, n),
|
|
2869
|
+
...rn(e, t, n),
|
|
2870
|
+
...gn(e, t)
|
|
2713
2871
|
});
|
|
2714
2872
|
if (n.disableLocalStorage) {
|
|
2715
2873
|
let t = a()(i(e(o), { name: "AnalysisBuilderStore (no-persist)" }));
|
|
@@ -2718,10 +2876,10 @@ function Ft(n = {}) {
|
|
|
2718
2876
|
return a()(i(e(t(o, {
|
|
2719
2877
|
name: n.storageKey || "drizzle-cube-analysis-builder-v3",
|
|
2720
2878
|
partialize: (e) => e.saveWorkspace(),
|
|
2721
|
-
merge: (e, t) => e &&
|
|
2879
|
+
merge: (e, t) => e && m(e) ? {
|
|
2722
2880
|
...t,
|
|
2723
2881
|
_persistedWorkspace: e
|
|
2724
|
-
} : e &&
|
|
2882
|
+
} : e && v(e) ? {
|
|
2725
2883
|
...t,
|
|
2726
2884
|
_persistedConfig: e
|
|
2727
2885
|
} : r ? {
|
|
@@ -2744,10 +2902,10 @@ function Ft(n = {}) {
|
|
|
2744
2902
|
}
|
|
2745
2903
|
})), { name: "AnalysisBuilderStore" }));
|
|
2746
2904
|
}
|
|
2747
|
-
var
|
|
2748
|
-
function
|
|
2749
|
-
let u =
|
|
2750
|
-
return u.current ||=
|
|
2905
|
+
var vn = P(null);
|
|
2906
|
+
function yn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalStorage: r, storageKey: i, initialAnalysisType: a, initialFunnelState: o, initialFlowState: s, initialRetentionState: c, initialActiveView: l }) {
|
|
2907
|
+
let u = z(null);
|
|
2908
|
+
return u.current ||= _n({
|
|
2751
2909
|
initialQuery: t,
|
|
2752
2910
|
initialChartConfig: n,
|
|
2753
2911
|
disableLocalStorage: r,
|
|
@@ -2757,22 +2915,22 @@ function Lt({ children: e, initialQuery: t, initialChartConfig: n, disableLocalS
|
|
|
2757
2915
|
initialFlowState: s,
|
|
2758
2916
|
initialRetentionState: c,
|
|
2759
2917
|
initialActiveView: l
|
|
2760
|
-
}), /* @__PURE__ */
|
|
2918
|
+
}), /* @__PURE__ */ H(vn.Provider, {
|
|
2761
2919
|
value: u.current,
|
|
2762
2920
|
children: e
|
|
2763
2921
|
});
|
|
2764
2922
|
}
|
|
2765
2923
|
function $(e) {
|
|
2766
|
-
let t =
|
|
2924
|
+
let t = pe(vn);
|
|
2767
2925
|
if (!t) throw Error("useAnalysisBuilderStore must be used within AnalysisBuilderStoreProvider");
|
|
2768
2926
|
return r(t, e);
|
|
2769
2927
|
}
|
|
2770
|
-
function
|
|
2771
|
-
let e =
|
|
2928
|
+
function bn() {
|
|
2929
|
+
let e = pe(vn);
|
|
2772
2930
|
if (!e) throw Error("useAnalysisBuilderStoreApi must be used within AnalysisBuilderStoreProvider");
|
|
2773
2931
|
return e;
|
|
2774
2932
|
}
|
|
2775
|
-
var
|
|
2933
|
+
var xn = (e) => e.queryStates[e.activeQueryIndex] || K(), Sn = (e) => xn(e).metrics, Cn = (e) => xn(e).breakdowns, wn = (e) => xn(e).filters, Tn = (e) => {
|
|
2776
2934
|
let t = e.charts[e.analysisType];
|
|
2777
2935
|
return t ? {
|
|
2778
2936
|
chartType: t.chartType,
|
|
@@ -2787,18 +2945,18 @@ var zt = (e) => e.queryStates[e.activeQueryIndex] || K(), Bt = (e) => zt(e).metr
|
|
|
2787
2945
|
showTooltip: !0
|
|
2788
2946
|
}
|
|
2789
2947
|
};
|
|
2790
|
-
},
|
|
2948
|
+
}, En = (e) => ({
|
|
2791
2949
|
activeTab: e.activeTab,
|
|
2792
2950
|
activeView: e.activeView,
|
|
2793
2951
|
displayLimit: e.displayLimit,
|
|
2794
2952
|
showFieldModal: e.showFieldModal,
|
|
2795
2953
|
fieldModalMode: e.fieldModalMode
|
|
2796
|
-
}),
|
|
2954
|
+
}), Dn = (e) => ({
|
|
2797
2955
|
queryStates: e.queryStates,
|
|
2798
2956
|
activeQueryIndex: e.activeQueryIndex,
|
|
2799
2957
|
mergeStrategy: e.mergeStrategy,
|
|
2800
2958
|
isMultiQueryMode: e.analysisType === "query" && e.queryStates.length > 1
|
|
2801
|
-
}),
|
|
2959
|
+
}), On = (e) => ({
|
|
2802
2960
|
funnelCube: e.funnelCube,
|
|
2803
2961
|
funnelSteps: e.funnelSteps,
|
|
2804
2962
|
activeFunnelStepIndex: e.activeFunnelStepIndex,
|
|
@@ -2809,16 +2967,16 @@ var zt = (e) => e.queryStates[e.activeQueryIndex] || K(), Bt = (e) => zt(e).metr
|
|
|
2809
2967
|
});
|
|
2810
2968
|
//#endregion
|
|
2811
2969
|
//#region src/client/utils/multiQueryValidation.ts
|
|
2812
|
-
function
|
|
2970
|
+
function kn(e) {
|
|
2813
2971
|
return e.timeDimensions || [];
|
|
2814
2972
|
}
|
|
2815
|
-
function
|
|
2973
|
+
function An(e) {
|
|
2816
2974
|
let t = [];
|
|
2817
2975
|
if (e.length < 2) return t;
|
|
2818
|
-
let n =
|
|
2976
|
+
let n = kn(e[0]);
|
|
2819
2977
|
if (n.length === 0) return t;
|
|
2820
2978
|
for (let r = 1; r < e.length; r++) {
|
|
2821
|
-
let i =
|
|
2979
|
+
let i = kn(e[r]);
|
|
2822
2980
|
if (i.length === 0 && n.length > 0) {
|
|
2823
2981
|
t.push({
|
|
2824
2982
|
type: "missing_time_dimension",
|
|
@@ -2844,7 +3002,7 @@ function Jt(e) {
|
|
|
2844
3002
|
}
|
|
2845
3003
|
return t;
|
|
2846
3004
|
}
|
|
2847
|
-
function
|
|
3005
|
+
function jn(e, t) {
|
|
2848
3006
|
let n = [];
|
|
2849
3007
|
if (e.length < 2 || t.length === 0) return n;
|
|
2850
3008
|
for (let r = 0; r < e.length; r++) {
|
|
@@ -2858,7 +3016,7 @@ function Yt(e, t) {
|
|
|
2858
3016
|
}
|
|
2859
3017
|
return n;
|
|
2860
3018
|
}
|
|
2861
|
-
function
|
|
3019
|
+
function Mn(e) {
|
|
2862
3020
|
let t = [];
|
|
2863
3021
|
if (e.length < 2) return t;
|
|
2864
3022
|
let n = /* @__PURE__ */ new Map();
|
|
@@ -2877,7 +3035,7 @@ function Xt(e) {
|
|
|
2877
3035
|
affectedMeasures: r
|
|
2878
3036
|
}), t;
|
|
2879
3037
|
}
|
|
2880
|
-
function
|
|
3038
|
+
function Nn(e) {
|
|
2881
3039
|
let t = [];
|
|
2882
3040
|
if (e.length < 2) return t;
|
|
2883
3041
|
let n = e.map((e) => e.timeDimensions?.[0]?.dateRange);
|
|
@@ -2887,39 +3045,45 @@ function Zt(e) {
|
|
|
2887
3045
|
message: "Queries have different date ranges - some data points may be missing in merged results"
|
|
2888
3046
|
}), t;
|
|
2889
3047
|
}
|
|
2890
|
-
function
|
|
3048
|
+
function Pn(e, t, n = []) {
|
|
2891
3049
|
let r = [], i = [];
|
|
2892
3050
|
return e.length < 2 ? {
|
|
2893
3051
|
isValid: !0,
|
|
2894
3052
|
errors: r,
|
|
2895
3053
|
warnings: i
|
|
2896
|
-
} : (i.push(...
|
|
3054
|
+
} : (i.push(...Mn(e)), i.push(...Nn(e)), t === "merge" && (r.push(...An(e)), n.length > 0 && r.push(...jn(e, n))), {
|
|
2897
3055
|
isValid: r.length === 0,
|
|
2898
3056
|
errors: r,
|
|
2899
3057
|
warnings: i
|
|
2900
3058
|
});
|
|
2901
3059
|
}
|
|
2902
|
-
function
|
|
2903
|
-
return
|
|
3060
|
+
function Fn(e) {
|
|
3061
|
+
return (e.measures?.length || 0) + (e.dimensions?.length || 0) + (e.timeDimensions?.length || 0);
|
|
2904
3062
|
}
|
|
2905
|
-
function
|
|
3063
|
+
function In(e) {
|
|
3064
|
+
return e.filter((e) => Fn(e) > 0).length >= 2;
|
|
3065
|
+
}
|
|
3066
|
+
function Ln(e, t) {
|
|
3067
|
+
return `${e} ${t}${e === 1 ? "" : "s"}`;
|
|
3068
|
+
}
|
|
3069
|
+
function Rn(e) {
|
|
2906
3070
|
if (e.isValid && e.warnings.length === 0) return "Configuration is valid";
|
|
2907
3071
|
let t = [];
|
|
2908
|
-
return e.errors.length > 0 && t.push(
|
|
3072
|
+
return e.errors.length > 0 && t.push(Ln(e.errors.length, "error")), e.warnings.length > 0 && t.push(Ln(e.warnings.length, "warning")), t.join(", ");
|
|
2909
3073
|
}
|
|
2910
3074
|
//#endregion
|
|
2911
3075
|
//#region src/client/hooks/useAnalysisQueryBuilder.ts
|
|
2912
|
-
function
|
|
2913
|
-
let e = $((e) => e.queryStates), t = $((e) => e.activeQueryIndex), n = $((e) => e.mergeStrategy), r = $((e) => e.setActiveQueryIndex), i = $((e) => e.setMergeStrategy), a = $((e) => e.addQuery), o = $((e) => e.removeQuery), s = $((e) => e.getCurrentState), c = $((e) => e.getMergeKeys), l = $((e) => e.isMultiQueryMode), u = s(), d = l(), f = c(), p =
|
|
3076
|
+
function zn() {
|
|
3077
|
+
let e = $((e) => e.queryStates), t = $((e) => e.activeQueryIndex), n = $((e) => e.mergeStrategy), r = $((e) => e.setActiveQueryIndex), i = $((e) => e.setMergeStrategy), a = $((e) => e.addQuery), o = $((e) => e.removeQuery), s = $((e) => e.getCurrentState), c = $((e) => e.getMergeKeys), l = $((e) => e.isMultiQueryMode), u = s(), d = l(), f = c(), p = R(() => {
|
|
2914
3078
|
let n = e[t] || u;
|
|
2915
|
-
return
|
|
3079
|
+
return G(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
|
|
2916
3080
|
}, [
|
|
2917
3081
|
e,
|
|
2918
3082
|
t,
|
|
2919
3083
|
u
|
|
2920
|
-
]), m =
|
|
3084
|
+
]), m = R(() => {
|
|
2921
3085
|
let t = e[0]?.breakdowns || [];
|
|
2922
|
-
return e.map((e, r) =>
|
|
3086
|
+
return e.map((e, r) => G(e.metrics, n === "merge" && r > 0 ? t : e.breakdowns, e.filters, e.order, !1, e.limit));
|
|
2923
3087
|
}, [e, n]);
|
|
2924
3088
|
return {
|
|
2925
3089
|
queryState: u,
|
|
@@ -2930,7 +3094,7 @@ function tn() {
|
|
|
2930
3094
|
mergeKeys: f,
|
|
2931
3095
|
currentQuery: p,
|
|
2932
3096
|
allQueries: m,
|
|
2933
|
-
multiQueryConfig:
|
|
3097
|
+
multiQueryConfig: R(() => {
|
|
2934
3098
|
if (e.length <= 1) return null;
|
|
2935
3099
|
let t = m.filter((e) => e.measures && e.measures.length > 0 || e.dimensions && e.dimensions.length > 0 || e.timeDimensions && e.timeDimensions.length > 0);
|
|
2936
3100
|
return t.length < 2 ? null : {
|
|
@@ -2945,13 +3109,13 @@ function tn() {
|
|
|
2945
3109
|
n,
|
|
2946
3110
|
f
|
|
2947
3111
|
]),
|
|
2948
|
-
multiQueryValidation:
|
|
3112
|
+
multiQueryValidation: R(() => d ? Pn(m, n, f || []) : null, [
|
|
2949
3113
|
d,
|
|
2950
3114
|
m,
|
|
2951
3115
|
n,
|
|
2952
3116
|
f
|
|
2953
3117
|
]),
|
|
2954
|
-
isValidQuery:
|
|
3118
|
+
isValidQuery: R(() => p.measures && p.measures.length > 0 || p.dimensions && p.dimensions.length > 0 || p.timeDimensions && p.timeDimensions.length > 0, [p]),
|
|
2955
3119
|
setActiveQueryIndex: r,
|
|
2956
3120
|
setMergeStrategy: i,
|
|
2957
3121
|
addQuery: a,
|
|
@@ -2960,10 +3124,10 @@ function tn() {
|
|
|
2960
3124
|
}
|
|
2961
3125
|
//#endregion
|
|
2962
3126
|
//#region src/client/hooks/useAnalysisCombinedFields.ts
|
|
2963
|
-
function
|
|
3127
|
+
function Bn(e) {
|
|
2964
3128
|
let { queryState: t, queryStates: n, isMultiQueryMode: r, mergeStrategy: i, activeQueryIndex: a } = e;
|
|
2965
3129
|
return {
|
|
2966
|
-
combinedMetrics:
|
|
3130
|
+
combinedMetrics: R(() => {
|
|
2967
3131
|
if (!r) return t.metrics;
|
|
2968
3132
|
let e = /* @__PURE__ */ new Set(), i = [];
|
|
2969
3133
|
for (let t = 0; t < n.length; t++) {
|
|
@@ -2982,7 +3146,7 @@ function nn(e) {
|
|
|
2982
3146
|
n,
|
|
2983
3147
|
t.metrics
|
|
2984
3148
|
]),
|
|
2985
|
-
combinedBreakdowns:
|
|
3149
|
+
combinedBreakdowns: R(() => {
|
|
2986
3150
|
if (!r) return t.breakdowns;
|
|
2987
3151
|
let e = /* @__PURE__ */ new Set(), i = [];
|
|
2988
3152
|
for (let t of n) for (let n of t.breakdowns) e.has(n.field) || (e.add(n.field), i.push(n));
|
|
@@ -2992,7 +3156,7 @@ function nn(e) {
|
|
|
2992
3156
|
n,
|
|
2993
3157
|
t.breakdowns
|
|
2994
3158
|
]),
|
|
2995
|
-
effectiveBreakdowns:
|
|
3159
|
+
effectiveBreakdowns: R(() => i === "merge" && a > 0 ? n[0]?.breakdowns || [] : t.breakdowns, [
|
|
2996
3160
|
i,
|
|
2997
3161
|
a,
|
|
2998
3162
|
n,
|
|
@@ -3001,158 +3165,276 @@ function nn(e) {
|
|
|
3001
3165
|
};
|
|
3002
3166
|
}
|
|
3003
3167
|
//#endregion
|
|
3168
|
+
//#region src/client/hooks/analysisQueryExecutionModes.ts
|
|
3169
|
+
function Vn(e) {
|
|
3170
|
+
return e.isRetentionMode ? "retention" : e.isFlowMode ? "flow" : e.isFunnelMode ? "funnel" : e.isMultiMode ? "multi" : "single";
|
|
3171
|
+
}
|
|
3172
|
+
function Hn(e, t) {
|
|
3173
|
+
return t[e];
|
|
3174
|
+
}
|
|
3175
|
+
function Un(e) {
|
|
3176
|
+
return {
|
|
3177
|
+
funnelExecutedQueries: e.isFunnelMode && e.funnelExecutedQueries && e.funnelExecutedQueries.length > 0 ? e.funnelExecutedQueries : null,
|
|
3178
|
+
funnelServerQuery: e.isFunnelMode ? e.funnelServerQuery : null,
|
|
3179
|
+
funnelDebugData: e.isFunnelMode ? e.funnelDebugData : null,
|
|
3180
|
+
flowServerQuery: e.isFlowMode ? e.flowServerQuery : null,
|
|
3181
|
+
flowChartData: e.isFlowMode ? e.flowData : null,
|
|
3182
|
+
flowDebugData: e.isFlowMode ? e.flowDebugData : null,
|
|
3183
|
+
retentionServerQuery: e.isRetentionMode ? e.retentionServerQuery : null,
|
|
3184
|
+
retentionChartData: e.isRetentionMode ? e.retentionChartData : null,
|
|
3185
|
+
retentionDebugData: e.isRetentionMode ? e.retentionDebugData : null
|
|
3186
|
+
};
|
|
3187
|
+
}
|
|
3188
|
+
function Wn(e) {
|
|
3189
|
+
return {
|
|
3190
|
+
single: !e.isValidQuery || !e.isSingleMode,
|
|
3191
|
+
multi: !e.hasMultiQueryConfig || !e.isMultiMode,
|
|
3192
|
+
funnel: !e.isFunnelMode || !e.hasFunnelConfig && !e.hasServerFunnelQuery,
|
|
3193
|
+
flow: !e.isFlowMode || !e.hasServerFlowQuery,
|
|
3194
|
+
retention: !e.isRetentionMode || !e.hasServerRetentionQuery,
|
|
3195
|
+
dryRun: !!(!e.isValidQuery || e.isFunnelMode || e.isFlowMode || e.isRetentionMode)
|
|
3196
|
+
};
|
|
3197
|
+
}
|
|
3198
|
+
function Gn(e) {
|
|
3199
|
+
let { hasResults: t, initialData: n, isValidQuery: r, isLoading: i, isFetching: a, error: o } = e;
|
|
3200
|
+
return n && n.length > 0 && !t ? "success" : r ? i && !t ? "loading" : a && t ? "refreshing" : o ? "error" : t ? "success" : "idle" : "idle";
|
|
3201
|
+
}
|
|
3202
|
+
function Kn(e) {
|
|
3203
|
+
return e.isRetentionMode && e.retentionChartData ? e.retentionChartData.rows.map((e) => ({
|
|
3204
|
+
"Retention.period": `P${e.period}`,
|
|
3205
|
+
"Retention.rate": e.retentionRate,
|
|
3206
|
+
"Retention.retained": e.retainedUsers,
|
|
3207
|
+
"Retention.cohortSize": e.cohortSize,
|
|
3208
|
+
"Retention.segment": e.breakdownValue || "All Users"
|
|
3209
|
+
})) : e.isFlowMode && e.flowData ? [e.flowData] : e.isFunnelMode && e.funnelChartData ? e.funnelChartData : e.isMultiMode && e.multiData ? e.multiData : e.singleRawData ? e.singleRawData : e.initialData && e.initialData.length > 0 ? e.initialData : null;
|
|
3210
|
+
}
|
|
3211
|
+
//#endregion
|
|
3004
3212
|
//#region src/client/hooks/useAnalysisQueryExecution.ts
|
|
3005
|
-
function
|
|
3006
|
-
let { currentQuery: t, allQueries: n, multiQueryConfig: r, isMultiQueryMode: i, isValidQuery: a, initialData: o, mergeStrategy: s, funnelBindingKey: c, isFunnelModeEnabled: l, analysisType: u, serverFunnelQuery: d, serverFlowQuery: f, serverRetentionQuery:
|
|
3007
|
-
|
|
3008
|
-
|
|
3213
|
+
function qn(e) {
|
|
3214
|
+
let { currentQuery: t, allQueries: n, multiQueryConfig: r, isMultiQueryMode: i, isValidQuery: a, initialData: o, mergeStrategy: s, funnelBindingKey: c, isFunnelModeEnabled: l, analysisType: u, serverFunnelQuery: d, serverFlowQuery: f, serverRetentionQuery: p, retentionValidation: m } = e, { getFieldLabel: h } = ee(), g = u === "funnel" || l, _ = u === "flow", v = u === "retention", y = u === "query" && i, b = u === "query" && !i, x = u === "funnel" && !!d, S = Vn({
|
|
3215
|
+
isRetentionMode: v,
|
|
3216
|
+
isFlowMode: _,
|
|
3217
|
+
isFunnelMode: g,
|
|
3218
|
+
isMultiMode: y
|
|
3219
|
+
}), C = R(() => x || !g || !c || n.length < 2 ? null : fe(n, c), [
|
|
3220
|
+
x,
|
|
3221
|
+
g,
|
|
3009
3222
|
c,
|
|
3010
3223
|
n
|
|
3011
|
-
]),
|
|
3012
|
-
|
|
3224
|
+
]), w = Wn({
|
|
3225
|
+
isValidQuery: a,
|
|
3226
|
+
isSingleMode: b,
|
|
3227
|
+
isMultiMode: y,
|
|
3228
|
+
isFunnelMode: g,
|
|
3229
|
+
isFlowMode: _,
|
|
3230
|
+
isRetentionMode: v,
|
|
3231
|
+
hasMultiQueryConfig: !!r,
|
|
3232
|
+
hasFunnelConfig: !!C,
|
|
3233
|
+
hasServerFunnelQuery: !!d,
|
|
3234
|
+
hasServerFlowQuery: !!f,
|
|
3235
|
+
hasServerRetentionQuery: !!p
|
|
3236
|
+
}), T = ne(t, {
|
|
3237
|
+
skip: w.single,
|
|
3013
3238
|
debounceMs: 300
|
|
3014
|
-
}),
|
|
3015
|
-
skip:
|
|
3239
|
+
}), E = ie(r, {
|
|
3240
|
+
skip: w.multi,
|
|
3016
3241
|
debounceMs: 300
|
|
3017
|
-
}),
|
|
3018
|
-
skip:
|
|
3242
|
+
}), D = oe(C, {
|
|
3243
|
+
skip: w.funnel,
|
|
3019
3244
|
debounceMs: 300,
|
|
3020
|
-
prebuiltServerQuery:
|
|
3021
|
-
}),
|
|
3022
|
-
skip:
|
|
3245
|
+
prebuiltServerQuery: x ? d : void 0
|
|
3246
|
+
}), O = le(f ?? null, {
|
|
3247
|
+
skip: w.flow,
|
|
3023
3248
|
debounceMs: 300
|
|
3024
|
-
}),
|
|
3025
|
-
skip:
|
|
3249
|
+
}), k = re(p ?? null, {
|
|
3250
|
+
skip: w.retention,
|
|
3026
3251
|
debounceMs: 300,
|
|
3027
|
-
getFieldLabel:
|
|
3028
|
-
}),
|
|
3252
|
+
getFieldLabel: h
|
|
3253
|
+
}), te = de({
|
|
3029
3254
|
queries: i ? n : [t],
|
|
3030
3255
|
isMultiQueryMode: i,
|
|
3031
|
-
skip:
|
|
3032
|
-
}),
|
|
3033
|
-
|
|
3256
|
+
skip: w.dryRun
|
|
3257
|
+
}), A = ue(D.serverQuery, { skip: !g || !D.serverQuery }), ae = ue(O.serverQuery, { skip: !_ || !O.serverQuery }), se = ue(p, { skip: !v || !p }), ce = Hn(S, {
|
|
3258
|
+
retention: k.isLoading || k.isDebouncing,
|
|
3259
|
+
flow: O.isLoading || O.isDebouncing,
|
|
3260
|
+
funnel: D.isExecuting || D.isDebouncing,
|
|
3261
|
+
multi: E.isLoading,
|
|
3262
|
+
single: T.isLoading
|
|
3263
|
+
}), j = Hn(S, {
|
|
3264
|
+
retention: k.isFetching,
|
|
3265
|
+
flow: O.isFetching,
|
|
3266
|
+
funnel: D.isExecuting,
|
|
3267
|
+
multi: E.isFetching,
|
|
3268
|
+
single: T.isFetching
|
|
3269
|
+
}), M = Hn(S, {
|
|
3270
|
+
retention: k.error,
|
|
3271
|
+
flow: O.error,
|
|
3272
|
+
funnel: D.error,
|
|
3273
|
+
multi: E.error,
|
|
3274
|
+
single: T.error
|
|
3275
|
+
}), N = !!(T.debouncedQuery || E.debouncedConfig || !D.isDebouncing || !O.isDebouncing || !k.isDebouncing), P = I((e) => {
|
|
3276
|
+
switch (S) {
|
|
3277
|
+
case "retention":
|
|
3278
|
+
k.execute(e);
|
|
3279
|
+
break;
|
|
3280
|
+
case "flow":
|
|
3281
|
+
O.refetch(e);
|
|
3282
|
+
break;
|
|
3283
|
+
case "funnel":
|
|
3284
|
+
D.execute(e);
|
|
3285
|
+
break;
|
|
3286
|
+
case "multi":
|
|
3287
|
+
E.refetch(e);
|
|
3288
|
+
break;
|
|
3289
|
+
default: T.refetch(e);
|
|
3290
|
+
}
|
|
3034
3291
|
}, [
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3292
|
+
S,
|
|
3293
|
+
k,
|
|
3294
|
+
O,
|
|
3295
|
+
D,
|
|
3038
3296
|
E,
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3297
|
+
T
|
|
3298
|
+
]), F = R(() => Gn({
|
|
3299
|
+
hasResults: Hn(S, {
|
|
3300
|
+
retention: k.chartData,
|
|
3301
|
+
flow: O.data,
|
|
3302
|
+
funnel: D.chartData,
|
|
3303
|
+
multi: E.data,
|
|
3304
|
+
single: T.rawData
|
|
3305
|
+
}),
|
|
3306
|
+
initialData: o,
|
|
3307
|
+
isValidQuery: a,
|
|
3308
|
+
isLoading: ce,
|
|
3309
|
+
isFetching: j,
|
|
3310
|
+
error: M
|
|
3311
|
+
}), [
|
|
3048
3312
|
a,
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
|
|
3313
|
+
ce,
|
|
3314
|
+
j,
|
|
3315
|
+
M,
|
|
3316
|
+
T.rawData,
|
|
3317
|
+
E.data,
|
|
3318
|
+
D.chartData,
|
|
3319
|
+
O.data,
|
|
3320
|
+
k.chartData,
|
|
3057
3321
|
o,
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3061
|
-
|
|
3062
|
-
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3322
|
+
S
|
|
3323
|
+
]), pe = R(() => Kn({
|
|
3324
|
+
isRetentionMode: v,
|
|
3325
|
+
isFlowMode: _,
|
|
3326
|
+
isFunnelMode: g,
|
|
3327
|
+
isMultiMode: y,
|
|
3328
|
+
retentionChartData: k.chartData,
|
|
3329
|
+
flowData: O.data,
|
|
3330
|
+
funnelChartData: D.chartData,
|
|
3331
|
+
multiData: E.data,
|
|
3332
|
+
singleRawData: T.rawData,
|
|
3333
|
+
initialData: o
|
|
3334
|
+
}), [
|
|
3335
|
+
T.rawData,
|
|
3336
|
+
E.data,
|
|
3337
|
+
D.chartData,
|
|
3338
|
+
O.data,
|
|
3339
|
+
k.chartData,
|
|
3074
3340
|
o,
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
]),
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
]),
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3341
|
+
y,
|
|
3342
|
+
g,
|
|
3343
|
+
_,
|
|
3344
|
+
v
|
|
3345
|
+
]), L = R(() => g && D.stepResults ? D.stepResults.map((e) => e.data) : !y || !E.perQueryData ? null : E.perQueryData, [
|
|
3346
|
+
y,
|
|
3347
|
+
g,
|
|
3348
|
+
E.perQueryData,
|
|
3349
|
+
D.stepResults
|
|
3350
|
+
]), { funnelExecutedQueries: z, funnelServerQuery: B, funnelDebugData: V, flowServerQuery: H, flowChartData: U, flowDebugData: me, retentionServerQuery: W, retentionChartData: he, retentionDebugData: ge } = Un({
|
|
3351
|
+
isFunnelMode: g,
|
|
3352
|
+
isFlowMode: _,
|
|
3353
|
+
isRetentionMode: v,
|
|
3354
|
+
funnelExecutedQueries: D.executedQueries,
|
|
3355
|
+
funnelServerQuery: D.serverQuery,
|
|
3356
|
+
funnelDebugData: A.debugData,
|
|
3357
|
+
flowServerQuery: O.serverQuery,
|
|
3358
|
+
flowData: O.data,
|
|
3359
|
+
flowDebugData: ae.debugData,
|
|
3360
|
+
retentionServerQuery: p ?? null,
|
|
3361
|
+
retentionChartData: k.chartData,
|
|
3362
|
+
retentionDebugData: se.debugData
|
|
3363
|
+
}), _e = R(() => Hn(S, {
|
|
3364
|
+
retention: k.needsRefresh,
|
|
3365
|
+
flow: O.needsRefresh,
|
|
3366
|
+
funnel: D.needsRefresh,
|
|
3367
|
+
multi: !1,
|
|
3368
|
+
single: T.needsRefresh
|
|
3369
|
+
}), [
|
|
3370
|
+
S,
|
|
3371
|
+
k.needsRefresh,
|
|
3372
|
+
O.needsRefresh,
|
|
3373
|
+
D.needsRefresh,
|
|
3374
|
+
T.needsRefresh
|
|
3375
|
+
]), ve = R(() => {
|
|
3376
|
+
if (b && T.warnings) return T.warnings;
|
|
3377
|
+
}, [b, T.warnings]);
|
|
3096
3378
|
return {
|
|
3097
|
-
executionStatus:
|
|
3098
|
-
executionResults:
|
|
3099
|
-
perQueryResults:
|
|
3100
|
-
isLoading:
|
|
3101
|
-
isFetching:
|
|
3102
|
-
error:
|
|
3103
|
-
debugDataPerQuery:
|
|
3104
|
-
hasDebounced:
|
|
3105
|
-
refetch:
|
|
3379
|
+
executionStatus: F,
|
|
3380
|
+
executionResults: pe,
|
|
3381
|
+
perQueryResults: L,
|
|
3382
|
+
isLoading: ce,
|
|
3383
|
+
isFetching: j,
|
|
3384
|
+
error: M,
|
|
3385
|
+
debugDataPerQuery: te.debugDataPerQuery,
|
|
3386
|
+
hasDebounced: N,
|
|
3387
|
+
refetch: P,
|
|
3106
3388
|
funnelExecutedQueries: z,
|
|
3107
|
-
funnelServerQuery:
|
|
3108
|
-
funnelDebugData:
|
|
3109
|
-
flowServerQuery:
|
|
3110
|
-
flowChartData:
|
|
3111
|
-
flowDebugData:
|
|
3112
|
-
retentionServerQuery:
|
|
3113
|
-
retentionChartData:
|
|
3114
|
-
retentionDebugData:
|
|
3115
|
-
retentionValidation:
|
|
3116
|
-
needsRefresh:
|
|
3117
|
-
warnings:
|
|
3389
|
+
funnelServerQuery: B,
|
|
3390
|
+
funnelDebugData: V,
|
|
3391
|
+
flowServerQuery: H,
|
|
3392
|
+
flowChartData: U,
|
|
3393
|
+
flowDebugData: me,
|
|
3394
|
+
retentionServerQuery: W,
|
|
3395
|
+
retentionChartData: he,
|
|
3396
|
+
retentionDebugData: ge,
|
|
3397
|
+
retentionValidation: m ?? null,
|
|
3398
|
+
needsRefresh: _e,
|
|
3399
|
+
warnings: ve
|
|
3118
3400
|
};
|
|
3119
3401
|
}
|
|
3120
3402
|
//#endregion
|
|
3121
3403
|
//#region src/client/hooks/useAnalysisChartDefaults.ts
|
|
3122
|
-
function
|
|
3123
|
-
let { externalColorPalette: t, combinedMetrics: r, combinedBreakdowns: i, hasDebounced: a } = e, o = $((e) => e.analysisType), { chartType: s, chartConfig: c, displayConfig: l } = $(n(
|
|
3124
|
-
if (o === "funnel")
|
|
3404
|
+
function Jn(e) {
|
|
3405
|
+
let { externalColorPalette: t, combinedMetrics: r, combinedBreakdowns: i, hasDebounced: a } = e, o = $((e) => e.analysisType), { chartType: s, chartConfig: c, displayConfig: l } = $(n(Tn)), u = $((e) => e.userManuallySelectedChart), d = $((e) => e.localPaletteName), p = $((e) => e.setChartTypeManual), m = $((e) => e.setChartConfig), h = $((e) => e.setDisplayConfig), g = $((e) => e.setFunnelChartType), _ = $((e) => e.setFunnelChartConfig), v = $((e) => e.setFunnelDisplayConfig), y = $((e) => e.setLocalPaletteName), b = $((e) => e.setUserManuallySelectedChart), x = I((e) => {
|
|
3406
|
+
if (o === "funnel") g(e);
|
|
3125
3407
|
else {
|
|
3126
|
-
|
|
3127
|
-
let { chartConfig: t } =
|
|
3128
|
-
|
|
3408
|
+
p(e);
|
|
3409
|
+
let { chartConfig: t } = Dt(r, i, e);
|
|
3410
|
+
m(t);
|
|
3129
3411
|
}
|
|
3130
3412
|
}, [
|
|
3131
3413
|
o,
|
|
3132
3414
|
r,
|
|
3133
3415
|
i,
|
|
3134
|
-
h,
|
|
3135
|
-
f,
|
|
3136
|
-
p
|
|
3137
|
-
]), x = R((e) => {
|
|
3138
|
-
o === "funnel" ? g(e) : p(e);
|
|
3139
|
-
}, [
|
|
3140
|
-
o,
|
|
3141
3416
|
g,
|
|
3142
|
-
p
|
|
3143
|
-
|
|
3417
|
+
p,
|
|
3418
|
+
m
|
|
3419
|
+
]), S = I((e) => {
|
|
3144
3420
|
o === "funnel" ? _(e) : m(e);
|
|
3145
3421
|
}, [
|
|
3146
3422
|
o,
|
|
3147
3423
|
_,
|
|
3148
3424
|
m
|
|
3149
|
-
]), C =
|
|
3425
|
+
]), C = I((e) => {
|
|
3426
|
+
o === "funnel" ? v(e) : h(e);
|
|
3427
|
+
}, [
|
|
3428
|
+
o,
|
|
3429
|
+
v,
|
|
3430
|
+
h
|
|
3431
|
+
]), w = R(() => Tt(r, i), [r, i]), T = R(() => t ? Array.isArray(t) && typeof t[0] == "string" ? {
|
|
3150
3432
|
name: "custom",
|
|
3151
3433
|
label: "Custom",
|
|
3152
3434
|
colors: t,
|
|
3153
3435
|
gradient: t
|
|
3154
|
-
} : t :
|
|
3155
|
-
return
|
|
3436
|
+
} : t : f(d), [t, d]), E = z("");
|
|
3437
|
+
return L(() => {
|
|
3156
3438
|
if (!a || r.length === 0 && i.length === 0) return;
|
|
3157
3439
|
let e = JSON.stringify({
|
|
3158
3440
|
metrics: r.map((e) => e.field),
|
|
@@ -3161,22 +3443,22 @@ function an(e) {
|
|
|
3161
3443
|
isTime: e.isTimeDimension
|
|
3162
3444
|
}))
|
|
3163
3445
|
});
|
|
3164
|
-
if (e ===
|
|
3165
|
-
|
|
3166
|
-
let t =
|
|
3446
|
+
if (e === E.current) return;
|
|
3447
|
+
E.current = e;
|
|
3448
|
+
let t = kt(r, i, s, u);
|
|
3167
3449
|
if (t) {
|
|
3168
|
-
let { chartConfig: e } =
|
|
3169
|
-
|
|
3450
|
+
let { chartConfig: e } = Dt(r, i, t);
|
|
3451
|
+
x(t), S(e), b(!1);
|
|
3170
3452
|
} else if (r.length > 0 || i.length > 0) {
|
|
3171
3453
|
if (s === "table") {
|
|
3172
3454
|
let e = [...i.map((e) => e.field), ...r.map((e) => e.field)], t = Array.isArray(c.xAxis) ? c.xAxis : [], n = e.filter((e) => !t.includes(e));
|
|
3173
|
-
n.length > 0 &&
|
|
3455
|
+
n.length > 0 && S({
|
|
3174
3456
|
...c,
|
|
3175
3457
|
xAxis: [...t, ...n]
|
|
3176
3458
|
});
|
|
3177
3459
|
} else if (!c.xAxis?.length && !c.yAxis?.length && !c.series?.length) {
|
|
3178
|
-
let { chartConfig: e } =
|
|
3179
|
-
|
|
3460
|
+
let { chartConfig: e } = Dt(r, i, s);
|
|
3461
|
+
S(e);
|
|
3180
3462
|
}
|
|
3181
3463
|
}
|
|
3182
3464
|
}, [
|
|
@@ -3186,27 +3468,27 @@ function an(e) {
|
|
|
3186
3468
|
s,
|
|
3187
3469
|
u,
|
|
3188
3470
|
c,
|
|
3189
|
-
b,
|
|
3190
3471
|
x,
|
|
3191
|
-
|
|
3472
|
+
S,
|
|
3473
|
+
b
|
|
3192
3474
|
]), {
|
|
3193
3475
|
chartType: s,
|
|
3194
3476
|
chartConfig: c,
|
|
3195
3477
|
displayConfig: l,
|
|
3196
|
-
colorPalette:
|
|
3478
|
+
colorPalette: T,
|
|
3197
3479
|
localPaletteName: d,
|
|
3198
|
-
chartAvailability:
|
|
3480
|
+
chartAvailability: w,
|
|
3199
3481
|
userManuallySelectedChart: u,
|
|
3200
|
-
setChartType:
|
|
3201
|
-
setChartConfig:
|
|
3202
|
-
setDisplayConfig:
|
|
3203
|
-
setLocalPaletteName:
|
|
3482
|
+
setChartType: x,
|
|
3483
|
+
setChartConfig: S,
|
|
3484
|
+
setDisplayConfig: C,
|
|
3485
|
+
setLocalPaletteName: y
|
|
3204
3486
|
};
|
|
3205
3487
|
}
|
|
3206
3488
|
//#endregion
|
|
3207
3489
|
//#region src/client/hooks/useAnalysisUIState.ts
|
|
3208
|
-
function
|
|
3209
|
-
let e = $((e) => e.activeTab), t = $((e) => e.activeView), n = $((e) => e.displayLimit), r = $((e) => e.showFieldModal), i = $((e) => e.fieldModalMode), a = $((e) => e.userManuallySelectedChart), o = $((e) => e.setActiveTab), s = $((e) => e.setActiveView), c = $((e) => e.setDisplayLimit), l = $((e) => e.closeFieldModal), [u, d] =
|
|
3490
|
+
function Yn() {
|
|
3491
|
+
let e = $((e) => e.activeTab), t = $((e) => e.activeView), n = $((e) => e.displayLimit), r = $((e) => e.showFieldModal), i = $((e) => e.fieldModalMode), a = $((e) => e.userManuallySelectedChart), o = $((e) => e.setActiveTab), s = $((e) => e.setActiveView), c = $((e) => e.setDisplayLimit), l = $((e) => e.closeFieldModal), [u, d] = B(0);
|
|
3210
3492
|
return {
|
|
3211
3493
|
activeTab: e,
|
|
3212
3494
|
activeView: t,
|
|
@@ -3224,42 +3506,42 @@ function on() {
|
|
|
3224
3506
|
}
|
|
3225
3507
|
//#endregion
|
|
3226
3508
|
//#region src/client/utils/shareUtils.ts
|
|
3227
|
-
var
|
|
3228
|
-
function
|
|
3229
|
-
return (0,
|
|
3509
|
+
var Xn = o(), Zn = 1800, Qn = "share=";
|
|
3510
|
+
function $n(e) {
|
|
3511
|
+
return (0, Xn.compressToEncodedURIComponent)(JSON.stringify(e));
|
|
3230
3512
|
}
|
|
3231
|
-
function
|
|
3513
|
+
function er(e) {
|
|
3232
3514
|
try {
|
|
3233
|
-
let t = (0,
|
|
3515
|
+
let t = (0, Xn.decompressFromEncodedURIComponent)(e);
|
|
3234
3516
|
if (!t) return null;
|
|
3235
3517
|
let n = JSON.parse(t);
|
|
3236
|
-
return
|
|
3518
|
+
return v(n) ? n : (console.warn("[shareUtils] Invalid AnalysisConfig in share URL"), null);
|
|
3237
3519
|
} catch {
|
|
3238
3520
|
return null;
|
|
3239
3521
|
}
|
|
3240
3522
|
}
|
|
3241
|
-
function
|
|
3242
|
-
let t =
|
|
3523
|
+
function tr(e) {
|
|
3524
|
+
let t = $n(e);
|
|
3243
3525
|
return {
|
|
3244
|
-
ok: t.length <=
|
|
3526
|
+
ok: t.length <= Zn,
|
|
3245
3527
|
size: t.length,
|
|
3246
|
-
maxSize:
|
|
3528
|
+
maxSize: Zn
|
|
3247
3529
|
};
|
|
3248
3530
|
}
|
|
3249
|
-
function
|
|
3250
|
-
let t =
|
|
3251
|
-
if (t.length <=
|
|
3531
|
+
function nr(e) {
|
|
3532
|
+
let t = $n(e);
|
|
3533
|
+
if (t.length <= Zn) return {
|
|
3252
3534
|
encoded: t,
|
|
3253
3535
|
queryOnly: !1
|
|
3254
3536
|
};
|
|
3255
|
-
let n =
|
|
3537
|
+
let n = $n({
|
|
3256
3538
|
version: e.version,
|
|
3257
3539
|
analysisType: e.analysisType,
|
|
3258
3540
|
activeView: e.activeView,
|
|
3259
3541
|
charts: {},
|
|
3260
3542
|
query: e.query
|
|
3261
3543
|
});
|
|
3262
|
-
return n.length <=
|
|
3544
|
+
return n.length <= Zn ? {
|
|
3263
3545
|
encoded: n,
|
|
3264
3546
|
queryOnly: !0
|
|
3265
3547
|
} : {
|
|
@@ -3267,40 +3549,40 @@ function pn(e) {
|
|
|
3267
3549
|
queryOnly: !0
|
|
3268
3550
|
};
|
|
3269
3551
|
}
|
|
3270
|
-
function
|
|
3271
|
-
let { encoded: t } =
|
|
3272
|
-
return t ? `${window.location.origin}${window.location.pathname}#${
|
|
3552
|
+
function rr(e) {
|
|
3553
|
+
let { encoded: t } = nr(e);
|
|
3554
|
+
return t ? `${window.location.origin}${window.location.pathname}#${Qn}${t}` : null;
|
|
3273
3555
|
}
|
|
3274
|
-
function
|
|
3556
|
+
function ir() {
|
|
3275
3557
|
if (typeof window > "u") return null;
|
|
3276
3558
|
let e = window.location.hash;
|
|
3277
|
-
return !e || !e.startsWith(`#${
|
|
3559
|
+
return !e || !e.startsWith(`#${Qn}`) ? null : e.slice(7);
|
|
3278
3560
|
}
|
|
3279
|
-
function
|
|
3561
|
+
function ar() {
|
|
3280
3562
|
if (typeof window > "u") return;
|
|
3281
3563
|
let e = new URL(window.location.href);
|
|
3282
3564
|
e.hash = "", window.history.replaceState(null, "", e.toString());
|
|
3283
3565
|
}
|
|
3284
|
-
function
|
|
3285
|
-
let e =
|
|
3286
|
-
return e ?
|
|
3566
|
+
function or() {
|
|
3567
|
+
let e = ir();
|
|
3568
|
+
return e ? er(e) : null;
|
|
3287
3569
|
}
|
|
3288
3570
|
//#endregion
|
|
3289
3571
|
//#region src/client/hooks/useAnalysisInitialization.ts
|
|
3290
|
-
function
|
|
3291
|
-
let { currentQuery: t, isValidQuery: n, chartType: r, chartConfig: i, displayConfig: a, onQueryChange: o, onChartConfigChange: s } = e, c = $((e) => e.load), l =
|
|
3292
|
-
|
|
3572
|
+
function sr(e) {
|
|
3573
|
+
let { currentQuery: t, isValidQuery: n, chartType: r, chartConfig: i, displayConfig: a, onQueryChange: o, onChartConfigChange: s } = e, c = $((e) => e.load), l = z(!1);
|
|
3574
|
+
L(() => {
|
|
3293
3575
|
if (l.current) return;
|
|
3294
3576
|
l.current = !0;
|
|
3295
|
-
let e =
|
|
3296
|
-
e && (c(e),
|
|
3297
|
-
}, [c]),
|
|
3577
|
+
let e = or();
|
|
3578
|
+
e && (c(e), ar());
|
|
3579
|
+
}, [c]), L(() => {
|
|
3298
3580
|
o && n && o(t);
|
|
3299
3581
|
}, [
|
|
3300
3582
|
t,
|
|
3301
3583
|
n,
|
|
3302
3584
|
o
|
|
3303
|
-
]),
|
|
3585
|
+
]), L(() => {
|
|
3304
3586
|
s && s({
|
|
3305
3587
|
chartType: r,
|
|
3306
3588
|
chartConfig: i,
|
|
@@ -3315,99 +3597,99 @@ function vn(e) {
|
|
|
3315
3597
|
}
|
|
3316
3598
|
//#endregion
|
|
3317
3599
|
//#region src/client/hooks/useAnalysisBuilderHook.ts
|
|
3318
|
-
function
|
|
3319
|
-
let { initialData: t, externalColorPalette: n, onQueryChange: r, onChartConfigChange: i } = e, { features: a } =
|
|
3320
|
-
queryState:
|
|
3321
|
-
queryStates:
|
|
3322
|
-
isMultiQueryMode:
|
|
3323
|
-
mergeStrategy:
|
|
3324
|
-
activeQueryIndex:
|
|
3325
|
-
}), u = $((e) => e.funnelBindingKey), d = $((e) => e.analysisType), f = $((e) => e.funnelCube), p = $((e) => e.funnelSteps), m = $((e) => e.activeFunnelStepIndex), h = $((e) => e.funnelTimeDimension), g =
|
|
3600
|
+
function cr(e = {}) {
|
|
3601
|
+
let { initialData: t, externalColorPalette: n, onQueryChange: r, onChartConfigChange: i } = e, { features: a } = s(), o = bn(), c = zn(), l = Bn({
|
|
3602
|
+
queryState: c.queryState,
|
|
3603
|
+
queryStates: c.queryStates,
|
|
3604
|
+
isMultiQueryMode: c.isMultiQueryMode,
|
|
3605
|
+
mergeStrategy: c.mergeStrategy,
|
|
3606
|
+
activeQueryIndex: c.activeQueryIndex
|
|
3607
|
+
}), u = $((e) => e.funnelBindingKey), d = $((e) => e.analysisType), f = $((e) => e.funnelCube), p = $((e) => e.funnelSteps), m = $((e) => e.activeFunnelStepIndex), h = $((e) => e.funnelTimeDimension), g = R(() => d !== "funnel" || !u?.dimension || !h || !p || p.length < 2 ? !1 : p.every((e) => e.filters.length > 0), [
|
|
3326
3608
|
d,
|
|
3327
3609
|
u,
|
|
3328
3610
|
h,
|
|
3329
3611
|
p
|
|
3330
|
-
]), _ = $((e) => e.charts.funnel?.chartType) || "funnel", v = $((e) => e.charts.funnel?.chartConfig), y =
|
|
3612
|
+
]), _ = $((e) => e.charts.funnel?.chartType) || "funnel", v = $((e) => e.charts.funnel?.chartConfig), y = R(() => v || {}, [v]), b = $((e) => e.flowCube), x = $((e) => e.flowBindingKey), S = $((e) => e.flowTimeDimension), C = $((e) => e.eventDimension), w = $((e) => e.startingStep), T = $((e) => e.stepsBefore), E = $((e) => e.stepsAfter), D = $((e) => e.joinStrategy), ee = $((e) => e.charts.flow?.displayConfig), O = R(() => ee || {
|
|
3331
3613
|
showLegend: !0,
|
|
3332
3614
|
showGrid: !0,
|
|
3333
3615
|
showTooltip: !0
|
|
3334
|
-
}, [
|
|
3616
|
+
}, [ee]), k = $((e) => e.charts.flow?.chartType) || "sankey", te = $((e) => e.buildFunnelQueryFromSteps), ne = R(() => d === "funnel" ? te() : null, [
|
|
3335
3617
|
d,
|
|
3336
|
-
|
|
3618
|
+
te,
|
|
3337
3619
|
p
|
|
3338
|
-
]), A = $((e) => e.buildFlowQuery),
|
|
3620
|
+
]), A = $((e) => e.buildFlowQuery), re = R(() => d === "flow" ? A() : null, [
|
|
3339
3621
|
d,
|
|
3340
3622
|
A,
|
|
3341
3623
|
b,
|
|
3342
3624
|
x,
|
|
3343
3625
|
S,
|
|
3344
3626
|
C,
|
|
3345
|
-
ee,
|
|
3346
3627
|
w,
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3628
|
+
T,
|
|
3629
|
+
E,
|
|
3630
|
+
k,
|
|
3631
|
+
D
|
|
3632
|
+
]), ie = $((e) => e.retentionCube), ae = $((e) => e.retentionBindingKey), oe = $((e) => e.retentionTimeDimension), se = $((e) => e.retentionDateRange), ce = $((e) => e.retentionCohortFilters), le = $((e) => e.retentionActivityFilters), ue = $((e) => e.retentionBreakdowns), de = $((e) => e.retentionViewGranularity), fe = $((e) => e.retentionPeriods), j = $((e) => e.retentionType), M = $((e) => e.buildRetentionQuery), N = $((e) => e.getRetentionValidation), P = $((e) => e.charts.retention?.displayConfig), F = $((e) => e.setRetentionCube), pe = $((e) => e.setRetentionBindingKey), L = $((e) => e.setRetentionTimeDimension), B = $((e) => e.setRetentionDateRange), V = $((e) => e.setRetentionCohortFilters), H = $((e) => e.setRetentionActivityFilters), U = $((e) => e.setRetentionBreakdowns), me = $((e) => e.addRetentionBreakdown), W = $((e) => e.removeRetentionBreakdown), he = $((e) => e.setRetentionViewGranularity), ge = $((e) => e.setRetentionPeriods), _e = $((e) => e.setRetentionType), ve = R(() => d === "retention" ? M() : null, [
|
|
3351
3633
|
d,
|
|
3352
|
-
I,
|
|
3353
3634
|
M,
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
re,
|
|
3635
|
+
ie,
|
|
3636
|
+
ae,
|
|
3357
3637
|
oe,
|
|
3358
3638
|
se,
|
|
3359
|
-
|
|
3639
|
+
ue,
|
|
3640
|
+
de,
|
|
3641
|
+
fe,
|
|
3642
|
+
j,
|
|
3360
3643
|
ce,
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
]), ve = B(() => d === "retention" ? le() : null, [
|
|
3644
|
+
le
|
|
3645
|
+
]), ye = R(() => d === "retention" ? N() : null, [
|
|
3364
3646
|
d,
|
|
3365
|
-
le,
|
|
3366
|
-
M,
|
|
3367
3647
|
N,
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3648
|
+
ie,
|
|
3649
|
+
ae,
|
|
3650
|
+
oe,
|
|
3651
|
+
se
|
|
3652
|
+
]), G = R(() => d === "retention" ? ve !== null : d === "flow" ? re !== null : d === "funnel" ? ne !== null : c.isValidQuery ?? !1, [
|
|
3371
3653
|
d,
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
]),
|
|
3377
|
-
currentQuery:
|
|
3378
|
-
allQueries:
|
|
3379
|
-
multiQueryConfig:
|
|
3380
|
-
isMultiQueryMode:
|
|
3381
|
-
isValidQuery:
|
|
3654
|
+
ve,
|
|
3655
|
+
re,
|
|
3656
|
+
ne,
|
|
3657
|
+
c.isValidQuery
|
|
3658
|
+
]), K = qn({
|
|
3659
|
+
currentQuery: c.currentQuery,
|
|
3660
|
+
allQueries: c.allQueries,
|
|
3661
|
+
multiQueryConfig: c.multiQueryConfig,
|
|
3662
|
+
isMultiQueryMode: c.isMultiQueryMode,
|
|
3663
|
+
isValidQuery: G,
|
|
3382
3664
|
initialData: t,
|
|
3383
|
-
mergeStrategy:
|
|
3665
|
+
mergeStrategy: c.mergeStrategy,
|
|
3384
3666
|
funnelBindingKey: u,
|
|
3385
3667
|
isFunnelModeEnabled: g,
|
|
3386
3668
|
analysisType: d,
|
|
3387
|
-
serverFunnelQuery:
|
|
3388
|
-
serverFlowQuery:
|
|
3389
|
-
serverRetentionQuery:
|
|
3390
|
-
retentionValidation:
|
|
3391
|
-
}),
|
|
3669
|
+
serverFunnelQuery: ne,
|
|
3670
|
+
serverFlowQuery: re,
|
|
3671
|
+
serverRetentionQuery: ve,
|
|
3672
|
+
retentionValidation: ye
|
|
3673
|
+
}), q = Jn({
|
|
3392
3674
|
externalColorPalette: n,
|
|
3393
3675
|
combinedMetrics: l.combinedMetrics,
|
|
3394
3676
|
combinedBreakdowns: l.combinedBreakdowns,
|
|
3395
|
-
hasDebounced:
|
|
3396
|
-
}),
|
|
3397
|
-
|
|
3398
|
-
currentQuery:
|
|
3399
|
-
isValidQuery:
|
|
3400
|
-
chartType:
|
|
3401
|
-
chartConfig:
|
|
3402
|
-
displayConfig:
|
|
3677
|
+
hasDebounced: K.hasDebounced
|
|
3678
|
+
}), J = Yn();
|
|
3679
|
+
sr({
|
|
3680
|
+
currentQuery: c.currentQuery,
|
|
3681
|
+
isValidQuery: c.isValidQuery ?? !1,
|
|
3682
|
+
chartType: q.chartType,
|
|
3683
|
+
chartConfig: q.chartConfig,
|
|
3684
|
+
displayConfig: q.displayConfig,
|
|
3403
3685
|
onQueryChange: r,
|
|
3404
3686
|
onChartConfigChange: i
|
|
3405
3687
|
});
|
|
3406
|
-
let
|
|
3688
|
+
let be = $((e) => e.openMetricsModal), xe = $((e) => e.addMetric), Se = $((e) => e.removeMetric), Ce = $((e) => e.toggleMetric), we = $((e) => e.reorderMetrics), Te = $((e) => e.openBreakdownsModal), Ee = $((e) => e.addBreakdown), De = $((e) => e.removeBreakdown), Oe = $((e) => e.toggleBreakdown), ke = $((e) => e.setBreakdownGranularity), Ae = $((e) => e.toggleBreakdownComparison), je = $((e) => e.reorderBreakdowns), Me = $((e) => e.setFilters), Ne = $((e) => e.dropFieldToFilter), Pe = $((e) => e.setOrder), Fe = $((e) => e.setLimit), Ie = $((e) => e.clearQuery), Le = $((e) => e.clearCurrentMode), Re = $((e) => e.setFunnelBindingKey), ze = $((e) => e.setAnalysisType), Be = $((e) => e.setFunnelCube), Ve = $((e) => e.addFunnelStep), He = $((e) => e.removeFunnelStep), Ue = $((e) => e.updateFunnelStep), We = $((e) => e.setActiveFunnelStepIndex), Ge = $((e) => e.reorderFunnelSteps), Ke = $((e) => e.setFunnelTimeDimension), qe = $((e) => e.charts.funnel?.displayConfig), Je = R(() => qe || {
|
|
3407
3689
|
showLegend: !0,
|
|
3408
3690
|
showGrid: !0,
|
|
3409
3691
|
showTooltip: !0
|
|
3410
|
-
}, [
|
|
3692
|
+
}, [qe]), Y = $((e) => e.setFunnelDisplayConfig), Ye = $((e) => e.setFlowCube), Xe = $((e) => e.setFlowBindingKey), Ze = $((e) => e.setFlowTimeDimension), Qe = $((e) => e.setEventDimension), $e = $((e) => e.setStartingStepName), et = $((e) => e.setStartingStepFilters), tt = $((e) => e.setStepsBefore), nt = $((e) => e.setStepsAfter), rt = $((e) => e.setJoinStrategy), it = I((e) => {
|
|
3411
3693
|
o.setState((t) => ({ charts: {
|
|
3412
3694
|
...t.charts,
|
|
3413
3695
|
flow: {
|
|
@@ -3419,7 +3701,7 @@ function yn(e = {}) {
|
|
|
3419
3701
|
displayConfig: e
|
|
3420
3702
|
}
|
|
3421
3703
|
} }));
|
|
3422
|
-
}, [o]), at =
|
|
3704
|
+
}, [o]), at = I((e) => {
|
|
3423
3705
|
o.setState((t) => ({ charts: {
|
|
3424
3706
|
...t.charts,
|
|
3425
3707
|
retention: {
|
|
@@ -3431,9 +3713,9 @@ function yn(e = {}) {
|
|
|
3431
3713
|
displayConfig: e
|
|
3432
3714
|
}
|
|
3433
3715
|
} }));
|
|
3434
|
-
}, [o]), ot = $((e) => e.aiState), st = $((e) => e.openAI), ct = $((e) => e.closeAI), lt = $((e) => e.setAIPrompt), ut = $((e) => e.setAIGenerating), dt = $((e) => e.setAIError), ft = $((e) => e.setAIHasGeneratedQuery), pt = $((e) => e.saveAIPreviousState), mt = $((e) => e.restoreAIPreviousState), ht =
|
|
3435
|
-
|
|
3436
|
-
|
|
3716
|
+
}, [o]), ot = $((e) => e.aiState), st = $((e) => e.openAI), ct = $((e) => e.closeAI), lt = $((e) => e.setAIPrompt), ut = $((e) => e.setAIGenerating), dt = $((e) => e.setAIError), ft = $((e) => e.setAIHasGeneratedQuery), pt = $((e) => e.saveAIPreviousState), mt = $((e) => e.restoreAIPreviousState), ht = z("idle"), gt = G, _t = $((e) => e.getValidation), vt = R(() => _t(), [
|
|
3717
|
+
_t,
|
|
3718
|
+
c.queryStates,
|
|
3437
3719
|
d,
|
|
3438
3720
|
p,
|
|
3439
3721
|
u,
|
|
@@ -3442,19 +3724,23 @@ function yn(e = {}) {
|
|
|
3442
3724
|
x,
|
|
3443
3725
|
S,
|
|
3444
3726
|
C,
|
|
3445
|
-
ee,
|
|
3446
3727
|
w,
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3728
|
+
T,
|
|
3729
|
+
E,
|
|
3730
|
+
D
|
|
3731
|
+
]), yt = I((e, t) => {
|
|
3732
|
+
d === "retention" && t === "dimension" ? me({ field: e.name }) : Oe(e.name, t === "timeDimension");
|
|
3451
3733
|
}, [
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3734
|
+
d,
|
|
3735
|
+
me,
|
|
3736
|
+
Oe
|
|
3737
|
+
]), bt = I((e, t, n, r) => {
|
|
3738
|
+
J.fieldModalMode === "metrics" && t === "measure" ? Ce(e.name) : J.fieldModalMode === "breakdown" && yt(e, t), r || J.closeFieldModal();
|
|
3739
|
+
}, [
|
|
3740
|
+
J,
|
|
3741
|
+
Ce,
|
|
3742
|
+
yt
|
|
3743
|
+
]), xt = I(async () => {
|
|
3458
3744
|
if (a?.aiEndpoint) {
|
|
3459
3745
|
pt(), ut(!0), dt(null);
|
|
3460
3746
|
try {
|
|
@@ -3471,15 +3757,15 @@ function yn(e = {}) {
|
|
|
3471
3757
|
ut,
|
|
3472
3758
|
dt,
|
|
3473
3759
|
ft
|
|
3474
|
-
]),
|
|
3760
|
+
]), St = I(() => {
|
|
3475
3761
|
ct(), ft(!1);
|
|
3476
|
-
}, [ct, ft]),
|
|
3762
|
+
}, [ct, ft]), Ct = I(() => {
|
|
3477
3763
|
mt(), ct();
|
|
3478
|
-
}, [mt, ct]),
|
|
3764
|
+
}, [mt, ct]), wt = I(async () => {
|
|
3479
3765
|
ht.current = "copied", setTimeout(() => {
|
|
3480
3766
|
ht.current = "idle";
|
|
3481
3767
|
}, 2e3);
|
|
3482
|
-
}, []),
|
|
3768
|
+
}, []), Tt = I(() => {
|
|
3483
3769
|
let e = o.getState();
|
|
3484
3770
|
return e.analysisType === "funnel" ? e.buildFunnelQueryFromSteps() || e.buildCurrentQuery() : e.queryStates.length > 1 ? {
|
|
3485
3771
|
queries: e.buildAllQueries(),
|
|
@@ -3489,34 +3775,34 @@ function yn(e = {}) {
|
|
|
3489
3775
|
funnelBindingKey: e.funnelBindingKey,
|
|
3490
3776
|
stepTimeToConvert: e.stepTimeToConvert
|
|
3491
3777
|
} : e.buildCurrentQuery();
|
|
3492
|
-
}, [o]),
|
|
3778
|
+
}, [o]), Et = I(() => {
|
|
3493
3779
|
let e = o.getState(), t = e.charts[e.analysisType];
|
|
3494
3780
|
return t ? {
|
|
3495
3781
|
chartType: t.chartType,
|
|
3496
3782
|
chartConfig: t.chartConfig,
|
|
3497
3783
|
displayConfig: t.displayConfig
|
|
3498
3784
|
} : {
|
|
3499
|
-
chartType:
|
|
3500
|
-
chartConfig:
|
|
3501
|
-
displayConfig:
|
|
3785
|
+
chartType: q.chartType,
|
|
3786
|
+
chartConfig: q.chartConfig,
|
|
3787
|
+
displayConfig: q.displayConfig
|
|
3502
3788
|
};
|
|
3503
3789
|
}, [
|
|
3504
3790
|
o,
|
|
3505
|
-
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
]),
|
|
3791
|
+
q.chartType,
|
|
3792
|
+
q.chartConfig,
|
|
3793
|
+
q.displayConfig
|
|
3794
|
+
]), Dt = I(() => o.getState().analysisType, [o]);
|
|
3509
3795
|
return {
|
|
3510
|
-
queryState:
|
|
3511
|
-
queryStates:
|
|
3512
|
-
activeQueryIndex:
|
|
3513
|
-
mergeStrategy:
|
|
3514
|
-
isMultiQueryMode:
|
|
3515
|
-
mergeKeys:
|
|
3516
|
-
currentQuery:
|
|
3517
|
-
allQueries:
|
|
3518
|
-
multiQueryConfig:
|
|
3519
|
-
multiQueryValidation:
|
|
3796
|
+
queryState: c.queryState,
|
|
3797
|
+
queryStates: c.queryStates,
|
|
3798
|
+
activeQueryIndex: c.activeQueryIndex,
|
|
3799
|
+
mergeStrategy: c.mergeStrategy,
|
|
3800
|
+
isMultiQueryMode: c.isMultiQueryMode,
|
|
3801
|
+
mergeKeys: c.mergeKeys,
|
|
3802
|
+
currentQuery: c.currentQuery,
|
|
3803
|
+
allQueries: c.allQueries,
|
|
3804
|
+
multiQueryConfig: c.multiQueryConfig,
|
|
3805
|
+
multiQueryValidation: c.multiQueryValidation,
|
|
3520
3806
|
funnelBindingKey: u,
|
|
3521
3807
|
isFunnelModeEnabled: g,
|
|
3522
3808
|
analysisType: d,
|
|
@@ -3526,62 +3812,62 @@ function yn(e = {}) {
|
|
|
3526
3812
|
funnelTimeDimension: h,
|
|
3527
3813
|
funnelChartType: _,
|
|
3528
3814
|
funnelChartConfig: y,
|
|
3529
|
-
funnelDisplayConfig:
|
|
3815
|
+
funnelDisplayConfig: Je,
|
|
3530
3816
|
flowCube: b,
|
|
3531
3817
|
flowBindingKey: x,
|
|
3532
3818
|
flowTimeDimension: S,
|
|
3533
3819
|
eventDimension: C,
|
|
3534
|
-
startingStep:
|
|
3535
|
-
stepsBefore:
|
|
3536
|
-
stepsAfter:
|
|
3537
|
-
joinStrategy:
|
|
3538
|
-
flowDisplayConfig:
|
|
3539
|
-
retentionCube:
|
|
3540
|
-
retentionBindingKey:
|
|
3541
|
-
retentionTimeDimension:
|
|
3542
|
-
retentionDateRange:
|
|
3543
|
-
retentionCohortFilters:
|
|
3544
|
-
retentionActivityFilters:
|
|
3545
|
-
retentionBreakdowns:
|
|
3546
|
-
retentionViewGranularity:
|
|
3547
|
-
retentionPeriods:
|
|
3548
|
-
retentionType:
|
|
3549
|
-
retentionDisplayConfig:
|
|
3550
|
-
executionStatus:
|
|
3551
|
-
executionResults:
|
|
3552
|
-
perQueryResults:
|
|
3553
|
-
isLoading:
|
|
3554
|
-
isFetching:
|
|
3555
|
-
error:
|
|
3556
|
-
isValidQuery:
|
|
3557
|
-
debugDataPerQuery:
|
|
3558
|
-
needsRefresh:
|
|
3559
|
-
warnings:
|
|
3560
|
-
funnelExecutedQueries:
|
|
3561
|
-
funnelServerQuery:
|
|
3562
|
-
funnelDebugData:
|
|
3563
|
-
flowServerQuery:
|
|
3564
|
-
flowDebugData:
|
|
3565
|
-
retentionServerQuery:
|
|
3566
|
-
retentionDebugData:
|
|
3567
|
-
retentionChartData:
|
|
3568
|
-
retentionValidation:
|
|
3569
|
-
chartType:
|
|
3570
|
-
chartConfig:
|
|
3571
|
-
displayConfig:
|
|
3572
|
-
colorPalette:
|
|
3573
|
-
localPaletteName:
|
|
3574
|
-
chartAvailability:
|
|
3820
|
+
startingStep: w,
|
|
3821
|
+
stepsBefore: T,
|
|
3822
|
+
stepsAfter: E,
|
|
3823
|
+
joinStrategy: D,
|
|
3824
|
+
flowDisplayConfig: O,
|
|
3825
|
+
retentionCube: ie,
|
|
3826
|
+
retentionBindingKey: ae,
|
|
3827
|
+
retentionTimeDimension: oe,
|
|
3828
|
+
retentionDateRange: se,
|
|
3829
|
+
retentionCohortFilters: ce,
|
|
3830
|
+
retentionActivityFilters: le,
|
|
3831
|
+
retentionBreakdowns: ue,
|
|
3832
|
+
retentionViewGranularity: de,
|
|
3833
|
+
retentionPeriods: fe,
|
|
3834
|
+
retentionType: j,
|
|
3835
|
+
retentionDisplayConfig: P,
|
|
3836
|
+
executionStatus: K.executionStatus,
|
|
3837
|
+
executionResults: K.executionResults,
|
|
3838
|
+
perQueryResults: K.perQueryResults,
|
|
3839
|
+
isLoading: K.isLoading,
|
|
3840
|
+
isFetching: K.isFetching,
|
|
3841
|
+
error: K.error,
|
|
3842
|
+
isValidQuery: G,
|
|
3843
|
+
debugDataPerQuery: K.debugDataPerQuery,
|
|
3844
|
+
needsRefresh: K.needsRefresh,
|
|
3845
|
+
warnings: K.warnings,
|
|
3846
|
+
funnelExecutedQueries: K.funnelExecutedQueries,
|
|
3847
|
+
funnelServerQuery: K.funnelServerQuery,
|
|
3848
|
+
funnelDebugData: K.funnelDebugData,
|
|
3849
|
+
flowServerQuery: K.flowServerQuery,
|
|
3850
|
+
flowDebugData: K.flowDebugData,
|
|
3851
|
+
retentionServerQuery: K.retentionServerQuery,
|
|
3852
|
+
retentionDebugData: K.retentionDebugData,
|
|
3853
|
+
retentionChartData: K.retentionChartData,
|
|
3854
|
+
retentionValidation: K.retentionValidation,
|
|
3855
|
+
chartType: q.chartType,
|
|
3856
|
+
chartConfig: q.chartConfig,
|
|
3857
|
+
displayConfig: q.displayConfig,
|
|
3858
|
+
colorPalette: q.colorPalette,
|
|
3859
|
+
localPaletteName: q.localPaletteName,
|
|
3860
|
+
chartAvailability: q.chartAvailability,
|
|
3575
3861
|
combinedMetrics: l.combinedMetrics,
|
|
3576
3862
|
combinedBreakdowns: l.combinedBreakdowns,
|
|
3577
3863
|
effectiveBreakdowns: l.effectiveBreakdowns,
|
|
3578
|
-
activeTab:
|
|
3579
|
-
activeView:
|
|
3580
|
-
displayLimit:
|
|
3581
|
-
showFieldModal:
|
|
3582
|
-
fieldModalMode:
|
|
3583
|
-
activeTableIndex:
|
|
3584
|
-
userManuallySelectedChart:
|
|
3864
|
+
activeTab: J.activeTab,
|
|
3865
|
+
activeView: J.activeView,
|
|
3866
|
+
displayLimit: J.displayLimit,
|
|
3867
|
+
showFieldModal: J.showFieldModal,
|
|
3868
|
+
fieldModalMode: J.fieldModalMode,
|
|
3869
|
+
activeTableIndex: J.activeTableIndex,
|
|
3870
|
+
userManuallySelectedChart: J.userManuallySelectedChart,
|
|
3585
3871
|
aiState: {
|
|
3586
3872
|
isOpen: ot.isOpen,
|
|
3587
3873
|
userPrompt: ot.userPrompt,
|
|
@@ -3590,39 +3876,39 @@ function yn(e = {}) {
|
|
|
3590
3876
|
hasGeneratedQuery: ot.hasGeneratedQuery
|
|
3591
3877
|
},
|
|
3592
3878
|
shareButtonState: ht.current,
|
|
3593
|
-
canShare:
|
|
3594
|
-
adapterValidation:
|
|
3879
|
+
canShare: gt,
|
|
3880
|
+
adapterValidation: vt,
|
|
3595
3881
|
actions: {
|
|
3596
|
-
setActiveQueryIndex:
|
|
3597
|
-
setMergeStrategy:
|
|
3598
|
-
openMetricsModal:
|
|
3599
|
-
addMetric:
|
|
3600
|
-
removeMetric:
|
|
3601
|
-
toggleMetric:
|
|
3602
|
-
reorderMetrics:
|
|
3603
|
-
openBreakdownsModal:
|
|
3604
|
-
addBreakdown:
|
|
3605
|
-
removeBreakdown:
|
|
3606
|
-
toggleBreakdown:
|
|
3607
|
-
setBreakdownGranularity:
|
|
3608
|
-
toggleBreakdownComparison:
|
|
3609
|
-
reorderBreakdowns:
|
|
3610
|
-
setFilters:
|
|
3611
|
-
dropFieldToFilter:
|
|
3612
|
-
setOrder:
|
|
3613
|
-
setLimit:
|
|
3614
|
-
addQuery:
|
|
3615
|
-
removeQuery:
|
|
3616
|
-
setFunnelBindingKey:
|
|
3617
|
-
setAnalysisType:
|
|
3618
|
-
setFunnelCube:
|
|
3619
|
-
addFunnelStep:
|
|
3620
|
-
removeFunnelStep:
|
|
3621
|
-
updateFunnelStep:
|
|
3622
|
-
setActiveFunnelStepIndex:
|
|
3623
|
-
reorderFunnelSteps:
|
|
3624
|
-
setFunnelTimeDimension:
|
|
3625
|
-
setFunnelDisplayConfig:
|
|
3882
|
+
setActiveQueryIndex: c.setActiveQueryIndex,
|
|
3883
|
+
setMergeStrategy: c.setMergeStrategy,
|
|
3884
|
+
openMetricsModal: be,
|
|
3885
|
+
addMetric: xe,
|
|
3886
|
+
removeMetric: Se,
|
|
3887
|
+
toggleMetric: Ce,
|
|
3888
|
+
reorderMetrics: we,
|
|
3889
|
+
openBreakdownsModal: Te,
|
|
3890
|
+
addBreakdown: Ee,
|
|
3891
|
+
removeBreakdown: De,
|
|
3892
|
+
toggleBreakdown: Oe,
|
|
3893
|
+
setBreakdownGranularity: ke,
|
|
3894
|
+
toggleBreakdownComparison: Ae,
|
|
3895
|
+
reorderBreakdowns: je,
|
|
3896
|
+
setFilters: Me,
|
|
3897
|
+
dropFieldToFilter: Ne,
|
|
3898
|
+
setOrder: Pe,
|
|
3899
|
+
setLimit: Fe,
|
|
3900
|
+
addQuery: c.addQuery,
|
|
3901
|
+
removeQuery: c.removeQuery,
|
|
3902
|
+
setFunnelBindingKey: Re,
|
|
3903
|
+
setAnalysisType: ze,
|
|
3904
|
+
setFunnelCube: Be,
|
|
3905
|
+
addFunnelStep: Ve,
|
|
3906
|
+
removeFunnelStep: He,
|
|
3907
|
+
updateFunnelStep: Ue,
|
|
3908
|
+
setActiveFunnelStepIndex: We,
|
|
3909
|
+
reorderFunnelSteps: Ge,
|
|
3910
|
+
setFunnelTimeDimension: Ke,
|
|
3911
|
+
setFunnelDisplayConfig: Y,
|
|
3626
3912
|
setFlowCube: Ye,
|
|
3627
3913
|
setFlowBindingKey: Xe,
|
|
3628
3914
|
setFlowTimeDimension: Ze,
|
|
@@ -3633,48 +3919,48 @@ function yn(e = {}) {
|
|
|
3633
3919
|
setStepsAfter: nt,
|
|
3634
3920
|
setJoinStrategy: rt,
|
|
3635
3921
|
setFlowDisplayConfig: it,
|
|
3636
|
-
setRetentionCube:
|
|
3637
|
-
setRetentionBindingKey:
|
|
3638
|
-
setRetentionTimeDimension:
|
|
3639
|
-
setRetentionDateRange:
|
|
3640
|
-
setRetentionCohortFilters:
|
|
3641
|
-
setRetentionActivityFilters:
|
|
3642
|
-
setRetentionBreakdowns:
|
|
3643
|
-
addRetentionBreakdown:
|
|
3644
|
-
removeRetentionBreakdown:
|
|
3645
|
-
setRetentionViewGranularity:
|
|
3646
|
-
setRetentionPeriods:
|
|
3647
|
-
setRetentionType:
|
|
3922
|
+
setRetentionCube: F,
|
|
3923
|
+
setRetentionBindingKey: pe,
|
|
3924
|
+
setRetentionTimeDimension: L,
|
|
3925
|
+
setRetentionDateRange: B,
|
|
3926
|
+
setRetentionCohortFilters: V,
|
|
3927
|
+
setRetentionActivityFilters: H,
|
|
3928
|
+
setRetentionBreakdowns: U,
|
|
3929
|
+
addRetentionBreakdown: me,
|
|
3930
|
+
removeRetentionBreakdown: W,
|
|
3931
|
+
setRetentionViewGranularity: he,
|
|
3932
|
+
setRetentionPeriods: ge,
|
|
3933
|
+
setRetentionType: _e,
|
|
3648
3934
|
setRetentionDisplayConfig: at,
|
|
3649
|
-
setChartType:
|
|
3650
|
-
setChartConfig:
|
|
3651
|
-
setDisplayConfig:
|
|
3652
|
-
setLocalPaletteName:
|
|
3653
|
-
setActiveTab:
|
|
3654
|
-
setActiveView:
|
|
3655
|
-
setDisplayLimit:
|
|
3656
|
-
closeFieldModal:
|
|
3657
|
-
setActiveTableIndex:
|
|
3935
|
+
setChartType: q.setChartType,
|
|
3936
|
+
setChartConfig: q.setChartConfig,
|
|
3937
|
+
setDisplayConfig: q.setDisplayConfig,
|
|
3938
|
+
setLocalPaletteName: q.setLocalPaletteName,
|
|
3939
|
+
setActiveTab: J.setActiveTab,
|
|
3940
|
+
setActiveView: J.setActiveView,
|
|
3941
|
+
setDisplayLimit: J.setDisplayLimit,
|
|
3942
|
+
closeFieldModal: J.closeFieldModal,
|
|
3943
|
+
setActiveTableIndex: J.setActiveTableIndex,
|
|
3658
3944
|
openAI: st,
|
|
3659
3945
|
closeAI: ct,
|
|
3660
3946
|
setAIPrompt: lt,
|
|
3661
|
-
generateAI:
|
|
3662
|
-
acceptAI:
|
|
3663
|
-
cancelAI:
|
|
3664
|
-
share:
|
|
3665
|
-
clearQuery:
|
|
3666
|
-
clearCurrentMode:
|
|
3667
|
-
refetch:
|
|
3668
|
-
handleFieldSelected:
|
|
3947
|
+
generateAI: xt,
|
|
3948
|
+
acceptAI: St,
|
|
3949
|
+
cancelAI: Ct,
|
|
3950
|
+
share: wt,
|
|
3951
|
+
clearQuery: Ie,
|
|
3952
|
+
clearCurrentMode: Le,
|
|
3953
|
+
refetch: K.refetch,
|
|
3954
|
+
handleFieldSelected: bt
|
|
3669
3955
|
},
|
|
3670
|
-
getQueryConfig:
|
|
3671
|
-
getChartConfig:
|
|
3672
|
-
getAnalysisType:
|
|
3956
|
+
getQueryConfig: Tt,
|
|
3957
|
+
getChartConfig: Et,
|
|
3958
|
+
getAnalysisType: Dt
|
|
3673
3959
|
};
|
|
3674
3960
|
}
|
|
3675
3961
|
//#endregion
|
|
3676
3962
|
//#region src/client/utils/funnelValidation.ts
|
|
3677
|
-
function
|
|
3963
|
+
function lr(e, t) {
|
|
3678
3964
|
let n = [];
|
|
3679
3965
|
if (!t?.cubes) return n;
|
|
3680
3966
|
if (typeof e.dimension == "string") {
|
|
@@ -3698,7 +3984,7 @@ function bn(e, t) {
|
|
|
3698
3984
|
}
|
|
3699
3985
|
return n;
|
|
3700
3986
|
}
|
|
3701
|
-
function
|
|
3987
|
+
function ur(e) {
|
|
3702
3988
|
let t = [];
|
|
3703
3989
|
for (let n = 0; n < e.length; n++) {
|
|
3704
3990
|
let r = e[n], i = r.query;
|
|
@@ -3710,17 +3996,17 @@ function xn(e) {
|
|
|
3710
3996
|
}
|
|
3711
3997
|
return t;
|
|
3712
3998
|
}
|
|
3713
|
-
function
|
|
3999
|
+
function dr(e, t) {
|
|
3714
4000
|
if (typeof e.dimension == "string") return !0;
|
|
3715
|
-
let n =
|
|
4001
|
+
let n = j(t);
|
|
3716
4002
|
return n ? e.dimension.some((e) => e.cube === n) : !1;
|
|
3717
4003
|
}
|
|
3718
|
-
function
|
|
4004
|
+
function fr(e, t) {
|
|
3719
4005
|
let n = [];
|
|
3720
4006
|
for (let r = 0; r < t.length; r++) {
|
|
3721
4007
|
let i = t[r];
|
|
3722
|
-
if (!
|
|
3723
|
-
let e =
|
|
4008
|
+
if (!dr(e, i.query)) {
|
|
4009
|
+
let e = j(i.query) || "unknown";
|
|
3724
4010
|
n.push({
|
|
3725
4011
|
type: "cross_cube",
|
|
3726
4012
|
message: `Step ${r + 1} uses cube "${e}" but no binding key mapping exists for it`,
|
|
@@ -3730,26 +4016,26 @@ function Cn(e, t) {
|
|
|
3730
4016
|
}
|
|
3731
4017
|
return n;
|
|
3732
4018
|
}
|
|
3733
|
-
function
|
|
4019
|
+
function pr(e) {
|
|
3734
4020
|
return e ? /^P(?:\d+Y)?(?:\d+M)?(?:\d+W)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$/.test(e) ? null : {
|
|
3735
4021
|
type: "time_window",
|
|
3736
4022
|
message: `Invalid time window format "${e}". Expected ISO 8601 duration (e.g., P7D, PT1H)`
|
|
3737
4023
|
} : null;
|
|
3738
4024
|
}
|
|
3739
|
-
function
|
|
4025
|
+
function mr(e, t) {
|
|
3740
4026
|
let n = [], r = [];
|
|
3741
4027
|
e.steps.length < 2 && n.push({
|
|
3742
4028
|
type: "general",
|
|
3743
4029
|
message: "Funnel requires at least 2 steps"
|
|
3744
|
-
}), e.bindingKey?.dimension ? (n.push(...
|
|
4030
|
+
}), e.bindingKey?.dimension ? (n.push(...lr(e.bindingKey, t)), n.push(...fr(e.bindingKey, e.steps))) : n.push({
|
|
3745
4031
|
type: "binding_key",
|
|
3746
4032
|
message: "Binding key dimension is required"
|
|
3747
|
-
}), n.push(...
|
|
4033
|
+
}), n.push(...ur(e.steps));
|
|
3748
4034
|
for (let t = 0; t < e.steps.length; t++) {
|
|
3749
|
-
let r = e.steps[t], i =
|
|
4035
|
+
let r = e.steps[t], i = pr(r.timeToConvert);
|
|
3750
4036
|
i && (i.stepIndex = t, n.push(i));
|
|
3751
4037
|
}
|
|
3752
|
-
let i =
|
|
4038
|
+
let i = pr(e.globalTimeWindow);
|
|
3753
4039
|
return i && n.push(i), e.steps.length > 5 && r.push({
|
|
3754
4040
|
type: "general",
|
|
3755
4041
|
message: "Funnels with more than 5 steps may have reduced performance"
|
|
@@ -3759,7 +4045,7 @@ function Tn(e, t) {
|
|
|
3759
4045
|
warnings: r
|
|
3760
4046
|
};
|
|
3761
4047
|
}
|
|
3762
|
-
function
|
|
4048
|
+
function hr(e, t) {
|
|
3763
4049
|
return t < 2 ? {
|
|
3764
4050
|
isValid: !1,
|
|
3765
4051
|
message: "Add at least 2 steps for funnel"
|
|
@@ -3768,7 +4054,7 @@ function En(e, t) {
|
|
|
3768
4054
|
message: "Select a binding key dimension"
|
|
3769
4055
|
} : { isValid: !0 };
|
|
3770
4056
|
}
|
|
3771
|
-
function
|
|
4057
|
+
function gr(e) {
|
|
3772
4058
|
if (!e?.cubes) return [];
|
|
3773
4059
|
let t = [];
|
|
3774
4060
|
for (let n of e.cubes) if (n.dimensions) for (let e of n.dimensions) (e.type === "string" || e.type === "number") && t.push({
|
|
@@ -3778,7 +4064,7 @@ function Dn(e) {
|
|
|
3778
4064
|
});
|
|
3779
4065
|
return t;
|
|
3780
4066
|
}
|
|
3781
|
-
function
|
|
4067
|
+
function _r(e) {
|
|
3782
4068
|
if (!e?.dimension) return "Select binding key...";
|
|
3783
4069
|
if (typeof e.dimension == "string") return e.dimension.split(".")[1] || e.dimension;
|
|
3784
4070
|
if (e.dimension.length > 0) {
|
|
@@ -3788,6 +4074,6 @@ function On(e) {
|
|
|
3788
4074
|
return "Select binding key...";
|
|
3789
4075
|
}
|
|
3790
4076
|
//#endregion
|
|
3791
|
-
export {
|
|
4077
|
+
export { Dn as A, yn as C, wn as D, xn as E, nt as F, Je as I, $ as M, bn as N, On as O, Pt as P, An as S, Tn as T, Mn as _, fr as a, jn as b, cr as c, er as d, rr as f, Nn as g, or as h, lr as i, En as j, Sn as k, $n as l, ir as m, _r as n, mr as o, tr as p, hr as r, ur as s, gr as t, nr as u, Rn as v, Cn as w, Pn as x, In as y };
|
|
3792
4078
|
|
|
3793
|
-
//# sourceMappingURL=analysis-builder-shared-
|
|
4079
|
+
//# sourceMappingURL=analysis-builder-shared-BVK4TYfR.js.map
|