drizzle-cube 0.10.1 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/dist/adapters/ActivityGridChart.config-XMtoteb6.js +2 -0
  2. package/dist/adapters/ActivityGridChart.config-h1AXPvn0.cjs +1 -0
  3. package/dist/adapters/AreaChart.config-DYf9wufo.cjs +1 -0
  4. package/dist/adapters/AreaChart.config-We6b53aT.js +2 -0
  5. package/dist/adapters/BarChart.config-4SX44IYv.cjs +1 -0
  6. package/dist/adapters/BarChart.config-CwBnyptL.js +2 -0
  7. package/dist/adapters/BoxPlotChart.config-BzNe-FlW.cjs +1 -0
  8. package/dist/adapters/BoxPlotChart.config-mfAHqmcp.js +2 -0
  9. package/dist/adapters/BubbleChart.config-CBT5jMdc.cjs +1 -0
  10. package/dist/adapters/BubbleChart.config-DxG_Umal.js +2 -0
  11. package/dist/adapters/CandlestickChart.config-Cqw3XP1h.js +2 -0
  12. package/dist/adapters/CandlestickChart.config-DPSSlzUD.cjs +1 -0
  13. package/dist/adapters/DataTable.config-DS1bvaDu.js +2 -0
  14. package/dist/adapters/DataTable.config-D_NsMeyz.cjs +1 -0
  15. package/dist/adapters/DotStripChart.config-BApWn6QV.cjs +1 -0
  16. package/dist/adapters/DotStripChart.config-Bdk5-YfB.js +2 -0
  17. package/dist/adapters/FunnelChart.config-BT5up_Bg.cjs +1 -0
  18. package/dist/adapters/FunnelChart.config-ISZiz9fn.js +2 -0
  19. package/dist/adapters/GaugeChart.config-Biaq1cKc.cjs +1 -0
  20. package/dist/adapters/GaugeChart.config-BjGfB84t.js +2 -0
  21. package/dist/adapters/HeatMapChart.config-Bmca8KiH.cjs +1 -0
  22. package/dist/adapters/HeatMapChart.config-uWvR0B-N.js +2 -0
  23. package/dist/adapters/KpiDelta.config-CJeDdj_1.js +2 -0
  24. package/dist/adapters/KpiDelta.config-CKr9pAxL.cjs +1 -0
  25. package/dist/adapters/KpiNumber.config-6YLEF2fy.cjs +1 -0
  26. package/dist/adapters/KpiNumber.config-C00M46GA.js +2 -0
  27. package/dist/adapters/KpiText.config-C8Av_D2W.cjs +1 -0
  28. package/dist/adapters/KpiText.config-bKTHob0C.js +2 -0
  29. package/dist/adapters/LineChart.config-DH68HT_B.js +2 -0
  30. package/dist/adapters/LineChart.config-DPq7GvL9.cjs +1 -0
  31. package/dist/adapters/MarkdownChart.config-CaaJPO3c.js +2 -0
  32. package/dist/adapters/MarkdownChart.config-ca_UyhWJ.cjs +1 -0
  33. package/dist/adapters/MeasureProfileChart.config-C1Il0IqL.cjs +1 -0
  34. package/dist/adapters/MeasureProfileChart.config-DMOnkmb6.js +2 -0
  35. package/dist/adapters/PieChart.config-Bg-8cxWK.js +2 -0
  36. package/dist/adapters/PieChart.config-joJcF--K.cjs +1 -0
  37. package/dist/adapters/ProportionBarChart.config-B2sltKsI.cjs +1 -0
  38. package/dist/adapters/ProportionBarChart.config-BlCedy1v.js +2 -0
  39. package/dist/adapters/RadarChart.config-DD1pX6FZ.js +2 -0
  40. package/dist/adapters/RadarChart.config-DVCCLSVw.cjs +1 -0
  41. package/dist/adapters/RadialBarChart.config--VIE2jMM.js +2 -0
  42. package/dist/adapters/RadialBarChart.config-BZwyWhTg.cjs +1 -0
  43. package/dist/adapters/RecordsTable.config-CTBQc-2r.js +2 -0
  44. package/dist/adapters/RecordsTable.config-DPdO0DL5.cjs +1 -0
  45. package/dist/adapters/RetentionCombinedChart.config-PGVxnkRL.js +2 -0
  46. package/dist/adapters/RetentionCombinedChart.config-mX5PMh82.cjs +1 -0
  47. package/dist/adapters/RetentionHeatmap.config-Co-JMzBm.js +2 -0
  48. package/dist/adapters/RetentionHeatmap.config-Cub3-ksy.cjs +1 -0
  49. package/dist/adapters/SankeyChart.config-BkIyUcAE.cjs +1 -0
  50. package/dist/adapters/SankeyChart.config-DGTnRmYg.js +2 -0
  51. package/dist/adapters/ScatterChart.config-CdZrBorg.js +2 -0
  52. package/dist/adapters/ScatterChart.config-CwN9niUL.cjs +1 -0
  53. package/dist/adapters/SunburstChart.config-D0ZkRSJv.cjs +1 -0
  54. package/dist/adapters/SunburstChart.config-RF3uu5Sa.js +2 -0
  55. package/dist/adapters/TreeMapChart.config-B2Yn_V7p.cjs +1 -0
  56. package/dist/adapters/TreeMapChart.config-diJtcs4D.js +2 -0
  57. package/dist/adapters/WaterfallChart.config-B10PxftT.cjs +1 -0
  58. package/dist/adapters/WaterfallChart.config-BImlkLmR.js +2 -0
  59. package/dist/adapters/chartConfigHelpers-BhME7ow_.cjs +1 -0
  60. package/dist/adapters/{chartConfigHelpers-BsnbxA2c.js → chartConfigHelpers-BsviVhEw.js} +27 -7
  61. package/dist/adapters/{compiler-Dw5tYox7.cjs → compiler-B-yljK02.cjs} +6 -6
  62. package/dist/adapters/{compiler-C8fOs43d.js → compiler-BhityGUO.js} +197 -186
  63. package/dist/adapters/core/index.cjs +1 -1
  64. package/dist/adapters/core/index.js +1 -1
  65. package/dist/adapters/{core-BP6GiYzO.cjs → core-CQOrzBNh.cjs} +1 -1
  66. package/dist/adapters/{core-z6vXJ8nF.js → core-xZE0miIu.js} +2 -2
  67. package/dist/adapters/express/index.cjs +1 -1
  68. package/dist/adapters/express/index.js +5 -5
  69. package/dist/adapters/fastify/index.cjs +1 -1
  70. package/dist/adapters/fastify/index.js +5 -5
  71. package/dist/adapters/{handler-CI3Rt-Zt.js → handler-ByeQ0-1r.js} +237 -234
  72. package/dist/adapters/handler-DSNmfv1R.cjs +16 -0
  73. package/dist/adapters/hono/index.cjs +1 -1
  74. package/dist/adapters/hono/index.js +4 -4
  75. package/dist/adapters/mcp-app-html-CNp0VqS_.cjs +1 -0
  76. package/dist/adapters/mcp-app-html-CvWoYMO3.js +5 -0
  77. package/dist/adapters/mcp-app-html.cjs +1 -1
  78. package/dist/adapters/mcp-app-html.js +1 -1
  79. package/dist/adapters/mcp-tools.cjs +1 -1
  80. package/dist/adapters/mcp-tools.js +3 -3
  81. package/dist/adapters/{mcp-transport-DpS_e0gL.js → mcp-transport-Cy6n4uj1.js} +1 -1
  82. package/dist/adapters/{mcp-transport-Bc7-KSG_.cjs → mcp-transport-DnLP5FPL.cjs} +1 -1
  83. package/dist/adapters/nextjs/index.cjs +1 -1
  84. package/dist/adapters/nextjs/index.js +5 -5
  85. package/dist/adapters/{openai-7064EJ1j.cjs → openai-BQl0yJCS.cjs} +1 -1
  86. package/dist/adapters/{openai-CnUBYFyY.js → openai-C4HrjyJj.js} +1 -1
  87. package/dist/adapters/{openai-DpGdZL3m.js → openai-D3Nt6Bj7.js} +1 -1
  88. package/dist/adapters/{openai-B0mByiYQ.cjs → openai-z1ai-G4Q.cjs} +1 -1
  89. package/dist/adapters/{utils-CN_bxSiq.js → utils-BaxFceDq.js} +6 -1
  90. package/dist/adapters/{utils-CvC1czqb.cjs → utils-a2p2B6x8.cjs} +2 -2
  91. package/dist/adapters/utils.cjs +1 -1
  92. package/dist/adapters/utils.js +1 -1
  93. package/dist/cjs/client/charts/chartConfigHelpers.d.ts +5 -0
  94. package/dist/cjs/client/components/AnalysisBuilder/types.d.ts +4 -0
  95. package/dist/cjs/client/components/AnalysisBuilder/utils/queryUtils.d.ts +6 -1
  96. package/dist/cjs/client/components/analyticsPortlet/usePortletQueryResults.d.ts +3 -1
  97. package/dist/cjs/client/hooks/queries/useCubeLoadQuery.d.ts +7 -0
  98. package/dist/cjs/client/hooks/queries/useMultiCubeLoadQuery.d.ts +7 -0
  99. package/dist/cjs/client/hooks/useAnalysisQuery.d.ts +6 -1
  100. package/dist/cjs/client/index.d.ts +2 -0
  101. package/dist/cjs/client/types.d.ts +5 -0
  102. package/dist/cjs/client/utils/gapFilling.d.ts +52 -0
  103. package/dist/cjs/client/utils/index.d.ts +1 -0
  104. package/dist/cjs/server/ai/query-schema.d.ts +1 -1
  105. package/dist/cjs/server/execution/result-post-processor.d.ts +4 -2
  106. package/dist/cjs/server/executor.d.ts +2 -0
  107. package/dist/cjs/server/gap-filler.d.ts +8 -43
  108. package/dist/cjs/server/types/core.d.ts +2 -0
  109. package/dist/cjs/server/types/cube.d.ts +12 -0
  110. package/dist/cjs/server/types/metadata.d.ts +5 -0
  111. package/dist/cjs/server/types/query.d.ts +2 -1
  112. package/dist/client/charts/chartConfigHelpers.d.ts +5 -0
  113. package/dist/client/charts.js +12 -12
  114. package/dist/client/chunks/{DashboardEditModal-5ZSP--FQ.js → DashboardEditModal-DifODH4h.js} +2360 -2548
  115. package/dist/client/chunks/DashboardEditModal-DifODH4h.js.map +1 -0
  116. package/dist/client/chunks/{DotStripChart-DTukhwG-.js → DotStripChart-B9IVCFPO.js} +3 -3
  117. package/dist/client/chunks/{DotStripChart-DTukhwG-.js.map → DotStripChart-B9IVCFPO.js.map} +1 -1
  118. package/dist/client/chunks/{ProportionBarChart-CPZ2cHxH.js → ProportionBarChart-DieF9AzP.js} +3 -3
  119. package/dist/client/chunks/{ProportionBarChart-CPZ2cHxH.js.map → ProportionBarChart-DieF9AzP.js.map} +1 -1
  120. package/dist/client/chunks/{RecordsTable-BC5l67Dc.js → RecordsTable-Mo3ai5_M.js} +4 -4
  121. package/dist/client/chunks/{RecordsTable-BC5l67Dc.js.map → RecordsTable-Mo3ai5_M.js.map} +1 -1
  122. package/dist/client/chunks/{RetentionCombinedChart-aj5xblfu.js → RetentionCombinedChart-Bie4ADyA.js} +3 -3
  123. package/dist/client/chunks/{RetentionCombinedChart-aj5xblfu.js.map → RetentionCombinedChart-Bie4ADyA.js.map} +1 -1
  124. package/dist/client/chunks/{RetentionHeatmap-CKckuEMF.js → RetentionHeatmap-qstIAx5B.js} +2 -2
  125. package/dist/client/chunks/{RetentionHeatmap-CKckuEMF.js.map → RetentionHeatmap-qstIAx5B.js.map} +1 -1
  126. package/dist/client/chunks/{analysis-builder-Db4umQtd.js → analysis-builder-D78aDJoL.js} +41 -41
  127. package/dist/client/chunks/analysis-builder-D78aDJoL.js.map +1 -0
  128. package/dist/client/chunks/{analysis-builder-shared-BEvvX6ln.js → analysis-builder-shared-CsIs4-Xf.js} +538 -523
  129. package/dist/client/chunks/analysis-builder-shared-CsIs4-Xf.js.map +1 -0
  130. package/dist/client/chunks/{chart-activity-grid-Bbc58UJD.js → chart-activity-grid-Ly_-2B-f.js} +7 -2
  131. package/dist/client/chunks/chart-activity-grid-Ly_-2B-f.js.map +1 -0
  132. package/dist/client/chunks/{chart-area-9uCXIvMN.js → chart-area-D3l-71Wy.js} +2 -2
  133. package/dist/client/chunks/{chart-area-9uCXIvMN.js.map → chart-area-D3l-71Wy.js.map} +1 -1
  134. package/dist/client/chunks/{chart-bar-C5a1T9Ce.js → chart-bar-BaTyQOqs.js} +3 -3
  135. package/dist/client/chunks/{chart-bar-C5a1T9Ce.js.map → chart-bar-BaTyQOqs.js.map} +1 -1
  136. package/dist/client/chunks/{chart-box-plot-BbBrZsaJ.js → chart-box-plot-Cem6PHjz.js} +2 -2
  137. package/dist/client/chunks/{chart-box-plot-BbBrZsaJ.js.map → chart-box-plot-Cem6PHjz.js.map} +1 -1
  138. package/dist/client/chunks/{chart-bubble-dt5ESb7m.js → chart-bubble-DFlfqCDG.js} +2 -2
  139. package/dist/client/chunks/{chart-bubble-dt5ESb7m.js.map → chart-bubble-DFlfqCDG.js.map} +1 -1
  140. package/dist/client/chunks/{chart-candlestick-2A2J_NsK.js → chart-candlestick-BkAFBXtZ.js} +2 -2
  141. package/dist/client/chunks/{chart-candlestick-2A2J_NsK.js.map → chart-candlestick-BkAFBXtZ.js.map} +1 -1
  142. package/dist/client/chunks/{chart-config-area-DsrZCIwF.js → chart-config-area-BnsRQ-MY.js} +35 -14
  143. package/dist/client/chunks/chart-config-area-BnsRQ-MY.js.map +1 -0
  144. package/dist/client/chunks/{chart-config-bar-BixSs43E.js → chart-config-bar-G2HJJBVV.js} +8 -7
  145. package/dist/client/chunks/chart-config-bar-G2HJJBVV.js.map +1 -0
  146. package/dist/client/chunks/{chart-config-kpi-delta-Cl7k6jTj.js → chart-config-kpi-delta-BIAq1Ftg.js} +2 -2
  147. package/dist/client/chunks/{chart-config-kpi-delta-Cl7k6jTj.js.map → chart-config-kpi-delta-BIAq1Ftg.js.map} +1 -1
  148. package/dist/client/chunks/{chart-config-kpi-number-DCcnANWC.js → chart-config-kpi-number-Dgc4gIYu.js} +2 -2
  149. package/dist/client/chunks/{chart-config-kpi-number-DCcnANWC.js.map → chart-config-kpi-number-Dgc4gIYu.js.map} +1 -1
  150. package/dist/client/chunks/{chart-config-line-CBF9Px9b.js → chart-config-line-DLkRs1Zr.js} +9 -8
  151. package/dist/client/chunks/chart-config-line-DLkRs1Zr.js.map +1 -0
  152. package/dist/client/chunks/{chart-config-pie-DZLa6Eqm.js → chart-config-pie-XrHim0C8.js} +2 -2
  153. package/dist/client/chunks/{chart-config-pie-DZLa6Eqm.js.map → chart-config-pie-XrHim0C8.js.map} +1 -1
  154. package/dist/client/chunks/{chart-config-radar-DR6vHHyd.js → chart-config-radar-xNS6Juqc.js} +2 -2
  155. package/dist/client/chunks/{chart-config-radar-DR6vHHyd.js.map → chart-config-radar-xNS6Juqc.js.map} +1 -1
  156. package/dist/client/chunks/{chart-config-radial-bar-DVFou4fB.js → chart-config-radial-bar-ChUChsEe.js} +2 -2
  157. package/dist/client/chunks/{chart-config-radial-bar-DVFou4fB.js.map → chart-config-radial-bar-ChUChsEe.js.map} +1 -1
  158. package/dist/client/chunks/{chart-config-tree-map-Uhise6Bx.js → chart-config-tree-map-CnrJ7OC1.js} +2 -2
  159. package/dist/client/chunks/{chart-config-tree-map-Uhise6Bx.js.map → chart-config-tree-map-CnrJ7OC1.js.map} +1 -1
  160. package/dist/client/chunks/{chart-data-table-zSjYEy0r.js → chart-data-table-Cxd0cdAl.js} +36 -36
  161. package/dist/client/chunks/{chart-data-table-zSjYEy0r.js.map → chart-data-table-Cxd0cdAl.js.map} +1 -1
  162. package/dist/client/chunks/{chart-funnel-CuOSCsbt.js → chart-funnel-71Kn4eeF.js} +2 -2
  163. package/dist/client/chunks/{chart-funnel-CuOSCsbt.js.map → chart-funnel-71Kn4eeF.js.map} +1 -1
  164. package/dist/client/chunks/{chart-gauge-DxKeqCCD.js → chart-gauge-BddS_9oS.js} +3 -3
  165. package/dist/client/chunks/{chart-gauge-DxKeqCCD.js.map → chart-gauge-BddS_9oS.js.map} +1 -1
  166. package/dist/client/chunks/{chart-heat-map-C1dvW-ov.js → chart-heat-map-BQIsrn8m.js} +3 -3
  167. package/dist/client/chunks/{chart-heat-map-C1dvW-ov.js.map → chart-heat-map-BQIsrn8m.js.map} +1 -1
  168. package/dist/client/chunks/{chart-kpi-delta-CgehGc9d.js → chart-kpi-delta-DndbqdZT.js} +3 -3
  169. package/dist/client/chunks/{chart-kpi-delta-CgehGc9d.js.map → chart-kpi-delta-DndbqdZT.js.map} +1 -1
  170. package/dist/client/chunks/{chart-kpi-number-C31-6A6m.js → chart-kpi-number-DAbfoHMt.js} +5 -5
  171. package/dist/client/chunks/{chart-kpi-number-C31-6A6m.js.map → chart-kpi-number-DAbfoHMt.js.map} +1 -1
  172. package/dist/client/chunks/{chart-kpi-text-D2ydQIEn.js → chart-kpi-text-D8oQgpxL.js} +3 -3
  173. package/dist/client/chunks/{chart-kpi-text-D2ydQIEn.js.map → chart-kpi-text-D8oQgpxL.js.map} +1 -1
  174. package/dist/client/chunks/{chart-line-CjW9Yo03.js → chart-line-BNqjUowg.js} +3 -3
  175. package/dist/client/chunks/{chart-line-CjW9Yo03.js.map → chart-line-BNqjUowg.js.map} +1 -1
  176. package/dist/client/chunks/{chart-markdown-Cgs62had.js → chart-markdown-DtgpU3xd.js} +2 -2
  177. package/dist/client/chunks/{chart-markdown-Cgs62had.js.map → chart-markdown-DtgpU3xd.js.map} +1 -1
  178. package/dist/client/chunks/{chart-measure-profile-Cg39gYjR.js → chart-measure-profile-D5nZMWlI.js} +3 -3
  179. package/dist/client/chunks/{chart-measure-profile-Cg39gYjR.js.map → chart-measure-profile-D5nZMWlI.js.map} +1 -1
  180. package/dist/client/chunks/{chart-pie-BTb5nKd7.js → chart-pie-D8r9HCZ4.js} +3 -3
  181. package/dist/client/chunks/{chart-pie-BTb5nKd7.js.map → chart-pie-D8r9HCZ4.js.map} +1 -1
  182. package/dist/client/chunks/{chart-radar-8384sPlX.js → chart-radar-R4PuCIWp.js} +3 -3
  183. package/dist/client/chunks/{chart-radar-8384sPlX.js.map → chart-radar-R4PuCIWp.js.map} +1 -1
  184. package/dist/client/chunks/{chart-radial-bar-CuBmmOTU.js → chart-radial-bar-hmrSFa6O.js} +3 -3
  185. package/dist/client/chunks/{chart-radial-bar-CuBmmOTU.js.map → chart-radial-bar-hmrSFa6O.js.map} +1 -1
  186. package/dist/client/chunks/{chart-sankey-CoIuG7Nu.js → chart-sankey-CFXPybny.js} +2 -2
  187. package/dist/client/chunks/{chart-sankey-CoIuG7Nu.js.map → chart-sankey-CFXPybny.js.map} +1 -1
  188. package/dist/client/chunks/{chart-scatter-Bdj95OeV.js → chart-scatter-CH82md0L.js} +3 -3
  189. package/dist/client/chunks/{chart-scatter-Bdj95OeV.js.map → chart-scatter-CH82md0L.js.map} +1 -1
  190. package/dist/client/chunks/{chart-sunburst-CuG8520_.js → chart-sunburst-CTj95eEC.js} +3 -3
  191. package/dist/client/chunks/{chart-sunburst-CuG8520_.js.map → chart-sunburst-CTj95eEC.js.map} +1 -1
  192. package/dist/client/chunks/{chart-tree-map-CtJADX87.js → chart-tree-map-CmysE4bF.js} +3 -3
  193. package/dist/client/chunks/{chart-tree-map-CtJADX87.js.map → chart-tree-map-CmysE4bF.js.map} +1 -1
  194. package/dist/client/chunks/{chart-waterfall-D430fO48.js → chart-waterfall-Bv1mPvlB.js} +3 -3
  195. package/dist/client/chunks/{chart-waterfall-D430fO48.js.map → chart-waterfall-Bv1mPvlB.js.map} +1 -1
  196. package/dist/client/chunks/{charts-core-BSmlKmf0.js → charts-core-BdEQgbqN.js} +2 -2
  197. package/dist/client/chunks/{charts-core-BSmlKmf0.js.map → charts-core-BdEQgbqN.js.map} +1 -1
  198. package/dist/client/chunks/charts-loader-DoLQqFXg.js +87 -0
  199. package/dist/client/chunks/{charts-loader-Bz9yHkW1.js.map → charts-loader-DoLQqFXg.js.map} +1 -1
  200. package/dist/client/chunks/gapFilling-DKBRHcQL.js +391 -0
  201. package/dist/client/chunks/gapFilling-DKBRHcQL.js.map +1 -0
  202. package/dist/client/chunks/{nl-NL-BrqrWoAj.js → nl-NL-DVZXf8U7.js} +6 -1
  203. package/dist/client/chunks/nl-NL-DVZXf8U7.js.map +1 -0
  204. package/dist/client/chunks/{schema-visualization-D2NvjQny.js → schema-visualization-MlRrcJQH.js} +3 -3
  205. package/dist/client/chunks/{schema-visualization-D2NvjQny.js.map → schema-visualization-MlRrcJQH.js.map} +1 -1
  206. package/dist/client/chunks/{useDirtyStateTracking-DL_AnCWZ.js → useDirtyStateTracking-DUyYwuN_.js} +318 -293
  207. package/dist/client/chunks/useDirtyStateTracking-DUyYwuN_.js.map +1 -0
  208. package/dist/client/chunks/{useExplainAI-CdPWtj7E.js → useExplainAI-BtoS3tb5.js} +4 -4
  209. package/dist/client/chunks/{useExplainAI-CdPWtj7E.js.map → useExplainAI-BtoS3tb5.js.map} +1 -1
  210. package/dist/client/chunks/utils-CToHkuhU.js.map +1 -1
  211. package/dist/client/chunks/{vendor-Bpaolt6h.js → vendor-BfBpNmMa.js} +2 -2
  212. package/dist/client/chunks/{vendor-Bpaolt6h.js.map → vendor-BfBpNmMa.js.map} +1 -1
  213. package/dist/client/components/AnalysisBuilder/types.d.ts +4 -0
  214. package/dist/client/components/AnalysisBuilder/utils/queryUtils.d.ts +6 -1
  215. package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +3 -1
  216. package/dist/client/components.js +2 -2
  217. package/dist/client/hooks/queries/useCubeLoadQuery.d.ts +7 -0
  218. package/dist/client/hooks/queries/useMultiCubeLoadQuery.d.ts +7 -0
  219. package/dist/client/hooks/useAnalysisQuery.d.ts +6 -1
  220. package/dist/client/hooks.js +3 -3
  221. package/dist/client/icons.js +1 -1
  222. package/dist/client/index.d.ts +2 -0
  223. package/dist/client/index.js +193 -192
  224. package/dist/client/index.js.map +1 -1
  225. package/dist/client/providers.js +1 -1
  226. package/dist/client/schema.js +1 -1
  227. package/dist/client/types.d.ts +5 -0
  228. package/dist/client/utils/gapFilling.d.ts +52 -0
  229. package/dist/client/utils/index.d.ts +1 -0
  230. package/dist/client/utils.js +9 -8
  231. package/dist/client/utils.js.map +1 -1
  232. package/dist/client-bundle-stats.html +1 -1
  233. package/dist/mcp-app/mcp-app.html +101 -101
  234. package/dist/server/ai/query-schema.d.ts +1 -1
  235. package/dist/server/chartConfigHelpers-BhME7ow_.cjs +1 -0
  236. package/dist/server/{chartConfigHelpers-BsnbxA2c.js → chartConfigHelpers-BsviVhEw.js} +27 -7
  237. package/dist/server/execution/result-post-processor.d.ts +4 -2
  238. package/dist/server/executor.d.ts +2 -0
  239. package/dist/server/gap-filler.d.ts +8 -43
  240. package/dist/server/index.cjs +34 -34
  241. package/dist/server/index.js +2049 -2030
  242. package/dist/server/types/core.d.ts +2 -0
  243. package/dist/server/types/cube.d.ts +12 -0
  244. package/dist/server/types/metadata.d.ts +5 -0
  245. package/dist/server/types/query.d.ts +2 -1
  246. package/package.json +1 -1
  247. package/dist/adapters/ActivityGridChart.config-BpGv0FYq.js +0 -2
  248. package/dist/adapters/ActivityGridChart.config-DWs9dRl7.cjs +0 -1
  249. package/dist/adapters/AreaChart.config-Cn8nAQqj.cjs +0 -1
  250. package/dist/adapters/AreaChart.config-NDMkAi9w.js +0 -2
  251. package/dist/adapters/BarChart.config-CuGCupRX.cjs +0 -1
  252. package/dist/adapters/BarChart.config-D4Ct_ZuS.js +0 -2
  253. package/dist/adapters/BoxPlotChart.config-BEHZDgrz.js +0 -2
  254. package/dist/adapters/BoxPlotChart.config-DnC3xk7q.cjs +0 -1
  255. package/dist/adapters/BubbleChart.config-D0ouKOKS.cjs +0 -1
  256. package/dist/adapters/BubbleChart.config-Du8aEfdQ.js +0 -2
  257. package/dist/adapters/CandlestickChart.config-B0B6dKYG.cjs +0 -1
  258. package/dist/adapters/CandlestickChart.config-DBilZaFc.js +0 -2
  259. package/dist/adapters/DataTable.config-BXalzUPO.cjs +0 -1
  260. package/dist/adapters/DataTable.config-CF8BzQHu.js +0 -2
  261. package/dist/adapters/DotStripChart.config-0ggseDij.cjs +0 -1
  262. package/dist/adapters/DotStripChart.config-CfHh0XSW.js +0 -2
  263. package/dist/adapters/FunnelChart.config-AcSpen_Q.js +0 -2
  264. package/dist/adapters/FunnelChart.config-D6k89qDc.cjs +0 -1
  265. package/dist/adapters/GaugeChart.config-B5BcrEvW.cjs +0 -1
  266. package/dist/adapters/GaugeChart.config-BChbha74.js +0 -2
  267. package/dist/adapters/HeatMapChart.config-BgkP8kiW.js +0 -2
  268. package/dist/adapters/HeatMapChart.config-Crq7vBwj.cjs +0 -1
  269. package/dist/adapters/KpiDelta.config-Cqu1WOkV.js +0 -2
  270. package/dist/adapters/KpiDelta.config-edWLG1bM.cjs +0 -1
  271. package/dist/adapters/KpiNumber.config-BLkE67us.cjs +0 -1
  272. package/dist/adapters/KpiNumber.config-DNsH72Rs.js +0 -2
  273. package/dist/adapters/KpiText.config-CAnLZYht.cjs +0 -1
  274. package/dist/adapters/KpiText.config-CQGd10Hj.js +0 -2
  275. package/dist/adapters/LineChart.config-C7l_xff-.js +0 -2
  276. package/dist/adapters/LineChart.config-DOxwtnfG.cjs +0 -1
  277. package/dist/adapters/MarkdownChart.config-BV5j1oJl.cjs +0 -1
  278. package/dist/adapters/MarkdownChart.config-CBkJAEpW.js +0 -2
  279. package/dist/adapters/MeasureProfileChart.config-CyyFz-x_.cjs +0 -1
  280. package/dist/adapters/MeasureProfileChart.config-VIvr7lq6.js +0 -2
  281. package/dist/adapters/PieChart.config-BP8OlSJ4.js +0 -2
  282. package/dist/adapters/PieChart.config-BaMxIlBa.cjs +0 -1
  283. package/dist/adapters/ProportionBarChart.config-CtZaP8Xn.js +0 -2
  284. package/dist/adapters/ProportionBarChart.config-DAyEQ8Pn.cjs +0 -1
  285. package/dist/adapters/RadarChart.config-CG07QZUT.cjs +0 -1
  286. package/dist/adapters/RadarChart.config-DJJuD-Tb.js +0 -2
  287. package/dist/adapters/RadialBarChart.config-BNgzWkot.cjs +0 -1
  288. package/dist/adapters/RadialBarChart.config-DVM_jg9B.js +0 -2
  289. package/dist/adapters/RecordsTable.config-BEQmKQ-S.cjs +0 -1
  290. package/dist/adapters/RecordsTable.config-d4s8HV9m.js +0 -2
  291. package/dist/adapters/RetentionCombinedChart.config-DJ4N-ffd.cjs +0 -1
  292. package/dist/adapters/RetentionCombinedChart.config-DV1h3rW2.js +0 -2
  293. package/dist/adapters/RetentionHeatmap.config-CIJDenRg.cjs +0 -1
  294. package/dist/adapters/RetentionHeatmap.config-P3VVn3QJ.js +0 -2
  295. package/dist/adapters/SankeyChart.config-CQ89DYf7.cjs +0 -1
  296. package/dist/adapters/SankeyChart.config-CfMmdmXJ.js +0 -2
  297. package/dist/adapters/ScatterChart.config-C4zrFpF-.cjs +0 -1
  298. package/dist/adapters/ScatterChart.config-DaJ3LVWH.js +0 -2
  299. package/dist/adapters/SunburstChart.config-1ZRhfGr0.cjs +0 -1
  300. package/dist/adapters/SunburstChart.config-DHgrSIkQ.js +0 -2
  301. package/dist/adapters/TreeMapChart.config-Cy3sAsJP.js +0 -2
  302. package/dist/adapters/TreeMapChart.config-D365WWEK.cjs +0 -1
  303. package/dist/adapters/WaterfallChart.config-DYEf1vQT.js +0 -2
  304. package/dist/adapters/WaterfallChart.config-s8pICbm8.cjs +0 -1
  305. package/dist/adapters/chartConfigHelpers-BZMu_1EP.cjs +0 -1
  306. package/dist/adapters/handler-B78akmC_.cjs +0 -16
  307. package/dist/adapters/mcp-app-html-C1fEW5oE.js +0 -5
  308. package/dist/adapters/mcp-app-html-CGk4ubE0.cjs +0 -1
  309. package/dist/client/chunks/DashboardEditModal-5ZSP--FQ.js.map +0 -1
  310. package/dist/client/chunks/analysis-builder-Db4umQtd.js.map +0 -1
  311. package/dist/client/chunks/analysis-builder-shared-BEvvX6ln.js.map +0 -1
  312. package/dist/client/chunks/chart-activity-grid-Bbc58UJD.js.map +0 -1
  313. package/dist/client/chunks/chart-config-area-DsrZCIwF.js.map +0 -1
  314. package/dist/client/chunks/chart-config-bar-BixSs43E.js.map +0 -1
  315. package/dist/client/chunks/chart-config-line-CBF9Px9b.js.map +0 -1
  316. package/dist/client/chunks/charts-loader-Bz9yHkW1.js +0 -87
  317. package/dist/client/chunks/nl-NL-BrqrWoAj.js.map +0 -1
  318. package/dist/client/chunks/useDirtyStateTracking-DL_AnCWZ.js.map +0 -1
  319. package/dist/server/chartConfigHelpers-BZMu_1EP.cjs +0 -1
@@ -1,53 +1,56 @@
1
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./vendor-Bpaolt6h.js";
2
- import { A as s, B as c, d as l, u, y as d } from "./chart-data-table-zSjYEy0r.js";
3
- import { A as f, C as p, D as m, E as h, F as g, T as _, _ as v, at as y, b, d as x, f as S, ot as C, st as w, u as T, v as E, w as D, x as O, y as k } from "./DashboardEditModal-5ZSP--FQ.js";
4
- import { a as ee, s as A, t as te } from "./retention-ChW9jYdy.js";
5
- import { O as j, k as M } from "./dashboardExport-Db3rmUP1.js";
6
- import { A as N, D as ne, F as re, I as ie, M as ae, N as P, O as oe, P as se, S as F, T as I, a as L, d as ce, j as le, k as R, l as ue, n as de, r as fe, s as pe } from "./useDirtyStateTracking-DL_AnCWZ.js";
7
- import { B as me, F as z } from "./chart-activity-grid-Bbc58UJD.js";
8
- import { a as he, i as ge } from "./useExplainAI-CdPWtj7E.js";
9
- import { r as _e, s as ve } from "./chart-funnel-CuOSCsbt.js";
10
- import { n as ye } from "./charts-core-BSmlKmf0.js";
11
- import B, { createContext as be, memo as xe, useCallback as V, useContext as Se, useEffect as H, useMemo as U, useRef as W, useState as G } from "react";
12
- 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-BfBpNmMa.js";
2
+ import { A as s, B as c, d as l, u, y as d } from "./chart-data-table-Cxd0cdAl.js";
3
+ import { C as f, D as p, M as m, _ as h, b as g, d as _, f as v, it as y, nt as b, rt as x, u as S, v as C, w, x as T, y as E } from "./DashboardEditModal-DifODH4h.js";
4
+ import { a as D, s as O, t as k } from "./retention-ChW9jYdy.js";
5
+ import { O as A, k as j } from "./dashboardExport-Db3rmUP1.js";
6
+ import { A as ee, D as M, F as N, I as te, M as P, N as ne, O as re, P as ie, S as F, T as I, a as ae, d as oe, j as L, k as R, l as se, n as ce, r as le, s as ue } from "./useDirtyStateTracking-DUyYwuN_.js";
7
+ import { B as de, F as z } from "./chart-activity-grid-Ly_-2B-f.js";
8
+ import { a as fe, i as B, r as pe } from "./gapFilling-DKBRHcQL.js";
9
+ import { a as me, i as he } from "./useExplainAI-BtoS3tb5.js";
10
+ import { r as ge, s as _e } from "./chart-funnel-71Kn4eeF.js";
11
+ import { n as ve } from "./charts-core-BdEQgbqN.js";
12
+ import V, { createContext as ye, memo as be, useCallback as H, useContext as xe, useEffect as U, useMemo as W, useRef as G, useState as K } from "react";
13
+ import { Fragment as Se, jsx as q, jsxs as J } from "react/jsx-runtime";
13
14
  //#region src/client/components/AnalysisBuilder/utils/filterUtils.ts
14
15
  function Ce(e, t) {
15
- let n = le(t, e);
16
+ let n = L(t, e);
16
17
  if (!n?.dateRange) return;
17
- let r = _(n.dateRange);
18
+ let r = fe(n.dateRange);
18
19
  if (!r) return;
19
- let i = p(r.start, r.end);
20
- return [[D(r.start), D(r.end)], [D(i.start), D(i.end)]];
20
+ let i = pe(r.start, r.end);
21
+ return [[B(r.start), B(r.end)], [B(i.start), B(i.end)]];
21
22
  }
22
23
  function we(e, t) {
23
- return re(e, t, "inDateRange");
24
+ return N(e, t, "inDateRange");
24
25
  }
25
26
  //#endregion
26
27
  //#region src/client/components/AnalysisBuilder/utils/queryUtils.ts
27
- function Te(e, t, n, r, i = !1, a, o = !1) {
28
- let s = t.filter((e) => e.isTimeDimension && e.enableComparison).map((e) => e.field), c = n;
29
- if (!i) for (let e of s) c = we(c, e);
30
- c = c.filter((e) => y(e));
31
- let l = {
28
+ function Te(e, t, n, r, i = !1, a, o = !1, s) {
29
+ let c = (e) => e.isTimeDimension && e.enableComparison && !o, l = t.filter(c).map((e) => e.field), u = n;
30
+ if (!i) for (let e of l) u = we(u, e);
31
+ u = u.filter((e) => b(e));
32
+ let d = {
32
33
  measures: e.map((e) => e.field),
33
34
  dimensions: t.filter((e) => !e.isTimeDimension).map((e) => e.field),
34
35
  timeDimensions: t.filter((e) => e.isTimeDimension).map((e) => {
35
36
  let t = {
36
37
  dimension: e.field,
37
- granularity: e.granularity || "day"
38
+ granularity: e.granularity || "day",
39
+ ...e.fillMissingDates !== void 0 && !(o && e.fillMissingDates) && { fillMissingDates: e.fillMissingDates }
38
40
  };
39
- if (e.enableComparison) {
41
+ if (c(e)) {
40
42
  let r = Ce(e.field, n);
41
43
  r && (t.compareDateRange = r);
42
44
  }
43
45
  return t;
44
46
  }),
45
- filters: c.length > 0 ? c : void 0,
47
+ filters: u.length > 0 ? u : void 0,
46
48
  order: r && Object.keys(r).length > 0 ? r : void 0,
47
49
  limit: a ?? void 0,
48
- ungrouped: o || void 0
50
+ ungrouped: o || void 0,
51
+ ...s !== void 0 && { fillMissingDatesValue: s }
49
52
  };
50
- return l.measures?.length === 0 && delete l.measures, l.dimensions?.length === 0 && delete l.dimensions, l.timeDimensions?.length === 0 && delete l.timeDimensions, l;
53
+ return d.measures?.length === 0 && delete d.measures, d.dimensions?.length === 0 && delete d.dimensions, d.timeDimensions?.length === 0 && delete d.timeDimensions, d;
51
54
  }
52
55
  function Y() {
53
56
  return {
@@ -102,14 +105,14 @@ function ke({ filter: e, dateRange: t }) {
102
105
  }), /* @__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" : ""}` })]
103
106
  }), o && /* @__PURE__ */ q("div", {
104
107
  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",
105
- children: E.map((e) => /* @__PURE__ */ q("button", {
108
+ children: C.map((e) => /* @__PURE__ */ q("button", {
106
109
  onClick: () => c(e.value),
107
110
  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"}`,
108
111
  children: n(e.label)
109
112
  }, e.value))
110
113
  })]
111
114
  }),
112
- ne(r) && /* @__PURE__ */ J("div", {
115
+ M(r) && /* @__PURE__ */ J("div", {
113
116
  className: "dc:flex dc:items-center dc:gap-2",
114
117
  children: [/* @__PURE__ */ q("input", {
115
118
  type: "number",
@@ -289,66 +292,66 @@ function Me({ field: e, dateRange: t, combo: n, inputs: r }) {
289
292
  //#region src/client/components/AnalysisBuilder/FilterConfigModal.tsx
290
293
  var Ne = d("close"), Pe = d("chevronDown"), Fe = d("dimension"), Ie = d("timeDimension"), Le = d("measure");
291
294
  function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i }) {
292
- let { t: a } = z(), [o, s] = G(e), [c, l] = G(!1), [u, d] = G(!1), [f, p] = G(!1), [m, h] = G("this_month"), [g, _] = G(1), [y, x] = G(""), [S, T] = G(null), [D, k] = G(-1), ee = W(null), A = W(null), te = de(y, 300), j = b(o.member, t), M = j?.field.type || "string", N = M === "time", re = j?.fieldType === "measure", ie = j?.fieldType === "dimension", ae = O(o.member, t), P = C[o.operator], oe = w(M), se = N && o.operator === "inDateRange", F = V(() => [
295
+ let { t: a } = z(), [o, s] = K(e), [c, l] = K(!1), [u, d] = K(!1), [f, p] = K(!1), [m, _] = K("this_month"), [v, b] = K(1), [S, w] = K(""), [E, D] = K(null), [O, k] = K(-1), A = G(null), j = G(null), ee = ce(S, 300), N = g(o.member, t), te = N?.field.type || "string", P = te === "time", ne = N?.fieldType === "measure", re = N?.fieldType === "dimension", ie = T(o.member, t), F = x[o.operator], ae = y(te), oe = P && o.operator === "inDateRange", L = H(() => [
293
296
  "equals",
294
297
  "notEquals",
295
298
  "in",
296
299
  "notIn"
297
- ].includes(o.operator) && ie && !N, [
300
+ ].includes(o.operator) && re && !P, [
298
301
  o.operator,
299
- ie,
300
- N
301
- ])(), { values: L, loading: ce, error: le, searchValues: R } = fe(o.member, F);
302
- H(() => {
302
+ re,
303
+ P
304
+ ])(), { values: R, loading: se, error: ue, searchValues: de } = le(o.member, L);
305
+ U(() => {
303
306
  if (!i) {
304
- T(null);
307
+ D(null);
305
308
  return;
306
309
  }
307
310
  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));
308
- T(r ? {
311
+ D(r ? {
309
312
  bottom: window.innerHeight - e.top + 8,
310
313
  left: a
311
314
  } : {
312
315
  top: e.bottom + 8,
313
316
  left: a
314
317
  });
315
- }, [i]), H(() => {
318
+ }, [i]), U(() => {
316
319
  let e = (e) => {
317
- ee.current && !ee.current.contains(e.target) && (l(!1), d(!1), p(!1));
320
+ A.current && !A.current.contains(e.target) && (l(!1), d(!1), p(!1));
318
321
  };
319
322
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
320
- }, []), H(() => {
321
- u && F && R && R("", !0), u || k(-1);
323
+ }, []), U(() => {
324
+ u && L && de && de("", !0), u || k(-1);
322
325
  }, [
323
326
  u,
324
- F,
325
- R
326
- ]), H(() => {
327
- if (D >= 0 && A.current) {
328
- let e = A.current.children[D];
327
+ L,
328
+ de
329
+ ]), U(() => {
330
+ if (O >= 0 && j.current) {
331
+ let e = j.current.children[O];
329
332
  e && e.scrollIntoView({ block: "nearest" });
330
333
  }
331
- }, [D]), H(() => {
332
- u && F && R && te !== void 0 && R(te);
334
+ }, [O]), U(() => {
335
+ u && L && de && ee !== void 0 && de(ee);
333
336
  }, [
334
- te,
337
+ ee,
335
338
  u,
336
- F,
337
- R
338
- ]), H(() => {
339
- if (!se) return;
340
- let e = v(o.dateRange);
341
- e && (h(e.rangeType), e.numberValue !== void 0 && _(e.numberValue));
342
- }, [o.dateRange, se]);
343
- let ue = V((e) => {
339
+ L,
340
+ de
341
+ ]), U(() => {
342
+ if (!oe) return;
343
+ let e = h(o.dateRange);
344
+ e && (_(e.rangeType), e.numberValue !== void 0 && b(e.numberValue));
345
+ }, [o.dateRange, oe]);
346
+ let fe = H((e) => {
344
347
  s({
345
348
  member: o.member,
346
349
  operator: e,
347
350
  values: []
348
351
  }), l(!1);
349
- }, [o.member]), pe = V((e, t) => {
352
+ }, [o.member]), B = H((e, t) => {
350
353
  let n = t?.shiftKey ?? !1, r = o.values || [];
351
- P?.supportsMultipleValues ? (r.includes(e) ? s({
354
+ F?.supportsMultipleValues ? (r.includes(e) ? s({
352
355
  ...o,
353
356
  values: r.filter((t) => t !== e)
354
357
  }) : s({
@@ -357,28 +360,28 @@ function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
357
360
  }), n || d(!1)) : (s({
358
361
  ...o,
359
362
  values: [e]
360
- }), d(!1)), x(""), k(-1);
361
- }, [o, P?.supportsMultipleValues]), me = V((e) => {
363
+ }), d(!1)), w(""), k(-1);
364
+ }, [o, F?.supportsMultipleValues]), pe = H((e) => {
362
365
  let t = (o.values || []).filter((t) => t !== e);
363
366
  s({
364
367
  ...o,
365
368
  values: t
366
369
  });
367
- }, [o]), he = V((e) => {
368
- let t = Ee(e.key, u, L.length, D);
370
+ }, [o]), me = H((e) => {
371
+ let t = Ee(e.key, u, R.length, O);
369
372
  if (t.type !== "none") {
370
373
  if (e.preventDefault(), t.type === "highlight") return k(t.index);
371
- if (t.type === "select") return pe(L[t.index], { shiftKey: e.shiftKey });
374
+ if (t.type === "select") return B(R[t.index], { shiftKey: e.shiftKey });
372
375
  d(!1), k(-1);
373
376
  }
374
377
  }, [
375
378
  u,
376
- L,
377
- D,
378
- pe
379
- ]), ge = V((e) => {
379
+ R,
380
+ O,
381
+ B
382
+ ]), he = H((e) => {
380
383
  let t = e.target.value;
381
- if (P?.valueType === "number") {
384
+ if (F?.valueType === "number") {
382
385
  let e = parseFloat(t);
383
386
  isNaN(e) ? (t === "" || t === "-") && s({
384
387
  ...o,
@@ -391,110 +394,110 @@ function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
391
394
  ...o,
392
395
  values: t ? [t] : []
393
396
  });
394
- }, [o, P?.valueType]), _e = V((e) => {
397
+ }, [o, F?.valueType]), ge = H((e) => {
395
398
  let t = parseFloat(e.target.value), n = [isNaN(t) ? "" : t, (o.values?.length >= 2 ? o.values : ["", ""])[1]].filter((e) => e !== "");
396
399
  s({
397
400
  ...o,
398
401
  values: n
399
402
  });
400
- }, [o]), ve = V((e) => {
403
+ }, [o]), _e = H((e) => {
401
404
  let t = parseFloat(e.target.value), n = [(o.values?.length >= 2 ? o.values : ["", ""])[0], isNaN(t) ? "" : t].filter((e) => e !== "");
402
405
  s({
403
406
  ...o,
404
407
  values: n
405
408
  });
406
- }, [o]), ye = V((e) => {
409
+ }, [o]), ve = H((e) => {
407
410
  let t = e.target.value;
408
411
  s({
409
412
  ...o,
410
413
  values: t ? [t] : []
411
414
  });
412
- }, [o]), B = V((e) => {
413
- h(e), p(!1);
415
+ }, [o]), V = H((e) => {
416
+ _(e), p(!1);
414
417
  let t;
415
418
  if (e === "custom") {
416
419
  let e = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
417
420
  t = [e, e];
418
- } else t = ne(e) ? I(e, g) : I(e);
421
+ } else t = M(e) ? I(e, v) : I(e);
419
422
  s({
420
423
  ...o,
421
424
  dateRange: t
422
425
  });
423
- }, [o, g]), be = V((e) => {
424
- if (_(e), ne(m)) {
426
+ }, [o, v]), ye = H((e) => {
427
+ if (b(e), M(m)) {
425
428
  let t = I(m, e);
426
429
  s({
427
430
  ...o,
428
431
  dateRange: t
429
432
  });
430
433
  }
431
- }, [o, m]), xe = V((e) => {
434
+ }, [o, m]), be = H((e) => {
432
435
  let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : [o.dateRange || "", ""])[1] || t;
433
436
  s({
434
437
  ...o,
435
438
  dateRange: [t, n]
436
439
  });
437
- }, [o]), Se = V((e) => {
440
+ }, [o]), xe = H((e) => {
438
441
  let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : ["", o.dateRange || ""])[0] || t;
439
442
  s({
440
443
  ...o,
441
444
  dateRange: [n, t]
442
445
  });
443
- }, [o]), Ce = a(oe.find((e) => e.operator === o.operator)?.label || o.operator), we = a(E.find((e) => e.value === m)?.label || "filter.modal.selectRange"), Te = {
446
+ }, [o]), Ce = a(ae.find((e) => e.operator === o.operator)?.label || o.operator), we = a(C.find((e) => e.value === m)?.label || "filter.modal.selectRange"), Te = {
444
447
  filter: o,
445
- operatorMeta: P,
446
- shouldShowDateRange: se,
447
- shouldShowComboBox: F
448
+ operatorMeta: F,
449
+ shouldShowDateRange: oe,
450
+ shouldShowComboBox: L
448
451
  }, Y = {
449
452
  rangeType: m,
450
- numberValue: g,
453
+ numberValue: v,
451
454
  label: we,
452
455
  isOpen: f,
453
456
  onToggle: p,
454
- onRangeTypeChange: B,
455
- onNumberValueChange: be,
456
- onCustomStartDate: xe,
457
- onCustomEndDate: Se,
458
- onOpen: V(() => {
457
+ onRangeTypeChange: V,
458
+ onNumberValueChange: ye,
459
+ onCustomStartDate: be,
460
+ onCustomEndDate: xe,
461
+ onOpen: H(() => {
459
462
  l(!1), d(!1);
460
463
  }, [])
461
464
  }, De = {
462
465
  isOpen: u,
463
- options: L,
464
- loading: ce,
465
- error: le,
466
- searchText: y,
467
- highlightedIndex: D,
468
- listRef: A,
469
- onSearchTextChange: x,
466
+ options: R,
467
+ loading: se,
468
+ error: ue,
469
+ searchText: S,
470
+ highlightedIndex: O,
471
+ listRef: j,
472
+ onSearchTextChange: w,
470
473
  onHighlightedIndexChange: k,
471
- onSelect: pe,
472
- onRemove: me,
473
- onKeyDown: he,
474
- onOpen: V(() => {
474
+ onSelect: B,
475
+ onRemove: pe,
476
+ onKeyDown: me,
477
+ onOpen: H(() => {
475
478
  l(!1), p(!1), d((e) => !e);
476
479
  }, [])
477
- }, Oe = U(() => ({
478
- onBetweenStart: _e,
479
- onBetweenEnd: ve,
480
- onDate: ye,
481
- onDirect: ge
480
+ }, Oe = W(() => ({
481
+ onBetweenStart: ge,
482
+ onBetweenEnd: _e,
483
+ onDate: ve,
484
+ onDirect: he
482
485
  }), [
486
+ ge,
483
487
  _e,
484
488
  ve,
485
- ye,
486
- ge
487
- ]), ke = N ? Ie : re ? Le : Fe;
488
- return /* @__PURE__ */ q(K, { children: /* @__PURE__ */ q("div", {
489
- className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${S ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
489
+ he
490
+ ]), ke = P ? Ie : ne ? Le : Fe;
491
+ return /* @__PURE__ */ q(Se, { children: /* @__PURE__ */ q("div", {
492
+ className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${E ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
490
493
  onClick: r,
491
494
  children: /* @__PURE__ */ J("div", {
492
- ref: ee,
493
- className: S ? "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",
495
+ ref: A,
496
+ className: E ? "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",
494
497
  style: {
495
- ...S ? {
498
+ ...E ? {
496
499
  position: "fixed",
497
- ...S,
500
+ ...E,
498
501
  maxWidth: "400px",
499
502
  width: "100%"
500
503
  } : {},
@@ -523,7 +526,7 @@ function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
523
526
  className: "dc:flex dc:items-center dc:gap-2 dc:p-3 bg-dc-surface-secondary dc:rounded-sm",
524
527
  children: [/* @__PURE__ */ q(ke, { className: "dc:w-5 dc:h-5 text-dc-filter-text" }), /* @__PURE__ */ q("span", {
525
528
  className: "dc:text-sm dc:font-medium text-dc-text",
526
- children: ae
529
+ children: ie
527
530
  })]
528
531
  })] }),
529
532
  /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q("label", {
@@ -542,8 +545,8 @@ function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
542
545
  }), /* @__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" : ""}` })]
543
546
  }), c && /* @__PURE__ */ q("div", {
544
547
  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",
545
- children: oe.map((e) => /* @__PURE__ */ q("button", {
546
- onClick: () => ue(e.operator),
548
+ children: ae.map((e) => /* @__PURE__ */ q("button", {
549
+ onClick: () => fe(e.operator),
547
550
  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"}`,
548
551
  children: a(e.label)
549
552
  }, e.operator))
@@ -580,8 +583,8 @@ function Re({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
580
583
  //#region src/client/components/AnalysisBuilder/AnalysisFilterItem.tsx
581
584
  var ze = d("close"), Be = d("dimension"), Ve = d("timeDimension"), He = d("measure");
582
585
  function Ue({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
583
- let { t: i } = z(), [a, o] = G(!1), s = W(null), c = b(e.member, t), l = (c?.field.type || "string") === "time", u = c?.fieldType === "measure", d = O(e.member, t), f = C[e.operator], p = f?.label ? i(f.label) : e.operator, m = We(e, f, i), h = l ? Ve : u ? He : Be;
584
- return /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ J("div", {
586
+ let { t: i } = z(), [a, o] = K(!1), s = G(null), c = g(e.member, t), l = (c?.field.type || "string") === "time", u = c?.fieldType === "measure", d = T(e.member, t), f = x[e.operator], p = f?.label ? i(f.label) : e.operator, m = We(e, f, i), h = l ? Ve : u ? He : Be;
587
+ return /* @__PURE__ */ J(Se, { children: [/* @__PURE__ */ J("div", {
585
588
  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",
586
589
  children: [
587
590
  /* @__PURE__ */ q("span", {
@@ -638,22 +641,22 @@ function We(e, t, n) {
638
641
  //#region src/client/components/AnalysisBuilder/AnalysisFilterGroup.tsx
639
642
  var Ge = d("add"), Ke = d("close");
640
643
  function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, depth: a = 0, hideRemoveButton: o = !1 }) {
641
- let { t: s } = z(), [c, l] = G(!1), u = W(null);
642
- H(() => {
644
+ let { t: s } = z(), [c, l] = K(!1), u = G(null);
645
+ U(() => {
643
646
  let e = (e) => {
644
647
  u.current && !u.current.contains(e.target) && l(!1);
645
648
  };
646
649
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
647
650
  }, []);
648
- let d = V(() => {
649
- n(ie(e));
650
- }, [e, n]), f = V((t, r) => {
651
+ let d = H(() => {
652
+ n(te(e));
653
+ }, [e, n]), f = H((t, r) => {
651
654
  let i = [...e.filters];
652
655
  i[t] = r, n({
653
656
  ...e,
654
657
  filters: i
655
658
  });
656
- }, [e, n]), p = V((t) => {
659
+ }, [e, n]), p = H((t) => {
657
660
  let i = e.filters.filter((e, n) => n !== t);
658
661
  i.length === 0 ? r() : n({
659
662
  ...e,
@@ -664,7 +667,7 @@ function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
664
667
  n,
665
668
  r,
666
669
  a
667
- ]), m = V((t) => {
670
+ ]), m = H((t) => {
668
671
  let r = {
669
672
  type: t,
670
673
  filters: []
@@ -673,9 +676,9 @@ function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
673
676
  ...e,
674
677
  filters: [...e.filters, r]
675
678
  }), l(!1);
676
- }, [e, n]), h = V(() => {
679
+ }, [e, n]), h = H(() => {
677
680
  i([]), l(!1);
678
- }, [i]), g = V((e) => (t = []) => {
681
+ }, [i]), g = H((e) => (t = []) => {
679
682
  i([e, ...t]);
680
683
  }, [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");
681
684
  return /* @__PURE__ */ J("div", {
@@ -746,12 +749,12 @@ function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
746
749
  className: "dc:text-xs text-dc-primary dc:hover:underline",
747
750
  children: s("filter.group.addFilterLink")
748
751
  })]
749
- }) : e.filters.map((e, n) => P(e) ? /* @__PURE__ */ q(Ue, {
752
+ }) : e.filters.map((e, n) => ne(e) ? /* @__PURE__ */ q(Ue, {
750
753
  filter: e,
751
754
  schema: t,
752
755
  onUpdate: (e) => f(n, e),
753
756
  onRemove: () => p(n)
754
- }, `filter-${n}`) : ae(e) ? /* @__PURE__ */ q(qe, {
757
+ }, `filter-${n}`) : P(e) ? /* @__PURE__ */ q(qe, {
755
758
  group: e,
756
759
  schema: t,
757
760
  onUpdate: (e) => f(n, e),
@@ -766,42 +769,42 @@ function qe({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
766
769
  //#region src/client/components/AnalysisBuilder/AnalysisFilterSection.tsx
767
770
  var Je = d("add");
768
771
  function Ye({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dimensionsOnly: i = !1 }) {
769
- let { t: a } = z(), [o, s] = G(!1), [c, l] = G(!1), u = W([]), d = R(e), f = V((e) => {
772
+ let { t: a } = z(), [o, s] = K(!1), [c, l] = K(!1), u = G([]), d = R(e), f = H((e) => {
770
773
  e.preventDefault(), e.stopPropagation(), l(!0);
771
- }, []), p = V((e) => {
774
+ }, []), p = H((e) => {
772
775
  e.preventDefault(), e.stopPropagation(), l(!1);
773
- }, []), m = V((e) => {
776
+ }, []), m = H((e) => {
774
777
  e.preventDefault(), e.stopPropagation(), l(!1);
775
778
  try {
776
779
  let t = JSON.parse(e.dataTransfer.getData("text/plain"));
777
780
  t.field && r && r(t.field);
778
781
  } catch {}
779
- }, [r]), h = N(e), g = V((t, r, i) => {
782
+ }, [r]), h = ee(e), g = H((t, r, i) => {
780
783
  let a = t.type === "time", o = a ? "inDateRange" : "equals", c = {
781
784
  member: t.name,
782
785
  operator: o,
783
786
  values: []
784
787
  };
785
- a && o === "inDateRange" && (c.dateRange = I("this_month")), n(oe(e, u.current, c)), s(!1), u.current = [];
786
- }, [e, n]), _ = V((t, r) => {
788
+ a && o === "inDateRange" && (c.dateRange = I("this_month")), n(re(e, u.current, c)), s(!1), u.current = [];
789
+ }, [e, n]), _ = H((t, r) => {
787
790
  let i = [...e];
788
791
  i[t] = r, n(i);
789
- }, [e, n]), v = V((t) => {
790
- n(se(e, t));
791
- }, [e, n]), y = V(() => {
792
+ }, [e, n]), v = H((t) => {
793
+ n(ie(e, t));
794
+ }, [e, n]), y = H(() => {
792
795
  n([]);
793
- }, [n]), b = V(() => {
796
+ }, [n]), b = H(() => {
794
797
  u.current = [], s(!0);
795
- }, []), x = V((e) => (t = []) => {
798
+ }, []), x = H((e) => (t = []) => {
796
799
  u.current = [...e, ...t], s(!0);
797
800
  }, []), S = (n, r, i = []) => {
798
801
  let a = [...i, r];
799
- return P(n) ? /* @__PURE__ */ q(Ue, {
802
+ return ne(n) ? /* @__PURE__ */ q(Ue, {
800
803
  filter: n,
801
804
  schema: t,
802
805
  onUpdate: (e) => _(r, e),
803
806
  onRemove: () => v(r)
804
- }, `filter-${a.join("-")}`) : ae(n) ? /* @__PURE__ */ q(qe, {
807
+ }, `filter-${a.join("-")}`) : P(n) ? /* @__PURE__ */ q(qe, {
805
808
  group: n,
806
809
  schema: t,
807
810
  onUpdate: (e) => _(r, e),
@@ -815,7 +818,7 @@ function Ye({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
815
818
  onClick: b,
816
819
  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",
817
820
  title: "Add filter",
818
- children: [/* @__PURE__ */ J(ye, { children: [a("analysis.sections.filters"), d > 0 && /* @__PURE__ */ J("span", {
821
+ children: [/* @__PURE__ */ J(ve, { children: [a("analysis.sections.filters"), d > 0 && /* @__PURE__ */ J("span", {
819
822
  className: "dc:ml-1.5 dc:text-xs dc:font-normal text-dc-text-muted dc:normal-case dc:tracking-normal",
820
823
  children: [
821
824
  "(",
@@ -851,7 +854,7 @@ function Ye({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
851
854
  children: e.map((e, t) => S(e, t))
852
855
  })
853
856
  }),
854
- /* @__PURE__ */ q(k, {
857
+ /* @__PURE__ */ q(E, {
855
858
  isOpen: o,
856
859
  onClose: () => {
857
860
  s(!1), u.current = [];
@@ -923,8 +926,8 @@ function tt({ issue: e }) {
923
926
  });
924
927
  }
925
928
  function nt({ text: e }) {
926
- let { t } = z(), [n, r] = B.useState(!1), i = B.useRef(null);
927
- return B.useEffect(() => () => {
929
+ let { t } = z(), [n, r] = V.useState(!1), i = V.useRef(null);
930
+ return V.useEffect(() => () => {
928
931
  i.current && clearTimeout(i.current);
929
932
  }, []), /* @__PURE__ */ q("button", {
930
933
  onClick: async () => {
@@ -965,7 +968,7 @@ function rt({ rec: e }) {
965
968
  }),
966
969
  e.sql && /* @__PURE__ */ q("div", {
967
970
  className: "dc:mt-2",
968
- children: /* @__PURE__ */ q(g, {
971
+ children: /* @__PURE__ */ q(m, {
969
972
  code: e.sql,
970
973
  language: "sql",
971
974
  headerRight: /* @__PURE__ */ q(nt, { text: e.sql })
@@ -1000,12 +1003,12 @@ function rt({ rec: e }) {
1000
1003
  }
1001
1004
  function it({ analysis: e, onClose: t, onClear: n }) {
1002
1005
  let { t: r } = z(), i = t || n;
1003
- return B.useEffect(() => {
1006
+ return V.useEffect(() => {
1004
1007
  let e = (e) => {
1005
1008
  e.key === "Escape" && i && i();
1006
1009
  };
1007
1010
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
1008
- }, [i]), B.useEffect(() => (document.body.style.overflow = "hidden", () => {
1011
+ }, [i]), V.useEffect(() => (document.body.style.overflow = "hidden", () => {
1009
1012
  document.body.style.overflow = "";
1010
1013
  }), []), /* @__PURE__ */ J("div", {
1011
1014
  className: "dc:fixed dc:inset-0 dc:z-50 dc:flex dc:items-center dc:justify-center dc:p-4 bg-black/50",
@@ -1272,7 +1275,7 @@ function Mt(e, t, n, r) {
1272
1275
  //#endregion
1273
1276
  //#region src/client/components/AnalysisBuilder/ExecutionPlanPanelParts.tsx
1274
1277
  function Nt({ title: e, height: t, className: n, children: r }) {
1275
- return /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q("h4", {
1278
+ return /* @__PURE__ */ J(Se, { children: [/* @__PURE__ */ q("h4", {
1276
1279
  className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
1277
1280
  children: e
1278
1281
  }), /* @__PURE__ */ q("div", {
@@ -1293,7 +1296,7 @@ function Pt({ sql: e, sqlLoading: t, sqlError: n, sqlPlaceholder: r, formattedSq
1293
1296
  height: o,
1294
1297
  className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded-sm dc:border border-dc-error",
1295
1298
  children: n.message
1296
- }) : e ? /* @__PURE__ */ q(g, {
1299
+ }) : e ? /* @__PURE__ */ q(m, {
1297
1300
  code: i,
1298
1301
  language: "sql",
1299
1302
  title: a,
@@ -1362,7 +1365,7 @@ function It({ explainLoading: e, explainError: t, explainResult: n, useAnalyze:
1362
1365
  n.summary.usedIndexes.join(", ")
1363
1366
  ]
1364
1367
  }),
1365
- /* @__PURE__ */ q(g, {
1368
+ /* @__PURE__ */ q(m, {
1366
1369
  code: n.raw,
1367
1370
  language: "sql",
1368
1371
  title: a("debug.executionPlanTitle", { database: n.summary.database }),
@@ -1374,8 +1377,8 @@ function It({ explainLoading: e, explainError: t, explainResult: n, useAnalyze:
1374
1377
  }
1375
1378
  //#endregion
1376
1379
  //#region src/client/components/AnalysisBuilder/ExecutionPlanPanel.tsx
1377
- var Lt = xe(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" }) {
1378
- let { t: v } = z(), [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 = () => {
1380
+ var Lt = be(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" }) {
1381
+ let { t: v } = z(), [y, b] = K(!1), [x, S] = K(!1), C = e ? e.sql + (e.params && e.params.length > 0 ? "\n\n-- Parameters:\n" + JSON.stringify(e.params, null, 2) : "") : "", w = () => {
1379
1382
  f && i && h && (f(i, h), S(!0));
1380
1383
  }, T = () => {
1381
1384
  S(!1);
@@ -1383,10 +1386,10 @@ var Lt = xe(function({ sql: e, sqlLoading: t = !1, sqlError: n, sqlPlaceholder:
1383
1386
  onClick: w,
1384
1387
  disabled: u,
1385
1388
  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",
1386
- children: u ? /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q("span", {
1389
+ children: u ? /* @__PURE__ */ J(Se, { children: [/* @__PURE__ */ q("span", {
1387
1390
  className: "dc:animate-spin",
1388
1391
  children: "⟳"
1389
- }), v("debug.aiAnalyzing")] }) : /* @__PURE__ */ q(K, { children: `✨ ${v("debug.aiAnalysis")}` })
1392
+ }), v("debug.aiAnalyzing")] }) : /* @__PURE__ */ q(Se, { children: `✨ ${v("debug.aiAnalysis")}` })
1390
1393
  }) : null;
1391
1394
  return /* @__PURE__ */ J("div", {
1392
1395
  className: "dc:space-y-3",
@@ -1399,7 +1402,7 @@ var Lt = xe(function({ sql: e, sqlLoading: t = !1, sqlError: n, sqlPlaceholder:
1399
1402
  formattedSql: C,
1400
1403
  title: g,
1401
1404
  height: _,
1402
- headerRight: /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ J("label", {
1405
+ headerRight: /* @__PURE__ */ J(Se, { children: [/* @__PURE__ */ J("label", {
1403
1406
  className: "dc:flex dc:items-center dc:gap-1 dc:text-xs text-dc-text-secondary dc:cursor-pointer",
1404
1407
  children: [/* @__PURE__ */ q("input", {
1405
1408
  type: "checkbox",
@@ -1452,53 +1455,55 @@ function Rt() {
1452
1455
  function zt(e) {
1453
1456
  return e.map((e) => e.field);
1454
1457
  }
1455
- function Bt(e, t) {
1456
- let n = [], r = [];
1457
- for (let i of e) if (i.isTimeDimension) {
1458
+ function Bt(e, t, n) {
1459
+ let r = [], i = [];
1460
+ for (let a of e) if (a.isTimeDimension) {
1458
1461
  let e = {
1459
- dimension: i.field,
1460
- granularity: i.granularity || "day"
1462
+ dimension: a.field,
1463
+ granularity: a.granularity || "day",
1464
+ ...a.fillMissingDates !== void 0 && !(n && a.fillMissingDates) && { fillMissingDates: a.fillMissingDates }
1461
1465
  };
1462
- if (i.enableComparison) {
1463
- let n = Ce(i.field, t);
1466
+ if (a.enableComparison && !n) {
1467
+ let n = Ce(a.field, t);
1464
1468
  n && (e.compareDateRange = n);
1465
1469
  }
1466
- r.push(e);
1467
- } else n.push(i.field);
1470
+ i.push(e);
1471
+ } else r.push(a.field);
1468
1472
  return {
1469
- dimensions: n,
1470
- timeDimensions: r
1473
+ dimensions: r,
1474
+ timeDimensions: i
1471
1475
  };
1472
1476
  }
1473
- function Vt(e) {
1474
- let { dimensions: t, timeDimensions: n } = Bt(e.breakdowns, e.filters), r = {
1477
+ function Vt(e, t) {
1478
+ let { dimensions: n, timeDimensions: r } = Bt(e.breakdowns, e.filters, t), i = {
1475
1479
  measures: zt(e.metrics),
1476
- dimensions: t
1480
+ dimensions: n
1477
1481
  };
1478
- 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;
1482
+ return r.length > 0 && (i.timeDimensions = r), e.filters.length > 0 && (i.filters = e.filters), e.order && Object.keys(e.order).length > 0 && (i.order = e.order), e.limit != null && (i.limit = e.limit), e.fillMissingDatesValue !== void 0 && (i.fillMissingDatesValue = e.fillMissingDatesValue), t && (i.ungrouped = !0), i;
1479
1483
  }
1480
1484
  function Ht(e) {
1481
1485
  return e.map((e, t) => ({
1482
- id: h(),
1486
+ id: f(),
1483
1487
  field: e,
1484
- label: m(t)
1488
+ label: w(t)
1485
1489
  }));
1486
1490
  }
1487
1491
  function Ut(e) {
1488
1492
  let t = [];
1489
1493
  if (e.dimensions) for (let n of e.dimensions) t.push({
1490
- id: h(),
1494
+ id: f(),
1491
1495
  field: n,
1492
1496
  isTimeDimension: !1
1493
1497
  });
1494
1498
  if (e.timeDimensions) for (let n of e.timeDimensions) {
1495
1499
  let e = !!(n.compareDateRange && n.compareDateRange.length > 0);
1496
1500
  t.push({
1497
- id: h(),
1501
+ id: f(),
1498
1502
  field: n.dimension,
1499
1503
  granularity: n.granularity,
1500
1504
  isTimeDimension: !0,
1501
- enableComparison: e
1505
+ enableComparison: e,
1506
+ ...n.fillMissingDates !== void 0 && { fillMissingDates: n.fillMissingDates }
1502
1507
  });
1503
1508
  }
1504
1509
  return t;
@@ -1510,6 +1515,7 @@ function Wt(e) {
1510
1515
  filters: e.filters || [],
1511
1516
  order: e.order,
1512
1517
  limit: e.limit,
1518
+ ...e.fillMissingDatesValue !== void 0 && { fillMissingDatesValue: e.fillMissingDatesValue },
1513
1519
  validationStatus: "idle",
1514
1520
  validationError: null
1515
1521
  };
@@ -1556,16 +1562,16 @@ var X = {
1556
1562
  };
1557
1563
  },
1558
1564
  save(e, t, n) {
1559
- let r = e.queryStates.map(Vt), i = r.length === 1 && e.mergeStrategy === "concat" ? r[0] : {
1560
- queries: r,
1561
- mergeStrategy: e.mergeStrategy
1562
- };
1565
+ let r = t.query || this.getDefaultChartConfig(), i = l(r.chartType), a = e.queryStates.map((e) => Vt(e, i));
1563
1566
  return {
1564
1567
  version: 1,
1565
1568
  analysisType: "query",
1566
1569
  activeView: n,
1567
- charts: { query: t.query || this.getDefaultChartConfig() },
1568
- query: i
1570
+ charts: { query: r },
1571
+ query: a.length === 1 && e.mergeStrategy === "concat" ? a[0] : {
1572
+ queries: a,
1573
+ mergeStrategy: e.mergeStrategy
1574
+ }
1569
1575
  };
1570
1576
  },
1571
1577
  validate(e) {
@@ -1599,7 +1605,7 @@ var X = {
1599
1605
  }
1600
1606
  }, Z = /* @__PURE__ */ new Map(), Kt = !1;
1601
1607
  function qt() {
1602
- Kt ||= (Z.has("query") || Z.set("query", X), Z.has("funnel") || Z.set("funnel", S), Z.has("flow") || Z.set("flow", x), Z.has("retention") || Z.set("retention", T), !0);
1608
+ Kt ||= (Z.has("query") || Z.set("query", X), Z.has("funnel") || Z.set("funnel", v), Z.has("flow") || Z.set("flow", _), Z.has("retention") || Z.set("retention", S), !0);
1603
1609
  }
1604
1610
  var Q = {
1605
1611
  register(e) {
@@ -1624,9 +1630,9 @@ var Q = {
1624
1630
  analysisType: "query",
1625
1631
  charts: {
1626
1632
  query: X.getDefaultChartConfig(),
1627
- funnel: S.getDefaultChartConfig(),
1628
- flow: x.getDefaultChartConfig(),
1629
- retention: T.getDefaultChartConfig()
1633
+ funnel: v.getDefaultChartConfig(),
1634
+ flow: _.getDefaultChartConfig(),
1635
+ retention: S.getDefaultChartConfig()
1630
1636
  },
1631
1637
  activeViews: {
1632
1638
  query: "chart",
@@ -1868,7 +1874,8 @@ var Q = {
1868
1874
  ...Y(),
1869
1875
  metrics: [...t.metrics],
1870
1876
  breakdowns: [...t.breakdowns],
1871
- filters: [...t.filters]
1877
+ filters: [...t.filters],
1878
+ ...t.fillMissingDatesValue !== void 0 && { fillMissingDatesValue: t.fillMissingDatesValue }
1872
1879
  };
1873
1880
  return {
1874
1881
  queryStates: [...e.queryStates, n],
@@ -1885,9 +1892,9 @@ var Q = {
1885
1892
  }),
1886
1893
  addMetric: (t, n) => e((e) => {
1887
1894
  let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] || Y(), o = {
1888
- id: h(),
1895
+ id: f(),
1889
1896
  field: t,
1890
- label: n || m(a.metrics.length)
1897
+ label: n || w(a.metrics.length)
1891
1898
  };
1892
1899
  return i[r] = {
1893
1900
  ...a,
@@ -1910,9 +1917,9 @@ var Q = {
1910
1917
  };
1911
1918
  else {
1912
1919
  let e = {
1913
- id: h(),
1920
+ id: f(),
1914
1921
  field: t,
1915
- label: m(i.metrics.length)
1922
+ label: w(i.metrics.length)
1916
1923
  };
1917
1924
  r[n] = {
1918
1925
  ...i,
@@ -1932,7 +1939,7 @@ var Q = {
1932
1939
  let i = e.activeQueryIndex, a = [...e.queryStates], o = a[i] || Y();
1933
1940
  if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
1934
1941
  let s = {
1935
- id: h(),
1942
+ id: f(),
1936
1943
  field: t,
1937
1944
  isTimeDimension: n,
1938
1945
  granularity: n ? r || "month" : void 0
@@ -1959,7 +1966,7 @@ var Q = {
1959
1966
  else {
1960
1967
  if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
1961
1968
  let s = {
1962
- id: h(),
1969
+ id: f(),
1963
1970
  field: t,
1964
1971
  isTimeDimension: n,
1965
1972
  granularity: n ? r || "month" : void 0
@@ -2096,11 +2103,11 @@ var Q = {
2096
2103
  },
2097
2104
  buildCurrentQuery: () => {
2098
2105
  let e = t(), n = e.queryStates[e.activeQueryIndex] || Y(), r = l(e.charts[e.analysisType]?.chartType ?? "");
2099
- return Te(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit, r);
2106
+ return Te(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit, r, n.fillMissingDatesValue);
2100
2107
  },
2101
2108
  buildAllQueries: () => {
2102
2109
  let e = t(), n = e.queryStates[0]?.breakdowns || [], r = l(e.charts[e.analysisType]?.chartType ?? "");
2103
- return e.queryStates.map((t, i) => Te(t.metrics, e.mergeStrategy === "merge" && i > 0 ? n : t.breakdowns, t.filters, t.order, !1, t.limit, r));
2110
+ return e.queryStates.map((t, i) => Te(t.metrics, e.mergeStrategy === "merge" && i > 0 ? n : t.breakdowns, t.filters, t.order, !1, t.limit, r, t.fillMissingDatesValue));
2104
2111
  },
2105
2112
  buildMultiQueryConfig: () => {
2106
2113
  let e = t();
@@ -2124,7 +2131,7 @@ var Q = {
2124
2131
  ...Qt(),
2125
2132
  addFunnelStep: () => e((e) => {
2126
2133
  let t = e.funnelSteps[e.funnelSteps.length - 1], n = {
2127
- id: h(),
2134
+ id: f(),
2128
2135
  name: `Step ${e.funnelSteps.length + 1}`,
2129
2136
  cube: e.funnelCube || "",
2130
2137
  filters: t?.filters ? JSON.parse(JSON.stringify(t.filters)) : [],
@@ -2272,7 +2279,7 @@ var Q = {
2272
2279
  joinStrategy: e.joinStrategy
2273
2280
  } };
2274
2281
  }
2275
- }), nn = () => ({ ...ee }), rn = (e, t, n) => ({
2282
+ }), nn = () => ({ ...D }), rn = (e, t, n) => ({
2276
2283
  ...nn(),
2277
2284
  setRetentionCube: (t) => e(() => ({
2278
2285
  retentionCube: t,
@@ -2455,15 +2462,16 @@ var Q = {
2455
2462
  //#region src/client/stores/optionsToAnalysisConfig.ts
2456
2463
  function cn(e) {
2457
2464
  let t = e.filters ? [...e.filters] : [], n = e.timeDimensions || [], r = [...(e.dimensions || []).map((e) => ({
2458
- id: h(),
2465
+ id: f(),
2459
2466
  field: e,
2460
2467
  isTimeDimension: !1
2461
2468
  })), ...n.map((e) => ({
2462
- id: h(),
2469
+ id: f(),
2463
2470
  field: e.dimension,
2464
2471
  granularity: e.granularity,
2465
2472
  isTimeDimension: !0,
2466
- enableComparison: !!(e.compareDateRange && e.compareDateRange.length > 0)
2473
+ enableComparison: !!(e.compareDateRange && e.compareDateRange.length > 0),
2474
+ ...e.fillMissingDates !== void 0 && { fillMissingDates: e.fillMissingDates }
2467
2475
  }))], i = t;
2468
2476
  for (let e of n) {
2469
2477
  if (!e.compareDateRange || e.compareDateRange.length === 0) continue;
@@ -2487,13 +2495,14 @@ function cn(e) {
2487
2495
  return {
2488
2496
  ...Y(),
2489
2497
  metrics: (e.measures || []).map((e, t) => ({
2490
- id: h(),
2498
+ id: f(),
2491
2499
  field: e,
2492
- label: m(t)
2500
+ label: w(t)
2493
2501
  })),
2494
2502
  breakdowns: r,
2495
2503
  filters: i,
2496
- order: e.order
2504
+ order: e.order,
2505
+ ...e.fillMissingDatesValue !== void 0 && { fillMissingDatesValue: e.fillMissingDatesValue }
2497
2506
  };
2498
2507
  }
2499
2508
  function ln(e) {
@@ -2511,8 +2520,8 @@ function dn(e) {
2511
2520
  return e.initialActiveView || "chart";
2512
2521
  }
2513
2522
  function fn(e) {
2514
- let t = un(S, e.initialChartConfig), n = e.initialFunnelState ?? {};
2515
- return S.save({
2523
+ let t = un(v, e.initialChartConfig), n = e.initialFunnelState ?? {};
2524
+ return v.save({
2516
2525
  funnelCube: n.funnelCube ?? null,
2517
2526
  funnelSteps: n.funnelSteps || [],
2518
2527
  activeFunnelStepIndex: 0,
@@ -2521,8 +2530,8 @@ function fn(e) {
2521
2530
  }, { funnel: t }, dn(e));
2522
2531
  }
2523
2532
  function pn(e) {
2524
- let t = un(x, e.initialChartConfig), n = e.initialFlowState ?? {};
2525
- return x.save({
2533
+ let t = un(_, e.initialChartConfig), n = e.initialFlowState ?? {};
2534
+ return _.save({
2526
2535
  flowCube: n.flowCube ?? null,
2527
2536
  flowBindingKey: n.flowBindingKey ?? null,
2528
2537
  flowTimeDimension: n.flowTimeDimension ?? null,
@@ -2537,8 +2546,8 @@ function pn(e) {
2537
2546
  }, { flow: t }, dn(e));
2538
2547
  }
2539
2548
  function mn(e) {
2540
- let t = un(T, e.initialChartConfig), n = e.initialRetentionState ?? {}, r = A(te);
2541
- return T.save({
2549
+ let t = un(S, e.initialChartConfig), n = e.initialRetentionState ?? {}, r = O(k);
2550
+ return S.save({
2542
2551
  retentionCube: n.retentionCube ?? null,
2543
2552
  retentionBindingKey: n.retentionBindingKey ?? null,
2544
2553
  retentionTimeDimension: n.retentionTimeDimension ?? null,
@@ -2592,9 +2601,9 @@ function yn(e, t) {
2592
2601
  ...nn(),
2593
2602
  charts: {
2594
2603
  query: X.getDefaultChartConfig(),
2595
- funnel: S.getDefaultChartConfig(),
2596
- flow: x.getDefaultChartConfig(),
2597
- retention: T.getDefaultChartConfig()
2604
+ funnel: v.getDefaultChartConfig(),
2605
+ flow: _.getDefaultChartConfig(),
2606
+ retention: S.getDefaultChartConfig()
2598
2607
  },
2599
2608
  activeViews: {
2600
2609
  query: "chart",
@@ -2610,21 +2619,21 @@ function yn(e, t) {
2610
2619
  ...Qt(),
2611
2620
  charts: {
2612
2621
  ...e.charts,
2613
- funnel: S.getDefaultChartConfig()
2622
+ funnel: v.getDefaultChartConfig()
2614
2623
  }
2615
2624
  };
2616
2625
  case "flow": return {
2617
2626
  ...en(),
2618
2627
  charts: {
2619
2628
  ...e.charts,
2620
- flow: x.getDefaultChartConfig()
2629
+ flow: _.getDefaultChartConfig()
2621
2630
  }
2622
2631
  };
2623
2632
  case "retention": return {
2624
2633
  ...nn(),
2625
2634
  charts: {
2626
2635
  ...e.charts,
2627
- retention: T.getDefaultChartConfig()
2636
+ retention: S.getDefaultChartConfig()
2628
2637
  }
2629
2638
  };
2630
2639
  default: return {
@@ -2671,10 +2680,10 @@ function bn(n = {}) {
2671
2680
  return a()(i(e(t(o, {
2672
2681
  name: n.storageKey || "drizzle-cube-analysis-builder-v3",
2673
2682
  partialize: (e) => e.saveWorkspace(),
2674
- merge: (e, t) => e && M(e) ? {
2683
+ merge: (e, t) => e && j(e) ? {
2675
2684
  ...t,
2676
2685
  _persistedWorkspace: e
2677
- } : e && j(e) ? {
2686
+ } : e && A(e) ? {
2678
2687
  ...t,
2679
2688
  _persistedConfig: e
2680
2689
  } : r ? {
@@ -2697,9 +2706,9 @@ function bn(n = {}) {
2697
2706
  }
2698
2707
  })), { name: "AnalysisBuilderStore" }));
2699
2708
  }
2700
- var xn = be(null);
2709
+ var xn = ye(null);
2701
2710
  function Sn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalStorage: r, storageKey: i, initialAnalysisType: a, initialFunnelState: o, initialFlowState: s, initialRetentionState: c, initialActiveView: l }) {
2702
- let u = W(null);
2711
+ let u = G(null);
2703
2712
  return u.current ||= bn({
2704
2713
  initialQuery: t,
2705
2714
  initialChartConfig: n,
@@ -2716,12 +2725,12 @@ function Sn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalS
2716
2725
  });
2717
2726
  }
2718
2727
  function $(e) {
2719
- let t = Se(xn);
2728
+ let t = xe(xn);
2720
2729
  if (!t) throw Error("useAnalysisBuilderStore must be used within AnalysisBuilderStoreProvider");
2721
2730
  return r(t, e);
2722
2731
  }
2723
2732
  function Cn() {
2724
- let e = Se(xn);
2733
+ let e = xe(xn);
2725
2734
  if (!e) throw Error("useAnalysisBuilderStoreApi must be used within AnalysisBuilderStoreProvider");
2726
2735
  return e;
2727
2736
  }
@@ -2869,22 +2878,22 @@ function Vn(e) {
2869
2878
  //#endregion
2870
2879
  //#region src/client/hooks/useAnalysisState.ts
2871
2880
  function Hn(e = {}) {
2872
- let { externalColorPalette: t } = e, r = Cn(), 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), p = $((e) => e.getCurrentState), m = $((e) => e.getMergeKeys), h = $((e) => e.isMultiQueryMode), g = p(), _ = h(), v = m(), y = $((e) => l(e.charts[e.analysisType]?.chartType ?? "")), b = U(() => {
2881
+ let { externalColorPalette: t } = e, r = Cn(), 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 = W(() => {
2873
2882
  let e = i[a] || g;
2874
- return Te(e.metrics, e.breakdowns, e.filters, e.order, !1, e.limit, y);
2883
+ return Te(e.metrics, e.breakdowns, e.filters, e.order, !1, e.limit, y, e.fillMissingDatesValue);
2875
2884
  }, [
2876
2885
  i,
2877
2886
  a,
2878
2887
  g,
2879
2888
  y
2880
- ]), x = U(() => {
2889
+ ]), x = W(() => {
2881
2890
  let e = i[0]?.breakdowns || [];
2882
- return i.map((t, n) => Te(t.metrics, o === "merge" && n > 0 ? e : t.breakdowns, t.filters, t.order, !1, t.limit, y));
2891
+ return i.map((t, n) => Te(t.metrics, o === "merge" && n > 0 ? e : t.breakdowns, t.filters, t.order, !1, t.limit, y, t.fillMissingDatesValue));
2883
2892
  }, [
2884
2893
  i,
2885
2894
  o,
2886
2895
  y
2887
- ]), S = U(() => {
2896
+ ]), S = W(() => {
2888
2897
  if (i.length <= 1) return null;
2889
2898
  let e = x.filter((e) => e.measures && e.measures.length > 0 || e.dimensions && e.dimensions.length > 0 || e.timeDimensions && e.timeDimensions.length > 0);
2890
2899
  return e.length < 2 ? null : {
@@ -2898,12 +2907,12 @@ function Hn(e = {}) {
2898
2907
  i.length,
2899
2908
  o,
2900
2909
  v
2901
- ]), C = U(() => _ ? Ln(x, o, v || []) : null, [
2910
+ ]), C = W(() => _ ? Ln(x, o, v || []) : null, [
2902
2911
  _,
2903
2912
  x,
2904
2913
  o,
2905
2914
  v
2906
- ]), w = U(() => b.measures && b.measures.length > 0 || b.dimensions && b.dimensions.length > 0 || b.timeDimensions && b.timeDimensions.length > 0, [b]), T = U(() => {
2915
+ ]), w = W(() => b.measures && b.measures.length > 0 || b.dimensions && b.dimensions.length > 0 || b.timeDimensions && b.timeDimensions.length > 0, [b]), T = W(() => {
2907
2916
  if (!_) return g.metrics;
2908
2917
  let e = /* @__PURE__ */ new Set(), t = [];
2909
2918
  for (let n = 0; n < i.length; n++) {
@@ -2921,7 +2930,7 @@ function Hn(e = {}) {
2921
2930
  _,
2922
2931
  i,
2923
2932
  g.metrics
2924
- ]), E = U(() => {
2933
+ ]), E = W(() => {
2925
2934
  if (!_) return g.breakdowns;
2926
2935
  let e = /* @__PURE__ */ new Set(), t = [];
2927
2936
  for (let n of i) for (let r of n.breakdowns) e.has(r.field) || (e.add(r.field), t.push(r));
@@ -2930,67 +2939,67 @@ function Hn(e = {}) {
2930
2939
  _,
2931
2940
  i,
2932
2941
  g.breakdowns
2933
- ]), D = U(() => o === "merge" && a > 0 ? i[0]?.breakdowns || [] : g.breakdowns, [
2942
+ ]), D = W(() => o === "merge" && a > 0 ? i[0]?.breakdowns || [] : g.breakdowns, [
2934
2943
  o,
2935
2944
  a,
2936
2945
  i,
2937
2946
  g.breakdowns
2938
- ]), 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 = U(() => O !== "funnel" || !k?.dimension || !j || !A || A.length < 2 ? !1 : A.every((e) => e.filters.length > 0), [
2947
+ ]), O = $((e) => e.analysisType), k = $((e) => e.funnelBindingKey), A = $((e) => e.funnelCube), j = $((e) => e.funnelSteps), ee = $((e) => e.activeFunnelStepIndex), M = $((e) => e.funnelTimeDimension), N = W(() => O !== "funnel" || !k?.dimension || !M || !j || j.length < 2 ? !1 : j.every((e) => e.filters.length > 0), [
2939
2948
  O,
2940
2949
  k,
2941
- j,
2942
- A
2943
- ]), N = $((e) => e.charts.funnel?.chartType) || "funnel", ne = $((e) => e.charts.funnel?.chartConfig), re = U(() => ne || {}, [ne]), ie = $((e) => e.charts.funnel?.displayConfig), ae = U(() => ie || {
2950
+ M,
2951
+ j
2952
+ ]), te = $((e) => e.charts.funnel?.chartType) || "funnel", P = $((e) => e.charts.funnel?.chartConfig), ne = W(() => P || {}, [P]), re = $((e) => e.charts.funnel?.displayConfig), ie = W(() => re || {
2944
2953
  showLegend: !0,
2945
2954
  showGrid: !0,
2946
2955
  showTooltip: !0
2947
- }, [ie]), P = $((e) => e.flowCube), oe = $((e) => e.flowBindingKey), se = $((e) => e.flowTimeDimension), F = $((e) => e.eventDimension), I = $((e) => e.startingStep), L = $((e) => e.stepsBefore), ce = $((e) => e.stepsAfter), le = $((e) => e.joinStrategy), R = $((e) => e.charts.flow?.displayConfig), ue = U(() => R || {
2956
+ }, [re]), F = $((e) => e.flowCube), I = $((e) => e.flowBindingKey), ae = $((e) => e.flowTimeDimension), oe = $((e) => e.eventDimension), L = $((e) => e.startingStep), R = $((e) => e.stepsBefore), se = $((e) => e.stepsAfter), ce = $((e) => e.joinStrategy), le = $((e) => e.charts.flow?.displayConfig), ue = W(() => le || {
2948
2957
  showLegend: !0,
2949
2958
  showGrid: !0,
2950
2959
  showTooltip: !0
2951
- }, [R]), de = $((e) => e.charts.flow?.chartType) || "sankey", fe = $((e) => e.buildFunnelQueryFromSteps), pe = U(() => O === "funnel" ? fe() : null, [
2960
+ }, [le]), de = $((e) => e.charts.flow?.chartType) || "sankey", z = $((e) => e.buildFunnelQueryFromSteps), fe = W(() => O === "funnel" ? z() : null, [
2952
2961
  O,
2953
- fe,
2954
- A
2955
- ]), me = $((e) => e.buildFlowQuery), z = U(() => O === "flow" ? me() : null, [
2962
+ z,
2963
+ j
2964
+ ]), B = $((e) => e.buildFlowQuery), pe = W(() => O === "flow" ? B() : null, [
2956
2965
  O,
2957
- me,
2958
- P,
2959
- oe,
2960
- se,
2966
+ B,
2961
2967
  F,
2962
2968
  I,
2969
+ ae,
2970
+ oe,
2963
2971
  L,
2964
- ce,
2972
+ R,
2973
+ se,
2965
2974
  de,
2966
- le
2967
- ]), he = $((e) => e.retentionCube), ge = $((e) => e.retentionBindingKey), _e = $((e) => e.retentionTimeDimension), ve = $((e) => e.retentionDateRange), ye = $((e) => e.retentionCohortFilters), B = $((e) => e.retentionActivityFilters), be = $((e) => e.retentionBreakdowns), xe = $((e) => e.retentionViewGranularity), Se = $((e) => e.retentionPeriods), H = $((e) => e.retentionType), W = $((e) => e.buildRetentionQuery), K = $((e) => e.getRetentionValidation), q = $((e) => e.charts.retention?.displayConfig), J = U(() => O === "retention" ? W() : null, [
2975
+ ce
2976
+ ]), me = $((e) => e.retentionCube), he = $((e) => e.retentionBindingKey), ge = $((e) => e.retentionTimeDimension), _e = $((e) => e.retentionDateRange), ve = $((e) => e.retentionCohortFilters), V = $((e) => e.retentionActivityFilters), ye = $((e) => e.retentionBreakdowns), be = $((e) => e.retentionViewGranularity), xe = $((e) => e.retentionPeriods), U = $((e) => e.retentionType), G = $((e) => e.buildRetentionQuery), Se = $((e) => e.getRetentionValidation), q = $((e) => e.charts.retention?.displayConfig), J = W(() => O === "retention" ? G() : null, [
2968
2977
  O,
2969
- W,
2978
+ G,
2979
+ me,
2970
2980
  he,
2971
2981
  ge,
2972
2982
  _e,
2973
- ve,
2983
+ ye,
2974
2984
  be,
2975
2985
  xe,
2976
- Se,
2977
- H,
2978
- ye,
2979
- B
2980
- ]), Ce = U(() => O === "retention" ? K() : null, [
2986
+ U,
2987
+ ve,
2988
+ V
2989
+ ]), Ce = W(() => O === "retention" ? Se() : null, [
2981
2990
  O,
2982
- K,
2991
+ Se,
2992
+ me,
2983
2993
  he,
2984
2994
  ge,
2985
- _e,
2986
- ve
2987
- ]), we = U(() => O === "retention" ? J !== null : O === "flow" ? z !== null : O === "funnel" ? pe !== null : w ?? !1, [
2995
+ _e
2996
+ ]), we = W(() => O === "retention" ? J !== null : O === "flow" ? pe !== null : O === "funnel" ? fe !== null : w ?? !1, [
2988
2997
  O,
2989
2998
  J,
2990
- z,
2991
2999
  pe,
3000
+ fe,
2992
3001
  w
2993
- ]), { chartType: Y, chartConfig: Ee, displayConfig: De } = $(n(On)), 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 = V((e) => {
3002
+ ]), { chartType: Y, chartConfig: Ee, displayConfig: De } = $(n(On)), 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 = H((e) => {
2994
3003
  if (O === "funnel") Ne(e);
2995
3004
  else {
2996
3005
  Ae(e);
@@ -3004,24 +3013,24 @@ function Hn(e = {}) {
3004
3013
  Ne,
3005
3014
  Ae,
3006
3015
  je
3007
- ]), ze = V((e) => {
3016
+ ]), ze = H((e) => {
3008
3017
  O === "funnel" ? Pe(e) : je(e);
3009
3018
  }, [
3010
3019
  O,
3011
3020
  Pe,
3012
3021
  je
3013
- ]), Be = V((e) => {
3022
+ ]), Be = H((e) => {
3014
3023
  O === "funnel" ? Fe(e) : Me(e);
3015
3024
  }, [
3016
3025
  O,
3017
3026
  Fe,
3018
3027
  Me
3019
- ]), Ve = U(() => Ot(T, E), [T, E]), He = U(() => t ? Array.isArray(t) && typeof t[0] == "string" ? {
3028
+ ]), Ve = W(() => Ot(T, E), [T, E]), He = W(() => t ? Array.isArray(t) && typeof t[0] == "string" ? {
3020
3029
  name: "custom",
3021
3030
  label: "Custom",
3022
3031
  colors: t,
3023
3032
  gradient: t
3024
- } : t : f(ke), [t, ke]), Ue = V((e) => {
3033
+ } : t : p(ke), [t, ke]), Ue = H((e) => {
3025
3034
  r.setState((t) => ({ charts: {
3026
3035
  ...t.charts,
3027
3036
  flow: {
@@ -3033,7 +3042,7 @@ function Hn(e = {}) {
3033
3042
  displayConfig: e
3034
3043
  }
3035
3044
  } }));
3036
- }, [r]), We = V((e) => {
3045
+ }, [r]), We = H((e) => {
3037
3046
  r.setState((t) => ({ charts: {
3038
3047
  ...t.charts,
3039
3048
  retention: {
@@ -3045,28 +3054,28 @@ function Hn(e = {}) {
3045
3054
  displayConfig: e
3046
3055
  }
3047
3056
  } }));
3048
- }, [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] = G(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), kt = $((e) => e.setFunnelTimeDimension), jt = $((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), X = $((e) => e.setRetentionBreakdowns), Z = $((e) => e.addRetentionBreakdown), Kt = $((e) => e.removeRetentionBreakdown), qt = $((e) => e.setRetentionViewGranularity), Q = $((e) => e.setRetentionPeriods), Jt = $((e) => e.setRetentionType), Yt = $((e) => e.getValidation), Xt = U(() => Yt(), [
3057
+ }, [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] = K(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), kt = $((e) => e.setFunnelTimeDimension), jt = $((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), X = $((e) => e.setRetentionBreakdowns), Z = $((e) => e.addRetentionBreakdown), Kt = $((e) => e.removeRetentionBreakdown), qt = $((e) => e.setRetentionViewGranularity), Q = $((e) => e.setRetentionPeriods), Jt = $((e) => e.setRetentionType), Yt = $((e) => e.getValidation), Xt = W(() => Yt(), [
3049
3058
  Yt,
3050
3059
  i,
3051
3060
  O,
3052
- A,
3053
- k,
3054
3061
  j,
3055
- P,
3056
- oe,
3057
- se,
3062
+ k,
3063
+ M,
3058
3064
  F,
3059
3065
  I,
3066
+ ae,
3067
+ oe,
3060
3068
  L,
3061
- ce,
3062
- le
3063
- ]), Zt = V((e, t) => {
3069
+ R,
3070
+ se,
3071
+ ce
3072
+ ]), Zt = H((e, t) => {
3064
3073
  O === "retention" && t === "dimension" ? Z({ field: e.name }) : ut(e.name, t === "timeDimension");
3065
3074
  }, [
3066
3075
  O,
3067
3076
  Z,
3068
3077
  ut
3069
- ]), Qt = V((e, t, n, r) => {
3078
+ ]), Qt = H((e, t, n, r) => {
3070
3079
  Ye === "metrics" && t === "measure" ? at(e.name) : Ye === "breakdown" && Zt(e, t), r || $e();
3071
3080
  }, [
3072
3081
  Ye,
@@ -3093,35 +3102,35 @@ function Hn(e = {}) {
3093
3102
  effectiveBreakdowns: D,
3094
3103
  analysisType: O,
3095
3104
  funnelBindingKey: k,
3096
- isFunnelModeEnabled: M,
3097
- funnelCube: ee,
3098
- funnelSteps: A,
3099
- activeFunnelStepIndex: te,
3100
- funnelTimeDimension: j,
3101
- funnelChartType: N,
3102
- funnelChartConfig: re,
3103
- funnelDisplayConfig: ae,
3104
- serverFunnelQuery: pe,
3105
- flowCube: P,
3106
- flowBindingKey: oe,
3107
- flowTimeDimension: se,
3108
- eventDimension: F,
3109
- startingStep: I,
3110
- stepsBefore: L,
3111
- stepsAfter: ce,
3112
- joinStrategy: le,
3105
+ isFunnelModeEnabled: N,
3106
+ funnelCube: A,
3107
+ funnelSteps: j,
3108
+ activeFunnelStepIndex: ee,
3109
+ funnelTimeDimension: M,
3110
+ funnelChartType: te,
3111
+ funnelChartConfig: ne,
3112
+ funnelDisplayConfig: ie,
3113
+ serverFunnelQuery: fe,
3114
+ flowCube: F,
3115
+ flowBindingKey: I,
3116
+ flowTimeDimension: ae,
3117
+ eventDimension: oe,
3118
+ startingStep: L,
3119
+ stepsBefore: R,
3120
+ stepsAfter: se,
3121
+ joinStrategy: ce,
3113
3122
  flowDisplayConfig: ue,
3114
- serverFlowQuery: z,
3115
- retentionCube: he,
3116
- retentionBindingKey: ge,
3117
- retentionTimeDimension: _e,
3118
- retentionDateRange: ve,
3119
- retentionCohortFilters: ye,
3120
- retentionActivityFilters: B,
3121
- retentionBreakdowns: be,
3122
- retentionViewGranularity: xe,
3123
- retentionPeriods: Se,
3124
- retentionType: H,
3123
+ serverFlowQuery: pe,
3124
+ retentionCube: me,
3125
+ retentionBindingKey: he,
3126
+ retentionTimeDimension: ge,
3127
+ retentionDateRange: _e,
3128
+ retentionCohortFilters: ve,
3129
+ retentionActivityFilters: V,
3130
+ retentionBreakdowns: ye,
3131
+ retentionViewGranularity: be,
3132
+ retentionPeriods: xe,
3133
+ retentionType: U,
3125
3134
  retentionDisplayConfig: q,
3126
3135
  serverRetentionQuery: J,
3127
3136
  retentionValidation: Ce,
@@ -3139,7 +3148,7 @@ function Hn(e = {}) {
3139
3148
  fieldModalMode: Ye,
3140
3149
  activeTableIndex: et,
3141
3150
  adapterValidation: Xt,
3142
- getQueryConfig: V(() => {
3151
+ getQueryConfig: H(() => {
3143
3152
  let e = r.getState();
3144
3153
  return e.analysisType === "funnel" ? e.buildFunnelQueryFromSteps() || e.buildCurrentQuery() : e.queryStates.length > 1 ? {
3145
3154
  queries: e.buildAllQueries(),
@@ -3150,7 +3159,7 @@ function Hn(e = {}) {
3150
3159
  stepTimeToConvert: e.stepTimeToConvert
3151
3160
  } : e.buildCurrentQuery();
3152
3161
  }, [r]),
3153
- getChartConfig: V(() => {
3162
+ getChartConfig: H(() => {
3154
3163
  let e = r.getState(), t = e.charts[e.analysisType];
3155
3164
  return t ? {
3156
3165
  chartType: t.chartType,
@@ -3167,7 +3176,7 @@ function Hn(e = {}) {
3167
3176
  Ee,
3168
3177
  De
3169
3178
  ]),
3170
- getAnalysisType: V(() => r.getState().analysisType, [r]),
3179
+ getAnalysisType: H(() => r.getState().analysisType, [r]),
3171
3180
  actions: {
3172
3181
  setActiveQueryIndex: s,
3173
3182
  setMergeStrategy: c,
@@ -3285,192 +3294,194 @@ function Jn(e) {
3285
3294
  //#endregion
3286
3295
  //#region src/client/hooks/useAnalysisQuery.ts
3287
3296
  function Yn(e) {
3288
- 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 } = me(), g = u === "funnel" || l, _ = u === "flow", v = u === "retention", y = u === "query" && i, b = u === "query" && !i, x = u === "funnel" && !!d, S = Un({
3289
- isRetentionMode: v,
3290
- isFlowMode: _,
3291
- isFunnelMode: g,
3292
- isMultiMode: y
3293
- }), C = U(() => x || !g || !c || n.length < 2 ? null : _e(n, c), [
3294
- x,
3295
- g,
3297
+ 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, fillMissingDates: h } = e, g = { fillMissingDates: h }, { getFieldLabel: _ } = de(), v = u === "funnel" || l, y = u === "flow", b = u === "retention", x = u === "query" && i, S = u === "query" && !i, C = u === "funnel" && !!d, w = Un({
3298
+ isRetentionMode: b,
3299
+ isFlowMode: y,
3300
+ isFunnelMode: v,
3301
+ isMultiMode: x
3302
+ }), T = W(() => C || !v || !c || n.length < 2 ? null : ge(n, c), [
3303
+ C,
3304
+ v,
3296
3305
  c,
3297
3306
  n
3298
- ]), w = Kn({
3307
+ ]), E = Kn({
3299
3308
  isValidQuery: a,
3300
- isSingleMode: b,
3301
- isMultiMode: y,
3302
- isFunnelMode: g,
3303
- isFlowMode: _,
3304
- isRetentionMode: v,
3309
+ isSingleMode: S,
3310
+ isMultiMode: x,
3311
+ isFunnelMode: v,
3312
+ isFlowMode: y,
3313
+ isRetentionMode: b,
3305
3314
  hasMultiQueryConfig: !!r,
3306
- hasFunnelConfig: !!C,
3315
+ hasFunnelConfig: !!T,
3307
3316
  hasServerFunnelQuery: !!d,
3308
3317
  hasServerFlowQuery: !!f,
3309
3318
  hasServerRetentionQuery: !!p
3310
- }), T = F(t, {
3311
- skip: w.single,
3312
- debounceMs: 300
3313
- }), E = ce(r, {
3314
- skip: w.multi,
3315
- debounceMs: 300
3316
- }), D = ue(C, {
3317
- skip: w.funnel,
3319
+ }), D = F(t, {
3320
+ skip: E.single,
3321
+ debounceMs: 300,
3322
+ gapFill: g
3323
+ }), O = oe(r, {
3324
+ skip: E.multi,
3325
+ debounceMs: 300,
3326
+ gapFill: g
3327
+ }), k = se(T, {
3328
+ skip: E.funnel,
3318
3329
  debounceMs: 300,
3319
- prebuiltServerQuery: x ? d : void 0
3320
- }), O = pe(f ?? null, {
3321
- skip: w.flow,
3330
+ prebuiltServerQuery: C ? d : void 0
3331
+ }), A = ue(f ?? null, {
3332
+ skip: E.flow,
3322
3333
  debounceMs: 300
3323
- }), k = L(p ?? null, {
3324
- skip: w.retention,
3334
+ }), j = ae(p ?? null, {
3335
+ skip: E.retention,
3325
3336
  debounceMs: 300,
3326
- getFieldLabel: h
3327
- }), ee = ge({
3337
+ getFieldLabel: _
3338
+ }), ee = he({
3328
3339
  queries: i ? n : [t],
3329
3340
  isMultiQueryMode: i,
3330
- skip: w.dryRun
3331
- }), A = he(D.serverQuery, { skip: !g || !D.serverQuery }), te = he(O.serverQuery, { skip: !_ || !O.serverQuery }), j = he(p, { skip: !v || !p }), M = Wn(S, {
3332
- retention: k.isLoading || k.isDebouncing,
3333
- flow: O.isLoading || O.isDebouncing,
3334
- funnel: D.isExecuting || D.isDebouncing,
3335
- multi: E.isLoading,
3336
- single: T.isLoading
3337
- }), N = Wn(S, {
3338
- retention: k.isFetching,
3339
- flow: O.isFetching,
3340
- funnel: D.isExecuting,
3341
- multi: E.isFetching,
3342
- single: T.isFetching
3343
- }), ne = Wn(S, {
3344
- retention: k.error,
3345
- flow: O.error,
3346
- funnel: D.error,
3347
- multi: E.error,
3348
- single: T.error
3349
- }), re = !(!T.debouncedQuery && !E.debouncedConfig && D.isDebouncing && O.isDebouncing && k.isDebouncing), ie = V((e) => {
3350
- switch (S) {
3341
+ skip: E.dryRun
3342
+ }), M = me(k.serverQuery, { skip: !v || !k.serverQuery }), N = me(A.serverQuery, { skip: !y || !A.serverQuery }), te = me(p, { skip: !b || !p }), P = Wn(w, {
3343
+ retention: j.isLoading || j.isDebouncing,
3344
+ flow: A.isLoading || A.isDebouncing,
3345
+ funnel: k.isExecuting || k.isDebouncing,
3346
+ multi: O.isLoading,
3347
+ single: D.isLoading
3348
+ }), ne = Wn(w, {
3349
+ retention: j.isFetching,
3350
+ flow: A.isFetching,
3351
+ funnel: k.isExecuting,
3352
+ multi: O.isFetching,
3353
+ single: D.isFetching
3354
+ }), re = Wn(w, {
3355
+ retention: j.error,
3356
+ flow: A.error,
3357
+ funnel: k.error,
3358
+ multi: O.error,
3359
+ single: D.error
3360
+ }), ie = !(!D.debouncedQuery && !O.debouncedConfig && k.isDebouncing && A.isDebouncing && j.isDebouncing), I = H((e) => {
3361
+ switch (w) {
3351
3362
  case "retention":
3352
- k.execute(e);
3363
+ j.execute(e);
3353
3364
  break;
3354
3365
  case "flow":
3355
- O.refetch(e);
3366
+ A.refetch(e);
3356
3367
  break;
3357
3368
  case "funnel":
3358
- D.execute(e);
3369
+ k.execute(e);
3359
3370
  break;
3360
3371
  case "multi":
3361
- E.refetch(e);
3372
+ O.refetch(e);
3362
3373
  break;
3363
- default: T.refetch(e);
3374
+ default: D.refetch(e);
3364
3375
  }
3365
3376
  }, [
3366
- S,
3377
+ w,
3378
+ j,
3379
+ A,
3367
3380
  k,
3368
3381
  O,
3369
- D,
3370
- E,
3371
- T
3372
- ]), ae = U(() => qn({
3373
- hasResults: Wn(S, {
3374
- retention: k.chartData,
3375
- flow: O.data,
3376
- funnel: D.chartData,
3377
- multi: E.data,
3378
- single: T.rawData
3382
+ D
3383
+ ]), L = W(() => qn({
3384
+ hasResults: Wn(w, {
3385
+ retention: j.chartData,
3386
+ flow: A.data,
3387
+ funnel: k.chartData,
3388
+ multi: O.data,
3389
+ single: D.rawData
3379
3390
  }),
3380
3391
  initialData: o,
3381
3392
  isValidQuery: a,
3382
- isLoading: M,
3383
- isFetching: N,
3384
- error: ne
3393
+ isLoading: P,
3394
+ isFetching: ne,
3395
+ error: re
3385
3396
  }), [
3386
3397
  a,
3387
- M,
3388
- N,
3398
+ P,
3389
3399
  ne,
3390
- T.rawData,
3391
- E.data,
3392
- D.chartData,
3400
+ re,
3401
+ D.rawData,
3393
3402
  O.data,
3394
3403
  k.chartData,
3404
+ A.data,
3405
+ j.chartData,
3395
3406
  o,
3396
- S
3397
- ]), P = U(() => Jn({
3398
- isRetentionMode: v,
3399
- isFlowMode: _,
3400
- isFunnelMode: g,
3401
- isMultiMode: y,
3402
- retentionChartData: k.chartData,
3403
- flowData: O.data,
3404
- funnelChartData: D.chartData,
3405
- multiData: E.data,
3406
- singleRawData: T.rawData,
3407
+ w
3408
+ ]), R = W(() => Jn({
3409
+ isRetentionMode: b,
3410
+ isFlowMode: y,
3411
+ isFunnelMode: v,
3412
+ isMultiMode: x,
3413
+ retentionChartData: j.chartData,
3414
+ flowData: A.data,
3415
+ funnelChartData: k.chartData,
3416
+ multiData: O.data,
3417
+ singleRawData: D.rawData,
3407
3418
  initialData: o
3408
3419
  }), [
3409
- T.rawData,
3410
- E.data,
3411
- D.chartData,
3420
+ D.rawData,
3412
3421
  O.data,
3413
3422
  k.chartData,
3423
+ A.data,
3424
+ j.chartData,
3414
3425
  o,
3426
+ x,
3427
+ v,
3415
3428
  y,
3416
- g,
3417
- _,
3418
- v
3419
- ]), oe = U(() => g && D.stepResults ? D.stepResults.map((e) => e.data) : !y || !E.perQueryData ? null : E.perQueryData, [
3420
- y,
3421
- g,
3422
- E.perQueryData,
3423
- D.stepResults
3424
- ]), { funnelExecutedQueries: se, funnelServerQuery: I, funnelDebugData: le, flowServerQuery: R, flowChartData: de, flowDebugData: fe, retentionServerQuery: z, retentionChartData: ve, retentionDebugData: ye } = Gn({
3425
- isFunnelMode: g,
3426
- isFlowMode: _,
3427
- isRetentionMode: v,
3428
- funnelExecutedQueries: D.executedQueries,
3429
- funnelServerQuery: D.serverQuery,
3430
- funnelDebugData: A.debugData,
3431
- flowServerQuery: O.serverQuery,
3432
- flowData: O.data,
3433
- flowDebugData: te.debugData,
3429
+ b
3430
+ ]), ce = W(() => v && k.stepResults ? k.stepResults.map((e) => e.data) : !x || !O.perQueryData ? null : O.perQueryData, [
3431
+ x,
3432
+ v,
3433
+ O.perQueryData,
3434
+ k.stepResults
3435
+ ]), { funnelExecutedQueries: le, funnelServerQuery: z, funnelDebugData: fe, flowServerQuery: B, flowChartData: pe, flowDebugData: _e, retentionServerQuery: ve, retentionChartData: V, retentionDebugData: ye } = Gn({
3436
+ isFunnelMode: v,
3437
+ isFlowMode: y,
3438
+ isRetentionMode: b,
3439
+ funnelExecutedQueries: k.executedQueries,
3440
+ funnelServerQuery: k.serverQuery,
3441
+ funnelDebugData: M.debugData,
3442
+ flowServerQuery: A.serverQuery,
3443
+ flowData: A.data,
3444
+ flowDebugData: N.debugData,
3434
3445
  retentionServerQuery: p ?? null,
3435
- retentionChartData: k.chartData,
3436
- retentionDebugData: j.debugData
3437
- }), B = U(() => Wn(S, {
3438
- retention: k.needsRefresh,
3439
- flow: O.needsRefresh,
3440
- funnel: D.needsRefresh,
3446
+ retentionChartData: j.chartData,
3447
+ retentionDebugData: te.debugData
3448
+ }), be = W(() => Wn(w, {
3449
+ retention: j.needsRefresh,
3450
+ flow: A.needsRefresh,
3451
+ funnel: k.needsRefresh,
3441
3452
  multi: !1,
3442
- single: T.needsRefresh
3453
+ single: D.needsRefresh
3443
3454
  }), [
3444
- S,
3455
+ w,
3456
+ j.needsRefresh,
3457
+ A.needsRefresh,
3445
3458
  k.needsRefresh,
3446
- O.needsRefresh,
3447
- D.needsRefresh,
3448
- T.needsRefresh
3449
- ]), be = U(() => {
3450
- if (b && T.warnings) return T.warnings;
3451
- }, [b, T.warnings]);
3459
+ D.needsRefresh
3460
+ ]), xe = W(() => {
3461
+ if (S && D.warnings) return D.warnings;
3462
+ }, [S, D.warnings]);
3452
3463
  return {
3453
- executionStatus: ae,
3454
- executionResults: P,
3455
- perQueryResults: oe,
3456
- isLoading: M,
3457
- isFetching: N,
3458
- error: ne,
3464
+ executionStatus: L,
3465
+ executionResults: R,
3466
+ perQueryResults: ce,
3467
+ isLoading: P,
3468
+ isFetching: ne,
3469
+ error: re,
3459
3470
  debugDataPerQuery: ee.debugDataPerQuery,
3460
- hasDebounced: re,
3461
- refetch: ie,
3462
- funnelExecutedQueries: se,
3463
- funnelServerQuery: I,
3464
- funnelDebugData: le,
3465
- flowServerQuery: R,
3466
- flowChartData: de,
3467
- flowDebugData: fe,
3468
- retentionServerQuery: z,
3469
- retentionChartData: ve,
3471
+ hasDebounced: ie,
3472
+ refetch: I,
3473
+ funnelExecutedQueries: le,
3474
+ funnelServerQuery: z,
3475
+ funnelDebugData: fe,
3476
+ flowServerQuery: B,
3477
+ flowChartData: pe,
3478
+ flowDebugData: _e,
3479
+ retentionServerQuery: ve,
3480
+ retentionChartData: V,
3470
3481
  retentionDebugData: ye,
3471
3482
  retentionValidation: m ?? null,
3472
- needsRefresh: B,
3473
- warnings: be
3483
+ needsRefresh: be,
3484
+ warnings: xe
3474
3485
  };
3475
3486
  }
3476
3487
  //#endregion
@@ -3485,7 +3496,7 @@ function er(e) {
3485
3496
  let t = (0, Xn.decompressFromEncodedURIComponent)(e);
3486
3497
  if (!t) return null;
3487
3498
  let n = JSON.parse(t);
3488
- return j(n) ? n : (console.warn("[shareUtils] Invalid AnalysisConfig in share URL"), null);
3499
+ return A(n) ? n : (console.warn("[shareUtils] Invalid AnalysisConfig in share URL"), null);
3489
3500
  } catch {
3490
3501
  return null;
3491
3502
  }
@@ -3578,19 +3589,19 @@ function lr(e) {
3578
3589
  return typeof e == "object" && !!e && "funnel" in e && typeof e.funnel == "object";
3579
3590
  }
3580
3591
  function ur(e) {
3581
- let { state: t, query: n, aiEndpoint: r = "/api/ai", onQueryChange: i, onChartConfigChange: a } = e, { storeApi: o, actions: s } = t, { apiOptions: l } = c(), u = W(!1);
3582
- H(() => {
3592
+ let { state: t, query: n, aiEndpoint: r = "/api/ai", onQueryChange: i, onChartConfigChange: a } = e, { storeApi: o, actions: s } = t, { apiOptions: l } = c(), u = G(!1);
3593
+ U(() => {
3583
3594
  if (u.current) return;
3584
3595
  u.current = !0;
3585
3596
  let e = or();
3586
3597
  e && (o.getState().load(e), ar());
3587
- }, [o]), H(() => {
3598
+ }, [o]), U(() => {
3588
3599
  i && t.isValidQuery && i(t.currentQuery);
3589
3600
  }, [
3590
3601
  t.currentQuery,
3591
3602
  t.isValidQuery,
3592
3603
  i
3593
- ]), H(() => {
3604
+ ]), U(() => {
3594
3605
  a && a({
3595
3606
  chartType: t.chartType,
3596
3607
  chartConfig: t.chartConfig,
@@ -3602,46 +3613,46 @@ function ur(e) {
3602
3613
  t.displayConfig,
3603
3614
  a
3604
3615
  ]);
3605
- let { combinedMetrics: d, combinedBreakdowns: f, chartType: p, chartConfig: g, userManuallySelectedChart: _ } = t, { hasDebounced: v } = n, { setChartType: y, setChartConfig: b } = s, x = W("");
3606
- H(() => {
3607
- if (!v || d.length === 0 && f.length === 0) return;
3616
+ let { combinedMetrics: d, combinedBreakdowns: p, chartType: m, chartConfig: h, userManuallySelectedChart: g } = t, { hasDebounced: _ } = n, { setChartType: v, setChartConfig: y } = s, b = G("");
3617
+ U(() => {
3618
+ if (!_ || d.length === 0 && p.length === 0) return;
3608
3619
  let e = JSON.stringify({
3609
3620
  metrics: d.map((e) => e.field),
3610
- breakdowns: f.map((e) => ({
3621
+ breakdowns: p.map((e) => ({
3611
3622
  field: e.field,
3612
3623
  isTime: e.isTimeDimension
3613
3624
  }))
3614
3625
  });
3615
- if (e === x.current) return;
3616
- x.current = e;
3617
- let t = Mt(d, f, p, _);
3626
+ if (e === b.current) return;
3627
+ b.current = e;
3628
+ let t = Mt(d, p, m, g);
3618
3629
  if (t) {
3619
- let { chartConfig: e } = At(d, f, t);
3620
- y(t), b(e), s.setUserManuallySelectedChart(!1);
3621
- } else if (d.length > 0 || f.length > 0) {
3622
- if (p === "table" || p === "recordsTable") {
3623
- let e = p === "recordsTable" ? "columns" : "xAxis", t = [...f.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));
3624
- i.length > 0 && b({
3625
- ...g,
3630
+ let { chartConfig: e } = At(d, p, t);
3631
+ v(t), y(e), s.setUserManuallySelectedChart(!1);
3632
+ } else if (d.length > 0 || p.length > 0) {
3633
+ if (m === "table" || m === "recordsTable") {
3634
+ let e = m === "recordsTable" ? "columns" : "xAxis", t = [...p.map((e) => e.field), ...d.map((e) => e.field)], n = Array.isArray(h[e]) ? h[e] : [], r = new Set(h.hiddenColumns ?? []), i = t.filter((e) => !n.includes(e) && !r.has(e));
3635
+ i.length > 0 && y({
3636
+ ...h,
3626
3637
  [e]: [...n, ...i]
3627
3638
  });
3628
- } else if (!g.xAxis?.length && !g.yAxis?.length && !g.series?.length) {
3629
- let { chartConfig: e } = At(d, f, p);
3630
- b(e);
3639
+ } else if (!h.xAxis?.length && !h.yAxis?.length && !h.series?.length) {
3640
+ let { chartConfig: e } = At(d, p, m);
3641
+ y(e);
3631
3642
  }
3632
3643
  }
3633
3644
  }, [
3634
- v,
3645
+ _,
3635
3646
  d,
3636
- f,
3637
3647
  p,
3638
- _,
3648
+ m,
3639
3649
  g,
3650
+ h,
3651
+ v,
3640
3652
  y,
3641
- b,
3642
3653
  s
3643
3654
  ]);
3644
- let [S, C] = G({
3655
+ let [x, S] = K({
3645
3656
  isOpen: !1,
3646
3657
  userPrompt: "",
3647
3658
  isGenerating: !1,
@@ -3649,7 +3660,7 @@ function ur(e) {
3649
3660
  hasGeneratedQuery: !1,
3650
3661
  previousState: null,
3651
3662
  previousConfig: null
3652
- }), w = V((e) => {
3663
+ }), C = H((e) => {
3653
3664
  o.getState().updateQueryState(t.activeQueryIndex, (t) => {
3654
3665
  let n = e(t);
3655
3666
  return {
@@ -3658,10 +3669,11 @@ function ur(e) {
3658
3669
  breakdowns: n.breakdowns,
3659
3670
  filters: n.filters,
3660
3671
  order: n.order,
3661
- limit: n.limit
3672
+ limit: n.limit,
3673
+ fillMissingDatesValue: n.fillMissingDatesValue
3662
3674
  };
3663
3675
  });
3664
- }, [o, t.activeQueryIndex]), T = V((e) => {
3676
+ }, [o, t.activeQueryIndex]), T = H((e) => {
3665
3677
  let t = {
3666
3678
  version: 1,
3667
3679
  analysisType: "funnel",
@@ -3674,9 +3686,9 @@ function ur(e) {
3674
3686
  query: e
3675
3687
  };
3676
3688
  o.getState().load(t);
3677
- }, [o]), E = V(() => {
3689
+ }, [o]), E = H(() => {
3678
3690
  let e = o.getState().save();
3679
- C({
3691
+ S({
3680
3692
  isOpen: !0,
3681
3693
  userPrompt: "",
3682
3694
  isGenerating: !1,
@@ -3702,30 +3714,30 @@ function ur(e) {
3702
3714
  t.chartConfig,
3703
3715
  t.displayConfig,
3704
3716
  t.analysisType
3705
- ]), D = V(() => {
3706
- C((e) => ({
3717
+ ]), D = H(() => {
3718
+ S((e) => ({
3707
3719
  ...e,
3708
3720
  isOpen: !1,
3709
3721
  userPrompt: "",
3710
3722
  error: null,
3711
3723
  hasGeneratedQuery: !1
3712
3724
  }));
3713
- }, []), O = V((e) => {
3714
- C((t) => ({
3725
+ }, []), O = H((e) => {
3726
+ S((t) => ({
3715
3727
  ...t,
3716
3728
  userPrompt: e
3717
3729
  }));
3718
- }, []), k = V(async () => {
3719
- if (S.userPrompt.trim()) {
3720
- C((e) => ({
3730
+ }, []), k = H(async () => {
3731
+ if (x.userPrompt.trim()) {
3732
+ S((e) => ({
3721
3733
  ...e,
3722
3734
  isGenerating: !0,
3723
3735
  error: null
3724
3736
  }));
3725
3737
  try {
3726
- let e = cr(await sr("", 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;
3738
+ let e = cr(await sr("", x.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;
3727
3739
  if (lr(i)) {
3728
- s.setAnalysisType("funnel"), T(i), s.setChartType("funnel"), o && s.setChartConfig(o), s.setActiveView("chart"), C((e) => ({
3740
+ s.setAnalysisType("funnel"), T(i), s.setChartType("funnel"), o && s.setChartConfig(o), s.setActiveView("chart"), S((e) => ({
3729
3741
  ...e,
3730
3742
  isGenerating: !1,
3731
3743
  hasGeneratedQuery: !0
@@ -3733,33 +3745,35 @@ function ur(e) {
3733
3745
  return;
3734
3746
  }
3735
3747
  let c = i;
3736
- w((e) => ({
3748
+ C((e) => ({
3737
3749
  ...e,
3738
3750
  metrics: (c.measures || []).map((e, t) => ({
3739
- id: h(),
3751
+ id: f(),
3740
3752
  field: e,
3741
- label: m(t)
3753
+ label: w(t)
3742
3754
  })),
3743
3755
  breakdowns: [...(c.dimensions || []).map((e) => ({
3744
- id: h(),
3756
+ id: f(),
3745
3757
  field: e,
3746
3758
  isTimeDimension: !1
3747
3759
  })), ...(c.timeDimensions || []).map((e) => ({
3748
- id: h(),
3760
+ id: f(),
3749
3761
  field: e.dimension,
3750
3762
  granularity: e.granularity,
3763
+ ...e.fillMissingDates !== void 0 && { fillMissingDates: e.fillMissingDates },
3751
3764
  isTimeDimension: !0
3752
3765
  }))],
3753
3766
  filters: c.filters || [],
3754
3767
  order: c.order || void 0,
3755
- limit: c.limit ?? void 0
3756
- })), t.analysisType === "funnel" && s.setAnalysisType("query"), a && s.setChartType(a), o && s.setChartConfig(o), s.setActiveView("chart"), C((e) => ({
3768
+ limit: c.limit ?? void 0,
3769
+ fillMissingDatesValue: c.fillMissingDatesValue
3770
+ })), t.analysisType === "funnel" && s.setAnalysisType("query"), a && s.setChartType(a), o && s.setChartConfig(o), s.setActiveView("chart"), S((e) => ({
3757
3771
  ...e,
3758
3772
  isGenerating: !1,
3759
3773
  hasGeneratedQuery: !0
3760
3774
  }));
3761
3775
  } catch (e) {
3762
- C((t) => ({
3776
+ S((t) => ({
3763
3777
  ...t,
3764
3778
  isGenerating: !1,
3765
3779
  error: e instanceof Error ? e.message : "Failed to generate query"
@@ -3767,15 +3781,15 @@ function ur(e) {
3767
3781
  }
3768
3782
  }
3769
3783
  }, [
3770
- S.userPrompt,
3784
+ x.userPrompt,
3771
3785
  r,
3772
3786
  l?.headers,
3773
- w,
3787
+ C,
3774
3788
  T,
3775
3789
  t.analysisType,
3776
3790
  s
3777
- ]), ee = V(() => {
3778
- C({
3791
+ ]), A = H(() => {
3792
+ S({
3779
3793
  isOpen: !1,
3780
3794
  userPrompt: "",
3781
3795
  isGenerating: !1,
@@ -3784,13 +3798,13 @@ function ur(e) {
3784
3798
  previousState: null,
3785
3799
  previousConfig: null
3786
3800
  });
3787
- }, []), A = V(() => {
3788
- S.previousConfig ? o.getState().load(S.previousConfig) : S.previousState && (w((e) => ({
3801
+ }, []), j = H(() => {
3802
+ x.previousConfig ? o.getState().load(x.previousConfig) : x.previousState && (C((e) => ({
3789
3803
  ...e,
3790
- metrics: S.previousState.metrics,
3791
- breakdowns: S.previousState.breakdowns,
3792
- filters: S.previousState.filters
3793
- })), s.setChartType(S.previousState.chartType), s.setChartConfig(S.previousState.chartConfig), s.setDisplayConfig(S.previousState.displayConfig), S.previousState.analysisType && s.setAnalysisType(S.previousState.analysisType)), C({
3804
+ metrics: x.previousState.metrics,
3805
+ breakdowns: x.previousState.breakdowns,
3806
+ filters: x.previousState.filters
3807
+ })), s.setChartType(x.previousState.chartType), s.setChartConfig(x.previousState.chartConfig), s.setDisplayConfig(x.previousState.displayConfig), x.previousState.analysisType && s.setAnalysisType(x.previousState.analysisType)), S({
3794
3808
  isOpen: !1,
3795
3809
  userPrompt: "",
3796
3810
  isGenerating: !1,
@@ -3800,23 +3814,23 @@ function ur(e) {
3800
3814
  previousConfig: null
3801
3815
  });
3802
3816
  }, [
3803
- S.previousState,
3804
- S.previousConfig,
3817
+ x.previousState,
3818
+ x.previousConfig,
3805
3819
  o,
3806
- w,
3820
+ C,
3807
3821
  s
3808
- ]), [te, j] = G("idle"), M = t.effectiveIsValidQuery;
3822
+ ]), [ee, M] = K("idle"), N = t.effectiveIsValidQuery;
3809
3823
  return {
3810
- aiState: S,
3824
+ aiState: x,
3811
3825
  openAI: E,
3812
3826
  closeAI: D,
3813
3827
  setAIPrompt: O,
3814
3828
  generateAI: k,
3815
- acceptAI: ee,
3816
- cancelAI: A,
3817
- shareButtonState: te,
3818
- share: V(async () => {
3819
- if (!M) return;
3829
+ acceptAI: A,
3830
+ cancelAI: j,
3831
+ shareButtonState: ee,
3832
+ share: H(async () => {
3833
+ if (!N) return;
3820
3834
  let { encoded: e, queryOnly: t } = nr(o.getState().save());
3821
3835
  if (!e) return;
3822
3836
  let n = `${window.location.origin}${window.location.pathname}#share=${e}`;
@@ -3826,11 +3840,11 @@ function ur(e) {
3826
3840
  let e = document.createElement("textarea");
3827
3841
  e.value = n, document.body.appendChild(e), e.select(), document.execCommand("copy"), document.body.removeChild(e);
3828
3842
  }
3829
- j(t ? "copied-no-chart" : "copied"), setTimeout(() => {
3830
- j("idle");
3843
+ M(t ? "copied-no-chart" : "copied"), setTimeout(() => {
3844
+ M("idle");
3831
3845
  }, 2e3);
3832
- }, [M, o]),
3833
- canShare: M
3846
+ }, [N, o]),
3847
+ canShare: N
3834
3848
  };
3835
3849
  }
3836
3850
  //#endregion
@@ -3850,7 +3864,8 @@ function dr(e = {}) {
3850
3864
  serverFunnelQuery: o.serverFunnelQuery,
3851
3865
  serverFlowQuery: o.serverFlowQuery,
3852
3866
  serverRetentionQuery: o.serverRetentionQuery,
3853
- retentionValidation: o.retentionValidation
3867
+ retentionValidation: o.retentionValidation,
3868
+ fillMissingDates: o.displayConfig.fillMissingDates
3854
3869
  }), l = ur({
3855
3870
  state: o,
3856
3871
  query: c,
@@ -4064,7 +4079,7 @@ function pr(e) {
4064
4079
  }
4065
4080
  function mr(e, t) {
4066
4081
  if (typeof e.dimension == "string") return !0;
4067
- let n = ve(t);
4082
+ let n = _e(t);
4068
4083
  return n ? e.dimension.some((e) => e.cube === n) : !1;
4069
4084
  }
4070
4085
  function hr(e, t) {
@@ -4072,7 +4087,7 @@ function hr(e, t) {
4072
4087
  for (let r = 0; r < t.length; r++) {
4073
4088
  let i = t[r];
4074
4089
  if (!mr(e, i.query)) {
4075
- let e = ve(i.query) || "unknown";
4090
+ let e = _e(i.query) || "unknown";
4076
4091
  n.push({
4077
4092
  type: "cross_cube",
4078
4093
  message: `Step ${r + 1} uses cube "${e}" but no binding key mapping exists for it`,
@@ -4142,4 +4157,4 @@ function br(e) {
4142
4157
  //#endregion
4143
4158
  export { kn as A, En as C, jn as D, Dn as E, Ye as F, Cn as M, Lt as N, Tn as O, it as P, Sn as S, wn as T, Vn as _, hr as a, Ln as b, dr as c, rr as d, tr as f, Fn as g, In as h, fr as i, $ as j, An as k, $n as l, or as m, br as n, _r as o, ir as p, vr as r, pr as s, yr as t, er as u, zn as v, On as w, Nn as x, Pn as y };
4144
4159
 
4145
- //# sourceMappingURL=analysis-builder-shared-BEvvX6ln.js.map
4160
+ //# sourceMappingURL=analysis-builder-shared-CsIs4-Xf.js.map