drizzle-cube 0.5.8 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/README.md +2 -0
  2. package/dist/adapters/adapters/hono/agent-handler.d.ts +9 -0
  3. package/dist/adapters/adapters/hono/mcp-handler.d.ts +37 -0
  4. package/dist/adapters/adapters/mcp-tools-handlers.d.ts +18 -0
  5. package/dist/adapters/adapters/nextjs/mcp-handler.d.ts +36 -0
  6. package/dist/adapters/adapters/utils.d.ts +6 -81
  7. package/dist/adapters/express/index.cjs +1 -1
  8. package/dist/adapters/express/index.js +50 -50
  9. package/dist/adapters/fastify/index.cjs +1 -1
  10. package/dist/adapters/fastify/index.js +78 -78
  11. package/dist/adapters/google-BOnRIN1w.cjs +2 -0
  12. package/dist/adapters/{google-CFYljAOF.js → google-CvKM9yVM.js} +83 -71
  13. package/dist/adapters/{handler-Cx8QYLk6.js → handler-CfgE0JSL.js} +499 -576
  14. package/dist/adapters/handler-Cn0dOctE.cjs +25 -0
  15. package/dist/adapters/hono/index.cjs +2 -2
  16. package/dist/adapters/hono/index.js +205 -175
  17. package/dist/adapters/locale-DDvZDFVn.js +8114 -0
  18. package/dist/adapters/locale-ZLUUNUxr.cjs +166 -0
  19. package/dist/adapters/mcp-tools.cjs +1 -1
  20. package/dist/adapters/mcp-tools.js +49 -38
  21. package/dist/adapters/mcp-transport-Chiaj4ll.cjs +40 -0
  22. package/dist/adapters/mcp-transport-H96VG3WY.js +591 -0
  23. package/dist/adapters/nextjs/index.cjs +1 -1
  24. package/dist/adapters/nextjs/index.js +190 -197
  25. package/dist/adapters/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
  26. package/dist/adapters/openai-vXvLni8v.cjs +1 -0
  27. package/dist/adapters/{utils-D9JPLmfl.js → utils-BPWZsX7k.js} +1271 -1218
  28. package/dist/adapters/utils-_whV4fXL.cjs +128 -0
  29. package/dist/adapters/utils.cjs +1 -1
  30. package/dist/adapters/utils.js +2 -2
  31. package/dist/client/charts/ChartLoader.d.ts +2 -16
  32. package/dist/client/charts/chartComponentRegistry.d.ts +46 -0
  33. package/dist/client/charts/chartConfigHelpers.d.ts +38 -0
  34. package/dist/client/charts.js +14 -13
  35. package/dist/client/chunks/{DashboardEditModal-CjCIAT-J.js → DashboardEditModal-okVfH8ZK.js} +5296 -4544
  36. package/dist/client/chunks/DashboardEditModal-okVfH8ZK.js.map +1 -0
  37. package/dist/client/chunks/{RetentionCombinedChart-BPkfcTa8.js → RetentionCombinedChart-BgbDhsPz.js} +10 -10
  38. package/dist/client/chunks/{RetentionCombinedChart-BPkfcTa8.js.map → RetentionCombinedChart-BgbDhsPz.js.map} +1 -1
  39. package/dist/client/chunks/{RetentionHeatmap-DGzLzr7h.js → RetentionHeatmap-DjXZaTPq.js} +5 -5
  40. package/dist/client/chunks/{RetentionHeatmap-DGzLzr7h.js.map → RetentionHeatmap-DjXZaTPq.js.map} +1 -1
  41. package/dist/client/chunks/analysis-builder-DB88FojM.js +5674 -0
  42. package/dist/client/chunks/analysis-builder-DB88FojM.js.map +1 -0
  43. package/dist/client/chunks/{analysis-builder-shared-CYVwSPqt.js → analysis-builder-shared-BVK4TYfR.js} +1578 -1292
  44. package/dist/client/chunks/analysis-builder-shared-BVK4TYfR.js.map +1 -0
  45. package/dist/client/chunks/{chart-activity-grid-DmruKPab.js → chart-activity-grid-DX0SJbxs.js} +635 -492
  46. package/dist/client/chunks/chart-activity-grid-DX0SJbxs.js.map +1 -0
  47. package/dist/client/chunks/chart-area-of01_62R.js +775 -0
  48. package/dist/client/chunks/chart-area-of01_62R.js.map +1 -0
  49. package/dist/client/chunks/chart-bar-BqelQE_I.js +194 -0
  50. package/dist/client/chunks/chart-bar-BqelQE_I.js.map +1 -0
  51. package/dist/client/chunks/{chart-box-plot-DYKfyOI8.js → chart-box-plot-kkBixZ27.js} +2 -2
  52. package/dist/client/chunks/{chart-box-plot-DYKfyOI8.js.map → chart-box-plot-kkBixZ27.js.map} +1 -1
  53. package/dist/client/chunks/chart-bubble-B2he1--4.js +221 -0
  54. package/dist/client/chunks/chart-bubble-B2he1--4.js.map +1 -0
  55. package/dist/client/chunks/{chart-candlestick-Dwc92Mrj.js → chart-candlestick-DZp19Tzh.js} +2 -2
  56. package/dist/client/chunks/{chart-candlestick-Dwc92Mrj.js.map → chart-candlestick-DZp19Tzh.js.map} +1 -1
  57. package/dist/client/chunks/chart-config-area-BNigHUy8.js +124 -0
  58. package/dist/client/chunks/chart-config-area-BNigHUy8.js.map +1 -0
  59. package/dist/client/chunks/chart-config-bar-DSO_LRTx.js +54 -0
  60. package/dist/client/chunks/chart-config-bar-DSO_LRTx.js.map +1 -0
  61. package/dist/client/chunks/{chart-config-box-plot-DJ-dWWXA.js → chart-config-box-plot-oW8axV2q.js} +5 -10
  62. package/dist/client/chunks/chart-config-box-plot-oW8axV2q.js.map +1 -0
  63. package/dist/client/chunks/{chart-config-gauge-DSwC04l0.js → chart-config-gauge-Dq-_H9UN.js} +5 -7
  64. package/dist/client/chunks/chart-config-gauge-Dq-_H9UN.js.map +1 -0
  65. package/dist/client/chunks/{chart-config-kpi-delta-D6BIkHL3.js → chart-config-kpi-delta-DSQbvqu_.js} +5 -10
  66. package/dist/client/chunks/chart-config-kpi-delta-DSQbvqu_.js.map +1 -0
  67. package/dist/client/chunks/{chart-config-kpi-number-Bx-V9a62.js → chart-config-kpi-number-EFSWY1We.js} +5 -7
  68. package/dist/client/chunks/chart-config-kpi-number-EFSWY1We.js.map +1 -0
  69. package/dist/client/chunks/{chart-config-kpi-text-CcqC1u-8.js → chart-config-kpi-text-KM3V5X2u.js} +5 -7
  70. package/dist/client/chunks/chart-config-kpi-text-KM3V5X2u.js.map +1 -0
  71. package/dist/client/chunks/{chart-config-line-Db3jDsWc.js → chart-config-line-D6jG8PCH.js} +9 -36
  72. package/dist/client/chunks/chart-config-line-D6jG8PCH.js.map +1 -0
  73. package/dist/client/chunks/{chart-config-pie-DD4SmRTF.js → chart-config-pie-BhzW-fdn.js} +6 -16
  74. package/dist/client/chunks/chart-config-pie-BhzW-fdn.js.map +1 -0
  75. package/dist/client/chunks/{chart-config-radar-CC2XAaGr.js → chart-config-radar-D7REP1q_.js} +6 -16
  76. package/dist/client/chunks/chart-config-radar-D7REP1q_.js.map +1 -0
  77. package/dist/client/chunks/{chart-config-radial-bar-DmxKx1R0.js → chart-config-radial-bar-Byx6qOPU.js} +6 -16
  78. package/dist/client/chunks/chart-config-radial-bar-Byx6qOPU.js.map +1 -0
  79. package/dist/client/chunks/{chart-config-tree-map-BI-oQStO.js → chart-config-tree-map-DVrvf3yQ.js} +6 -16
  80. package/dist/client/chunks/chart-config-tree-map-DVrvf3yQ.js.map +1 -0
  81. package/dist/client/chunks/{chart-config-waterfall-DSnyixbI.js → chart-config-waterfall-DmFeQdIk.js} +5 -10
  82. package/dist/client/chunks/chart-config-waterfall-DmFeQdIk.js.map +1 -0
  83. package/dist/client/chunks/{chart-data-table-BO4sXsim.js → chart-data-table-CKauQXme.js} +1046 -1121
  84. package/dist/client/chunks/chart-data-table-CKauQXme.js.map +1 -0
  85. package/dist/client/chunks/{chart-funnel-DnWRsmnS.js → chart-funnel-CToKSBaL.js} +184 -222
  86. package/dist/client/chunks/chart-funnel-CToKSBaL.js.map +1 -0
  87. package/dist/client/chunks/chart-gauge-DTVezSk7.js +403 -0
  88. package/dist/client/chunks/chart-gauge-DTVezSk7.js.map +1 -0
  89. package/dist/client/chunks/chart-heat-map-DTuUl0BR.js +236 -0
  90. package/dist/client/chunks/chart-heat-map-DTuUl0BR.js.map +1 -0
  91. package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js +408 -0
  92. package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js.map +1 -0
  93. package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js +244 -0
  94. package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js.map +1 -0
  95. package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js +185 -0
  96. package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js.map +1 -0
  97. package/dist/client/chunks/chart-line-DKgrQA6c.js +101 -0
  98. package/dist/client/chunks/chart-line-DKgrQA6c.js.map +1 -0
  99. package/dist/client/chunks/{chart-markdown-dgUetjyM.js → chart-markdown-CV75S_zL.js} +2 -2
  100. package/dist/client/chunks/{chart-markdown-dgUetjyM.js.map → chart-markdown-CV75S_zL.js.map} +1 -1
  101. package/dist/client/chunks/{chart-measure-profile-ClfpLs4q.js → chart-measure-profile-Ket8fJyf.js} +7 -7
  102. package/dist/client/chunks/{chart-measure-profile-ClfpLs4q.js.map → chart-measure-profile-Ket8fJyf.js.map} +1 -1
  103. package/dist/client/chunks/chart-pie-ByieAX5H.js +119 -0
  104. package/dist/client/chunks/chart-pie-ByieAX5H.js.map +1 -0
  105. package/dist/client/chunks/chart-radar-CiSwHWp4.js +138 -0
  106. package/dist/client/chunks/chart-radar-CiSwHWp4.js.map +1 -0
  107. package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js +122 -0
  108. package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js.map +1 -0
  109. package/dist/client/chunks/{chart-sankey-M3XpO_ah.js → chart-sankey-DjrvKw6K.js} +36 -39
  110. package/dist/client/chunks/{chart-sankey-M3XpO_ah.js.map → chart-sankey-DjrvKw6K.js.map} +1 -1
  111. package/dist/client/chunks/chart-scatter-Dd9WFqnS.js +258 -0
  112. package/dist/client/chunks/chart-scatter-Dd9WFqnS.js.map +1 -0
  113. package/dist/client/chunks/{chart-sunburst-A_u6lqlS.js → chart-sunburst-leGpuDj7.js} +3 -3
  114. package/dist/client/chunks/{chart-sunburst-A_u6lqlS.js.map → chart-sunburst-leGpuDj7.js.map} +1 -1
  115. package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js +323 -0
  116. package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js.map +1 -0
  117. package/dist/client/chunks/{chart-waterfall-BuhMoagf.js → chart-waterfall-DyvQReN5.js} +7 -7
  118. package/dist/client/chunks/{chart-waterfall-BuhMoagf.js.map → chart-waterfall-DyvQReN5.js.map} +1 -1
  119. package/dist/client/chunks/{charts-core-jRtb0S2M.js → charts-core-DaXSt1Dd.js} +2 -2
  120. package/dist/client/chunks/{charts-core-jRtb0S2M.js.map → charts-core-DaXSt1Dd.js.map} +1 -1
  121. package/dist/client/chunks/charts-loader-DdTeCeNo.js +84 -0
  122. package/dist/client/chunks/charts-loader-DdTeCeNo.js.map +1 -0
  123. package/dist/client/chunks/{nl-NL-CpVs7ox3.js → nl-NL-2zTAWTej.js} +2 -1
  124. package/dist/client/chunks/{nl-NL-CpVs7ox3.js.map → nl-NL-2zTAWTej.js.map} +1 -1
  125. package/dist/client/chunks/retention-ChW9jYdy.js.map +1 -1
  126. package/dist/client/chunks/{schema-visualization-DE09kQE3.js → schema-visualization-Cb_E9_Gd.js} +12 -12
  127. package/dist/client/chunks/{schema-visualization-DE09kQE3.js.map → schema-visualization-Cb_E9_Gd.js.map} +1 -1
  128. package/dist/client/chunks/{useDirtyStateTracking-CoeQbprt.js → useDirtyStateTracking-MbpxH_v6.js} +95 -84
  129. package/dist/client/chunks/useDirtyStateTracking-MbpxH_v6.js.map +1 -0
  130. package/dist/client/chunks/{useExplainAI-DlnXWdmz.js → useExplainAI-evnZkjCY.js} +14 -14
  131. package/dist/client/chunks/{useExplainAI-DlnXWdmz.js.map → useExplainAI-evnZkjCY.js.map} +1 -1
  132. package/dist/client/chunks/{utils-CTKNaXS8.js → utils-3P6z1vz5.js} +2 -2
  133. package/dist/client/chunks/{utils-CTKNaXS8.js.map → utils-3P6z1vz5.js.map} +1 -1
  134. package/dist/client/chunks/{vendor-CPIYyeuD.js → vendor-DSpR0IW6.js} +43 -43
  135. package/dist/client/chunks/{vendor-CPIYyeuD.js.map → vendor-DSpR0IW6.js.map} +1 -1
  136. package/dist/client/components/AgenticNotebook/agentChatParts.d.ts +34 -0
  137. package/dist/client/components/AgenticNotebook/chatMessageParts.d.ts +39 -0
  138. package/dist/client/components/AgenticNotebook/useAgentChatController.d.ts +25 -0
  139. package/dist/client/components/AgenticNotebook/useNotebookAutosave.d.ts +12 -0
  140. package/dist/client/components/AnalysisBuilder/AnalysisQueryPanelParts.d.ts +64 -0
  141. package/dist/client/components/AnalysisBuilder/AnalysisResultsHeader.d.ts +67 -0
  142. package/dist/client/components/AnalysisBuilder/BreakdownComparisonToggle.d.ts +13 -0
  143. package/dist/client/components/AnalysisBuilder/BreakdownRow.d.ts +26 -0
  144. package/dist/client/components/AnalysisBuilder/DisplayOptionControl.d.ts +10 -0
  145. package/dist/client/components/AnalysisBuilder/ExecutionPlanPanelParts.d.ts +22 -0
  146. package/dist/client/components/AnalysisBuilder/FieldSearchResults.d.ts +16 -0
  147. package/dist/client/components/AnalysisBuilder/FilterValueInput.d.ts +63 -0
  148. package/dist/client/components/AnalysisBuilder/FlowDepthControls.d.ts +10 -0
  149. package/dist/client/components/AnalysisBuilder/FlowVisualizationPicker.d.ts +7 -0
  150. package/dist/client/components/AnalysisBuilder/LegacyBooleanOptions.d.ts +8 -0
  151. package/dist/client/components/AnalysisBuilder/MetricRow.d.ts +23 -0
  152. package/dist/client/components/AnalysisBuilder/SortToggleButton.d.ts +13 -0
  153. package/dist/client/components/AnalysisBuilder/StringArrayInput.d.ts +17 -0
  154. package/dist/client/components/AnalysisBuilder/filterConfigModalUtils.d.ts +30 -0
  155. package/dist/client/components/AnalysisBuilder/hooks/useAnalysisBuilderImperativeHandle.d.ts +13 -0
  156. package/dist/client/components/AnalysisBuilder/hooks/useDragReorder.d.ts +25 -0
  157. package/dist/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.d.ts +11 -0
  158. package/dist/client/components/AnalysisBuilder/utils/axisConfigUtils.d.ts +23 -0
  159. package/dist/client/components/AnalysisBuilder/utils/executionPlanMarkdown.d.ts +8 -0
  160. package/dist/client/components/AnalysisBuilder/utils/fieldUtils.d.ts +5 -0
  161. package/dist/client/components/AnalysisBuilder/utils/resultsPanelDerive.d.ts +68 -0
  162. package/dist/client/components/AnalysisBuilder/utils/shareStateUtils.d.ts +68 -0
  163. package/dist/client/components/AnalysisBuilder/utils/sortUtils.d.ts +7 -0
  164. package/dist/client/components/DashboardFilters/CompactFilterBarParts.d.ts +26 -0
  165. package/dist/client/components/DashboardFilters/DashboardFilterConfigModalParts.d.ts +27 -0
  166. package/dist/client/components/DashboardFilters/DashboardFilterValueInput.d.ts +39 -0
  167. package/dist/client/components/DashboardFilters/dashboardFilterConfigModalUtils.d.ts +21 -0
  168. package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +19 -0
  169. package/dist/client/components/DashboardFilters/useDashboardFilterConfigModal.d.ts +69 -0
  170. package/dist/client/components/DashboardFilters/useDateRangeState.d.ts +19 -0
  171. package/dist/client/components/DashboardFilters/useFilterDropdowns.d.ts +21 -0
  172. package/dist/client/components/DashboardFilters/useFilterValueFetch.d.ts +23 -0
  173. package/dist/client/components/DashboardPortletCard.d.ts +2 -57
  174. package/dist/client/components/analyticsPortlet/PortletChart.d.ts +31 -0
  175. package/dist/client/components/analyticsPortlet/PortletChartView.d.ts +35 -0
  176. package/dist/client/components/analyticsPortlet/PortletStates.d.ts +65 -0
  177. package/dist/client/components/analyticsPortlet/parsePortletQuery.d.ts +22 -0
  178. package/dist/client/components/analyticsPortlet/portletRenderState.d.ts +31 -0
  179. package/dist/client/components/analyticsPortlet/usePortletDebugData.d.ts +37 -0
  180. package/dist/client/components/analyticsPortlet/usePortletDrillState.d.ts +17 -0
  181. package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +37 -0
  182. package/dist/client/components/charts/ActivityGridChart.helpers.d.ts +33 -0
  183. package/dist/client/components/charts/ActivityGridChart.render.d.ts +31 -0
  184. package/dist/client/components/charts/AxisFormatControls.d.ts +3 -1
  185. package/dist/client/components/charts/BarChart.helpers.d.ts +23 -0
  186. package/dist/client/components/charts/BarSeries.d.ts +29 -0
  187. package/dist/client/components/charts/BubbleChart.helpers.d.ts +43 -0
  188. package/dist/client/components/charts/BubbleChart.render.d.ts +21 -0
  189. package/dist/client/components/charts/ChartStates.d.ts +38 -0
  190. package/dist/client/components/charts/FunnelChart.helpers.d.ts +25 -0
  191. package/dist/client/components/charts/FunnelViews.d.ts +16 -0
  192. package/dist/client/components/charts/HeatMapCanvas.d.ts +25 -0
  193. package/dist/client/components/charts/HeatMapChart.helpers.d.ts +64 -0
  194. package/dist/client/components/charts/KpiDelta.helpers.d.ts +20 -0
  195. package/dist/client/components/charts/KpiNumber.helpers.d.ts +30 -0
  196. package/dist/client/components/charts/KpiStates.d.ts +19 -0
  197. package/dist/client/components/charts/ScatterChart.helpers.d.ts +43 -0
  198. package/dist/client/components/charts/ScatterSeries.d.ts +17 -0
  199. package/dist/client/components/charts/ScatterTooltip.d.ts +21 -0
  200. package/dist/client/components/charts/TreeMapChart.helpers.d.ts +37 -0
  201. package/dist/client/components/charts/TreeMapContent.d.ts +24 -0
  202. package/dist/client/components/charts/TreeMapLegend.d.ts +13 -0
  203. package/dist/client/components/charts/cartesianChartHelpers.d.ts +126 -0
  204. package/dist/client/components/charts/chartAxisResolution.d.ts +32 -0
  205. package/dist/client/components/charts/chartScaffolding.d.ts +77 -0
  206. package/dist/client/components/charts/gaugeChartHelpers.d.ts +36 -0
  207. package/dist/client/components/charts/kpiTextHelpers.d.ts +46 -0
  208. package/dist/client/components/charts/radarChartHelpers.d.ts +14 -0
  209. package/dist/client/components/charts/radialBarChartHelpers.d.ts +22 -0
  210. package/dist/client/components/charts/useChartDimensions.d.ts +20 -0
  211. package/dist/client/components/charts/useKpiDimensions.d.ts +30 -0
  212. package/dist/client/components/dashboard/DashboardEditBar.d.ts +5 -0
  213. package/dist/client/components/dashboard/LayoutModeToggle.d.ts +10 -0
  214. package/dist/client/components/dashboardPortletCard/FilterFieldChip.d.ts +12 -0
  215. package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +43 -0
  216. package/dist/client/components/dashboardPortletCard/cardStyles.d.ts +33 -0
  217. package/dist/client/components/dashboardPortletCard/filterField.d.ts +12 -0
  218. package/dist/client/components/dashboardPortletCard/propsEqual.d.ts +55 -0
  219. package/dist/client/components/dashboardPortletCard/usePortletCardActions.d.ts +16 -0
  220. package/dist/client/components/portletAnalysisModal/saveValidation.d.ts +8 -0
  221. package/dist/client/components/shared/dateRangeUtils.d.ts +40 -0
  222. package/dist/client/components/shared/filterDisplayUtils.d.ts +10 -0
  223. package/dist/client/components/shared/filterItem/FilterDateRangeSelector.d.ts +17 -0
  224. package/dist/client/components/shared/filterItem/FilterFieldDropdown.d.ts +16 -0
  225. package/dist/client/components/shared/filterItem/dateRangeSync.d.ts +14 -0
  226. package/dist/client/components/shared/filterItem/fieldVisuals.d.ts +5 -0
  227. package/dist/client/components/shared/filterValueSelector/FilterValueInputs.d.ts +55 -0
  228. package/dist/client/components/shared/filterValueSelector/useFilterValueSelectorState.d.ts +25 -0
  229. package/dist/client/components/shared/queryFieldUtils.d.ts +21 -0
  230. package/dist/client/components/shared/utils.d.ts +4 -43
  231. package/dist/client/components.js +3 -3
  232. package/dist/client/hooks/agentChatStream.d.ts +39 -0
  233. package/dist/client/hooks/analysisQueryExecutionModes.d.ts +133 -0
  234. package/dist/client/hooks/drillNavigation.d.ts +25 -0
  235. package/dist/client/hooks.js +3 -3
  236. package/dist/client/icons.js +2 -2
  237. package/dist/client/index.js +816 -669
  238. package/dist/client/index.js.map +1 -1
  239. package/dist/client/providers.js +3 -3
  240. package/dist/client/schema.js +1 -1
  241. package/dist/client/shared/chartConfigBuilders.d.ts +18 -0
  242. package/dist/client/shared/components/QueryAnalysisPanel.sections.d.ts +41 -0
  243. package/dist/client/shared/queryTransforms.d.ts +20 -0
  244. package/dist/client/shared/utils.d.ts +2 -4
  245. package/dist/client/stores/optionsToAnalysisConfig.d.ts +17 -0
  246. package/dist/client/styles.css +1 -1
  247. package/dist/client/utils/axisValueFormatting.d.ts +32 -0
  248. package/dist/client/utils/timeValueFormatting.d.ts +32 -0
  249. package/dist/client/utils.js +6 -6
  250. package/dist/client-bundle-stats.html +1 -1
  251. package/dist/mcp-app/mcp-app.html +55 -55
  252. package/dist/server/google-BOnRIN1w.cjs +2 -0
  253. package/dist/server/{google-CFYljAOF.js → google-CvKM9yVM.js} +83 -71
  254. package/dist/server/index.cjs +179 -211
  255. package/dist/server/index.js +6330 -6458
  256. package/dist/server/{openai-BZdAA7Ji.js → openai-cDlFSTk6.js} +60 -58
  257. package/dist/server/openai-vXvLni8v.cjs +1 -0
  258. package/dist/server/server/adapters/base-adapter.d.ts +80 -35
  259. package/dist/server/server/adapters/databend-adapter.d.ts +8 -59
  260. package/dist/server/server/adapters/duckdb-adapter.d.ts +5 -59
  261. package/dist/server/server/adapters/mysql-adapter.d.ts +13 -70
  262. package/dist/server/server/adapters/postgres-adapter.d.ts +1 -65
  263. package/dist/server/server/adapters/snowflake-adapter.d.ts +5 -68
  264. package/dist/server/server/adapters/sqlite-adapter.d.ts +12 -32
  265. package/dist/server/server/adapters/window-function-builder.d.ts +11 -0
  266. package/dist/server/server/agent/chart-validation.d.ts +0 -5
  267. package/dist/server/server/agent/handler-steps.d.ts +37 -0
  268. package/dist/server/server/ai/discovery-helpers.d.ts +29 -0
  269. package/dist/server/server/ai/discovery.d.ts +4 -0
  270. package/dist/server/server/ai/suggestion-helpers.d.ts +33 -0
  271. package/dist/server/server/ai/suggestion.d.ts +0 -3
  272. package/dist/server/server/ai/validation-helpers.d.ts +21 -0
  273. package/dist/server/server/ai/validation.d.ts +0 -3
  274. package/dist/server/server/builders/analysis-utils.d.ts +106 -0
  275. package/dist/server/server/builders/cte-builder.d.ts +46 -0
  276. package/dist/server/server/builders/date-time-builder.d.ts +5 -0
  277. package/dist/server/server/builders/date-time-helpers.d.ts +34 -0
  278. package/dist/server/server/builders/filter-builder.d.ts +2 -0
  279. package/dist/server/server/builders/filter-operators.d.ts +23 -0
  280. package/dist/server/server/builders/flow-query-builder.d.ts +46 -19
  281. package/dist/server/server/builders/funnel-query-builder.d.ts +16 -5
  282. package/dist/server/server/builders/group-by-builder.d.ts +11 -0
  283. package/dist/server/server/builders/measure-builder.d.ts +43 -0
  284. package/dist/server/server/builders/retention-query-builder.d.ts +12 -14
  285. package/dist/server/server/cache-utils.d.ts +25 -5
  286. package/dist/server/server/compiler-metadata.d.ts +11 -0
  287. package/dist/server/server/compiler.d.ts +8 -14
  288. package/dist/server/server/cube-utils.d.ts +29 -4
  289. package/dist/server/server/execution/annotation-builder.d.ts +12 -0
  290. package/dist/server/server/execution/filter-cache-preloader.d.ts +19 -0
  291. package/dist/server/server/execution/mode-router.d.ts +25 -0
  292. package/dist/server/server/execution/query-result-cache.d.ts +21 -0
  293. package/dist/server/server/execution/result-post-processor.d.ts +10 -0
  294. package/dist/server/server/executor.d.ts +33 -30
  295. package/dist/server/server/executors/explain-utils.d.ts +28 -0
  296. package/dist/server/server/explain/explain-tree.d.ts +20 -0
  297. package/dist/server/server/filter-cache.d.ts +2 -2
  298. package/dist/server/server/gap-filler.d.ts +6 -0
  299. package/dist/server/server/index.d.ts +3 -1
  300. package/dist/server/server/logical-plan/cte-planner-helpers.d.ts +37 -0
  301. package/dist/server/server/logical-plan/cte-planner.d.ts +104 -0
  302. package/dist/server/server/logical-plan/filter-propagation.d.ts +44 -0
  303. package/dist/server/server/logical-plan/index.d.ts +6 -1
  304. package/dist/server/server/logical-plan/join-planner.d.ts +27 -0
  305. package/dist/server/server/logical-plan/logical-planner.d.ts +7 -200
  306. package/dist/server/server/logical-plan/optimiser.d.ts +3 -1
  307. package/dist/server/server/logical-plan/plan-analysis-reporter.d.ts +59 -0
  308. package/dist/server/server/logical-plan/planner-utils.d.ts +20 -0
  309. package/dist/server/server/logical-plan/types.d.ts +17 -9
  310. package/dist/server/server/measure-classification.d.ts +40 -0
  311. package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +21 -21
  312. package/dist/server/server/physical-plan/drizzle-sql-builder.d.ts +11 -0
  313. package/dist/server/server/physical-plan/processors/index.d.ts +2 -0
  314. package/dist/server/server/physical-plan/processors/keys-dedup-processor.d.ts +13 -0
  315. package/dist/server/server/physical-plan/processors/multi-fact-processor.d.ts +13 -0
  316. package/dist/server/server/physical-plan/processors/shared.d.ts +5 -0
  317. package/dist/server/server/query-handlers.d.ts +79 -0
  318. package/dist/server/server/query-modes.d.ts +28 -0
  319. package/dist/server/server/query-validator.d.ts +9 -0
  320. package/dist/server/server/resolvers/calculated-measure-resolver.d.ts +5 -0
  321. package/dist/server/server/resolvers/join-path-resolver.d.ts +6 -0
  322. package/dist/server/server/sql-format.d.ts +11 -0
  323. package/dist/server/server/types/cube.d.ts +18 -4
  324. package/dist/server/server/types/flow.d.ts +6 -5
  325. package/dist/server/server/types/index.d.ts +1 -1
  326. package/dist/server/server/types/validation.d.ts +14 -0
  327. package/package.json +11 -4
  328. package/dist/adapters/google-DUlXeeDA.cjs +0 -2
  329. package/dist/adapters/handler-CzbCuS6_.cjs +0 -25
  330. package/dist/adapters/locale-BPB7flIG.js +0 -8249
  331. package/dist/adapters/locale-tIMrNcCr.cjs +0 -198
  332. package/dist/adapters/mcp-transport-C2QzXm6h.cjs +0 -40
  333. package/dist/adapters/mcp-transport-D0B3S1tB.js +0 -579
  334. package/dist/adapters/openai-D_U4V0kT.cjs +0 -1
  335. package/dist/adapters/utils-KV37IBIv.cjs +0 -128
  336. package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js.map +0 -1
  337. package/dist/client/chunks/analysis-builder-MuMIzoRq.js +0 -5367
  338. package/dist/client/chunks/analysis-builder-MuMIzoRq.js.map +0 -1
  339. package/dist/client/chunks/analysis-builder-shared-CYVwSPqt.js.map +0 -1
  340. package/dist/client/chunks/chart-activity-grid-DmruKPab.js.map +0 -1
  341. package/dist/client/chunks/chart-area-DHCPM4Em.js +0 -450
  342. package/dist/client/chunks/chart-area-DHCPM4Em.js.map +0 -1
  343. package/dist/client/chunks/chart-bar-KddciGDv.js +0 -271
  344. package/dist/client/chunks/chart-bar-KddciGDv.js.map +0 -1
  345. package/dist/client/chunks/chart-bubble-CfqiB538.js +0 -273
  346. package/dist/client/chunks/chart-bubble-CfqiB538.js.map +0 -1
  347. package/dist/client/chunks/chart-config-area-Bq_UsW3x.js +0 -101
  348. package/dist/client/chunks/chart-config-area-Bq_UsW3x.js.map +0 -1
  349. package/dist/client/chunks/chart-config-bar-_JEGZnAu.js +0 -95
  350. package/dist/client/chunks/chart-config-bar-_JEGZnAu.js.map +0 -1
  351. package/dist/client/chunks/chart-config-box-plot-DJ-dWWXA.js.map +0 -1
  352. package/dist/client/chunks/chart-config-gauge-DSwC04l0.js.map +0 -1
  353. package/dist/client/chunks/chart-config-kpi-delta-D6BIkHL3.js.map +0 -1
  354. package/dist/client/chunks/chart-config-kpi-number-Bx-V9a62.js.map +0 -1
  355. package/dist/client/chunks/chart-config-kpi-text-CcqC1u-8.js.map +0 -1
  356. package/dist/client/chunks/chart-config-line-Db3jDsWc.js.map +0 -1
  357. package/dist/client/chunks/chart-config-pie-DD4SmRTF.js.map +0 -1
  358. package/dist/client/chunks/chart-config-radar-CC2XAaGr.js.map +0 -1
  359. package/dist/client/chunks/chart-config-radial-bar-DmxKx1R0.js.map +0 -1
  360. package/dist/client/chunks/chart-config-tree-map-BI-oQStO.js.map +0 -1
  361. package/dist/client/chunks/chart-config-waterfall-DSnyixbI.js.map +0 -1
  362. package/dist/client/chunks/chart-data-table-BO4sXsim.js.map +0 -1
  363. package/dist/client/chunks/chart-funnel-DnWRsmnS.js.map +0 -1
  364. package/dist/client/chunks/chart-gauge-CgMeqeGb.js +0 -424
  365. package/dist/client/chunks/chart-gauge-CgMeqeGb.js.map +0 -1
  366. package/dist/client/chunks/chart-heat-map-DcGm9SWK.js +0 -231
  367. package/dist/client/chunks/chart-heat-map-DcGm9SWK.js.map +0 -1
  368. package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js +0 -343
  369. package/dist/client/chunks/chart-kpi-delta-C2wKPqCb.js.map +0 -1
  370. package/dist/client/chunks/chart-kpi-number-gWYF44ol.js +0 -322
  371. package/dist/client/chunks/chart-kpi-number-gWYF44ol.js.map +0 -1
  372. package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js +0 -149
  373. package/dist/client/chunks/chart-kpi-text-DIYtJtk4.js.map +0 -1
  374. package/dist/client/chunks/chart-line-9BEGN5Ti.js +0 -433
  375. package/dist/client/chunks/chart-line-9BEGN5Ti.js.map +0 -1
  376. package/dist/client/chunks/chart-pie-BjAIhyOi.js +0 -172
  377. package/dist/client/chunks/chart-pie-BjAIhyOi.js.map +0 -1
  378. package/dist/client/chunks/chart-radar-Dgkcl2bN.js +0 -154
  379. package/dist/client/chunks/chart-radar-Dgkcl2bN.js.map +0 -1
  380. package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js +0 -148
  381. package/dist/client/chunks/chart-radial-bar-DdWJjAhK.js.map +0 -1
  382. package/dist/client/chunks/chart-scatter-DaHYP_OL.js +0 -255
  383. package/dist/client/chunks/chart-scatter-DaHYP_OL.js.map +0 -1
  384. package/dist/client/chunks/chart-tree-map-uiwUU4nb.js +0 -298
  385. package/dist/client/chunks/chart-tree-map-uiwUU4nb.js.map +0 -1
  386. package/dist/client/chunks/useDirtyStateTracking-CoeQbprt.js.map +0 -1
  387. package/dist/server/google-DUlXeeDA.cjs +0 -2
  388. package/dist/server/openai-D_U4V0kT.cjs +0 -1
@@ -1,255 +0,0 @@
1
- import { n as e } from "./rolldown-runtime-CWhphoD1.js";
2
- import { S as t, T as n, _ as r, i, k as a, n as o, w as s, x as c, y as l } from "./chart-activity-grid-DmruKPab.js";
3
- import { l as u } from "./chart-area-DHCPM4Em.js";
4
- import d, { useState as f } from "react";
5
- import { jsx as p, jsxs as m } from "react/jsx-runtime";
6
- import { CartesianGrid as h, Legend as g, Scatter as _, ScatterChart as v, Tooltip as y, XAxis as b, YAxis as x } from "recharts";
7
- //#region src/client/components/charts/ScatterChart.tsx
8
- var S = /* @__PURE__ */ e({ default: () => C }), C = d.memo(function({ data: e, chartConfig: d, displayConfig: S = {}, queryObject: C, height: w = "100%", colorPalette: T }) {
9
- let { t: E } = a(), [D, O] = f(null), k = r();
10
- try {
11
- let r = {
12
- showLegend: S?.showLegend ?? !0,
13
- showGrid: S?.showGrid ?? !0,
14
- showTooltip: S?.showTooltip ?? !0
15
- }, a = S?.xAxisFormat, f = S?.leftYAxisFormat;
16
- if (!e || e.length === 0) return /* @__PURE__ */ p("div", {
17
- className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
18
- style: { height: w },
19
- children: /* @__PURE__ */ m("div", {
20
- className: "dc:text-center",
21
- children: [/* @__PURE__ */ p("div", {
22
- className: "dc:text-sm dc:font-semibold dc:mb-1",
23
- children: E("chart.runtime.noData")
24
- }), /* @__PURE__ */ p("div", {
25
- className: "dc:text-xs text-dc-text-secondary",
26
- children: E("chart.runtime.noDataHint.scatter")
27
- })]
28
- })
29
- });
30
- let A, j, M = [];
31
- if (d?.xAxis && d?.yAxis) {
32
- A = Array.isArray(d.xAxis) ? d.xAxis[0] : d.xAxis, j = Array.isArray(d.yAxis) ? d.yAxis[0] : d.yAxis;
33
- let e = d.series;
34
- M = e ? Array.isArray(e) ? e : [e] : [];
35
- } else if (d?.x && d?.y) A = d.x, j = Array.isArray(d.y) ? d.y[0] : d.y;
36
- else return /* @__PURE__ */ p("div", {
37
- className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
38
- style: { height: w },
39
- children: /* @__PURE__ */ m("div", {
40
- className: "dc:text-center",
41
- children: [/* @__PURE__ */ p("div", {
42
- className: "dc:text-sm dc:font-semibold dc:mb-1",
43
- children: E("chart.runtime.configError")
44
- }), /* @__PURE__ */ p("div", {
45
- className: "dc:text-xs",
46
- children: E("chart.runtime.configErrorHint.axisInvalid")
47
- })]
48
- })
49
- });
50
- if (!A || !j) return /* @__PURE__ */ p("div", {
51
- className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
52
- style: { height: w },
53
- children: /* @__PURE__ */ m("div", {
54
- className: "dc:text-center",
55
- children: [/* @__PURE__ */ p("div", {
56
- className: "dc:text-sm dc:font-semibold dc:mb-1",
57
- children: E("chart.runtime.configError")
58
- }), /* @__PURE__ */ p("div", {
59
- className: "dc:text-xs",
60
- children: E("chart.runtime.configErrorHint.axisFields")
61
- })]
62
- })
63
- });
64
- let N = (C?.timeDimensions || []).map((e) => e.dimension), P, F = {};
65
- if (M.length > 0) {
66
- let r = M[0];
67
- e.forEach((e) => {
68
- let i = String(e[r] || "Default");
69
- F[i] || (F[i] = []);
70
- let a = t(C, A), o = c(e[A], a) || e[A], l = n(e[j]), u = typeof o == "string" ? parseFloat(o) : o;
71
- if (s(u) && l !== null) {
72
- let n = {};
73
- N.forEach((r) => {
74
- if (e[r]) {
75
- let i = t(C, r);
76
- n[r] = c(e[r], i);
77
- }
78
- }), F[i].push({
79
- x: u,
80
- y: l,
81
- name: i,
82
- timeValues: n,
83
- originalItem: e
84
- });
85
- }
86
- }), P = Object.keys(F).flatMap((e) => F[e]);
87
- } else {
88
- let r = t(C, A);
89
- P = e.map((e) => {
90
- let i = c(e[A], r) || e[A], a = n(e[j]), o = typeof i == "string" ? parseFloat(i) : i, l = {};
91
- return N.forEach((n) => {
92
- if (e[n]) {
93
- let r = t(C, n);
94
- l[n] = c(e[n], r);
95
- }
96
- }), {
97
- x: o,
98
- y: a,
99
- name: "Point",
100
- timeValues: l,
101
- originalItem: e,
102
- isValid: s(o) && a !== null
103
- };
104
- }).filter((e) => e.isValid);
105
- }
106
- if (!P || P.length === 0) return /* @__PURE__ */ p("div", {
107
- className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
108
- style: { height: w },
109
- children: /* @__PURE__ */ m("div", {
110
- className: "dc:text-center",
111
- children: [/* @__PURE__ */ p("div", {
112
- className: "dc:text-sm dc:font-semibold dc:mb-1",
113
- children: E("chart.runtime.noValidData")
114
- }), /* @__PURE__ */ p("div", {
115
- className: "dc:text-xs text-dc-text-secondary",
116
- children: "No valid data points for scatter chart after transformation"
117
- })]
118
- })
119
- });
120
- let I = Object.keys(F), L = I.length > 1 && I.length <= 20, R = r.showLegend && L;
121
- return /* @__PURE__ */ p(u, {
122
- height: w,
123
- children: /* @__PURE__ */ m(v, {
124
- margin: {
125
- ...i,
126
- left: 40
127
- },
128
- accessibilityLayer: !1,
129
- children: [
130
- r.showGrid && /* @__PURE__ */ p(h, { strokeDasharray: "3 3" }),
131
- /* @__PURE__ */ p(b, {
132
- type: "number",
133
- dataKey: "x",
134
- name: a?.label || k(A),
135
- tick: { fontSize: 12 },
136
- tickFormatter: a ? (e) => l(e, a) : void 0
137
- }),
138
- /* @__PURE__ */ p(x, {
139
- type: "number",
140
- dataKey: "y",
141
- name: f?.label || k(j),
142
- tick: { fontSize: 12 },
143
- tickFormatter: f ? (e) => l(e, f) : void 0,
144
- label: {
145
- value: f?.label || k(j),
146
- angle: -90,
147
- position: "left",
148
- style: {
149
- textAnchor: "middle",
150
- fontSize: "12px"
151
- }
152
- }
153
- }),
154
- r.showTooltip && /* @__PURE__ */ p(y, {
155
- cursor: { strokeDasharray: "3 3" },
156
- content: ({ active: e, payload: t }) => {
157
- if (!e || !t || t.length === 0) return null;
158
- let n = t[0]?.payload;
159
- return n ? /* @__PURE__ */ m("div", {
160
- style: {
161
- backgroundColor: "white",
162
- border: "1px solid #e5e7eb",
163
- borderRadius: "0.5rem",
164
- fontSize: "0.875rem",
165
- color: "#1f2937",
166
- boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
167
- padding: "8px 12px"
168
- },
169
- children: [
170
- /* @__PURE__ */ p("div", {
171
- style: {
172
- fontWeight: 600,
173
- marginBottom: "4px"
174
- },
175
- children: n.name
176
- }),
177
- n.timeValues && Object.keys(n.timeValues).length > 0 && /* @__PURE__ */ p("div", {
178
- style: {
179
- marginBottom: "4px",
180
- color: "#6b7280"
181
- },
182
- children: Object.entries(n.timeValues).map(([e, t]) => /* @__PURE__ */ m("div", { children: [
183
- k(e),
184
- ": ",
185
- t
186
- ] }, e))
187
- }),
188
- /* @__PURE__ */ m("div", { children: [
189
- a?.label || k(A),
190
- ": ",
191
- l(n.x, a)
192
- ] }),
193
- /* @__PURE__ */ m("div", { children: [
194
- f?.label || k(j),
195
- ": ",
196
- l(n.y, f)
197
- ] })
198
- ]
199
- }) : null;
200
- }
201
- }),
202
- R && /* @__PURE__ */ p(g, {
203
- wrapperStyle: {
204
- fontSize: "12px",
205
- paddingTop: "10px"
206
- },
207
- iconType: "circle",
208
- iconSize: 8,
209
- layout: "horizontal",
210
- align: "center",
211
- verticalAlign: "bottom",
212
- onMouseEnter: (e) => O(String(e.dataKey || "")),
213
- onMouseLeave: () => O(null)
214
- }),
215
- L ? I.map((e, t) => /* @__PURE__ */ p(_, {
216
- name: e,
217
- data: F[e],
218
- fill: T?.colors && T.colors[t % T.colors.length] || o[t % o.length],
219
- fillOpacity: D ? D === e ? 1 : .3 : 1
220
- }, e)) : /* @__PURE__ */ p(_, {
221
- name: "Data",
222
- data: P,
223
- fill: T?.colors && T.colors[0] || o[0]
224
- })
225
- ]
226
- })
227
- });
228
- } catch (e) {
229
- return /* @__PURE__ */ p("div", {
230
- className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
231
- style: { height: w },
232
- children: /* @__PURE__ */ m("div", {
233
- className: "dc:text-center",
234
- children: [
235
- /* @__PURE__ */ p("div", {
236
- className: "dc:text-sm dc:font-semibold dc:mb-1",
237
- children: E("chart.runtime.chartError", { chartType: "Scatter Chart" })
238
- }),
239
- /* @__PURE__ */ p("div", {
240
- className: "dc:text-xs dc:mb-2",
241
- children: e instanceof Error ? e.message : E("chart.runtime.unknownError")
242
- }),
243
- /* @__PURE__ */ p("div", {
244
- className: "dc:text-xs text-dc-text-muted",
245
- children: E("chart.runtime.checkConfig")
246
- })
247
- ]
248
- })
249
- });
250
- }
251
- });
252
- //#endregion
253
- export { S as n, C as t };
254
-
255
- //# sourceMappingURL=chart-scatter-DaHYP_OL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chart-scatter-DaHYP_OL.js","names":[],"sources":["../../../src/client/components/charts/ScatterChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { ScatterChart as RechartsScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Legend, Tooltip } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, parseNumericValue, isValidNumericValue, formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport type { ChartProps } from '../../types'\n\nconst ScatterChart = React.memo(function ScatterChart({\n data,\n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const { t } = useTranslation()\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n // Use specialized hook to avoid re-renders from unrelated context changes\n const getFieldLabel = useCubeFieldLabel()\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n // Extract axis format configs\n // For scatter charts, xAxis uses xAxisFormat, yAxis uses leftYAxisFormat\n const xAxisFormat = displayConfig?.xAxisFormat\n const yAxisFormat = displayConfig?.leftYAxisFormat\n\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.noData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.noDataHint.scatter')}</div>\n </div>\n </div>\n )\n }\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisField: string\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - handle both string and array values\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisField = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis[0] : chartConfig.yAxis\n // Normalize series to array\n const seriesConfig = chartConfig.series\n seriesFields = seriesConfig ? (Array.isArray(seriesConfig) ? seriesConfig : [seriesConfig]) : []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format (adapt for scatter chart)\n xAxisField = chartConfig.x\n yAxisField = Array.isArray(chartConfig.y) ? chartConfig.y[0] : chartConfig.y\n } else {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.configError')}</div>\n <div className=\"dc:text-xs\">{t('chart.runtime.configErrorHint.axisInvalid')}</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisField) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.configError')}</div>\n <div className=\"dc:text-xs\">{t('chart.runtime.configErrorHint.axisFields')}</div>\n </div>\n </div>\n )\n }\n\n // Extract time dimensions from query for tooltip display\n const timeDimensions = queryObject?.timeDimensions || []\n const timeDimensionFields = timeDimensions.map((td: any) => td.dimension)\n\n // Transform data for scatter plot\n // Null handling: Filter out data points where x or y coordinates are null\n let scatterData: any[]\n let seriesGroups: { [key: string]: any[] } = {}\n\n if (seriesFields.length > 0) {\n // Group data by series field\n const seriesField = seriesFields[0]\n data.forEach(item => {\n const seriesValue = String(item[seriesField] || 'Default')\n if (!seriesGroups[seriesValue]) {\n seriesGroups[seriesValue] = []\n }\n\n const xGranularity = getFieldGranularity(queryObject, xAxisField)\n const xValue = formatTimeValue(item[xAxisField], xGranularity) || item[xAxisField]\n const yValue = parseNumericValue(item[yAxisField])\n\n // Only add point if both x and y are valid numbers\n const xNum = typeof xValue === 'string' ? parseFloat(xValue) : xValue\n if (isValidNumericValue(xNum) && yValue !== null) {\n // Extract time dimension values for tooltip\n const timeValues: { [key: string]: string } = {}\n timeDimensionFields.forEach((field: string) => {\n if (item[field]) {\n const granularity = getFieldGranularity(queryObject, field)\n timeValues[field] = formatTimeValue(item[field], granularity)\n }\n })\n\n seriesGroups[seriesValue].push({\n x: xNum,\n y: yValue,\n name: seriesValue,\n timeValues,\n originalItem: item\n })\n }\n })\n\n // Collect all valid points from all series for validation\n // (The actual rendering uses seriesGroups with series separated)\n const seriesKeys = Object.keys(seriesGroups)\n scatterData = seriesKeys.flatMap(key => seriesGroups[key])\n } else {\n // Single series scatter plot\n const xGranularity = getFieldGranularity(queryObject, xAxisField)\n scatterData = data\n .map(item => {\n const xValue = formatTimeValue(item[xAxisField], xGranularity) || item[xAxisField]\n const yValue = parseNumericValue(item[yAxisField])\n const xNum = typeof xValue === 'string' ? parseFloat(xValue) : xValue\n\n // Extract time dimension values for tooltip\n const timeValues: { [key: string]: string } = {}\n timeDimensionFields.forEach((field: string) => {\n if (item[field]) {\n const granularity = getFieldGranularity(queryObject, field)\n timeValues[field] = formatTimeValue(item[field], granularity)\n }\n })\n\n return {\n x: xNum,\n y: yValue,\n name: `Point`,\n timeValues,\n originalItem: item,\n isValid: isValidNumericValue(xNum) && yValue !== null\n }\n })\n .filter(point => point.isValid)\n }\n \n // Validate transformed data\n if (!scatterData || scatterData.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.noValidData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No valid data points for scatter chart after transformation</div>\n </div>\n </div>\n )\n }\n\n const seriesKeys = Object.keys(seriesGroups)\n // Limit series to prevent performance issues with high-cardinality fields (e.g., dates)\n // If more than 20 unique series, fall back to single-series mode\n const MAX_SERIES = 20\n const hasSeries = seriesKeys.length > 1 && seriesKeys.length <= MAX_SERIES\n \n // Determine if legend will be shown\n const showLegend = safeDisplayConfig.showLegend && hasSeries\n \n // Use custom chart margins with extra left space for Y-axis label\n const chartMargins = {\n ...CHART_MARGINS,\n left: 40 // Increased from 20 to 40 for Y-axis label space\n }\n\n return (\n <ChartContainer height={height}>\n <RechartsScatterChart margin={chartMargins} accessibilityLayer={false}>\n {safeDisplayConfig.showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" />\n )}\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n name={xAxisFormat?.label || getFieldLabel(xAxisField)}\n tick={{ fontSize: 12 }}\n tickFormatter={xAxisFormat ? (value) => formatAxisValue(value, xAxisFormat) : undefined}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n name={yAxisFormat?.label || getFieldLabel(yAxisField)}\n tick={{ fontSize: 12 }}\n tickFormatter={yAxisFormat ? (value) => formatAxisValue(value, yAxisFormat) : undefined}\n label={{ value: yAxisFormat?.label || getFieldLabel(yAxisField), angle: -90, position: 'left', style: { textAnchor: 'middle', fontSize: '12px' } }}\n />\n {safeDisplayConfig.showTooltip && (\n <Tooltip\n cursor={{ strokeDasharray: '3 3' }}\n content={({ active, payload }) => {\n if (!active || !payload || payload.length === 0) return null\n // Only show the first (active) point\n const point = payload[0]?.payload\n if (!point) return null\n\n return (\n <div style={{\n backgroundColor: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n color: '#1f2937',\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\n padding: '8px 12px'\n }}>\n <div style={{ fontWeight: 600, marginBottom: '4px' }}>{point.name}</div>\n {/* Show time dimension values if present */}\n {point.timeValues && Object.keys(point.timeValues).length > 0 && (\n <div style={{ marginBottom: '4px', color: '#6b7280' }}>\n {Object.entries(point.timeValues).map(([field, value]) => (\n <div key={field}>{getFieldLabel(field)}: {value as string}</div>\n ))}\n </div>\n )}\n <div>{xAxisFormat?.label || getFieldLabel(xAxisField)}: {formatAxisValue(point.x, xAxisFormat)}</div>\n <div>{yAxisFormat?.label || getFieldLabel(yAxisField)}: {formatAxisValue(point.y, yAxisFormat)}</div>\n </div>\n )\n }}\n />\n )}\n {showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {hasSeries ? (\n // Multiple series\n seriesKeys.map((seriesKey, index) => (\n <Scatter\n key={seriesKey}\n name={seriesKey}\n data={seriesGroups[seriesKey]}\n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n />\n ))\n ) : (\n // Single series\n <Scatter\n name=\"Data\"\n data={scatterData}\n fill={(colorPalette?.colors && colorPalette.colors[0]) || CHART_COLORS[0]}\n />\n )}\n </RechartsScatterChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'ScatterChart rendering error\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.chartError', { chartType: 'Scatter Chart' })}</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : t('chart.runtime.unknownError')}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">{t('chart.runtime.checkConfig')}</div>\n </div>\n </div>\n )\n }\n})\n\nexport default ScatterChart"],"mappings":"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"}
@@ -1,298 +0,0 @@
1
- import { n as e } from "./rolldown-runtime-CWhphoD1.js";
2
- import { S as t, _ as n, k as r, n as i, r as a, x as o, y as s } from "./chart-activity-grid-DmruKPab.js";
3
- import { c, l } from "./chart-area-DHCPM4Em.js";
4
- import u, { useState as d } from "react";
5
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
6
- import { Treemap as m } from "recharts";
7
- import { scaleOrdinal as h, scaleQuantize as g } from "d3";
8
- //#region src/client/components/charts/TreeMapChart.tsx
9
- var _ = /* @__PURE__ */ e({ default: () => v }), v = u.memo(function({ data: e, chartConfig: u, displayConfig: _ = {}, queryObject: v, height: y = "100%", colorPalette: b, onDataPointClick: x, drillEnabled: S }) {
10
- let { t: C } = r(), [w, T] = d(null), E = n();
11
- try {
12
- let n = {
13
- showTooltip: _?.showTooltip ?? !0,
14
- showLegend: _?.showLegend ?? !0,
15
- leftYAxisFormat: _?.leftYAxisFormat
16
- };
17
- if (!e || e.length === 0) return /* @__PURE__ */ f("div", {
18
- className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
19
- style: { height: y },
20
- children: /* @__PURE__ */ p("div", {
21
- className: "dc:text-center",
22
- children: [/* @__PURE__ */ f("div", {
23
- className: "dc:text-sm dc:font-semibold dc:mb-1",
24
- children: C("chart.runtime.noData")
25
- }), /* @__PURE__ */ f("div", {
26
- className: "dc:text-xs text-dc-text-secondary",
27
- children: C("chart.runtime.noDataHint.treemap")
28
- })]
29
- })
30
- });
31
- let r, d = !1, D;
32
- if (u?.xAxis && u?.yAxis) {
33
- let n = Array.isArray(u.xAxis) ? u.xAxis[0] : u.xAxis, s = Array.isArray(u.yAxis) ? u.yAxis[0] : u.yAxis;
34
- D = Array.isArray(u.series) ? u.series[0] : u.series;
35
- let c = t(v, n);
36
- if (D) {
37
- let t = e.map((e) => {
38
- let t = e[D];
39
- return typeof t == "string" ? parseFloat(t) : t;
40
- }).filter((e) => !isNaN(e));
41
- if (d = t.length === e.length && t.every((e) => typeof e == "number"), d) {
42
- let i = Math.min(...t), l = Math.max(...t), u = g().domain([i, l]).range(a);
43
- r = e.map((e) => {
44
- let t = u(typeof e[D] == "string" ? parseFloat(e[D]) : e[D]);
45
- return {
46
- name: o(e[n], c) || String(e[n]) || "Unknown",
47
- size: typeof e[s] == "string" ? parseFloat(e[s]) : e[s] || 0,
48
- fill: t,
49
- series: String(e[D])
50
- };
51
- });
52
- } else {
53
- let t = [...new Set(e.map((e) => String(e[D])))], a = h().domain(t).range(b?.colors || i);
54
- r = e.map((e) => ({
55
- name: o(e[n], c) || String(e[n]) || "Unknown",
56
- size: typeof e[s] == "string" ? parseFloat(e[s]) : e[s] || 0,
57
- fill: a(String(e[D])),
58
- series: String(e[D])
59
- }));
60
- }
61
- } else r = e.map((e, t) => ({
62
- name: o(e[n], c) || String(e[n]) || "Unknown",
63
- size: typeof e[s] == "string" ? parseFloat(e[s]) : e[s] || 0,
64
- fill: b?.colors && b.colors[t % b.colors.length] || i[t % i.length]
65
- }));
66
- } else {
67
- let t = e[0], n = Object.keys(t), a = n.find((e) => typeof t[e] == "string" || e.toLowerCase().includes("name") || e.toLowerCase().includes("label") || e.toLowerCase().includes("category")) || n[0], o = n.find((e) => e.toLowerCase().includes("size")) || n.find((e) => typeof t[e] == "number" && e !== a) || n[1];
68
- if (!o) return /* @__PURE__ */ f("div", {
69
- className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
70
- style: { height: y },
71
- children: /* @__PURE__ */ p("div", {
72
- className: "dc:text-center",
73
- children: [/* @__PURE__ */ f("div", {
74
- className: "dc:text-sm dc:font-semibold dc:mb-1",
75
- children: C("chart.runtime.configError")
76
- }), /* @__PURE__ */ f("div", {
77
- className: "dc:text-xs",
78
- children: C("chart.runtime.configErrorHint.treemapNumeric")
79
- })]
80
- })
81
- });
82
- r = e.map((e, t) => {
83
- let n = e[a];
84
- return n = typeof n == "boolean" ? n ? "Active" : "Inactive" : n === "true" || n === "false" ? n === "true" ? "Active" : "Inactive" : String(n), {
85
- name: n,
86
- size: typeof e[o] == "string" ? parseFloat(e[o]) : e[o] || 0,
87
- fill: b?.colors && b.colors[t % b.colors.length] || i[t % i.length]
88
- };
89
- });
90
- }
91
- if (r = r.filter((e) => e.size != null && e.size > 0), r.length === 0) return /* @__PURE__ */ f("div", {
92
- className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
93
- style: { height: y },
94
- children: /* @__PURE__ */ p("div", {
95
- className: "dc:text-center",
96
- children: [/* @__PURE__ */ f("div", {
97
- className: "dc:text-sm dc:font-semibold dc:mb-1",
98
- children: C("chart.runtime.noValidData")
99
- }), /* @__PURE__ */ f("div", {
100
- className: "dc:text-xs text-dc-text-secondary",
101
- children: "No valid data points for treemap chart after transformation"
102
- })]
103
- })
104
- });
105
- let O = (e) => {
106
- let { x: t, y: a, width: o, height: c, index: l, name: d, size: m } = e;
107
- return o < 20 || c < 20 ? null : /* @__PURE__ */ p("g", { children: [/* @__PURE__ */ f("rect", {
108
- x: t,
109
- y: a,
110
- width: o,
111
- height: c,
112
- style: {
113
- fill: r[l]?.fill || b?.colors && b.colors[l % b.colors.length] || i[l % i.length],
114
- fillOpacity: w === null ? .8 : w === l ? 1 : .6,
115
- stroke: "#fff",
116
- strokeWidth: 2,
117
- cursor: S ? "pointer" : "default",
118
- pointerEvents: "all"
119
- },
120
- onMouseEnter: () => T(l),
121
- onMouseLeave: () => T(null),
122
- onClick: S && x ? (e) => {
123
- e.stopPropagation();
124
- let t = r[l];
125
- t && x && x({
126
- dataPoint: t,
127
- clickedField: v?.measures?.[0] || u?.yAxis?.[0] || "",
128
- xValue: d,
129
- position: {
130
- x: e.clientX,
131
- y: e.clientY
132
- },
133
- nativeEvent: e
134
- });
135
- } : void 0
136
- }), /* @__PURE__ */ f("foreignObject", {
137
- x: t,
138
- y: a,
139
- width: o,
140
- height: c,
141
- style: {
142
- pointerEvents: "none",
143
- overflow: "visible"
144
- },
145
- children: /* @__PURE__ */ p("div", {
146
- style: {
147
- width: "100%",
148
- height: "100%",
149
- display: "flex",
150
- flexDirection: "column",
151
- alignItems: "center",
152
- justifyContent: "center",
153
- padding: "4px",
154
- boxSizing: "border-box",
155
- color: "#ffffff",
156
- textShadow: "0 1px 2px rgba(0,0,0,0.8)",
157
- fontFamily: "system-ui, -apple-system, sans-serif",
158
- overflow: "hidden"
159
- },
160
- children: [o > 40 && c > 30 && /* @__PURE__ */ f("div", {
161
- style: {
162
- fontSize: `${Math.max(10, Math.min(o / 8, c / 8, 16))}px`,
163
- fontWeight: "600",
164
- textAlign: "center",
165
- lineHeight: "1.2",
166
- marginBottom: o > 60 && c > 45 ? "4px" : "0",
167
- wordBreak: "break-word",
168
- hyphens: "auto"
169
- },
170
- children: d
171
- }), o > 60 && c > 45 && /* @__PURE__ */ f("div", {
172
- style: {
173
- fontSize: `${Math.max(8, Math.min(o / 10, c / 10, 14))}px`,
174
- textAlign: "center",
175
- opacity: .9
176
- },
177
- children: n.leftYAxisFormat ? s(m, n.leftYAxisFormat) : typeof m == "number" ? m.toLocaleString() : m
178
- })]
179
- })
180
- })] });
181
- }, k = r.some((e) => "series" in e) ? [...new Set(r.map((e) => e.series).filter(Boolean))] : [], A = [];
182
- if (n.showLegend && D) if (d) {
183
- let t = Math.min(...e.map((e) => {
184
- let t = e[D];
185
- return typeof t == "string" ? parseFloat(t) : t;
186
- })), r = Math.max(...e.map((e) => {
187
- let t = e[D];
188
- return typeof t == "string" ? parseFloat(t) : t;
189
- }));
190
- A = a.map((e, i) => {
191
- let o = i / (a.length - 1), c = t + (r - t) * o;
192
- return {
193
- value: n.leftYAxisFormat ? s(c, n.leftYAxisFormat) : c.toFixed(2),
194
- type: "rect",
195
- color: e
196
- };
197
- });
198
- } else k.length > 1 && (A = k.map((e, t) => ({
199
- value: e,
200
- type: "rect",
201
- color: i[t % i.length]
202
- })));
203
- let j = n.showLegend && A.length > 0;
204
- return /* @__PURE__ */ p("div", {
205
- className: "dc:w-full",
206
- style: { height: j ? typeof y == "string" && y.includes("%") ? y : typeof y == "number" ? y + 60 : `calc(${y} + 60px)` : y },
207
- children: [/* @__PURE__ */ f(l, {
208
- height: j ? "calc(100% - 50px)" : "100%",
209
- children: /* @__PURE__ */ f(m, {
210
- data: r,
211
- dataKey: "size",
212
- aspectRatio: 4 / 3,
213
- stroke: "#fff",
214
- content: /* @__PURE__ */ f(O, {}),
215
- children: n.showTooltip && /* @__PURE__ */ f(c, { formatter: n.leftYAxisFormat ? (e, t) => [s(e, n.leftYAxisFormat), t] : void 0 })
216
- })
217
- }), j && /* @__PURE__ */ f("div", {
218
- className: "dc:flex dc:justify-center dc:items-center dc:mt-4 dc:pb-2",
219
- children: d ? /* @__PURE__ */ p("div", {
220
- className: "dc:flex dc:flex-col dc:items-center",
221
- children: [/* @__PURE__ */ f("div", {
222
- className: "dc:text-xs dc:font-semibold text-dc-text-primary dc:mb-2",
223
- children: D ? E(D) : ""
224
- }), /* @__PURE__ */ p("div", {
225
- className: "dc:flex dc:items-center dc:gap-2",
226
- children: [
227
- /* @__PURE__ */ f("span", {
228
- className: "dc:text-xs text-dc-text-muted",
229
- children: n.leftYAxisFormat ? s(Math.min(...e.map((e) => {
230
- let t = e[D];
231
- return typeof t == "string" ? parseFloat(t) : t;
232
- })), n.leftYAxisFormat) : Math.min(...e.map((e) => {
233
- let t = e[D];
234
- return typeof t == "string" ? parseFloat(t) : t;
235
- })).toFixed(2)
236
- }),
237
- /* @__PURE__ */ f("div", {
238
- className: "dc:h-4 dc:rounded-sm",
239
- style: {
240
- width: "200px",
241
- background: `linear-gradient(to right, ${a.join(", ")})`
242
- }
243
- }),
244
- /* @__PURE__ */ f("span", {
245
- className: "dc:text-xs text-dc-text-muted",
246
- children: n.leftYAxisFormat ? s(Math.max(...e.map((e) => {
247
- let t = e[D];
248
- return typeof t == "string" ? parseFloat(t) : t;
249
- })), n.leftYAxisFormat) : Math.max(...e.map((e) => {
250
- let t = e[D];
251
- return typeof t == "string" ? parseFloat(t) : t;
252
- })).toFixed(2)
253
- })
254
- ]
255
- })]
256
- }) : /* @__PURE__ */ f("div", {
257
- className: "dc:flex dc:flex-wrap dc:justify-center dc:gap-4",
258
- children: A.map((e, t) => /* @__PURE__ */ p("div", {
259
- className: "dc:flex dc:items-center dc:gap-2",
260
- children: [/* @__PURE__ */ f("div", {
261
- className: "dc:w-3 dc:h-3 rounded-xs",
262
- style: { backgroundColor: e.color }
263
- }), /* @__PURE__ */ f("span", {
264
- className: "dc:text-xs text-dc-text-muted",
265
- children: e.value
266
- })]
267
- }, t))
268
- })
269
- })]
270
- });
271
- } catch (e) {
272
- return /* @__PURE__ */ f("div", {
273
- className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
274
- style: { height: y },
275
- children: /* @__PURE__ */ p("div", {
276
- className: "dc:text-center",
277
- children: [
278
- /* @__PURE__ */ f("div", {
279
- className: "dc:text-sm dc:font-semibold dc:mb-1",
280
- children: C("chart.runtime.chartError", { chartType: "TreeMap Chart" })
281
- }),
282
- /* @__PURE__ */ f("div", {
283
- className: "dc:text-xs dc:mb-2",
284
- children: e instanceof Error ? e.message : C("chart.runtime.unknownError")
285
- }),
286
- /* @__PURE__ */ f("div", {
287
- className: "dc:text-xs text-dc-text-muted",
288
- children: C("chart.runtime.checkConfig")
289
- })
290
- ]
291
- })
292
- });
293
- }
294
- });
295
- //#endregion
296
- export { _ as n, v as t };
297
-
298
- //# sourceMappingURL=chart-tree-map-uiwUU4nb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chart-tree-map-uiwUU4nb.js","names":[],"sources":["../../../src/client/components/charts/TreeMapChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { Treemap } from 'recharts'\nimport { scaleQuantize, scaleOrdinal } from 'd3'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS, CHART_COLORS_GRADIENT } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport type { ChartProps } from '../../types'\n\nconst TreeMapChart = React.memo(function TreeMapChart({\n data,\n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette,\n onDataPointClick,\n drillEnabled\n}: ChartProps) {\n const { t } = useTranslation()\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n // Use specialized hook to avoid re-renders from unrelated context changes\n const getFieldLabel = useCubeFieldLabel()\n \n try {\n const safeDisplayConfig = {\n showTooltip: displayConfig?.showTooltip ?? true,\n showLegend: displayConfig?.showLegend ?? true,\n leftYAxisFormat: displayConfig?.leftYAxisFormat\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.noData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.noDataHint.treemap')}</div>\n </div>\n </div>\n )\n }\n\n let treemapData: Array<{name: string, size: number, fill?: string, series?: string}>\n let isNumericSeries = false\n let seriesField: string | undefined\n\n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - use chart config\n const xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis // Name/category field\n const yAxisField = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis[0] : chartConfig.yAxis // Size field\n seriesField = Array.isArray(chartConfig.series) ? chartConfig.series[0] : chartConfig.series // Color grouping field\n\n const granularity = getFieldGranularity(queryObject, xAxisField)\n \n if (seriesField) {\n // Check if series field is numeric for color scaling\n const seriesValues = data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }).filter(val => !isNaN(val))\n \n isNumericSeries = seriesValues.length === data.length && seriesValues.every(val => typeof val === 'number')\n \n \n if (isNumericSeries) {\n // Use D3 quantize scale for better color distribution with small ranges\n const minValue = Math.min(...seriesValues)\n const maxValue = Math.max(...seriesValues)\n \n // Create D3 quantize color scale - maps continuous data to discrete color bands\n const colorScale = scaleQuantize<string>()\n .domain([minValue, maxValue])\n .range(CHART_COLORS_GRADIENT)\n \n treemapData = data.map((item) => {\n const seriesValue = typeof item[seriesField!] === 'string' \n ? parseFloat(item[seriesField!]) \n : item[seriesField!]\n \n const color = colorScale(seriesValue)\n \n return {\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: color,\n series: String(item[seriesField!])\n }\n })\n } else {\n // Use D3 ordinal color scale for categorical series\n const uniqueSeriesValues = [...new Set(data.map(item => String(item[seriesField!])))]\n const colorScale = scaleOrdinal<string>()\n .domain(uniqueSeriesValues)\n .range(colorPalette?.colors || CHART_COLORS)\n \n treemapData = data.map((item) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: colorScale(String(item[seriesField!])),\n series: String(item[seriesField!])\n }))\n }\n } else {\n // No series grouping - use index-based colors\n treemapData = data.map((item, index) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n size: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }))\n }\n } else {\n // Legacy format or auto-detection\n const firstRow = data[0]\n const keys = Object.keys(firstRow)\n \n // Try to find name/label field\n const nameField = keys.find(key => \n typeof firstRow[key] === 'string' ||\n key.toLowerCase().includes('name') ||\n key.toLowerCase().includes('label') ||\n key.toLowerCase().includes('category')\n ) || keys[0]\n\n // Find a numeric field for size - look for 'size' field first, then any numeric\n const sizeField = keys.find(key => key.toLowerCase().includes('size')) ||\n keys.find(key => \n typeof firstRow[key] === 'number' && key !== nameField\n ) || keys[1]\n\n if (!sizeField) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.configError')}</div>\n <div className=\"dc:text-xs\">{t('chart.runtime.configErrorHint.treemapNumeric')}</div>\n </div>\n </div>\n )\n }\n\n // Transform data for treemap chart\n treemapData = data.map((item, index) => {\n let name = item[nameField]\n // Handle boolean values with better labels\n if (typeof name === 'boolean') {\n name = name ? 'Active' : 'Inactive'\n } else if (name === 'true' || name === 'false') {\n name = name === 'true' ? 'Active' : 'Inactive'\n } else {\n name = String(name)\n }\n return {\n name,\n size: typeof item[sizeField] === 'string' \n ? parseFloat(item[sizeField]) \n : (item[sizeField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }\n })\n }\n\n // Filter out zero/null values and ensure positive sizes\n treemapData = treemapData.filter(item => item.size != null && item.size > 0)\n \n if (treemapData.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.noValidData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No valid data points for treemap chart after transformation</div>\n </div>\n </div>\n )\n }\n\n // Custom content renderer for treemap cells with HTML overlays\n const CustomizedContent = (props: any) => {\n const { x, y, width, height, index, name, size } = props\n\n if (width < 20 || height < 20) return null // Don't render content for very small cells\n\n const handleClick = (event: React.MouseEvent) => {\n event.stopPropagation()\n const cellData = treemapData[index]\n if (cellData && onDataPointClick) {\n // Use query measures for proper field name (chartConfig.yAxis may contain display labels)\n const measureField = queryObject?.measures?.[0] || chartConfig?.yAxis?.[0] || ''\n onDataPointClick({\n dataPoint: cellData,\n clickedField: measureField,\n xValue: name,\n position: { x: event.clientX, y: event.clientY },\n nativeEvent: event\n })\n }\n }\n\n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n style={{\n fill: treemapData[index]?.fill || ((colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]),\n fillOpacity: hoveredIndex !== null ? (hoveredIndex === index ? 1 : 0.6) : 0.8,\n stroke: '#fff',\n strokeWidth: 2,\n cursor: drillEnabled ? 'pointer' : 'default',\n pointerEvents: 'all' // Ensure rect captures click events\n }}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n onClick={drillEnabled && onDataPointClick ? handleClick : undefined}\n />\n <foreignObject \n x={x} \n y={y} \n width={width} \n height={height}\n style={{ pointerEvents: 'none', overflow: 'visible' }}\n >\n <div \n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px',\n boxSizing: 'border-box',\n color: '#ffffff',\n textShadow: '0 1px 2px rgba(0,0,0,0.8)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n overflow: 'hidden'\n }}\n >\n {width > 40 && height > 30 && (\n <div \n style={{\n fontSize: `${Math.max(10, Math.min(width / 8, height / 8, 16))}px`,\n fontWeight: '600',\n textAlign: 'center',\n lineHeight: '1.2',\n marginBottom: width > 60 && height > 45 ? '4px' : '0',\n wordBreak: 'break-word',\n hyphens: 'auto'\n }}\n >\n {name}\n </div>\n )}\n {width > 60 && height > 45 && (\n <div\n style={{\n fontSize: `${Math.max(8, Math.min(width / 10, height / 10, 14))}px`,\n textAlign: 'center',\n opacity: 0.9\n }}\n >\n {safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(size, safeDisplayConfig.leftYAxisFormat)\n : (typeof size === 'number' ? size.toLocaleString() : size)\n }\n </div>\n )}\n </div>\n </foreignObject>\n </g>\n )\n }\n\n // Check if we have series data for legend\n const hasSeriesData = treemapData.some(item => 'series' in item)\n const uniqueSeries = hasSeriesData \n ? [...new Set(treemapData.map(item => item.series).filter(Boolean))]\n : []\n \n // For numeric series, create a legend showing the color scale\n let legendPayload: any[] = []\n if (safeDisplayConfig.showLegend && seriesField) {\n \n if (isNumericSeries) {\n // Create color scale legend for numeric values\n const minValue = Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }))\n const maxValue = Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n }))\n \n \n // Create legend entries showing color scale\n legendPayload = CHART_COLORS_GRADIENT.map((color, index) => {\n const ratio = index / (CHART_COLORS_GRADIENT.length - 1)\n const value = minValue + (maxValue - minValue) * ratio\n return {\n value: safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(value, safeDisplayConfig.leftYAxisFormat)\n : value.toFixed(2),\n type: 'rect',\n color: color\n }\n })\n } else if (uniqueSeries.length > 1) {\n // Use categorical legend for non-numeric series\n legendPayload = uniqueSeries.map((series, index) => ({\n value: series,\n type: 'rect',\n color: CHART_COLORS[index % CHART_COLORS.length]\n }))\n }\n \n }\n\n // Calculate height adjustment for legend\n const hasLegend = safeDisplayConfig.showLegend && legendPayload.length > 0\n const adjustedHeight = hasLegend \n ? (typeof height === 'string' && height.includes('%') \n ? height \n : typeof height === 'number' \n ? height + 60 \n : `calc(${height} + 60px)`)\n : height\n\n return (\n <div className=\"dc:w-full\" style={{ height: adjustedHeight }}>\n <ChartContainer height={hasLegend ? `calc(100% - 50px)` : \"100%\"}>\n <Treemap\n data={treemapData}\n dataKey=\"size\"\n aspectRatio={4/3}\n stroke=\"#fff\"\n content={<CustomizedContent />}\n >\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any, name: string) => [formatAxisValue(value, safeDisplayConfig.leftYAxisFormat), name]\n : undefined\n }\n />\n )}\n </Treemap>\n </ChartContainer>\n \n {/* Custom Legend outside ChartContainer */}\n {hasLegend && (\n <div className=\"dc:flex dc:justify-center dc:items-center dc:mt-4 dc:pb-2\">\n {isNumericSeries ? (\n // Gradient legend for numeric series\n <div className=\"dc:flex dc:flex-col dc:items-center\">\n <div className=\"dc:text-xs dc:font-semibold text-dc-text-primary dc:mb-2\">\n {seriesField ? getFieldLabel(seriesField) : ''}\n </div>\n <div className=\"dc:flex dc:items-center dc:gap-2\">\n <span className=\"dc:text-xs text-dc-text-muted\">\n {safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })), safeDisplayConfig.leftYAxisFormat)\n : Math.min(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })).toFixed(2)\n }\n </span>\n <div\n className=\"dc:h-4 dc:rounded-sm\"\n style={{\n width: '200px',\n background: `linear-gradient(to right, ${CHART_COLORS_GRADIENT.join(', ')})`\n }}\n />\n <span className=\"dc:text-xs text-dc-text-muted\">\n {safeDisplayConfig.leftYAxisFormat\n ? formatAxisValue(Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })), safeDisplayConfig.leftYAxisFormat)\n : Math.max(...data.map(item => {\n const value = item[seriesField!]\n return typeof value === 'string' ? parseFloat(value) : value\n })).toFixed(2)\n }\n </span>\n </div>\n </div>\n ) : (\n // Discrete legend for categorical series\n <div className=\"dc:flex dc:flex-wrap dc:justify-center dc:gap-4\">\n {legendPayload.map((item, index) => (\n <div key={index} className=\"dc:flex dc:items-center dc:gap-2\">\n <div\n className=\"dc:w-3 dc:h-3 rounded-xs\"\n style={{ backgroundColor: item.color }}\n />\n <span className=\"dc:text-xs text-dc-text-muted\">\n {item.value}\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )\n } catch (error) {\n // 'TreeMapChart rendering error\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.chartError', { chartType: 'TreeMap Chart' })}</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : t('chart.runtime.unknownError')}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">{t('chart.runtime.checkConfig')}</div>\n </div>\n </div>\n )\n }\n})\n\nexport default TreeMapChart"],"mappings":"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"}