drizzle-cube 0.8.0 → 0.8.2

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 (329) hide show
  1. package/dist/adapters/ActivityGridChart.config-Bc7mPqcf.cjs +1 -0
  2. package/dist/adapters/ActivityGridChart.config-Dd2YDeaM.js +2 -0
  3. package/dist/adapters/AreaChart.config-BqNusnpg.js +2 -0
  4. package/dist/adapters/AreaChart.config-dI84V34B.cjs +1 -0
  5. package/dist/adapters/BarChart.config-B9MQjgLJ.cjs +1 -0
  6. package/dist/adapters/BarChart.config-Cq_qcxBA.js +2 -0
  7. package/dist/adapters/BoxPlotChart.config-XmtRN2xq.cjs +1 -0
  8. package/dist/adapters/BoxPlotChart.config-Zc-JGV-W.js +2 -0
  9. package/dist/adapters/BubbleChart.config-CU_18uxb.js +2 -0
  10. package/dist/adapters/BubbleChart.config-CbhOzA6-.cjs +1 -0
  11. package/dist/adapters/CandlestickChart.config-Bwo3uaa-.js +2 -0
  12. package/dist/adapters/CandlestickChart.config-CmRBlWFv.cjs +1 -0
  13. package/dist/adapters/DataTable.config-7JNSj6qQ.js +2 -0
  14. package/dist/adapters/DataTable.config-DNxm1sYk.cjs +1 -0
  15. package/dist/adapters/DotStripChart.config-B7Dl-T1h.js +2 -0
  16. package/dist/adapters/DotStripChart.config-Co4g1fpZ.cjs +1 -0
  17. package/dist/adapters/FunnelChart.config-D1TpuGtL.cjs +1 -0
  18. package/dist/adapters/FunnelChart.config-vuZScOHQ.js +2 -0
  19. package/dist/adapters/GaugeChart.config-BMgUHKhC.cjs +1 -0
  20. package/dist/adapters/GaugeChart.config-zdpFydo6.js +2 -0
  21. package/dist/adapters/HeatMapChart.config-4XMab1zq.js +2 -0
  22. package/dist/adapters/HeatMapChart.config-C-Ns6QBq.cjs +1 -0
  23. package/dist/adapters/KpiDelta.config-BGdqsHcc.js +2 -0
  24. package/dist/adapters/KpiDelta.config-DuNxrGIi.cjs +1 -0
  25. package/dist/adapters/KpiNumber.config-CkPWpcSz.js +2 -0
  26. package/dist/adapters/KpiNumber.config-DMGmuA3i.cjs +1 -0
  27. package/dist/adapters/KpiText.config-Bvtuv8vE.js +2 -0
  28. package/dist/adapters/KpiText.config-DOMLO16U.cjs +1 -0
  29. package/dist/adapters/LineChart.config-CJmTSmZ1.js +2 -0
  30. package/dist/adapters/LineChart.config-CrkGu0aa.cjs +1 -0
  31. package/dist/adapters/MarkdownChart.config-BgY5Xc97.cjs +1 -0
  32. package/dist/adapters/MarkdownChart.config-Cm6G4Yuh.js +2 -0
  33. package/dist/adapters/MeasureProfileChart.config-BYwDo_ox.cjs +1 -0
  34. package/dist/adapters/MeasureProfileChart.config-Dt7npubZ.js +2 -0
  35. package/dist/adapters/PieChart.config-BRbPctBN.cjs +1 -0
  36. package/dist/adapters/PieChart.config-HZofeody.js +2 -0
  37. package/dist/adapters/ProportionBarChart.config-B_rTtGZr.cjs +1 -0
  38. package/dist/adapters/ProportionBarChart.config-ChCSoM0L.js +2 -0
  39. package/dist/adapters/RadarChart.config-B9OdMEib.js +2 -0
  40. package/dist/adapters/RadarChart.config-BOgPD2Kz.cjs +1 -0
  41. package/dist/adapters/RadialBarChart.config-CeP7jEbq.js +2 -0
  42. package/dist/adapters/RadialBarChart.config-sivA1Jmo.cjs +1 -0
  43. package/dist/adapters/RecordsTable.config-BInSgo-G.js +2 -0
  44. package/dist/adapters/RecordsTable.config-CVmxLdjz.cjs +1 -0
  45. package/dist/adapters/RetentionCombinedChart.config-8ry7gh6X.cjs +1 -0
  46. package/dist/adapters/RetentionCombinedChart.config-Bxtxnlcf.js +2 -0
  47. package/dist/adapters/RetentionHeatmap.config-DCtOD8dO.js +2 -0
  48. package/dist/adapters/RetentionHeatmap.config-i-LgmmIT.cjs +1 -0
  49. package/dist/adapters/SankeyChart.config-DfpeHfNT.cjs +1 -0
  50. package/dist/adapters/SankeyChart.config-hfM0ACm1.js +2 -0
  51. package/dist/adapters/ScatterChart.config-BD2vfOZ6.js +2 -0
  52. package/dist/adapters/ScatterChart.config-CdpvRueF.cjs +1 -0
  53. package/dist/adapters/SunburstChart.config-Boyt88L_.cjs +1 -0
  54. package/dist/adapters/SunburstChart.config-BvrofzMv.js +2 -0
  55. package/dist/adapters/TreeMapChart.config-DBrqwtqT.js +2 -0
  56. package/dist/adapters/TreeMapChart.config-KcRLlZAG.cjs +1 -0
  57. package/dist/adapters/WaterfallChart.config-CuCGaIl5.cjs +1 -0
  58. package/dist/adapters/WaterfallChart.config-DZ8H0V2L.js +2 -0
  59. package/dist/adapters/{compiler-CQJ5GOwF.js → compiler-BFLAXV7W.js} +1160 -1861
  60. package/dist/adapters/compiler-DG6dLFQU.cjs +166 -0
  61. package/dist/adapters/core/index.cjs +1 -1
  62. package/dist/adapters/core/index.js +1 -1
  63. package/dist/adapters/{core-DgTGXxDu.cjs → core-CrJu6vJY.cjs} +1 -1
  64. package/dist/adapters/{core-DXkuSUBg.js → core-l3KMTu9u.js} +3 -3
  65. package/dist/adapters/express/index.cjs +1 -1
  66. package/dist/adapters/express/index.js +5 -5
  67. package/dist/adapters/fastify/index.cjs +1 -1
  68. package/dist/adapters/fastify/index.js +23 -23
  69. package/dist/{server/google-eKAc20al.js → adapters/google-DRY7jnOh.js} +46 -28
  70. package/dist/adapters/{google-BhvizbFR.cjs → google-PsZzwedr.cjs} +2 -2
  71. package/dist/adapters/handler-CRGZ8gd2.cjs +25 -0
  72. package/dist/adapters/{handler-CphYSZRh.js → handler-DESp4wPg.js} +454 -237
  73. package/dist/adapters/hono/index.cjs +1 -1
  74. package/dist/adapters/hono/index.js +4 -4
  75. package/dist/adapters/mcp-tools.cjs +1 -1
  76. package/dist/adapters/mcp-tools.js +2 -2
  77. package/dist/adapters/mcp-transport-BqdBHmXL.js +730 -0
  78. package/dist/adapters/mcp-transport-D8xZJLPD.cjs +42 -0
  79. package/dist/adapters/nextjs/index.cjs +1 -1
  80. package/dist/adapters/nextjs/index.js +5 -5
  81. package/dist/adapters/{openai-CBrN4nxl.js → openai-BJyU4kvE.js} +3 -3
  82. package/dist/adapters/{openai-CSzWluuv.cjs → openai-DH9MtcLA.cjs} +1 -1
  83. package/dist/adapters/{openai-D-VMcPao.js → openai-DK_KWiI7.js} +1 -1
  84. package/dist/adapters/{openai-CI9vGKSf.cjs → openai-GO3M7Hwi.cjs} +2 -2
  85. package/dist/adapters/{utils-DkmShl5f.js → utils-BhlkVCzZ.js} +1985 -1122
  86. package/dist/adapters/utils-C1JpSDOX.cjs +128 -0
  87. package/dist/adapters/utils.cjs +1 -1
  88. package/dist/adapters/utils.d.ts +17 -3
  89. package/dist/adapters/utils.js +1 -1
  90. package/dist/cjs/adapters/utils.d.ts +17 -3
  91. package/dist/cjs/client/charts/chartConfigRegistry.d.ts +7 -0
  92. package/dist/cjs/client/charts/chartConfigs.d.ts +17 -1
  93. package/dist/cjs/client/client/CubeClient.d.ts +11 -1
  94. package/dist/cjs/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +4 -2
  95. package/dist/cjs/client/components/AnalysisBuilder/ColumnFormatsEditor.d.ts +10 -0
  96. package/dist/cjs/client/components/AnalysisBuilder/DisplayOptionControl.d.ts +3 -2
  97. package/dist/cjs/client/components/AnalysisBuilder/utils/queryUtils.d.ts +7 -1
  98. package/dist/cjs/client/components/analyticsPortlet/PortletChart.d.ts +2 -1
  99. package/dist/cjs/client/components/analyticsPortlet/PortletChartView.d.ts +4 -1
  100. package/dist/cjs/client/components/analyticsPortlet/usePortletDeadMembers.d.ts +24 -0
  101. package/dist/cjs/client/components/analyticsPortlet/usePortletPagination.d.ts +21 -0
  102. package/dist/cjs/client/components/charts/DotStripChart.config.d.ts +15 -0
  103. package/dist/cjs/client/components/charts/DotStripChart.d.ts +4 -0
  104. package/dist/cjs/client/components/charts/DotStripChart.helpers.d.ts +91 -0
  105. package/dist/cjs/client/components/charts/RecordsTable.config.d.ts +10 -0
  106. package/dist/cjs/client/components/charts/RecordsTable.d.ts +4 -0
  107. package/dist/cjs/client/components/charts/recordsTableHooks.d.ts +68 -0
  108. package/dist/cjs/client/icons/types.d.ts +2 -0
  109. package/dist/cjs/client/index.d.ts +2 -2
  110. package/dist/cjs/client/types.d.ts +97 -1
  111. package/dist/cjs/client/utils/recordsTableUtils.d.ts +71 -0
  112. package/dist/cjs/client/utils/rowLinkUtils.d.ts +35 -0
  113. package/dist/cjs/server/agent/chart-validation.d.ts +1 -1
  114. package/dist/cjs/server/ai/chart-schema.d.ts +117 -0
  115. package/dist/cjs/server/ai/discovery-helpers.d.ts +14 -0
  116. package/dist/cjs/server/ai/discovery.d.ts +6 -0
  117. package/dist/cjs/server/ai/query-schema.d.ts +1 -1
  118. package/dist/cjs/server/attribute-dimensions.d.ts +11 -8
  119. package/dist/cjs/server/builders/group-by-builder.d.ts +15 -0
  120. package/dist/cjs/server/compiler.d.ts +3 -4
  121. package/dist/cjs/server/executor.d.ts +15 -0
  122. package/dist/cjs/server/index.d.ts +2 -0
  123. package/dist/cjs/server/query-handlers.d.ts +1 -0
  124. package/dist/cjs/server/query-validator.d.ts +36 -4
  125. package/dist/cjs/server/types/core.d.ts +5 -0
  126. package/dist/cjs/server/types/cube.d.ts +12 -0
  127. package/dist/cjs/server/types/query.d.ts +8 -0
  128. package/dist/cli/index.cjs +134 -52
  129. package/dist/client/charts/chartConfigRegistry.d.ts +7 -0
  130. package/dist/client/charts/chartConfigs.d.ts +17 -1
  131. package/dist/client/charts.js +13 -13
  132. package/dist/client/chunks/{DashboardEditModal-9An5EDAz.js → DashboardEditModal-BliiIHcI.js} +1653 -1188
  133. package/dist/client/chunks/DashboardEditModal-BliiIHcI.js.map +1 -0
  134. package/dist/client/chunks/DotStripChart-ChwsVeRU.js +408 -0
  135. package/dist/client/chunks/DotStripChart-ChwsVeRU.js.map +1 -0
  136. package/dist/client/chunks/{ProportionBarChart-BVcbGY2C.js → ProportionBarChart-D-Qt9nkF.js} +3 -3
  137. package/dist/client/chunks/{ProportionBarChart-BVcbGY2C.js.map → ProportionBarChart-D-Qt9nkF.js.map} +1 -1
  138. package/dist/client/chunks/RecordsTable-aG-QYXOH.js +556 -0
  139. package/dist/client/chunks/RecordsTable-aG-QYXOH.js.map +1 -0
  140. package/dist/client/chunks/{RetentionCombinedChart-D68Rvdi-.js → RetentionCombinedChart-BRZ9w7ah.js} +3 -3
  141. package/dist/client/chunks/{RetentionCombinedChart-D68Rvdi-.js.map → RetentionCombinedChart-BRZ9w7ah.js.map} +1 -1
  142. package/dist/client/chunks/{RetentionHeatmap-CE7BAjrB.js → RetentionHeatmap-LkTt89pK.js} +2 -2
  143. package/dist/client/chunks/{RetentionHeatmap-CE7BAjrB.js.map → RetentionHeatmap-LkTt89pK.js.map} +1 -1
  144. package/dist/client/chunks/{analysis-builder-D1pYvvwc.js → analysis-builder-C0gJ3kDD.js} +169 -168
  145. package/dist/client/chunks/{analysis-builder-D1pYvvwc.js.map → analysis-builder-C0gJ3kDD.js.map} +1 -1
  146. package/dist/client/chunks/{analysis-builder-shared-BQvwUc6z.js → analysis-builder-shared-dqcpl_WL.js} +965 -954
  147. package/dist/client/chunks/analysis-builder-shared-dqcpl_WL.js.map +1 -0
  148. package/dist/client/chunks/{chart-activity-grid-DvD_4wJz.js → chart-activity-grid-CJzxC18G.js} +175 -84
  149. package/dist/client/chunks/chart-activity-grid-CJzxC18G.js.map +1 -0
  150. package/dist/client/chunks/{chart-area-DPp3hSOK.js → chart-area-C66dgy84.js} +21 -21
  151. package/dist/client/chunks/{chart-area-DPp3hSOK.js.map → chart-area-C66dgy84.js.map} +1 -1
  152. package/dist/client/chunks/{chart-bar-Od3pOyZ0.js → chart-bar-D9kiSOCT.js} +5 -5
  153. package/dist/client/chunks/{chart-bar-Od3pOyZ0.js.map → chart-bar-D9kiSOCT.js.map} +1 -1
  154. package/dist/client/chunks/{chart-box-plot-l0iFn2n2.js → chart-box-plot-FsLIMisc.js} +2 -2
  155. package/dist/client/chunks/{chart-box-plot-l0iFn2n2.js.map → chart-box-plot-FsLIMisc.js.map} +1 -1
  156. package/dist/client/chunks/{chart-bubble-Dl0RcP8N.js → chart-bubble-BzyvrqKs.js} +2 -2
  157. package/dist/client/chunks/{chart-bubble-Dl0RcP8N.js.map → chart-bubble-BzyvrqKs.js.map} +1 -1
  158. package/dist/client/chunks/{chart-candlestick-DZMqbscF.js → chart-candlestick-6lD35bLw.js} +2 -2
  159. package/dist/client/chunks/{chart-candlestick-DZMqbscF.js.map → chart-candlestick-6lD35bLw.js.map} +1 -1
  160. package/dist/client/chunks/{chart-data-table-DgiNBOWf.js → chart-data-table-Cou9qOab.js} +1222 -1029
  161. package/dist/client/chunks/chart-data-table-Cou9qOab.js.map +1 -0
  162. package/dist/client/chunks/{chart-funnel-YLZlyN1X.js → chart-funnel-B0775aaT.js} +2 -2
  163. package/dist/client/chunks/{chart-funnel-YLZlyN1X.js.map → chart-funnel-B0775aaT.js.map} +1 -1
  164. package/dist/client/chunks/{chart-gauge-BsqE2wwF.js → chart-gauge-pf-2E8w9.js} +3 -3
  165. package/dist/client/chunks/{chart-gauge-BsqE2wwF.js.map → chart-gauge-pf-2E8w9.js.map} +1 -1
  166. package/dist/client/chunks/{chart-heat-map-BsND8RM_.js → chart-heat-map-EzVGe6fl.js} +3 -3
  167. package/dist/client/chunks/{chart-heat-map-BsND8RM_.js.map → chart-heat-map-EzVGe6fl.js.map} +1 -1
  168. package/dist/client/chunks/{chart-kpi-delta-m0azuva-.js → chart-kpi-delta-lfskDdx4.js} +3 -3
  169. package/dist/client/chunks/{chart-kpi-delta-m0azuva-.js.map → chart-kpi-delta-lfskDdx4.js.map} +1 -1
  170. package/dist/client/chunks/{chart-kpi-number-6JS15SqF.js → chart-kpi-number-BnsofbTf.js} +5 -5
  171. package/dist/client/chunks/{chart-kpi-number-6JS15SqF.js.map → chart-kpi-number-BnsofbTf.js.map} +1 -1
  172. package/dist/client/chunks/{chart-kpi-text-BqX8p8Jn.js → chart-kpi-text-U5EdmdkV.js} +3 -3
  173. package/dist/client/chunks/{chart-kpi-text-BqX8p8Jn.js.map → chart-kpi-text-U5EdmdkV.js.map} +1 -1
  174. package/dist/client/chunks/{chart-line-NCmpxBfE.js → chart-line-IwXqPY80.js} +3 -3
  175. package/dist/client/chunks/{chart-line-NCmpxBfE.js.map → chart-line-IwXqPY80.js.map} +1 -1
  176. package/dist/client/chunks/{chart-markdown-ZOobqiiX.js → chart-markdown-yxN_xBP9.js} +2 -2
  177. package/dist/client/chunks/{chart-markdown-ZOobqiiX.js.map → chart-markdown-yxN_xBP9.js.map} +1 -1
  178. package/dist/client/chunks/{chart-measure-profile-CBAZaicJ.js → chart-measure-profile-Bs4vhBJQ.js} +3 -3
  179. package/dist/client/chunks/{chart-measure-profile-CBAZaicJ.js.map → chart-measure-profile-Bs4vhBJQ.js.map} +1 -1
  180. package/dist/client/chunks/{chart-pie-ChrasEI8.js → chart-pie-LDJfDXfX.js} +15 -15
  181. package/dist/client/chunks/{chart-pie-ChrasEI8.js.map → chart-pie-LDJfDXfX.js.map} +1 -1
  182. package/dist/client/chunks/{chart-radar-CxSVF7yL.js → chart-radar-BZY6TP9m.js} +13 -13
  183. package/dist/client/chunks/{chart-radar-CxSVF7yL.js.map → chart-radar-BZY6TP9m.js.map} +1 -1
  184. package/dist/client/chunks/{chart-radial-bar--SN0Wph0.js → chart-radial-bar-aga05X7h.js} +3 -3
  185. package/dist/client/chunks/{chart-radial-bar--SN0Wph0.js.map → chart-radial-bar-aga05X7h.js.map} +1 -1
  186. package/dist/client/chunks/{chart-sankey-CDOSGg9r.js → chart-sankey-MRCoWFd4.js} +2 -2
  187. package/dist/client/chunks/{chart-sankey-CDOSGg9r.js.map → chart-sankey-MRCoWFd4.js.map} +1 -1
  188. package/dist/client/chunks/{chart-scatter-DgcEF-kI.js → chart-scatter-DP-nn9hH.js} +3 -3
  189. package/dist/client/chunks/{chart-scatter-DgcEF-kI.js.map → chart-scatter-DP-nn9hH.js.map} +1 -1
  190. package/dist/client/chunks/{chart-sunburst-MB-jlGBm.js → chart-sunburst-DE4EX7zi.js} +3 -3
  191. package/dist/client/chunks/{chart-sunburst-MB-jlGBm.js.map → chart-sunburst-DE4EX7zi.js.map} +1 -1
  192. package/dist/client/chunks/{chart-tree-map-DeDXveVd.js → chart-tree-map-C3O6uQcP.js} +3 -3
  193. package/dist/client/chunks/{chart-tree-map-DeDXveVd.js.map → chart-tree-map-C3O6uQcP.js.map} +1 -1
  194. package/dist/client/chunks/{chart-waterfall-ur4vkO1j.js → chart-waterfall-DU2Fg_7P.js} +3 -3
  195. package/dist/client/chunks/{chart-waterfall-ur4vkO1j.js.map → chart-waterfall-DU2Fg_7P.js.map} +1 -1
  196. package/dist/client/chunks/charts-core-DnirPG1F.js +190 -0
  197. package/dist/client/chunks/charts-core-DnirPG1F.js.map +1 -0
  198. package/dist/client/chunks/charts-loader-tCSbqT7H.js +87 -0
  199. package/dist/client/chunks/charts-loader-tCSbqT7H.js.map +1 -0
  200. package/dist/client/chunks/{en-US-BE6VoG0o.js → en-US-HP6FHuNy.js} +3 -1
  201. package/dist/client/chunks/{en-US-BE6VoG0o.js.map → en-US-HP6FHuNy.js.map} +1 -1
  202. package/dist/client/chunks/{nl-NL-CMXHDBr0.js → nl-NL-B9VnaVAm.js} +89 -1
  203. package/dist/client/chunks/nl-NL-B9VnaVAm.js.map +1 -0
  204. package/dist/client/chunks/{schema-visualization-BEbFtUIL.js → schema-visualization-o1zzuMQy.js} +3 -3
  205. package/dist/client/chunks/{schema-visualization-BEbFtUIL.js.map → schema-visualization-o1zzuMQy.js.map} +1 -1
  206. package/dist/client/chunks/{useDirtyStateTracking-CSDg96Rw.js → useDirtyStateTracking-DTYbmRBn.js} +15 -15
  207. package/dist/client/chunks/{useDirtyStateTracking-CSDg96Rw.js.map → useDirtyStateTracking-DTYbmRBn.js.map} +1 -1
  208. package/dist/client/chunks/{useExplainAI-BnkoZ-zS.js → useExplainAI-MuC9jBn-.js} +16 -16
  209. package/dist/client/chunks/{useExplainAI-BnkoZ-zS.js.map → useExplainAI-MuC9jBn-.js.map} +1 -1
  210. package/dist/client/chunks/{vendor-BmJDaduD.js → vendor-XQT9APIq.js} +49 -49
  211. package/dist/client/chunks/{vendor-BmJDaduD.js.map → vendor-XQT9APIq.js.map} +1 -1
  212. package/dist/client/client/CubeClient.d.ts +11 -1
  213. package/dist/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +4 -2
  214. package/dist/client/components/AnalysisBuilder/ColumnFormatsEditor.d.ts +10 -0
  215. package/dist/client/components/AnalysisBuilder/DisplayOptionControl.d.ts +3 -2
  216. package/dist/client/components/AnalysisBuilder/utils/queryUtils.d.ts +7 -1
  217. package/dist/client/components/analyticsPortlet/PortletChart.d.ts +2 -1
  218. package/dist/client/components/analyticsPortlet/PortletChartView.d.ts +4 -1
  219. package/dist/client/components/analyticsPortlet/usePortletDeadMembers.d.ts +24 -0
  220. package/dist/client/components/analyticsPortlet/usePortletPagination.d.ts +21 -0
  221. package/dist/client/components/charts/DotStripChart.config.d.ts +15 -0
  222. package/dist/client/components/charts/DotStripChart.d.ts +4 -0
  223. package/dist/client/components/charts/DotStripChart.helpers.d.ts +91 -0
  224. package/dist/client/components/charts/RecordsTable.config.d.ts +10 -0
  225. package/dist/client/components/charts/RecordsTable.d.ts +4 -0
  226. package/dist/client/components/charts/recordsTableHooks.d.ts +68 -0
  227. package/dist/client/components.js +1 -1
  228. package/dist/client/hooks.js +3 -3
  229. package/dist/client/icons/types.d.ts +2 -0
  230. package/dist/client/icons.js +2 -2
  231. package/dist/client/index.d.ts +2 -2
  232. package/dist/client/index.js +213 -213
  233. package/dist/client/providers.js +1 -1
  234. package/dist/client/schema.js +1 -1
  235. package/dist/client/styles.css +1 -1
  236. package/dist/client/types.d.ts +97 -1
  237. package/dist/client/utils/recordsTableUtils.d.ts +71 -0
  238. package/dist/client/utils/rowLinkUtils.d.ts +35 -0
  239. package/dist/client/utils.js +14 -14
  240. package/dist/client-bundle-stats.html +1 -1
  241. package/dist/mcp-app/mcp-app.html +101 -101
  242. package/dist/server/agent/chart-validation.d.ts +1 -1
  243. package/dist/server/ai/chart-schema.d.ts +117 -0
  244. package/dist/server/ai/discovery-helpers.d.ts +14 -0
  245. package/dist/server/ai/discovery.d.ts +6 -0
  246. package/dist/server/ai/query-schema.d.ts +1 -1
  247. package/dist/server/attribute-dimensions.d.ts +11 -8
  248. package/dist/server/builders/group-by-builder.d.ts +15 -0
  249. package/dist/server/compiler.d.ts +3 -4
  250. package/dist/server/executor.d.ts +15 -0
  251. package/dist/{adapters/google-eKAc20al.js → server/google-DRY7jnOh.js} +46 -28
  252. package/dist/server/{google-BhvizbFR.cjs → google-PsZzwedr.cjs} +2 -2
  253. package/dist/server/index.cjs +34 -34
  254. package/dist/server/index.d.ts +2 -0
  255. package/dist/server/index.js +1913 -1445
  256. package/dist/server/query-handlers.d.ts +1 -0
  257. package/dist/server/query-validator.d.ts +36 -4
  258. package/dist/server/types/core.d.ts +5 -0
  259. package/dist/server/types/cube.d.ts +12 -0
  260. package/dist/server/types/query.d.ts +8 -0
  261. package/package.json +1 -1
  262. package/dist/adapters/ActivityGridChart.config-BQhBE_Mr.js +0 -2
  263. package/dist/adapters/ActivityGridChart.config-C3tSuOGV.cjs +0 -1
  264. package/dist/adapters/AreaChart.config-3cme8HyQ.js +0 -2
  265. package/dist/adapters/AreaChart.config-BSxrT52Z.cjs +0 -1
  266. package/dist/adapters/BarChart.config-BKS8IecE.cjs +0 -1
  267. package/dist/adapters/BarChart.config-lt_7PdIi.js +0 -2
  268. package/dist/adapters/BoxPlotChart.config-B7qvRnrF.cjs +0 -1
  269. package/dist/adapters/BoxPlotChart.config-Dv6ECj2j.js +0 -2
  270. package/dist/adapters/BubbleChart.config-BrIH7OAy.cjs +0 -1
  271. package/dist/adapters/BubbleChart.config-Fhotb7Pg.js +0 -2
  272. package/dist/adapters/CandlestickChart.config-CWH41FmF.cjs +0 -1
  273. package/dist/adapters/CandlestickChart.config-RPtXuxsX.js +0 -2
  274. package/dist/adapters/DataTable.config-71L0GzlT.js +0 -2
  275. package/dist/adapters/DataTable.config-BsOMQq3J.cjs +0 -1
  276. package/dist/adapters/FunnelChart.config-Cqte9C04.cjs +0 -1
  277. package/dist/adapters/FunnelChart.config-DJtwWeNz.js +0 -2
  278. package/dist/adapters/GaugeChart.config-WkwZ9VdS.cjs +0 -1
  279. package/dist/adapters/GaugeChart.config-vpVQlP5B.js +0 -2
  280. package/dist/adapters/HeatMapChart.config-DcmkDl07.cjs +0 -1
  281. package/dist/adapters/HeatMapChart.config-DsmMgGxJ.js +0 -2
  282. package/dist/adapters/KpiDelta.config-DVy561BH.js +0 -2
  283. package/dist/adapters/KpiDelta.config-dpqwLHNE.cjs +0 -1
  284. package/dist/adapters/KpiNumber.config-927l8nq8.js +0 -2
  285. package/dist/adapters/KpiNumber.config-BqFBMfPf.cjs +0 -1
  286. package/dist/adapters/KpiText.config-C-fZXuHq.cjs +0 -1
  287. package/dist/adapters/KpiText.config-CWoXuhMA.js +0 -2
  288. package/dist/adapters/LineChart.config-DTp7pqOY.js +0 -2
  289. package/dist/adapters/LineChart.config-DUGvSjcH.cjs +0 -1
  290. package/dist/adapters/MarkdownChart.config-23Dmv2Ty.cjs +0 -1
  291. package/dist/adapters/MarkdownChart.config-Cb2TnS0I.js +0 -2
  292. package/dist/adapters/MeasureProfileChart.config-B2qbWdhy.cjs +0 -1
  293. package/dist/adapters/MeasureProfileChart.config-CvBCeI5b.js +0 -2
  294. package/dist/adapters/PieChart.config-BzJb13QA.js +0 -2
  295. package/dist/adapters/PieChart.config-plCn5Ehr.cjs +0 -1
  296. package/dist/adapters/ProportionBarChart.config-1r-_moBH.cjs +0 -1
  297. package/dist/adapters/ProportionBarChart.config-CN6TtHTp.js +0 -2
  298. package/dist/adapters/RadarChart.config-BYhdj9M7.js +0 -2
  299. package/dist/adapters/RadarChart.config-CeUMP-1g.cjs +0 -1
  300. package/dist/adapters/RadialBarChart.config-B88yXNsq.cjs +0 -1
  301. package/dist/adapters/RadialBarChart.config-ZMK9HMoh.js +0 -2
  302. package/dist/adapters/RetentionCombinedChart.config-B5yvgUHM.cjs +0 -1
  303. package/dist/adapters/RetentionCombinedChart.config-Dd-YMdK8.js +0 -2
  304. package/dist/adapters/RetentionHeatmap.config-BYzDleoV.cjs +0 -1
  305. package/dist/adapters/RetentionHeatmap.config-Dvj7yTB0.js +0 -2
  306. package/dist/adapters/SankeyChart.config-CPFRmgFb.cjs +0 -1
  307. package/dist/adapters/SankeyChart.config-ClgqXM1N.js +0 -2
  308. package/dist/adapters/ScatterChart.config-CvJiqPa5.cjs +0 -1
  309. package/dist/adapters/ScatterChart.config-DLZ3rYMq.js +0 -2
  310. package/dist/adapters/SunburstChart.config-C_1V5hoQ.cjs +0 -1
  311. package/dist/adapters/SunburstChart.config-FNU75NCg.js +0 -2
  312. package/dist/adapters/TreeMapChart.config-CprZk_YF.js +0 -2
  313. package/dist/adapters/TreeMapChart.config-DNwd0ge9.cjs +0 -1
  314. package/dist/adapters/WaterfallChart.config-BBhcN_Fh.cjs +0 -1
  315. package/dist/adapters/WaterfallChart.config-H7s6SSV3.js +0 -2
  316. package/dist/adapters/compiler-BaLO10VN.cjs +0 -166
  317. package/dist/adapters/handler-DrRT6c14.cjs +0 -25
  318. package/dist/adapters/mcp-transport-BGkSz-ZT.cjs +0 -40
  319. package/dist/adapters/mcp-transport-fJud19xz.js +0 -606
  320. package/dist/adapters/utils-BY0-KFyI.cjs +0 -128
  321. package/dist/client/chunks/DashboardEditModal-9An5EDAz.js.map +0 -1
  322. package/dist/client/chunks/analysis-builder-shared-BQvwUc6z.js.map +0 -1
  323. package/dist/client/chunks/chart-activity-grid-DvD_4wJz.js.map +0 -1
  324. package/dist/client/chunks/chart-data-table-DgiNBOWf.js.map +0 -1
  325. package/dist/client/chunks/charts-core-BAH5pkSB.js +0 -215
  326. package/dist/client/chunks/charts-core-BAH5pkSB.js.map +0 -1
  327. package/dist/client/chunks/charts-loader-eToV8je7.js +0 -85
  328. package/dist/client/chunks/charts-loader-eToV8je7.js.map +0 -1
  329. package/dist/client/chunks/nl-NL-CMXHDBr0.js.map +0 -1
@@ -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-BmJDaduD.js";
2
- import { k as s, u as c, v as l, z as u } from "./chart-data-table-DgiNBOWf.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-9An5EDAz.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-CSDg96Rw.js";
6
- import { P as R, z as de } from "./chart-activity-grid-DvD_4wJz.js";
7
- import { a as z, i as fe } from "./useExplainAI-BnkoZ-zS.js";
8
- import { r as pe, s as me } from "./chart-funnel-YLZlyN1X.js";
9
- import { n as he } from "./charts-core-BAH5pkSB.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";
1
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./vendor-XQT9APIq.js";
2
+ import { A as s, B as c, d as l, u, y as d } from "./chart-data-table-Cou9qOab.js";
3
+ import { C as f, E as p, S as m, _ as h, b as g, bt as _, d as v, g as y, j as b, l as x, nt as S, rt as C, tt as w, u as T, v as E, y as D, yt as O } from "./DashboardEditModal-BliiIHcI.js";
4
+ import { a as k, s as ee, t as A } from "./retention-ChW9jYdy.js";
5
+ import { A as te, D as j, F as M, I as ne, M as N, N as re, O as ie, P as ae, S as P, T as F, a as oe, d as se, j as I, k as L, l as ce, n as le, r as ue, s as de } from "./useDirtyStateTracking-DTYbmRBn.js";
6
+ import { B as fe, F as R } from "./chart-activity-grid-CJzxC18G.js";
7
+ import { a as pe, i as me } from "./useExplainAI-MuC9jBn-.js";
8
+ import { r as he, s as ge } from "./chart-funnel-B0775aaT.js";
9
+ import { n as _e } from "./charts-core-DnirPG1F.js";
10
+ import z, { createContext as ve, memo as ye, useCallback as B, useContext as be, useEffect as V, useMemo as H, useRef as U, useState as W } from "react";
11
+ import { Fragment as G, jsx as K, jsxs as q } from "react/jsx-runtime";
12
12
  //#region src/shared/date-utils.ts
13
- function ye(e) {
13
+ function xe(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 ye(e) {
123
123
  }
124
124
  return null;
125
125
  }
126
- function be(e) {
126
+ function Se(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 be(e) {
132
132
  end: n
133
133
  });
134
134
  }
135
- return ye(e);
135
+ return xe(e);
136
136
  }
137
- function xe(e) {
137
+ function J(e) {
138
138
  return e.toISOString().split("T")[0];
139
139
  }
140
- function Se(e, t) {
140
+ function Ce(e, t) {
141
141
  let n = t.getTime() - e.getTime(), r = Math.ceil(n / 864e5), 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,24 +148,24 @@ function Se(e, t) {
148
148
  }
149
149
  //#endregion
150
150
  //#region src/client/components/AnalysisBuilder/utils/filterUtils.ts
151
- function Ce(e, t) {
152
- let n = F(t, e);
151
+ function we(e, t) {
152
+ let n = I(t, e);
153
153
  if (!n?.dateRange) return;
154
- let r = be(n.dateRange);
154
+ let r = Se(n.dateRange);
155
155
  if (!r) return;
156
- let i = Se(r.start, r.end);
157
- return [[xe(r.start), xe(r.end)], [xe(i.start), xe(i.end)]];
156
+ let i = Ce(r.start, r.end);
157
+ return [[J(r.start), J(r.end)], [J(i.start), J(i.end)]];
158
158
  }
159
- function we(e, t) {
160
- return ne(e, t, "inDateRange");
159
+ function Te(e, t) {
160
+ return M(e, t, "inDateRange");
161
161
  }
162
162
  //#endregion
163
163
  //#region src/client/components/AnalysisBuilder/utils/queryUtils.ts
164
- function Te(e, t, n, r, i = !1, a) {
165
- let o = t.filter((e) => e.isTimeDimension && e.enableComparison).map((e) => e.field), s = n;
166
- if (!i) for (let e of o) s = we(s, e);
167
- s = s.filter((e) => C(e));
168
- let c = {
164
+ function Ee(e, t, n, r, i = !1, a, o = !1) {
165
+ let s = t.filter((e) => e.isTimeDimension && e.enableComparison).map((e) => e.field), c = n;
166
+ if (!i) for (let e of s) c = Te(c, e);
167
+ c = c.filter((e) => w(e));
168
+ let l = {
169
169
  measures: e.map((e) => e.field),
170
170
  dimensions: t.filter((e) => !e.isTimeDimension).map((e) => e.field),
171
171
  timeDimensions: t.filter((e) => e.isTimeDimension).map((e) => {
@@ -174,16 +174,17 @@ function Te(e, t, n, r, i = !1, a) {
174
174
  granularity: e.granularity || "day"
175
175
  };
176
176
  if (e.enableComparison) {
177
- let r = Ce(e.field, n);
177
+ let r = we(e.field, n);
178
178
  r && (t.compareDateRange = r);
179
179
  }
180
180
  return t;
181
181
  }),
182
- filters: s.length > 0 ? s : void 0,
182
+ filters: c.length > 0 ? c : void 0,
183
183
  order: r && Object.keys(r).length > 0 ? r : void 0,
184
- limit: a ?? void 0
184
+ limit: a ?? void 0,
185
+ ungrouped: o || void 0
185
186
  };
186
- return c.measures?.length === 0 && delete c.measures, c.dimensions?.length === 0 && delete c.dimensions, c.timeDimensions?.length === 0 && delete c.timeDimensions, c;
187
+ return l.measures?.length === 0 && delete l.measures, l.dimensions?.length === 0 && delete l.dimensions, l.timeDimensions?.length === 0 && delete l.timeDimensions, l;
187
188
  }
188
189
  function Y() {
189
190
  return {
@@ -198,7 +199,7 @@ function Y() {
198
199
  }
199
200
  //#endregion
200
201
  //#region src/client/components/AnalysisBuilder/filterConfigModalUtils.ts
201
- function Ee(e, t, n, r) {
202
+ function De(e, t, n, r) {
202
203
  if (!t || n === 0) return { type: "none" };
203
204
  switch (e) {
204
205
  case "ArrowDown": return {
@@ -219,60 +220,60 @@ function Ee(e, t, n, r) {
219
220
  }
220
221
  //#endregion
221
222
  //#region src/client/components/AnalysisBuilder/FilterValueInput.tsx
222
- var De = l("close"), Oe = l("chevronDown");
223
- function ke({ filter: e, dateRange: t }) {
223
+ var Oe = d("close"), ke = d("chevronDown");
224
+ function Ae({ filter: e, dateRange: t }) {
224
225
  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", {
226
+ return /* @__PURE__ */ q("div", {
226
227
  className: "dc:space-y-2",
227
228
  children: [
228
- /* @__PURE__ */ J("div", {
229
+ /* @__PURE__ */ q("div", {
229
230
  className: "dc:relative",
230
- children: [/* @__PURE__ */ J("button", {
231
+ children: [/* @__PURE__ */ q("button", {
231
232
  onClick: () => {
232
233
  f(), s(!o);
233
234
  },
234
235
  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-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
235
- children: [/* @__PURE__ */ q("span", {
236
+ children: [/* @__PURE__ */ K("span", {
236
237
  className: "dc:truncate",
237
238
  children: a
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", {
239
+ }), /* @__PURE__ */ K(ke, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${o ? "dc:rotate-180" : ""}` })]
240
+ }), o && /* @__PURE__ */ K("div", {
240
241
  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-sm dc:shadow-lg dc:max-h-48 dc:overflow-y-auto",
241
- children: m.map((e) => /* @__PURE__ */ q("button", {
242
+ children: h.map((e) => /* @__PURE__ */ K("button", {
242
243
  onClick: () => c(e.value),
243
244
  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"}`,
244
245
  children: n(e.label)
245
246
  }, e.value))
246
247
  })]
247
248
  }),
248
- te(r) && /* @__PURE__ */ J("div", {
249
+ j(r) && /* @__PURE__ */ q("div", {
249
250
  className: "dc:flex dc:items-center dc:gap-2",
250
- children: [/* @__PURE__ */ q("input", {
251
+ children: [/* @__PURE__ */ K("input", {
251
252
  type: "number",
252
253
  min: "1",
253
254
  max: "1000",
254
255
  value: i,
255
256
  onChange: (e) => l(Math.max(1, parseInt(e.target.value) || 1)),
256
257
  className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text dc:w-20"
257
- }), /* @__PURE__ */ q("span", {
258
+ }), /* @__PURE__ */ K("span", {
258
259
  className: "dc:text-sm text-dc-text-muted",
259
260
  children: r.replace("last_n_", "")
260
261
  })]
261
262
  }),
262
- r === "custom" && /* @__PURE__ */ J("div", {
263
+ r === "custom" && /* @__PURE__ */ q("div", {
263
264
  className: "dc:flex dc:items-center dc:gap-2",
264
265
  children: [
265
- /* @__PURE__ */ q("input", {
266
+ /* @__PURE__ */ K("input", {
266
267
  type: "date",
267
268
  value: Array.isArray(e.dateRange) ? e.dateRange[0] : "",
268
269
  onChange: u,
269
270
  className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded-sm dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
270
271
  }),
271
- /* @__PURE__ */ q("span", {
272
+ /* @__PURE__ */ K("span", {
272
273
  className: "dc:text-sm text-dc-text-muted",
273
274
  children: n("filter.modal.dateTo")
274
275
  }),
275
- /* @__PURE__ */ q("input", {
276
+ /* @__PURE__ */ K("input", {
276
277
  type: "date",
277
278
  value: Array.isArray(e.dateRange) ? e.dateRange[1] : "",
278
279
  onChange: d,
@@ -283,26 +284,26 @@ function ke({ filter: e, dateRange: t }) {
283
284
  ]
284
285
  });
285
286
  }
286
- function Ae({ filter: e, combo: t }) {
287
+ function je({ filter: e, combo: t }) {
287
288
  let { t: n } = R(), { options: r, loading: i, error: a, highlightedIndex: o, listRef: s, onSelect: c } = t;
288
- return i ? /* @__PURE__ */ q("div", {
289
+ return i ? /* @__PURE__ */ K("div", {
289
290
  className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
290
291
  children: n("filter.modal.loading")
291
- }) : a ? /* @__PURE__ */ J("div", {
292
+ }) : a ? /* @__PURE__ */ q("div", {
292
293
  className: "dc:px-3 dc:py-2 dc:text-sm text-dc-error",
293
294
  children: [n("filter.modal.errorPrefix"), String(a)]
294
- }) : r.length === 0 ? /* @__PURE__ */ q("div", {
295
+ }) : r.length === 0 ? /* @__PURE__ */ K("div", {
295
296
  className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
296
297
  children: n("filter.modal.noValues")
297
- }) : /* @__PURE__ */ q("div", {
298
+ }) : /* @__PURE__ */ K("div", {
298
299
  ref: s,
299
300
  className: "dc:max-h-40 dc:overflow-y-auto",
300
301
  children: r.map((t, n) => {
301
302
  let r = e.values?.includes(t);
302
- return /* @__PURE__ */ J("button", {
303
+ return /* @__PURE__ */ q("button", {
303
304
  onClick: (e) => c(t, e),
304
305
  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"}`,
305
- children: [String(t), r && /* @__PURE__ */ q("span", {
306
+ children: [String(t), r && /* @__PURE__ */ K("span", {
306
307
  className: "dc:float-right",
307
308
  children: "✓"
308
309
  })]
@@ -310,41 +311,41 @@ function Ae({ filter: e, combo: t }) {
310
311
  })
311
312
  });
312
313
  }
313
- function je({ filter: e, operatorMeta: t, combo: n }) {
314
+ function Me({ filter: e, operatorMeta: t, combo: n }) {
314
315
  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", {
316
+ return /* @__PURE__ */ q("div", {
316
317
  className: "dc:space-y-2",
317
318
  children: [
318
- e.values && e.values.length > 0 && /* @__PURE__ */ q("div", {
319
+ e.values && e.values.length > 0 && /* @__PURE__ */ K("div", {
319
320
  className: "dc:flex dc:flex-wrap dc:gap-1.5",
320
- children: e.values.map((e, t) => /* @__PURE__ */ J("span", {
321
+ children: e.values.map((e, t) => /* @__PURE__ */ q("span", {
321
322
  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-sm",
322
- children: [/* @__PURE__ */ q("span", {
323
+ children: [/* @__PURE__ */ K("span", {
323
324
  className: "dc:max-w-[150px] dc:truncate",
324
325
  children: String(e)
325
- }), /* @__PURE__ */ q("button", {
326
+ }), /* @__PURE__ */ K("button", {
326
327
  onClick: () => l(e),
327
328
  className: "hover:text-dc-danger",
328
- children: /* @__PURE__ */ q(De, { className: "dc:w-3.5 dc:h-3.5" })
329
+ children: /* @__PURE__ */ K(Oe, { className: "dc:w-3.5 dc:h-3.5" })
329
330
  })]
330
331
  }, t))
331
332
  }),
332
- /* @__PURE__ */ J("div", {
333
+ /* @__PURE__ */ q("div", {
333
334
  className: "dc:relative",
334
- children: [/* @__PURE__ */ J("button", {
335
+ children: [/* @__PURE__ */ q("button", {
335
336
  onClick: () => {
336
337
  d();
337
338
  },
338
339
  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-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
339
- children: [/* @__PURE__ */ q("span", {
340
+ children: [/* @__PURE__ */ K("span", {
340
341
  className: "text-dc-text-muted dc:truncate",
341
342
  children: r(a ? "filter.modal.loading" : "filter.modal.selectValue")
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", {
343
+ }), /* @__PURE__ */ K(ke, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${i ? "dc:rotate-180" : ""}` })]
344
+ }), i && /* @__PURE__ */ q("div", {
344
345
  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-sm dc:shadow-lg dc:max-h-56 dc:overflow-hidden",
345
- children: [/* @__PURE__ */ q("div", {
346
+ children: [/* @__PURE__ */ K("div", {
346
347
  className: "dc:p-2 dc:border-b border-dc-border",
347
- children: /* @__PURE__ */ q("input", {
348
+ children: /* @__PURE__ */ K("input", {
348
349
  type: "text",
349
350
  value: o,
350
351
  onChange: (e) => {
@@ -355,39 +356,39 @@ function je({ filter: e, operatorMeta: t, combo: n }) {
355
356
  className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text",
356
357
  autoFocus: !0
357
358
  })
358
- }), /* @__PURE__ */ q(Ae, {
359
+ }), /* @__PURE__ */ K(je, {
359
360
  filter: e,
360
361
  combo: n
361
362
  })]
362
363
  })]
363
364
  }),
364
- t?.supportsMultipleValues && /* @__PURE__ */ q("p", {
365
+ t?.supportsMultipleValues && /* @__PURE__ */ K("p", {
365
366
  className: "dc:text-xs text-dc-text-muted",
366
367
  children: r("filter.modal.multiSelectHint")
367
368
  })
368
369
  ]
369
370
  });
370
371
  }
371
- function Me({ field: e, dateRange: t, combo: n, inputs: r }) {
372
+ function Ne({ field: e, dateRange: t, combo: n, inputs: r }) {
372
373
  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, {
374
+ return o?.requiresValues ? s ? /* @__PURE__ */ K(Ae, {
374
375
  filter: a,
375
376
  dateRange: t
376
- }) : a.operator === "between" || a.operator === "notBetween" ? /* @__PURE__ */ J("div", {
377
+ }) : a.operator === "between" || a.operator === "notBetween" ? /* @__PURE__ */ q("div", {
377
378
  className: "dc:flex dc:items-center dc:gap-2",
378
379
  children: [
379
- /* @__PURE__ */ q("input", {
380
+ /* @__PURE__ */ K("input", {
380
381
  type: "number",
381
382
  value: a.values?.[0] ?? "",
382
383
  onChange: l,
383
384
  placeholder: i("filter.modal.min"),
384
385
  className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
385
386
  }),
386
- /* @__PURE__ */ q("span", {
387
+ /* @__PURE__ */ K("span", {
387
388
  className: "dc:text-sm text-dc-text-muted",
388
389
  children: i("filter.modal.to")
389
390
  }),
390
- /* @__PURE__ */ q("input", {
391
+ /* @__PURE__ */ K("input", {
391
392
  type: "number",
392
393
  value: a.values?.[1] ?? "",
393
394
  onChange: u,
@@ -395,94 +396,94 @@ function Me({ field: e, dateRange: t, combo: n, inputs: r }) {
395
396
  className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
396
397
  })
397
398
  ]
398
- }) : o?.valueType === "date" ? /* @__PURE__ */ q("input", {
399
+ }) : o?.valueType === "date" ? /* @__PURE__ */ K("input", {
399
400
  type: "date",
400
401
  value: a.values?.[0] || "",
401
402
  onChange: d,
402
403
  className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
403
- }) : o?.valueType === "number" ? /* @__PURE__ */ q("input", {
404
+ }) : o?.valueType === "number" ? /* @__PURE__ */ K("input", {
404
405
  type: "number",
405
406
  value: a.values?.[0] ?? "",
406
407
  onChange: f,
407
408
  placeholder: i("filter.modal.enterNumber"),
408
409
  className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
409
- }) : c ? /* @__PURE__ */ q(je, {
410
+ }) : c ? /* @__PURE__ */ K(Me, {
410
411
  filter: a,
411
412
  operatorMeta: o,
412
413
  combo: n
413
- }) : /* @__PURE__ */ q("input", {
414
+ }) : /* @__PURE__ */ K("input", {
414
415
  type: "text",
415
416
  value: a.values?.[0] ?? "",
416
417
  onChange: f,
417
418
  placeholder: i("filter.modal.enterValue"),
418
419
  className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text placeholder-dc-text-muted"
419
- }) : /* @__PURE__ */ q("div", {
420
+ }) : /* @__PURE__ */ K("div", {
420
421
  className: "dc:text-sm text-dc-text-muted dc:italic dc:py-2",
421
422
  children: i("filter.modal.noValueRequired")
422
423
  });
423
424
  }
424
425
  //#endregion
425
426
  //#region src/client/components/AnalysisBuilder/FilterConfigModal.tsx
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(() => [
427
+ var Pe = d("close"), Fe = d("chevronDown"), Ie = d("dimension"), Le = d("timeDimension"), Re = d("measure");
428
+ function ze({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i }) {
429
+ let { t: a } = R(), [o, s] = W(e), [c, l] = W(!1), [u, d] = W(!1), [f, p] = W(!1), [m, _] = W("this_month"), [v, b] = W(1), [x, w] = W(""), [T, E] = W(null), [O, k] = W(-1), ee = U(null), A = U(null), te = le(x, 300), M = D(o.member, t), ne = M?.field.type || "string", N = ne === "time", re = M?.fieldType === "measure", ie = M?.fieldType === "dimension", ae = g(o.member, t), P = S[o.operator], oe = C(ne), se = N && o.operator === "inDateRange", I = B(() => [
429
430
  "equals",
430
431
  "notEquals",
431
432
  "in",
432
433
  "notIn"
433
- ].includes(o.operator) && ae && !M, [
434
+ ].includes(o.operator) && ie && !N, [
434
435
  o.operator,
435
- ae,
436
- M
437
- ])(), { values: L, loading: ue, error: de, searchValues: z } = le(o.member, I);
438
- H(() => {
436
+ ie,
437
+ N
438
+ ])(), { values: L, loading: ce, error: de, searchValues: fe } = ue(o.member, I);
439
+ V(() => {
439
440
  if (!i) {
440
- D(null);
441
+ E(null);
441
442
  return;
442
443
  }
443
444
  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));
444
- D(r ? {
445
+ E(r ? {
445
446
  bottom: window.innerHeight - e.top + 8,
446
447
  left: a
447
448
  } : {
448
449
  top: e.bottom + 8,
449
450
  left: a
450
451
  });
451
- }, [i]), H(() => {
452
+ }, [i]), V(() => {
452
453
  let e = (e) => {
453
454
  ee.current && !ee.current.contains(e.target) && (l(!1), d(!1), p(!1));
454
455
  };
455
456
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
456
- }, []), H(() => {
457
- u && I && z && z("", !0), u || k(-1);
457
+ }, []), V(() => {
458
+ u && I && fe && fe("", !0), u || k(-1);
458
459
  }, [
459
460
  u,
460
461
  I,
461
- z
462
- ]), H(() => {
462
+ fe
463
+ ]), V(() => {
463
464
  if (O >= 0 && A.current) {
464
465
  let e = A.current.children[O];
465
466
  e && e.scrollIntoView({ block: "nearest" });
466
467
  }
467
- }, [O]), H(() => {
468
- u && I && z && ne !== void 0 && z(ne);
468
+ }, [O]), V(() => {
469
+ u && I && fe && te !== void 0 && fe(te);
469
470
  }, [
470
- ne,
471
+ te,
471
472
  u,
472
473
  I,
473
- z
474
- ]), H(() => {
475
- if (!F) return;
476
- let e = v(o.dateRange);
474
+ fe
475
+ ]), V(() => {
476
+ if (!se) return;
477
+ let e = y(o.dateRange);
477
478
  e && (_(e.rangeType), e.numberValue !== void 0 && b(e.numberValue));
478
- }, [o.dateRange, F]);
479
- let fe = V((e) => {
479
+ }, [o.dateRange, se]);
480
+ let pe = B((e) => {
480
481
  s({
481
482
  member: o.member,
482
483
  operator: e,
483
484
  values: []
484
485
  }), l(!1);
485
- }, [o.member]), pe = V((e, t) => {
486
+ }, [o.member]), me = B((e, t) => {
486
487
  let n = t?.shiftKey ?? !1, r = o.values || [];
487
488
  P?.supportsMultipleValues ? (r.includes(e) ? s({
488
489
  ...o,
@@ -494,25 +495,25 @@ function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
494
495
  ...o,
495
496
  values: [e]
496
497
  }), d(!1)), w(""), k(-1);
497
- }, [o, P?.supportsMultipleValues]), me = V((e) => {
498
+ }, [o, P?.supportsMultipleValues]), he = B((e) => {
498
499
  let t = (o.values || []).filter((t) => t !== e);
499
500
  s({
500
501
  ...o,
501
502
  values: t
502
503
  });
503
- }, [o]), he = V((e) => {
504
- let t = Ee(e.key, u, L.length, O);
504
+ }, [o]), ge = B((e) => {
505
+ let t = De(e.key, u, L.length, O);
505
506
  if (t.type !== "none") {
506
507
  if (e.preventDefault(), t.type === "highlight") return k(t.index);
507
- if (t.type === "select") return pe(L[t.index], { shiftKey: e.shiftKey });
508
+ if (t.type === "select") return me(L[t.index], { shiftKey: e.shiftKey });
508
509
  d(!1), k(-1);
509
510
  }
510
511
  }, [
511
512
  u,
512
513
  L,
513
514
  O,
514
- pe
515
- ]), B = V((e) => {
515
+ me
516
+ ]), _e = B((e) => {
516
517
  let t = e.target.value;
517
518
  if (P?.valueType === "number") {
518
519
  let e = parseFloat(t);
@@ -527,104 +528,104 @@ function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
527
528
  ...o,
528
529
  values: t ? [t] : []
529
530
  });
530
- }, [o, P?.valueType]), ge = V((e) => {
531
+ }, [o, P?.valueType]), z = B((e) => {
531
532
  let t = parseFloat(e.target.value), n = [isNaN(t) ? "" : t, (o.values?.length >= 2 ? o.values : ["", ""])[1]].filter((e) => e !== "");
532
533
  s({
533
534
  ...o,
534
535
  values: n
535
536
  });
536
- }, [o]), _e = V((e) => {
537
+ }, [o]), ve = B((e) => {
537
538
  let t = parseFloat(e.target.value), n = [(o.values?.length >= 2 ? o.values : ["", ""])[0], isNaN(t) ? "" : t].filter((e) => e !== "");
538
539
  s({
539
540
  ...o,
540
541
  values: n
541
542
  });
542
- }, [o]), ve = V((e) => {
543
+ }, [o]), ye = B((e) => {
543
544
  let t = e.target.value;
544
545
  s({
545
546
  ...o,
546
547
  values: t ? [t] : []
547
548
  });
548
- }, [o]), ye = V((e) => {
549
+ }, [o]), be = B((e) => {
549
550
  _(e), p(!1);
550
551
  let t;
551
552
  if (e === "custom") {
552
553
  let e = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
553
554
  t = [e, e];
554
- } else t = te(e) ? N(e, y) : N(e);
555
+ } else t = j(e) ? F(e, v) : F(e);
555
556
  s({
556
557
  ...o,
557
558
  dateRange: t
558
559
  });
559
- }, [o, y]), be = V((e) => {
560
- if (b(e), te(g)) {
561
- let t = N(g, e);
560
+ }, [o, v]), xe = B((e) => {
561
+ if (b(e), j(m)) {
562
+ let t = F(m, e);
562
563
  s({
563
564
  ...o,
564
565
  dateRange: t
565
566
  });
566
567
  }
567
- }, [o, g]), xe = V((e) => {
568
+ }, [o, m]), Se = B((e) => {
568
569
  let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : [o.dateRange || "", ""])[1] || t;
569
570
  s({
570
571
  ...o,
571
572
  dateRange: [t, n]
572
573
  });
573
- }, [o]), Se = V((e) => {
574
+ }, [o]), J = B((e) => {
574
575
  let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : ["", o.dateRange || ""])[0] || t;
575
576
  s({
576
577
  ...o,
577
578
  dateRange: [n, t]
578
579
  });
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 = {
580
+ }, [o]), Ce = a(oe.find((e) => e.operator === o.operator)?.label || o.operator), we = a(h.find((e) => e.value === m)?.label || "filter.modal.selectRange"), Te = {
580
581
  filter: o,
581
582
  operatorMeta: P,
582
- shouldShowDateRange: F,
583
+ shouldShowDateRange: se,
583
584
  shouldShowComboBox: I
584
- }, Y = {
585
- rangeType: g,
586
- numberValue: y,
585
+ }, Ee = {
586
+ rangeType: m,
587
+ numberValue: v,
587
588
  label: we,
588
589
  isOpen: f,
589
590
  onToggle: p,
590
- onRangeTypeChange: ye,
591
- onNumberValueChange: be,
592
- onCustomStartDate: xe,
593
- onCustomEndDate: Se,
594
- onOpen: V(() => {
591
+ onRangeTypeChange: be,
592
+ onNumberValueChange: xe,
593
+ onCustomStartDate: Se,
594
+ onCustomEndDate: J,
595
+ onOpen: B(() => {
595
596
  l(!1), d(!1);
596
597
  }, [])
597
- }, De = {
598
+ }, Y = {
598
599
  isOpen: u,
599
600
  options: L,
600
- loading: ue,
601
+ loading: ce,
601
602
  error: de,
602
- searchText: C,
603
+ searchText: x,
603
604
  highlightedIndex: O,
604
605
  listRef: A,
605
606
  onSearchTextChange: w,
606
607
  onHighlightedIndexChange: k,
607
- onSelect: pe,
608
- onRemove: me,
609
- onKeyDown: he,
610
- onOpen: V(() => {
608
+ onSelect: me,
609
+ onRemove: he,
610
+ onKeyDown: ge,
611
+ onOpen: B(() => {
611
612
  l(!1), p(!1), d((e) => !e);
612
613
  }, [])
613
- }, Oe = U(() => ({
614
- onBetweenStart: ge,
615
- onBetweenEnd: _e,
616
- onDate: ve,
617
- onDirect: B
614
+ }, Oe = H(() => ({
615
+ onBetweenStart: z,
616
+ onBetweenEnd: ve,
617
+ onDate: ye,
618
+ onDirect: _e
618
619
  }), [
619
- ge,
620
- _e,
620
+ z,
621
621
  ve,
622
- B
623
- ]), ke = M ? Ie : ie ? Le : Fe;
624
- return /* @__PURE__ */ q(K, { children: /* @__PURE__ */ q("div", {
622
+ ye,
623
+ _e
624
+ ]), ke = N ? Le : re ? Re : Ie;
625
+ return /* @__PURE__ */ K(G, { children: /* @__PURE__ */ K("div", {
625
626
  className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${T ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
626
627
  onClick: r,
627
- children: /* @__PURE__ */ J("div", {
628
+ children: /* @__PURE__ */ q("div", {
628
629
  ref: ee,
629
630
  className: T ? "bg-dc-surface dc:rounded-lg dc:border border-dc-border" : "bg-dc-surface dc:rounded-lg dc:border border-dc-border dc:max-w-md dc:w-full",
630
631
  style: {
@@ -638,71 +639,71 @@ function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
638
639
  },
639
640
  onClick: (e) => e.stopPropagation(),
640
641
  children: [
641
- /* @__PURE__ */ J("div", {
642
+ /* @__PURE__ */ q("div", {
642
643
  className: "dc:flex dc:items-center dc:justify-between dc:p-4 dc:border-b border-dc-border",
643
- children: [/* @__PURE__ */ q("h2", {
644
+ children: [/* @__PURE__ */ K("h2", {
644
645
  className: "dc:text-lg dc:font-semibold text-dc-text",
645
646
  children: a("filter.modal.title")
646
- }), /* @__PURE__ */ q("button", {
647
+ }), /* @__PURE__ */ K("button", {
647
648
  onClick: r,
648
649
  className: "dc:p-1 text-dc-text-muted hover:text-dc-text dc:transition-colors",
649
- children: /* @__PURE__ */ q(Ne, { className: "dc:w-5 dc:h-5" })
650
+ children: /* @__PURE__ */ K(Pe, { className: "dc:w-5 dc:h-5" })
650
651
  })]
651
652
  }),
652
- /* @__PURE__ */ J("div", {
653
+ /* @__PURE__ */ q("div", {
653
654
  className: "dc:p-4 dc:space-y-4",
654
655
  children: [
655
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
656
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("label", {
656
657
  className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
657
658
  children: a("filter.modal.fieldLabel")
658
- }), /* @__PURE__ */ J("div", {
659
+ }), /* @__PURE__ */ q("div", {
659
660
  className: "dc:flex dc:items-center dc:gap-2 dc:p-3 bg-dc-surface-secondary dc:rounded-sm",
660
- children: [/* @__PURE__ */ q(ke, { className: "dc:w-5 dc:h-5 text-dc-filter-text" }), /* @__PURE__ */ q("span", {
661
+ children: [/* @__PURE__ */ K(ke, { className: "dc:w-5 dc:h-5 text-dc-filter-text" }), /* @__PURE__ */ K("span", {
661
662
  className: "dc:text-sm dc:font-medium text-dc-text",
662
- children: oe
663
+ children: ae
663
664
  })]
664
665
  })] }),
665
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
666
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("label", {
666
667
  className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
667
668
  children: a("filter.modal.operatorLabel")
668
- }), /* @__PURE__ */ J("div", {
669
+ }), /* @__PURE__ */ q("div", {
669
670
  className: "dc:relative",
670
- children: [/* @__PURE__ */ J("button", {
671
+ children: [/* @__PURE__ */ q("button", {
671
672
  onClick: () => {
672
673
  d(!1), p(!1), l(!c);
673
674
  },
674
675
  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-sm dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
675
- children: [/* @__PURE__ */ q("span", {
676
+ children: [/* @__PURE__ */ K("span", {
676
677
  className: "dc:truncate",
677
678
  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", {
679
+ }), /* @__PURE__ */ K(Fe, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${c ? "dc:rotate-180" : ""}` })]
680
+ }), c && /* @__PURE__ */ K("div", {
680
681
  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-sm dc:shadow-lg dc:max-h-48 dc:overflow-y-auto",
681
- children: se.map((e) => /* @__PURE__ */ q("button", {
682
- onClick: () => fe(e.operator),
682
+ children: oe.map((e) => /* @__PURE__ */ K("button", {
683
+ onClick: () => pe(e.operator),
683
684
  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"}`,
684
685
  children: a(e.label)
685
686
  }, e.operator))
686
687
  })]
687
688
  })] }),
688
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
689
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("label", {
689
690
  className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
690
691
  children: a("filter.modal.valueLabel")
691
- }), /* @__PURE__ */ q(Me, {
692
+ }), /* @__PURE__ */ K(Ne, {
692
693
  field: Te,
693
- dateRange: Y,
694
- combo: De,
694
+ dateRange: Ee,
695
+ combo: Y,
695
696
  inputs: Oe
696
697
  })] })
697
698
  ]
698
699
  }),
699
- /* @__PURE__ */ J("div", {
700
+ /* @__PURE__ */ q("div", {
700
701
  className: "dc:flex dc:items-center dc:justify-end dc:gap-2 dc:p-4 dc:border-t border-dc-border",
701
- children: [/* @__PURE__ */ q("button", {
702
+ children: [/* @__PURE__ */ K("button", {
702
703
  onClick: r,
703
704
  className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium text-dc-text-secondary hover:text-dc-text dc:transition-colors",
704
705
  children: a("common.actions.cancel")
705
- }), /* @__PURE__ */ q("button", {
706
+ }), /* @__PURE__ */ K("button", {
706
707
  onClick: () => n(o),
707
708
  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-sm dc:transition-colors",
708
709
  children: a("common.actions.save")
@@ -714,47 +715,47 @@ function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
714
715
  }
715
716
  //#endregion
716
717
  //#region src/client/components/AnalysisBuilder/AnalysisFilterItem.tsx
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", {
718
+ var Be = d("close"), Ve = d("dimension"), He = d("timeDimension"), Ue = d("measure");
719
+ function We({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
720
+ let { t: i } = R(), [a, o] = W(!1), s = U(null), c = D(e.member, t), l = (c?.field.type || "string") === "time", u = c?.fieldType === "measure", d = g(e.member, t), f = S[e.operator], p = f?.label ? i(f.label) : e.operator, m = Ge(e, f, i), h = l ? He : u ? Ue : Ve;
721
+ return /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ q("div", {
721
722
  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",
722
723
  children: [
723
- /* @__PURE__ */ q("span", {
724
+ /* @__PURE__ */ K("span", {
724
725
  className: `dc:w-6 dc:h-6 dc:flex dc:items-center dc:justify-center dc:rounded-sm ${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`,
725
- children: g && /* @__PURE__ */ q(g, { className: "dc:w-4 dc:h-4" })
726
+ children: h && /* @__PURE__ */ K(h, { className: "dc:w-4 dc:h-4" })
726
727
  }),
727
- /* @__PURE__ */ q("button", {
728
+ /* @__PURE__ */ K("button", {
728
729
  ref: s,
729
730
  onClick: () => o(!0),
730
731
  className: "dc:flex-1 dc:min-w-0 dc:text-left",
731
732
  title: `${d} ${p} ${m}`,
732
- children: /* @__PURE__ */ J("div", {
733
+ children: /* @__PURE__ */ q("div", {
733
734
  className: "dc:text-sm text-dc-text dc:break-words",
734
735
  children: [
735
- /* @__PURE__ */ q("span", {
736
+ /* @__PURE__ */ K("span", {
736
737
  className: "dc:font-medium",
737
738
  children: d
738
739
  }),
739
- /* @__PURE__ */ q("span", {
740
+ /* @__PURE__ */ K("span", {
740
741
  className: "text-dc-text-muted dc:mx-1",
741
742
  children: p
742
743
  }),
743
- /* @__PURE__ */ q("span", {
744
+ /* @__PURE__ */ K("span", {
744
745
  className: "text-dc-primary",
745
746
  children: m
746
747
  })
747
748
  ]
748
749
  })
749
750
  }),
750
- /* @__PURE__ */ q("button", {
751
+ /* @__PURE__ */ K("button", {
751
752
  onClick: n,
752
753
  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",
753
754
  title: i("filter.removeButton.title"),
754
- children: ze && /* @__PURE__ */ q(ze, { className: "dc:w-4 dc:h-4" })
755
+ children: Be && /* @__PURE__ */ K(Be, { className: "dc:w-4 dc:h-4" })
755
756
  })
756
757
  ]
757
- }), a && /* @__PURE__ */ q(Re, {
758
+ }), a && /* @__PURE__ */ K(ze, {
758
759
  filter: e,
759
760
  schema: t,
760
761
  onSave: (e) => {
@@ -764,7 +765,7 @@ function Ue({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
764
765
  anchorElement: s.current
765
766
  })] });
766
767
  }
767
- function We(e, t, n) {
768
+ function Ge(e, t, n) {
768
769
  if (!t?.requiresValues) return "";
769
770
  if (e.dateRange) return Array.isArray(e.dateRange) ? `${e.dateRange[0]} to ${e.dateRange[1]}` : e.dateRange;
770
771
  let r = e.values || [];
@@ -772,24 +773,24 @@ function We(e, t, n) {
772
773
  }
773
774
  //#endregion
774
775
  //#region src/client/components/AnalysisBuilder/AnalysisFilterGroup.tsx
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(() => {
776
+ var Ke = d("add"), qe = d("close");
777
+ function Je({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, depth: a = 0, hideRemoveButton: o = !1 }) {
778
+ let { t: s } = R(), [c, l] = W(!1), u = U(null);
779
+ V(() => {
779
780
  let e = (e) => {
780
781
  u.current && !u.current.contains(e.target) && l(!1);
781
782
  };
782
783
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
783
784
  }, []);
784
- let d = V(() => {
785
- n(j(e));
786
- }, [e, n]), f = V((t, r) => {
785
+ let d = B(() => {
786
+ n(ne(e));
787
+ }, [e, n]), f = B((t, r) => {
787
788
  let i = [...e.filters];
788
789
  i[t] = r, n({
789
790
  ...e,
790
791
  filters: i
791
792
  });
792
- }, [e, n]), p = V((t) => {
793
+ }, [e, n]), p = B((t) => {
793
794
  let i = e.filters.filter((e, n) => n !== t);
794
795
  i.length === 0 ? r() : n({
795
796
  ...e,
@@ -800,7 +801,7 @@ function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
800
801
  n,
801
802
  r,
802
803
  a
803
- ]), m = V((t) => {
804
+ ]), m = B((t) => {
804
805
  let r = {
805
806
  type: t,
806
807
  filters: []
@@ -809,23 +810,23 @@ function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
809
810
  ...e,
810
811
  filters: [...e.filters, r]
811
812
  }), l(!1);
812
- }, [e, n]), h = V(() => {
813
+ }, [e, n]), h = B(() => {
813
814
  i([]), l(!1);
814
- }, [i]), g = V((e) => (t = []) => {
815
+ }, [i]), g = B((e) => (t = []) => {
815
816
  i([e, ...t]);
816
817
  }, [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");
817
- return /* @__PURE__ */ J("div", {
818
+ return /* @__PURE__ */ q("div", {
818
819
  className: `dc:border ${_()} dc:rounded-lg bg-dc-surface dc:w-full`,
819
- children: [/* @__PURE__ */ J("div", {
820
+ children: [/* @__PURE__ */ q("div", {
820
821
  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()}`,
821
- children: [/* @__PURE__ */ J("div", {
822
+ children: [/* @__PURE__ */ q("div", {
822
823
  className: "dc:flex dc:items-center dc:gap-2",
823
- children: [/* @__PURE__ */ q("button", {
824
+ children: [/* @__PURE__ */ K("button", {
824
825
  onClick: d,
825
826
  className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-semibold dc:rounded-sm 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"}`,
826
827
  title: `Click to switch to ${e.type === "and" ? "OR" : "AND"}`,
827
828
  children: e.type.toUpperCase()
828
- }), /* @__PURE__ */ J("span", {
829
+ }), /* @__PURE__ */ q("span", {
829
830
  className: "dc:text-xs text-dc-text-muted",
830
831
  children: [
831
832
  y,
@@ -833,61 +834,61 @@ function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
833
834
  b
834
835
  ]
835
836
  })]
836
- }), /* @__PURE__ */ J("div", {
837
+ }), /* @__PURE__ */ q("div", {
837
838
  className: "dc:flex dc:items-center dc:gap-1",
838
- children: [/* @__PURE__ */ J("div", {
839
+ children: [/* @__PURE__ */ q("div", {
839
840
  className: "dc:relative",
840
841
  ref: u,
841
- children: [/* @__PURE__ */ q("button", {
842
+ children: [/* @__PURE__ */ K("button", {
842
843
  onClick: () => l(!c),
843
844
  className: "dc:p-1 text-dc-text-secondary hover:text-dc-primary hover:bg-dc-surface-hover dc:rounded-sm dc:transition-colors",
844
845
  title: "Add condition",
845
- children: /* @__PURE__ */ q(Ge, { className: "dc:w-4 dc:h-4" })
846
- }), c && /* @__PURE__ */ J("div", {
846
+ children: /* @__PURE__ */ K(Ke, { className: "dc:w-4 dc:h-4" })
847
+ }), c && /* @__PURE__ */ q("div", {
847
848
  className: "dc:absolute dc:right-0 dc:mt-1 dc:z-40 bg-dc-surface dc:border border-dc-border dc:rounded-sm dc:shadow-lg dc:py-1 dc:min-w-[120px]",
848
849
  children: [
849
- /* @__PURE__ */ q("button", {
850
+ /* @__PURE__ */ K("button", {
850
851
  onClick: h,
851
852
  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",
852
853
  children: s("filter.group.addFilter")
853
854
  }),
854
- /* @__PURE__ */ q("button", {
855
+ /* @__PURE__ */ K("button", {
855
856
  onClick: () => m("and"),
856
857
  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",
857
858
  children: s("filter.group.addAndGroup")
858
859
  }),
859
- /* @__PURE__ */ q("button", {
860
+ /* @__PURE__ */ K("button", {
860
861
  onClick: () => m("or"),
861
862
  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",
862
863
  children: s("filter.group.addOrGroup")
863
864
  })
864
865
  ]
865
866
  })]
866
- }), !o && /* @__PURE__ */ q("button", {
867
+ }), !o && /* @__PURE__ */ K("button", {
867
868
  onClick: r,
868
869
  className: "dc:p-1 text-dc-text-muted hover:text-dc-danger dc:transition-colors",
869
870
  title: s("filter.group.removeGroup"),
870
- children: /* @__PURE__ */ q(Ke, { className: "dc:w-4 dc:h-4" })
871
+ children: /* @__PURE__ */ K(qe, { className: "dc:w-4 dc:h-4" })
871
872
  })]
872
873
  })]
873
- }), /* @__PURE__ */ q("div", {
874
+ }), /* @__PURE__ */ K("div", {
874
875
  className: "dc:p-1.5 dc:flex dc:flex-wrap dc:gap-2",
875
- children: e.filters.length === 0 ? /* @__PURE__ */ J("div", {
876
+ children: e.filters.length === 0 ? /* @__PURE__ */ q("div", {
876
877
  className: "dc:text-center dc:py-3",
877
- children: [/* @__PURE__ */ q("p", {
878
+ children: [/* @__PURE__ */ K("p", {
878
879
  className: "dc:text-xs text-dc-text-muted dc:mb-1",
879
880
  children: s("filter.group.empty")
880
- }), /* @__PURE__ */ q("button", {
881
+ }), /* @__PURE__ */ K("button", {
881
882
  onClick: () => i([]),
882
883
  className: "dc:text-xs text-dc-primary dc:hover:underline",
883
884
  children: s("filter.group.addFilterLink")
884
885
  })]
885
- }) : e.filters.map((e, n) => M(e) ? /* @__PURE__ */ q(Ue, {
886
+ }) : e.filters.map((e, n) => re(e) ? /* @__PURE__ */ K(We, {
886
887
  filter: e,
887
888
  schema: t,
888
889
  onUpdate: (e) => f(n, e),
889
890
  onRemove: () => p(n)
890
- }, `filter-${n}`) : re(e) ? /* @__PURE__ */ q(qe, {
891
+ }, `filter-${n}`) : N(e) ? /* @__PURE__ */ K(Je, {
891
892
  group: e,
892
893
  schema: t,
893
894
  onUpdate: (e) => f(n, e),
@@ -900,44 +901,44 @@ function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
900
901
  }
901
902
  //#endregion
902
903
  //#region src/client/components/AnalysisBuilder/AnalysisFilterSection.tsx
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) => {
904
+ var Ye = d("add");
905
+ function Xe({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dimensionsOnly: i = !1 }) {
906
+ let { t: a } = R(), [o, s] = W(!1), [c, l] = W(!1), u = U([]), d = L(e), f = B((e) => {
906
907
  e.preventDefault(), e.stopPropagation(), l(!0);
907
- }, []), p = V((e) => {
908
+ }, []), p = B((e) => {
908
909
  e.preventDefault(), e.stopPropagation(), l(!1);
909
- }, []), m = V((e) => {
910
+ }, []), m = B((e) => {
910
911
  e.preventDefault(), e.stopPropagation(), l(!1);
911
912
  try {
912
913
  let t = JSON.parse(e.dataTransfer.getData("text/plain"));
913
914
  t.field && r && r(t.field);
914
915
  } catch {}
915
- }, [r]), h = A(e), g = V((t, r, i) => {
916
+ }, [r]), h = te(e), g = B((t, r, i) => {
916
917
  let a = t.type === "time", o = a ? "inDateRange" : "equals", c = {
917
918
  member: t.name,
918
919
  operator: o,
919
920
  values: []
920
921
  };
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) => {
922
+ a && o === "inDateRange" && (c.dateRange = F("this_month")), n(ie(e, u.current, c)), s(!1), u.current = [];
923
+ }, [e, n]), _ = B((t, r) => {
923
924
  let i = [...e];
924
925
  i[t] = r, n(i);
925
- }, [e, n]), v = V((t) => {
926
+ }, [e, n]), v = B((t) => {
926
927
  n(ae(e, t));
927
- }, [e, n]), y = V(() => {
928
+ }, [e, n]), y = B(() => {
928
929
  n([]);
929
- }, [n]), b = V(() => {
930
+ }, [n]), b = B(() => {
930
931
  u.current = [], s(!0);
931
- }, []), x = V((e) => (t = []) => {
932
+ }, []), x = B((e) => (t = []) => {
932
933
  u.current = [...e, ...t], s(!0);
933
934
  }, []), S = (n, r, i = []) => {
934
935
  let a = [...i, r];
935
- return M(n) ? /* @__PURE__ */ q(Ue, {
936
+ return re(n) ? /* @__PURE__ */ K(We, {
936
937
  filter: n,
937
938
  schema: t,
938
939
  onUpdate: (e) => _(r, e),
939
940
  onRemove: () => v(r)
940
- }, `filter-${a.join("-")}`) : re(n) ? /* @__PURE__ */ q(qe, {
941
+ }, `filter-${a.join("-")}`) : N(n) ? /* @__PURE__ */ K(Je, {
941
942
  group: n,
942
943
  schema: t,
943
944
  onUpdate: (e) => _(r, e),
@@ -946,21 +947,21 @@ function Ye({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
946
947
  hideRemoveButton: e.length === 1
947
948
  }, `group-${a.join("-")}`) : null;
948
949
  };
949
- return /* @__PURE__ */ J("div", { children: [
950
- /* @__PURE__ */ J("button", {
950
+ return /* @__PURE__ */ q("div", { children: [
951
+ /* @__PURE__ */ q("button", {
951
952
  onClick: b,
952
953
  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",
953
954
  title: "Add filter",
954
- children: [/* @__PURE__ */ J(he, { children: [a("analysis.sections.filters"), d > 0 && /* @__PURE__ */ J("span", {
955
+ children: [/* @__PURE__ */ q(_e, { children: [a("analysis.sections.filters"), d > 0 && /* @__PURE__ */ q("span", {
955
956
  className: "dc:ml-1.5 dc:text-xs dc:font-normal text-dc-text-muted dc:normal-case dc:tracking-normal",
956
957
  children: [
957
958
  "(",
958
959
  d,
959
960
  ")"
960
961
  ]
961
- })] }), /* @__PURE__ */ J("div", {
962
+ })] }), /* @__PURE__ */ q("div", {
962
963
  className: "dc:flex dc:items-center dc:gap-2",
963
- children: [d > 0 && /* @__PURE__ */ q("span", {
964
+ children: [d > 0 && /* @__PURE__ */ K("span", {
964
965
  role: "button",
965
966
  tabIndex: 0,
966
967
  onClick: (e) => {
@@ -971,23 +972,23 @@ function Ye({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
971
972
  },
972
973
  className: "dc:text-xs text-dc-text-muted hover:text-dc-error dc:underline dc:cursor-pointer",
973
974
  children: a("filter.section.clearAll")
974
- }), /* @__PURE__ */ q(Je, { className: "dc:w-5 dc:h-5 text-dc-text-secondary group-hover:text-dc-primary dc:transition-colors" })]
975
+ }), /* @__PURE__ */ K(Ye, { className: "dc:w-5 dc:h-5 text-dc-text-secondary group-hover:text-dc-primary dc:transition-colors" })]
975
976
  })]
976
977
  }),
977
- /* @__PURE__ */ q("div", {
978
+ /* @__PURE__ */ K("div", {
978
979
  onDragOver: r ? f : void 0,
979
980
  onDragLeave: r ? p : void 0,
980
981
  onDrop: r ? m : void 0,
981
982
  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"}`,
982
- children: e.length === 0 ? /* @__PURE__ */ q("p", {
983
+ children: e.length === 0 ? /* @__PURE__ */ K("p", {
983
984
  className: `dc:text-sm ${c ? "text-dc-primary dc:font-medium" : "text-dc-text-muted"}`,
984
985
  children: a(c ? "filter.section.dropHint" : "filter.section.empty")
985
- }) : /* @__PURE__ */ q("div", {
986
+ }) : /* @__PURE__ */ K("div", {
986
987
  className: "dc:flex dc:flex-wrap dc:gap-2",
987
988
  children: e.map((e, t) => S(e, t))
988
989
  })
989
990
  }),
990
- /* @__PURE__ */ q(T, {
991
+ /* @__PURE__ */ K(E, {
991
992
  isOpen: o,
992
993
  onClose: () => {
993
994
  s(!1), u.current = [];
@@ -1001,33 +1002,33 @@ function Ye({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
1001
1002
  }
1002
1003
  //#endregion
1003
1004
  //#region src/client/components/AnalysisBuilder/ExplainAIPanel.tsx
1004
- function Xe(e) {
1005
+ function Ze(e) {
1005
1006
  return typeof e == "string" ? e : typeof e == "object" && e ? JSON.stringify(e) : String(e ?? "");
1006
1007
  }
1007
- var Ze = {
1008
+ var Qe = {
1008
1009
  good: "bg-dc-success-bg text-dc-success border-dc-success",
1009
1010
  warning: "bg-dc-warning-bg text-dc-warning border-dc-warning",
1010
1011
  critical: "bg-dc-danger-bg text-dc-error border-dc-error"
1011
- }, Qe = {
1012
+ }, $e = {
1012
1013
  critical: "bg-dc-danger-bg text-dc-error",
1013
1014
  warning: "bg-dc-warning-bg text-dc-warning",
1014
1015
  suggestion: "bg-dc-accent-bg text-dc-accent"
1015
- }, $e = {
1016
+ }, et = {
1016
1017
  high: "text-dc-error",
1017
1018
  medium: "text-dc-warning",
1018
1019
  low: "text-dc-text-muted"
1019
1020
  };
1020
- function et({ assessment: e, reason: t }) {
1021
+ function tt({ assessment: e, reason: t }) {
1021
1022
  let { t: n } = R(), r = {
1022
1023
  good: n("explainAI.assessment.good"),
1023
1024
  warning: n("explainAI.assessment.warning"),
1024
1025
  critical: n("explainAI.assessment.critical")
1025
1026
  };
1026
- return /* @__PURE__ */ J("div", {
1027
- className: `dc:p-4 dc:rounded-lg dc:border ${Ze[e]}`,
1028
- children: [/* @__PURE__ */ q("div", {
1027
+ return /* @__PURE__ */ q("div", {
1028
+ className: `dc:p-4 dc:rounded-lg dc:border ${Qe[e]}`,
1029
+ children: [/* @__PURE__ */ K("div", {
1029
1030
  className: "dc:flex dc:items-center dc:gap-2 dc:mb-1",
1030
- children: /* @__PURE__ */ J("span", {
1031
+ children: /* @__PURE__ */ q("span", {
1031
1032
  className: "dc:font-semibold dc:uppercase dc:text-base",
1032
1033
  children: [
1033
1034
  e === "good" && "✓ ",
@@ -1036,33 +1037,33 @@ function et({ assessment: e, reason: t }) {
1036
1037
  r[e]
1037
1038
  ]
1038
1039
  })
1039
- }), /* @__PURE__ */ q("p", {
1040
+ }), /* @__PURE__ */ K("p", {
1040
1041
  className: "dc:text-sm",
1041
- children: Xe(t)
1042
+ children: Ze(t)
1042
1043
  })]
1043
1044
  });
1044
1045
  }
1045
- function tt({ issue: e }) {
1046
- return /* @__PURE__ */ J("div", {
1046
+ function nt({ issue: e }) {
1047
+ return /* @__PURE__ */ q("div", {
1047
1048
  className: "dc:flex dc:items-start dc:gap-2 dc:py-2",
1048
- children: [/* @__PURE__ */ J("span", {
1049
- className: `dc:text-sm ${$e[e.severity]}`,
1049
+ children: [/* @__PURE__ */ q("span", {
1050
+ className: `dc:text-sm ${et[e.severity]}`,
1050
1051
  children: [
1051
1052
  e.severity === "high" && "●",
1052
1053
  e.severity === "medium" && "○",
1053
1054
  e.severity === "low" && "○"
1054
1055
  ]
1055
- }), /* @__PURE__ */ q("span", {
1056
+ }), /* @__PURE__ */ K("span", {
1056
1057
  className: "dc:text-sm text-dc-text-secondary",
1057
- children: Xe(e.description)
1058
+ children: Ze(e.description)
1058
1059
  })]
1059
1060
  });
1060
1061
  }
1061
- function nt({ text: e }) {
1062
- let { t } = R(), [n, r] = B.useState(!1), i = B.useRef(null);
1063
- return B.useEffect(() => () => {
1062
+ function rt({ text: e }) {
1063
+ let { t } = R(), [n, r] = z.useState(!1), i = z.useRef(null);
1064
+ return z.useEffect(() => () => {
1064
1065
  i.current && clearTimeout(i.current);
1065
- }, []), /* @__PURE__ */ q("button", {
1066
+ }, []), /* @__PURE__ */ K("button", {
1066
1067
  onClick: async () => {
1067
1068
  try {
1068
1069
  await navigator.clipboard.writeText(e), r(!0), i.current && clearTimeout(i.current), i.current = setTimeout(() => r(!1), 2e3);
@@ -1075,104 +1076,104 @@ function nt({ text: e }) {
1075
1076
  children: t(n ? "explainAI.copied" : "explainAI.copy")
1076
1077
  });
1077
1078
  }
1078
- function rt({ rec: e }) {
1079
+ function it({ rec: e }) {
1079
1080
  let { t } = R(), n = {
1080
1081
  index: t("explainAI.type.index"),
1081
1082
  table: t("explainAI.type.table"),
1082
1083
  cube: t("explainAI.type.cube"),
1083
1084
  general: t("explainAI.type.general")
1084
1085
  };
1085
- return /* @__PURE__ */ J("div", {
1086
+ return /* @__PURE__ */ q("div", {
1086
1087
  className: "dc:p-4 dc:border border-dc-border dc:rounded-lg bg-dc-surface",
1087
1088
  children: [
1088
- /* @__PURE__ */ J("div", {
1089
+ /* @__PURE__ */ q("div", {
1089
1090
  className: "dc:flex dc:items-center dc:gap-2 dc:mb-2",
1090
- children: [/* @__PURE__ */ q("span", {
1091
- className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded-sm ${Qe[e.severity]}`,
1091
+ children: [/* @__PURE__ */ K("span", {
1092
+ className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded-sm ${$e[e.severity]}`,
1092
1093
  children: n[e.type]
1093
- }), /* @__PURE__ */ q("h5", {
1094
+ }), /* @__PURE__ */ K("h5", {
1094
1095
  className: "dc:font-medium text-dc-text",
1095
- children: Xe(e.title)
1096
+ children: Ze(e.title)
1096
1097
  })]
1097
1098
  }),
1098
- /* @__PURE__ */ q("p", {
1099
+ /* @__PURE__ */ K("p", {
1099
1100
  className: "dc:text-sm text-dc-text-secondary dc:mb-3",
1100
- children: Xe(e.description)
1101
+ children: Ze(e.description)
1101
1102
  }),
1102
- e.sql && /* @__PURE__ */ q("div", {
1103
+ e.sql && /* @__PURE__ */ K("div", {
1103
1104
  className: "dc:mt-2",
1104
- children: /* @__PURE__ */ q(y, {
1105
+ children: /* @__PURE__ */ K(b, {
1105
1106
  code: e.sql,
1106
1107
  language: "sql",
1107
- headerRight: /* @__PURE__ */ q(nt, { text: e.sql })
1108
+ headerRight: /* @__PURE__ */ K(rt, { text: e.sql })
1108
1109
  })
1109
1110
  }),
1110
- e.cubeCode && /* @__PURE__ */ J("div", {
1111
+ e.cubeCode && /* @__PURE__ */ q("div", {
1111
1112
  className: "dc:mt-2",
1112
- children: [e.cubeName && /* @__PURE__ */ q("p", {
1113
+ children: [e.cubeName && /* @__PURE__ */ K("p", {
1113
1114
  className: "dc:text-xs text-dc-text-muted dc:mb-1",
1114
1115
  children: t("explainAI.addToCube", { cubeName: e.cubeName })
1115
- }), /* @__PURE__ */ J("div", {
1116
+ }), /* @__PURE__ */ q("div", {
1116
1117
  className: "dc:relative",
1117
- children: [/* @__PURE__ */ q("pre", {
1118
+ children: [/* @__PURE__ */ K("pre", {
1118
1119
  className: "dc:p-3 dc:text-xs bg-dc-surface-secondary dc:rounded-sm dc:overflow-x-auto dc:font-mono text-dc-text",
1119
1120
  children: e.cubeCode
1120
- }), /* @__PURE__ */ q("div", {
1121
+ }), /* @__PURE__ */ K("div", {
1121
1122
  className: "dc:absolute dc:top-1 dc:right-1",
1122
- children: /* @__PURE__ */ q(nt, { text: e.cubeCode })
1123
+ children: /* @__PURE__ */ K(rt, { text: e.cubeCode })
1123
1124
  })]
1124
1125
  })]
1125
1126
  }),
1126
- e.estimatedImpact && /* @__PURE__ */ J("p", {
1127
+ e.estimatedImpact && /* @__PURE__ */ q("p", {
1127
1128
  className: "dc:text-xs text-dc-text-muted dc:mt-2",
1128
1129
  children: [
1129
- /* @__PURE__ */ q("strong", { children: t("explainAI.expectedImpact") }),
1130
+ /* @__PURE__ */ K("strong", { children: t("explainAI.expectedImpact") }),
1130
1131
  " ",
1131
- Xe(e.estimatedImpact)
1132
+ Ze(e.estimatedImpact)
1132
1133
  ]
1133
1134
  })
1134
1135
  ]
1135
1136
  });
1136
1137
  }
1137
- function it({ analysis: e, onClose: t, onClear: n }) {
1138
+ function at({ analysis: e, onClose: t, onClear: n }) {
1138
1139
  let { t: r } = R(), i = t || n;
1139
- return B.useEffect(() => {
1140
+ return z.useEffect(() => {
1140
1141
  let e = (e) => {
1141
1142
  e.key === "Escape" && i && i();
1142
1143
  };
1143
1144
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
1144
- }, [i]), B.useEffect(() => (document.body.style.overflow = "hidden", () => {
1145
+ }, [i]), z.useEffect(() => (document.body.style.overflow = "hidden", () => {
1145
1146
  document.body.style.overflow = "";
1146
- }), []), /* @__PURE__ */ J("div", {
1147
+ }), []), /* @__PURE__ */ q("div", {
1147
1148
  className: "dc:fixed dc:inset-0 dc:z-50 dc:flex dc:items-center dc:justify-center dc:p-4 bg-black/50",
1148
- children: [/* @__PURE__ */ q("div", {
1149
+ children: [/* @__PURE__ */ K("div", {
1149
1150
  className: "dc:absolute dc:inset-0",
1150
1151
  onClick: i,
1151
1152
  "aria-hidden": "true"
1152
- }), /* @__PURE__ */ J("div", {
1153
+ }), /* @__PURE__ */ q("div", {
1153
1154
  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",
1154
1155
  children: [
1155
- /* @__PURE__ */ J("div", {
1156
+ /* @__PURE__ */ q("div", {
1156
1157
  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",
1157
- children: [/* @__PURE__ */ J("div", {
1158
+ children: [/* @__PURE__ */ q("div", {
1158
1159
  className: "dc:flex dc:items-center dc:gap-3",
1159
- children: [/* @__PURE__ */ q("span", {
1160
+ children: [/* @__PURE__ */ K("span", {
1160
1161
  className: "dc:text-lg",
1161
1162
  children: "✨"
1162
- }), /* @__PURE__ */ q("h3", {
1163
+ }), /* @__PURE__ */ K("h3", {
1163
1164
  className: "dc:text-lg dc:font-semibold text-dc-text",
1164
1165
  children: r("explainAI.title")
1165
1166
  })]
1166
- }), /* @__PURE__ */ q("button", {
1167
+ }), /* @__PURE__ */ K("button", {
1167
1168
  onClick: i,
1168
1169
  className: "dc:p-2 dc:rounded-lg hover:bg-dc-surface-hover text-dc-text-secondary hover:text-dc-text dc:transition-colors",
1169
1170
  "aria-label": "Close",
1170
- children: /* @__PURE__ */ q("svg", {
1171
+ children: /* @__PURE__ */ K("svg", {
1171
1172
  className: "dc:w-5 dc:h-5",
1172
1173
  fill: "none",
1173
1174
  stroke: "currentColor",
1174
1175
  viewBox: "0 0 24 24",
1175
- children: /* @__PURE__ */ q("path", {
1176
+ children: /* @__PURE__ */ K("path", {
1176
1177
  strokeLinecap: "round",
1177
1178
  strokeLinejoin: "round",
1178
1179
  strokeWidth: 2,
@@ -1181,50 +1182,50 @@ function it({ analysis: e, onClose: t, onClear: n }) {
1181
1182
  })
1182
1183
  })]
1183
1184
  }),
1184
- /* @__PURE__ */ J("div", {
1185
+ /* @__PURE__ */ q("div", {
1185
1186
  className: "dc:flex-1 dc:overflow-y-auto dc:px-6 dc:py-4 dc:space-y-6",
1186
1187
  children: [
1187
- /* @__PURE__ */ q(et, {
1188
+ /* @__PURE__ */ K(tt, {
1188
1189
  assessment: e.assessment,
1189
1190
  reason: e.assessmentReason
1190
1191
  }),
1191
- /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("h4", {
1192
+ /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("h4", {
1192
1193
  className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
1193
1194
  children: r("explainAI.summary")
1194
- }), /* @__PURE__ */ q("p", {
1195
+ }), /* @__PURE__ */ K("p", {
1195
1196
  className: "text-dc-text",
1196
- children: Xe(e.summary)
1197
+ children: Ze(e.summary)
1197
1198
  })] }),
1198
- e.queryUnderstanding && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("h4", {
1199
+ e.queryUnderstanding && /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("h4", {
1199
1200
  className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
1200
1201
  children: r("explainAI.queryAnalysis")
1201
- }), /* @__PURE__ */ q("p", {
1202
+ }), /* @__PURE__ */ K("p", {
1202
1203
  className: "text-dc-text-secondary",
1203
- children: Xe(e.queryUnderstanding)
1204
+ children: Ze(e.queryUnderstanding)
1204
1205
  })] }),
1205
- e.issues && e.issues.length > 0 && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("h4", {
1206
+ e.issues && e.issues.length > 0 && /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("h4", {
1206
1207
  className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
1207
1208
  children: r("explainAI.issuesFound", { count: e.issues.length })
1208
- }), /* @__PURE__ */ q("div", {
1209
+ }), /* @__PURE__ */ K("div", {
1209
1210
  className: "dc:space-y-1 bg-dc-surface-secondary dc:rounded-lg dc:p-3",
1210
- children: e.issues.map((e, t) => /* @__PURE__ */ q(tt, { issue: e }, t))
1211
+ children: e.issues.map((e, t) => /* @__PURE__ */ K(nt, { issue: e }, t))
1211
1212
  })] }),
1212
- e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("h4", {
1213
+ e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */ q("div", { children: [/* @__PURE__ */ K("h4", {
1213
1214
  className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-3",
1214
1215
  children: r("explainAI.recommendations", { count: e.recommendations.length })
1215
- }), /* @__PURE__ */ q("div", {
1216
+ }), /* @__PURE__ */ K("div", {
1216
1217
  className: "dc:space-y-4",
1217
- children: e.recommendations.map((e, t) => /* @__PURE__ */ q(rt, { rec: e }, t))
1218
+ children: e.recommendations.map((e, t) => /* @__PURE__ */ K(it, { rec: e }, t))
1218
1219
  })] }),
1219
- (!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */ q("div", {
1220
+ (!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */ K("div", {
1220
1221
  className: "text-dc-text-muted dc:italic dc:p-4 bg-dc-surface-secondary dc:rounded-lg",
1221
1222
  children: r("explainAI.noRecommendations")
1222
1223
  })
1223
1224
  ]
1224
1225
  }),
1225
- /* @__PURE__ */ J("div", {
1226
+ /* @__PURE__ */ q("div", {
1226
1227
  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",
1227
- children: [e._meta && /* @__PURE__ */ J("div", {
1228
+ children: [e._meta && /* @__PURE__ */ q("div", {
1228
1229
  className: "dc:text-xs text-dc-text-muted",
1229
1230
  children: [
1230
1231
  r("explainAI.modelLabel"),
@@ -1232,7 +1233,7 @@ function it({ analysis: e, onClose: t, onClear: n }) {
1232
1233
  e._meta.model,
1233
1234
  e._meta.usingUserKey && ` ${r("explainAI.usingUserKey")}`
1234
1235
  ]
1235
- }), /* @__PURE__ */ q("button", {
1236
+ }), /* @__PURE__ */ K("button", {
1236
1237
  onClick: i,
1237
1238
  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",
1238
1239
  children: r("common.actions.close")
@@ -1244,31 +1245,31 @@ function it({ analysis: e, onClose: t, onClear: n }) {
1244
1245
  }
1245
1246
  //#endregion
1246
1247
  //#region src/client/shared/chartConfigBuilders.ts
1247
- var at = (e) => e.map((e) => e.field), ot = (e) => e.length > 0 ? [e[0].field] : [];
1248
- function st(e) {
1248
+ var ot = (e) => e.map((e) => e.field), st = (e) => e.length > 0 ? [e[0].field] : [];
1249
+ function ct(e) {
1249
1250
  let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
1250
1251
  return {
1251
1252
  xAxis: n ? [n.field] : r ? [r.field] : [],
1252
- yAxis: at(t),
1253
+ yAxis: ot(t),
1253
1254
  series: i.length > 1 ? [i[1].field] : r && n ? [r.field] : []
1254
1255
  };
1255
1256
  }
1256
- function ct(e) {
1257
+ function lt(e) {
1257
1258
  let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
1258
1259
  return {
1259
1260
  xAxis: r ? [r.field] : n ? [n.field] : [],
1260
- yAxis: at(t),
1261
+ yAxis: ot(t),
1261
1262
  series: i.length > 1 ? [i[1].field] : n && r ? [n.field] : []
1262
1263
  };
1263
1264
  }
1264
- function lt(e) {
1265
+ function ut(e) {
1265
1266
  let { metrics: t, dimension: n } = e;
1266
1267
  return {
1267
1268
  xAxis: n ? [n.field] : [],
1268
- yAxis: ot(t)
1269
+ yAxis: st(t)
1269
1270
  };
1270
1271
  }
1271
- function ut(e) {
1272
+ function dt(e) {
1272
1273
  let { metrics: t, breakdowns: n, dimension: r, dimensions: i } = e;
1273
1274
  return t.length >= 2 ? {
1274
1275
  xAxis: [t[0].field],
@@ -1276,11 +1277,11 @@ function ut(e) {
1276
1277
  series: r ? [r.field] : []
1277
1278
  } : {
1278
1279
  xAxis: n.length > 0 ? [n[0].field] : [],
1279
- yAxis: ot(t),
1280
+ yAxis: st(t),
1280
1281
  series: i.length > 1 ? [i[1].field] : []
1281
1282
  };
1282
1283
  }
1283
- function dt(e) {
1284
+ function ft(e) {
1284
1285
  let { metrics: t, timeDimension: n, dimension: r } = e;
1285
1286
  return {
1286
1287
  xAxis: t.length > 0 ? [t[0].field] : [],
@@ -1289,211 +1290,216 @@ function dt(e) {
1289
1290
  series: r ? [r.field] : n ? [n.field] : []
1290
1291
  };
1291
1292
  }
1292
- function ft(e) {
1293
+ function pt(e) {
1293
1294
  let { metrics: t, dimension: n } = e;
1294
1295
  return {
1295
1296
  xAxis: n ? [n.field] : [],
1296
- yAxis: ot(t)
1297
+ yAxis: st(t)
1297
1298
  };
1298
1299
  }
1299
- function pt(e) {
1300
+ function mt(e) {
1300
1301
  let { metrics: t, timeDimension: n } = e;
1301
1302
  return {
1302
1303
  dateField: n ? [n.field] : [],
1303
- valueField: ot(t)
1304
+ valueField: st(t)
1304
1305
  };
1305
1306
  }
1306
- function mt(e) {
1307
- return { yAxis: ot(e.metrics) };
1308
- }
1309
1307
  function ht(e) {
1308
+ return { yAxis: st(e.metrics) };
1309
+ }
1310
+ function gt(e) {
1310
1311
  let { metrics: t, breakdowns: n } = e;
1311
1312
  return { xAxis: [...n.map((e) => e.field), ...t.map((e) => e.field)] };
1312
1313
  }
1313
- function gt() {
1314
+ function _t(e) {
1315
+ let { metrics: t, breakdowns: n } = e;
1316
+ return { columns: [...n.map((e) => e.field), ...t.map((e) => e.field)] };
1317
+ }
1318
+ function vt() {
1314
1319
  return {};
1315
1320
  }
1316
- function _t(e) {
1321
+ function yt(e) {
1317
1322
  let { metrics: t, breakdowns: n } = e;
1318
1323
  return {
1319
1324
  xAxis: n.length > 0 ? [n[0].field] : [],
1320
- yAxis: at(t)
1325
+ yAxis: ot(t)
1321
1326
  };
1322
1327
  }
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
- proportionBar: lt,
1334
- activityGrid: pt,
1335
- kpiNumber: mt,
1336
- kpiDelta: mt,
1337
- kpiText: mt,
1338
- table: ht,
1339
- markdown: gt
1328
+ var bt = {
1329
+ line: ct,
1330
+ area: ct,
1331
+ bar: lt,
1332
+ pie: ut,
1333
+ scatter: dt,
1334
+ bubble: ft,
1335
+ radar: pt,
1336
+ radialBar: pt,
1337
+ treemap: pt,
1338
+ proportionBar: ut,
1339
+ activityGrid: mt,
1340
+ kpiNumber: ht,
1341
+ kpiDelta: ht,
1342
+ kpiText: ht,
1343
+ table: gt,
1344
+ recordsTable: _t,
1345
+ markdown: vt
1340
1346
  };
1341
- function yt(e) {
1342
- return vt[e] || _t;
1347
+ function xt(e) {
1348
+ return bt[e] || yt;
1343
1349
  }
1344
1350
  //#endregion
1345
1351
  //#region src/client/shared/chartDefaults.ts
1346
- function bt(e) {
1352
+ function St(e) {
1347
1353
  return e.isTimeDimension;
1348
1354
  }
1349
- function xt(e) {
1350
- return e.find(bt);
1355
+ function Ct(e) {
1356
+ return e.find(St);
1351
1357
  }
1352
- function St(e) {
1358
+ function wt(e) {
1353
1359
  return e.find((e) => !e.isTimeDimension);
1354
1360
  }
1355
- function Ct(e) {
1361
+ function Tt(e) {
1356
1362
  return e.filter((e) => !e.isTimeDimension);
1357
1363
  }
1358
- function wt(e) {
1359
- return e.filter(bt);
1364
+ function Et(e) {
1365
+ return e.filter(St);
1360
1366
  }
1361
- function Tt(e, t) {
1367
+ function Dt(e, t) {
1362
1368
  return {
1363
1369
  measureCount: e.length,
1364
1370
  dimensionCount: t.length,
1365
- timeDimensionCount: wt(t).length
1371
+ timeDimensionCount: Et(t).length
1366
1372
  };
1367
1373
  }
1368
- function Et(e, t, n) {
1369
- let r = c[e];
1370
- return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(Tt(t, n));
1374
+ function Ot(e, t, n) {
1375
+ let r = u[e];
1376
+ return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(Dt(t, n));
1371
1377
  }
1372
- function Dt(e, t) {
1373
- let n = Object.keys(c), r = {};
1374
- for (let i of n) r[i] = Et(i, e, t);
1378
+ function kt(e, t) {
1379
+ let n = Object.keys(u), r = {};
1380
+ for (let i of n) r[i] = Ot(i, e, t);
1375
1381
  return r;
1376
1382
  }
1377
- function Ot(e, t, n) {
1378
- if (Et(n, e, t).available || e.length === 0 && t.length === 0) return n;
1379
- let r = wt(t).length > 0, i = Ct(t).length > 0, a = e.length > 0;
1383
+ function At(e, t, n) {
1384
+ if (Ot(n, e, t).available || e.length === 0 && t.length === 0) return n;
1385
+ let r = Et(t).length > 0, i = Tt(t).length > 0, a = e.length > 0;
1380
1386
  return r && a ? "line" : i && a ? "bar" : a && !i && !r ? "kpiNumber" : "table";
1381
1387
  }
1382
- function kt(e, t, n) {
1383
- let r = Ot(e, t, n);
1388
+ function jt(e, t, n) {
1389
+ let r = At(e, t, n);
1384
1390
  return {
1385
1391
  chartType: r,
1386
- chartConfig: At(r, e, t)
1392
+ chartConfig: Mt(r, e, t)
1387
1393
  };
1388
1394
  }
1389
- function At(e, t, n) {
1390
- return yt(e)({
1395
+ function Mt(e, t, n) {
1396
+ return xt(e)({
1391
1397
  metrics: t,
1392
1398
  breakdowns: n,
1393
- timeDimension: xt(n),
1394
- dimension: St(n),
1395
- dimensions: Ct(n)
1399
+ timeDimension: Ct(n),
1400
+ dimension: wt(n),
1401
+ dimensions: Tt(n)
1396
1402
  });
1397
1403
  }
1398
- function jt(e, t, n, r) {
1399
- if (r && Et(n, e, t).available) return null;
1400
- let i = Ot(e, t, n);
1404
+ function Nt(e, t, n, r) {
1405
+ if (r && Ot(n, e, t).available) return null;
1406
+ let i = At(e, t, n);
1401
1407
  return i === n ? null : i;
1402
1408
  }
1403
1409
  //#endregion
1404
1410
  //#region src/client/components/AnalysisBuilder/ExecutionPlanPanelParts.tsx
1405
- function Mt({ title: e, height: t, className: n, children: r }) {
1406
- return /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q("h4", {
1411
+ function Pt({ title: e, height: t, className: n, children: r }) {
1412
+ return /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K("h4", {
1407
1413
  className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
1408
1414
  children: e
1409
- }), /* @__PURE__ */ q("div", {
1415
+ }), /* @__PURE__ */ K("div", {
1410
1416
  className: n,
1411
1417
  style: { height: t },
1412
1418
  children: r
1413
1419
  })] });
1414
1420
  }
1415
- function Nt({ sql: e, sqlLoading: t, sqlError: n, sqlPlaceholder: r, formattedSql: i, title: a, height: o, headerRight: s }) {
1421
+ function Ft({ sql: e, sqlLoading: t, sqlError: n, sqlPlaceholder: r, formattedSql: i, title: a, height: o, headerRight: s }) {
1416
1422
  let { t: c } = R();
1417
- return t ? /* @__PURE__ */ q(Mt, {
1423
+ return t ? /* @__PURE__ */ K(Pt, {
1418
1424
  title: a,
1419
1425
  height: o,
1420
1426
  className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded-sm dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
1421
1427
  children: c("results.debug.loadingSql")
1422
- }) : n ? /* @__PURE__ */ q(Mt, {
1428
+ }) : n ? /* @__PURE__ */ K(Pt, {
1423
1429
  title: a,
1424
1430
  height: o,
1425
1431
  className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded-sm dc:border border-dc-error",
1426
1432
  children: n.message
1427
- }) : e ? /* @__PURE__ */ q(y, {
1433
+ }) : e ? /* @__PURE__ */ K(b, {
1428
1434
  code: i,
1429
1435
  language: "sql",
1430
1436
  title: a,
1431
1437
  height: o,
1432
1438
  headerRight: s
1433
- }) : /* @__PURE__ */ q(Mt, {
1439
+ }) : /* @__PURE__ */ K(Pt, {
1434
1440
  title: a,
1435
1441
  height: o,
1436
1442
  className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded-sm dc:p-3 text-dc-text-muted dc:text-sm",
1437
1443
  children: r
1438
1444
  });
1439
1445
  }
1440
- function Pt({ summary: e }) {
1446
+ function It({ summary: e }) {
1441
1447
  let { t } = R();
1442
- return /* @__PURE__ */ J("div", {
1448
+ return /* @__PURE__ */ q("div", {
1443
1449
  className: "dc:flex dc:flex-wrap dc:items-center dc:gap-2",
1444
1450
  children: [
1445
- /* @__PURE__ */ q("span", {
1451
+ /* @__PURE__ */ K("span", {
1446
1452
  className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-accent text-white dc:rounded-sm",
1447
1453
  children: e.database.toUpperCase()
1448
1454
  }),
1449
- e.hasSequentialScans && /* @__PURE__ */ q("span", {
1455
+ e.hasSequentialScans && /* @__PURE__ */ K("span", {
1450
1456
  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-sm",
1451
1457
  children: t("debug.sequentialScans")
1452
1458
  }),
1453
- e.usedIndexes.length > 0 && /* @__PURE__ */ q("span", {
1459
+ e.usedIndexes.length > 0 && /* @__PURE__ */ K("span", {
1454
1460
  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-sm",
1455
1461
  children: t(e.usedIndexes.length === 1 ? "debug.indexesUsed" : "debug.indexesUsedPlural", { count: e.usedIndexes.length })
1456
1462
  }),
1457
- e.executionTime !== void 0 && /* @__PURE__ */ q("span", {
1463
+ e.executionTime !== void 0 && /* @__PURE__ */ K("span", {
1458
1464
  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-sm",
1459
1465
  children: t("debug.executionTime", { time: e.executionTime.toFixed(2) })
1460
1466
  }),
1461
- e.planningTime !== void 0 && /* @__PURE__ */ q("span", {
1467
+ e.planningTime !== void 0 && /* @__PURE__ */ K("span", {
1462
1468
  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-sm",
1463
1469
  children: t("debug.planningTime", { time: e.planningTime.toFixed(2) })
1464
1470
  }),
1465
- e.totalCost !== void 0 && /* @__PURE__ */ q("span", {
1471
+ e.totalCost !== void 0 && /* @__PURE__ */ K("span", {
1466
1472
  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-sm",
1467
1473
  children: t("debug.cost", { cost: e.totalCost.toFixed(2) })
1468
1474
  })
1469
1475
  ]
1470
1476
  });
1471
1477
  }
1472
- function Ft({ explainLoading: e, explainError: t, explainResult: n, useAnalyze: r, aiButton: i }) {
1478
+ function Lt({ explainLoading: e, explainError: t, explainResult: n, useAnalyze: r, aiButton: i }) {
1473
1479
  let { t: a } = R();
1474
- return e ? /* @__PURE__ */ q("div", {
1480
+ return e ? /* @__PURE__ */ K("div", {
1475
1481
  className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded-sm dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
1476
1482
  children: a(r ? "debug.explainRunningAnalyze" : "debug.explainRunningBasic")
1477
- }) : t ? /* @__PURE__ */ J("div", {
1483
+ }) : t ? /* @__PURE__ */ q("div", {
1478
1484
  className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded-sm dc:border border-dc-error",
1479
1485
  children: [
1480
- /* @__PURE__ */ q("strong", { children: a("debug.explainError") }),
1486
+ /* @__PURE__ */ K("strong", { children: a("debug.explainError") }),
1481
1487
  " ",
1482
1488
  t.message
1483
1489
  ]
1484
- }) : n ? /* @__PURE__ */ J("div", {
1490
+ }) : n ? /* @__PURE__ */ q("div", {
1485
1491
  className: "dc:space-y-3",
1486
1492
  children: [
1487
- /* @__PURE__ */ q(Pt, { summary: n.summary }),
1488
- n.summary.usedIndexes.length > 0 && /* @__PURE__ */ J("div", {
1493
+ /* @__PURE__ */ K(It, { summary: n.summary }),
1494
+ n.summary.usedIndexes.length > 0 && /* @__PURE__ */ q("div", {
1489
1495
  className: "dc:text-xs text-dc-text-muted",
1490
1496
  children: [
1491
- /* @__PURE__ */ q("strong", { children: a("debug.indexes") }),
1497
+ /* @__PURE__ */ K("strong", { children: a("debug.indexes") }),
1492
1498
  " ",
1493
1499
  n.summary.usedIndexes.join(", ")
1494
1500
  ]
1495
1501
  }),
1496
- /* @__PURE__ */ q(y, {
1502
+ /* @__PURE__ */ K(b, {
1497
1503
  code: n.raw,
1498
1504
  language: "sql",
1499
1505
  title: a("debug.executionPlanTitle", { database: n.summary.database }),
@@ -1505,24 +1511,24 @@ function Ft({ explainLoading: e, explainError: t, explainResult: n, useAnalyze:
1505
1511
  }
1506
1512
  //#endregion
1507
1513
  //#region src/client/components/AnalysisBuilder/ExecutionPlanPanel.tsx
1508
- 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" }) {
1509
- 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 = () => {
1514
+ var Rt = ye(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" }) {
1515
+ let { t: v } = R(), [y, b] = W(!1), [x, S] = W(!1), C = e ? e.sql + (e.params && e.params.length > 0 ? "\n\n-- Parameters:\n" + JSON.stringify(e.params, null, 2) : "") : "", w = () => {
1510
1516
  f && i && h && (f(i, h), S(!0));
1511
1517
  }, T = () => {
1512
1518
  S(!1);
1513
- }, E = m && i ? /* @__PURE__ */ q("button", {
1519
+ }, E = m && i ? /* @__PURE__ */ K("button", {
1514
1520
  onClick: w,
1515
1521
  disabled: u,
1516
1522
  className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium dc:rounded-sm 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",
1517
- children: u ? /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q("span", {
1523
+ children: u ? /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ K("span", {
1518
1524
  className: "dc:animate-spin",
1519
1525
  children: "⟳"
1520
- }), v("debug.aiAnalyzing")] }) : /* @__PURE__ */ q(K, { children: `✨ ${v("debug.aiAnalysis")}` })
1526
+ }), v("debug.aiAnalyzing")] }) : /* @__PURE__ */ K(G, { children: `✨ ${v("debug.aiAnalysis")}` })
1521
1527
  }) : null;
1522
- return /* @__PURE__ */ J("div", {
1528
+ return /* @__PURE__ */ q("div", {
1523
1529
  className: "dc:space-y-3",
1524
1530
  children: [
1525
- /* @__PURE__ */ q(Nt, {
1531
+ /* @__PURE__ */ K(Ft, {
1526
1532
  sql: e,
1527
1533
  sqlLoading: t,
1528
1534
  sqlError: n,
@@ -1530,37 +1536,37 @@ var It = _e(function({ sql: e, sqlLoading: t = !1, sqlError: n, sqlPlaceholder:
1530
1536
  formattedSql: C,
1531
1537
  title: g,
1532
1538
  height: _,
1533
- headerRight: /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ J("label", {
1539
+ headerRight: /* @__PURE__ */ q(G, { children: [/* @__PURE__ */ q("label", {
1534
1540
  className: "dc:flex dc:items-center dc:gap-1 dc:text-xs text-dc-text-secondary dc:cursor-pointer",
1535
- children: [/* @__PURE__ */ q("input", {
1541
+ children: [/* @__PURE__ */ K("input", {
1536
1542
  type: "checkbox",
1537
1543
  checked: y,
1538
1544
  onChange: (e) => b(e.target.checked),
1539
1545
  className: "dc:w-3 dc:h-3 dc:rounded-sm border-dc-border text-dc-accent focus:ring-dc-accent"
1540
1546
  }), v("debug.explainIncludeTiming")]
1541
- }), /* @__PURE__ */ q("button", {
1547
+ }), /* @__PURE__ */ K("button", {
1542
1548
  onClick: () => c({ analyze: y }),
1543
1549
  disabled: a,
1544
1550
  className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium dc:rounded-sm 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",
1545
1551
  children: v(a ? "debug.explainRunning" : "debug.explainPlan")
1546
1552
  })] })
1547
1553
  }),
1548
- o && /* @__PURE__ */ q("div", { children: /* @__PURE__ */ q(Ft, {
1554
+ o && /* @__PURE__ */ K("div", { children: /* @__PURE__ */ K(Lt, {
1549
1555
  explainLoading: a,
1550
1556
  explainError: s,
1551
1557
  explainResult: i,
1552
1558
  useAnalyze: y,
1553
1559
  aiButton: E
1554
1560
  }) }),
1555
- d && /* @__PURE__ */ J("div", {
1561
+ d && /* @__PURE__ */ q("div", {
1556
1562
  className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded-sm dc:border border-dc-error",
1557
1563
  children: [
1558
- /* @__PURE__ */ q("strong", { children: v("debug.aiAnalysisError") }),
1564
+ /* @__PURE__ */ K("strong", { children: v("debug.aiAnalysisError") }),
1559
1565
  " ",
1560
1566
  d.message
1561
1567
  ]
1562
1568
  }),
1563
- x && l && /* @__PURE__ */ q(it, {
1569
+ x && l && /* @__PURE__ */ K(at, {
1564
1570
  analysis: l,
1565
1571
  onClose: T
1566
1572
  })
@@ -1569,7 +1575,7 @@ var It = _e(function({ sql: e, sqlLoading: t = !1, sqlError: n, sqlPlaceholder:
1569
1575
  });
1570
1576
  //#endregion
1571
1577
  //#region src/client/adapters/queryModeAdapter.ts
1572
- function Lt() {
1578
+ function zt() {
1573
1579
  return {
1574
1580
  metrics: [],
1575
1581
  breakdowns: [],
@@ -1580,10 +1586,10 @@ function Lt() {
1580
1586
  validationError: null
1581
1587
  };
1582
1588
  }
1583
- function Rt(e) {
1589
+ function Bt(e) {
1584
1590
  return e.map((e) => e.field);
1585
1591
  }
1586
- function zt(e, t) {
1592
+ function Vt(e, t) {
1587
1593
  let n = [], r = [];
1588
1594
  for (let i of e) if (i.isTimeDimension) {
1589
1595
  let e = {
@@ -1591,7 +1597,7 @@ function zt(e, t) {
1591
1597
  granularity: i.granularity || "day"
1592
1598
  };
1593
1599
  if (i.enableComparison) {
1594
- let n = Ce(i.field, t);
1600
+ let n = we(i.field, t);
1595
1601
  n && (e.compareDateRange = n);
1596
1602
  }
1597
1603
  r.push(e);
@@ -1601,31 +1607,31 @@ function zt(e, t) {
1601
1607
  timeDimensions: r
1602
1608
  };
1603
1609
  }
1604
- function Bt(e) {
1605
- let { dimensions: t, timeDimensions: n } = zt(e.breakdowns, e.filters), r = {
1606
- measures: Rt(e.metrics),
1610
+ function Ht(e) {
1611
+ let { dimensions: t, timeDimensions: n } = Vt(e.breakdowns, e.filters), r = {
1612
+ measures: Bt(e.metrics),
1607
1613
  dimensions: t
1608
1614
  };
1609
1615
  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;
1610
1616
  }
1611
- function Vt(e) {
1617
+ function Ut(e) {
1612
1618
  return e.map((e, t) => ({
1613
- id: p(),
1619
+ id: m(),
1614
1620
  field: e,
1615
- label: d(t)
1621
+ label: f(t)
1616
1622
  }));
1617
1623
  }
1618
- function Ht(e) {
1624
+ function Wt(e) {
1619
1625
  let t = [];
1620
1626
  if (e.dimensions) for (let n of e.dimensions) t.push({
1621
- id: p(),
1627
+ id: m(),
1622
1628
  field: n,
1623
1629
  isTimeDimension: !1
1624
1630
  });
1625
1631
  if (e.timeDimensions) for (let n of e.timeDimensions) {
1626
1632
  let e = !!(n.compareDateRange && n.compareDateRange.length > 0);
1627
1633
  t.push({
1628
- id: p(),
1634
+ id: m(),
1629
1635
  field: n.dimension,
1630
1636
  granularity: n.granularity,
1631
1637
  isTimeDimension: !0,
@@ -1634,10 +1640,10 @@ function Ht(e) {
1634
1640
  }
1635
1641
  return t;
1636
1642
  }
1637
- function Ut(e) {
1643
+ function Gt(e) {
1638
1644
  return {
1639
- metrics: Vt(e.measures || []),
1640
- breakdowns: Ht(e),
1645
+ metrics: Ut(e.measures || []),
1646
+ breakdowns: Wt(e),
1641
1647
  filters: e.filters || [],
1642
1648
  order: e.order,
1643
1649
  limit: e.limit,
@@ -1645,14 +1651,14 @@ function Ut(e) {
1645
1651
  validationError: null
1646
1652
  };
1647
1653
  }
1648
- function Wt(e) {
1654
+ function Kt(e) {
1649
1655
  return typeof e == "object" && !!e && "queries" in e && Array.isArray(e.queries);
1650
1656
  }
1651
1657
  var X = {
1652
1658
  type: "query",
1653
1659
  createInitial() {
1654
1660
  return {
1655
- queryStates: [Lt()],
1661
+ queryStates: [zt()],
1656
1662
  activeQueryIndex: 0,
1657
1663
  mergeStrategy: "concat"
1658
1664
  };
@@ -1672,22 +1678,22 @@ var X = {
1672
1678
  load(e) {
1673
1679
  if (e.analysisType !== "query") throw Error(`Cannot load ${e.analysisType} config with query adapter`);
1674
1680
  let t = e;
1675
- if (Wt(t.query)) {
1676
- let e = t.query, n = e.queries.map(Ut);
1677
- return n.length === 0 && n.push(Lt()), {
1681
+ if (Kt(t.query)) {
1682
+ let e = t.query, n = e.queries.map(Gt);
1683
+ return n.length === 0 && n.push(zt()), {
1678
1684
  queryStates: n,
1679
1685
  activeQueryIndex: 0,
1680
1686
  mergeStrategy: e.mergeStrategy || "concat"
1681
1687
  };
1682
1688
  }
1683
1689
  return {
1684
- queryStates: [Ut(t.query)],
1690
+ queryStates: [Gt(t.query)],
1685
1691
  activeQueryIndex: 0,
1686
1692
  mergeStrategy: "concat"
1687
1693
  };
1688
1694
  },
1689
1695
  save(e, t, n) {
1690
- let r = e.queryStates.map(Bt), i = r.length === 1 && e.mergeStrategy === "concat" ? r[0] : {
1696
+ let r = e.queryStates.map(Ht), i = r.length === 1 && e.mergeStrategy === "concat" ? r[0] : {
1691
1697
  queries: r,
1692
1698
  mergeStrategy: e.mergeStrategy
1693
1699
  };
@@ -1728,36 +1734,36 @@ var X = {
1728
1734
  }
1729
1735
  };
1730
1736
  }
1731
- }, Z = /* @__PURE__ */ new Map(), Gt = !1;
1732
- function Kt() {
1733
- 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);
1737
+ }, Z = /* @__PURE__ */ new Map(), qt = !1;
1738
+ function Jt() {
1739
+ qt ||= (Z.has("query") || Z.set("query", X), Z.has("funnel") || Z.set("funnel", v), Z.has("flow") || Z.set("flow", T), Z.has("retention") || Z.set("retention", x), !0);
1734
1740
  }
1735
1741
  var Q = {
1736
1742
  register(e) {
1737
1743
  Z.has(e.type) && console.warn(`[adapterRegistry] Overwriting existing adapter for type: ${e.type}`), Z.set(e.type, e);
1738
1744
  },
1739
1745
  get(e) {
1740
- Kt();
1746
+ Jt();
1741
1747
  let t = Z.get(e);
1742
1748
  if (!t) throw Error(`[adapterRegistry] No adapter registered for type: ${e}. Available types: ${Array.from(Z.keys()).join(", ") || "none"}`);
1743
1749
  return t;
1744
1750
  },
1745
1751
  has(e) {
1746
- return Kt(), Z.has(e);
1752
+ return Jt(), Z.has(e);
1747
1753
  },
1748
1754
  getRegisteredTypes() {
1749
- return Kt(), Array.from(Z.keys());
1755
+ return Jt(), Array.from(Z.keys());
1750
1756
  },
1751
1757
  clear() {
1752
- Z.clear(), Gt = !1;
1758
+ Z.clear(), qt = !1;
1753
1759
  }
1754
- }, qt = () => ({
1760
+ }, Yt = () => ({
1755
1761
  analysisType: "query",
1756
1762
  charts: {
1757
1763
  query: X.getDefaultChartConfig(),
1758
- funnel: _.getDefaultChartConfig(),
1759
- flow: w.getDefaultChartConfig(),
1760
- retention: b.getDefaultChartConfig()
1764
+ funnel: v.getDefaultChartConfig(),
1765
+ flow: T.getDefaultChartConfig(),
1766
+ retention: x.getDefaultChartConfig()
1761
1767
  },
1762
1768
  activeViews: {
1763
1769
  query: "chart",
@@ -1767,8 +1773,8 @@ var Q = {
1767
1773
  },
1768
1774
  userManuallySelectedChart: !1,
1769
1775
  localPaletteName: "default"
1770
- }), Jt = (e, t, n) => ({
1771
- ...qt(),
1776
+ }), Xt = (e, t, n) => ({
1777
+ ...Yt(),
1772
1778
  setAnalysisType: (t) => {
1773
1779
  e((e) => {
1774
1780
  let n = { ...e.charts };
@@ -1981,12 +1987,12 @@ var Q = {
1981
1987
  ...u
1982
1988
  });
1983
1989
  }
1984
- }), Yt = () => ({
1990
+ }), Zt = () => ({
1985
1991
  queryStates: [Y()],
1986
1992
  activeQueryIndex: 0,
1987
1993
  mergeStrategy: "concat"
1988
- }), Xt = (e, t, n) => ({
1989
- ...Yt(),
1994
+ }), Qt = (e, t, n) => ({
1995
+ ...Zt(),
1990
1996
  setQueryStates: (t) => e({ queryStates: t }),
1991
1997
  updateQueryState: (t, n) => e((e) => {
1992
1998
  let r = [...e.queryStates];
@@ -2016,9 +2022,9 @@ var Q = {
2016
2022
  }),
2017
2023
  addMetric: (t, n) => e((e) => {
2018
2024
  let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] || Y(), o = {
2019
- id: p(),
2025
+ id: m(),
2020
2026
  field: t,
2021
- label: n || d(a.metrics.length)
2027
+ label: n || f(a.metrics.length)
2022
2028
  };
2023
2029
  return i[r] = {
2024
2030
  ...a,
@@ -2041,9 +2047,9 @@ var Q = {
2041
2047
  };
2042
2048
  else {
2043
2049
  let e = {
2044
- id: p(),
2050
+ id: m(),
2045
2051
  field: t,
2046
- label: d(i.metrics.length)
2052
+ label: f(i.metrics.length)
2047
2053
  };
2048
2054
  r[n] = {
2049
2055
  ...i,
@@ -2063,7 +2069,7 @@ var Q = {
2063
2069
  let i = e.activeQueryIndex, a = [...e.queryStates], o = a[i] || Y();
2064
2070
  if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
2065
2071
  let s = {
2066
- id: p(),
2072
+ id: m(),
2067
2073
  field: t,
2068
2074
  isTimeDimension: n,
2069
2075
  granularity: n ? r || "month" : void 0
@@ -2090,7 +2096,7 @@ var Q = {
2090
2096
  else {
2091
2097
  if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
2092
2098
  let s = {
2093
- id: p(),
2099
+ id: m(),
2094
2100
  field: t,
2095
2101
  isTimeDimension: n,
2096
2102
  granularity: n ? r || "month" : void 0
@@ -2138,7 +2144,7 @@ var Q = {
2138
2144
  member: l.field,
2139
2145
  operator: "inDateRange",
2140
2146
  values: [],
2141
- dateRange: N("last_n_months", 3)
2147
+ dateRange: F("last_n_months", 3)
2142
2148
  };
2143
2149
  s[c] = {
2144
2150
  ...s[c],
@@ -2226,12 +2232,12 @@ var Q = {
2226
2232
  return e.queryStates.length <= 1 ? !1 : e.queryStates.filter((e) => e.metrics.length > 0 || e.breakdowns.length > 0).length > 1;
2227
2233
  },
2228
2234
  buildCurrentQuery: () => {
2229
- let e = t(), n = e.queryStates[e.activeQueryIndex] || Y();
2230
- return Te(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
2235
+ let e = t(), n = e.queryStates[e.activeQueryIndex] || Y(), r = l(e.charts[e.analysisType]?.chartType ?? "");
2236
+ return Ee(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit, r);
2231
2237
  },
2232
2238
  buildAllQueries: () => {
2233
- let e = t(), n = e.queryStates[0]?.breakdowns || [];
2234
- return e.queryStates.map((t, r) => Te(t.metrics, e.mergeStrategy === "merge" && r > 0 ? n : t.breakdowns, t.filters, t.order, !1, t.limit));
2239
+ let e = t(), n = e.queryStates[0]?.breakdowns || [], r = l(e.charts[e.analysisType]?.chartType ?? "");
2240
+ return e.queryStates.map((t, i) => Ee(t.metrics, e.mergeStrategy === "merge" && i > 0 ? n : t.breakdowns, t.filters, t.order, !1, t.limit, r));
2235
2241
  },
2236
2242
  buildMultiQueryConfig: () => {
2237
2243
  let e = t();
@@ -2244,18 +2250,18 @@ var Q = {
2244
2250
  queryLabels: n.map((e, t) => `Q${t + 1}`)
2245
2251
  };
2246
2252
  }
2247
- }), Zt = () => ({
2253
+ }), $t = () => ({
2248
2254
  funnelCube: null,
2249
2255
  funnelSteps: [],
2250
2256
  activeFunnelStepIndex: 0,
2251
2257
  funnelTimeDimension: null,
2252
2258
  funnelBindingKey: null,
2253
2259
  stepTimeToConvert: []
2254
- }), Qt = (e, t, n) => ({
2255
- ...Zt(),
2260
+ }), en = (e, t, n) => ({
2261
+ ...$t(),
2256
2262
  addFunnelStep: () => e((e) => {
2257
2263
  let t = e.funnelSteps[e.funnelSteps.length - 1], n = {
2258
- id: p(),
2264
+ id: m(),
2259
2265
  name: `Step ${e.funnelSteps.length + 1}`,
2260
2266
  cube: e.funnelCube || "",
2261
2267
  filters: t?.filters ? JSON.parse(JSON.stringify(t.filters)) : [],
@@ -2320,7 +2326,7 @@ var Q = {
2320
2326
  let e = t();
2321
2327
  return e.analysisType !== "funnel" || !e.funnelBindingKey || !e.funnelTimeDimension || e.funnelSteps.length < 2 ? !1 : e.funnelSteps.filter((e) => e.cube && e.name).length >= 2;
2322
2328
  }
2323
- }), $t = () => ({
2329
+ }), tn = () => ({
2324
2330
  flowCube: null,
2325
2331
  flowBindingKey: null,
2326
2332
  flowTimeDimension: null,
@@ -2332,8 +2338,8 @@ var Q = {
2332
2338
  stepsAfter: 3,
2333
2339
  eventDimension: null,
2334
2340
  joinStrategy: "auto"
2335
- }), en = (e, t, n) => ({
2336
- ...$t(),
2341
+ }), nn = (e, t, n) => ({
2342
+ ...tn(),
2337
2343
  setFlowCube: (t) => e(() => ({
2338
2344
  flowCube: t,
2339
2345
  flowBindingKey: null,
@@ -2403,8 +2409,8 @@ var Q = {
2403
2409
  joinStrategy: e.joinStrategy
2404
2410
  } };
2405
2411
  }
2406
- }), tn = () => ({ ...O }), nn = (e, t, n) => ({
2407
- ...tn(),
2412
+ }), rn = () => ({ ...k }), an = (e, t, n) => ({
2413
+ ...rn(),
2408
2414
  setRetentionCube: (t) => e(() => ({
2409
2415
  retentionCube: t,
2410
2416
  retentionTimeDimension: null,
@@ -2479,22 +2485,22 @@ var Q = {
2479
2485
  warnings: r
2480
2486
  };
2481
2487
  }
2482
- }), rn = {
2488
+ }), on = {
2483
2489
  isOpen: !1,
2484
2490
  userPrompt: "",
2485
2491
  isGenerating: !1,
2486
2492
  error: null,
2487
2493
  hasGeneratedQuery: !1,
2488
2494
  previousState: null
2489
- }, an = () => ({
2495
+ }, sn = () => ({
2490
2496
  activeTab: "query",
2491
2497
  activeView: "chart",
2492
2498
  displayLimit: 100,
2493
2499
  showFieldModal: !1,
2494
2500
  fieldModalMode: "metrics",
2495
- aiState: rn
2496
- }), on = (e, t, n) => ({
2497
- ...an(),
2501
+ aiState: on
2502
+ }), cn = (e, t, n) => ({
2503
+ ...sn(),
2498
2504
  setActiveTab: (t) => e({ activeTab: t }),
2499
2505
  setActiveView: (t) => e((e) => ({
2500
2506
  activeView: t,
@@ -2578,19 +2584,19 @@ var Q = {
2578
2584
  displayConfig: t.displayConfig
2579
2585
  }
2580
2586
  },
2581
- aiState: { ...rn }
2587
+ aiState: { ...on }
2582
2588
  };
2583
2589
  })
2584
2590
  });
2585
2591
  //#endregion
2586
2592
  //#region src/client/stores/optionsToAnalysisConfig.ts
2587
- function sn(e) {
2593
+ function ln(e) {
2588
2594
  let t = e.filters ? [...e.filters] : [], n = e.timeDimensions || [], r = [...(e.dimensions || []).map((e) => ({
2589
- id: p(),
2595
+ id: m(),
2590
2596
  field: e,
2591
2597
  isTimeDimension: !1
2592
2598
  })), ...n.map((e) => ({
2593
- id: p(),
2599
+ id: m(),
2594
2600
  field: e.dimension,
2595
2601
  granularity: e.granularity,
2596
2602
  isTimeDimension: !0,
@@ -2618,19 +2624,19 @@ function sn(e) {
2618
2624
  return {
2619
2625
  ...Y(),
2620
2626
  metrics: (e.measures || []).map((e, t) => ({
2621
- id: p(),
2627
+ id: m(),
2622
2628
  field: e,
2623
- label: d(t)
2629
+ label: f(t)
2624
2630
  })),
2625
2631
  breakdowns: r,
2626
2632
  filters: i,
2627
2633
  order: e.order
2628
2634
  };
2629
2635
  }
2630
- function cn(e) {
2636
+ function un(e) {
2631
2637
  return "queries" in e && Array.isArray(e.queries);
2632
2638
  }
2633
- function ln(e, t) {
2639
+ function dn(e, t) {
2634
2640
  let n = e.getDefaultChartConfig();
2635
2641
  return {
2636
2642
  chartType: t?.chartType || n.chartType,
@@ -2638,22 +2644,22 @@ function ln(e, t) {
2638
2644
  displayConfig: t?.displayConfig || n.displayConfig
2639
2645
  };
2640
2646
  }
2641
- function un(e) {
2647
+ function fn(e) {
2642
2648
  return e.initialActiveView || "chart";
2643
2649
  }
2644
- function dn(e) {
2645
- let t = ln(_, e.initialChartConfig), n = e.initialFunnelState ?? {};
2646
- return _.save({
2650
+ function pn(e) {
2651
+ let t = dn(v, e.initialChartConfig), n = e.initialFunnelState ?? {};
2652
+ return v.save({
2647
2653
  funnelCube: n.funnelCube ?? null,
2648
2654
  funnelSteps: n.funnelSteps || [],
2649
2655
  activeFunnelStepIndex: 0,
2650
2656
  funnelTimeDimension: n.funnelTimeDimension ?? null,
2651
2657
  funnelBindingKey: n.funnelBindingKey ?? null
2652
- }, { funnel: t }, un(e));
2658
+ }, { funnel: t }, fn(e));
2653
2659
  }
2654
- function fn(e) {
2655
- let t = ln(w, e.initialChartConfig), n = e.initialFlowState ?? {};
2656
- return w.save({
2660
+ function mn(e) {
2661
+ let t = dn(T, e.initialChartConfig), n = e.initialFlowState ?? {};
2662
+ return T.save({
2657
2663
  flowCube: n.flowCube ?? null,
2658
2664
  flowBindingKey: n.flowBindingKey ?? null,
2659
2665
  flowTimeDimension: n.flowTimeDimension ?? null,
@@ -2665,11 +2671,11 @@ function fn(e) {
2665
2671
  stepsAfter: n.stepsAfter ?? 3,
2666
2672
  eventDimension: n.eventDimension ?? null,
2667
2673
  joinStrategy: n.joinStrategy ?? "auto"
2668
- }, { flow: t }, un(e));
2674
+ }, { flow: t }, fn(e));
2669
2675
  }
2670
- function pn(e) {
2671
- let t = ln(b, e.initialChartConfig), n = e.initialRetentionState ?? {}, r = k(ee);
2672
- return b.save({
2676
+ function hn(e) {
2677
+ let t = dn(x, e.initialChartConfig), n = e.initialRetentionState ?? {}, r = ee(A);
2678
+ return x.save({
2673
2679
  retentionCube: n.retentionCube ?? null,
2674
2680
  retentionBindingKey: n.retentionBindingKey ?? null,
2675
2681
  retentionTimeDimension: n.retentionTimeDimension ?? null,
@@ -2680,52 +2686,52 @@ function pn(e) {
2680
2686
  retentionViewGranularity: n.retentionViewGranularity ?? "week",
2681
2687
  retentionPeriods: n.retentionPeriods ?? 12,
2682
2688
  retentionType: n.retentionType ?? "classic"
2683
- }, { retention: t }, un(e));
2689
+ }, { retention: t }, fn(e));
2684
2690
  }
2685
- function mn(e, t) {
2691
+ function gn(e, t) {
2686
2692
  let n, r = "concat";
2687
- cn(t) ? (n = t.queries.map(sn), t.mergeStrategy && (r = t.mergeStrategy)) : n = [sn(t)];
2688
- let i = ln(X, e.initialChartConfig);
2693
+ un(t) ? (n = t.queries.map(ln), t.mergeStrategy && (r = t.mergeStrategy)) : n = [ln(t)];
2694
+ let i = dn(X, e.initialChartConfig);
2689
2695
  return X.save({
2690
2696
  queryStates: n,
2691
2697
  activeQueryIndex: 0,
2692
2698
  mergeStrategy: r
2693
- }, { query: i }, un(e));
2699
+ }, { query: i }, fn(e));
2694
2700
  }
2695
- function hn(e) {
2696
- let t = ln(X, e.initialChartConfig);
2701
+ function _n(e) {
2702
+ let t = dn(X, e.initialChartConfig);
2697
2703
  return X.save({
2698
2704
  queryStates: [Y()],
2699
2705
  activeQueryIndex: 0,
2700
2706
  mergeStrategy: "concat"
2701
- }, { query: t }, un(e));
2707
+ }, { query: t }, fn(e));
2702
2708
  }
2703
- function gn(e) {
2709
+ function vn(e) {
2704
2710
  return X.save({
2705
2711
  queryStates: [Y()],
2706
2712
  activeQueryIndex: 0,
2707
2713
  mergeStrategy: "concat"
2708
2714
  }, { query: X.getDefaultChartConfig() }, e.initialActiveView);
2709
2715
  }
2710
- function _n(e) {
2711
- 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;
2716
+ function yn(e) {
2717
+ return e.initialAnalysisType === "funnel" && e.initialFunnelState ? pn(e) : e.initialAnalysisType === "flow" && e.initialFlowState ? mn(e) : e.initialAnalysisType === "retention" && e.initialRetentionState ? hn(e) : e.initialQuery ? gn(e, e.initialQuery) : e.initialChartConfig ? _n(e) : e.initialActiveView ? vn(e) : null;
2712
2718
  }
2713
2719
  //#endregion
2714
2720
  //#region src/client/stores/analysisBuilderStore.tsx
2715
- function vn(e, t) {
2721
+ function bn(e, t) {
2716
2722
  return {
2717
2723
  reset: () => {
2718
2724
  e({
2719
- ...qt(),
2720
2725
  ...Yt(),
2721
2726
  ...Zt(),
2722
2727
  ...$t(),
2723
2728
  ...tn(),
2729
+ ...rn(),
2724
2730
  charts: {
2725
2731
  query: X.getDefaultChartConfig(),
2726
- funnel: _.getDefaultChartConfig(),
2727
- flow: w.getDefaultChartConfig(),
2728
- retention: b.getDefaultChartConfig()
2732
+ funnel: v.getDefaultChartConfig(),
2733
+ flow: T.getDefaultChartConfig(),
2734
+ retention: x.getDefaultChartConfig()
2729
2735
  },
2730
2736
  activeViews: {
2731
2737
  query: "chart",
@@ -2738,28 +2744,28 @@ function vn(e, t) {
2738
2744
  clearCurrentMode: () => e((e) => {
2739
2745
  switch (e.analysisType) {
2740
2746
  case "funnel": return {
2741
- ...Zt(),
2747
+ ...$t(),
2742
2748
  charts: {
2743
2749
  ...e.charts,
2744
- funnel: _.getDefaultChartConfig()
2750
+ funnel: v.getDefaultChartConfig()
2745
2751
  }
2746
2752
  };
2747
2753
  case "flow": return {
2748
- ...$t(),
2754
+ ...tn(),
2749
2755
  charts: {
2750
2756
  ...e.charts,
2751
- flow: w.getDefaultChartConfig()
2757
+ flow: T.getDefaultChartConfig()
2752
2758
  }
2753
2759
  };
2754
2760
  case "retention": return {
2755
- ...tn(),
2761
+ ...rn(),
2756
2762
  charts: {
2757
2763
  ...e.charts,
2758
- retention: b.getDefaultChartConfig()
2764
+ retention: x.getDefaultChartConfig()
2759
2765
  }
2760
2766
  };
2761
2767
  default: return {
2762
- ...Yt(),
2768
+ ...Zt(),
2763
2769
  userManuallySelectedChart: !1,
2764
2770
  charts: {
2765
2771
  ...e.charts,
@@ -2785,15 +2791,15 @@ function vn(e, t) {
2785
2791
  }
2786
2792
  };
2787
2793
  }
2788
- function yn(n = {}) {
2789
- let r = _n(n), o = (e, t, n) => ({
2790
- ...Jt(e, t, n),
2794
+ function xn(n = {}) {
2795
+ let r = yn(n), o = (e, t, n) => ({
2791
2796
  ...Xt(e, t, n),
2792
2797
  ...Qt(e, t, n),
2793
2798
  ...en(e, t, n),
2794
2799
  ...nn(e, t, n),
2795
- ...on(e, t, n),
2796
- ...vn(e, t)
2800
+ ...an(e, t, n),
2801
+ ...cn(e, t, n),
2802
+ ...bn(e, t)
2797
2803
  });
2798
2804
  if (n.disableLocalStorage) {
2799
2805
  let t = a()(i(e(o), { name: "AnalysisBuilderStore (no-persist)" }));
@@ -2802,10 +2808,10 @@ function yn(n = {}) {
2802
2808
  return a()(i(e(t(o, {
2803
2809
  name: n.storageKey || "drizzle-cube-analysis-builder-v3",
2804
2810
  partialize: (e) => e.saveWorkspace(),
2805
- merge: (e, t) => e && g(e) ? {
2811
+ merge: (e, t) => e && _(e) ? {
2806
2812
  ...t,
2807
2813
  _persistedWorkspace: e
2808
- } : e && D(e) ? {
2814
+ } : e && O(e) ? {
2809
2815
  ...t,
2810
2816
  _persistedConfig: e
2811
2817
  } : r ? {
@@ -2828,10 +2834,10 @@ function yn(n = {}) {
2828
2834
  }
2829
2835
  })), { name: "AnalysisBuilderStore" }));
2830
2836
  }
2831
- var bn = ge(null);
2832
- function xn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalStorage: r, storageKey: i, initialAnalysisType: a, initialFunnelState: o, initialFlowState: s, initialRetentionState: c, initialActiveView: l }) {
2833
- let u = W(null);
2834
- return u.current ||= yn({
2837
+ var Sn = ve(null);
2838
+ function Cn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalStorage: r, storageKey: i, initialAnalysisType: a, initialFunnelState: o, initialFlowState: s, initialRetentionState: c, initialActiveView: l }) {
2839
+ let u = U(null);
2840
+ return u.current ||= xn({
2835
2841
  initialQuery: t,
2836
2842
  initialChartConfig: n,
2837
2843
  disableLocalStorage: r,
@@ -2841,22 +2847,22 @@ function xn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalS
2841
2847
  initialFlowState: s,
2842
2848
  initialRetentionState: c,
2843
2849
  initialActiveView: l
2844
- }), /* @__PURE__ */ q(bn.Provider, {
2850
+ }), /* @__PURE__ */ K(Sn.Provider, {
2845
2851
  value: u.current,
2846
2852
  children: e
2847
2853
  });
2848
2854
  }
2849
2855
  function $(e) {
2850
- let t = ve(bn);
2856
+ let t = be(Sn);
2851
2857
  if (!t) throw Error("useAnalysisBuilderStore must be used within AnalysisBuilderStoreProvider");
2852
2858
  return r(t, e);
2853
2859
  }
2854
- function Sn() {
2855
- let e = ve(bn);
2860
+ function wn() {
2861
+ let e = be(Sn);
2856
2862
  if (!e) throw Error("useAnalysisBuilderStoreApi must be used within AnalysisBuilderStoreProvider");
2857
2863
  return e;
2858
2864
  }
2859
- 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) => {
2865
+ var Tn = (e) => e.queryStates[e.activeQueryIndex] || Y(), En = (e) => Tn(e).metrics, Dn = (e) => Tn(e).breakdowns, On = (e) => Tn(e).filters, kn = (e) => {
2860
2866
  let t = e.charts[e.analysisType];
2861
2867
  return t ? {
2862
2868
  chartType: t.chartType,
@@ -2871,18 +2877,18 @@ var Cn = (e) => e.queryStates[e.activeQueryIndex] || Y(), wn = (e) => Cn(e).metr
2871
2877
  showTooltip: !0
2872
2878
  }
2873
2879
  };
2874
- }, On = (e) => ({
2880
+ }, An = (e) => ({
2875
2881
  activeTab: e.activeTab,
2876
2882
  activeView: e.activeView,
2877
2883
  displayLimit: e.displayLimit,
2878
2884
  showFieldModal: e.showFieldModal,
2879
2885
  fieldModalMode: e.fieldModalMode
2880
- }), kn = (e) => ({
2886
+ }), jn = (e) => ({
2881
2887
  queryStates: e.queryStates,
2882
2888
  activeQueryIndex: e.activeQueryIndex,
2883
2889
  mergeStrategy: e.mergeStrategy,
2884
2890
  isMultiQueryMode: e.analysisType === "query" && e.queryStates.length > 1
2885
- }), An = (e) => ({
2891
+ }), Mn = (e) => ({
2886
2892
  funnelCube: e.funnelCube,
2887
2893
  funnelSteps: e.funnelSteps,
2888
2894
  activeFunnelStepIndex: e.activeFunnelStepIndex,
@@ -2893,16 +2899,16 @@ var Cn = (e) => e.queryStates[e.activeQueryIndex] || Y(), wn = (e) => Cn(e).metr
2893
2899
  });
2894
2900
  //#endregion
2895
2901
  //#region src/client/utils/multiQueryValidation.ts
2896
- function jn(e) {
2902
+ function Nn(e) {
2897
2903
  return e.timeDimensions || [];
2898
2904
  }
2899
- function Mn(e) {
2905
+ function Pn(e) {
2900
2906
  let t = [];
2901
2907
  if (e.length < 2) return t;
2902
- let n = jn(e[0]);
2908
+ let n = Nn(e[0]);
2903
2909
  if (n.length === 0) return t;
2904
2910
  for (let r = 1; r < e.length; r++) {
2905
- let i = jn(e[r]);
2911
+ let i = Nn(e[r]);
2906
2912
  if (i.length === 0 && n.length > 0) {
2907
2913
  t.push({
2908
2914
  type: "missing_time_dimension",
@@ -2928,7 +2934,7 @@ function Mn(e) {
2928
2934
  }
2929
2935
  return t;
2930
2936
  }
2931
- function Nn(e, t) {
2937
+ function Fn(e, t) {
2932
2938
  let n = [];
2933
2939
  if (e.length < 2 || t.length === 0) return n;
2934
2940
  for (let r = 0; r < e.length; r++) {
@@ -2942,7 +2948,7 @@ function Nn(e, t) {
2942
2948
  }
2943
2949
  return n;
2944
2950
  }
2945
- function Pn(e) {
2951
+ function In(e) {
2946
2952
  let t = [];
2947
2953
  if (e.length < 2) return t;
2948
2954
  let n = /* @__PURE__ */ new Map();
@@ -2961,7 +2967,7 @@ function Pn(e) {
2961
2967
  affectedMeasures: r
2962
2968
  }), t;
2963
2969
  }
2964
- function Fn(e) {
2970
+ function Ln(e) {
2965
2971
  let t = [];
2966
2972
  if (e.length < 2) return t;
2967
2973
  let n = e.map((e) => e.timeDimensions?.[0]?.dateRange);
@@ -2971,66 +2977,71 @@ function Fn(e) {
2971
2977
  message: "Queries have different date ranges - some data points may be missing in merged results"
2972
2978
  }), t;
2973
2979
  }
2974
- function In(e, t, n = []) {
2980
+ function Rn(e, t, n = []) {
2975
2981
  let r = [], i = [];
2976
2982
  return e.length < 2 ? {
2977
2983
  isValid: !0,
2978
2984
  errors: r,
2979
2985
  warnings: i
2980
- } : (i.push(...Pn(e)), i.push(...Fn(e)), t === "merge" && (r.push(...Mn(e)), n.length > 0 && r.push(...Nn(e, n))), {
2986
+ } : (i.push(...In(e)), i.push(...Ln(e)), t === "merge" && (r.push(...Pn(e)), n.length > 0 && r.push(...Fn(e, n))), {
2981
2987
  isValid: r.length === 0,
2982
2988
  errors: r,
2983
2989
  warnings: i
2984
2990
  });
2985
2991
  }
2986
- function Ln(e) {
2992
+ function zn(e) {
2987
2993
  return (e.measures?.length || 0) + (e.dimensions?.length || 0) + (e.timeDimensions?.length || 0);
2988
2994
  }
2989
- function Rn(e) {
2990
- return e.filter((e) => Ln(e) > 0).length >= 2;
2995
+ function Bn(e) {
2996
+ return e.filter((e) => zn(e) > 0).length >= 2;
2991
2997
  }
2992
- function zn(e, t) {
2998
+ function Vn(e, t) {
2993
2999
  return `${e} ${t}${e === 1 ? "" : "s"}`;
2994
3000
  }
2995
- function Bn(e) {
3001
+ function Hn(e) {
2996
3002
  if (e.isValid && e.warnings.length === 0) return "Configuration is valid";
2997
3003
  let t = [];
2998
- 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(", ");
3004
+ return e.errors.length > 0 && t.push(Vn(e.errors.length, "error")), e.warnings.length > 0 && t.push(Vn(e.warnings.length, "warning")), t.join(", ");
2999
3005
  }
3000
3006
  //#endregion
3001
3007
  //#region src/client/hooks/useAnalysisState.ts
3002
- function Vn(e = {}) {
3003
- 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(() => {
3004
- let e = i[a] || h;
3005
- return Te(e.metrics, e.breakdowns, e.filters, e.order, !1, e.limit);
3008
+ function Un(e = {}) {
3009
+ let { externalColorPalette: t } = e, r = wn(), i = $((e) => e.queryStates), a = $((e) => e.activeQueryIndex), o = $((e) => e.mergeStrategy), s = $((e) => e.setActiveQueryIndex), c = $((e) => e.setMergeStrategy), u = $((e) => e.addQuery), d = $((e) => e.removeQuery), f = $((e) => e.getCurrentState), m = $((e) => e.getMergeKeys), h = $((e) => e.isMultiQueryMode), g = f(), _ = h(), v = m(), y = $((e) => l(e.charts[e.analysisType]?.chartType ?? "")), b = H(() => {
3010
+ let e = i[a] || g;
3011
+ return Ee(e.metrics, e.breakdowns, e.filters, e.order, !1, e.limit, y);
3006
3012
  }, [
3007
3013
  i,
3008
3014
  a,
3009
- h
3010
- ]), y = U(() => {
3015
+ g,
3016
+ y
3017
+ ]), x = H(() => {
3011
3018
  let e = i[0]?.breakdowns || [];
3012
- return i.map((t, n) => Te(t.metrics, o === "merge" && n > 0 ? e : t.breakdowns, t.filters, t.order, !1, t.limit));
3013
- }, [i, o]), b = U(() => {
3019
+ return i.map((t, n) => Ee(t.metrics, o === "merge" && n > 0 ? e : t.breakdowns, t.filters, t.order, !1, t.limit, y));
3020
+ }, [
3021
+ i,
3022
+ o,
3023
+ y
3024
+ ]), S = H(() => {
3014
3025
  if (i.length <= 1) return null;
3015
- let e = y.filter((e) => e.measures && e.measures.length > 0 || e.dimensions && e.dimensions.length > 0 || e.timeDimensions && e.timeDimensions.length > 0);
3026
+ let e = x.filter((e) => e.measures && e.measures.length > 0 || e.dimensions && e.dimensions.length > 0 || e.timeDimensions && e.timeDimensions.length > 0);
3016
3027
  return e.length < 2 ? null : {
3017
3028
  queries: e,
3018
3029
  mergeStrategy: o,
3019
- mergeKeys: _,
3030
+ mergeKeys: v,
3020
3031
  queryLabels: e.map((e, t) => `Q${t + 1}`)
3021
3032
  };
3022
3033
  }, [
3023
- y,
3034
+ x,
3024
3035
  i.length,
3025
3036
  o,
3026
- _
3027
- ]), x = U(() => g ? In(y, o, _ || []) : null, [
3028
- g,
3029
- y,
3037
+ v
3038
+ ]), C = H(() => _ ? Rn(x, o, v || []) : null, [
3039
+ _,
3040
+ x,
3030
3041
  o,
3031
- _
3032
- ]), S = U(() => v.measures && v.measures.length > 0 || v.dimensions && v.dimensions.length > 0 || v.timeDimensions && v.timeDimensions.length > 0, [v]), C = U(() => {
3033
- if (!g) return h.metrics;
3042
+ v
3043
+ ]), w = H(() => b.measures && b.measures.length > 0 || b.dimensions && b.dimensions.length > 0 || b.timeDimensions && b.timeDimensions.length > 0, [b]), T = H(() => {
3044
+ if (!_) return g.metrics;
3034
3045
  let e = /* @__PURE__ */ new Set(), t = [];
3035
3046
  for (let n = 0; n < i.length; n++) {
3036
3047
  let r = i[n];
@@ -3044,110 +3055,110 @@ function Vn(e = {}) {
3044
3055
  }
3045
3056
  return t;
3046
3057
  }, [
3047
- g,
3058
+ _,
3048
3059
  i,
3049
- h.metrics
3050
- ]), w = U(() => {
3051
- if (!g) return h.breakdowns;
3060
+ g.metrics
3061
+ ]), E = H(() => {
3062
+ if (!_) return g.breakdowns;
3052
3063
  let e = /* @__PURE__ */ new Set(), t = [];
3053
3064
  for (let n of i) for (let r of n.breakdowns) e.has(r.field) || (e.add(r.field), t.push(r));
3054
3065
  return t;
3055
3066
  }, [
3056
- g,
3067
+ _,
3057
3068
  i,
3058
- h.breakdowns
3059
- ]), T = U(() => o === "merge" && a > 0 ? i[0]?.breakdowns || [] : h.breakdowns, [
3069
+ g.breakdowns
3070
+ ]), D = H(() => o === "merge" && a > 0 ? i[0]?.breakdowns || [] : g.breakdowns, [
3060
3071
  o,
3061
3072
  a,
3062
3073
  i,
3063
- h.breakdowns
3064
- ]), 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), [
3065
- E,
3066
- D,
3067
- A,
3068
- k
3069
- ]), 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 || {
3074
+ g.breakdowns
3075
+ ]), O = $((e) => e.analysisType), k = $((e) => e.funnelBindingKey), ee = $((e) => e.funnelCube), A = $((e) => e.funnelSteps), te = $((e) => e.activeFunnelStepIndex), j = $((e) => e.funnelTimeDimension), M = H(() => O !== "funnel" || !k?.dimension || !j || !A || A.length < 2 ? !1 : A.every((e) => e.filters.length > 0), [
3076
+ O,
3077
+ k,
3078
+ j,
3079
+ A
3080
+ ]), ne = $((e) => e.charts.funnel?.chartType) || "funnel", N = $((e) => e.charts.funnel?.chartConfig), re = H(() => N || {}, [N]), ie = $((e) => e.charts.funnel?.displayConfig), ae = H(() => ie || {
3070
3081
  showLegend: !0,
3071
3082
  showGrid: !0,
3072
3083
  showTooltip: !0
3073
- }, [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 || {
3084
+ }, [ie]), P = $((e) => e.flowCube), F = $((e) => e.flowBindingKey), oe = $((e) => e.flowTimeDimension), se = $((e) => e.eventDimension), I = $((e) => e.startingStep), L = $((e) => e.stepsBefore), ce = $((e) => e.stepsAfter), le = $((e) => e.joinStrategy), ue = $((e) => e.charts.flow?.displayConfig), de = H(() => ue || {
3074
3085
  showLegend: !0,
3075
3086
  showGrid: !0,
3076
3087
  showTooltip: !0
3077
- }, [ce]), ue = $((e) => e.charts.flow?.chartType) || "sankey", R = $((e) => e.buildFunnelQueryFromSteps), de = U(() => E === "funnel" ? R() : null, [
3078
- E,
3088
+ }, [ue]), fe = $((e) => e.charts.flow?.chartType) || "sankey", R = $((e) => e.buildFunnelQueryFromSteps), pe = H(() => O === "funnel" ? R() : null, [
3089
+ O,
3079
3090
  R,
3080
- k
3081
- ]), z = $((e) => e.buildFlowQuery), fe = U(() => E === "flow" ? z() : null, [
3082
- E,
3083
- z,
3084
- ae,
3085
- oe,
3086
- N,
3091
+ A
3092
+ ]), me = $((e) => e.buildFlowQuery), he = H(() => O === "flow" ? me() : null, [
3093
+ O,
3094
+ me,
3087
3095
  P,
3088
- se,
3089
3096
  F,
3097
+ oe,
3098
+ se,
3090
3099
  I,
3091
- ue,
3092
- L
3093
- ]), 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, [
3094
- E,
3100
+ L,
3101
+ ce,
3102
+ fe,
3103
+ le
3104
+ ]), ge = $((e) => e.retentionCube), _e = $((e) => e.retentionBindingKey), z = $((e) => e.retentionTimeDimension), ve = $((e) => e.retentionDateRange), ye = $((e) => e.retentionCohortFilters), be = $((e) => e.retentionActivityFilters), V = $((e) => e.retentionBreakdowns), U = $((e) => e.retentionViewGranularity), G = $((e) => e.retentionPeriods), K = $((e) => e.retentionType), q = $((e) => e.buildRetentionQuery), xe = $((e) => e.getRetentionValidation), Se = $((e) => e.charts.retention?.displayConfig), J = H(() => O === "retention" ? q() : null, [
3105
+ O,
3095
3106
  q,
3096
- pe,
3097
- me,
3098
- he,
3099
- B,
3107
+ ge,
3108
+ _e,
3109
+ z,
3100
3110
  ve,
3101
- H,
3102
- W,
3111
+ V,
3112
+ U,
3113
+ G,
3103
3114
  K,
3115
+ ye,
3116
+ be
3117
+ ]), Ce = H(() => O === "retention" ? xe() : null, [
3118
+ O,
3119
+ xe,
3104
3120
  ge,
3105
- _e
3106
- ]), xe = U(() => E === "retention" ? J() : null, [
3107
- E,
3121
+ _e,
3122
+ z,
3123
+ ve
3124
+ ]), we = H(() => O === "retention" ? J !== null : O === "flow" ? he !== null : O === "funnel" ? pe !== null : w ?? !1, [
3125
+ O,
3108
3126
  J,
3109
- pe,
3110
- me,
3111
3127
  he,
3112
- B
3113
- ]), Se = U(() => E === "retention" ? be !== null : E === "flow" ? fe !== null : E === "funnel" ? de !== null : S ?? !1, [
3114
- E,
3115
- be,
3116
- fe,
3117
- de,
3118
- S
3119
- ]), { 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) => {
3120
- if (E === "funnel") je(e);
3128
+ pe,
3129
+ w
3130
+ ]), { chartType: Te, chartConfig: Y, displayConfig: De } = $(n(kn)), Oe = $((e) => e.userManuallySelectedChart), ke = $((e) => e.localPaletteName), Ae = $((e) => e.setChartTypeManual), je = $((e) => e.setChartConfig), Me = $((e) => e.setDisplayConfig), Ne = $((e) => e.setFunnelChartType), Pe = $((e) => e.setFunnelChartConfig), Fe = $((e) => e.setFunnelDisplayConfig), Ie = $((e) => e.setLocalPaletteName), Le = $((e) => e.setUserManuallySelectedChart), Re = B((e) => {
3131
+ if (O === "funnel") Ne(e);
3121
3132
  else {
3122
- Oe(e);
3123
- let { chartConfig: t } = kt(C, w, e);
3124
- ke(t);
3133
+ Ae(e);
3134
+ let { chartConfig: t } = jt(T, E, e);
3135
+ je(t);
3125
3136
  }
3126
3137
  }, [
3138
+ O,
3139
+ T,
3127
3140
  E,
3128
- C,
3129
- w,
3130
- je,
3131
- Oe,
3132
- ke
3133
- ]), Le = V((e) => {
3134
- E === "funnel" ? Me(e) : ke(e);
3141
+ Ne,
3142
+ Ae,
3143
+ je
3144
+ ]), ze = B((e) => {
3145
+ O === "funnel" ? Pe(e) : je(e);
3135
3146
  }, [
3136
- E,
3137
- Me,
3138
- ke
3139
- ]), Re = V((e) => {
3140
- E === "funnel" ? Ne(e) : Ae(e);
3147
+ O,
3148
+ Pe,
3149
+ je
3150
+ ]), Be = B((e) => {
3151
+ O === "funnel" ? Fe(e) : Me(e);
3141
3152
  }, [
3142
- E,
3143
- Ne,
3144
- Ae
3145
- ]), ze = U(() => Dt(C, w), [C, w]), Be = U(() => t ? Array.isArray(t) && typeof t[0] == "string" ? {
3153
+ O,
3154
+ Fe,
3155
+ Me
3156
+ ]), Ve = H(() => kt(T, E), [T, E]), He = H(() => t ? Array.isArray(t) && typeof t[0] == "string" ? {
3146
3157
  name: "custom",
3147
3158
  label: "Custom",
3148
3159
  colors: t,
3149
3160
  gradient: t
3150
- } : t : f(De), [t, De]), Ve = V((e) => {
3161
+ } : t : p(ke), [t, ke]), Ue = B((e) => {
3151
3162
  r.setState((t) => ({ charts: {
3152
3163
  ...t.charts,
3153
3164
  flow: {
@@ -3159,7 +3170,7 @@ function Vn(e = {}) {
3159
3170
  displayConfig: e
3160
3171
  }
3161
3172
  } }));
3162
- }, [r]), He = V((e) => {
3173
+ }, [r]), We = B((e) => {
3163
3174
  r.setState((t) => ({ charts: {
3164
3175
  ...t.charts,
3165
3176
  retention: {
@@ -3171,101 +3182,101 @@ function Vn(e = {}) {
3171
3182
  displayConfig: e
3172
3183
  }
3173
3184
  } }));
3174
- }, [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(), [
3175
- qt,
3185
+ }, [r]), Ge = $((e) => e.activeTab), Ke = $((e) => e.activeView), qe = $((e) => e.displayLimit), Je = $((e) => e.showFieldModal), Ye = $((e) => e.fieldModalMode), Xe = $((e) => e.setActiveTab), Ze = $((e) => e.setActiveView), Qe = $((e) => e.setDisplayLimit), $e = $((e) => e.closeFieldModal), [et, tt] = W(0), nt = $((e) => e.openMetricsModal), rt = $((e) => e.addMetric), it = $((e) => e.removeMetric), at = $((e) => e.toggleMetric), ot = $((e) => e.reorderMetrics), st = $((e) => e.openBreakdownsModal), ct = $((e) => e.addBreakdown), lt = $((e) => e.removeBreakdown), ut = $((e) => e.toggleBreakdown), dt = $((e) => e.setBreakdownGranularity), ft = $((e) => e.toggleBreakdownComparison), pt = $((e) => e.reorderBreakdowns), mt = $((e) => e.setFilters), ht = $((e) => e.dropFieldToFilter), gt = $((e) => e.setOrder), _t = $((e) => e.setLimit), vt = $((e) => e.clearQuery), yt = $((e) => e.clearCurrentMode), bt = $((e) => e.setFunnelBindingKey), xt = $((e) => e.setAnalysisType), St = $((e) => e.setFunnelCube), Ct = $((e) => e.addFunnelStep), wt = $((e) => e.removeFunnelStep), Tt = $((e) => e.updateFunnelStep), Et = $((e) => e.setActiveFunnelStepIndex), Dt = $((e) => e.reorderFunnelSteps), Ot = $((e) => e.setFunnelTimeDimension), At = $((e) => e.setFlowCube), Mt = $((e) => e.setFlowBindingKey), Nt = $((e) => e.setFlowTimeDimension), Pt = $((e) => e.setEventDimension), Ft = $((e) => e.setStartingStepName), It = $((e) => e.setStartingStepFilters), Lt = $((e) => e.setStepsBefore), Rt = $((e) => e.setStepsAfter), zt = $((e) => e.setJoinStrategy), Bt = $((e) => e.setRetentionCube), Vt = $((e) => e.setRetentionBindingKey), Ht = $((e) => e.setRetentionTimeDimension), Ut = $((e) => e.setRetentionDateRange), Wt = $((e) => e.setRetentionCohortFilters), Gt = $((e) => e.setRetentionActivityFilters), Kt = $((e) => e.setRetentionBreakdowns), X = $((e) => e.addRetentionBreakdown), Z = $((e) => e.removeRetentionBreakdown), qt = $((e) => e.setRetentionViewGranularity), Jt = $((e) => e.setRetentionPeriods), Q = $((e) => e.setRetentionType), Yt = $((e) => e.getValidation), Xt = H(() => Yt(), [
3186
+ Yt,
3176
3187
  i,
3177
- E,
3178
- k,
3179
- D,
3188
+ O,
3180
3189
  A,
3181
- ae,
3182
- oe,
3183
- N,
3190
+ k,
3191
+ j,
3184
3192
  P,
3185
- se,
3186
3193
  F,
3194
+ oe,
3195
+ se,
3187
3196
  I,
3188
- L
3189
- ]), Yt = V((e, t) => {
3190
- E === "retention" && t === "dimension" ? X({ field: e.name }) : ct(e.name, t === "timeDimension");
3197
+ L,
3198
+ ce,
3199
+ le
3200
+ ]), Zt = B((e, t) => {
3201
+ O === "retention" && t === "dimension" ? X({ field: e.name }) : ut(e.name, t === "timeDimension");
3191
3202
  }, [
3192
- E,
3203
+ O,
3193
3204
  X,
3194
- ct
3195
- ]), Xt = V((e, t, n, r) => {
3196
- qe === "metrics" && t === "measure" ? rt(e.name) : qe === "breakdown" && Yt(e, t), r || Ze();
3205
+ ut
3206
+ ]), Qt = B((e, t, n, r) => {
3207
+ Ye === "metrics" && t === "measure" ? at(e.name) : Ye === "breakdown" && Zt(e, t), r || $e();
3197
3208
  }, [
3198
- qe,
3199
- rt,
3200
- Yt,
3201
- Ze
3209
+ Ye,
3210
+ at,
3211
+ Zt,
3212
+ $e
3202
3213
  ]);
3203
3214
  return {
3204
3215
  storeApi: r,
3205
- queryState: h,
3216
+ queryState: g,
3206
3217
  queryStates: i,
3207
3218
  activeQueryIndex: a,
3208
3219
  mergeStrategy: o,
3209
- isMultiQueryMode: g,
3210
- mergeKeys: _,
3211
- currentQuery: v,
3212
- allQueries: y,
3213
- multiQueryConfig: b,
3214
- multiQueryValidation: x,
3215
- isValidQuery: S,
3216
- effectiveIsValidQuery: Se,
3217
- combinedMetrics: C,
3218
- combinedBreakdowns: w,
3219
- effectiveBreakdowns: T,
3220
- analysisType: E,
3221
- funnelBindingKey: D,
3222
- isFunnelModeEnabled: te,
3223
- funnelCube: O,
3224
- funnelSteps: k,
3225
- activeFunnelStepIndex: ee,
3226
- funnelTimeDimension: A,
3220
+ isMultiQueryMode: _,
3221
+ mergeKeys: v,
3222
+ currentQuery: b,
3223
+ allQueries: x,
3224
+ multiQueryConfig: S,
3225
+ multiQueryValidation: C,
3226
+ isValidQuery: w,
3227
+ effectiveIsValidQuery: we,
3228
+ combinedMetrics: T,
3229
+ combinedBreakdowns: E,
3230
+ effectiveBreakdowns: D,
3231
+ analysisType: O,
3232
+ funnelBindingKey: k,
3233
+ isFunnelModeEnabled: M,
3234
+ funnelCube: ee,
3235
+ funnelSteps: A,
3236
+ activeFunnelStepIndex: te,
3237
+ funnelTimeDimension: j,
3227
3238
  funnelChartType: ne,
3228
3239
  funnelChartConfig: re,
3229
- funnelDisplayConfig: ie,
3230
- serverFunnelQuery: de,
3231
- flowCube: ae,
3232
- flowBindingKey: oe,
3233
- flowTimeDimension: N,
3234
- eventDimension: P,
3235
- startingStep: se,
3236
- stepsBefore: F,
3237
- stepsAfter: I,
3238
- joinStrategy: L,
3239
- flowDisplayConfig: le,
3240
- serverFlowQuery: fe,
3241
- retentionCube: pe,
3242
- retentionBindingKey: me,
3243
- retentionTimeDimension: he,
3244
- retentionDateRange: B,
3245
- retentionCohortFilters: ge,
3246
- retentionActivityFilters: _e,
3247
- retentionBreakdowns: ve,
3248
- retentionViewGranularity: H,
3249
- retentionPeriods: W,
3240
+ funnelDisplayConfig: ae,
3241
+ serverFunnelQuery: pe,
3242
+ flowCube: P,
3243
+ flowBindingKey: F,
3244
+ flowTimeDimension: oe,
3245
+ eventDimension: se,
3246
+ startingStep: I,
3247
+ stepsBefore: L,
3248
+ stepsAfter: ce,
3249
+ joinStrategy: le,
3250
+ flowDisplayConfig: de,
3251
+ serverFlowQuery: he,
3252
+ retentionCube: ge,
3253
+ retentionBindingKey: _e,
3254
+ retentionTimeDimension: z,
3255
+ retentionDateRange: ve,
3256
+ retentionCohortFilters: ye,
3257
+ retentionActivityFilters: be,
3258
+ retentionBreakdowns: V,
3259
+ retentionViewGranularity: U,
3260
+ retentionPeriods: G,
3250
3261
  retentionType: K,
3251
- retentionDisplayConfig: ye,
3252
- serverRetentionQuery: be,
3253
- retentionValidation: xe,
3254
- chartType: Ce,
3255
- chartConfig: we,
3256
- displayConfig: Y,
3257
- colorPalette: Be,
3258
- localPaletteName: De,
3259
- chartAvailability: ze,
3260
- userManuallySelectedChart: Ee,
3261
- activeTab: Ue,
3262
- activeView: We,
3263
- displayLimit: Ge,
3264
- showFieldModal: Ke,
3265
- fieldModalMode: qe,
3266
- activeTableIndex: Qe,
3267
- adapterValidation: Jt,
3268
- getQueryConfig: V(() => {
3262
+ retentionDisplayConfig: Se,
3263
+ serverRetentionQuery: J,
3264
+ retentionValidation: Ce,
3265
+ chartType: Te,
3266
+ chartConfig: Y,
3267
+ displayConfig: De,
3268
+ colorPalette: He,
3269
+ localPaletteName: ke,
3270
+ chartAvailability: Ve,
3271
+ userManuallySelectedChart: Oe,
3272
+ activeTab: Ge,
3273
+ activeView: Ke,
3274
+ displayLimit: qe,
3275
+ showFieldModal: Je,
3276
+ fieldModalMode: Ye,
3277
+ activeTableIndex: et,
3278
+ adapterValidation: Xt,
3279
+ getQueryConfig: B(() => {
3269
3280
  let e = r.getState();
3270
3281
  return e.analysisType === "funnel" ? e.buildFunnelQueryFromSteps() || e.buildCurrentQuery() : e.queryStates.length > 1 ? {
3271
3282
  queries: e.buildAllQueries(),
@@ -3276,103 +3287,103 @@ function Vn(e = {}) {
3276
3287
  stepTimeToConvert: e.stepTimeToConvert
3277
3288
  } : e.buildCurrentQuery();
3278
3289
  }, [r]),
3279
- getChartConfig: V(() => {
3290
+ getChartConfig: B(() => {
3280
3291
  let e = r.getState(), t = e.charts[e.analysisType];
3281
3292
  return t ? {
3282
3293
  chartType: t.chartType,
3283
3294
  chartConfig: t.chartConfig,
3284
3295
  displayConfig: t.displayConfig
3285
3296
  } : {
3286
- chartType: Ce,
3287
- chartConfig: we,
3288
- displayConfig: Y
3297
+ chartType: Te,
3298
+ chartConfig: Y,
3299
+ displayConfig: De
3289
3300
  };
3290
3301
  }, [
3291
3302
  r,
3292
- Ce,
3293
- we,
3294
- Y
3303
+ Te,
3304
+ Y,
3305
+ De
3295
3306
  ]),
3296
- getAnalysisType: V(() => r.getState().analysisType, [r]),
3307
+ getAnalysisType: B(() => r.getState().analysisType, [r]),
3297
3308
  actions: {
3298
3309
  setActiveQueryIndex: s,
3299
3310
  setMergeStrategy: c,
3300
- addQuery: l,
3301
- removeQuery: u,
3302
- openMetricsModal: et,
3303
- addMetric: tt,
3304
- removeMetric: nt,
3305
- toggleMetric: rt,
3306
- reorderMetrics: it,
3307
- openBreakdownsModal: at,
3308
- addBreakdown: ot,
3309
- removeBreakdown: st,
3310
- toggleBreakdown: ct,
3311
- setBreakdownGranularity: lt,
3312
- toggleBreakdownComparison: ut,
3313
- reorderBreakdowns: dt,
3314
- setFilters: ft,
3315
- dropFieldToFilter: pt,
3316
- setOrder: mt,
3317
- setLimit: ht,
3318
- setFunnelBindingKey: vt,
3319
- setAnalysisType: yt,
3320
- setFunnelCube: bt,
3321
- addFunnelStep: xt,
3322
- removeFunnelStep: St,
3323
- updateFunnelStep: Ct,
3324
- setActiveFunnelStepIndex: wt,
3325
- reorderFunnelSteps: Tt,
3326
- setFunnelTimeDimension: Et,
3327
- setFunnelDisplayConfig: Ne,
3328
- setFlowCube: Ot,
3329
- setFlowBindingKey: At,
3330
- setFlowTimeDimension: jt,
3331
- setEventDimension: Mt,
3332
- setStartingStepName: Nt,
3333
- setStartingStepFilters: Pt,
3334
- setStepsBefore: Ft,
3335
- setStepsAfter: It,
3336
- setJoinStrategy: Lt,
3337
- setFlowDisplayConfig: Ve,
3338
- setRetentionCube: Rt,
3339
- setRetentionBindingKey: zt,
3340
- setRetentionTimeDimension: Bt,
3341
- setRetentionDateRange: Vt,
3342
- setRetentionCohortFilters: Ht,
3343
- setRetentionActivityFilters: Ut,
3344
- setRetentionBreakdowns: Wt,
3311
+ addQuery: u,
3312
+ removeQuery: d,
3313
+ openMetricsModal: nt,
3314
+ addMetric: rt,
3315
+ removeMetric: it,
3316
+ toggleMetric: at,
3317
+ reorderMetrics: ot,
3318
+ openBreakdownsModal: st,
3319
+ addBreakdown: ct,
3320
+ removeBreakdown: lt,
3321
+ toggleBreakdown: ut,
3322
+ setBreakdownGranularity: dt,
3323
+ toggleBreakdownComparison: ft,
3324
+ reorderBreakdowns: pt,
3325
+ setFilters: mt,
3326
+ dropFieldToFilter: ht,
3327
+ setOrder: gt,
3328
+ setLimit: _t,
3329
+ setFunnelBindingKey: bt,
3330
+ setAnalysisType: xt,
3331
+ setFunnelCube: St,
3332
+ addFunnelStep: Ct,
3333
+ removeFunnelStep: wt,
3334
+ updateFunnelStep: Tt,
3335
+ setActiveFunnelStepIndex: Et,
3336
+ reorderFunnelSteps: Dt,
3337
+ setFunnelTimeDimension: Ot,
3338
+ setFunnelDisplayConfig: Fe,
3339
+ setFlowCube: At,
3340
+ setFlowBindingKey: Mt,
3341
+ setFlowTimeDimension: Nt,
3342
+ setEventDimension: Pt,
3343
+ setStartingStepName: Ft,
3344
+ setStartingStepFilters: It,
3345
+ setStepsBefore: Lt,
3346
+ setStepsAfter: Rt,
3347
+ setJoinStrategy: zt,
3348
+ setFlowDisplayConfig: Ue,
3349
+ setRetentionCube: Bt,
3350
+ setRetentionBindingKey: Vt,
3351
+ setRetentionTimeDimension: Ht,
3352
+ setRetentionDateRange: Ut,
3353
+ setRetentionCohortFilters: Wt,
3354
+ setRetentionActivityFilters: Gt,
3355
+ setRetentionBreakdowns: Kt,
3345
3356
  addRetentionBreakdown: X,
3346
3357
  removeRetentionBreakdown: Z,
3347
- setRetentionViewGranularity: Gt,
3348
- setRetentionPeriods: Kt,
3358
+ setRetentionViewGranularity: qt,
3359
+ setRetentionPeriods: Jt,
3349
3360
  setRetentionType: Q,
3350
- setRetentionDisplayConfig: He,
3351
- setChartType: Ie,
3352
- setChartConfig: Le,
3353
- setDisplayConfig: Re,
3354
- setLocalPaletteName: Pe,
3355
- setUserManuallySelectedChart: Fe,
3356
- setActiveTab: Je,
3357
- setActiveView: Ye,
3358
- setDisplayLimit: Xe,
3359
- closeFieldModal: Ze,
3360
- setActiveTableIndex: $e,
3361
- clearQuery: gt,
3362
- clearCurrentMode: _t,
3363
- handleFieldSelected: Xt
3361
+ setRetentionDisplayConfig: We,
3362
+ setChartType: Re,
3363
+ setChartConfig: ze,
3364
+ setDisplayConfig: Be,
3365
+ setLocalPaletteName: Ie,
3366
+ setUserManuallySelectedChart: Le,
3367
+ setActiveTab: Xe,
3368
+ setActiveView: Ze,
3369
+ setDisplayLimit: Qe,
3370
+ closeFieldModal: $e,
3371
+ setActiveTableIndex: tt,
3372
+ clearQuery: vt,
3373
+ clearCurrentMode: yt,
3374
+ handleFieldSelected: Qt
3364
3375
  }
3365
3376
  };
3366
3377
  }
3367
3378
  //#endregion
3368
3379
  //#region src/client/hooks/analysisQueryExecutionModes.ts
3369
- function Hn(e) {
3380
+ function Wn(e) {
3370
3381
  return e.isRetentionMode ? "retention" : e.isFlowMode ? "flow" : e.isFunnelMode ? "funnel" : e.isMultiMode ? "multi" : "single";
3371
3382
  }
3372
- function Un(e, t) {
3383
+ function Gn(e, t) {
3373
3384
  return t[e];
3374
3385
  }
3375
- function Wn(e) {
3386
+ function Kn(e) {
3376
3387
  return {
3377
3388
  funnelExecutedQueries: e.isFunnelMode && e.funnelExecutedQueries && e.funnelExecutedQueries.length > 0 ? e.funnelExecutedQueries : null,
3378
3389
  funnelServerQuery: e.isFunnelMode ? e.funnelServerQuery : null,
@@ -3385,7 +3396,7 @@ function Wn(e) {
3385
3396
  retentionDebugData: e.isRetentionMode ? e.retentionDebugData : null
3386
3397
  };
3387
3398
  }
3388
- function Gn(e) {
3399
+ function qn(e) {
3389
3400
  return {
3390
3401
  single: !e.isValidQuery || !e.isSingleMode,
3391
3402
  multi: !e.hasMultiQueryConfig || !e.isMultiMode,
@@ -3395,11 +3406,11 @@ function Gn(e) {
3395
3406
  dryRun: !!(!e.isValidQuery || e.isFunnelMode || e.isFlowMode || e.isRetentionMode)
3396
3407
  };
3397
3408
  }
3398
- function Kn(e) {
3409
+ function Jn(e) {
3399
3410
  let { hasResults: t, initialData: n, isValidQuery: r, isLoading: i, isFetching: a, error: o } = e;
3400
3411
  return n && n.length > 0 && !t ? "success" : r ? i && !t ? "loading" : a && t ? "refreshing" : o ? "error" : t ? "success" : "idle" : "idle";
3401
3412
  }
3402
- function qn(e) {
3413
+ function Yn(e) {
3403
3414
  return e.isRetentionMode && e.retentionChartData ? e.retentionChartData.rows.map((e) => ({
3404
3415
  "Retention.period": `P${e.period}`,
3405
3416
  "Retention.rate": e.retentionRate,
@@ -3410,18 +3421,18 @@ function qn(e) {
3410
3421
  }
3411
3422
  //#endregion
3412
3423
  //#region src/client/hooks/useAnalysisQuery.ts
3413
- function Jn(e) {
3414
- 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({
3424
+ function Xn(e) {
3425
+ 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 } = fe(), g = u === "funnel" || l, _ = u === "flow", v = u === "retention", y = u === "query" && i, b = u === "query" && !i, x = u === "funnel" && !!d, S = Wn({
3415
3426
  isRetentionMode: v,
3416
3427
  isFlowMode: _,
3417
3428
  isFunnelMode: g,
3418
3429
  isMultiMode: y
3419
- }), C = U(() => x || !g || !c || n.length < 2 ? null : pe(n, c), [
3430
+ }), C = H(() => x || !g || !c || n.length < 2 ? null : he(n, c), [
3420
3431
  x,
3421
3432
  g,
3422
3433
  c,
3423
3434
  n
3424
- ]), w = Gn({
3435
+ ]), w = qn({
3425
3436
  isValidQuery: a,
3426
3437
  isSingleMode: b,
3427
3438
  isMultiMode: y,
@@ -3433,46 +3444,46 @@ function Jn(e) {
3433
3444
  hasServerFunnelQuery: !!d,
3434
3445
  hasServerFlowQuery: !!f,
3435
3446
  hasServerRetentionQuery: !!p
3436
- }), T = oe(t, {
3447
+ }), T = P(t, {
3437
3448
  skip: w.single,
3438
3449
  debounceMs: 300
3439
3450
  }), E = se(r, {
3440
3451
  skip: w.multi,
3441
3452
  debounceMs: 300
3442
- }), D = L(C, {
3453
+ }), D = ce(C, {
3443
3454
  skip: w.funnel,
3444
3455
  debounceMs: 300,
3445
3456
  prebuiltServerQuery: x ? d : void 0
3446
- }), O = ue(f ?? null, {
3457
+ }), O = de(f ?? null, {
3447
3458
  skip: w.flow,
3448
3459
  debounceMs: 300
3449
- }), k = P(p ?? null, {
3460
+ }), k = oe(p ?? null, {
3450
3461
  skip: w.retention,
3451
3462
  debounceMs: 300,
3452
3463
  getFieldLabel: h
3453
- }), ee = fe({
3464
+ }), ee = me({
3454
3465
  queries: i ? n : [t],
3455
3466
  isMultiQueryMode: i,
3456
3467
  skip: w.dryRun
3457
- }), A = z(D.serverQuery, { skip: !g || !D.serverQuery }), te = z(O.serverQuery, { skip: !_ || !O.serverQuery }), ne = z(p, { skip: !v || !p }), j = Un(S, {
3468
+ }), A = pe(D.serverQuery, { skip: !g || !D.serverQuery }), te = pe(O.serverQuery, { skip: !_ || !O.serverQuery }), j = pe(p, { skip: !v || !p }), M = Gn(S, {
3458
3469
  retention: k.isLoading || k.isDebouncing,
3459
3470
  flow: O.isLoading || O.isDebouncing,
3460
3471
  funnel: D.isExecuting || D.isDebouncing,
3461
3472
  multi: E.isLoading,
3462
3473
  single: T.isLoading
3463
- }), re = Un(S, {
3474
+ }), ne = Gn(S, {
3464
3475
  retention: k.isFetching,
3465
3476
  flow: O.isFetching,
3466
3477
  funnel: D.isExecuting,
3467
3478
  multi: E.isFetching,
3468
3479
  single: T.isFetching
3469
- }), M = Un(S, {
3480
+ }), N = Gn(S, {
3470
3481
  retention: k.error,
3471
3482
  flow: O.error,
3472
3483
  funnel: D.error,
3473
3484
  multi: E.error,
3474
3485
  single: T.error
3475
- }), ie = !!(T.debouncedQuery || E.debouncedConfig || !D.isDebouncing || !O.isDebouncing || !k.isDebouncing), ae = V((e) => {
3486
+ }), re = !!(T.debouncedQuery || E.debouncedConfig || !D.isDebouncing || !O.isDebouncing || !k.isDebouncing), ie = B((e) => {
3476
3487
  switch (S) {
3477
3488
  case "retention":
3478
3489
  k.execute(e);
@@ -3495,8 +3506,8 @@ function Jn(e) {
3495
3506
  D,
3496
3507
  E,
3497
3508
  T
3498
- ]), N = U(() => Kn({
3499
- hasResults: Un(S, {
3509
+ ]), ae = H(() => Jn({
3510
+ hasResults: Gn(S, {
3500
3511
  retention: k.chartData,
3501
3512
  flow: O.data,
3502
3513
  funnel: D.chartData,
@@ -3505,14 +3516,14 @@ function Jn(e) {
3505
3516
  }),
3506
3517
  initialData: o,
3507
3518
  isValidQuery: a,
3508
- isLoading: j,
3509
- isFetching: re,
3510
- error: M
3519
+ isLoading: M,
3520
+ isFetching: ne,
3521
+ error: N
3511
3522
  }), [
3512
3523
  a,
3513
- j,
3514
- re,
3515
3524
  M,
3525
+ ne,
3526
+ N,
3516
3527
  T.rawData,
3517
3528
  E.data,
3518
3529
  D.chartData,
@@ -3520,7 +3531,7 @@ function Jn(e) {
3520
3531
  k.chartData,
3521
3532
  o,
3522
3533
  S
3523
- ]), F = U(() => qn({
3534
+ ]), F = H(() => Yn({
3524
3535
  isRetentionMode: v,
3525
3536
  isFlowMode: _,
3526
3537
  isFunnelMode: g,
@@ -3542,12 +3553,12 @@ function Jn(e) {
3542
3553
  g,
3543
3554
  _,
3544
3555
  v
3545
- ]), I = U(() => g && D.stepResults ? D.stepResults.map((e) => e.data) : !y || !E.perQueryData ? null : E.perQueryData, [
3556
+ ]), I = H(() => g && D.stepResults ? D.stepResults.map((e) => e.data) : !y || !E.perQueryData ? null : E.perQueryData, [
3546
3557
  y,
3547
3558
  g,
3548
3559
  E.perQueryData,
3549
3560
  D.stepResults
3550
- ]), { funnelExecutedQueries: ce, funnelServerQuery: le, funnelDebugData: R, flowServerQuery: me, flowChartData: he, flowDebugData: B, retentionServerQuery: ge, retentionChartData: _e, retentionDebugData: ve } = Wn({
3561
+ ]), { funnelExecutedQueries: L, funnelServerQuery: le, funnelDebugData: ue, flowServerQuery: R, flowChartData: ge, flowDebugData: _e, retentionServerQuery: z, retentionChartData: ve, retentionDebugData: ye } = Kn({
3551
3562
  isFunnelMode: g,
3552
3563
  isFlowMode: _,
3553
3564
  isRetentionMode: v,
@@ -3559,8 +3570,8 @@ function Jn(e) {
3559
3570
  flowDebugData: te.debugData,
3560
3571
  retentionServerQuery: p ?? null,
3561
3572
  retentionChartData: k.chartData,
3562
- retentionDebugData: ne.debugData
3563
- }), H = U(() => Un(S, {
3573
+ retentionDebugData: j.debugData
3574
+ }), be = H(() => Gn(S, {
3564
3575
  retention: k.needsRefresh,
3565
3576
  flow: O.needsRefresh,
3566
3577
  funnel: D.needsRefresh,
@@ -3572,72 +3583,72 @@ function Jn(e) {
3572
3583
  O.needsRefresh,
3573
3584
  D.needsRefresh,
3574
3585
  T.needsRefresh
3575
- ]), W = U(() => {
3586
+ ]), V = H(() => {
3576
3587
  if (b && T.warnings) return T.warnings;
3577
3588
  }, [b, T.warnings]);
3578
3589
  return {
3579
- executionStatus: N,
3590
+ executionStatus: ae,
3580
3591
  executionResults: F,
3581
3592
  perQueryResults: I,
3582
- isLoading: j,
3583
- isFetching: re,
3584
- error: M,
3593
+ isLoading: M,
3594
+ isFetching: ne,
3595
+ error: N,
3585
3596
  debugDataPerQuery: ee.debugDataPerQuery,
3586
- hasDebounced: ie,
3587
- refetch: ae,
3588
- funnelExecutedQueries: ce,
3597
+ hasDebounced: re,
3598
+ refetch: ie,
3599
+ funnelExecutedQueries: L,
3589
3600
  funnelServerQuery: le,
3590
- funnelDebugData: R,
3591
- flowServerQuery: me,
3592
- flowChartData: he,
3593
- flowDebugData: B,
3594
- retentionServerQuery: ge,
3595
- retentionChartData: _e,
3596
- retentionDebugData: ve,
3601
+ funnelDebugData: ue,
3602
+ flowServerQuery: R,
3603
+ flowChartData: ge,
3604
+ flowDebugData: _e,
3605
+ retentionServerQuery: z,
3606
+ retentionChartData: ve,
3607
+ retentionDebugData: ye,
3597
3608
  retentionValidation: m ?? null,
3598
- needsRefresh: H,
3599
- warnings: W
3609
+ needsRefresh: be,
3610
+ warnings: V
3600
3611
  };
3601
3612
  }
3602
3613
  //#endregion
3603
3614
  //#region src/client/utils/shareUtils.ts
3604
- var Yn = o(), Xn = 1800, Zn = "share=";
3605
- function Qn(e) {
3615
+ var Zn = o(), Qn = 1800, $n = "share=";
3616
+ function er(e) {
3606
3617
  let t = JSON.stringify(e);
3607
- return (0, Yn.compressToEncodedURIComponent)(t);
3618
+ return (0, Zn.compressToEncodedURIComponent)(t);
3608
3619
  }
3609
- function $n(e) {
3620
+ function tr(e) {
3610
3621
  try {
3611
- let t = (0, Yn.decompressFromEncodedURIComponent)(e);
3622
+ let t = (0, Zn.decompressFromEncodedURIComponent)(e);
3612
3623
  if (!t) return null;
3613
3624
  let n = JSON.parse(t);
3614
- return D(n) ? n : (console.warn("[shareUtils] Invalid AnalysisConfig in share URL"), null);
3625
+ return O(n) ? n : (console.warn("[shareUtils] Invalid AnalysisConfig in share URL"), null);
3615
3626
  } catch {
3616
3627
  return null;
3617
3628
  }
3618
3629
  }
3619
- function er(e) {
3620
- let t = Qn(e);
3630
+ function nr(e) {
3631
+ let t = er(e);
3621
3632
  return {
3622
- ok: t.length <= Xn,
3633
+ ok: t.length <= Qn,
3623
3634
  size: t.length,
3624
- maxSize: Xn
3635
+ maxSize: Qn
3625
3636
  };
3626
3637
  }
3627
- function tr(e) {
3628
- let t = Qn(e);
3629
- if (t.length <= Xn) return {
3638
+ function rr(e) {
3639
+ let t = er(e);
3640
+ if (t.length <= Qn) return {
3630
3641
  encoded: t,
3631
3642
  queryOnly: !1
3632
3643
  };
3633
- let n = Qn({
3644
+ let n = er({
3634
3645
  version: e.version,
3635
3646
  analysisType: e.analysisType,
3636
3647
  activeView: e.activeView,
3637
3648
  charts: {},
3638
3649
  query: e.query
3639
3650
  });
3640
- return n.length <= Xn ? {
3651
+ return n.length <= Qn ? {
3641
3652
  encoded: n,
3642
3653
  queryOnly: !0
3643
3654
  } : {
@@ -3645,27 +3656,27 @@ function tr(e) {
3645
3656
  queryOnly: !0
3646
3657
  };
3647
3658
  }
3648
- function nr(e) {
3649
- let { encoded: t } = tr(e);
3650
- return t ? `${window.location.origin}${window.location.pathname}#${Zn}${t}` : null;
3659
+ function ir(e) {
3660
+ let { encoded: t } = rr(e);
3661
+ return t ? `${window.location.origin}${window.location.pathname}#${$n}${t}` : null;
3651
3662
  }
3652
- function rr() {
3663
+ function ar() {
3653
3664
  if (typeof window > "u") return null;
3654
3665
  let e = window.location.hash;
3655
- return !e || !e.startsWith(`#${Zn}`) ? null : e.slice(7);
3666
+ return !e || !e.startsWith(`#${$n}`) ? null : e.slice(7);
3656
3667
  }
3657
- function ir() {
3668
+ function or() {
3658
3669
  if (typeof window > "u") return;
3659
3670
  let e = new URL(window.location.href);
3660
3671
  e.hash = "", window.history.replaceState(null, "", e.toString());
3661
3672
  }
3662
- function ar() {
3663
- let e = rr();
3664
- return e ? $n(e) : null;
3673
+ function sr() {
3674
+ let e = ar();
3675
+ return e ? tr(e) : null;
3665
3676
  }
3666
3677
  //#endregion
3667
3678
  //#region src/client/components/AIAssistant/utils.ts
3668
- async function or(e, t, n = "/api/ai/generate", r) {
3679
+ async function cr(e, t, n = "/api/ai/generate", r) {
3669
3680
  let i = { text: t }, a = {
3670
3681
  "Content-Type": "application/json",
3671
3682
  ...r
@@ -3695,28 +3706,28 @@ async function or(e, t, n = "/api/ai/generate", r) {
3695
3706
  let s = await o.json();
3696
3707
  return console.log("✅ Client: Successfully generated content"), s;
3697
3708
  }
3698
- function sr(e) {
3709
+ function lr(e) {
3699
3710
  return (e.query || "").replace(/```json\s*/g, "").replace(/```\s*/g, "").replace(/^\s*```.*\n/gm, "").trim();
3700
3711
  }
3701
3712
  //#endregion
3702
3713
  //#region src/client/hooks/useAnalysisEffects.ts
3703
- function cr(e) {
3714
+ function ur(e) {
3704
3715
  return typeof e == "object" && !!e && "funnel" in e && typeof e.funnel == "object";
3705
3716
  }
3706
- function lr(e) {
3707
- 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);
3708
- H(() => {
3709
- if (l.current) return;
3710
- l.current = !0;
3711
- let e = ar();
3712
- e && (o.getState().load(e), ir());
3713
- }, [o]), H(() => {
3717
+ function dr(e) {
3718
+ let { state: t, query: n, aiEndpoint: r = "/api/ai", onQueryChange: i, onChartConfigChange: a } = e, { storeApi: o, actions: s } = t, { apiOptions: l } = c(), u = U(!1);
3719
+ V(() => {
3720
+ if (u.current) return;
3721
+ u.current = !0;
3722
+ let e = sr();
3723
+ e && (o.getState().load(e), or());
3724
+ }, [o]), V(() => {
3714
3725
  i && t.isValidQuery && i(t.currentQuery);
3715
3726
  }, [
3716
3727
  t.currentQuery,
3717
3728
  t.isValidQuery,
3718
3729
  i
3719
- ]), H(() => {
3730
+ ]), V(() => {
3720
3731
  a && a({
3721
3732
  chartType: t.chartType,
3722
3733
  chartConfig: t.chartConfig,
@@ -3728,38 +3739,38 @@ function lr(e) {
3728
3739
  t.displayConfig,
3729
3740
  a
3730
3741
  ]);
3731
- let { combinedMetrics: f, combinedBreakdowns: m, chartType: h, chartConfig: g, userManuallySelectedChart: _ } = t, { hasDebounced: v } = n, { setChartType: y, setChartConfig: b } = s, x = W("");
3732
- H(() => {
3733
- if (!v || f.length === 0 && m.length === 0) return;
3742
+ let { combinedMetrics: d, combinedBreakdowns: p, chartType: h, chartConfig: g, userManuallySelectedChart: _ } = t, { hasDebounced: v } = n, { setChartType: y, setChartConfig: b } = s, x = U("");
3743
+ V(() => {
3744
+ if (!v || d.length === 0 && p.length === 0) return;
3734
3745
  let e = JSON.stringify({
3735
- metrics: f.map((e) => e.field),
3736
- breakdowns: m.map((e) => ({
3746
+ metrics: d.map((e) => e.field),
3747
+ breakdowns: p.map((e) => ({
3737
3748
  field: e.field,
3738
3749
  isTime: e.isTimeDimension
3739
3750
  }))
3740
3751
  });
3741
3752
  if (e === x.current) return;
3742
3753
  x.current = e;
3743
- let t = jt(f, m, h, _);
3754
+ let t = Nt(d, p, h, _);
3744
3755
  if (t) {
3745
- let { chartConfig: e } = kt(f, m, t);
3756
+ let { chartConfig: e } = jt(d, p, t);
3746
3757
  y(t), b(e), s.setUserManuallySelectedChart(!1);
3747
- } else if (f.length > 0 || m.length > 0) {
3748
- if (h === "table") {
3749
- 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));
3750
- n.length > 0 && b({
3758
+ } else if (d.length > 0 || p.length > 0) {
3759
+ if (h === "table" || h === "recordsTable") {
3760
+ let e = h === "recordsTable" ? "columns" : "xAxis", t = [...p.map((e) => e.field), ...d.map((e) => e.field)], n = Array.isArray(g[e]) ? g[e] : [], r = new Set(g.hiddenColumns ?? []), i = t.filter((e) => !n.includes(e) && !r.has(e));
3761
+ i.length > 0 && b({
3751
3762
  ...g,
3752
- xAxis: [...t, ...n]
3763
+ [e]: [...n, ...i]
3753
3764
  });
3754
3765
  } else if (!g.xAxis?.length && !g.yAxis?.length && !g.series?.length) {
3755
- let { chartConfig: e } = kt(f, m, h);
3766
+ let { chartConfig: e } = jt(d, p, h);
3756
3767
  b(e);
3757
3768
  }
3758
3769
  }
3759
3770
  }, [
3760
3771
  v,
3761
- f,
3762
- m,
3772
+ d,
3773
+ p,
3763
3774
  h,
3764
3775
  _,
3765
3776
  g,
@@ -3767,7 +3778,7 @@ function lr(e) {
3767
3778
  b,
3768
3779
  s
3769
3780
  ]);
3770
- let [S, C] = G({
3781
+ let [S, C] = W({
3771
3782
  isOpen: !1,
3772
3783
  userPrompt: "",
3773
3784
  isGenerating: !1,
@@ -3775,7 +3786,7 @@ function lr(e) {
3775
3786
  hasGeneratedQuery: !1,
3776
3787
  previousState: null,
3777
3788
  previousConfig: null
3778
- }), w = V((e) => {
3789
+ }), w = B((e) => {
3779
3790
  o.getState().updateQueryState(t.activeQueryIndex, (t) => {
3780
3791
  let n = e(t);
3781
3792
  return {
@@ -3787,7 +3798,7 @@ function lr(e) {
3787
3798
  limit: n.limit
3788
3799
  };
3789
3800
  });
3790
- }, [o, t.activeQueryIndex]), T = V((e) => {
3801
+ }, [o, t.activeQueryIndex]), T = B((e) => {
3791
3802
  let t = {
3792
3803
  version: 1,
3793
3804
  analysisType: "funnel",
@@ -3800,7 +3811,7 @@ function lr(e) {
3800
3811
  query: e
3801
3812
  };
3802
3813
  o.getState().load(t);
3803
- }, [o]), E = V(() => {
3814
+ }, [o]), E = B(() => {
3804
3815
  let e = o.getState().save();
3805
3816
  C({
3806
3817
  isOpen: !0,
@@ -3828,7 +3839,7 @@ function lr(e) {
3828
3839
  t.chartConfig,
3829
3840
  t.displayConfig,
3830
3841
  t.analysisType
3831
- ]), D = V(() => {
3842
+ ]), D = B(() => {
3832
3843
  C((e) => ({
3833
3844
  ...e,
3834
3845
  isOpen: !1,
@@ -3836,12 +3847,12 @@ function lr(e) {
3836
3847
  error: null,
3837
3848
  hasGeneratedQuery: !1
3838
3849
  }));
3839
- }, []), O = V((e) => {
3850
+ }, []), O = B((e) => {
3840
3851
  C((t) => ({
3841
3852
  ...t,
3842
3853
  userPrompt: e
3843
3854
  }));
3844
- }, []), k = V(async () => {
3855
+ }, []), k = B(async () => {
3845
3856
  if (S.userPrompt.trim()) {
3846
3857
  C((e) => ({
3847
3858
  ...e,
@@ -3849,8 +3860,8 @@ function lr(e) {
3849
3860
  error: null
3850
3861
  }));
3851
3862
  try {
3852
- 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;
3853
- if (cr(i)) {
3863
+ let e = lr(await cr("", S.userPrompt, r, l?.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;
3864
+ if (ur(i)) {
3854
3865
  s.setAnalysisType("funnel"), T(i), s.setChartType("funnel"), o && s.setChartConfig(o), s.setActiveView("chart"), C((e) => ({
3855
3866
  ...e,
3856
3867
  isGenerating: !1,
@@ -3858,27 +3869,27 @@ function lr(e) {
3858
3869
  }));
3859
3870
  return;
3860
3871
  }
3861
- let l = i;
3872
+ let c = i;
3862
3873
  w((e) => ({
3863
3874
  ...e,
3864
- metrics: (l.measures || []).map((e, t) => ({
3865
- id: p(),
3875
+ metrics: (c.measures || []).map((e, t) => ({
3876
+ id: m(),
3866
3877
  field: e,
3867
- label: d(t)
3878
+ label: f(t)
3868
3879
  })),
3869
- breakdowns: [...(l.dimensions || []).map((e) => ({
3870
- id: p(),
3880
+ breakdowns: [...(c.dimensions || []).map((e) => ({
3881
+ id: m(),
3871
3882
  field: e,
3872
3883
  isTimeDimension: !1
3873
- })), ...(l.timeDimensions || []).map((e) => ({
3874
- id: p(),
3884
+ })), ...(c.timeDimensions || []).map((e) => ({
3885
+ id: m(),
3875
3886
  field: e.dimension,
3876
3887
  granularity: e.granularity,
3877
3888
  isTimeDimension: !0
3878
3889
  }))],
3879
- filters: l.filters || [],
3880
- order: l.order || void 0,
3881
- limit: l.limit ?? void 0
3890
+ filters: c.filters || [],
3891
+ order: c.order || void 0,
3892
+ limit: c.limit ?? void 0
3882
3893
  })), t.analysisType === "funnel" && s.setAnalysisType("query"), a && s.setChartType(a), o && s.setChartConfig(o), s.setActiveView("chart"), C((e) => ({
3883
3894
  ...e,
3884
3895
  isGenerating: !1,
@@ -3895,12 +3906,12 @@ function lr(e) {
3895
3906
  }, [
3896
3907
  S.userPrompt,
3897
3908
  r,
3898
- c?.headers,
3909
+ l?.headers,
3899
3910
  w,
3900
3911
  T,
3901
3912
  t.analysisType,
3902
3913
  s
3903
- ]), ee = V(() => {
3914
+ ]), ee = B(() => {
3904
3915
  C({
3905
3916
  isOpen: !1,
3906
3917
  userPrompt: "",
@@ -3910,7 +3921,7 @@ function lr(e) {
3910
3921
  previousState: null,
3911
3922
  previousConfig: null
3912
3923
  });
3913
- }, []), A = V(() => {
3924
+ }, []), A = B(() => {
3914
3925
  S.previousConfig ? o.getState().load(S.previousConfig) : S.previousState && (w((e) => ({
3915
3926
  ...e,
3916
3927
  metrics: S.previousState.metrics,
@@ -3931,7 +3942,7 @@ function lr(e) {
3931
3942
  o,
3932
3943
  w,
3933
3944
  s
3934
- ]), [te, ne] = G("idle"), j = t.effectiveIsValidQuery;
3945
+ ]), [te, j] = W("idle"), M = t.effectiveIsValidQuery;
3935
3946
  return {
3936
3947
  aiState: S,
3937
3948
  openAI: E,
@@ -3941,9 +3952,9 @@ function lr(e) {
3941
3952
  acceptAI: ee,
3942
3953
  cancelAI: A,
3943
3954
  shareButtonState: te,
3944
- share: V(async () => {
3945
- if (!j) return;
3946
- let { encoded: e, queryOnly: t } = tr(o.getState().save());
3955
+ share: B(async () => {
3956
+ if (!M) return;
3957
+ let { encoded: e, queryOnly: t } = rr(o.getState().save());
3947
3958
  if (!e) return;
3948
3959
  let n = `${window.location.origin}${window.location.pathname}#share=${e}`;
3949
3960
  try {
@@ -3952,17 +3963,17 @@ function lr(e) {
3952
3963
  let e = document.createElement("textarea");
3953
3964
  e.value = n, document.body.appendChild(e), e.select(), document.execCommand("copy"), document.body.removeChild(e);
3954
3965
  }
3955
- ne(t ? "copied-no-chart" : "copied"), setTimeout(() => {
3956
- ne("idle");
3966
+ j(t ? "copied-no-chart" : "copied"), setTimeout(() => {
3967
+ j("idle");
3957
3968
  }, 2e3);
3958
- }, [j, o]),
3959
- canShare: j
3969
+ }, [M, o]),
3970
+ canShare: M
3960
3971
  };
3961
3972
  }
3962
3973
  //#endregion
3963
3974
  //#region src/client/hooks/useAnalysisBuilderHook.ts
3964
- function ur(e = {}) {
3965
- let { initialData: t, externalColorPalette: n, onQueryChange: r, onChartConfigChange: i } = e, { features: a } = s(), o = Vn({ externalColorPalette: n }), c = Jn({
3975
+ function fr(e = {}) {
3976
+ let { initialData: t, externalColorPalette: n, onQueryChange: r, onChartConfigChange: i } = e, { features: a } = s(), o = Un({ externalColorPalette: n }), c = Xn({
3966
3977
  currentQuery: o.currentQuery,
3967
3978
  allQueries: o.allQueries,
3968
3979
  multiQueryConfig: o.multiQueryConfig,
@@ -3977,7 +3988,7 @@ function ur(e = {}) {
3977
3988
  serverFlowQuery: o.serverFlowQuery,
3978
3989
  serverRetentionQuery: o.serverRetentionQuery,
3979
3990
  retentionValidation: o.retentionValidation
3980
- }), l = lr({
3991
+ }), l = dr({
3981
3992
  state: o,
3982
3993
  query: c,
3983
3994
  aiEndpoint: a?.aiEndpoint,
@@ -4152,7 +4163,7 @@ function ur(e = {}) {
4152
4163
  }
4153
4164
  //#endregion
4154
4165
  //#region src/client/utils/funnelValidation.ts
4155
- function dr(e, t) {
4166
+ function pr(e, t) {
4156
4167
  let n = [];
4157
4168
  if (!t?.cubes) return n;
4158
4169
  if (typeof e.dimension == "string") {
@@ -4176,7 +4187,7 @@ function dr(e, t) {
4176
4187
  }
4177
4188
  return n;
4178
4189
  }
4179
- function fr(e) {
4190
+ function mr(e) {
4180
4191
  let t = [];
4181
4192
  for (let n = 0; n < e.length; n++) {
4182
4193
  let r = e[n], i = r.query;
@@ -4188,17 +4199,17 @@ function fr(e) {
4188
4199
  }
4189
4200
  return t;
4190
4201
  }
4191
- function pr(e, t) {
4202
+ function hr(e, t) {
4192
4203
  if (typeof e.dimension == "string") return !0;
4193
- let n = me(t);
4204
+ let n = ge(t);
4194
4205
  return n ? e.dimension.some((e) => e.cube === n) : !1;
4195
4206
  }
4196
- function mr(e, t) {
4207
+ function gr(e, t) {
4197
4208
  let n = [];
4198
4209
  for (let r = 0; r < t.length; r++) {
4199
4210
  let i = t[r];
4200
- if (!pr(e, i.query)) {
4201
- let e = me(i.query) || "unknown";
4211
+ if (!hr(e, i.query)) {
4212
+ let e = ge(i.query) || "unknown";
4202
4213
  n.push({
4203
4214
  type: "cross_cube",
4204
4215
  message: `Step ${r + 1} uses cube "${e}" but no binding key mapping exists for it`,
@@ -4208,26 +4219,26 @@ function mr(e, t) {
4208
4219
  }
4209
4220
  return n;
4210
4221
  }
4211
- function hr(e) {
4222
+ function _r(e) {
4212
4223
  return e ? /^P(?:\d+Y)?(?:\d+M)?(?:\d+W)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$/.test(e) ? null : {
4213
4224
  type: "time_window",
4214
4225
  message: `Invalid time window format "${e}". Expected ISO 8601 duration (e.g., P7D, PT1H)`
4215
4226
  } : null;
4216
4227
  }
4217
- function gr(e, t) {
4228
+ function vr(e, t) {
4218
4229
  let n = [], r = [];
4219
4230
  e.steps.length < 2 && n.push({
4220
4231
  type: "general",
4221
4232
  message: "Funnel requires at least 2 steps"
4222
- }), e.bindingKey?.dimension ? (n.push(...dr(e.bindingKey, t)), n.push(...mr(e.bindingKey, e.steps))) : n.push({
4233
+ }), e.bindingKey?.dimension ? (n.push(...pr(e.bindingKey, t)), n.push(...gr(e.bindingKey, e.steps))) : n.push({
4223
4234
  type: "binding_key",
4224
4235
  message: "Binding key dimension is required"
4225
- }), n.push(...fr(e.steps));
4236
+ }), n.push(...mr(e.steps));
4226
4237
  for (let t = 0; t < e.steps.length; t++) {
4227
- let r = e.steps[t], i = hr(r.timeToConvert);
4238
+ let r = e.steps[t], i = _r(r.timeToConvert);
4228
4239
  i && (i.stepIndex = t, n.push(i));
4229
4240
  }
4230
- let i = hr(e.globalTimeWindow);
4241
+ let i = _r(e.globalTimeWindow);
4231
4242
  return i && n.push(i), e.steps.length > 5 && r.push({
4232
4243
  type: "general",
4233
4244
  message: "Funnels with more than 5 steps may have reduced performance"
@@ -4237,7 +4248,7 @@ function gr(e, t) {
4237
4248
  warnings: r
4238
4249
  };
4239
4250
  }
4240
- function _r(e, t) {
4251
+ function yr(e, t) {
4241
4252
  return t < 2 ? {
4242
4253
  isValid: !1,
4243
4254
  message: "Add at least 2 steps for funnel"
@@ -4246,7 +4257,7 @@ function _r(e, t) {
4246
4257
  message: "Select a binding key dimension"
4247
4258
  } : { isValid: !0 };
4248
4259
  }
4249
- function vr(e) {
4260
+ function br(e) {
4250
4261
  if (!e?.cubes) return [];
4251
4262
  let t = [];
4252
4263
  for (let n of e.cubes) if (n.dimensions) for (let e of n.dimensions) (e.type === "string" || e.type === "number") && t.push({
@@ -4256,7 +4267,7 @@ function vr(e) {
4256
4267
  });
4257
4268
  return t;
4258
4269
  }
4259
- function yr(e) {
4270
+ function xr(e) {
4260
4271
  if (!e?.dimension) return "Select binding key...";
4261
4272
  if (typeof e.dimension == "string") return e.dimension.split(".")[1] || e.dimension;
4262
4273
  if (e.dimension.length > 0) {
@@ -4266,6 +4277,6 @@ function yr(e) {
4266
4277
  return "Select binding key...";
4267
4278
  }
4268
4279
  //#endregion
4269
- 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 };
4280
+ export { An as A, Dn as C, Mn as D, On as E, Xe as F, wn as M, Rt as N, En as O, at as P, Cn as S, Tn as T, Hn as _, gr as a, Rn as b, fr as c, ir as d, nr as f, In as g, Ln as h, pr as i, $ as j, jn as k, er as l, sr as m, xr as n, vr as o, ar as p, yr as r, mr as s, br as t, tr as u, Bn as v, kn as w, Pn as x, Fn as y };
4270
4281
 
4271
- //# sourceMappingURL=analysis-builder-shared-BQvwUc6z.js.map
4282
+ //# sourceMappingURL=analysis-builder-shared-dqcpl_WL.js.map