drizzle-cube 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) 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-B-yljK02.cjs +166 -0
  62. package/dist/adapters/{compiler-BKg3j2mm.js → compiler-BhityGUO.js} +1146 -1108
  63. package/dist/adapters/core/index.cjs +1 -1
  64. package/dist/adapters/core/index.js +1 -1
  65. package/dist/adapters/{core-JgUTMhxl.cjs → core-CQOrzBNh.cjs} +1 -1
  66. package/dist/adapters/{core-Bmb7XMBz.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 +23 -23
  71. package/dist/adapters/{handler-B1_zd-qo.js → handler-ByeQ0-1r.js} +238 -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-BTmAXLo8.js → mcp-transport-Cy6n4uj1.js} +1 -1
  82. package/dist/adapters/{mcp-transport-DzxluRyH.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-Br__Bn2t.cjs → openai-BQl0yJCS.cjs} +2 -2
  86. package/dist/adapters/{openai-BpcMIv4e.js → openai-C4HrjyJj.js} +1 -1
  87. package/dist/adapters/{openai-yfJF-3Rv.js → openai-D3Nt6Bj7.js} +3 -3
  88. package/dist/adapters/{openai-C32tey5N.cjs → openai-z1ai-G4Q.cjs} +1 -1
  89. package/dist/adapters/{utils-i2h5cwI3.js → utils-BaxFceDq.js} +1070 -937
  90. package/dist/adapters/utils-a2p2B6x8.cjs +141 -0
  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/DashboardFilters/useCompactFilterBar.d.ts +5 -0
  95. package/dist/cjs/client/components/analyticsPortlet/usePortletQueryResults.d.ts +3 -1
  96. package/dist/cjs/client/components/dashboardPortletCard/PortletCardHeader.d.ts +2 -0
  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 +3 -0
  102. package/dist/cjs/client/utils/filterUtils.d.ts +30 -0
  103. package/dist/cjs/client/utils/gapFilling.d.ts +52 -0
  104. package/dist/cjs/client/utils/index.d.ts +1 -0
  105. package/dist/cjs/client/utils/joinReachability.d.ts +1 -0
  106. package/dist/cjs/server/ai/query-schema.d.ts +8 -3
  107. package/dist/cjs/server/builders/date-time-builder.d.ts +1 -1
  108. package/dist/cjs/server/builders/date-time-helpers.d.ts +2 -0
  109. package/dist/cjs/server/builders/filter-builder.d.ts +1 -1
  110. package/dist/cjs/server/builders/in-date-range-validation.d.ts +25 -0
  111. package/dist/cjs/server/execution/result-post-processor.d.ts +4 -2
  112. package/dist/cjs/server/executor.d.ts +2 -0
  113. package/dist/cjs/server/gap-filler.d.ts +8 -43
  114. package/dist/cjs/server/types/core.d.ts +2 -0
  115. package/dist/cjs/server/types/cube.d.ts +12 -0
  116. package/dist/cjs/server/types/metadata.d.ts +5 -0
  117. package/dist/cjs/server/types/query.d.ts +2 -1
  118. package/dist/client/charts/chartConfigHelpers.d.ts +5 -0
  119. package/dist/client/charts.js +12 -12
  120. package/dist/client/chunks/{DashboardEditModal-P-HUNrcp.js → DashboardEditModal-CIR4aqr7.js} +2424 -2559
  121. package/dist/client/chunks/DashboardEditModal-CIR4aqr7.js.map +1 -0
  122. package/dist/client/chunks/{DotStripChart-in6QHc0b.js → DotStripChart-B9IVCFPO.js} +3 -3
  123. package/dist/client/chunks/{DotStripChart-in6QHc0b.js.map → DotStripChart-B9IVCFPO.js.map} +1 -1
  124. package/dist/client/chunks/{ProportionBarChart-CjuOm7NT.js → ProportionBarChart-DieF9AzP.js} +3 -3
  125. package/dist/client/chunks/{ProportionBarChart-CjuOm7NT.js.map → ProportionBarChart-DieF9AzP.js.map} +1 -1
  126. package/dist/client/chunks/{RecordsTable-CXXsiaV1.js → RecordsTable-Mo3ai5_M.js} +4 -4
  127. package/dist/client/chunks/{RecordsTable-CXXsiaV1.js.map → RecordsTable-Mo3ai5_M.js.map} +1 -1
  128. package/dist/client/chunks/{RetentionCombinedChart-DFCeEFkx.js → RetentionCombinedChart-Bie4ADyA.js} +3 -3
  129. package/dist/client/chunks/{RetentionCombinedChart-DFCeEFkx.js.map → RetentionCombinedChart-Bie4ADyA.js.map} +1 -1
  130. package/dist/client/chunks/{RetentionHeatmap-jpshJ2Af.js → RetentionHeatmap-qstIAx5B.js} +2 -2
  131. package/dist/client/chunks/{RetentionHeatmap-jpshJ2Af.js.map → RetentionHeatmap-qstIAx5B.js.map} +1 -1
  132. package/dist/client/chunks/{af-ZA-C0dGb_53.js → af-ZA-BglLInx4.js} +13 -1
  133. package/dist/client/chunks/{af-ZA-C0dGb_53.js.map → af-ZA-BglLInx4.js.map} +1 -1
  134. package/dist/client/chunks/{analysis-builder-CRghdHVl.js → analysis-builder-DJNYt7CF.js} +41 -41
  135. package/dist/client/chunks/{analysis-builder-CRghdHVl.js.map → analysis-builder-DJNYt7CF.js.map} +1 -1
  136. package/dist/client/chunks/{analysis-builder-shared-DBSxWIj8.js → analysis-builder-shared-DPLR8upd.js} +487 -483
  137. package/dist/client/chunks/analysis-builder-shared-DPLR8upd.js.map +1 -0
  138. package/dist/client/chunks/{chart-activity-grid-DGazwi4C.js → chart-activity-grid-Ly_-2B-f.js} +22 -4
  139. package/dist/client/chunks/chart-activity-grid-Ly_-2B-f.js.map +1 -0
  140. package/dist/client/chunks/{chart-area-zyLGD-ym.js → chart-area-D3l-71Wy.js} +2 -2
  141. package/dist/client/chunks/{chart-area-zyLGD-ym.js.map → chart-area-D3l-71Wy.js.map} +1 -1
  142. package/dist/client/chunks/{chart-bar-DMCBq8qJ.js → chart-bar-BaTyQOqs.js} +3 -3
  143. package/dist/client/chunks/{chart-bar-DMCBq8qJ.js.map → chart-bar-BaTyQOqs.js.map} +1 -1
  144. package/dist/client/chunks/{chart-box-plot-5Z55A-it.js → chart-box-plot-Cem6PHjz.js} +2 -2
  145. package/dist/client/chunks/{chart-box-plot-5Z55A-it.js.map → chart-box-plot-Cem6PHjz.js.map} +1 -1
  146. package/dist/client/chunks/{chart-bubble-YD28dX8w.js → chart-bubble-DFlfqCDG.js} +2 -2
  147. package/dist/client/chunks/{chart-bubble-YD28dX8w.js.map → chart-bubble-DFlfqCDG.js.map} +1 -1
  148. package/dist/client/chunks/{chart-candlestick-BUMpBI08.js → chart-candlestick-BkAFBXtZ.js} +2 -2
  149. package/dist/client/chunks/{chart-candlestick-BUMpBI08.js.map → chart-candlestick-BkAFBXtZ.js.map} +1 -1
  150. package/dist/client/chunks/{chart-config-area-DsrZCIwF.js → chart-config-area-BnsRQ-MY.js} +35 -14
  151. package/dist/client/chunks/chart-config-area-BnsRQ-MY.js.map +1 -0
  152. package/dist/client/chunks/{chart-config-bar-BixSs43E.js → chart-config-bar-G2HJJBVV.js} +8 -7
  153. package/dist/client/chunks/chart-config-bar-G2HJJBVV.js.map +1 -0
  154. package/dist/client/chunks/{chart-config-kpi-delta-Cl7k6jTj.js → chart-config-kpi-delta-BIAq1Ftg.js} +2 -2
  155. package/dist/client/chunks/{chart-config-kpi-delta-Cl7k6jTj.js.map → chart-config-kpi-delta-BIAq1Ftg.js.map} +1 -1
  156. package/dist/client/chunks/{chart-config-kpi-number-DCcnANWC.js → chart-config-kpi-number-Dgc4gIYu.js} +2 -2
  157. package/dist/client/chunks/{chart-config-kpi-number-DCcnANWC.js.map → chart-config-kpi-number-Dgc4gIYu.js.map} +1 -1
  158. package/dist/client/chunks/{chart-config-line-CBF9Px9b.js → chart-config-line-DLkRs1Zr.js} +9 -8
  159. package/dist/client/chunks/chart-config-line-DLkRs1Zr.js.map +1 -0
  160. package/dist/client/chunks/{chart-config-pie-DZLa6Eqm.js → chart-config-pie-XrHim0C8.js} +2 -2
  161. package/dist/client/chunks/{chart-config-pie-DZLa6Eqm.js.map → chart-config-pie-XrHim0C8.js.map} +1 -1
  162. package/dist/client/chunks/{chart-config-radar-DR6vHHyd.js → chart-config-radar-xNS6Juqc.js} +2 -2
  163. package/dist/client/chunks/{chart-config-radar-DR6vHHyd.js.map → chart-config-radar-xNS6Juqc.js.map} +1 -1
  164. package/dist/client/chunks/{chart-config-radial-bar-DVFou4fB.js → chart-config-radial-bar-ChUChsEe.js} +2 -2
  165. package/dist/client/chunks/{chart-config-radial-bar-DVFou4fB.js.map → chart-config-radial-bar-ChUChsEe.js.map} +1 -1
  166. package/dist/client/chunks/{chart-config-tree-map-Uhise6Bx.js → chart-config-tree-map-CnrJ7OC1.js} +2 -2
  167. package/dist/client/chunks/{chart-config-tree-map-Uhise6Bx.js.map → chart-config-tree-map-CnrJ7OC1.js.map} +1 -1
  168. package/dist/client/chunks/{chart-data-table-BdMo3zVh.js → chart-data-table-Cxd0cdAl.js} +36 -36
  169. package/dist/client/chunks/{chart-data-table-BdMo3zVh.js.map → chart-data-table-Cxd0cdAl.js.map} +1 -1
  170. package/dist/client/chunks/{chart-funnel-BRyZS6ie.js → chart-funnel-71Kn4eeF.js} +2 -2
  171. package/dist/client/chunks/{chart-funnel-BRyZS6ie.js.map → chart-funnel-71Kn4eeF.js.map} +1 -1
  172. package/dist/client/chunks/{chart-gauge-DxgHlZKp.js → chart-gauge-BddS_9oS.js} +3 -3
  173. package/dist/client/chunks/{chart-gauge-DxgHlZKp.js.map → chart-gauge-BddS_9oS.js.map} +1 -1
  174. package/dist/client/chunks/{chart-heat-map-5jHm3f-V.js → chart-heat-map-BQIsrn8m.js} +3 -3
  175. package/dist/client/chunks/{chart-heat-map-5jHm3f-V.js.map → chart-heat-map-BQIsrn8m.js.map} +1 -1
  176. package/dist/client/chunks/{chart-kpi-delta-C84P-mwu.js → chart-kpi-delta-DndbqdZT.js} +3 -3
  177. package/dist/client/chunks/{chart-kpi-delta-C84P-mwu.js.map → chart-kpi-delta-DndbqdZT.js.map} +1 -1
  178. package/dist/client/chunks/{chart-kpi-number-D9GqtBWw.js → chart-kpi-number-DAbfoHMt.js} +5 -5
  179. package/dist/client/chunks/{chart-kpi-number-D9GqtBWw.js.map → chart-kpi-number-DAbfoHMt.js.map} +1 -1
  180. package/dist/client/chunks/{chart-kpi-text-D3HqxXzU.js → chart-kpi-text-D8oQgpxL.js} +3 -3
  181. package/dist/client/chunks/{chart-kpi-text-D3HqxXzU.js.map → chart-kpi-text-D8oQgpxL.js.map} +1 -1
  182. package/dist/client/chunks/{chart-line-IEgiF8Nv.js → chart-line-BNqjUowg.js} +3 -3
  183. package/dist/client/chunks/{chart-line-IEgiF8Nv.js.map → chart-line-BNqjUowg.js.map} +1 -1
  184. package/dist/client/chunks/{chart-markdown-B_2Ed7FJ.js → chart-markdown-DtgpU3xd.js} +2 -2
  185. package/dist/client/chunks/{chart-markdown-B_2Ed7FJ.js.map → chart-markdown-DtgpU3xd.js.map} +1 -1
  186. package/dist/client/chunks/{chart-measure-profile-CWsPrQhH.js → chart-measure-profile-D5nZMWlI.js} +3 -3
  187. package/dist/client/chunks/{chart-measure-profile-CWsPrQhH.js.map → chart-measure-profile-D5nZMWlI.js.map} +1 -1
  188. package/dist/client/chunks/{chart-pie-BEB2sCXF.js → chart-pie-D8r9HCZ4.js} +3 -3
  189. package/dist/client/chunks/{chart-pie-BEB2sCXF.js.map → chart-pie-D8r9HCZ4.js.map} +1 -1
  190. package/dist/client/chunks/{chart-radar-BbSbXKbP.js → chart-radar-R4PuCIWp.js} +3 -3
  191. package/dist/client/chunks/{chart-radar-BbSbXKbP.js.map → chart-radar-R4PuCIWp.js.map} +1 -1
  192. package/dist/client/chunks/{chart-radial-bar-CNYD7tkM.js → chart-radial-bar-hmrSFa6O.js} +3 -3
  193. package/dist/client/chunks/{chart-radial-bar-CNYD7tkM.js.map → chart-radial-bar-hmrSFa6O.js.map} +1 -1
  194. package/dist/client/chunks/{chart-sankey-DKnTIvSr.js → chart-sankey-CFXPybny.js} +2 -2
  195. package/dist/client/chunks/{chart-sankey-DKnTIvSr.js.map → chart-sankey-CFXPybny.js.map} +1 -1
  196. package/dist/client/chunks/{chart-scatter-CSWF6-lx.js → chart-scatter-CH82md0L.js} +3 -3
  197. package/dist/client/chunks/{chart-scatter-CSWF6-lx.js.map → chart-scatter-CH82md0L.js.map} +1 -1
  198. package/dist/client/chunks/{chart-sunburst-CdGzCq7q.js → chart-sunburst-CTj95eEC.js} +3 -3
  199. package/dist/client/chunks/{chart-sunburst-CdGzCq7q.js.map → chart-sunburst-CTj95eEC.js.map} +1 -1
  200. package/dist/client/chunks/{chart-tree-map-BiXB7EiM.js → chart-tree-map-CmysE4bF.js} +3 -3
  201. package/dist/client/chunks/{chart-tree-map-BiXB7EiM.js.map → chart-tree-map-CmysE4bF.js.map} +1 -1
  202. package/dist/client/chunks/{chart-waterfall-5rSDeLEZ.js → chart-waterfall-Bv1mPvlB.js} +3 -3
  203. package/dist/client/chunks/{chart-waterfall-5rSDeLEZ.js.map → chart-waterfall-Bv1mPvlB.js.map} +1 -1
  204. package/dist/client/chunks/{charts-core-CKpkoMCa.js → charts-core-BdEQgbqN.js} +2 -2
  205. package/dist/client/chunks/{charts-core-CKpkoMCa.js.map → charts-core-BdEQgbqN.js.map} +1 -1
  206. package/dist/client/chunks/charts-loader-DoLQqFXg.js +87 -0
  207. package/dist/client/chunks/{charts-loader-BTI0UPK4.js.map → charts-loader-DoLQqFXg.js.map} +1 -1
  208. package/dist/client/chunks/gapFilling-DKBRHcQL.js +391 -0
  209. package/dist/client/chunks/gapFilling-DKBRHcQL.js.map +1 -0
  210. package/dist/client/chunks/{nl-NL-kRjxedTf.js → nl-NL-DVZXf8U7.js} +20 -2
  211. package/dist/client/chunks/nl-NL-DVZXf8U7.js.map +1 -0
  212. package/dist/client/chunks/{schema-visualization-BbvL74Sf.js → schema-visualization-MlRrcJQH.js} +3 -3
  213. package/dist/client/chunks/{schema-visualization-BbvL74Sf.js.map → schema-visualization-MlRrcJQH.js.map} +1 -1
  214. package/dist/client/chunks/{useDirtyStateTracking-BfG1lX_3.js → useDirtyStateTracking-DSkxAJ29.js} +317 -292
  215. package/dist/client/chunks/useDirtyStateTracking-DSkxAJ29.js.map +1 -0
  216. package/dist/client/chunks/{useExplainAI-CDFhgmpE.js → useExplainAI-DRCIVcbu.js} +4 -4
  217. package/dist/client/chunks/{useExplainAI-CDFhgmpE.js.map → useExplainAI-DRCIVcbu.js.map} +1 -1
  218. package/dist/client/chunks/utils-CToHkuhU.js.map +1 -1
  219. package/dist/client/chunks/{vendor-DeckzF1j.js → vendor-BfBpNmMa.js} +2 -2
  220. package/dist/client/chunks/{vendor-DeckzF1j.js.map → vendor-BfBpNmMa.js.map} +1 -1
  221. package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +5 -0
  222. package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +3 -1
  223. package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +2 -0
  224. package/dist/client/components.js +2 -2
  225. package/dist/client/hooks/queries/useCubeLoadQuery.d.ts +7 -0
  226. package/dist/client/hooks/queries/useMultiCubeLoadQuery.d.ts +7 -0
  227. package/dist/client/hooks/useAnalysisQuery.d.ts +6 -1
  228. package/dist/client/hooks.js +3 -3
  229. package/dist/client/icons.js +1 -1
  230. package/dist/client/index.d.ts +2 -0
  231. package/dist/client/index.js +193 -192
  232. package/dist/client/index.js.map +1 -1
  233. package/dist/client/providers.js +1 -1
  234. package/dist/client/schema.js +1 -1
  235. package/dist/client/types.d.ts +3 -0
  236. package/dist/client/utils/filterUtils.d.ts +30 -0
  237. package/dist/client/utils/gapFilling.d.ts +52 -0
  238. package/dist/client/utils/index.d.ts +1 -0
  239. package/dist/client/utils/joinReachability.d.ts +1 -0
  240. package/dist/client/utils.js +9 -8
  241. package/dist/client/utils.js.map +1 -1
  242. package/dist/client-bundle-stats.html +1 -1
  243. package/dist/mcp-app/mcp-app.html +103 -103
  244. package/dist/server/ai/query-schema.d.ts +8 -3
  245. package/dist/server/builders/date-time-builder.d.ts +1 -1
  246. package/dist/server/builders/date-time-helpers.d.ts +2 -0
  247. package/dist/server/builders/filter-builder.d.ts +1 -1
  248. package/dist/server/builders/in-date-range-validation.d.ts +25 -0
  249. package/dist/server/chartConfigHelpers-BhME7ow_.cjs +1 -0
  250. package/dist/server/{chartConfigHelpers-BsnbxA2c.js → chartConfigHelpers-BsviVhEw.js} +27 -7
  251. package/dist/server/execution/result-post-processor.d.ts +4 -2
  252. package/dist/server/executor.d.ts +2 -0
  253. package/dist/server/gap-filler.d.ts +8 -43
  254. package/dist/server/index.cjs +49 -47
  255. package/dist/server/index.js +2114 -1955
  256. package/dist/server/types/core.d.ts +2 -0
  257. package/dist/server/types/cube.d.ts +12 -0
  258. package/dist/server/types/metadata.d.ts +5 -0
  259. package/dist/server/types/query.d.ts +2 -1
  260. package/package.json +2 -1
  261. package/dist/adapters/ActivityGridChart.config-BW77mjsu.cjs +0 -1
  262. package/dist/adapters/ActivityGridChart.config-DQRnTU6e.js +0 -2
  263. package/dist/adapters/AreaChart.config-DbvLVr-Y.cjs +0 -1
  264. package/dist/adapters/AreaChart.config-JbVNmary.js +0 -2
  265. package/dist/adapters/BarChart.config-Bkpwgqbk.js +0 -2
  266. package/dist/adapters/BarChart.config-jgDE3NUv.cjs +0 -1
  267. package/dist/adapters/BoxPlotChart.config-9wKKOZfN.cjs +0 -1
  268. package/dist/adapters/BoxPlotChart.config-Di99sPNJ.js +0 -2
  269. package/dist/adapters/BubbleChart.config-Cdg9nPFz.js +0 -2
  270. package/dist/adapters/BubbleChart.config-CwDXzdxC.cjs +0 -1
  271. package/dist/adapters/CandlestickChart.config-B45GmJYV.js +0 -2
  272. package/dist/adapters/CandlestickChart.config-C8BXzmbD.cjs +0 -1
  273. package/dist/adapters/DataTable.config-c-24M_qU.cjs +0 -1
  274. package/dist/adapters/DataTable.config-fic2OroS.js +0 -2
  275. package/dist/adapters/DotStripChart.config-BcNT3Les.cjs +0 -1
  276. package/dist/adapters/DotStripChart.config-Cqmgw5_z.js +0 -2
  277. package/dist/adapters/FunnelChart.config-D1E5zSay.cjs +0 -1
  278. package/dist/adapters/FunnelChart.config-DPjSoYex.js +0 -2
  279. package/dist/adapters/GaugeChart.config-BDcvnYln.js +0 -2
  280. package/dist/adapters/GaugeChart.config-DQnx37Jf.cjs +0 -1
  281. package/dist/adapters/HeatMapChart.config-BWd863ik.js +0 -2
  282. package/dist/adapters/HeatMapChart.config-HEbSm_Zt.cjs +0 -1
  283. package/dist/adapters/KpiDelta.config-Bj3kfmWv.js +0 -2
  284. package/dist/adapters/KpiDelta.config-CaLnl2w_.cjs +0 -1
  285. package/dist/adapters/KpiNumber.config-Da9HxGT8.cjs +0 -1
  286. package/dist/adapters/KpiNumber.config-n4SwHHlD.js +0 -2
  287. package/dist/adapters/KpiText.config-8VzcnlPF.cjs +0 -1
  288. package/dist/adapters/KpiText.config-CItv_gG6.js +0 -2
  289. package/dist/adapters/LineChart.config-DQ7nHYrr.js +0 -2
  290. package/dist/adapters/LineChart.config-_98RmRA_.cjs +0 -1
  291. package/dist/adapters/MarkdownChart.config-BpbqJDoz.cjs +0 -1
  292. package/dist/adapters/MarkdownChart.config-Dz7KZ621.js +0 -2
  293. package/dist/adapters/MeasureProfileChart.config-BTCTP7L0.js +0 -2
  294. package/dist/adapters/MeasureProfileChart.config-DzPxIxB5.cjs +0 -1
  295. package/dist/adapters/PieChart.config-BhjlnVFv.js +0 -2
  296. package/dist/adapters/PieChart.config-DJlGNsBY.cjs +0 -1
  297. package/dist/adapters/ProportionBarChart.config-Byp_8diR.cjs +0 -1
  298. package/dist/adapters/ProportionBarChart.config-RyjNhw3T.js +0 -2
  299. package/dist/adapters/RadarChart.config-BWdv4uyp.js +0 -2
  300. package/dist/adapters/RadarChart.config-kW4oIVi4.cjs +0 -1
  301. package/dist/adapters/RadialBarChart.config-CFYPoRQY.cjs +0 -1
  302. package/dist/adapters/RadialBarChart.config-D2-_-Z64.js +0 -2
  303. package/dist/adapters/RecordsTable.config-B7KFt3kd.cjs +0 -1
  304. package/dist/adapters/RecordsTable.config-S_aiXGKe.js +0 -2
  305. package/dist/adapters/RetentionCombinedChart.config-CVGWozL3.js +0 -2
  306. package/dist/adapters/RetentionCombinedChart.config-Cd0pTdHY.cjs +0 -1
  307. package/dist/adapters/RetentionHeatmap.config-BNqtWFjQ.js +0 -2
  308. package/dist/adapters/RetentionHeatmap.config-CMi1h_5M.cjs +0 -1
  309. package/dist/adapters/SankeyChart.config-COIfx3Ua.cjs +0 -1
  310. package/dist/adapters/SankeyChart.config-DIh4nEk2.js +0 -2
  311. package/dist/adapters/ScatterChart.config-CrSQhlT4.js +0 -2
  312. package/dist/adapters/ScatterChart.config-DRgg-HAm.cjs +0 -1
  313. package/dist/adapters/SunburstChart.config-08-ufQaK.cjs +0 -1
  314. package/dist/adapters/SunburstChart.config-DmNgAJrO.js +0 -2
  315. package/dist/adapters/TreeMapChart.config-7k2repRB.cjs +0 -1
  316. package/dist/adapters/TreeMapChart.config-C3vzB2dD.js +0 -2
  317. package/dist/adapters/WaterfallChart.config-AV2pHgrb.js +0 -2
  318. package/dist/adapters/WaterfallChart.config-USpcvapo.cjs +0 -1
  319. package/dist/adapters/chartConfigHelpers-BZMu_1EP.cjs +0 -1
  320. package/dist/adapters/compiler-BX6Ug_Uq.cjs +0 -166
  321. package/dist/adapters/handler-CfZt5W8b.cjs +0 -16
  322. package/dist/adapters/mcp-app-html-BNg78ecJ.js +0 -5
  323. package/dist/adapters/mcp-app-html-N18EJEvv.cjs +0 -1
  324. package/dist/adapters/utils-Du_UZbn5.cjs +0 -139
  325. package/dist/client/chunks/DashboardEditModal-P-HUNrcp.js.map +0 -1
  326. package/dist/client/chunks/analysis-builder-shared-DBSxWIj8.js.map +0 -1
  327. package/dist/client/chunks/chart-activity-grid-DGazwi4C.js.map +0 -1
  328. package/dist/client/chunks/chart-config-area-DsrZCIwF.js.map +0 -1
  329. package/dist/client/chunks/chart-config-bar-BixSs43E.js.map +0 -1
  330. package/dist/client/chunks/chart-config-line-CBF9Px9b.js.map +0 -1
  331. package/dist/client/chunks/charts-loader-BTI0UPK4.js +0 -87
  332. package/dist/client/chunks/nl-NL-kRjxedTf.js.map +0 -1
  333. package/dist/client/chunks/useDirtyStateTracking-BfG1lX_3.js.map +0 -1
  334. package/dist/server/chartConfigHelpers-BZMu_1EP.cjs +0 -1
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-Du_UZbn5.cjs");exports.buildTransformedQuery=e.t,exports.calculateQueryComplexity=e.n,exports.formatCubeResponse=e.r,exports.formatErrorResponse=e.i,exports.formatMetaResponse=e.a,exports.formatSqlResponse=e.o,exports.formatSqlString=e.x,exports.generateRequestId=e.s,exports.getDatabaseType=e.c,exports.handleBatchRequest=e.l,exports.handleDiscover=e.p,exports.handleDryRun=e.u,exports.handleLoad=e.m,exports.handleSuggest=e.d,exports.handleValidate=e.f,exports.normalizeQueryFields=e.h;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./utils-a2p2B6x8.cjs");exports.buildTransformedQuery=e.t,exports.calculateQueryComplexity=e.n,exports.formatCubeResponse=e.r,exports.formatErrorResponse=e.i,exports.formatMetaResponse=e.a,exports.formatSqlResponse=e.o,exports.formatSqlString=e.x,exports.generateRequestId=e.s,exports.getDatabaseType=e.c,exports.handleBatchRequest=e.l,exports.handleDiscover=e.p,exports.handleDryRun=e.u,exports.handleLoad=e.m,exports.handleSuggest=e.d,exports.handleValidate=e.f,exports.normalizeQueryFields=e.h;
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, d as n, f as r, h as i, i as a, l as o, m as s, n as c, o as l, p as u, r as d, s as f, t as p, u as m, x as h } from "./utils-i2h5cwI3.js";
1
+ import { a as e, c as t, d as n, f as r, h as i, i as a, l as o, m as s, n as c, o as l, p as u, r as d, s as f, t as p, u as m, x as h } from "./utils-BaxFceDq.js";
2
2
  export { p as buildTransformedQuery, c as calculateQueryComplexity, d as formatCubeResponse, a as formatErrorResponse, e as formatMetaResponse, l as formatSqlResponse, h as formatSqlString, f as generateRequestId, t as getDatabaseType, o as handleBatchRequest, u as handleDiscover, m as handleDryRun, s as handleLoad, n as handleSuggest, r as handleValidate, i as normalizeQueryFields };
@@ -21,6 +21,11 @@ export declare function requiresMeasure({ measureCount }: ChartAvailabilityConte
21
21
  export declare const targetDisplayOption: DisplayOptionConfig;
22
22
  /** Connect-nulls toggle for line/area charts. */
23
23
  export declare const connectNullsDisplayOption: DisplayOptionConfig;
24
+ /**
25
+ * Gap-filling control for time-series charts (issue #1368). `auto` follows the
26
+ * query, then the cube time dimension's `fillMissingDates`, then fills.
27
+ */
28
+ export declare const fillMissingDatesDisplayOption: DisplayOptionConfig;
24
29
  /** Left Y-axis numeric format control (dual-axis charts). */
25
30
  export declare const leftYAxisFormatDisplayOption: DisplayOptionConfig;
26
31
  /** Right Y-axis numeric format control (dual-axis charts). */
@@ -1,4 +1,9 @@
1
1
  import { DashboardFilter } from '../../types.js';
2
+ /**
3
+ * Find the dashboard filter the date control is bound to: the universal time
4
+ * filter when present, otherwise the first simple `inDateRange` filter.
5
+ */
6
+ export declare function findDateControlFilter(filters: DashboardFilter[]): DashboardFilter | undefined;
2
7
  export declare function useCompactFilterBar(dashboardFilters: DashboardFilter[], onDashboardFiltersChange: (filters: DashboardFilter[]) => void): {
3
8
  localFilters: DashboardFilter[];
4
9
  showCustomDropdown: boolean;
@@ -1,5 +1,5 @@
1
1
  import { useCubeLoadQuery, useFunnelQuery, useFlowQuery, useRetentionQuery } from '../../hooks/queries/index.js';
2
- import { CubeQuery, MultiQueryConfig, ServerFunnelQuery } from '../../types.js';
2
+ import { ChartDisplayConfig, CubeQuery, MultiQueryConfig, ServerFunnelQuery } from '../../types.js';
3
3
  import { FlowChartData, ServerFlowQuery } from '../../types/flow.js';
4
4
  import { RetentionChartData, ServerRetentionQuery } from '../../types/retention.js';
5
5
  interface RefreshOptions {
@@ -18,6 +18,8 @@ export interface UsePortletQueryResultsParams {
18
18
  shouldSkipQuery: boolean;
19
19
  eagerLoad: boolean;
20
20
  isVisible: boolean;
21
+ /** Chart display config — its `fillMissingDates` drives client-side gap filling */
22
+ displayConfig?: ChartDisplayConfig;
21
23
  }
22
24
  export interface PortletQueryResults {
23
25
  resultSet: ReturnType<typeof useCubeLoadQuery>['resultSet'];
@@ -17,6 +17,8 @@ interface PortletCardHeaderProps {
17
17
  xlsExportAvailable: boolean;
18
18
  exportInProgress: boolean;
19
19
  showCacheBustIndicator: boolean;
20
+ /** Labels of mapped dashboard date filters that cannot narrow this portlet */
21
+ unreachableDateFilterLabels?: string[];
20
22
  icons: CardIcons;
21
23
  onRefresh: (options?: {
22
24
  bustCache?: boolean;
@@ -1,5 +1,6 @@
1
1
  import { CubeQuery, CubeResultSet } from '../../types.js';
2
2
  import { QueryWarning } from '../../shared/types.js';
3
+ import { ChartGapFillOptions } from '../../utils/gapFilling.js';
3
4
  /**
4
5
  * Create a stable query key from a CubeQuery
5
6
  * The key includes all query parameters to ensure proper caching
@@ -31,6 +32,12 @@ export interface UseCubeLoadQueryOptions {
31
32
  * @default true
32
33
  */
33
34
  keepPreviousData?: boolean;
35
+ /**
36
+ * Fill missing time buckets for a chart (Cube.js-style, client-side). The
37
+ * server returns observed rows only; when set, the returned result set's rows
38
+ * are gap-filled per `ChartGapFillOptions`. Omit for raw rows.
39
+ */
40
+ gapFill?: ChartGapFillOptions;
34
41
  }
35
42
  /** Options for the refetch function */
36
43
  export interface RefetchOptions {
@@ -1,4 +1,5 @@
1
1
  import { MultiQueryConfig, CubeResultSet } from '../../types.js';
2
+ import { ChartGapFillOptions } from '../../utils/gapFilling.js';
2
3
  /**
3
4
  * Create a stable query key for multi-query
4
5
  */
@@ -29,6 +30,12 @@ export interface UseMultiCubeLoadQueryOptions {
29
30
  * @default true
30
31
  */
31
32
  keepPreviousData?: boolean;
33
+ /**
34
+ * Fill missing time buckets for a chart (Cube.js-style, client-side). When
35
+ * set, each query's rows are gap-filled per `ChartGapFillOptions` before
36
+ * merging. Omit for raw rows.
37
+ */
38
+ gapFill?: ChartGapFillOptions;
32
39
  }
33
40
  export interface UseMultiCubeLoadQueryResult {
34
41
  /** Merged data from all queries */
@@ -1,5 +1,5 @@
1
1
  import { DebugDataEntry } from './queries/index.js';
2
- import { CubeQuery, MultiQueryConfig, FunnelBindingKey, QueryMergeStrategy, AnalysisType } from '../types.js';
2
+ import { CubeQuery, MultiQueryConfig, FunnelBindingKey, QueryMergeStrategy, AnalysisType, ChartDisplayConfig } from '../types.js';
3
3
  import { ExecutionStatus } from '../components/AnalysisBuilder/types.js';
4
4
  import { ServerFunnelQuery } from '../types/funnel.js';
5
5
  import { ServerFlowQuery, FlowChartData } from '../types/flow.js';
@@ -56,6 +56,11 @@ export interface UseAnalysisQueryOptions {
56
56
  errors: string[];
57
57
  warnings: string[];
58
58
  } | null;
59
+ /**
60
+ * The chart's gap-filling setting (`displayConfig.fillMissingDates`). Results
61
+ * are gap-filled client-side per this setting, the query and the cube.
62
+ */
63
+ fillMissingDates?: ChartDisplayConfig['fillMissingDates'];
59
64
  }
60
65
  export interface UseAnalysisQueryResult {
61
66
  /** Query execution status */
@@ -71,6 +71,8 @@ export type { DashboardExportFile, DashboardImportResult, DashboardImportError,
71
71
  export type { DashboardImportExportState, PendingDashboardImport, FailedDashboardImport, } from './hooks/dashboard/useDashboardImportExport.js';
72
72
  export { compressAndEncode, decodeAndDecompress, generateShareUrl, parseShareUrl, isShareableSize } from './utils/shareUtils.js';
73
73
  export { isMultiQueryData, mergeQueryResults, mergeResultsConcat, mergeResultsByKey, getCombinedFields, getQueryLabels, getQueryIndices, generateQueryLabel, validateMergeKey } from './utils/multiQueryUtils.js';
74
+ export { fillChartRows, withChartGapFilling } from './utils/gapFilling.js';
75
+ export type { ChartGapFillOptions } from './utils/gapFilling.js';
74
76
  export { validateFunnelConfig, validateBindingKeyExists, validateStepQueries, validateBindingKeyForSteps, isMinimumFunnelConfigValid, getAvailableBindingKeyDimensions, getBindingKeyLabel, } from './utils/funnelValidation.js';
75
77
  export { getBindingKeyField, getCubeNameFromQuery, formatDuration, transformServerFunnelResult, buildServerFunnelQuery, isFunnelData, buildFunnelConfigFromQueries, } from './utils/funnelExecution.js';
76
78
  export { getThemeVariable, setThemeVariable, applyTheme, resetTheme, getTheme, setTheme, isDarkMode, watchThemeChanges, THEME_PRESETS } from './theme/index.js';
@@ -19,6 +19,8 @@ export interface CubeMetaDimension {
19
19
  type: string;
20
20
  /** Supported granularities for time dimensions (for time-based drill-down) */
21
21
  granularities?: TimeGranularity[];
22
+ /** The cube time dimension's gap-filling default, when it declares one */
23
+ fillMissingDates?: boolean;
22
24
  }
23
25
  export interface CubeMetaField {
24
26
  name: string;
@@ -146,6 +148,7 @@ export interface ChartDisplayConfig {
146
148
  stacked?: boolean;
147
149
  stackType?: 'none' | 'normal' | 'percent';
148
150
  connectNulls?: boolean;
151
+ fillMissingDates?: boolean | 'auto';
149
152
  showSummary?: boolean;
150
153
  showPoints?: boolean;
151
154
  showAllXLabels?: boolean;
@@ -43,6 +43,21 @@ export declare function shouldIncludeFilter(filter: Filter): boolean;
43
43
  * @returns Array of filters that should be applied to the portlet
44
44
  */
45
45
  export declare function getApplicableDashboardFilters(dashboardFilters: DashboardFilter[] | undefined, filterMapping: DashboardFilterMapping | undefined): Filter[];
46
+ /**
47
+ * Whether a dashboard filter is applied to a portlet as a regular filter.
48
+ *
49
+ * Non-universal filters always are. A universal time filter normally reaches a
50
+ * portlet through its timeDimensions, but when the portlet's mapping pins it to
51
+ * a field (a member override) it becomes a plain inDateRange filter on that
52
+ * field - which is how a KPI or breakdown without time dimensions is narrowed
53
+ * by the dashboard date control.
54
+ */
55
+ export declare function isAppliedAsRegularFilter(dashboardFilter: DashboardFilter, filterMapping: DashboardFilterMapping | undefined): boolean;
56
+ /**
57
+ * Dashboard filters that reach a portlet through its `filters` (as opposed to
58
+ * universal time filters applied to its timeDimensions).
59
+ */
60
+ export declare function getRegularDashboardFilters(dashboardFilters: DashboardFilter[] | undefined, filterMapping: DashboardFilterMapping | undefined): DashboardFilter[] | undefined;
46
61
  /**
47
62
  * Filter format for merge operation:
48
63
  * - 'server': Returns {and: [...]} or {or: [...]} format (for API queries)
@@ -94,6 +109,21 @@ type TimeDimension = {
94
109
  granularity?: string;
95
110
  dateRange?: string[] | string;
96
111
  };
112
+ /**
113
+ * Universal time filters mapped to a portlet that apply through its
114
+ * timeDimensions - i.e. mapped without a member override.
115
+ */
116
+ export declare function getTimeDimensionUniversalFilters(dashboardFilters: DashboardFilter[] | undefined, filterMapping: DashboardFilterMapping | undefined): DashboardFilter[];
117
+ /**
118
+ * Universal time filters mapped to a portlet that cannot narrow it: they apply
119
+ * only through timeDimensions, but some query in the portlet has none. Such a
120
+ * portlet would otherwise silently render all-time values while the dashboard
121
+ * date control shows a narrower range.
122
+ *
123
+ * Only plain and multi-query portlets are checked; funnel, flow and retention
124
+ * queries handle dashboard time filters separately.
125
+ */
126
+ export declare function getUnreachableUniversalTimeFilters(query: string, dashboardFilters: DashboardFilter[] | undefined, filterMapping: DashboardFilterMapping | undefined): DashboardFilter[];
97
127
  /**
98
128
  * Apply universal time filters to a portlet's timeDimensions
99
129
  * Universal time filters apply their dateRange to ALL time dimensions in the portlet
@@ -0,0 +1,52 @@
1
+ import { CubeResultSet } from '../types.js';
2
+ /** A chart's gap-filling preference. */
3
+ export interface ChartGapFillOptions {
4
+ /** `true`/`false` force filling on/off; `'auto'` or unset defers to the query and cube. */
5
+ fillMissingDates?: boolean | 'auto';
6
+ }
7
+ /** A time dimension of the query a result came from. */
8
+ export interface ChartGapFillTimeDimension {
9
+ dimension: string;
10
+ granularity?: string;
11
+ dateRange?: string | string[];
12
+ fillMissingDates?: boolean;
13
+ compareDateRange?: readonly unknown[];
14
+ }
15
+ /** The parts of a query chart gap filling reads. */
16
+ export interface ChartGapFillQuery {
17
+ measures?: readonly string[];
18
+ dimensions?: readonly string[];
19
+ timeDimensions?: readonly ChartGapFillTimeDimension[];
20
+ filters?: readonly ChartGapFillFilter[];
21
+ fillMissingDatesValue?: number | null;
22
+ ungrouped?: boolean;
23
+ }
24
+ interface ChartGapFillFilter {
25
+ member?: string;
26
+ operator?: string;
27
+ values?: readonly unknown[];
28
+ dateRange?: string | string[];
29
+ and?: readonly ChartGapFillFilter[];
30
+ or?: readonly ChartGapFillFilter[];
31
+ }
32
+ interface TimeDimensionAnnotation {
33
+ fillMissingDates?: boolean;
34
+ }
35
+ /**
36
+ * Fill missing time buckets in result rows for a chart.
37
+ *
38
+ * Comparison (`compareDateRange`) dimensions are left alone — the server fills
39
+ * each period already and the rows carry period metadata. Ungrouped queries are
40
+ * never filled.
41
+ */
42
+ export declare function fillChartRows(rows: Record<string, unknown>[], query: ChartGapFillQuery, annotation: {
43
+ timeDimensions?: Record<string, TimeDimensionAnnotation>;
44
+ } | undefined, options?: ChartGapFillOptions): Record<string, unknown>[];
45
+ /**
46
+ * Wrap a result set so its rows are gap-filled for a chart. The underlying
47
+ * result set (and the query cache holding it) stays raw, so changing the chart
48
+ * setting never refetches. Returns the result set unchanged when it does not
49
+ * carry the query it came from.
50
+ */
51
+ export declare function withChartGapFilling(resultSet: CubeResultSet, options?: ChartGapFillOptions): CubeResultSet;
52
+ export {};
@@ -6,6 +6,7 @@ export * from './periodUtils.js';
6
6
  export * from './pivotUtils.js';
7
7
  export * from './syntaxHighlighting.js';
8
8
  export * from './comparisonUtils.js';
9
+ export * from './gapFilling.js';
9
10
  export { captureThumbnail, isThumbnailCaptureAvailable } from './thumbnail.js';
10
11
  export { exportPortletToXlsx, isExportAvailable } from './exportXlsx.js';
11
12
  export { createDashboardExport, serializeDashboardExport, parseDashboardExport, readDashboardExportFile, downloadDashboardExport, dashboardExportFilename, normalizeDashboardConfigForExport, } from './dashboardExport.js';
@@ -24,4 +24,5 @@ export interface ReachableDimensionGroup {
24
24
  */
25
25
  export declare function getReachableDimensionOptions(meta: CubeMeta | null, portlet: PortletConfig, options?: {
26
26
  sameTypeAs?: string;
27
+ type?: string;
27
28
  }): ReachableDimensionGroup[];
@@ -44,8 +44,13 @@ export declare const QUERY_PARAMS_SCHEMA: {
44
44
  };
45
45
  readonly values: {
46
46
  readonly type: "array";
47
- readonly items: {};
48
- readonly description: "Filter values. Omit for set/notSet/isEmpty/isNotEmpty. inDateRange: [\"last 3 months\"] (one relative string) or [\"YYYY-MM-DD\", \"YYYY-MM-DD\"].";
47
+ readonly items: {
48
+ readonly type: readonly ["string", "number", "boolean"];
49
+ };
50
+ readonly description: "Filter values. Omit for set/notSet/isEmpty/isNotEmpty. inDateRange accepts ONLY a flat two-date array (strings or finite numeric timestamps): [\"2024-01-01\", \"2024-03-31\"], or a one-item array holding one relative expression or one date (that whole day): [\"last 3 months\"], [\"2024-01-15\"]. Never nest the two-date array.";
51
+ };
52
+ readonly dateRange: {
53
+ readonly description: "inDateRange only: alternative to values. A supported relative string, one absolute date string, or flat two-date array. Prefer values: [] when using dateRange; if values are also given they must hold the same range.";
49
54
  };
50
55
  };
51
56
  readonly required: readonly ["member", "operator"];
@@ -71,7 +76,7 @@ export declare const QUERY_PARAMS_SCHEMA: {
71
76
  };
72
77
  readonly fillMissingDates: {
73
78
  readonly type: "boolean";
74
- readonly description: "Fill gaps in time series with fillMissingDatesValue (default: true). Requires granularity + dateRange.";
79
+ readonly description: "Fill gaps in time series with fillMissingDatesValue. Default: off (observed rows only) unless the cube time dimension enables it. Requires granularity + dateRange.";
75
80
  };
76
81
  readonly compareDateRange: {
77
82
  readonly type: "array";
@@ -11,7 +11,7 @@ export declare class DateTimeBuilder {
11
11
  /**
12
12
  * Build date range condition for time dimensions
13
13
  */
14
- buildDateRangeCondition(fieldExpr: AnyColumn | SQL, dateRange: string | string[]): SQL | null;
14
+ buildDateRangeCondition(fieldExpr: AnyColumn | SQL, dateRange: unknown): SQL | null;
15
15
  private rangeBetween;
16
16
  /** Shift a normalized end value to end-of-day when its source was a date-only string. */
17
17
  private endOfDayValue;
@@ -17,6 +17,8 @@ export declare function dateToEngineValue(databaseAdapter: DatabaseAdapter, date
17
17
  export declare function engineValueToDate(databaseAdapter: DatabaseAdapter, value: string | number): Date;
18
18
  /** Detect a date-only string (YYYY-MM-DD). */
19
19
  export declare function isDateOnlyString(value: unknown): value is string;
20
+ /** Parse a string/number/Date into a validated Date, or null if invalid. */
21
+ export declare function toValidDate(value: unknown): Date | null;
20
22
  /**
21
23
  * Normalize a date value to the engine's wire format, or null when falsy or
22
24
  * unparseable.
@@ -9,7 +9,7 @@ export declare class FilterBuilder {
9
9
  /**
10
10
  * Build filter condition using Drizzle operators
11
11
  */
12
- buildFilterCondition(fieldExpr: AnyColumn | SQL, operator: FilterOperator, values: any[], field?: any, dateRange?: string | string[]): SQL | null;
12
+ buildFilterCondition(fieldExpr: AnyColumn | SQL, operator: FilterOperator, values: any[], field?: any, dateRangeInput?: string | string[] | null): SQL | null;
13
13
  /**
14
14
  * Build a logical filter (AND/OR) - used by executor for cache preloading
15
15
  * This handles nested filter structures and builds combined SQL
@@ -0,0 +1,25 @@
1
+ export type DateRangeReason = 'missing' | 'shape' | 'invalidDate' | 'invalidRelative' | 'reverseOrder' | 'conflict';
2
+ export type DateRangeValidation = {
3
+ valid: true;
4
+ } | {
5
+ valid: false;
6
+ reason: DateRangeReason;
7
+ input: 'values' | 'dateRange';
8
+ value?: string;
9
+ };
10
+ /** Validate an exact absolute tuple without accepting JS Date rollover or nested arrays. */
11
+ export declare function validateDateTuple(value: unknown): DateRangeReason | null;
12
+ /**
13
+ * Validate a standalone date range (`filter.dateRange` or `timeDimensions[].dateRange`):
14
+ * a relative expression, one absolute day, or a flat `[start, end]` pair.
15
+ */
16
+ export declare function validateDateRangeInput(dateRange: unknown): DateRangeValidation;
17
+ export declare function validateInDateRange(values: unknown, dateRange?: unknown): DateRangeValidation;
18
+ /**
19
+ * Diagnostic for SQL builders, which only see a field expression. Queries are
20
+ * validated before they reach the builders, so this only surfaces for callers
21
+ * that bypass validation.
22
+ */
23
+ export declare function dateRangeInputDiagnostic(result: DateRangeValidation): string;
24
+ export declare function timeDimensionDateRangeDiagnostic(member: string, result: DateRangeValidation): string;
25
+ export declare function inDateRangeDiagnostic(member: string, result: DateRangeValidation): string;
@@ -1,4 +1,4 @@
1
- import { SemanticQuery } from '../types/index.js';
1
+ import { Cube, SemanticQuery } from '../types/index.js';
2
2
  import { DatabaseAdapter } from '../adapters/base-adapter.js';
3
3
  /**
4
4
  * Normalise time-dimension values in result rows and apply gap filling.
@@ -6,5 +6,7 @@ import { DatabaseAdapter } from '../adapters/base-adapter.js';
6
6
  * @param data Raw rows from the database executor
7
7
  * @param query The semantic query (for timeDimensions + measures)
8
8
  * @param databaseAdapter Adapter used to convert engine-specific date results
9
+ * @param cubes Cube definitions, for each time dimension's `fillMissingDates`
10
+ * @param fillByDefault Gap-fill time dimensions neither the query nor the cube configures
9
11
  */
10
- export declare function postProcessResultRows(data: unknown, query: SemanticQuery, databaseAdapter: DatabaseAdapter): Record<string, unknown>[];
12
+ export declare function postProcessResultRows(data: unknown, query: SemanticQuery, databaseAdapter: DatabaseAdapter, cubes?: Map<string, Cube>, fillByDefault?: boolean): Record<string, unknown>[];
@@ -93,6 +93,8 @@ export declare class QueryExecutor {
93
93
  * @param cacheKey - When provided (and a cache provider is configured), the
94
94
  * fresh result is written to the cache. Pass `undefined` to skip caching
95
95
  * (e.g. comparison period sub-queries cache at the comparison level).
96
+ * @param fillByDefault - Gap-fill time dimensions that neither the query nor
97
+ * the cube configures. Only comparison period sub-queries pass `true`.
96
98
  */
97
99
  private executeStandardQuery;
98
100
  /**
@@ -1,48 +1,13 @@
1
+ import { Cube } from './types/cube.js';
1
2
  import { SemanticQuery } from './types/query.js';
2
- import { TimeGranularity } from './types/core.js';
3
+ export { generateTimeBuckets, fillTimeSeriesGaps, parseDateRange, MAX_GAP_FILL_BUCKETS, type GapFillerConfig } from '../shared/gap-filler.js';
3
4
  /**
4
- * Maximum number of time buckets gap filling will generate. Beyond this, gap
5
- * filling is skipped entirely (data is returned unmodified) to avoid both
6
- * runaway memory use and silent truncation of real rows.
7
- */
8
- export declare const MAX_GAP_FILL_BUCKETS = 10000;
9
- export interface GapFillerConfig {
10
- /** The time dimension key (e.g., 'Sales.date') */
11
- timeDimensionKey: string;
12
- /** Time granularity for bucket generation */
13
- granularity: TimeGranularity;
14
- /** Date range [start, end] */
15
- dateRange: [Date, Date];
16
- /** Value to fill for missing measures (default: 0) */
17
- fillValue: number | null;
18
- /** List of measure keys in the data */
19
- measures: string[];
20
- /** List of dimension keys in the data (excluding time dimensions) */
21
- dimensions: string[];
22
- }
23
- /**
24
- * Generate all time buckets for a given date range and granularity
25
- */
26
- export declare function generateTimeBuckets(startDate: Date, endDate: Date, granularity: TimeGranularity): Date[];
27
- /**
28
- * Fill time series gaps in query result data
5
+ * Apply server-side gap filling to query result rows.
29
6
  *
30
- * @param data - Original query result data
31
- * @param config - Gap filling configuration
32
- * @returns Data with gaps filled
33
- */
34
- export declare function fillTimeSeriesGaps(data: Record<string, unknown>[], config: GapFillerConfig): Record<string, unknown>[];
35
- /**
36
- * Parse date range from query time dimension
37
- * Handles both array format ['2024-01-01', '2024-01-31'] and string format
38
- */
39
- export declare function parseDateRange(dateRange: string | string[] | undefined): [Date, Date] | null;
40
- /**
41
- * Apply gap filling to query result data based on query configuration
7
+ * Precedence per time dimension: the query's `fillMissingDates`, then the cube
8
+ * dimension's, then `fillByDefault`. Ungrouped queries are never filled.
42
9
  *
43
- * @param data - Original query result data
44
- * @param query - The semantic query
45
- * @param measures - List of measure names in the result
46
- * @returns Data with gaps filled (if applicable)
10
+ * @param fillByDefault - Fill when neither the query nor the cube says. Only
11
+ * comparison-period sub-queries pass `true`, to keep periods aligned.
47
12
  */
48
- export declare function applyGapFilling(data: Record<string, unknown>[], query: SemanticQuery, measures: string[]): Record<string, unknown>[];
13
+ export declare function applyServerGapFilling(data: Record<string, unknown>[], query: SemanticQuery, cubes?: Map<string, Cube>, fillByDefault?: boolean): Record<string, unknown>[];
@@ -165,6 +165,8 @@ export interface TimeDimensionAnnotation {
165
165
  shortTitle: string;
166
166
  type: string;
167
167
  granularity?: TimeGranularity;
168
+ /** The cube time dimension's `fillMissingDates`, when it declares one */
169
+ fillMissingDates?: boolean;
168
170
  }
169
171
  /**
170
172
  * Type enums and constants
@@ -191,6 +191,18 @@ export interface Dimension {
191
191
  * @example ['year', 'quarter', 'month', 'day'] for a custom subset
192
192
  */
193
193
  granularities?: TimeGranularity[];
194
+ /**
195
+ * Whether missing time buckets are filled for this time dimension when a
196
+ * query or chart does not say. Only applies when type is 'time'.
197
+ *
198
+ * - Server: a query that omits `fillMissingDates` is filled only when this is
199
+ * `true`. Unset means observed rows only (the Cube.js default).
200
+ * - Charts: fill gaps by default, like Cube.js. Set `false` where a missing
201
+ * bucket means "no data" rather than zero, e.g. daily snapshot tables.
202
+ *
203
+ * A query's or chart's own `fillMissingDates` always wins.
204
+ */
205
+ fillMissingDates?: boolean;
194
206
  }
195
207
  /**
196
208
  * Measure definition
@@ -77,6 +77,11 @@ export interface DimensionMetadata {
77
77
  * Used for time-based drill-down (year -> quarter -> month -> week -> day)
78
78
  */
79
79
  granularities?: TimeGranularity[];
80
+ /**
81
+ * The time dimension's `fillMissingDates` default, when the cube declares one.
82
+ * Charts use it to decide whether to fill missing buckets.
83
+ */
84
+ fillMissingDates?: boolean;
80
85
  }
81
86
  /**
82
87
  * Hierarchy metadata for structured drill-down paths
@@ -135,7 +135,8 @@ export interface TimeDimension {
135
135
  /**
136
136
  * Fill missing dates in time series with the fill value.
137
137
  * Requires both granularity and dateRange to be set.
138
- * Default: true (enabled)
138
+ * Default: the cube time dimension's `fillMissingDates`, else false — the
139
+ * server returns observed rows only and charts fill gaps client-side.
139
140
  */
140
141
  fillMissingDates?: boolean;
141
142
  /**
@@ -21,6 +21,11 @@ export declare function requiresMeasure({ measureCount }: ChartAvailabilityConte
21
21
  export declare const targetDisplayOption: DisplayOptionConfig;
22
22
  /** Connect-nulls toggle for line/area charts. */
23
23
  export declare const connectNullsDisplayOption: DisplayOptionConfig;
24
+ /**
25
+ * Gap-filling control for time-series charts (issue #1368). `auto` follows the
26
+ * query, then the cube time dimension's `fillMissingDates`, then fills.
27
+ */
28
+ export declare const fillMissingDatesDisplayOption: DisplayOptionConfig;
24
29
  /** Left Y-axis numeric format control (dual-axis charts). */
25
30
  export declare const leftYAxisFormatDisplayOption: DisplayOptionConfig;
26
31
  /** Right Y-axis numeric format control (dual-axis charts). */
@@ -1,14 +1,14 @@
1
- import { dt as e, ft as t, gt as n, ht as r, lt as i, mt as a, pt as o, t as s, ut as c } from "./chunks/chart-data-table-BdMo3zVh.js";
2
- import { d as l, l as u, s as d, u as f } from "./chunks/chart-activity-grid-DGazwi4C.js";
3
- import { t as p } from "./chunks/chart-funnel-BRyZS6ie.js";
4
- import { a as m, i as h, n as g, o as _, r as v, s as y, t as b } from "./chunks/charts-loader-BTI0UPK4.js";
5
- import { t as x } from "./chunks/chart-area-zyLGD-ym.js";
1
+ import { dt as e, ft as t, gt as n, ht as r, lt as i, mt as a, pt as o, t as s, ut as c } from "./chunks/chart-data-table-Cxd0cdAl.js";
2
+ import { d as l, l as u, s as d, u as f } from "./chunks/chart-activity-grid-Ly_-2B-f.js";
3
+ import { t as p } from "./chunks/chart-funnel-71Kn4eeF.js";
4
+ import { a as m, i as h, n as g, o as _, r as v, s as y, t as b } from "./chunks/charts-loader-DoLQqFXg.js";
5
+ import { t as x } from "./chunks/chart-area-D3l-71Wy.js";
6
6
  import { i as S } from "./chunks/utils-CToHkuhU.js";
7
- import { t as C } from "./chunks/chart-bar-DMCBq8qJ.js";
8
- import { t as w } from "./chunks/chart-line-IEgiF8Nv.js";
9
- import { t as T } from "./chunks/chart-pie-BEB2sCXF.js";
10
- import { t as E } from "./chunks/chart-scatter-CSWF6-lx.js";
11
- import { t as D } from "./chunks/chart-radar-BbSbXKbP.js";
12
- import { t as O } from "./chunks/chart-radial-bar-CNYD7tkM.js";
13
- import { t as k } from "./chunks/chart-tree-map-BiXB7EiM.js";
7
+ import { t as C } from "./chunks/chart-bar-BaTyQOqs.js";
8
+ import { t as w } from "./chunks/chart-line-BNqjUowg.js";
9
+ import { t as T } from "./chunks/chart-pie-D8r9HCZ4.js";
10
+ import { t as E } from "./chunks/chart-scatter-CH82md0L.js";
11
+ import { t as D } from "./chunks/chart-radar-R4PuCIWp.js";
12
+ import { t as O } from "./chunks/chart-radial-bar-hmrSFa6O.js";
13
+ import { t as k } from "./chunks/chart-tree-map-CmysE4bF.js";
14
14
  export { d as CHART_COLORS, u as CHART_MARGINS, s as DataTable, p as FunnelChart, b as LazyChart, f as NEGATIVE_COLOR, l as POSITIVE_COLOR, x as RechartsAreaChart, C as RechartsBarChart, w as RechartsLineChart, T as RechartsPieChart, D as RechartsRadarChart, O as RechartsRadialBarChart, E as RechartsScatterChart, k as RechartsTreeMapChart, i as clearChartConfigCache, S as formatChartData, g as getAvailableChartTypes, c as getChartConfigAsync, e as getChartConfigSync, v as getUnavailableChartTypes, t as isChartConfigLoaded, h as isChartTypeAvailable, m as isValidChartType, o as loadAllChartConfigs, _ as preloadChart, a as preloadChartConfig, r as preloadChartConfigs, y as preloadCharts, n as useChartConfig };