drizzle-cube 0.6.2 → 0.6.4

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