drizzle-cube 0.5.7 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/README.md +2 -0
  2. package/dist/adapters/adapters/hono/agent-handler.d.ts +9 -0
  3. package/dist/adapters/adapters/hono/mcp-handler.d.ts +37 -0
  4. package/dist/adapters/adapters/mcp-tools-handlers.d.ts +18 -0
  5. package/dist/adapters/adapters/nextjs/mcp-handler.d.ts +36 -0
  6. package/dist/adapters/{utils.d.ts → adapters/utils.d.ts} +6 -81
  7. package/dist/adapters/express/index.cjs +1 -1
  8. package/dist/adapters/express/index.js +50 -50
  9. package/dist/adapters/fastify/index.cjs +1 -1
  10. package/dist/adapters/fastify/index.js +78 -78
  11. package/dist/adapters/google-BOnRIN1w.cjs +2 -0
  12. package/dist/{server/google-CFYljAOF.js → adapters/google-CvKM9yVM.js} +83 -71
  13. package/dist/adapters/{handler-Dz1F4iwf.js → handler-CfgE0JSL.js} +515 -578
  14. package/dist/adapters/handler-Cn0dOctE.cjs +25 -0
  15. package/dist/adapters/hono/index.cjs +2 -2
  16. package/dist/adapters/hono/index.js +208 -178
  17. package/dist/adapters/locale-DDvZDFVn.js +8114 -0
  18. package/dist/adapters/locale-ZLUUNUxr.cjs +166 -0
  19. package/dist/adapters/mcp-tools.cjs +1 -1
  20. package/dist/adapters/mcp-tools.js +49 -38
  21. package/dist/adapters/mcp-transport-Chiaj4ll.cjs +40 -0
  22. package/dist/adapters/mcp-transport-H96VG3WY.js +591 -0
  23. package/dist/adapters/nextjs/index.cjs +1 -1
  24. package/dist/adapters/nextjs/index.js +190 -197
  25. package/dist/{server/openai-y7GhJNdn.js → adapters/openai-B5jEiqiB.js} +776 -719
  26. package/dist/adapters/openai-D0musiYP.cjs +17 -0
  27. package/dist/{server/openai-DiVskd89.js → adapters/openai-cDlFSTk6.js} +61 -59
  28. package/dist/adapters/openai-vXvLni8v.cjs +1 -0
  29. package/dist/adapters/{utils-DosuoabY.js → utils-BPWZsX7k.js} +1285 -1220
  30. package/dist/adapters/utils-_whV4fXL.cjs +128 -0
  31. package/dist/adapters/utils.cjs +1 -1
  32. package/dist/adapters/utils.js +2 -2
  33. package/dist/client/charts/ChartLoader.d.ts +3 -17
  34. package/dist/client/charts/chartComponentRegistry.d.ts +46 -0
  35. package/dist/client/charts/chartConfigHelpers.d.ts +38 -0
  36. package/dist/client/charts.js +14 -13
  37. package/dist/client/chunks/{DashboardEditModal-6KRE36mm.js → DashboardEditModal-okVfH8ZK.js} +5446 -4486
  38. package/dist/client/chunks/DashboardEditModal-okVfH8ZK.js.map +1 -0
  39. package/dist/client/chunks/{RetentionCombinedChart-CCpu0C-s.js → RetentionCombinedChart-BgbDhsPz.js} +10 -10
  40. package/dist/client/chunks/{RetentionCombinedChart-CCpu0C-s.js.map → RetentionCombinedChart-BgbDhsPz.js.map} +1 -1
  41. package/dist/client/chunks/{RetentionHeatmap-B24PiIfr.js → RetentionHeatmap-DjXZaTPq.js} +5 -5
  42. package/dist/client/chunks/{RetentionHeatmap-B24PiIfr.js.map → RetentionHeatmap-DjXZaTPq.js.map} +1 -1
  43. package/dist/client/chunks/analysis-builder-DB88FojM.js +5674 -0
  44. package/dist/client/chunks/analysis-builder-DB88FojM.js.map +1 -0
  45. package/dist/client/chunks/{analysis-builder-shared-x576-O5p.js → analysis-builder-shared-BVK4TYfR.js} +1578 -1292
  46. package/dist/client/chunks/analysis-builder-shared-BVK4TYfR.js.map +1 -0
  47. package/dist/client/chunks/{chart-activity-grid-CiHrLH6Y.js → chart-activity-grid-DX0SJbxs.js} +642 -494
  48. package/dist/client/chunks/chart-activity-grid-DX0SJbxs.js.map +1 -0
  49. package/dist/client/chunks/chart-area-of01_62R.js +775 -0
  50. package/dist/client/chunks/chart-area-of01_62R.js.map +1 -0
  51. package/dist/client/chunks/chart-bar-BqelQE_I.js +194 -0
  52. package/dist/client/chunks/chart-bar-BqelQE_I.js.map +1 -0
  53. package/dist/client/chunks/{chart-box-plot-Bu9hy-17.js → chart-box-plot-kkBixZ27.js} +2 -2
  54. package/dist/client/chunks/{chart-box-plot-Bu9hy-17.js.map → chart-box-plot-kkBixZ27.js.map} +1 -1
  55. package/dist/client/chunks/chart-bubble-B2he1--4.js +221 -0
  56. package/dist/client/chunks/chart-bubble-B2he1--4.js.map +1 -0
  57. package/dist/client/chunks/{chart-candlestick-Dau5AF4E.js → chart-candlestick-DZp19Tzh.js} +2 -2
  58. package/dist/client/chunks/{chart-candlestick-Dau5AF4E.js.map → chart-candlestick-DZp19Tzh.js.map} +1 -1
  59. package/dist/client/chunks/chart-config-area-BNigHUy8.js +124 -0
  60. package/dist/client/chunks/chart-config-area-BNigHUy8.js.map +1 -0
  61. package/dist/client/chunks/chart-config-bar-DSO_LRTx.js +54 -0
  62. package/dist/client/chunks/chart-config-bar-DSO_LRTx.js.map +1 -0
  63. package/dist/client/chunks/{chart-config-box-plot-DJ-dWWXA.js → chart-config-box-plot-oW8axV2q.js} +5 -10
  64. package/dist/client/chunks/chart-config-box-plot-oW8axV2q.js.map +1 -0
  65. package/dist/client/chunks/{chart-config-gauge-DSwC04l0.js → chart-config-gauge-Dq-_H9UN.js} +5 -7
  66. package/dist/client/chunks/chart-config-gauge-Dq-_H9UN.js.map +1 -0
  67. package/dist/client/chunks/{chart-config-kpi-delta-D6BIkHL3.js → chart-config-kpi-delta-DSQbvqu_.js} +5 -10
  68. package/dist/client/chunks/chart-config-kpi-delta-DSQbvqu_.js.map +1 -0
  69. package/dist/client/chunks/{chart-config-kpi-number-Bx-V9a62.js → chart-config-kpi-number-EFSWY1We.js} +5 -7
  70. package/dist/client/chunks/chart-config-kpi-number-EFSWY1We.js.map +1 -0
  71. package/dist/client/chunks/{chart-config-kpi-text-CcqC1u-8.js → chart-config-kpi-text-KM3V5X2u.js} +5 -7
  72. package/dist/client/chunks/chart-config-kpi-text-KM3V5X2u.js.map +1 -0
  73. package/dist/client/chunks/{chart-config-line-Db3jDsWc.js → chart-config-line-D6jG8PCH.js} +9 -36
  74. package/dist/client/chunks/chart-config-line-D6jG8PCH.js.map +1 -0
  75. package/dist/client/chunks/{chart-config-pie-DD4SmRTF.js → chart-config-pie-BhzW-fdn.js} +6 -16
  76. package/dist/client/chunks/chart-config-pie-BhzW-fdn.js.map +1 -0
  77. package/dist/client/chunks/{chart-config-radar-CC2XAaGr.js → chart-config-radar-D7REP1q_.js} +6 -16
  78. package/dist/client/chunks/chart-config-radar-D7REP1q_.js.map +1 -0
  79. package/dist/client/chunks/{chart-config-radial-bar-DmxKx1R0.js → chart-config-radial-bar-Byx6qOPU.js} +6 -16
  80. package/dist/client/chunks/chart-config-radial-bar-Byx6qOPU.js.map +1 -0
  81. package/dist/client/chunks/{chart-config-tree-map-BI-oQStO.js → chart-config-tree-map-DVrvf3yQ.js} +6 -16
  82. package/dist/client/chunks/chart-config-tree-map-DVrvf3yQ.js.map +1 -0
  83. package/dist/client/chunks/{chart-config-waterfall-DSnyixbI.js → chart-config-waterfall-DmFeQdIk.js} +5 -10
  84. package/dist/client/chunks/chart-config-waterfall-DmFeQdIk.js.map +1 -0
  85. package/dist/client/chunks/{chart-data-table-Cm5jrpaw.js → chart-data-table-CKauQXme.js} +1046 -1121
  86. package/dist/client/chunks/chart-data-table-CKauQXme.js.map +1 -0
  87. package/dist/client/chunks/{chart-funnel-Eke8IPtG.js → chart-funnel-CToKSBaL.js} +184 -222
  88. package/dist/client/chunks/chart-funnel-CToKSBaL.js.map +1 -0
  89. package/dist/client/chunks/chart-gauge-DTVezSk7.js +403 -0
  90. package/dist/client/chunks/chart-gauge-DTVezSk7.js.map +1 -0
  91. package/dist/client/chunks/chart-heat-map-DTuUl0BR.js +236 -0
  92. package/dist/client/chunks/chart-heat-map-DTuUl0BR.js.map +1 -0
  93. package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js +408 -0
  94. package/dist/client/chunks/chart-kpi-delta-Dn-jjO-2.js.map +1 -0
  95. package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js +244 -0
  96. package/dist/client/chunks/chart-kpi-number-P_WBiO5S.js.map +1 -0
  97. package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js +185 -0
  98. package/dist/client/chunks/chart-kpi-text-C-Y4eb5H.js.map +1 -0
  99. package/dist/client/chunks/chart-line-DKgrQA6c.js +101 -0
  100. package/dist/client/chunks/chart-line-DKgrQA6c.js.map +1 -0
  101. package/dist/client/chunks/{chart-markdown-BPW-EAm9.js → chart-markdown-CV75S_zL.js} +1359 -1240
  102. package/dist/client/chunks/chart-markdown-CV75S_zL.js.map +1 -0
  103. package/dist/client/chunks/{chart-measure-profile-BI3kADCp.js → chart-measure-profile-Ket8fJyf.js} +7 -7
  104. package/dist/client/chunks/{chart-measure-profile-BI3kADCp.js.map → chart-measure-profile-Ket8fJyf.js.map} +1 -1
  105. package/dist/client/chunks/chart-pie-ByieAX5H.js +119 -0
  106. package/dist/client/chunks/chart-pie-ByieAX5H.js.map +1 -0
  107. package/dist/client/chunks/chart-radar-CiSwHWp4.js +138 -0
  108. package/dist/client/chunks/chart-radar-CiSwHWp4.js.map +1 -0
  109. package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js +122 -0
  110. package/dist/client/chunks/chart-radial-bar-BF6Mhl6f.js.map +1 -0
  111. package/dist/client/chunks/{chart-sankey-CFzjGvZX.js → chart-sankey-DjrvKw6K.js} +36 -39
  112. package/dist/client/chunks/{chart-sankey-CFzjGvZX.js.map → chart-sankey-DjrvKw6K.js.map} +1 -1
  113. package/dist/client/chunks/chart-scatter-Dd9WFqnS.js +258 -0
  114. package/dist/client/chunks/chart-scatter-Dd9WFqnS.js.map +1 -0
  115. package/dist/client/chunks/{chart-sunburst-91Q2tzaB.js → chart-sunburst-leGpuDj7.js} +3 -3
  116. package/dist/client/chunks/{chart-sunburst-91Q2tzaB.js.map → chart-sunburst-leGpuDj7.js.map} +1 -1
  117. package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js +323 -0
  118. package/dist/client/chunks/chart-tree-map-Ceq5sLZA.js.map +1 -0
  119. package/dist/client/chunks/{chart-waterfall-DcHbbPaG.js → chart-waterfall-DyvQReN5.js} +7 -7
  120. package/dist/client/chunks/{chart-waterfall-DcHbbPaG.js.map → chart-waterfall-DyvQReN5.js.map} +1 -1
  121. package/dist/client/chunks/{charts-core-CrBDYN6N.js → charts-core-DaXSt1Dd.js} +2 -2
  122. package/dist/client/chunks/{charts-core-CrBDYN6N.js.map → charts-core-DaXSt1Dd.js.map} +1 -1
  123. package/dist/client/chunks/charts-loader-DdTeCeNo.js +84 -0
  124. package/dist/client/chunks/charts-loader-DdTeCeNo.js.map +1 -0
  125. package/dist/client/chunks/{core-DsAWNRRv.js → core-D7vPfUIe.js} +2 -2
  126. package/dist/client/chunks/{core-DsAWNRRv.js.map → core-D7vPfUIe.js.map} +1 -1
  127. package/dist/client/chunks/{nl-NL-oyr2wENY.js → nl-NL-2zTAWTej.js} +8 -2
  128. package/dist/client/chunks/{nl-NL-oyr2wENY.js.map → nl-NL-2zTAWTej.js.map} +1 -1
  129. package/dist/client/chunks/retention-ChW9jYdy.js.map +1 -1
  130. package/dist/client/chunks/{schema-visualization-BszcrmZX.js → schema-visualization-Cb_E9_Gd.js} +12 -12
  131. package/dist/client/chunks/{schema-visualization-BszcrmZX.js.map → schema-visualization-Cb_E9_Gd.js.map} +1 -1
  132. package/dist/client/chunks/{useDirtyStateTracking-B5wCDJSj.js → useDirtyStateTracking-MbpxH_v6.js} +95 -84
  133. package/dist/client/chunks/useDirtyStateTracking-MbpxH_v6.js.map +1 -0
  134. package/dist/client/chunks/{useExplainAI-CCeCYzDm.js → useExplainAI-evnZkjCY.js} +14 -14
  135. package/dist/client/chunks/{useExplainAI-CCeCYzDm.js.map → useExplainAI-evnZkjCY.js.map} +1 -1
  136. package/dist/client/chunks/{utils-kqa-JIMg.js → utils-3P6z1vz5.js} +3 -3
  137. package/dist/client/chunks/{utils-kqa-JIMg.js.map → utils-3P6z1vz5.js.map} +1 -1
  138. package/dist/client/chunks/{vendor-0hJNlZXQ.js → vendor-DSpR0IW6.js} +43 -43
  139. package/dist/client/chunks/{vendor-0hJNlZXQ.js.map → vendor-DSpR0IW6.js.map} +1 -1
  140. package/dist/client/components/AgenticNotebook/agentChatParts.d.ts +34 -0
  141. package/dist/client/components/AgenticNotebook/chatMessageParts.d.ts +39 -0
  142. package/dist/client/components/AgenticNotebook/useAgentChatController.d.ts +25 -0
  143. package/dist/client/components/AgenticNotebook/useNotebookAutosave.d.ts +12 -0
  144. package/dist/client/components/AnalysisBuilder/AnalysisAIPanel.d.ts +1 -1
  145. package/dist/client/components/AnalysisBuilder/AnalysisAxisDropZone.d.ts +1 -1
  146. package/dist/client/components/AnalysisBuilder/AnalysisChartConfigPanel.d.ts +1 -1
  147. package/dist/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +1 -1
  148. package/dist/client/components/AnalysisBuilder/AnalysisFilterGroup.d.ts +1 -1
  149. package/dist/client/components/AnalysisBuilder/AnalysisFilterItem.d.ts +1 -1
  150. package/dist/client/components/AnalysisBuilder/AnalysisFilterSection.d.ts +1 -1
  151. package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +1 -1
  152. package/dist/client/components/AnalysisBuilder/AnalysisQueryPanelParts.d.ts +64 -0
  153. package/dist/client/components/AnalysisBuilder/AnalysisResultsHeader.d.ts +67 -0
  154. package/dist/client/components/AnalysisBuilder/BreakdownComparisonToggle.d.ts +13 -0
  155. package/dist/client/components/AnalysisBuilder/BreakdownRow.d.ts +26 -0
  156. package/dist/client/components/AnalysisBuilder/DisplayOptionControl.d.ts +10 -0
  157. package/dist/client/components/AnalysisBuilder/ExecutionPlanPanelParts.d.ts +22 -0
  158. package/dist/client/components/AnalysisBuilder/ExplainAIPanel.d.ts +2 -1
  159. package/dist/client/components/AnalysisBuilder/FieldDetailPanel.d.ts +1 -1
  160. package/dist/client/components/AnalysisBuilder/FieldSearchItem.d.ts +1 -1
  161. package/dist/client/components/AnalysisBuilder/FieldSearchModal.d.ts +1 -1
  162. package/dist/client/components/AnalysisBuilder/FieldSearchResults.d.ts +16 -0
  163. package/dist/client/components/AnalysisBuilder/FilterConfigModal.d.ts +2 -1
  164. package/dist/client/components/AnalysisBuilder/FilterValueInput.d.ts +63 -0
  165. package/dist/client/components/AnalysisBuilder/FlowDepthControls.d.ts +10 -0
  166. package/dist/client/components/AnalysisBuilder/FlowVisualizationPicker.d.ts +7 -0
  167. package/dist/client/components/AnalysisBuilder/LegacyBooleanOptions.d.ts +8 -0
  168. package/dist/client/components/AnalysisBuilder/LimitSection.d.ts +1 -1
  169. package/dist/client/components/AnalysisBuilder/MetricRow.d.ts +23 -0
  170. package/dist/client/components/AnalysisBuilder/SectionHeading.d.ts +1 -1
  171. package/dist/client/components/AnalysisBuilder/SortToggleButton.d.ts +13 -0
  172. package/dist/client/components/AnalysisBuilder/StringArrayInput.d.ts +17 -0
  173. package/dist/client/components/AnalysisBuilder/filterConfigModalUtils.d.ts +30 -0
  174. package/dist/client/components/AnalysisBuilder/hooks/useAnalysisBuilderImperativeHandle.d.ts +13 -0
  175. package/dist/client/components/AnalysisBuilder/hooks/useDragReorder.d.ts +25 -0
  176. package/dist/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.d.ts +11 -0
  177. package/dist/client/components/AnalysisBuilder/utils/axisConfigUtils.d.ts +23 -0
  178. package/dist/client/components/AnalysisBuilder/utils/executionPlanMarkdown.d.ts +8 -0
  179. package/dist/client/components/AnalysisBuilder/utils/fieldUtils.d.ts +5 -0
  180. package/dist/client/components/AnalysisBuilder/utils/resultsPanelDerive.d.ts +68 -0
  181. package/dist/client/components/AnalysisBuilder/utils/shareStateUtils.d.ts +68 -0
  182. package/dist/client/components/AnalysisBuilder/utils/sortUtils.d.ts +7 -0
  183. package/dist/client/components/AnalyticsDashboard.d.ts +1 -1
  184. package/dist/client/components/AnalyticsPage.d.ts +1 -1
  185. package/dist/client/components/ChartErrorBoundary.d.ts +1 -1
  186. package/dist/client/components/ChartTypeSelector.d.ts +1 -1
  187. package/dist/client/components/ColorPaletteSelector.d.ts +1 -1
  188. package/dist/client/components/DashboardEditModal.d.ts +2 -1
  189. package/dist/client/components/DashboardFilters/CompactFilterBarParts.d.ts +26 -0
  190. package/dist/client/components/DashboardFilters/DashboardFilterConfigModal.d.ts +1 -1
  191. package/dist/client/components/DashboardFilters/DashboardFilterConfigModalParts.d.ts +27 -0
  192. package/dist/client/components/DashboardFilters/DashboardFilterItem.d.ts +1 -1
  193. package/dist/client/components/DashboardFilters/DashboardFilterValueInput.d.ts +39 -0
  194. package/dist/client/components/DashboardFilters/dashboardFilterConfigModalUtils.d.ts +21 -0
  195. package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +19 -0
  196. package/dist/client/components/DashboardFilters/useDashboardFilterConfigModal.d.ts +69 -0
  197. package/dist/client/components/DashboardFilters/useDateRangeState.d.ts +19 -0
  198. package/dist/client/components/DashboardFilters/useFilterDropdowns.d.ts +21 -0
  199. package/dist/client/components/DashboardFilters/useFilterValueFetch.d.ts +23 -0
  200. package/dist/client/components/DashboardGrid.d.ts +1 -1
  201. package/dist/client/components/DashboardPortletCard.d.ts +2 -57
  202. package/dist/client/components/DashboardThumbnailPlaceholder.d.ts +1 -1
  203. package/dist/client/components/DataBrowser/DataBrowserSidebar.d.ts +1 -1
  204. package/dist/client/components/DataBrowser/DataBrowserToolbar.d.ts +1 -1
  205. package/dist/client/components/DataBrowser/index.d.ts +1 -1
  206. package/dist/client/components/DataHistogram.d.ts +1 -1
  207. package/dist/client/components/DebugModal.d.ts +1 -1
  208. package/dist/client/components/DrillBreadcrumb.d.ts +2 -1
  209. package/dist/client/components/LoadingIndicator.d.ts +1 -1
  210. package/dist/client/components/MobileStackedLayout.d.ts +1 -1
  211. package/dist/client/components/PortletAnalysisModal.d.ts +1 -1
  212. package/dist/client/components/PortletContainer.d.ts +1 -1
  213. package/dist/client/components/PortletFilterConfigModal.d.ts +6 -4
  214. package/dist/client/components/RowManagedLayout.d.ts +1 -1
  215. package/dist/client/components/ScaledGridWrapper.d.ts +1 -1
  216. package/dist/client/components/SchemaVisualization/CubeNode.d.ts +1 -1
  217. package/dist/client/components/SchemaVisualization/FieldDetailPanel.d.ts +1 -1
  218. package/dist/client/components/SchemaVisualization/RelationshipEdge.d.ts +1 -1
  219. package/dist/client/components/SchemaVisualization/SchemaVisualizationLazy.d.ts +1 -1
  220. package/dist/client/components/SchemaVisualization/index.d.ts +1 -1
  221. package/dist/client/components/TextPortletModal.d.ts +1 -1
  222. package/dist/client/components/analyticsPortlet/PortletChart.d.ts +31 -0
  223. package/dist/client/components/analyticsPortlet/PortletChartView.d.ts +35 -0
  224. package/dist/client/components/analyticsPortlet/PortletStates.d.ts +65 -0
  225. package/dist/client/components/analyticsPortlet/parsePortletQuery.d.ts +22 -0
  226. package/dist/client/components/analyticsPortlet/portletRenderState.d.ts +31 -0
  227. package/dist/client/components/analyticsPortlet/usePortletDebugData.d.ts +37 -0
  228. package/dist/client/components/analyticsPortlet/usePortletDrillState.d.ts +17 -0
  229. package/dist/client/components/analyticsPortlet/usePortletQueryResults.d.ts +37 -0
  230. package/dist/client/components/charts/ActivityGridChart.helpers.d.ts +33 -0
  231. package/dist/client/components/charts/ActivityGridChart.render.d.ts +31 -0
  232. package/dist/client/components/charts/AxisFormatControls.d.ts +5 -3
  233. package/dist/client/components/charts/BarChart.helpers.d.ts +23 -0
  234. package/dist/client/components/charts/BarSeries.d.ts +29 -0
  235. package/dist/client/components/charts/BubbleChart.helpers.d.ts +43 -0
  236. package/dist/client/components/charts/BubbleChart.render.d.ts +21 -0
  237. package/dist/client/components/charts/ChartContainer.d.ts +1 -1
  238. package/dist/client/components/charts/ChartLegend.d.ts +1 -1
  239. package/dist/client/components/charts/ChartStates.d.ts +38 -0
  240. package/dist/client/components/charts/ChartTooltip.d.ts +1 -1
  241. package/dist/client/components/charts/FunnelChart.helpers.d.ts +25 -0
  242. package/dist/client/components/charts/FunnelViews.d.ts +16 -0
  243. package/dist/client/components/charts/HeatMapCanvas.d.ts +25 -0
  244. package/dist/client/components/charts/HeatMapChart.helpers.d.ts +64 -0
  245. package/dist/client/components/charts/KpiDelta.helpers.d.ts +20 -0
  246. package/dist/client/components/charts/KpiNumber.helpers.d.ts +30 -0
  247. package/dist/client/components/charts/KpiStates.d.ts +19 -0
  248. package/dist/client/components/charts/MissingDependencyFallback.d.ts +1 -1
  249. package/dist/client/components/charts/ScatterChart.helpers.d.ts +43 -0
  250. package/dist/client/components/charts/ScatterSeries.d.ts +17 -0
  251. package/dist/client/components/charts/ScatterTooltip.d.ts +21 -0
  252. package/dist/client/components/charts/TreeMapChart.helpers.d.ts +37 -0
  253. package/dist/client/components/charts/TreeMapContent.d.ts +24 -0
  254. package/dist/client/components/charts/TreeMapLegend.d.ts +13 -0
  255. package/dist/client/components/charts/cartesianChartHelpers.d.ts +126 -0
  256. package/dist/client/components/charts/chartAxisResolution.d.ts +32 -0
  257. package/dist/client/components/charts/chartScaffolding.d.ts +77 -0
  258. package/dist/client/components/charts/gaugeChartHelpers.d.ts +36 -0
  259. package/dist/client/components/charts/kpiTextHelpers.d.ts +46 -0
  260. package/dist/client/components/charts/radarChartHelpers.d.ts +14 -0
  261. package/dist/client/components/charts/radialBarChartHelpers.d.ts +22 -0
  262. package/dist/client/components/charts/useChartDimensions.d.ts +20 -0
  263. package/dist/client/components/charts/useKpiDimensions.d.ts +30 -0
  264. package/dist/client/components/dashboard/DashboardContext.d.ts +2 -2
  265. package/dist/client/components/dashboard/DashboardCoordinator.d.ts +1 -1
  266. package/dist/client/components/dashboard/DashboardEditBar.d.ts +5 -0
  267. package/dist/client/components/dashboard/DashboardFilterBar.d.ts +1 -1
  268. package/dist/client/components/dashboard/DashboardGridSurface.d.ts +1 -1
  269. package/dist/client/components/dashboard/DashboardModals.d.ts +1 -1
  270. package/dist/client/components/dashboard/DashboardProvider.d.ts +1 -1
  271. package/dist/client/components/dashboard/DashboardToolbar.d.ts +1 -1
  272. package/dist/client/components/dashboard/LayoutModeToggle.d.ts +10 -0
  273. package/dist/client/components/dashboard/dashboardGridUtils.d.ts +1 -1
  274. package/dist/client/components/dashboardPortletCard/FilterFieldChip.d.ts +12 -0
  275. package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +43 -0
  276. package/dist/client/components/dashboardPortletCard/cardStyles.d.ts +33 -0
  277. package/dist/client/components/dashboardPortletCard/filterField.d.ts +12 -0
  278. package/dist/client/components/dashboardPortletCard/propsEqual.d.ts +55 -0
  279. package/dist/client/components/dashboardPortletCard/usePortletCardActions.d.ts +16 -0
  280. package/dist/client/components/portletAnalysisModal/saveValidation.d.ts +8 -0
  281. package/dist/client/components/shared/dateRangeUtils.d.ts +40 -0
  282. package/dist/client/components/shared/filterDisplayUtils.d.ts +10 -0
  283. package/dist/client/components/shared/filterItem/FilterDateRangeSelector.d.ts +17 -0
  284. package/dist/client/components/shared/filterItem/FilterFieldDropdown.d.ts +16 -0
  285. package/dist/client/components/shared/filterItem/dateRangeSync.d.ts +14 -0
  286. package/dist/client/components/shared/filterItem/fieldVisuals.d.ts +5 -0
  287. package/dist/client/components/shared/filterValueSelector/FilterValueInputs.d.ts +55 -0
  288. package/dist/client/components/shared/filterValueSelector/useFilterValueSelectorState.d.ts +25 -0
  289. package/dist/client/components/shared/queryFieldUtils.d.ts +21 -0
  290. package/dist/client/components/shared/utils.d.ts +4 -43
  291. package/dist/client/components.js +3 -3
  292. package/dist/client/hooks/agentChatStream.d.ts +39 -0
  293. package/dist/client/hooks/analysisQueryExecutionModes.d.ts +133 -0
  294. package/dist/client/hooks/dashboard/useDashboardController.d.ts +2 -2
  295. package/dist/client/hooks/drillNavigation.d.ts +25 -0
  296. package/dist/client/hooks/useDashboardHook.d.ts +2 -2
  297. package/dist/client/hooks.js +3 -3
  298. package/dist/client/icons.d.ts +1 -1
  299. package/dist/client/icons.js +2 -2
  300. package/dist/client/index.js +816 -669
  301. package/dist/client/index.js.map +1 -1
  302. package/dist/client/providers/CubeApiProvider.d.ts +1 -1
  303. package/dist/client/providers/CubeFeaturesProvider.d.ts +1 -1
  304. package/dist/client/providers/CubeMetaProvider.d.ts +1 -1
  305. package/dist/client/providers/CubeProvider.d.ts +1 -1
  306. package/dist/client/providers/I18nProvider.d.ts +1 -1
  307. package/dist/client/providers.js +3 -3
  308. package/dist/client/schema.js +1 -1
  309. package/dist/client/shared/chartConfigBuilders.d.ts +18 -0
  310. package/dist/client/shared/components/QueryAnalysisPanel.sections.d.ts +41 -0
  311. package/dist/client/shared/queryTransforms.d.ts +20 -0
  312. package/dist/client/shared/utils.d.ts +2 -4
  313. package/dist/client/stores/analysisBuilderStore.d.ts +1 -1
  314. package/dist/client/stores/dashboardStore.d.ts +1 -1
  315. package/dist/client/stores/dataBrowserStore.d.ts +1 -1
  316. package/dist/client/stores/notebookStore.d.ts +1 -1
  317. package/dist/client/stores/optionsToAnalysisConfig.d.ts +17 -0
  318. package/dist/client/styles.css +1 -1
  319. package/dist/client/types/drill.d.ts +1 -1
  320. package/dist/client/types.d.ts +7 -2
  321. package/dist/client/utils/axisValueFormatting.d.ts +32 -0
  322. package/dist/client/utils/drillQueryBuilder.d.ts +2 -2
  323. package/dist/client/utils/filterUtils.d.ts +33 -5
  324. package/dist/client/utils/joinReachability.d.ts +27 -0
  325. package/dist/client/utils/timeValueFormatting.d.ts +32 -0
  326. package/dist/client/utils.js +6 -6
  327. package/dist/client-bundle-stats.html +1 -1
  328. package/dist/mcp-app/mcp-app.html +55 -55
  329. package/dist/server/google-BOnRIN1w.cjs +2 -0
  330. package/dist/{adapters/google-CFYljAOF.js → server/google-CvKM9yVM.js} +83 -71
  331. package/dist/server/index.cjs +179 -211
  332. package/dist/server/index.d.ts +2 -5050
  333. package/dist/server/index.js +6360 -6462
  334. package/dist/{adapters/openai-y7GhJNdn.js → server/openai-B5jEiqiB.js} +776 -719
  335. package/dist/server/openai-D0musiYP.cjs +17 -0
  336. package/dist/{adapters/openai-DiVskd89.js → server/openai-cDlFSTk6.js} +61 -59
  337. package/dist/server/openai-vXvLni8v.cjs +1 -0
  338. package/dist/server/server/adapters/base-adapter.d.ts +332 -0
  339. package/dist/server/server/adapters/databend-adapter.d.ts +63 -0
  340. package/dist/server/server/adapters/duckdb-adapter.d.ts +68 -0
  341. package/dist/server/server/adapters/mysql-adapter.d.ts +65 -0
  342. package/dist/server/server/adapters/postgres-adapter.d.ts +55 -0
  343. package/dist/server/server/adapters/singlestore-adapter.d.ts +4 -0
  344. package/dist/server/server/adapters/snowflake-adapter.d.ts +53 -0
  345. package/dist/server/server/adapters/sqlite-adapter.d.ts +120 -0
  346. package/dist/server/server/adapters/window-function-builder.d.ts +11 -0
  347. package/dist/server/server/agent/chart-validation.d.ts +22 -0
  348. package/dist/server/server/agent/handler-steps.d.ts +37 -0
  349. package/dist/server/server/agent/handler.d.ts +25 -0
  350. package/dist/server/server/agent/index.d.ts +11 -0
  351. package/dist/server/server/agent/providers/anthropic.d.ts +24 -0
  352. package/dist/server/server/agent/providers/factory.d.ts +12 -0
  353. package/dist/server/server/agent/providers/google.d.ts +23 -0
  354. package/dist/server/server/agent/providers/index.d.ts +6 -0
  355. package/dist/server/server/agent/providers/openai.d.ts +26 -0
  356. package/dist/server/server/agent/providers/types.d.ts +95 -0
  357. package/dist/server/server/agent/system-prompt.d.ts +5 -0
  358. package/dist/server/server/agent/tools.d.ts +28 -0
  359. package/dist/server/server/agent/types.d.ts +192 -0
  360. package/dist/server/server/ai/discovery-helpers.d.ts +29 -0
  361. package/dist/server/server/ai/discovery.d.ts +66 -0
  362. package/dist/server/server/ai/index.d.ts +10 -0
  363. package/dist/server/server/ai/mcp-prompts.d.ts +83 -0
  364. package/dist/server/server/ai/query-schema.d.ts +258 -0
  365. package/dist/server/server/ai/schemas.d.ts +63 -0
  366. package/dist/server/server/ai/suggestion-helpers.d.ts +33 -0
  367. package/dist/server/server/ai/suggestion.d.ts +16 -0
  368. package/dist/server/server/ai/validation-helpers.d.ts +21 -0
  369. package/dist/server/server/ai/validation.d.ts +31 -0
  370. package/dist/server/server/builders/analysis-utils.d.ts +106 -0
  371. package/dist/server/server/builders/comparison-query-builder.d.ts +70 -0
  372. package/dist/server/server/builders/cte-builder.d.ts +108 -0
  373. package/dist/server/server/builders/date-time-builder.d.ts +34 -0
  374. package/dist/server/server/builders/date-time-helpers.d.ts +34 -0
  375. package/dist/server/server/builders/filter-builder.d.ts +25 -0
  376. package/dist/server/server/builders/filter-operators.d.ts +23 -0
  377. package/dist/server/server/builders/flow-query-builder.d.ts +136 -0
  378. package/dist/server/server/builders/funnel-query-builder.d.ts +145 -0
  379. package/dist/server/server/builders/group-by-builder.d.ts +38 -0
  380. package/dist/server/server/builders/index.d.ts +13 -0
  381. package/dist/server/server/builders/measure-builder.d.ts +185 -0
  382. package/dist/server/server/builders/retention-query-builder.d.ts +98 -0
  383. package/dist/server/server/cache-providers/index.d.ts +5 -0
  384. package/dist/server/server/cache-providers/memory.d.ts +105 -0
  385. package/dist/server/server/cache-utils.d.ts +85 -0
  386. package/dist/server/server/compiler-metadata.d.ts +11 -0
  387. package/dist/server/server/compiler.d.ts +212 -0
  388. package/dist/server/server/cube-utils.d.ts +158 -0
  389. package/dist/server/server/database-utils.d.ts +18 -0
  390. package/dist/server/server/execution/annotation-builder.d.ts +12 -0
  391. package/dist/server/server/execution/filter-cache-preloader.d.ts +19 -0
  392. package/dist/server/server/execution/mode-router.d.ts +25 -0
  393. package/dist/server/server/execution/query-result-cache.d.ts +21 -0
  394. package/dist/server/server/execution/result-post-processor.d.ts +10 -0
  395. package/dist/server/server/executor.d.ts +186 -0
  396. package/dist/server/server/executors/base-executor.d.ts +16 -0
  397. package/dist/server/server/executors/databend-executor.d.ts +33 -0
  398. package/dist/server/server/executors/duckdb-executor.d.ts +33 -0
  399. package/dist/server/server/executors/explain-utils.d.ts +28 -0
  400. package/dist/server/server/executors/index.d.ts +21 -0
  401. package/dist/server/server/executors/mysql-executor.d.ts +27 -0
  402. package/dist/server/server/executors/postgres-executor.d.ts +27 -0
  403. package/dist/server/server/executors/singlestore-executor.d.ts +9 -0
  404. package/dist/server/server/executors/snowflake-executor.d.ts +33 -0
  405. package/dist/server/server/executors/sqlite-executor.d.ts +28 -0
  406. package/dist/server/server/explain/databend-parser.d.ts +16 -0
  407. package/dist/server/server/explain/duckdb-parser.d.ts +28 -0
  408. package/dist/server/server/explain/explain-tree.d.ts +20 -0
  409. package/dist/server/server/explain/index.d.ts +9 -0
  410. package/dist/server/server/explain/mysql-parser.d.ts +38 -0
  411. package/dist/server/server/explain/postgres-parser.d.ts +18 -0
  412. package/dist/server/server/explain/snowflake-parser.d.ts +17 -0
  413. package/dist/server/server/explain/sqlite-parser.d.ts +23 -0
  414. package/dist/server/server/filter-cache.d.ts +73 -0
  415. package/dist/server/server/gap-filler.d.ts +48 -0
  416. package/dist/server/server/index.d.ts +38 -0
  417. package/dist/server/server/logical-plan/cte-planner-helpers.d.ts +37 -0
  418. package/dist/server/server/logical-plan/cte-planner.d.ts +104 -0
  419. package/dist/server/server/logical-plan/filter-propagation.d.ts +44 -0
  420. package/dist/server/server/logical-plan/index.d.ts +19 -0
  421. package/dist/server/server/logical-plan/join-planner.d.ts +27 -0
  422. package/dist/server/server/logical-plan/logical-plan-builder.d.ts +58 -0
  423. package/dist/server/server/logical-plan/logical-planner.d.ts +39 -0
  424. package/dist/server/server/logical-plan/optimiser.d.ts +34 -0
  425. package/dist/server/server/logical-plan/plan-analysis-reporter.d.ts +59 -0
  426. package/dist/server/server/logical-plan/planner-utils.d.ts +20 -0
  427. package/dist/server/server/logical-plan/types.d.ts +199 -0
  428. package/dist/server/server/measure-classification.d.ts +40 -0
  429. package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +50 -0
  430. package/dist/server/server/physical-plan/drizzle-sql-builder.d.ts +118 -0
  431. package/dist/server/server/physical-plan/index.d.ts +2 -0
  432. package/dist/server/server/physical-plan/processors/cte-processor.d.ts +6 -0
  433. package/dist/server/server/physical-plan/processors/index.d.ts +8 -0
  434. package/dist/server/server/physical-plan/processors/joins-processor.d.ts +6 -0
  435. package/dist/server/server/physical-plan/processors/keys-dedup-processor.d.ts +13 -0
  436. package/dist/server/server/physical-plan/processors/multi-fact-processor.d.ts +13 -0
  437. package/dist/server/server/physical-plan/processors/predicates-processor.d.ts +6 -0
  438. package/dist/server/server/physical-plan/processors/selection-processor.d.ts +6 -0
  439. package/dist/server/server/physical-plan/processors/shared.d.ts +38 -0
  440. package/dist/server/server/physical-plan/processors/window-processor.d.ts +6 -0
  441. package/dist/server/server/prompts/explain-analysis-prompt.d.ts +47 -0
  442. package/dist/server/server/prompts/index.d.ts +27 -0
  443. package/dist/server/server/prompts/single-step-prompt.d.ts +31 -0
  444. package/dist/server/server/prompts/step0-validation-prompt.d.ts +39 -0
  445. package/dist/server/server/prompts/step1-shape-prompt.d.ts +29 -0
  446. package/dist/server/server/prompts/step2-complete-prompt.d.ts +19 -0
  447. package/dist/server/server/prompts/types.d.ts +37 -0
  448. package/dist/server/server/query-handlers.d.ts +79 -0
  449. package/dist/server/server/query-modes.d.ts +28 -0
  450. package/dist/server/server/query-validator.d.ts +9 -0
  451. package/dist/server/server/resolvers/calculated-measure-resolver.d.ts +98 -0
  452. package/dist/server/server/resolvers/index.d.ts +6 -0
  453. package/dist/server/server/resolvers/join-path-resolver.d.ts +158 -0
  454. package/dist/server/server/sql-format.d.ts +11 -0
  455. package/dist/server/server/template-substitution.d.ts +57 -0
  456. package/dist/server/server/types/analysis.d.ts +189 -0
  457. package/dist/server/server/types/cache.d.ts +132 -0
  458. package/dist/server/server/types/core.d.ts +164 -0
  459. package/dist/server/server/types/cube.d.ts +544 -0
  460. package/dist/server/server/types/executor.d.ts +156 -0
  461. package/dist/server/server/types/flow.d.ts +144 -0
  462. package/dist/server/server/types/funnel.d.ts +118 -0
  463. package/dist/server/server/types/index.d.ts +11 -0
  464. package/dist/server/server/types/metadata.d.ts +113 -0
  465. package/dist/server/server/types/query.d.ts +153 -0
  466. package/dist/server/server/types/retention.d.ts +141 -0
  467. package/dist/server/server/types/utils.d.ts +11 -0
  468. package/dist/server/server/types/validation.d.ts +14 -0
  469. package/package.json +15 -8
  470. package/dist/adapters/google-DUlXeeDA.cjs +0 -2
  471. package/dist/adapters/handler-C63rJUUK.cjs +0 -25
  472. package/dist/adapters/locale-CTNwPVZI.cjs +0 -198
  473. package/dist/adapters/locale-gU_d1Wja.js +0 -8249
  474. package/dist/adapters/mcp-transport-C4J4SAcn.cjs +0 -40
  475. package/dist/adapters/mcp-transport-CVUiifEc.js +0 -579
  476. package/dist/adapters/openai-6wrBvAnv.cjs +0 -1
  477. package/dist/adapters/openai-BDwb2u7y.cjs +0 -17
  478. package/dist/adapters/utils-CkEkU8Bo.cjs +0 -128
  479. package/dist/client/chunks/DashboardEditModal-6KRE36mm.js.map +0 -1
  480. package/dist/client/chunks/analysis-builder-shared-x576-O5p.js.map +0 -1
  481. package/dist/client/chunks/analysis-builder-zd48FVJO.js +0 -5367
  482. package/dist/client/chunks/analysis-builder-zd48FVJO.js.map +0 -1
  483. package/dist/client/chunks/chart-activity-grid-CiHrLH6Y.js.map +0 -1
  484. package/dist/client/chunks/chart-area-CXFK-Grv.js +0 -450
  485. package/dist/client/chunks/chart-area-CXFK-Grv.js.map +0 -1
  486. package/dist/client/chunks/chart-bar-DKXfLoGG.js +0 -271
  487. package/dist/client/chunks/chart-bar-DKXfLoGG.js.map +0 -1
  488. package/dist/client/chunks/chart-bubble-DGkTQlxM.js +0 -273
  489. package/dist/client/chunks/chart-bubble-DGkTQlxM.js.map +0 -1
  490. package/dist/client/chunks/chart-config-area-Bq_UsW3x.js +0 -101
  491. package/dist/client/chunks/chart-config-area-Bq_UsW3x.js.map +0 -1
  492. package/dist/client/chunks/chart-config-bar-_JEGZnAu.js +0 -95
  493. package/dist/client/chunks/chart-config-bar-_JEGZnAu.js.map +0 -1
  494. package/dist/client/chunks/chart-config-box-plot-DJ-dWWXA.js.map +0 -1
  495. package/dist/client/chunks/chart-config-gauge-DSwC04l0.js.map +0 -1
  496. package/dist/client/chunks/chart-config-kpi-delta-D6BIkHL3.js.map +0 -1
  497. package/dist/client/chunks/chart-config-kpi-number-Bx-V9a62.js.map +0 -1
  498. package/dist/client/chunks/chart-config-kpi-text-CcqC1u-8.js.map +0 -1
  499. package/dist/client/chunks/chart-config-line-Db3jDsWc.js.map +0 -1
  500. package/dist/client/chunks/chart-config-pie-DD4SmRTF.js.map +0 -1
  501. package/dist/client/chunks/chart-config-radar-CC2XAaGr.js.map +0 -1
  502. package/dist/client/chunks/chart-config-radial-bar-DmxKx1R0.js.map +0 -1
  503. package/dist/client/chunks/chart-config-tree-map-BI-oQStO.js.map +0 -1
  504. package/dist/client/chunks/chart-config-waterfall-DSnyixbI.js.map +0 -1
  505. package/dist/client/chunks/chart-data-table-Cm5jrpaw.js.map +0 -1
  506. package/dist/client/chunks/chart-funnel-Eke8IPtG.js.map +0 -1
  507. package/dist/client/chunks/chart-gauge-DeRZNsyl.js +0 -424
  508. package/dist/client/chunks/chart-gauge-DeRZNsyl.js.map +0 -1
  509. package/dist/client/chunks/chart-heat-map-C86thSJ4.js +0 -231
  510. package/dist/client/chunks/chart-heat-map-C86thSJ4.js.map +0 -1
  511. package/dist/client/chunks/chart-kpi-delta-CxOYD2f1.js +0 -343
  512. package/dist/client/chunks/chart-kpi-delta-CxOYD2f1.js.map +0 -1
  513. package/dist/client/chunks/chart-kpi-number-C6gWz-x4.js +0 -322
  514. package/dist/client/chunks/chart-kpi-number-C6gWz-x4.js.map +0 -1
  515. package/dist/client/chunks/chart-kpi-text-dDONrhS-.js +0 -149
  516. package/dist/client/chunks/chart-kpi-text-dDONrhS-.js.map +0 -1
  517. package/dist/client/chunks/chart-line-r4iWevKZ.js +0 -433
  518. package/dist/client/chunks/chart-line-r4iWevKZ.js.map +0 -1
  519. package/dist/client/chunks/chart-markdown-BPW-EAm9.js.map +0 -1
  520. package/dist/client/chunks/chart-pie-yqH2YVEI.js +0 -172
  521. package/dist/client/chunks/chart-pie-yqH2YVEI.js.map +0 -1
  522. package/dist/client/chunks/chart-radar-B-_3v-rE.js +0 -154
  523. package/dist/client/chunks/chart-radar-B-_3v-rE.js.map +0 -1
  524. package/dist/client/chunks/chart-radial-bar-C0EgzfAF.js +0 -148
  525. package/dist/client/chunks/chart-radial-bar-C0EgzfAF.js.map +0 -1
  526. package/dist/client/chunks/chart-scatter-DZPirzwX.js +0 -255
  527. package/dist/client/chunks/chart-scatter-DZPirzwX.js.map +0 -1
  528. package/dist/client/chunks/chart-tree-map-Bi4axCvh.js +0 -298
  529. package/dist/client/chunks/chart-tree-map-Bi4axCvh.js.map +0 -1
  530. package/dist/client/chunks/useDirtyStateTracking-B5wCDJSj.js.map +0 -1
  531. package/dist/server/google-DUlXeeDA.cjs +0 -2
  532. package/dist/server/openai-6wrBvAnv.cjs +0 -1
  533. package/dist/server/openai-BDwb2u7y.cjs +0 -17
  534. /package/dist/adapters/{express → adapters/express}/index.d.ts +0 -0
  535. /package/dist/adapters/{fastify → adapters/fastify}/index.d.ts +0 -0
  536. /package/dist/adapters/{hono → adapters/hono}/index.d.ts +0 -0
  537. /package/dist/adapters/{locale.d.ts → adapters/locale.d.ts} +0 -0
  538. /package/dist/adapters/{mcp-tools.d.ts → adapters/mcp-tools.d.ts} +0 -0
  539. /package/dist/adapters/{mcp-transport.d.ts → adapters/mcp-transport.d.ts} +0 -0
  540. /package/dist/adapters/{nextjs → adapters/nextjs}/index.d.ts +0 -0
  541. /package/dist/adapters/{types.d.ts → adapters/types.d.ts} +0 -0
@@ -1,16 +1,16 @@
1
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./vendor-0hJNlZXQ.js";
2
- import { D as s, R as c, l } from "./chart-data-table-Cm5jrpaw.js";
3
- import { A as u, D as d, O as f, S as p, T as m, a as h, d as g, k as _, l as v, n as y, r as b, s as x } from "./useDirtyStateTracking-B5wCDJSj.js";
4
- import { a as S, i as C } from "./useExplainAI-CCeCYzDm.js";
5
- import { r as ee, s as w } from "./chart-funnel-Eke8IPtG.js";
6
- import { P as te, k as T } from "./chart-activity-grid-CiHrLH6Y.js";
7
- import { Y as E, _ as ne, b as D, d as O, dt as k, ft as A, g as j, k as M, l as N, u as P, v as re, w as ie, x as ae } from "./DashboardEditModal-6KRE36mm.js";
8
- import { a as oe, s as se, t as F } from "./retention-ChW9jYdy.js";
9
- import { n as ce } from "./charts-core-CrBDYN6N.js";
10
- import I, { createContext as le, memo as L, useCallback as R, useContext as ue, useEffect as z, useMemo as B, useRef as V, useState as H } from "react";
11
- import { Fragment as U, jsx as W, jsxs as G } 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-DSpR0IW6.js";
2
+ import { k as s, u as c, v as l } from "./chart-data-table-CKauQXme.js";
3
+ import { A as u, S as d, T as f, _ as p, _t as m, d as h, et as g, g as _, gt as v, l as y, u as b, v as x, x as S, y as C } from "./DashboardEditModal-okVfH8ZK.js";
4
+ import { a as w, s as T, t as E } from "./retention-ChW9jYdy.js";
5
+ import { P as D, z as ee } from "./chart-activity-grid-DX0SJbxs.js";
6
+ import { A as O, D as k, O as te, S as ne, T as A, a as re, d as ie, k as ae, l as oe, n as se, r as ce, s as le } from "./useDirtyStateTracking-MbpxH_v6.js";
7
+ import { a as ue, i as de } from "./useExplainAI-evnZkjCY.js";
8
+ import { r as fe, s as j } from "./chart-funnel-CToKSBaL.js";
9
+ import { n as M } from "./charts-core-DaXSt1Dd.js";
10
+ import N, { createContext as P, memo as F, useCallback as I, useContext as pe, useEffect as L, useMemo as R, useRef as z, useState as B } from "react";
11
+ import { Fragment as V, jsx as H, jsxs as U } from "react/jsx-runtime";
12
12
  //#region src/shared/date-utils.ts
13
- function de(e) {
13
+ function me(e) {
14
14
  let t = /* @__PURE__ */ new Date(), n = e.toLowerCase().trim(), r = t.getUTCFullYear(), i = t.getUTCMonth(), a = t.getUTCDate(), o = t.getUTCDay();
15
15
  if (n === "today") {
16
16
  let e = new Date(t);
@@ -123,7 +123,7 @@ function de(e) {
123
123
  }
124
124
  return null;
125
125
  }
126
- function fe(e) {
126
+ function W(e) {
127
127
  if (Array.isArray(e)) {
128
128
  if (e.length < 2) return null;
129
129
  let t = new Date(e[0]), n = new Date(e[1]);
@@ -132,12 +132,12 @@ function fe(e) {
132
132
  end: n
133
133
  });
134
134
  }
135
- return de(e);
135
+ return me(e);
136
136
  }
137
- function pe(e) {
137
+ function he(e) {
138
138
  return e.toISOString().split("T")[0];
139
139
  }
140
- function me(e, t) {
140
+ function ge(e, t) {
141
141
  let n = t.getTime() - e.getTime(), r = Math.ceil(n / (1e3 * 60 * 60 * 24)), i = new Date(e);
142
142
  i.setUTCDate(i.getUTCDate() - 1), i.setUTCHours(23, 59, 59, 999);
143
143
  let a = new Date(i);
@@ -148,27 +148,27 @@ function me(e, t) {
148
148
  }
149
149
  //#endregion
150
150
  //#region src/client/components/AnalysisBuilder/utils/filterUtils.ts
151
- function he(e, t) {
151
+ function _e(e, t) {
152
152
  for (let n of e) if ("type" in n && "filters" in n) {
153
- let e = he(n.filters, t);
153
+ let e = _e(n.filters, t);
154
154
  if (e) return e;
155
155
  } else if ("member" in n) {
156
156
  let e = n;
157
157
  if (e.member === t && e.operator === "inDateRange" && e.dateRange) return { dateRange: e.dateRange };
158
158
  }
159
159
  }
160
- function ge(e, t) {
161
- let n = he(t, e);
160
+ function ve(e, t) {
161
+ let n = _e(t, e);
162
162
  if (!n?.dateRange) return;
163
- let r = fe(n.dateRange);
163
+ let r = W(n.dateRange);
164
164
  if (!r) return;
165
- let i = me(r.start, r.end);
166
- return [[pe(r.start), pe(r.end)], [pe(i.start), pe(i.end)]];
165
+ let i = ge(r.start, r.end);
166
+ return [[he(r.start), he(r.end)], [he(i.start), he(i.end)]];
167
167
  }
168
- function _e(e, t) {
168
+ function ye(e, t) {
169
169
  return e.reduce((e, n) => {
170
170
  if ("type" in n && "filters" in n) {
171
- let r = n, i = _e(r.filters, t);
171
+ let r = n, i = ye(r.filters, t);
172
172
  i.length > 0 && e.push({
173
173
  type: r.type,
174
174
  filters: i
@@ -182,10 +182,10 @@ function _e(e, t) {
182
182
  }
183
183
  //#endregion
184
184
  //#region src/client/components/AnalysisBuilder/utils/queryUtils.ts
185
- function ve(e, t, n, r, i = !1, a) {
185
+ function G(e, t, n, r, i = !1, a) {
186
186
  let o = t.filter((e) => e.isTimeDimension && e.enableComparison).map((e) => e.field), s = n;
187
- if (!i) for (let e of o) s = _e(s, e);
188
- s = s.filter((e) => E(e));
187
+ if (!i) for (let e of o) s = ye(s, e);
188
+ s = s.filter((e) => g(e));
189
189
  let c = {
190
190
  measures: e.map((e) => e.field),
191
191
  dimensions: t.filter((e) => !e.isTimeDimension).map((e) => e.field),
@@ -195,7 +195,7 @@ function ve(e, t, n, r, i = !1, a) {
195
195
  granularity: e.granularity || "day"
196
196
  };
197
197
  if (e.enableComparison) {
198
- let r = ge(e.field, n);
198
+ let r = ve(e.field, n);
199
199
  r && (t.compareDateRange = r);
200
200
  }
201
201
  return t;
@@ -218,122 +218,324 @@ function K() {
218
218
  };
219
219
  }
220
220
  //#endregion
221
+ //#region src/client/components/AnalysisBuilder/filterConfigModalUtils.ts
222
+ function q(e, t, n, r) {
223
+ if (!t || n === 0) return { type: "none" };
224
+ switch (e) {
225
+ case "ArrowDown": return {
226
+ type: "highlight",
227
+ index: r < n - 1 ? r + 1 : 0
228
+ };
229
+ case "ArrowUp": return {
230
+ type: "highlight",
231
+ index: r > 0 ? r - 1 : n - 1
232
+ };
233
+ case "Enter": return r >= 0 && r < n ? {
234
+ type: "select",
235
+ index: r
236
+ } : { type: "none" };
237
+ case "Escape": return { type: "close" };
238
+ default: return { type: "none" };
239
+ }
240
+ }
241
+ //#endregion
242
+ //#region src/client/components/AnalysisBuilder/FilterValueInput.tsx
243
+ var J = l("close"), be = l("chevronDown");
244
+ function xe({ filter: e, dateRange: t }) {
245
+ let { t: n } = D(), { rangeType: r, numberValue: i, label: a, isOpen: o, onToggle: s, onRangeTypeChange: c, onNumberValueChange: l, onCustomStartDate: u, onCustomEndDate: d, onOpen: f } = t;
246
+ return /* @__PURE__ */ U("div", {
247
+ className: "dc:space-y-2",
248
+ children: [
249
+ /* @__PURE__ */ U("div", {
250
+ className: "dc:relative",
251
+ children: [/* @__PURE__ */ U("button", {
252
+ onClick: () => {
253
+ f(), s(!o);
254
+ },
255
+ className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
256
+ children: [/* @__PURE__ */ H("span", {
257
+ className: "dc:truncate",
258
+ children: a
259
+ }), /* @__PURE__ */ H(be, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${o ? "dc:rotate-180" : ""}` })]
260
+ }), o && /* @__PURE__ */ H("div", {
261
+ className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-48 dc:overflow-y-auto",
262
+ children: ae.map((e) => /* @__PURE__ */ H("button", {
263
+ onClick: () => c(e.value),
264
+ className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm hover:bg-dc-surface-hover ${e.value === r ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text"}`,
265
+ children: n(e.label)
266
+ }, e.value))
267
+ })]
268
+ }),
269
+ te(r) && /* @__PURE__ */ U("div", {
270
+ className: "dc:flex dc:items-center dc:gap-2",
271
+ children: [/* @__PURE__ */ H("input", {
272
+ type: "number",
273
+ min: "1",
274
+ max: "1000",
275
+ value: i,
276
+ onChange: (e) => l(Math.max(1, parseInt(e.target.value) || 1)),
277
+ className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text dc:w-20"
278
+ }), /* @__PURE__ */ H("span", {
279
+ className: "dc:text-sm text-dc-text-muted",
280
+ children: r.replace("last_n_", "")
281
+ })]
282
+ }),
283
+ r === "custom" && /* @__PURE__ */ U("div", {
284
+ className: "dc:flex dc:items-center dc:gap-2",
285
+ children: [
286
+ /* @__PURE__ */ H("input", {
287
+ type: "date",
288
+ value: Array.isArray(e.dateRange) ? e.dateRange[0] : "",
289
+ onChange: u,
290
+ className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
291
+ }),
292
+ /* @__PURE__ */ H("span", {
293
+ className: "dc:text-sm text-dc-text-muted",
294
+ children: n("filter.modal.dateTo")
295
+ }),
296
+ /* @__PURE__ */ H("input", {
297
+ type: "date",
298
+ value: Array.isArray(e.dateRange) ? e.dateRange[1] : "",
299
+ onChange: d,
300
+ className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
301
+ })
302
+ ]
303
+ })
304
+ ]
305
+ });
306
+ }
307
+ function Se({ filter: e, combo: t }) {
308
+ let { t: n } = D(), { options: r, loading: i, error: a, highlightedIndex: o, listRef: s, onSelect: c } = t;
309
+ return i ? /* @__PURE__ */ H("div", {
310
+ className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
311
+ children: n("filter.modal.loading")
312
+ }) : a ? /* @__PURE__ */ U("div", {
313
+ className: "dc:px-3 dc:py-2 dc:text-sm text-dc-error",
314
+ children: [n("filter.modal.errorPrefix"), String(a)]
315
+ }) : r.length === 0 ? /* @__PURE__ */ H("div", {
316
+ className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
317
+ children: n("filter.modal.noValues")
318
+ }) : /* @__PURE__ */ H("div", {
319
+ ref: s,
320
+ className: "dc:max-h-40 dc:overflow-y-auto",
321
+ children: r.map((t, n) => {
322
+ let r = e.values?.includes(t);
323
+ return /* @__PURE__ */ U("button", {
324
+ onClick: (e) => c(t, e),
325
+ className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm dc:transition-colors ${n === o ? "bg-dc-surface-hover" : ""} ${r ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text hover:bg-dc-surface-hover"}`,
326
+ children: [String(t), r && /* @__PURE__ */ H("span", {
327
+ className: "dc:float-right",
328
+ children: "✓"
329
+ })]
330
+ }, `${t}-${n}`);
331
+ })
332
+ });
333
+ }
334
+ function Ce({ filter: e, operatorMeta: t, combo: n }) {
335
+ let { t: r } = D(), { isOpen: i, loading: a, searchText: o, onSearchTextChange: s, onHighlightedIndexChange: c, onRemove: l, onKeyDown: u, onOpen: d } = n;
336
+ return /* @__PURE__ */ U("div", {
337
+ className: "dc:space-y-2",
338
+ children: [
339
+ e.values && e.values.length > 0 && /* @__PURE__ */ H("div", {
340
+ className: "dc:flex dc:flex-wrap dc:gap-1.5",
341
+ children: e.values.map((e, t) => /* @__PURE__ */ U("span", {
342
+ className: "dc:inline-flex dc:items-center dc:gap-1 bg-dc-primary/10 text-dc-primary dc:text-sm dc:px-2 dc:py-1 dc:rounded",
343
+ children: [/* @__PURE__ */ H("span", {
344
+ className: "dc:max-w-[150px] dc:truncate",
345
+ children: String(e)
346
+ }), /* @__PURE__ */ H("button", {
347
+ onClick: () => l(e),
348
+ className: "hover:text-dc-danger",
349
+ children: /* @__PURE__ */ H(J, { className: "dc:w-3.5 dc:h-3.5" })
350
+ })]
351
+ }, t))
352
+ }),
353
+ /* @__PURE__ */ U("div", {
354
+ className: "dc:relative",
355
+ children: [/* @__PURE__ */ U("button", {
356
+ onClick: () => {
357
+ d();
358
+ },
359
+ className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
360
+ children: [/* @__PURE__ */ H("span", {
361
+ className: "text-dc-text-muted dc:truncate",
362
+ children: r(a ? "filter.modal.loading" : "filter.modal.selectValue")
363
+ }), /* @__PURE__ */ H(be, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${i ? "dc:rotate-180" : ""}` })]
364
+ }), i && /* @__PURE__ */ U("div", {
365
+ className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-56 dc:overflow-hidden",
366
+ children: [/* @__PURE__ */ H("div", {
367
+ className: "dc:p-2 dc:border-b border-dc-border",
368
+ children: /* @__PURE__ */ H("input", {
369
+ type: "text",
370
+ value: o,
371
+ onChange: (e) => {
372
+ s(e.target.value), c(-1);
373
+ },
374
+ onKeyDown: u,
375
+ placeholder: r("filter.modal.search"),
376
+ className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text",
377
+ autoFocus: !0
378
+ })
379
+ }), /* @__PURE__ */ H(Se, {
380
+ filter: e,
381
+ combo: n
382
+ })]
383
+ })]
384
+ }),
385
+ t?.supportsMultipleValues && /* @__PURE__ */ H("p", {
386
+ className: "dc:text-xs text-dc-text-muted",
387
+ children: r("filter.modal.multiSelectHint")
388
+ })
389
+ ]
390
+ });
391
+ }
392
+ function we({ field: e, dateRange: t, combo: n, inputs: r }) {
393
+ let { t: i } = D(), { filter: a, operatorMeta: o, shouldShowDateRange: s, shouldShowComboBox: c } = e, { onBetweenStart: l, onBetweenEnd: u, onDate: d, onDirect: f } = r;
394
+ return o?.requiresValues ? s ? /* @__PURE__ */ H(xe, {
395
+ filter: a,
396
+ dateRange: t
397
+ }) : a.operator === "between" || a.operator === "notBetween" ? /* @__PURE__ */ U("div", {
398
+ className: "dc:flex dc:items-center dc:gap-2",
399
+ children: [
400
+ /* @__PURE__ */ H("input", {
401
+ type: "number",
402
+ value: a.values?.[0] ?? "",
403
+ onChange: l,
404
+ placeholder: i("filter.modal.min"),
405
+ className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
406
+ }),
407
+ /* @__PURE__ */ H("span", {
408
+ className: "dc:text-sm text-dc-text-muted",
409
+ children: i("filter.modal.to")
410
+ }),
411
+ /* @__PURE__ */ H("input", {
412
+ type: "number",
413
+ value: a.values?.[1] ?? "",
414
+ onChange: u,
415
+ placeholder: i("filter.modal.max"),
416
+ className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
417
+ })
418
+ ]
419
+ }) : o?.valueType === "date" ? /* @__PURE__ */ H("input", {
420
+ type: "date",
421
+ value: a.values?.[0] || "",
422
+ onChange: d,
423
+ className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
424
+ }) : o?.valueType === "number" ? /* @__PURE__ */ H("input", {
425
+ type: "number",
426
+ value: a.values?.[0] ?? "",
427
+ onChange: f,
428
+ placeholder: i("filter.modal.enterNumber"),
429
+ className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
430
+ }) : c ? /* @__PURE__ */ H(Ce, {
431
+ filter: a,
432
+ operatorMeta: o,
433
+ combo: n
434
+ }) : /* @__PURE__ */ H("input", {
435
+ type: "text",
436
+ value: a.values?.[0] ?? "",
437
+ onChange: f,
438
+ placeholder: i("filter.modal.enterValue"),
439
+ className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text placeholder-dc-text-muted"
440
+ }) : /* @__PURE__ */ H("div", {
441
+ className: "dc:text-sm text-dc-text-muted dc:italic dc:py-2",
442
+ children: i("filter.modal.noValueRequired")
443
+ });
444
+ }
445
+ //#endregion
221
446
  //#region src/client/components/AnalysisBuilder/FilterConfigModal.tsx
222
- var q = s("close"), J = s("chevronDown"), Y = s("dimension"), ye = s("timeDimension"), be = s("measure");
223
- function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i }) {
224
- let { t: a } = T(), [o, s] = H(e), [c, l] = H(!1), [p, h] = H(!1), [g, v] = H(!1), [x, S] = H("this_month"), [C, ee] = H(1), [w, te] = H(""), [E, D] = H(null), [O, k] = H(-1), A = V(null), j = V(null), M = y(w, 300), N = ne(o.member, t), P = N?.field.type || "string", ie = P === "time", ae = N?.fieldType === "measure", oe = N?.fieldType === "dimension", se = re(o.member, t), F = u[o.operator], ce = d(P), I = ie && o.operator === "inDateRange", le = R(() => [
447
+ var Te = l("close"), Ee = l("chevronDown"), De = l("dimension"), Oe = l("timeDimension"), ke = l("measure");
448
+ function Ae({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i }) {
449
+ let { t: a } = D(), [o, s] = B(e), [c, l] = B(!1), [u, d] = B(!1), [f, p] = B(!1), [m, h] = B("this_month"), [g, v] = B(1), [y, b] = B(""), [S, w] = B(null), [T, E] = B(-1), ee = z(null), ne = z(null), re = se(y, 300), ie = x(o.member, t), oe = ie?.field.type || "string", le = oe === "time", ue = ie?.fieldType === "measure", de = ie?.fieldType === "dimension", fe = C(o.member, t), j = O[o.operator], M = k(oe), N = le && o.operator === "inDateRange", P = I(() => [
225
450
  "equals",
226
451
  "notEquals",
227
452
  "in",
228
453
  "notIn"
229
- ].includes(o.operator) && oe && !ie, [
454
+ ].includes(o.operator) && de && !le, [
230
455
  o.operator,
231
- oe,
232
- ie
233
- ])(), { values: L, loading: ue, error: B, searchValues: de } = b(o.member, le);
234
- z(() => {
456
+ de,
457
+ le
458
+ ])(), { values: F, loading: pe, error: me, searchValues: W } = ce(o.member, P);
459
+ L(() => {
235
460
  if (!i) {
236
- D(null);
461
+ w(null);
237
462
  return;
238
463
  }
239
464
  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));
240
- D(r ? {
465
+ w(r ? {
241
466
  bottom: window.innerHeight - e.top + 8,
242
467
  left: a
243
468
  } : {
244
469
  top: e.bottom + 8,
245
470
  left: a
246
471
  });
247
- }, [i]), z(() => {
472
+ }, [i]), L(() => {
248
473
  let e = (e) => {
249
- A.current && !A.current.contains(e.target) && (l(!1), h(!1), v(!1));
474
+ ee.current && !ee.current.contains(e.target) && (l(!1), d(!1), p(!1));
250
475
  };
251
476
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
252
- }, []), z(() => {
253
- p && le && de && de("", !0), p || k(-1);
477
+ }, []), L(() => {
478
+ u && P && W && W("", !0), u || E(-1);
254
479
  }, [
255
- p,
256
- le,
257
- de
258
- ]), z(() => {
259
- if (O >= 0 && j.current) {
260
- let e = j.current.children[O];
480
+ u,
481
+ P,
482
+ W
483
+ ]), L(() => {
484
+ if (T >= 0 && ne.current) {
485
+ let e = ne.current.children[T];
261
486
  e && e.scrollIntoView({ block: "nearest" });
262
487
  }
263
- }, [O]), z(() => {
264
- p && le && de && M !== void 0 && de(M);
488
+ }, [T]), L(() => {
489
+ u && P && W && re !== void 0 && W(re);
265
490
  }, [
266
- M,
267
- p,
268
- le,
269
- de
270
- ]), z(() => {
271
- if (!(!I || !o.dateRange)) if (Array.isArray(o.dateRange)) S("custom");
272
- else {
273
- let e = o.dateRange.match(/^last (\d+) (days|weeks|months|quarters|years)$/), t = !e && o.dateRange.match(/^last (day|week|month|quarter|year)$/);
274
- if (e) {
275
- let [, t, n] = e;
276
- S(`last_n_${n}`), ee(parseInt(t) || 1);
277
- } else if (t) {
278
- let [, e] = t;
279
- S(`last_n_${e === "day" ? "days" : e === "week" ? "weeks" : e === "month" ? "months" : e === "quarter" ? "quarters" : "years"}`), ee(1);
280
- } else {
281
- let e = !1;
282
- for (let t of _) if (t.value !== "custom" && !f(t.value) && m(t.value) === o.dateRange) {
283
- S(t.value), e = !0;
284
- break;
285
- }
286
- e || S("custom");
287
- }
288
- }
289
- }, [o.dateRange, I]);
290
- let fe = R((e) => {
491
+ re,
492
+ u,
493
+ P,
494
+ W
495
+ ]), L(() => {
496
+ if (!N) return;
497
+ let e = _(o.dateRange);
498
+ e && (h(e.rangeType), e.numberValue !== void 0 && v(e.numberValue));
499
+ }, [o.dateRange, N]);
500
+ let he = I((e) => {
291
501
  s({
292
502
  member: o.member,
293
503
  operator: e,
294
504
  values: []
295
505
  }), l(!1);
296
- }, [o.member]), pe = R((e, t) => {
506
+ }, [o.member]), ge = I((e, t) => {
297
507
  let n = t?.shiftKey ?? !1, r = o.values || [];
298
- F?.supportsMultipleValues ? (r.includes(e) ? s({
508
+ j?.supportsMultipleValues ? (r.includes(e) ? s({
299
509
  ...o,
300
510
  values: r.filter((t) => t !== e)
301
511
  }) : s({
302
512
  ...o,
303
513
  values: [...r, e]
304
- }), n || h(!1)) : (s({
514
+ }), n || d(!1)) : (s({
305
515
  ...o,
306
516
  values: [e]
307
- }), h(!1)), te(""), k(-1);
308
- }, [o, F?.supportsMultipleValues]), me = R((e) => {
517
+ }), d(!1)), b(""), E(-1);
518
+ }, [o, j?.supportsMultipleValues]), _e = I((e) => {
309
519
  let t = (o.values || []).filter((t) => t !== e);
310
520
  s({
311
521
  ...o,
312
522
  values: t
313
523
  });
314
- }, [o]), he = R((e) => {
315
- if (!(!p || L.length === 0)) switch (e.key) {
316
- case "ArrowDown":
317
- e.preventDefault(), k((e) => e < L.length - 1 ? e + 1 : 0);
318
- break;
319
- case "ArrowUp":
320
- e.preventDefault(), k((e) => e > 0 ? e - 1 : L.length - 1);
321
- break;
322
- case "Enter":
323
- e.preventDefault(), O >= 0 && O < L.length && pe(L[O], { shiftKey: e.shiftKey });
324
- break;
325
- case "Escape":
326
- e.preventDefault(), h(!1), k(-1);
327
- break;
524
+ }, [o]), ve = I((e) => {
525
+ let t = q(e.key, u, F.length, T);
526
+ if (t.type !== "none") {
527
+ if (e.preventDefault(), t.type === "highlight") return E(t.index);
528
+ if (t.type === "select") return ge(F[t.index], { shiftKey: e.shiftKey });
529
+ d(!1), E(-1);
328
530
  }
329
531
  }, [
330
- p,
331
- L,
332
- O,
333
- pe
334
- ]), ge = R((e) => {
532
+ u,
533
+ F,
534
+ T,
535
+ ge
536
+ ]), ye = I((e) => {
335
537
  let t = e.target.value;
336
- if (F?.valueType === "number") {
538
+ if (j?.valueType === "number") {
337
539
  let e = parseFloat(t);
338
540
  isNaN(e) ? (t === "" || t === "-") && s({
339
541
  ...o,
@@ -346,241 +548,110 @@ function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
346
548
  ...o,
347
549
  values: t ? [t] : []
348
550
  });
349
- }, [o, F?.valueType]), _e = R((e) => {
551
+ }, [o, j?.valueType]), G = I((e) => {
350
552
  let t = parseFloat(e.target.value), n = [isNaN(t) ? "" : t, (o.values?.length >= 2 ? o.values : ["", ""])[1]].filter((e) => e !== "");
351
553
  s({
352
554
  ...o,
353
555
  values: n
354
556
  });
355
- }, [o]), ve = R((e) => {
557
+ }, [o]), K = I((e) => {
356
558
  let t = parseFloat(e.target.value), n = [(o.values?.length >= 2 ? o.values : ["", ""])[0], isNaN(t) ? "" : t].filter((e) => e !== "");
357
559
  s({
358
560
  ...o,
359
561
  values: n
360
562
  });
361
- }, [o]), K = R((e) => {
563
+ }, [o]), J = I((e) => {
362
564
  let t = e.target.value;
363
565
  s({
364
566
  ...o,
365
567
  values: t ? [t] : []
366
568
  });
367
- }, [o]), xe = R((e) => {
368
- S(e), v(!1);
569
+ }, [o]), be = I((e) => {
570
+ h(e), p(!1);
369
571
  let t;
370
572
  if (e === "custom") {
371
573
  let e = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
372
574
  t = [e, e];
373
- } else t = f(e) ? m(e, C) : m(e);
575
+ } else t = te(e) ? A(e, g) : A(e);
374
576
  s({
375
577
  ...o,
376
578
  dateRange: t
377
579
  });
378
- }, [o, C]), Se = R((e) => {
379
- if (ee(e), f(x)) {
380
- let t = m(x, e);
580
+ }, [o, g]), xe = I((e) => {
581
+ if (v(e), te(m)) {
582
+ let t = A(m, e);
381
583
  s({
382
584
  ...o,
383
585
  dateRange: t
384
586
  });
385
587
  }
386
- }, [o, x]), Ce = R((e) => {
588
+ }, [o, m]), Se = I((e) => {
387
589
  let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : [o.dateRange || "", ""])[1] || t;
388
590
  s({
389
591
  ...o,
390
592
  dateRange: [t, n]
391
593
  });
392
- }, [o]), we = R((e) => {
594
+ }, [o]), Ce = I((e) => {
393
595
  let t = e.target.value, n = (Array.isArray(o.dateRange) ? o.dateRange : ["", o.dateRange || ""])[0] || t;
394
596
  s({
395
597
  ...o,
396
598
  dateRange: [n, t]
397
599
  });
398
- }, [o]), Te = a(ce.find((e) => e.operator === o.operator)?.label || o.operator), Ee = a(_.find((e) => e.value === x)?.label || "filter.modal.selectRange"), De = ie ? ye : ae ? be : Y, Oe = () => F?.requiresValues ? I ? /* @__PURE__ */ G("div", {
399
- className: "dc:space-y-2",
400
- children: [
401
- /* @__PURE__ */ G("div", {
402
- className: "dc:relative",
403
- children: [/* @__PURE__ */ G("button", {
404
- onClick: () => {
405
- l(!1), h(!1), v(!g);
406
- },
407
- className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
408
- children: [/* @__PURE__ */ W("span", {
409
- className: "dc:truncate",
410
- children: Ee
411
- }), /* @__PURE__ */ W(J, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${g ? "dc:rotate-180" : ""}` })]
412
- }), g && /* @__PURE__ */ W("div", {
413
- className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-48 dc:overflow-y-auto",
414
- children: _.map((e) => /* @__PURE__ */ W("button", {
415
- onClick: () => xe(e.value),
416
- className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm hover:bg-dc-surface-hover ${e.value === x ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text"}`,
417
- children: a(e.label)
418
- }, e.value))
419
- })]
420
- }),
421
- f(x) && /* @__PURE__ */ G("div", {
422
- className: "dc:flex dc:items-center dc:gap-2",
423
- children: [/* @__PURE__ */ W("input", {
424
- type: "number",
425
- min: "1",
426
- max: "1000",
427
- value: C,
428
- onChange: (e) => Se(Math.max(1, parseInt(e.target.value) || 1)),
429
- className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text dc:w-20"
430
- }), /* @__PURE__ */ W("span", {
431
- className: "dc:text-sm text-dc-text-muted",
432
- children: x.replace("last_n_", "")
433
- })]
434
- }),
435
- x === "custom" && /* @__PURE__ */ G("div", {
436
- className: "dc:flex dc:items-center dc:gap-2",
437
- children: [
438
- /* @__PURE__ */ W("input", {
439
- type: "date",
440
- value: Array.isArray(o.dateRange) ? o.dateRange[0] : "",
441
- onChange: Ce,
442
- className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
443
- }),
444
- /* @__PURE__ */ W("span", {
445
- className: "dc:text-sm text-dc-text-muted",
446
- children: a("filter.modal.dateTo")
447
- }),
448
- /* @__PURE__ */ W("input", {
449
- type: "date",
450
- value: Array.isArray(o.dateRange) ? o.dateRange[1] : "",
451
- onChange: we,
452
- className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-2 dc:py-2 bg-dc-surface text-dc-text"
453
- })
454
- ]
455
- })
456
- ]
457
- }) : o.operator === "between" || o.operator === "notBetween" ? /* @__PURE__ */ G("div", {
458
- className: "dc:flex dc:items-center dc:gap-2",
459
- children: [
460
- /* @__PURE__ */ W("input", {
461
- type: "number",
462
- value: o.values?.[0] ?? "",
463
- onChange: _e,
464
- placeholder: a("filter.modal.min"),
465
- className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
466
- }),
467
- /* @__PURE__ */ W("span", {
468
- className: "dc:text-sm text-dc-text-muted",
469
- children: a("filter.modal.to")
470
- }),
471
- /* @__PURE__ */ W("input", {
472
- type: "number",
473
- value: o.values?.[1] ?? "",
474
- onChange: ve,
475
- placeholder: a("filter.modal.max"),
476
- className: "dc:flex-1 dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
477
- })
478
- ]
479
- }) : F?.valueType === "date" ? /* @__PURE__ */ W("input", {
480
- type: "date",
481
- value: o.values?.[0] || "",
482
- onChange: K,
483
- className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
484
- }) : F?.valueType === "number" ? /* @__PURE__ */ W("input", {
485
- type: "number",
486
- value: o.values?.[0] ?? "",
487
- onChange: ge,
488
- placeholder: a("filter.modal.enterNumber"),
489
- className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text"
490
- }) : le ? /* @__PURE__ */ G("div", {
491
- className: "dc:space-y-2",
492
- children: [
493
- o.values && o.values.length > 0 && /* @__PURE__ */ W("div", {
494
- className: "dc:flex dc:flex-wrap dc:gap-1.5",
495
- children: o.values.map((e, t) => /* @__PURE__ */ G("span", {
496
- className: "dc:inline-flex dc:items-center dc:gap-1 bg-dc-primary/10 text-dc-primary dc:text-sm dc:px-2 dc:py-1 dc:rounded",
497
- children: [/* @__PURE__ */ W("span", {
498
- className: "dc:max-w-[150px] dc:truncate",
499
- children: String(e)
500
- }), /* @__PURE__ */ W("button", {
501
- onClick: () => me(e),
502
- className: "hover:text-dc-danger",
503
- children: /* @__PURE__ */ W(q, { className: "dc:w-3.5 dc:h-3.5" })
504
- })]
505
- }, t))
506
- }),
507
- /* @__PURE__ */ G("div", {
508
- className: "dc:relative",
509
- children: [/* @__PURE__ */ G("button", {
510
- onClick: () => {
511
- l(!1), v(!1), h(!p);
512
- },
513
- className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
514
- children: [/* @__PURE__ */ W("span", {
515
- className: "text-dc-text-muted dc:truncate",
516
- children: a(ue ? "filter.modal.loading" : "filter.modal.selectValue")
517
- }), /* @__PURE__ */ W(J, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${p ? "dc:rotate-180" : ""}` })]
518
- }), p && /* @__PURE__ */ G("div", {
519
- className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-56 dc:overflow-hidden",
520
- children: [/* @__PURE__ */ W("div", {
521
- className: "dc:p-2 dc:border-b border-dc-border",
522
- children: /* @__PURE__ */ W("input", {
523
- type: "text",
524
- value: w,
525
- onChange: (e) => {
526
- te(e.target.value), k(-1);
527
- },
528
- onKeyDown: he,
529
- placeholder: a("filter.modal.search"),
530
- className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text",
531
- autoFocus: !0
532
- })
533
- }), /* @__PURE__ */ W("div", {
534
- ref: j,
535
- className: "dc:max-h-40 dc:overflow-y-auto",
536
- children: ue ? /* @__PURE__ */ W("div", {
537
- className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
538
- children: a("filter.modal.loading")
539
- }) : B ? /* @__PURE__ */ G("div", {
540
- className: "dc:px-3 dc:py-2 dc:text-sm text-dc-error",
541
- children: [a("filter.modal.errorPrefix"), B]
542
- }) : L.length === 0 ? /* @__PURE__ */ W("div", {
543
- className: "dc:px-3 dc:py-2 dc:text-sm text-dc-text-muted",
544
- children: a("filter.modal.noValues")
545
- }) : L.map((e, t) => {
546
- let n = o.values?.includes(e);
547
- return /* @__PURE__ */ G("button", {
548
- onClick: (t) => pe(e, t),
549
- className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:text-sm dc:transition-colors ${t === O ? "bg-dc-surface-hover" : ""} ${n ? "bg-dc-primary/10 text-dc-primary" : "text-dc-text hover:bg-dc-surface-hover"}`,
550
- children: [String(e), n && /* @__PURE__ */ W("span", {
551
- className: "dc:float-right",
552
- children: "✓"
553
- })]
554
- }, `${e}-${t}`);
555
- })
556
- })]
557
- })]
558
- }),
559
- F?.supportsMultipleValues && /* @__PURE__ */ W("p", {
560
- className: "dc:text-xs text-dc-text-muted",
561
- children: a("filter.modal.multiSelectHint")
562
- })
563
- ]
564
- }) : /* @__PURE__ */ W("input", {
565
- type: "text",
566
- value: o.values?.[0] ?? "",
567
- onChange: ge,
568
- placeholder: a("filter.modal.enterValue"),
569
- className: "dc:w-full dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text placeholder-dc-text-muted"
570
- }) : /* @__PURE__ */ W("div", {
571
- className: "dc:text-sm text-dc-text-muted dc:italic dc:py-2",
572
- children: a("filter.modal.noValueRequired")
573
- });
574
- return /* @__PURE__ */ W(U, { children: /* @__PURE__ */ W("div", {
575
- className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${E ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
600
+ }, [o]), Ae = a(M.find((e) => e.operator === o.operator)?.label || o.operator), je = a(ae.find((e) => e.value === m)?.label || "filter.modal.selectRange"), Me = {
601
+ filter: o,
602
+ operatorMeta: j,
603
+ shouldShowDateRange: N,
604
+ shouldShowComboBox: P
605
+ }, Ne = {
606
+ rangeType: m,
607
+ numberValue: g,
608
+ label: je,
609
+ isOpen: f,
610
+ onToggle: p,
611
+ onRangeTypeChange: be,
612
+ onNumberValueChange: xe,
613
+ onCustomStartDate: Se,
614
+ onCustomEndDate: Ce,
615
+ onOpen: I(() => {
616
+ l(!1), d(!1);
617
+ }, [])
618
+ }, Pe = {
619
+ isOpen: u,
620
+ options: F,
621
+ loading: pe,
622
+ error: me,
623
+ searchText: y,
624
+ highlightedIndex: T,
625
+ listRef: ne,
626
+ onSearchTextChange: b,
627
+ onHighlightedIndexChange: E,
628
+ onSelect: ge,
629
+ onRemove: _e,
630
+ onKeyDown: ve,
631
+ onOpen: I(() => {
632
+ l(!1), p(!1), d((e) => !e);
633
+ }, [])
634
+ }, Fe = R(() => ({
635
+ onBetweenStart: G,
636
+ onBetweenEnd: K,
637
+ onDate: J,
638
+ onDirect: ye
639
+ }), [
640
+ G,
641
+ K,
642
+ J,
643
+ ye
644
+ ]), Ie = le ? Oe : ue ? ke : De;
645
+ return /* @__PURE__ */ H(V, { children: /* @__PURE__ */ H("div", {
646
+ className: `dc:fixed dc:inset-0 bg-dc-overlay dc:z-50 ${S ? "" : "dc:flex dc:items-center dc:justify-center dc:p-4"}`,
576
647
  onClick: r,
577
- children: /* @__PURE__ */ G("div", {
578
- ref: A,
579
- className: E ? "bg-dc-surface rounded-lg border border-dc-border" : "bg-dc-surface rounded-lg border border-dc-border max-w-md w-full",
648
+ children: /* @__PURE__ */ U("div", {
649
+ ref: ee,
650
+ className: S ? "bg-dc-surface rounded-lg border border-dc-border" : "bg-dc-surface rounded-lg border border-dc-border max-w-md w-full",
580
651
  style: {
581
- ...E ? {
652
+ ...S ? {
582
653
  position: "fixed",
583
- ...E,
654
+ ...S,
584
655
  maxWidth: "400px",
585
656
  width: "100%"
586
657
  } : {},
@@ -588,66 +659,71 @@ function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
588
659
  },
589
660
  onClick: (e) => e.stopPropagation(),
590
661
  children: [
591
- /* @__PURE__ */ G("div", {
662
+ /* @__PURE__ */ U("div", {
592
663
  className: "dc:flex dc:items-center dc:justify-between dc:p-4 dc:border-b border-dc-border",
593
- children: [/* @__PURE__ */ W("h2", {
664
+ children: [/* @__PURE__ */ H("h2", {
594
665
  className: "dc:text-lg dc:font-semibold text-dc-text",
595
666
  children: a("filter.modal.title")
596
- }), /* @__PURE__ */ W("button", {
667
+ }), /* @__PURE__ */ H("button", {
597
668
  onClick: r,
598
669
  className: "dc:p-1 text-dc-text-muted hover:text-dc-text dc:transition-colors",
599
- children: /* @__PURE__ */ W(q, { className: "dc:w-5 dc:h-5" })
670
+ children: /* @__PURE__ */ H(Te, { className: "dc:w-5 dc:h-5" })
600
671
  })]
601
672
  }),
602
- /* @__PURE__ */ G("div", {
673
+ /* @__PURE__ */ U("div", {
603
674
  className: "dc:p-4 dc:space-y-4",
604
675
  children: [
605
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("label", {
676
+ /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
606
677
  className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
607
678
  children: a("filter.modal.fieldLabel")
608
- }), /* @__PURE__ */ G("div", {
679
+ }), /* @__PURE__ */ U("div", {
609
680
  className: "dc:flex dc:items-center dc:gap-2 dc:p-3 bg-dc-surface-secondary dc:rounded",
610
- children: [/* @__PURE__ */ W(De, { className: "dc:w-5 dc:h-5 text-dc-filter-text" }), /* @__PURE__ */ W("span", {
681
+ children: [/* @__PURE__ */ H(Ie, { className: "dc:w-5 dc:h-5 text-dc-filter-text" }), /* @__PURE__ */ H("span", {
611
682
  className: "dc:text-sm dc:font-medium text-dc-text",
612
- children: se
683
+ children: fe
613
684
  })]
614
685
  })] }),
615
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("label", {
686
+ /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
616
687
  className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
617
688
  children: a("filter.modal.operatorLabel")
618
- }), /* @__PURE__ */ G("div", {
689
+ }), /* @__PURE__ */ U("div", {
619
690
  className: "dc:relative",
620
- children: [/* @__PURE__ */ G("button", {
691
+ children: [/* @__PURE__ */ U("button", {
621
692
  onClick: () => {
622
- h(!1), v(!1), l(!c);
693
+ d(!1), p(!1), l(!c);
623
694
  },
624
695
  className: "dc:w-full dc:flex dc:items-center dc:justify-between dc:text-left dc:text-sm dc:border border-dc-border dc:rounded dc:px-3 dc:py-2 bg-dc-surface text-dc-text hover:bg-dc-surface-hover",
625
- children: [/* @__PURE__ */ W("span", {
696
+ children: [/* @__PURE__ */ H("span", {
626
697
  className: "dc:truncate",
627
- children: Te
628
- }), /* @__PURE__ */ W(J, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${c ? "dc:rotate-180" : ""}` })]
629
- }), c && /* @__PURE__ */ W("div", {
698
+ children: Ae
699
+ }), /* @__PURE__ */ H(Ee, { className: `dc:w-4 dc:h-4 text-dc-text-muted dc:shrink-0 dc:ml-2 dc:transition-transform ${c ? "dc:rotate-180" : ""}` })]
700
+ }), c && /* @__PURE__ */ H("div", {
630
701
  className: "dc:absolute dc:z-[60] dc:left-0 dc:right-0 dc:mt-1 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:max-h-48 dc:overflow-y-auto",
631
- children: ce.map((e) => /* @__PURE__ */ W("button", {
632
- onClick: () => fe(e.operator),
702
+ children: M.map((e) => /* @__PURE__ */ H("button", {
703
+ onClick: () => he(e.operator),
633
704
  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"}`,
634
705
  children: a(e.label)
635
706
  }, e.operator))
636
707
  })]
637
708
  })] }),
638
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("label", {
709
+ /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("label", {
639
710
  className: "dc:block dc:text-sm dc:font-medium text-dc-text-secondary dc:mb-2",
640
711
  children: a("filter.modal.valueLabel")
641
- }), Oe()] })
712
+ }), /* @__PURE__ */ H(we, {
713
+ field: Me,
714
+ dateRange: Ne,
715
+ combo: Pe,
716
+ inputs: Fe
717
+ })] })
642
718
  ]
643
719
  }),
644
- /* @__PURE__ */ G("div", {
720
+ /* @__PURE__ */ U("div", {
645
721
  className: "dc:flex dc:items-center dc:justify-end dc:gap-2 dc:p-4 dc:border-t border-dc-border",
646
- children: [/* @__PURE__ */ W("button", {
722
+ children: [/* @__PURE__ */ H("button", {
647
723
  onClick: r,
648
724
  className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium text-dc-text-secondary hover:text-dc-text dc:transition-colors",
649
725
  children: a("common.actions.cancel")
650
- }), /* @__PURE__ */ W("button", {
726
+ }), /* @__PURE__ */ H("button", {
651
727
  onClick: () => n(o),
652
728
  className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium text-dc-primary-content bg-dc-primary hover:bg-dc-primary-hover dc:rounded dc:transition-colors",
653
729
  children: a("common.actions.save")
@@ -659,47 +735,47 @@ function xe({ filter: e, schema: t, onSave: n, onCancel: r, anchorElement: i })
659
735
  }
660
736
  //#endregion
661
737
  //#region src/client/components/AnalysisBuilder/AnalysisFilterItem.tsx
662
- var Se = s("close"), Ce = s("dimension"), we = s("timeDimension"), Te = s("measure");
663
- function Ee({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
664
- let { t: i } = T(), [a, o] = H(!1), s = V(null), c = ne(e.member, t), l = (c?.field.type || "string") === "time", d = c?.fieldType === "measure", f = re(e.member, t), p = u[e.operator], m = p?.label ? i(p.label) : e.operator, h = De(e, p, i), g = l ? we : d ? Te : Ce;
665
- return /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ G("div", {
738
+ var je = l("close"), Me = l("dimension"), Ne = l("timeDimension"), Pe = l("measure");
739
+ function Fe({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
740
+ let { t: i } = D(), [a, o] = B(!1), s = z(null), c = x(e.member, t), l = (c?.field.type || "string") === "time", u = c?.fieldType === "measure", d = C(e.member, t), f = O[e.operator], p = f?.label ? i(f.label) : e.operator, m = Ie(e, f, i), h = l ? Ne : u ? Pe : Me;
741
+ return /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ U("div", {
666
742
  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",
667
743
  children: [
668
- /* @__PURE__ */ W("span", {
669
- className: `dc:w-6 dc:h-6 dc:flex dc:items-center dc:justify-center dc:rounded ${l ? "bg-dc-time-dimension" : d ? "bg-dc-measure" : "bg-dc-dimension"} ${l ? "text-dc-time-dimension-text" : d ? "text-dc-measure-text" : "text-dc-dimension-text"} dc:flex-shrink-0 dc:mt-0.5`,
670
- children: g && /* @__PURE__ */ W(g, { className: "dc:w-4 dc:h-4" })
744
+ /* @__PURE__ */ H("span", {
745
+ className: `dc:w-6 dc:h-6 dc:flex dc:items-center dc:justify-center dc:rounded ${l ? "bg-dc-time-dimension" : u ? "bg-dc-measure" : "bg-dc-dimension"} ${l ? "text-dc-time-dimension-text" : u ? "text-dc-measure-text" : "text-dc-dimension-text"} dc:flex-shrink-0 dc:mt-0.5`,
746
+ children: h && /* @__PURE__ */ H(h, { className: "dc:w-4 dc:h-4" })
671
747
  }),
672
- /* @__PURE__ */ W("button", {
748
+ /* @__PURE__ */ H("button", {
673
749
  ref: s,
674
750
  onClick: () => o(!0),
675
751
  className: "dc:flex-1 dc:min-w-0 dc:text-left",
676
- title: `${f} ${m} ${h}`,
677
- children: /* @__PURE__ */ G("div", {
752
+ title: `${d} ${p} ${m}`,
753
+ children: /* @__PURE__ */ U("div", {
678
754
  className: "dc:text-sm text-dc-text dc:break-words",
679
755
  children: [
680
- /* @__PURE__ */ W("span", {
756
+ /* @__PURE__ */ H("span", {
681
757
  className: "dc:font-medium",
682
- children: f
758
+ children: d
683
759
  }),
684
- /* @__PURE__ */ W("span", {
760
+ /* @__PURE__ */ H("span", {
685
761
  className: "text-dc-text-muted dc:mx-1",
686
- children: m
762
+ children: p
687
763
  }),
688
- /* @__PURE__ */ W("span", {
764
+ /* @__PURE__ */ H("span", {
689
765
  className: "text-dc-primary",
690
- children: h
766
+ children: m
691
767
  })
692
768
  ]
693
769
  })
694
770
  }),
695
- /* @__PURE__ */ W("button", {
771
+ /* @__PURE__ */ H("button", {
696
772
  onClick: n,
697
773
  className: "dc:p-1 text-dc-text-muted hover:text-dc-danger dc:opacity-100 dc:sm:opacity-0 dc:sm:group-hover:opacity-100 dc:transition-opacity dc:flex-shrink-0 dc:mt-0.5",
698
774
  title: i("filter.removeButton.title"),
699
- children: Se && /* @__PURE__ */ W(Se, { className: "dc:w-4 dc:h-4" })
775
+ children: je && /* @__PURE__ */ H(je, { className: "dc:w-4 dc:h-4" })
700
776
  })
701
777
  ]
702
- }), a && /* @__PURE__ */ W(xe, {
778
+ }), a && /* @__PURE__ */ H(Ae, {
703
779
  filter: e,
704
780
  schema: t,
705
781
  onSave: (e) => {
@@ -709,7 +785,7 @@ function Ee({ filter: e, schema: t, onRemove: n, onUpdate: r }) {
709
785
  anchorElement: s.current
710
786
  })] });
711
787
  }
712
- function De(e, t, n) {
788
+ function Ie(e, t, n) {
713
789
  if (!t?.requiresValues) return "";
714
790
  if (e.dateRange) return Array.isArray(e.dateRange) ? `${e.dateRange[0]} to ${e.dateRange[1]}` : e.dateRange;
715
791
  let r = e.values || [];
@@ -717,34 +793,34 @@ function De(e, t, n) {
717
793
  }
718
794
  //#endregion
719
795
  //#region src/client/components/AnalysisBuilder/AnalysisFilterGroup.tsx
720
- var Oe = s("add"), ke = s("close");
721
- function Ae(e) {
796
+ var Le = l("add"), Re = l("close");
797
+ function ze(e) {
722
798
  return "member" in e && typeof e.member == "string";
723
799
  }
724
- function je(e) {
800
+ function Be(e) {
725
801
  return "type" in e && (e.type === "and" || e.type === "or");
726
802
  }
727
- function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, depth: a = 0, hideRemoveButton: o = !1 }) {
728
- let { t: s } = T(), [c, l] = H(!1), u = V(null);
729
- z(() => {
803
+ function Ve({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, depth: a = 0, hideRemoveButton: o = !1 }) {
804
+ let { t: s } = D(), [c, l] = B(!1), u = z(null);
805
+ L(() => {
730
806
  let e = (e) => {
731
807
  u.current && !u.current.contains(e.target) && l(!1);
732
808
  };
733
809
  return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
734
810
  }, []);
735
- let d = R(() => {
811
+ let d = I(() => {
736
812
  let t = e.type === "and" ? "or" : "and";
737
813
  n({
738
814
  ...e,
739
815
  type: t
740
816
  });
741
- }, [e, n]), f = R((t, r) => {
817
+ }, [e, n]), f = I((t, r) => {
742
818
  let i = [...e.filters];
743
819
  i[t] = r, n({
744
820
  ...e,
745
821
  filters: i
746
822
  });
747
- }, [e, n]), p = R((t) => {
823
+ }, [e, n]), p = I((t) => {
748
824
  let i = e.filters.filter((e, n) => n !== t);
749
825
  i.length === 0 ? r() : n({
750
826
  ...e,
@@ -755,7 +831,7 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
755
831
  n,
756
832
  r,
757
833
  a
758
- ]), m = R((t) => {
834
+ ]), m = I((t) => {
759
835
  let r = {
760
836
  type: t,
761
837
  filters: []
@@ -764,23 +840,23 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
764
840
  ...e,
765
841
  filters: [...e.filters, r]
766
842
  }), l(!1);
767
- }, [e, n]), h = R(() => {
843
+ }, [e, n]), h = I(() => {
768
844
  i([]), l(!1);
769
- }, [i]), g = R((e) => (t = []) => {
845
+ }, [i]), g = I((e) => (t = []) => {
770
846
  i([e, ...t]);
771
847
  }, [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");
772
- return /* @__PURE__ */ G("div", {
848
+ return /* @__PURE__ */ U("div", {
773
849
  className: `dc:border ${_()} dc:rounded-lg bg-dc-surface dc:w-full`,
774
- children: [/* @__PURE__ */ G("div", {
850
+ children: [/* @__PURE__ */ U("div", {
775
851
  className: `dc:flex dc:items-center dc:justify-between dc:px-2 dc:py-1.5 dc:border-b border-dc-border/50 dc:rounded-t-lg ${v()}`,
776
- children: [/* @__PURE__ */ G("div", {
852
+ children: [/* @__PURE__ */ U("div", {
777
853
  className: "dc:flex dc:items-center dc:gap-2",
778
- children: [/* @__PURE__ */ W("button", {
854
+ children: [/* @__PURE__ */ H("button", {
779
855
  onClick: d,
780
856
  className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-semibold dc:rounded dc:transition-colors ${e.type === "and" ? "bg-dc-info-bg text-dc-info dc:hover:opacity-80" : "bg-dc-warning-bg text-dc-warning dc:hover:opacity-80"}`,
781
857
  title: `Click to switch to ${e.type === "and" ? "OR" : "AND"}`,
782
858
  children: e.type.toUpperCase()
783
- }), /* @__PURE__ */ G("span", {
859
+ }), /* @__PURE__ */ U("span", {
784
860
  className: "dc:text-xs text-dc-text-muted",
785
861
  children: [
786
862
  y,
@@ -788,61 +864,61 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
788
864
  b
789
865
  ]
790
866
  })]
791
- }), /* @__PURE__ */ G("div", {
867
+ }), /* @__PURE__ */ U("div", {
792
868
  className: "dc:flex dc:items-center dc:gap-1",
793
- children: [/* @__PURE__ */ G("div", {
869
+ children: [/* @__PURE__ */ U("div", {
794
870
  className: "dc:relative",
795
871
  ref: u,
796
- children: [/* @__PURE__ */ W("button", {
872
+ children: [/* @__PURE__ */ H("button", {
797
873
  onClick: () => l(!c),
798
874
  className: "dc:p-1 text-dc-text-secondary hover:text-dc-primary hover:bg-dc-surface-hover dc:rounded dc:transition-colors",
799
875
  title: "Add condition",
800
- children: /* @__PURE__ */ W(Oe, { className: "dc:w-4 dc:h-4" })
801
- }), c && /* @__PURE__ */ G("div", {
876
+ children: /* @__PURE__ */ H(Le, { className: "dc:w-4 dc:h-4" })
877
+ }), c && /* @__PURE__ */ U("div", {
802
878
  className: "dc:absolute dc:right-0 dc:mt-1 dc:z-40 bg-dc-surface dc:border border-dc-border dc:rounded dc:shadow-lg dc:py-1 dc:min-w-[120px]",
803
879
  children: [
804
- /* @__PURE__ */ W("button", {
880
+ /* @__PURE__ */ H("button", {
805
881
  onClick: h,
806
882
  className: "dc:w-full dc:text-left dc:px-3 dc:py-1.5 dc:text-xs text-dc-text hover:bg-dc-surface-hover",
807
883
  children: s("filter.group.addFilter")
808
884
  }),
809
- /* @__PURE__ */ W("button", {
885
+ /* @__PURE__ */ H("button", {
810
886
  onClick: () => m("and"),
811
887
  className: "dc:w-full dc:text-left dc:px-3 dc:py-1.5 dc:text-xs text-dc-text hover:bg-dc-surface-hover",
812
888
  children: s("filter.group.addAndGroup")
813
889
  }),
814
- /* @__PURE__ */ W("button", {
890
+ /* @__PURE__ */ H("button", {
815
891
  onClick: () => m("or"),
816
892
  className: "dc:w-full dc:text-left dc:px-3 dc:py-1.5 dc:text-xs text-dc-text hover:bg-dc-surface-hover",
817
893
  children: s("filter.group.addOrGroup")
818
894
  })
819
895
  ]
820
896
  })]
821
- }), !o && /* @__PURE__ */ W("button", {
897
+ }), !o && /* @__PURE__ */ H("button", {
822
898
  onClick: r,
823
899
  className: "dc:p-1 text-dc-text-muted hover:text-dc-danger dc:transition-colors",
824
900
  title: s("filter.group.removeGroup"),
825
- children: /* @__PURE__ */ W(ke, { className: "dc:w-4 dc:h-4" })
901
+ children: /* @__PURE__ */ H(Re, { className: "dc:w-4 dc:h-4" })
826
902
  })]
827
903
  })]
828
- }), /* @__PURE__ */ W("div", {
904
+ }), /* @__PURE__ */ H("div", {
829
905
  className: "dc:p-1.5 dc:flex dc:flex-wrap dc:gap-2",
830
- children: e.filters.length === 0 ? /* @__PURE__ */ G("div", {
906
+ children: e.filters.length === 0 ? /* @__PURE__ */ U("div", {
831
907
  className: "dc:text-center dc:py-3",
832
- children: [/* @__PURE__ */ W("p", {
908
+ children: [/* @__PURE__ */ H("p", {
833
909
  className: "dc:text-xs text-dc-text-muted dc:mb-1",
834
910
  children: s("filter.group.empty")
835
- }), /* @__PURE__ */ W("button", {
911
+ }), /* @__PURE__ */ H("button", {
836
912
  onClick: () => i([]),
837
913
  className: "dc:text-xs text-dc-primary dc:hover:underline",
838
914
  children: s("filter.group.addFilterLink")
839
915
  })]
840
- }) : e.filters.map((e, n) => Ae(e) ? /* @__PURE__ */ W(Ee, {
916
+ }) : e.filters.map((e, n) => ze(e) ? /* @__PURE__ */ H(Fe, {
841
917
  filter: e,
842
918
  schema: t,
843
919
  onUpdate: (e) => f(n, e),
844
920
  onRemove: () => p(n)
845
- }, `filter-${n}`) : je(e) ? /* @__PURE__ */ W(Me, {
921
+ }, `filter-${n}`) : Be(e) ? /* @__PURE__ */ H(Ve, {
846
922
  group: e,
847
923
  schema: t,
848
924
  onUpdate: (e) => f(n, e),
@@ -855,28 +931,28 @@ function Me({ group: e, schema: t, onUpdate: n, onRemove: r, onAddFilter: i, dep
855
931
  }
856
932
  //#endregion
857
933
  //#region src/client/components/AnalysisBuilder/AnalysisFilterSection.tsx
858
- var Ne = s("add");
859
- function Pe(e) {
934
+ var He = l("add");
935
+ function Ue(e) {
860
936
  return "member" in e && typeof e.member == "string";
861
937
  }
862
- function Fe(e) {
938
+ function We(e) {
863
939
  return "type" in e && (e.type === "and" || e.type === "or");
864
940
  }
865
- function Ie(e) {
941
+ function Ge(e) {
866
942
  let t = 0;
867
- for (let n of e) Pe(n) ? t++ : Fe(n) && (t += Ie(n.filters));
943
+ for (let n of e) Ue(n) ? t++ : We(n) && (t += Ge(n.filters));
868
944
  return t;
869
945
  }
870
- function Le(e) {
946
+ function Ke(e) {
871
947
  let t = [];
872
- for (let n of e) Pe(n) ? t.push(n.member) : Fe(n) && t.push(...Le(n.filters));
948
+ for (let n of e) Ue(n) ? t.push(n.member) : We(n) && t.push(...Ke(n.filters));
873
949
  return t;
874
950
  }
875
- function Re(e, t, n) {
876
- if (t.length === 0) return e.length === 0 ? [n] : e.length === 1 && Pe(e[0]) ? [{
951
+ function qe(e, t, n) {
952
+ if (t.length === 0) return e.length === 0 ? [n] : e.length === 1 && Ue(e[0]) ? [{
877
953
  type: "and",
878
954
  filters: [e[0], n]
879
- }] : e.length === 1 && Fe(e[0]) ? [{
955
+ }] : e.length === 1 && We(e[0]) ? [{
880
956
  ...e[0],
881
957
  filters: [...e[0].filters, n]
882
958
  }] : [{
@@ -884,38 +960,38 @@ function Re(e, t, n) {
884
960
  filters: [...e, n]
885
961
  }];
886
962
  let [r, ...i] = t, a = [...e], o = a[r];
887
- return Fe(o) && (i.length === 0 ? a[r] = {
963
+ return We(o) && (i.length === 0 ? a[r] = {
888
964
  ...o,
889
965
  filters: [...o.filters, n]
890
966
  } : a[r] = {
891
967
  ...o,
892
- filters: Re(o.filters, i, n)
968
+ filters: qe(o.filters, i, n)
893
969
  }), a;
894
970
  }
895
- function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dimensionsOnly: i = !1 }) {
896
- let { t: a } = T(), [o, s] = H(!1), [c, l] = H(!1), u = V([]), d = Ie(e), f = R((e) => {
971
+ function Je({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dimensionsOnly: i = !1 }) {
972
+ let { t: a } = D(), [o, s] = B(!1), [c, l] = B(!1), u = z([]), d = Ge(e), f = I((e) => {
897
973
  e.preventDefault(), e.stopPropagation(), l(!0);
898
- }, []), p = R((e) => {
974
+ }, []), m = I((e) => {
899
975
  e.preventDefault(), e.stopPropagation(), l(!1);
900
- }, []), h = R((e) => {
976
+ }, []), h = I((e) => {
901
977
  e.preventDefault(), e.stopPropagation(), l(!1);
902
978
  try {
903
979
  let t = JSON.parse(e.dataTransfer.getData("text/plain"));
904
980
  t.field && r && r(t.field);
905
981
  } catch {}
906
- }, [r]), g = Le(e), _ = R((t, r, i) => {
982
+ }, [r]), g = Ke(e), _ = I((t, r, i) => {
907
983
  let a = t.type === "time", o = a ? "inDateRange" : "equals", c = {
908
984
  member: t.name,
909
985
  operator: o,
910
986
  values: []
911
987
  };
912
- a && o === "inDateRange" && (c.dateRange = m("this_month")), n(Re(e, u.current, c)), s(!1), u.current = [];
913
- }, [e, n]), v = R((t, r) => {
988
+ a && o === "inDateRange" && (c.dateRange = A("this_month")), n(qe(e, u.current, c)), s(!1), u.current = [];
989
+ }, [e, n]), v = I((t, r) => {
914
990
  let i = [...e];
915
991
  i[t] = r, n(i);
916
- }, [e, n]), y = R((t) => {
992
+ }, [e, n]), y = I((t) => {
917
993
  let r = e.filter((e, n) => n !== t);
918
- if (r.length === 1 && Fe(r[0])) {
994
+ if (r.length === 1 && We(r[0])) {
919
995
  let e = r[0];
920
996
  if (e.filters.length === 1) {
921
997
  n([e.filters[0]]);
@@ -923,20 +999,20 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
923
999
  }
924
1000
  }
925
1001
  n(r);
926
- }, [e, n]), b = R(() => {
1002
+ }, [e, n]), b = I(() => {
927
1003
  n([]);
928
- }, [n]), x = R(() => {
1004
+ }, [n]), x = I(() => {
929
1005
  u.current = [], s(!0);
930
- }, []), S = R((e) => (t = []) => {
1006
+ }, []), S = I((e) => (t = []) => {
931
1007
  u.current = [...e, ...t], s(!0);
932
1008
  }, []), C = (n, r, i = []) => {
933
1009
  let a = [...i, r];
934
- return Pe(n) ? /* @__PURE__ */ W(Ee, {
1010
+ return Ue(n) ? /* @__PURE__ */ H(Fe, {
935
1011
  filter: n,
936
1012
  schema: t,
937
1013
  onUpdate: (e) => v(r, e),
938
1014
  onRemove: () => y(r)
939
- }, `filter-${a.join("-")}`) : Fe(n) ? /* @__PURE__ */ W(Me, {
1015
+ }, `filter-${a.join("-")}`) : We(n) ? /* @__PURE__ */ H(Ve, {
940
1016
  group: n,
941
1017
  schema: t,
942
1018
  onUpdate: (e) => v(r, e),
@@ -945,21 +1021,21 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
945
1021
  hideRemoveButton: e.length === 1
946
1022
  }, `group-${a.join("-")}`) : null;
947
1023
  };
948
- return /* @__PURE__ */ G("div", { children: [
949
- /* @__PURE__ */ G("button", {
1024
+ return /* @__PURE__ */ U("div", { children: [
1025
+ /* @__PURE__ */ U("button", {
950
1026
  onClick: x,
951
1027
  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",
952
1028
  title: "Add filter",
953
- children: [/* @__PURE__ */ G(ce, { children: [a("analysis.sections.filters"), d > 0 && /* @__PURE__ */ G("span", {
1029
+ children: [/* @__PURE__ */ U(M, { children: [a("analysis.sections.filters"), d > 0 && /* @__PURE__ */ U("span", {
954
1030
  className: "dc:ml-1.5 dc:text-xs dc:font-normal text-dc-text-muted dc:normal-case dc:tracking-normal",
955
1031
  children: [
956
1032
  "(",
957
1033
  d,
958
1034
  ")"
959
1035
  ]
960
- })] }), /* @__PURE__ */ G("div", {
1036
+ })] }), /* @__PURE__ */ U("div", {
961
1037
  className: "dc:flex dc:items-center dc:gap-2",
962
- children: [d > 0 && /* @__PURE__ */ W("span", {
1038
+ children: [d > 0 && /* @__PURE__ */ H("span", {
963
1039
  role: "button",
964
1040
  tabIndex: 0,
965
1041
  onClick: (e) => {
@@ -970,23 +1046,23 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
970
1046
  },
971
1047
  className: "dc:text-xs text-dc-text-muted hover:text-dc-error dc:underline dc:cursor-pointer",
972
1048
  children: a("filter.section.clearAll")
973
- }), /* @__PURE__ */ W(Ne, { className: "dc:w-5 dc:h-5 text-dc-text-secondary group-hover:text-dc-primary dc:transition-colors" })]
1049
+ }), /* @__PURE__ */ H(He, { className: "dc:w-5 dc:h-5 text-dc-text-secondary group-hover:text-dc-primary dc:transition-colors" })]
974
1050
  })]
975
1051
  }),
976
- /* @__PURE__ */ W("div", {
1052
+ /* @__PURE__ */ H("div", {
977
1053
  onDragOver: r ? f : void 0,
978
- onDragLeave: r ? p : void 0,
1054
+ onDragLeave: r ? m : void 0,
979
1055
  onDrop: r ? h : void 0,
980
1056
  className: `dc:p-2 dc:-mx-2 dc:rounded-lg dc:border-2 dc:border-dashed dc:transition-all ${c ? "border-dc-primary bg-dc-primary/5" : "border-transparent"}`,
981
- children: e.length === 0 ? /* @__PURE__ */ W("p", {
1057
+ children: e.length === 0 ? /* @__PURE__ */ H("p", {
982
1058
  className: `dc:text-sm ${c ? "text-dc-primary dc:font-medium" : "text-dc-text-muted"}`,
983
1059
  children: a(c ? "filter.section.dropHint" : "filter.section.empty")
984
- }) : /* @__PURE__ */ W("div", {
1060
+ }) : /* @__PURE__ */ H("div", {
985
1061
  className: "dc:flex dc:flex-wrap dc:gap-2",
986
1062
  children: e.map((e, t) => C(e, t))
987
1063
  })
988
1064
  }),
989
- /* @__PURE__ */ W(j, {
1065
+ /* @__PURE__ */ H(p, {
990
1066
  isOpen: o,
991
1067
  onClose: () => {
992
1068
  s(!1), u.current = [];
@@ -999,138 +1075,34 @@ function ze({ filters: e, schema: t, onFiltersChange: n, onFieldDropped: r, dime
999
1075
  ] });
1000
1076
  }
1001
1077
  //#endregion
1002
- //#region src/client/shared/chartDefaults.ts
1003
- function Be(e) {
1004
- return e.isTimeDimension;
1005
- }
1006
- function Ve(e) {
1007
- return e.find(Be);
1008
- }
1009
- function He(e) {
1010
- return e.find((e) => !e.isTimeDimension);
1011
- }
1012
- function Ue(e) {
1013
- return e.filter((e) => !e.isTimeDimension);
1014
- }
1015
- function We(e) {
1016
- return e.filter(Be);
1017
- }
1018
- function Ge(e, t) {
1019
- return {
1020
- measureCount: e.length,
1021
- dimensionCount: t.length,
1022
- timeDimensionCount: We(t).length
1023
- };
1024
- }
1025
- function Ke(e, t, n) {
1026
- let r = l[e];
1027
- return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(Ge(t, n));
1028
- }
1029
- function qe(e, t) {
1030
- let n = Object.keys(l), r = {};
1031
- for (let i of n) r[i] = Ke(i, e, t);
1032
- return r;
1033
- }
1034
- function Je(e, t, n) {
1035
- if (Ke(n, e, t).available || e.length === 0 && t.length === 0) return n;
1036
- let r = We(t).length > 0, i = Ue(t).length > 0, a = e.length > 0;
1037
- return r && a ? "line" : i && a ? "bar" : a && !i && !r ? "kpiNumber" : "table";
1038
- }
1039
- function Ye(e, t, n) {
1040
- let r = Je(e, t, n);
1041
- return {
1042
- chartType: r,
1043
- chartConfig: Xe(r, e, t)
1044
- };
1045
- }
1046
- function Xe(e, t, n) {
1047
- let r = Ve(n), i = He(n), a = Ue(n), o = n;
1048
- switch (e) {
1049
- case "line":
1050
- case "area": return {
1051
- xAxis: r ? [r.field] : i ? [i.field] : [],
1052
- yAxis: t.map((e) => e.field),
1053
- series: a.length > 1 ? [a[1].field] : i && r ? [i.field] : []
1054
- };
1055
- case "bar": return {
1056
- xAxis: i ? [i.field] : r ? [r.field] : [],
1057
- yAxis: t.map((e) => e.field),
1058
- series: a.length > 1 ? [a[1].field] : r && i ? [r.field] : []
1059
- };
1060
- case "pie": return {
1061
- xAxis: i ? [i.field] : [],
1062
- yAxis: t.length > 0 ? [t[0].field] : []
1063
- };
1064
- case "scatter": return t.length >= 2 ? {
1065
- xAxis: [t[0].field],
1066
- yAxis: [t[1].field],
1067
- series: i ? [i.field] : []
1068
- } : {
1069
- xAxis: o.length > 0 ? [o[0].field] : [],
1070
- yAxis: t.length > 0 ? [t[0].field] : [],
1071
- series: a.length > 1 ? [a[1].field] : []
1072
- };
1073
- case "bubble": return {
1074
- xAxis: t.length > 0 ? [t[0].field] : [],
1075
- yAxis: t.length > 1 ? [t[1].field] : [],
1076
- sizeField: t.length > 2 ? t[2].field : t.length > 1 ? t[1].field : void 0,
1077
- series: i ? [i.field] : r ? [r.field] : []
1078
- };
1079
- case "radar":
1080
- case "radialBar":
1081
- case "treemap": return {
1082
- xAxis: i ? [i.field] : [],
1083
- yAxis: t.length > 0 ? [t[0].field] : []
1084
- };
1085
- case "activityGrid": return {
1086
- dateField: r ? [r.field] : [],
1087
- valueField: t.length > 0 ? [t[0].field] : []
1088
- };
1089
- case "kpiNumber":
1090
- case "kpiDelta":
1091
- case "kpiText": return { yAxis: t.length > 0 ? [t[0].field] : [] };
1092
- case "table": return { xAxis: [...n.map((e) => e.field), ...t.map((e) => e.field)] };
1093
- case "markdown": return {};
1094
- default: return {
1095
- xAxis: o.length > 0 ? [o[0].field] : [],
1096
- yAxis: t.map((e) => e.field)
1097
- };
1098
- }
1099
- }
1100
- function Ze(e, t, n, r) {
1101
- if (r && Ke(n, e, t).available) return null;
1102
- let i = Je(e, t, n);
1103
- return i === n ? null : i;
1104
- }
1105
- //#endregion
1106
1078
  //#region src/client/components/AnalysisBuilder/ExplainAIPanel.tsx
1107
- function Qe(e) {
1079
+ function Y(e) {
1108
1080
  return typeof e == "string" ? e : typeof e == "object" && e ? JSON.stringify(e) : String(e ?? "");
1109
1081
  }
1110
- var $e = {
1082
+ var Ye = {
1111
1083
  good: "bg-dc-success-bg text-dc-success border-dc-success",
1112
1084
  warning: "bg-dc-warning-bg text-dc-warning border-dc-warning",
1113
1085
  critical: "bg-dc-danger-bg text-dc-error border-dc-error"
1114
- }, et = {
1086
+ }, Xe = {
1115
1087
  critical: "bg-dc-danger-bg text-dc-error",
1116
1088
  warning: "bg-dc-warning-bg text-dc-warning",
1117
1089
  suggestion: "bg-dc-accent-bg text-dc-accent"
1118
- }, tt = {
1090
+ }, Ze = {
1119
1091
  high: "text-dc-error",
1120
1092
  medium: "text-dc-warning",
1121
1093
  low: "text-dc-text-muted"
1122
1094
  };
1123
- function nt({ assessment: e, reason: t }) {
1124
- let { t: n } = T(), r = {
1095
+ function Qe({ assessment: e, reason: t }) {
1096
+ let { t: n } = D(), r = {
1125
1097
  good: n("explainAI.assessment.good"),
1126
1098
  warning: n("explainAI.assessment.warning"),
1127
1099
  critical: n("explainAI.assessment.critical")
1128
1100
  };
1129
- return /* @__PURE__ */ G("div", {
1130
- className: `dc:p-4 dc:rounded-lg dc:border ${$e[e]}`,
1131
- children: [/* @__PURE__ */ W("div", {
1101
+ return /* @__PURE__ */ U("div", {
1102
+ className: `dc:p-4 dc:rounded-lg dc:border ${Ye[e]}`,
1103
+ children: [/* @__PURE__ */ H("div", {
1132
1104
  className: "dc:flex dc:items-center dc:gap-2 dc:mb-1",
1133
- children: /* @__PURE__ */ G("span", {
1105
+ children: /* @__PURE__ */ U("span", {
1134
1106
  className: "dc:font-semibold dc:uppercase dc:text-base",
1135
1107
  children: [
1136
1108
  e === "good" && "✓ ",
@@ -1139,33 +1111,33 @@ function nt({ assessment: e, reason: t }) {
1139
1111
  r[e]
1140
1112
  ]
1141
1113
  })
1142
- }), /* @__PURE__ */ W("p", {
1114
+ }), /* @__PURE__ */ H("p", {
1143
1115
  className: "dc:text-sm",
1144
- children: Qe(t)
1116
+ children: Y(t)
1145
1117
  })]
1146
1118
  });
1147
1119
  }
1148
- function rt({ issue: e }) {
1149
- return /* @__PURE__ */ G("div", {
1120
+ function $e({ issue: e }) {
1121
+ return /* @__PURE__ */ U("div", {
1150
1122
  className: "dc:flex dc:items-start dc:gap-2 dc:py-2",
1151
- children: [/* @__PURE__ */ G("span", {
1152
- className: `dc:text-sm ${tt[e.severity]}`,
1123
+ children: [/* @__PURE__ */ U("span", {
1124
+ className: `dc:text-sm ${Ze[e.severity]}`,
1153
1125
  children: [
1154
1126
  e.severity === "high" && "●",
1155
1127
  e.severity === "medium" && "○",
1156
1128
  e.severity === "low" && "○"
1157
1129
  ]
1158
- }), /* @__PURE__ */ W("span", {
1130
+ }), /* @__PURE__ */ H("span", {
1159
1131
  className: "dc:text-sm text-dc-text-secondary",
1160
- children: Qe(e.description)
1132
+ children: Y(e.description)
1161
1133
  })]
1162
1134
  });
1163
1135
  }
1164
- function it({ text: e }) {
1165
- let { t } = T(), [n, r] = I.useState(!1), i = I.useRef(null);
1166
- return I.useEffect(() => () => {
1136
+ function et({ text: e }) {
1137
+ let { t } = D(), [n, r] = N.useState(!1), i = N.useRef(null);
1138
+ return N.useEffect(() => () => {
1167
1139
  i.current && clearTimeout(i.current);
1168
- }, []), /* @__PURE__ */ W("button", {
1140
+ }, []), /* @__PURE__ */ H("button", {
1169
1141
  onClick: async () => {
1170
1142
  try {
1171
1143
  await navigator.clipboard.writeText(e), r(!0), i.current && clearTimeout(i.current), i.current = setTimeout(() => r(!1), 2e3);
@@ -1178,104 +1150,104 @@ function it({ text: e }) {
1178
1150
  children: t(n ? "explainAI.copied" : "explainAI.copy")
1179
1151
  });
1180
1152
  }
1181
- function at({ rec: e }) {
1182
- let { t } = T(), n = {
1153
+ function tt({ rec: e }) {
1154
+ let { t } = D(), n = {
1183
1155
  index: t("explainAI.type.index"),
1184
1156
  table: t("explainAI.type.table"),
1185
1157
  cube: t("explainAI.type.cube"),
1186
1158
  general: t("explainAI.type.general")
1187
1159
  };
1188
- return /* @__PURE__ */ G("div", {
1160
+ return /* @__PURE__ */ U("div", {
1189
1161
  className: "dc:p-4 dc:border border-dc-border dc:rounded-lg bg-dc-surface",
1190
1162
  children: [
1191
- /* @__PURE__ */ G("div", {
1163
+ /* @__PURE__ */ U("div", {
1192
1164
  className: "dc:flex dc:items-center dc:gap-2 dc:mb-2",
1193
- children: [/* @__PURE__ */ W("span", {
1194
- className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded ${et[e.severity]}`,
1165
+ children: [/* @__PURE__ */ H("span", {
1166
+ className: `dc:px-2 dc:py-0.5 dc:text-xs dc:font-medium dc:rounded ${Xe[e.severity]}`,
1195
1167
  children: n[e.type]
1196
- }), /* @__PURE__ */ W("h5", {
1168
+ }), /* @__PURE__ */ H("h5", {
1197
1169
  className: "dc:font-medium text-dc-text",
1198
- children: Qe(e.title)
1170
+ children: Y(e.title)
1199
1171
  })]
1200
1172
  }),
1201
- /* @__PURE__ */ W("p", {
1173
+ /* @__PURE__ */ H("p", {
1202
1174
  className: "dc:text-sm text-dc-text-secondary dc:mb-3",
1203
- children: Qe(e.description)
1175
+ children: Y(e.description)
1204
1176
  }),
1205
- e.sql && /* @__PURE__ */ W("div", {
1177
+ e.sql && /* @__PURE__ */ H("div", {
1206
1178
  className: "dc:mt-2",
1207
- children: /* @__PURE__ */ W(M, {
1179
+ children: /* @__PURE__ */ H(u, {
1208
1180
  code: e.sql,
1209
1181
  language: "sql",
1210
- headerRight: /* @__PURE__ */ W(it, { text: e.sql })
1182
+ headerRight: /* @__PURE__ */ H(et, { text: e.sql })
1211
1183
  })
1212
1184
  }),
1213
- e.cubeCode && /* @__PURE__ */ G("div", {
1185
+ e.cubeCode && /* @__PURE__ */ U("div", {
1214
1186
  className: "dc:mt-2",
1215
- children: [e.cubeName && /* @__PURE__ */ W("p", {
1187
+ children: [e.cubeName && /* @__PURE__ */ H("p", {
1216
1188
  className: "dc:text-xs text-dc-text-muted dc:mb-1",
1217
1189
  children: t("explainAI.addToCube", { cubeName: e.cubeName })
1218
- }), /* @__PURE__ */ G("div", {
1190
+ }), /* @__PURE__ */ U("div", {
1219
1191
  className: "dc:relative",
1220
- children: [/* @__PURE__ */ W("pre", {
1192
+ children: [/* @__PURE__ */ H("pre", {
1221
1193
  className: "dc:p-3 dc:text-xs bg-dc-surface-secondary dc:rounded dc:overflow-x-auto dc:font-mono text-dc-text",
1222
1194
  children: e.cubeCode
1223
- }), /* @__PURE__ */ W("div", {
1195
+ }), /* @__PURE__ */ H("div", {
1224
1196
  className: "dc:absolute dc:top-1 dc:right-1",
1225
- children: /* @__PURE__ */ W(it, { text: e.cubeCode })
1197
+ children: /* @__PURE__ */ H(et, { text: e.cubeCode })
1226
1198
  })]
1227
1199
  })]
1228
1200
  }),
1229
- e.estimatedImpact && /* @__PURE__ */ G("p", {
1201
+ e.estimatedImpact && /* @__PURE__ */ U("p", {
1230
1202
  className: "dc:text-xs text-dc-text-muted dc:mt-2",
1231
1203
  children: [
1232
- /* @__PURE__ */ W("strong", { children: t("explainAI.expectedImpact") }),
1204
+ /* @__PURE__ */ H("strong", { children: t("explainAI.expectedImpact") }),
1233
1205
  " ",
1234
- Qe(e.estimatedImpact)
1206
+ Y(e.estimatedImpact)
1235
1207
  ]
1236
1208
  })
1237
1209
  ]
1238
1210
  });
1239
1211
  }
1240
- function ot({ analysis: e, onClose: t, onClear: n }) {
1241
- let { t: r } = T(), i = t || n;
1242
- return I.useEffect(() => {
1212
+ function nt({ analysis: e, onClose: t, onClear: n }) {
1213
+ let { t: r } = D(), i = t || n;
1214
+ return N.useEffect(() => {
1243
1215
  let e = (e) => {
1244
1216
  e.key === "Escape" && i && i();
1245
1217
  };
1246
1218
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
1247
- }, [i]), I.useEffect(() => (document.body.style.overflow = "hidden", () => {
1219
+ }, [i]), N.useEffect(() => (document.body.style.overflow = "hidden", () => {
1248
1220
  document.body.style.overflow = "";
1249
- }), []), /* @__PURE__ */ G("div", {
1221
+ }), []), /* @__PURE__ */ U("div", {
1250
1222
  className: "dc:fixed dc:inset-0 dc:z-50 dc:flex dc:items-center dc:justify-center dc:p-4 bg-black/50",
1251
- children: [/* @__PURE__ */ W("div", {
1223
+ children: [/* @__PURE__ */ H("div", {
1252
1224
  className: "dc:absolute dc:inset-0",
1253
1225
  onClick: i,
1254
1226
  "aria-hidden": "true"
1255
- }), /* @__PURE__ */ G("div", {
1227
+ }), /* @__PURE__ */ U("div", {
1256
1228
  className: "dc:relative dc:w-full dc:max-w-4xl dc:max-h-[90vh] bg-dc-surface dc:rounded-lg dc:shadow-xl dc:flex dc:flex-col",
1257
1229
  children: [
1258
- /* @__PURE__ */ G("div", {
1230
+ /* @__PURE__ */ U("div", {
1259
1231
  className: "dc:flex dc:items-center dc:justify-between dc:px-6 dc:py-4 dc:border-b border-dc-border dc:flex-shrink-0",
1260
- children: [/* @__PURE__ */ G("div", {
1232
+ children: [/* @__PURE__ */ U("div", {
1261
1233
  className: "dc:flex dc:items-center dc:gap-3",
1262
- children: [/* @__PURE__ */ W("span", {
1234
+ children: [/* @__PURE__ */ H("span", {
1263
1235
  className: "dc:text-lg",
1264
1236
  children: "✨"
1265
- }), /* @__PURE__ */ W("h3", {
1237
+ }), /* @__PURE__ */ H("h3", {
1266
1238
  className: "dc:text-lg dc:font-semibold text-dc-text",
1267
1239
  children: r("explainAI.title")
1268
1240
  })]
1269
- }), /* @__PURE__ */ W("button", {
1241
+ }), /* @__PURE__ */ H("button", {
1270
1242
  onClick: i,
1271
1243
  className: "dc:p-2 dc:rounded-lg hover:bg-dc-surface-hover text-dc-text-secondary hover:text-dc-text dc:transition-colors",
1272
1244
  "aria-label": "Close",
1273
- children: /* @__PURE__ */ W("svg", {
1245
+ children: /* @__PURE__ */ H("svg", {
1274
1246
  className: "dc:w-5 dc:h-5",
1275
1247
  fill: "none",
1276
1248
  stroke: "currentColor",
1277
1249
  viewBox: "0 0 24 24",
1278
- children: /* @__PURE__ */ W("path", {
1250
+ children: /* @__PURE__ */ H("path", {
1279
1251
  strokeLinecap: "round",
1280
1252
  strokeLinejoin: "round",
1281
1253
  strokeWidth: 2,
@@ -1284,50 +1256,50 @@ function ot({ analysis: e, onClose: t, onClear: n }) {
1284
1256
  })
1285
1257
  })]
1286
1258
  }),
1287
- /* @__PURE__ */ G("div", {
1259
+ /* @__PURE__ */ U("div", {
1288
1260
  className: "dc:flex-1 dc:overflow-y-auto dc:px-6 dc:py-4 dc:space-y-6",
1289
1261
  children: [
1290
- /* @__PURE__ */ W(nt, {
1262
+ /* @__PURE__ */ H(Qe, {
1291
1263
  assessment: e.assessment,
1292
1264
  reason: e.assessmentReason
1293
1265
  }),
1294
- /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("h4", {
1266
+ /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
1295
1267
  className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
1296
1268
  children: r("explainAI.summary")
1297
- }), /* @__PURE__ */ W("p", {
1269
+ }), /* @__PURE__ */ H("p", {
1298
1270
  className: "text-dc-text",
1299
- children: Qe(e.summary)
1271
+ children: Y(e.summary)
1300
1272
  })] }),
1301
- e.queryUnderstanding && /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("h4", {
1273
+ e.queryUnderstanding && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
1302
1274
  className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
1303
1275
  children: r("explainAI.queryAnalysis")
1304
- }), /* @__PURE__ */ W("p", {
1276
+ }), /* @__PURE__ */ H("p", {
1305
1277
  className: "text-dc-text-secondary",
1306
- children: Qe(e.queryUnderstanding)
1278
+ children: Y(e.queryUnderstanding)
1307
1279
  })] }),
1308
- e.issues && e.issues.length > 0 && /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("h4", {
1280
+ e.issues && e.issues.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
1309
1281
  className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-2",
1310
1282
  children: r("explainAI.issuesFound", { count: e.issues.length })
1311
- }), /* @__PURE__ */ W("div", {
1283
+ }), /* @__PURE__ */ H("div", {
1312
1284
  className: "dc:space-y-1 bg-dc-surface-secondary dc:rounded-lg dc:p-3",
1313
- children: e.issues.map((e, t) => /* @__PURE__ */ W(rt, { issue: e }, t))
1285
+ children: e.issues.map((e, t) => /* @__PURE__ */ H($e, { issue: e }, t))
1314
1286
  })] }),
1315
- e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */ G("div", { children: [/* @__PURE__ */ W("h4", {
1287
+ e.recommendations && e.recommendations.length > 0 && /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("h4", {
1316
1288
  className: "dc:text-sm dc:font-semibold text-dc-text-muted dc:uppercase dc:mb-3",
1317
1289
  children: r("explainAI.recommendations", { count: e.recommendations.length })
1318
- }), /* @__PURE__ */ W("div", {
1290
+ }), /* @__PURE__ */ H("div", {
1319
1291
  className: "dc:space-y-4",
1320
- children: e.recommendations.map((e, t) => /* @__PURE__ */ W(at, { rec: e }, t))
1292
+ children: e.recommendations.map((e, t) => /* @__PURE__ */ H(tt, { rec: e }, t))
1321
1293
  })] }),
1322
- (!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */ W("div", {
1294
+ (!e.recommendations || e.recommendations.length === 0) && /* @__PURE__ */ H("div", {
1323
1295
  className: "text-dc-text-muted dc:italic dc:p-4 bg-dc-surface-secondary dc:rounded-lg",
1324
1296
  children: r("explainAI.noRecommendations")
1325
1297
  })
1326
1298
  ]
1327
1299
  }),
1328
- /* @__PURE__ */ G("div", {
1300
+ /* @__PURE__ */ U("div", {
1329
1301
  className: "dc:flex dc:items-center dc:justify-between dc:px-6 dc:py-3 dc:border-t border-dc-border dc:flex-shrink-0 bg-dc-surface-secondary",
1330
- children: [e._meta && /* @__PURE__ */ G("div", {
1302
+ children: [e._meta && /* @__PURE__ */ U("div", {
1331
1303
  className: "dc:text-xs text-dc-text-muted",
1332
1304
  children: [
1333
1305
  r("explainAI.modelLabel"),
@@ -1335,7 +1307,7 @@ function ot({ analysis: e, onClose: t, onClear: n }) {
1335
1307
  e._meta.model,
1336
1308
  e._meta.usingUserKey && ` ${r("explainAI.usingUserKey")}`
1337
1309
  ]
1338
- }), /* @__PURE__ */ W("button", {
1310
+ }), /* @__PURE__ */ H("button", {
1339
1311
  onClick: i,
1340
1312
  className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium dc:rounded-lg bg-dc-primary text-white hover:bg-dc-primary-hover dc:transition-colors",
1341
1313
  children: r("common.actions.close")
@@ -1346,142 +1318,332 @@ function ot({ analysis: e, onClose: t, onClear: n }) {
1346
1318
  });
1347
1319
  }
1348
1320
  //#endregion
1321
+ //#region src/client/shared/chartConfigBuilders.ts
1322
+ var rt = (e) => e.map((e) => e.field), it = (e) => e.length > 0 ? [e[0].field] : [];
1323
+ function at(e) {
1324
+ let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
1325
+ return {
1326
+ xAxis: n ? [n.field] : r ? [r.field] : [],
1327
+ yAxis: rt(t),
1328
+ series: i.length > 1 ? [i[1].field] : r && n ? [r.field] : []
1329
+ };
1330
+ }
1331
+ function ot(e) {
1332
+ let { metrics: t, timeDimension: n, dimension: r, dimensions: i } = e;
1333
+ return {
1334
+ xAxis: r ? [r.field] : n ? [n.field] : [],
1335
+ yAxis: rt(t),
1336
+ series: i.length > 1 ? [i[1].field] : n && r ? [n.field] : []
1337
+ };
1338
+ }
1339
+ function st(e) {
1340
+ let { metrics: t, dimension: n } = e;
1341
+ return {
1342
+ xAxis: n ? [n.field] : [],
1343
+ yAxis: it(t)
1344
+ };
1345
+ }
1346
+ function ct(e) {
1347
+ let { metrics: t, breakdowns: n, dimension: r, dimensions: i } = e;
1348
+ return t.length >= 2 ? {
1349
+ xAxis: [t[0].field],
1350
+ yAxis: [t[1].field],
1351
+ series: r ? [r.field] : []
1352
+ } : {
1353
+ xAxis: n.length > 0 ? [n[0].field] : [],
1354
+ yAxis: it(t),
1355
+ series: i.length > 1 ? [i[1].field] : []
1356
+ };
1357
+ }
1358
+ function lt(e) {
1359
+ let { metrics: t, timeDimension: n, dimension: r } = e;
1360
+ return {
1361
+ xAxis: t.length > 0 ? [t[0].field] : [],
1362
+ yAxis: t.length > 1 ? [t[1].field] : [],
1363
+ sizeField: t.length > 2 ? t[2].field : t.length > 1 ? t[1].field : void 0,
1364
+ series: r ? [r.field] : n ? [n.field] : []
1365
+ };
1366
+ }
1367
+ function ut(e) {
1368
+ let { metrics: t, dimension: n } = e;
1369
+ return {
1370
+ xAxis: n ? [n.field] : [],
1371
+ yAxis: it(t)
1372
+ };
1373
+ }
1374
+ function dt(e) {
1375
+ let { metrics: t, timeDimension: n } = e;
1376
+ return {
1377
+ dateField: n ? [n.field] : [],
1378
+ valueField: it(t)
1379
+ };
1380
+ }
1381
+ function ft(e) {
1382
+ return { yAxis: it(e.metrics) };
1383
+ }
1384
+ function pt(e) {
1385
+ let { metrics: t, breakdowns: n } = e;
1386
+ return { xAxis: [...n.map((e) => e.field), ...t.map((e) => e.field)] };
1387
+ }
1388
+ function mt() {
1389
+ return {};
1390
+ }
1391
+ function ht(e) {
1392
+ let { metrics: t, breakdowns: n } = e;
1393
+ return {
1394
+ xAxis: n.length > 0 ? [n[0].field] : [],
1395
+ yAxis: rt(t)
1396
+ };
1397
+ }
1398
+ var gt = {
1399
+ line: at,
1400
+ area: at,
1401
+ bar: ot,
1402
+ pie: st,
1403
+ scatter: ct,
1404
+ bubble: lt,
1405
+ radar: ut,
1406
+ radialBar: ut,
1407
+ treemap: ut,
1408
+ activityGrid: dt,
1409
+ kpiNumber: ft,
1410
+ kpiDelta: ft,
1411
+ kpiText: ft,
1412
+ table: pt,
1413
+ markdown: mt
1414
+ };
1415
+ function _t(e) {
1416
+ return gt[e] || ht;
1417
+ }
1418
+ //#endregion
1419
+ //#region src/client/shared/chartDefaults.ts
1420
+ function vt(e) {
1421
+ return e.isTimeDimension;
1422
+ }
1423
+ function yt(e) {
1424
+ return e.find(vt);
1425
+ }
1426
+ function bt(e) {
1427
+ return e.find((e) => !e.isTimeDimension);
1428
+ }
1429
+ function xt(e) {
1430
+ return e.filter((e) => !e.isTimeDimension);
1431
+ }
1432
+ function St(e) {
1433
+ return e.filter(vt);
1434
+ }
1435
+ function Ct(e, t) {
1436
+ return {
1437
+ measureCount: e.length,
1438
+ dimensionCount: t.length,
1439
+ timeDimensionCount: St(t).length
1440
+ };
1441
+ }
1442
+ function wt(e, t, n) {
1443
+ let r = c[e];
1444
+ return !r || !r.isAvailable ? { available: !0 } : r.isAvailable(Ct(t, n));
1445
+ }
1446
+ function Tt(e, t) {
1447
+ let n = Object.keys(c), r = {};
1448
+ for (let i of n) r[i] = wt(i, e, t);
1449
+ return r;
1450
+ }
1451
+ function Et(e, t, n) {
1452
+ if (wt(n, e, t).available || e.length === 0 && t.length === 0) return n;
1453
+ let r = St(t).length > 0, i = xt(t).length > 0, a = e.length > 0;
1454
+ return r && a ? "line" : i && a ? "bar" : a && !i && !r ? "kpiNumber" : "table";
1455
+ }
1456
+ function Dt(e, t, n) {
1457
+ let r = Et(e, t, n);
1458
+ return {
1459
+ chartType: r,
1460
+ chartConfig: Ot(r, e, t)
1461
+ };
1462
+ }
1463
+ function Ot(e, t, n) {
1464
+ return _t(e)({
1465
+ metrics: t,
1466
+ breakdowns: n,
1467
+ timeDimension: yt(n),
1468
+ dimension: bt(n),
1469
+ dimensions: xt(n)
1470
+ });
1471
+ }
1472
+ function kt(e, t, n, r) {
1473
+ if (r && wt(n, e, t).available) return null;
1474
+ let i = Et(e, t, n);
1475
+ return i === n ? null : i;
1476
+ }
1477
+ //#endregion
1478
+ //#region src/client/components/AnalysisBuilder/ExecutionPlanPanelParts.tsx
1479
+ function At({ title: e, height: t, className: n, children: r }) {
1480
+ return /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H("h4", {
1481
+ className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
1482
+ children: e
1483
+ }), /* @__PURE__ */ H("div", {
1484
+ className: n,
1485
+ style: { height: t },
1486
+ children: r
1487
+ })] });
1488
+ }
1489
+ function jt({ sql: e, sqlLoading: t, sqlError: n, sqlPlaceholder: r, formattedSql: i, title: a, height: o, headerRight: s }) {
1490
+ let { t: c } = D();
1491
+ return t ? /* @__PURE__ */ H(At, {
1492
+ title: a,
1493
+ height: o,
1494
+ className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
1495
+ children: c("results.debug.loadingSql")
1496
+ }) : n ? /* @__PURE__ */ H(At, {
1497
+ title: a,
1498
+ height: o,
1499
+ className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
1500
+ children: n.message
1501
+ }) : e ? /* @__PURE__ */ H(u, {
1502
+ code: i,
1503
+ language: "sql",
1504
+ title: a,
1505
+ height: o,
1506
+ headerRight: s
1507
+ }) : /* @__PURE__ */ H(At, {
1508
+ title: a,
1509
+ height: o,
1510
+ className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm",
1511
+ children: r
1512
+ });
1513
+ }
1514
+ function Mt({ summary: e }) {
1515
+ let { t } = D();
1516
+ return /* @__PURE__ */ U("div", {
1517
+ className: "dc:flex dc:flex-wrap dc:items-center dc:gap-2",
1518
+ children: [
1519
+ /* @__PURE__ */ H("span", {
1520
+ className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-accent text-white dc:rounded",
1521
+ children: e.database.toUpperCase()
1522
+ }),
1523
+ e.hasSequentialScans && /* @__PURE__ */ H("span", {
1524
+ className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-warning-bg text-dc-warning dc:border border-dc-warning dc:rounded",
1525
+ children: t("debug.sequentialScans")
1526
+ }),
1527
+ e.usedIndexes.length > 0 && /* @__PURE__ */ H("span", {
1528
+ className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-success-bg text-dc-success dc:border border-dc-success dc:rounded",
1529
+ children: t(e.usedIndexes.length === 1 ? "debug.indexesUsed" : "debug.indexesUsedPlural", { count: e.usedIndexes.length })
1530
+ }),
1531
+ e.executionTime !== void 0 && /* @__PURE__ */ H("span", {
1532
+ className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
1533
+ children: t("debug.executionTime", { time: e.executionTime.toFixed(2) })
1534
+ }),
1535
+ e.planningTime !== void 0 && /* @__PURE__ */ H("span", {
1536
+ className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
1537
+ children: t("debug.planningTime", { time: e.planningTime.toFixed(2) })
1538
+ }),
1539
+ e.totalCost !== void 0 && /* @__PURE__ */ H("span", {
1540
+ className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
1541
+ children: t("debug.cost", { cost: e.totalCost.toFixed(2) })
1542
+ })
1543
+ ]
1544
+ });
1545
+ }
1546
+ function Nt({ explainLoading: e, explainError: t, explainResult: n, useAnalyze: r, aiButton: i }) {
1547
+ let { t: a } = D();
1548
+ return e ? /* @__PURE__ */ H("div", {
1549
+ className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
1550
+ children: a(r ? "debug.explainRunningAnalyze" : "debug.explainRunningBasic")
1551
+ }) : t ? /* @__PURE__ */ U("div", {
1552
+ className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
1553
+ children: [
1554
+ /* @__PURE__ */ H("strong", { children: a("debug.explainError") }),
1555
+ " ",
1556
+ t.message
1557
+ ]
1558
+ }) : n ? /* @__PURE__ */ U("div", {
1559
+ className: "dc:space-y-3",
1560
+ children: [
1561
+ /* @__PURE__ */ H(Mt, { summary: n.summary }),
1562
+ n.summary.usedIndexes.length > 0 && /* @__PURE__ */ U("div", {
1563
+ className: "dc:text-xs text-dc-text-muted",
1564
+ children: [
1565
+ /* @__PURE__ */ H("strong", { children: a("debug.indexes") }),
1566
+ " ",
1567
+ n.summary.usedIndexes.join(", ")
1568
+ ]
1569
+ }),
1570
+ /* @__PURE__ */ H(u, {
1571
+ code: n.raw,
1572
+ language: "sql",
1573
+ title: a("debug.executionPlanTitle", { database: n.summary.database }),
1574
+ height: "16rem",
1575
+ headerRight: i
1576
+ })
1577
+ ]
1578
+ }) : null;
1579
+ }
1580
+ //#endregion
1349
1581
  //#region src/client/components/AnalysisBuilder/ExecutionPlanPanel.tsx
1350
- var st = L(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" }) {
1351
- let { t: v } = T(), [y, b] = H(!1), [x, S] = H(!1), C = e ? e.sql + (e.params && e.params.length > 0 ? "\n\n-- Parameters:\n" + JSON.stringify(e.params, null, 2) : "") : "", ee = () => {
1582
+ var Pt = F(function({ sql: e, sqlLoading: t = !1, sqlError: n, sqlPlaceholder: r = "Add metrics to generate SQL", explainResult: i, explainLoading: a = !1, explainHasRun: o = !1, explainError: s, runExplain: c, aiAnalysis: l, aiAnalysisLoading: u = !1, aiAnalysisError: d, runAIAnalysis: f, clearAIAnalysis: p, enableAI: m = !1, query: h, title: g = "Generated SQL", height: _ = "16rem" }) {
1583
+ let { t: v } = D(), [y, b] = B(!1), [x, S] = B(!1), C = e ? e.sql + (e.params && e.params.length > 0 ? "\n\n-- Parameters:\n" + JSON.stringify(e.params, null, 2) : "") : "", w = () => {
1352
1584
  f && i && h && (f(i, h), S(!0));
1353
- }, w = () => {
1585
+ }, T = () => {
1354
1586
  S(!1);
1355
- }, te = m && i ? /* @__PURE__ */ W("button", {
1356
- onClick: ee,
1587
+ }, E = m && i ? /* @__PURE__ */ H("button", {
1588
+ onClick: w,
1357
1589
  disabled: u,
1358
1590
  className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium dc:rounded bg-dc-accent text-white hover:bg-dc-accent-hover dc:disabled:opacity-50 dc:disabled:cursor-not-allowed dc:flex dc:items-center dc:gap-1",
1359
- children: u ? /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ W("span", {
1591
+ children: u ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H("span", {
1360
1592
  className: "dc:animate-spin",
1361
1593
  children: "⟳"
1362
- }), v("debug.aiAnalyzing")] }) : /* @__PURE__ */ W(U, { children: `✨ ${v("debug.aiAnalysis")}` })
1594
+ }), v("debug.aiAnalyzing")] }) : /* @__PURE__ */ H(V, { children: `✨ ${v("debug.aiAnalysis")}` })
1363
1595
  }) : null;
1364
- return /* @__PURE__ */ G("div", {
1596
+ return /* @__PURE__ */ U("div", {
1365
1597
  className: "dc:space-y-3",
1366
1598
  children: [
1367
- t ? /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ W("h4", {
1368
- className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
1369
- children: g
1370
- }), /* @__PURE__ */ W("div", {
1371
- className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
1372
- style: { height: _ },
1373
- children: v("results.debug.loadingSql")
1374
- })] }) : n ? /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ W("h4", {
1375
- className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
1376
- children: g
1377
- }), /* @__PURE__ */ W("div", {
1378
- className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
1379
- style: { height: _ },
1380
- children: n.message
1381
- })] }) : e ? /* @__PURE__ */ W(M, {
1382
- code: C,
1383
- language: "sql",
1599
+ /* @__PURE__ */ H(jt, {
1600
+ sql: e,
1601
+ sqlLoading: t,
1602
+ sqlError: n,
1603
+ sqlPlaceholder: r,
1604
+ formattedSql: C,
1384
1605
  title: g,
1385
1606
  height: _,
1386
- headerRight: /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ G("label", {
1607
+ headerRight: /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ U("label", {
1387
1608
  className: "dc:flex dc:items-center dc:gap-1 dc:text-xs text-dc-text-secondary dc:cursor-pointer",
1388
- children: [/* @__PURE__ */ W("input", {
1609
+ children: [/* @__PURE__ */ H("input", {
1389
1610
  type: "checkbox",
1390
1611
  checked: y,
1391
1612
  onChange: (e) => b(e.target.checked),
1392
1613
  className: "dc:w-3 dc:h-3 dc:rounded border-dc-border text-dc-accent focus:ring-dc-accent"
1393
1614
  }), v("debug.explainIncludeTiming")]
1394
- }), /* @__PURE__ */ W("button", {
1615
+ }), /* @__PURE__ */ H("button", {
1395
1616
  onClick: () => c({ analyze: y }),
1396
1617
  disabled: a,
1397
1618
  className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium dc:rounded dc:border border-dc-border bg-dc-surface hover:bg-dc-surface-hover text-dc-text-secondary hover:text-dc-text dc:transition-colors dc:disabled:opacity-50 dc:disabled:cursor-not-allowed",
1398
1619
  children: v(a ? "debug.explainRunning" : "debug.explainPlan")
1399
1620
  })] })
1400
- }) : /* @__PURE__ */ G(U, { children: [/* @__PURE__ */ W("h4", {
1401
- className: "dc:text-sm dc:font-semibold text-dc-text dc:mb-2",
1402
- children: g
1403
- }), /* @__PURE__ */ W("div", {
1404
- className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm",
1405
- style: { height: _ },
1406
- children: r
1407
- })] }),
1408
- o && /* @__PURE__ */ W("div", { children: a ? /* @__PURE__ */ W("div", {
1409
- className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:p-3 text-dc-text-muted dc:text-sm dc:animate-pulse",
1410
- children: v(y ? "debug.explainRunningAnalyze" : "debug.explainRunningBasic")
1411
- }) : s ? /* @__PURE__ */ G("div", {
1412
- className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
1413
- children: [
1414
- /* @__PURE__ */ W("strong", { children: v("debug.explainError") }),
1415
- " ",
1416
- s.message
1417
- ]
1418
- }) : i ? /* @__PURE__ */ G("div", {
1419
- className: "dc:space-y-3",
1420
- children: [
1421
- /* @__PURE__ */ G("div", {
1422
- className: "dc:flex dc:flex-wrap dc:items-center dc:gap-2",
1423
- children: [
1424
- /* @__PURE__ */ W("span", {
1425
- className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-accent text-white dc:rounded",
1426
- children: i.summary.database.toUpperCase()
1427
- }),
1428
- i.summary.hasSequentialScans && /* @__PURE__ */ W("span", {
1429
- className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-warning-bg text-dc-warning dc:border border-dc-warning dc:rounded",
1430
- children: v("debug.sequentialScans")
1431
- }),
1432
- i.summary.usedIndexes.length > 0 && /* @__PURE__ */ W("span", {
1433
- className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-success-bg text-dc-success dc:border border-dc-success dc:rounded",
1434
- children: v(i.summary.usedIndexes.length === 1 ? "debug.indexesUsed" : "debug.indexesUsedPlural", { count: i.summary.usedIndexes.length })
1435
- }),
1436
- i.summary.executionTime !== void 0 && /* @__PURE__ */ W("span", {
1437
- className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
1438
- children: v("debug.executionTime", { time: i.summary.executionTime.toFixed(2) })
1439
- }),
1440
- i.summary.planningTime !== void 0 && /* @__PURE__ */ W("span", {
1441
- className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
1442
- children: v("debug.planningTime", { time: i.summary.planningTime.toFixed(2) })
1443
- }),
1444
- i.summary.totalCost !== void 0 && /* @__PURE__ */ W("span", {
1445
- className: "dc:px-2 dc:py-1 dc:text-xs dc:font-medium bg-dc-surface-secondary text-dc-text-secondary dc:border border-dc-border dc:rounded",
1446
- children: v("debug.cost", { cost: i.summary.totalCost.toFixed(2) })
1447
- })
1448
- ]
1449
- }),
1450
- i.summary.usedIndexes.length > 0 && /* @__PURE__ */ G("div", {
1451
- className: "dc:text-xs text-dc-text-muted",
1452
- children: [
1453
- /* @__PURE__ */ W("strong", { children: v("debug.indexes") }),
1454
- " ",
1455
- i.summary.usedIndexes.join(", ")
1456
- ]
1457
- }),
1458
- /* @__PURE__ */ W(M, {
1459
- code: i.raw,
1460
- language: "sql",
1461
- title: v("debug.executionPlanTitle", { database: i.summary.database }),
1462
- height: "16rem",
1463
- headerRight: te
1464
- })
1465
- ]
1466
- }) : null }),
1467
- d && /* @__PURE__ */ G("div", {
1621
+ }),
1622
+ o && /* @__PURE__ */ H("div", { children: /* @__PURE__ */ H(Nt, {
1623
+ explainLoading: a,
1624
+ explainError: s,
1625
+ explainResult: i,
1626
+ useAnalyze: y,
1627
+ aiButton: E
1628
+ }) }),
1629
+ d && /* @__PURE__ */ U("div", {
1468
1630
  className: "text-dc-error dc:text-sm bg-dc-danger-bg dc:p-3 dc:rounded dc:border border-dc-error",
1469
1631
  children: [
1470
- /* @__PURE__ */ W("strong", { children: v("debug.aiAnalysisError") }),
1632
+ /* @__PURE__ */ H("strong", { children: v("debug.aiAnalysisError") }),
1471
1633
  " ",
1472
1634
  d.message
1473
1635
  ]
1474
1636
  }),
1475
- x && l && /* @__PURE__ */ W(ot, {
1637
+ x && l && /* @__PURE__ */ H(nt, {
1476
1638
  analysis: l,
1477
- onClose: w
1639
+ onClose: T
1478
1640
  })
1479
1641
  ]
1480
1642
  });
1481
1643
  });
1482
1644
  //#endregion
1483
1645
  //#region src/client/adapters/queryModeAdapter.ts
1484
- function ct() {
1646
+ function Ft() {
1485
1647
  return {
1486
1648
  metrics: [],
1487
1649
  breakdowns: [],
@@ -1492,10 +1654,10 @@ function ct() {
1492
1654
  validationError: null
1493
1655
  };
1494
1656
  }
1495
- function lt(e) {
1657
+ function It(e) {
1496
1658
  return e.map((e) => e.field);
1497
1659
  }
1498
- function ut(e, t) {
1660
+ function Lt(e, t) {
1499
1661
  let n = [], r = [];
1500
1662
  for (let i of e) if (i.isTimeDimension) {
1501
1663
  let e = {
@@ -1503,7 +1665,7 @@ function ut(e, t) {
1503
1665
  granularity: i.granularity || "day"
1504
1666
  };
1505
1667
  if (i.enableComparison) {
1506
- let n = ge(i.field, t);
1668
+ let n = ve(i.field, t);
1507
1669
  n && (e.compareDateRange = n);
1508
1670
  }
1509
1671
  r.push(e);
@@ -1513,31 +1675,31 @@ function ut(e, t) {
1513
1675
  timeDimensions: r
1514
1676
  };
1515
1677
  }
1516
- function dt(e) {
1517
- let { dimensions: t, timeDimensions: n } = ut(e.breakdowns, e.filters), r = {
1518
- measures: lt(e.metrics),
1678
+ function Rt(e) {
1679
+ let { dimensions: t, timeDimensions: n } = Lt(e.breakdowns, e.filters), r = {
1680
+ measures: It(e.metrics),
1519
1681
  dimensions: t
1520
1682
  };
1521
1683
  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;
1522
1684
  }
1523
- function ft(e) {
1685
+ function zt(e) {
1524
1686
  return e.map((e, t) => ({
1525
- id: D(),
1687
+ id: S(),
1526
1688
  field: e,
1527
- label: ae(t)
1689
+ label: d(t)
1528
1690
  }));
1529
1691
  }
1530
- function pt(e) {
1692
+ function Bt(e) {
1531
1693
  let t = [];
1532
1694
  if (e.dimensions) for (let n of e.dimensions) t.push({
1533
- id: D(),
1695
+ id: S(),
1534
1696
  field: n,
1535
1697
  isTimeDimension: !1
1536
1698
  });
1537
1699
  if (e.timeDimensions) for (let n of e.timeDimensions) {
1538
1700
  let e = !!(n.compareDateRange && n.compareDateRange.length > 0);
1539
1701
  t.push({
1540
- id: D(),
1702
+ id: S(),
1541
1703
  field: n.dimension,
1542
1704
  granularity: n.granularity,
1543
1705
  isTimeDimension: !0,
@@ -1546,10 +1708,10 @@ function pt(e) {
1546
1708
  }
1547
1709
  return t;
1548
1710
  }
1549
- function mt(e) {
1711
+ function Vt(e) {
1550
1712
  return {
1551
- metrics: ft(e.measures || []),
1552
- breakdowns: pt(e),
1713
+ metrics: zt(e.measures || []),
1714
+ breakdowns: Bt(e),
1553
1715
  filters: e.filters || [],
1554
1716
  order: e.order,
1555
1717
  limit: e.limit,
@@ -1557,14 +1719,14 @@ function mt(e) {
1557
1719
  validationError: null
1558
1720
  };
1559
1721
  }
1560
- function ht(e) {
1722
+ function Ht(e) {
1561
1723
  return typeof e == "object" && !!e && "queries" in e && Array.isArray(e.queries);
1562
1724
  }
1563
1725
  var X = {
1564
1726
  type: "query",
1565
1727
  createInitial() {
1566
1728
  return {
1567
- queryStates: [ct()],
1729
+ queryStates: [Ft()],
1568
1730
  activeQueryIndex: 0,
1569
1731
  mergeStrategy: "concat"
1570
1732
  };
@@ -1584,22 +1746,22 @@ var X = {
1584
1746
  load(e) {
1585
1747
  if (e.analysisType !== "query") throw Error(`Cannot load ${e.analysisType} config with query adapter`);
1586
1748
  let t = e;
1587
- if (ht(t.query)) {
1588
- let e = t.query, n = e.queries.map(mt);
1589
- return n.length === 0 && n.push(ct()), {
1749
+ if (Ht(t.query)) {
1750
+ let e = t.query, n = e.queries.map(Vt);
1751
+ return n.length === 0 && n.push(Ft()), {
1590
1752
  queryStates: n,
1591
1753
  activeQueryIndex: 0,
1592
1754
  mergeStrategy: e.mergeStrategy || "concat"
1593
1755
  };
1594
1756
  }
1595
1757
  return {
1596
- queryStates: [mt(t.query)],
1758
+ queryStates: [Vt(t.query)],
1597
1759
  activeQueryIndex: 0,
1598
1760
  mergeStrategy: "concat"
1599
1761
  };
1600
1762
  },
1601
1763
  save(e, t, n) {
1602
- let r = e.queryStates.map(dt), i = r.length === 1 && e.mergeStrategy === "concat" ? r[0] : {
1764
+ let r = e.queryStates.map(Rt), i = r.length === 1 && e.mergeStrategy === "concat" ? r[0] : {
1603
1765
  queries: r,
1604
1766
  mergeStrategy: e.mergeStrategy
1605
1767
  };
@@ -1640,36 +1802,36 @@ var X = {
1640
1802
  }
1641
1803
  };
1642
1804
  }
1643
- }, Z = /* @__PURE__ */ new Map(), gt = !1;
1644
- function _t() {
1645
- gt ||= (Z.has("query") || Z.set("query", X), Z.has("funnel") || Z.set("funnel", O), Z.has("flow") || Z.set("flow", P), Z.has("retention") || Z.set("retention", N), !0);
1805
+ }, Z = /* @__PURE__ */ new Map(), Ut = !1;
1806
+ function Wt() {
1807
+ Ut ||= (Z.has("query") || Z.set("query", X), Z.has("funnel") || Z.set("funnel", h), Z.has("flow") || Z.set("flow", b), Z.has("retention") || Z.set("retention", y), !0);
1646
1808
  }
1647
1809
  var Q = {
1648
1810
  register(e) {
1649
1811
  Z.has(e.type) && console.warn(`[adapterRegistry] Overwriting existing adapter for type: ${e.type}`), Z.set(e.type, e);
1650
1812
  },
1651
1813
  get(e) {
1652
- _t();
1814
+ Wt();
1653
1815
  let t = Z.get(e);
1654
1816
  if (!t) throw Error(`[adapterRegistry] No adapter registered for type: ${e}. Available types: ${Array.from(Z.keys()).join(", ") || "none"}`);
1655
1817
  return t;
1656
1818
  },
1657
1819
  has(e) {
1658
- return _t(), Z.has(e);
1820
+ return Wt(), Z.has(e);
1659
1821
  },
1660
1822
  getRegisteredTypes() {
1661
- return _t(), Array.from(Z.keys());
1823
+ return Wt(), Array.from(Z.keys());
1662
1824
  },
1663
1825
  clear() {
1664
- Z.clear(), gt = !1;
1826
+ Z.clear(), Ut = !1;
1665
1827
  }
1666
- }, vt = () => ({
1828
+ }, Gt = () => ({
1667
1829
  analysisType: "query",
1668
1830
  charts: {
1669
1831
  query: X.getDefaultChartConfig(),
1670
- funnel: O.getDefaultChartConfig(),
1671
- flow: P.getDefaultChartConfig(),
1672
- retention: N.getDefaultChartConfig()
1832
+ funnel: h.getDefaultChartConfig(),
1833
+ flow: b.getDefaultChartConfig(),
1834
+ retention: y.getDefaultChartConfig()
1673
1835
  },
1674
1836
  activeViews: {
1675
1837
  query: "chart",
@@ -1679,8 +1841,8 @@ var Q = {
1679
1841
  },
1680
1842
  userManuallySelectedChart: !1,
1681
1843
  localPaletteName: "default"
1682
- }), yt = (e, t, n) => ({
1683
- ...vt(),
1844
+ }), Kt = (e, t, n) => ({
1845
+ ...Gt(),
1684
1846
  setAnalysisType: (t) => {
1685
1847
  e((e) => {
1686
1848
  let n = { ...e.charts };
@@ -1893,12 +2055,12 @@ var Q = {
1893
2055
  ...u
1894
2056
  });
1895
2057
  }
1896
- }), bt = () => ({
2058
+ }), qt = () => ({
1897
2059
  queryStates: [K()],
1898
2060
  activeQueryIndex: 0,
1899
2061
  mergeStrategy: "concat"
1900
- }), xt = (e, t, n) => ({
1901
- ...bt(),
2062
+ }), Jt = (e, t, n) => ({
2063
+ ...qt(),
1902
2064
  setQueryStates: (t) => e({ queryStates: t }),
1903
2065
  updateQueryState: (t, n) => e((e) => {
1904
2066
  let r = [...e.queryStates];
@@ -1928,9 +2090,9 @@ var Q = {
1928
2090
  }),
1929
2091
  addMetric: (t, n) => e((e) => {
1930
2092
  let r = e.activeQueryIndex, i = [...e.queryStates], a = i[r] || K(), o = {
1931
- id: D(),
2093
+ id: S(),
1932
2094
  field: t,
1933
- label: n || ae(a.metrics.length)
2095
+ label: n || d(a.metrics.length)
1934
2096
  };
1935
2097
  return i[r] = {
1936
2098
  ...a,
@@ -1953,9 +2115,9 @@ var Q = {
1953
2115
  };
1954
2116
  else {
1955
2117
  let e = {
1956
- id: D(),
2118
+ id: S(),
1957
2119
  field: t,
1958
- label: ae(i.metrics.length)
2120
+ label: d(i.metrics.length)
1959
2121
  };
1960
2122
  r[n] = {
1961
2123
  ...i,
@@ -1975,7 +2137,7 @@ var Q = {
1975
2137
  let i = e.activeQueryIndex, a = [...e.queryStates], o = a[i] || K();
1976
2138
  if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
1977
2139
  let s = {
1978
- id: D(),
2140
+ id: S(),
1979
2141
  field: t,
1980
2142
  isTimeDimension: n,
1981
2143
  granularity: n ? r || "month" : void 0
@@ -2002,7 +2164,7 @@ var Q = {
2002
2164
  else {
2003
2165
  if (n && o.breakdowns.some((e) => e.isTimeDimension)) return e;
2004
2166
  let s = {
2005
- id: D(),
2167
+ id: S(),
2006
2168
  field: t,
2007
2169
  isTimeDimension: n,
2008
2170
  granularity: n ? r || "month" : void 0
@@ -2050,7 +2212,7 @@ var Q = {
2050
2212
  member: l.field,
2051
2213
  operator: "inDateRange",
2052
2214
  values: [],
2053
- dateRange: m("last_n_months", 3)
2215
+ dateRange: A("last_n_months", 3)
2054
2216
  };
2055
2217
  s[c] = {
2056
2218
  ...s[c],
@@ -2139,11 +2301,11 @@ var Q = {
2139
2301
  },
2140
2302
  buildCurrentQuery: () => {
2141
2303
  let e = t(), n = e.queryStates[e.activeQueryIndex] || K();
2142
- return ve(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
2304
+ return G(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
2143
2305
  },
2144
2306
  buildAllQueries: () => {
2145
2307
  let e = t(), n = e.queryStates[0]?.breakdowns || [];
2146
- return e.queryStates.map((t, r) => ve(t.metrics, e.mergeStrategy === "merge" && r > 0 ? n : t.breakdowns, t.filters, t.order, !1, t.limit));
2308
+ return e.queryStates.map((t, r) => G(t.metrics, e.mergeStrategy === "merge" && r > 0 ? n : t.breakdowns, t.filters, t.order, !1, t.limit));
2147
2309
  },
2148
2310
  buildMultiQueryConfig: () => {
2149
2311
  let e = t();
@@ -2156,18 +2318,18 @@ var Q = {
2156
2318
  queryLabels: n.map((e, t) => `Q${t + 1}`)
2157
2319
  };
2158
2320
  }
2159
- }), St = () => ({
2321
+ }), Yt = () => ({
2160
2322
  funnelCube: null,
2161
2323
  funnelSteps: [],
2162
2324
  activeFunnelStepIndex: 0,
2163
2325
  funnelTimeDimension: null,
2164
2326
  funnelBindingKey: null,
2165
2327
  stepTimeToConvert: []
2166
- }), Ct = (e, t, n) => ({
2167
- ...St(),
2328
+ }), Xt = (e, t, n) => ({
2329
+ ...Yt(),
2168
2330
  addFunnelStep: () => e((e) => {
2169
2331
  let t = e.funnelSteps[e.funnelSteps.length - 1], n = {
2170
- id: D(),
2332
+ id: S(),
2171
2333
  name: `Step ${e.funnelSteps.length + 1}`,
2172
2334
  cube: e.funnelCube || "",
2173
2335
  filters: t?.filters ? JSON.parse(JSON.stringify(t.filters)) : [],
@@ -2232,7 +2394,7 @@ var Q = {
2232
2394
  let e = t();
2233
2395
  return e.analysisType !== "funnel" || !e.funnelBindingKey || !e.funnelTimeDimension || e.funnelSteps.length < 2 ? !1 : e.funnelSteps.filter((e) => e.cube && e.name).length >= 2;
2234
2396
  }
2235
- }), wt = () => ({
2397
+ }), Zt = () => ({
2236
2398
  flowCube: null,
2237
2399
  flowBindingKey: null,
2238
2400
  flowTimeDimension: null,
@@ -2244,8 +2406,8 @@ var Q = {
2244
2406
  stepsAfter: 3,
2245
2407
  eventDimension: null,
2246
2408
  joinStrategy: "auto"
2247
- }), Tt = (e, t, n) => ({
2248
- ...wt(),
2409
+ }), Qt = (e, t, n) => ({
2410
+ ...Zt(),
2249
2411
  setFlowCube: (t) => e(() => ({
2250
2412
  flowCube: t,
2251
2413
  flowBindingKey: null,
@@ -2315,8 +2477,8 @@ var Q = {
2315
2477
  joinStrategy: e.joinStrategy
2316
2478
  } };
2317
2479
  }
2318
- }), Et = () => ({ ...oe }), Dt = (e, t, n) => ({
2319
- ...Et(),
2480
+ }), $t = () => ({ ...w }), en = (e, t, n) => ({
2481
+ ...$t(),
2320
2482
  setRetentionCube: (t) => e(() => ({
2321
2483
  retentionCube: t,
2322
2484
  retentionTimeDimension: null,
@@ -2391,22 +2553,22 @@ var Q = {
2391
2553
  warnings: r
2392
2554
  };
2393
2555
  }
2394
- }), Ot = {
2556
+ }), tn = {
2395
2557
  isOpen: !1,
2396
2558
  userPrompt: "",
2397
2559
  isGenerating: !1,
2398
2560
  error: null,
2399
2561
  hasGeneratedQuery: !1,
2400
2562
  previousState: null
2401
- }, kt = () => ({
2563
+ }, nn = () => ({
2402
2564
  activeTab: "query",
2403
2565
  activeView: "chart",
2404
2566
  displayLimit: 100,
2405
2567
  showFieldModal: !1,
2406
2568
  fieldModalMode: "metrics",
2407
- aiState: Ot
2408
- }), At = (e, t, n) => ({
2409
- ...kt(),
2569
+ aiState: tn
2570
+ }), rn = (e, t, n) => ({
2571
+ ...nn(),
2410
2572
  setActiveTab: (t) => e({ activeTab: t }),
2411
2573
  setActiveView: (t) => e((e) => ({
2412
2574
  activeView: t,
@@ -2490,19 +2652,19 @@ var Q = {
2490
2652
  displayConfig: t.displayConfig
2491
2653
  }
2492
2654
  },
2493
- aiState: { ...Ot }
2655
+ aiState: { ...tn }
2494
2656
  };
2495
2657
  })
2496
2658
  });
2497
2659
  //#endregion
2498
- //#region src/client/stores/analysisBuilderStore.tsx
2499
- function jt(e) {
2660
+ //#region src/client/stores/optionsToAnalysisConfig.ts
2661
+ function an(e) {
2500
2662
  let t = e.filters ? [...e.filters] : [], n = e.timeDimensions || [], r = [...(e.dimensions || []).map((e) => ({
2501
- id: D(),
2663
+ id: S(),
2502
2664
  field: e,
2503
2665
  isTimeDimension: !1
2504
2666
  })), ...n.map((e) => ({
2505
- id: D(),
2667
+ id: S(),
2506
2668
  field: e.dimension,
2507
2669
  granularity: e.granularity,
2508
2670
  isTimeDimension: !0,
@@ -2530,118 +2692,114 @@ function jt(e) {
2530
2692
  return {
2531
2693
  ...K(),
2532
2694
  metrics: (e.measures || []).map((e, t) => ({
2533
- id: D(),
2695
+ id: S(),
2534
2696
  field: e,
2535
- label: ae(t)
2697
+ label: d(t)
2536
2698
  })),
2537
2699
  breakdowns: r,
2538
2700
  filters: i,
2539
2701
  order: e.order
2540
2702
  };
2541
2703
  }
2542
- function Mt(e) {
2704
+ function on(e) {
2543
2705
  return "queries" in e && Array.isArray(e.queries);
2544
2706
  }
2545
- function Nt(e) {
2546
- if (e.initialAnalysisType === "funnel" && e.initialFunnelState) {
2547
- let t = O.getDefaultChartConfig();
2548
- return O.save({
2549
- funnelCube: e.initialFunnelState.funnelCube ?? null,
2550
- funnelSteps: e.initialFunnelState.funnelSteps || [],
2551
- activeFunnelStepIndex: 0,
2552
- funnelTimeDimension: e.initialFunnelState.funnelTimeDimension ?? null,
2553
- funnelBindingKey: e.initialFunnelState.funnelBindingKey ?? null
2554
- }, { funnel: {
2555
- chartType: e.initialChartConfig?.chartType || t.chartType,
2556
- chartConfig: e.initialChartConfig?.chartConfig || t.chartConfig,
2557
- displayConfig: e.initialChartConfig?.displayConfig || t.displayConfig
2558
- } }, e.initialActiveView || "chart");
2559
- }
2560
- if (e.initialAnalysisType === "flow" && e.initialFlowState) {
2561
- let t = P.getDefaultChartConfig();
2562
- return P.save({
2563
- flowCube: e.initialFlowState.flowCube ?? null,
2564
- flowBindingKey: e.initialFlowState.flowBindingKey ?? null,
2565
- flowTimeDimension: e.initialFlowState.flowTimeDimension ?? null,
2566
- startingStep: e.initialFlowState.startingStep || {
2567
- name: "",
2568
- filters: []
2569
- },
2570
- stepsBefore: e.initialFlowState.stepsBefore ?? 3,
2571
- stepsAfter: e.initialFlowState.stepsAfter ?? 3,
2572
- eventDimension: e.initialFlowState.eventDimension ?? null,
2573
- joinStrategy: e.initialFlowState.joinStrategy ?? "auto"
2574
- }, { flow: {
2575
- chartType: e.initialChartConfig?.chartType || t.chartType,
2576
- chartConfig: e.initialChartConfig?.chartConfig || t.chartConfig,
2577
- displayConfig: e.initialChartConfig?.displayConfig || t.displayConfig
2578
- } }, e.initialActiveView || "chart");
2579
- }
2580
- if (e.initialAnalysisType === "retention" && e.initialRetentionState) {
2581
- let t = N.getDefaultChartConfig(), n = {
2582
- chartType: e.initialChartConfig?.chartType || t.chartType,
2583
- chartConfig: e.initialChartConfig?.chartConfig || t.chartConfig,
2584
- displayConfig: e.initialChartConfig?.displayConfig || t.displayConfig
2585
- }, r = se(F);
2586
- return N.save({
2587
- retentionCube: e.initialRetentionState.retentionCube ?? null,
2588
- retentionBindingKey: e.initialRetentionState.retentionBindingKey ?? null,
2589
- retentionTimeDimension: e.initialRetentionState.retentionTimeDimension ?? null,
2590
- retentionDateRange: e.initialRetentionState.retentionDateRange ?? r,
2591
- retentionCohortFilters: e.initialRetentionState.retentionCohortFilters || [],
2592
- retentionActivityFilters: e.initialRetentionState.retentionActivityFilters || [],
2593
- retentionBreakdowns: e.initialRetentionState.retentionBreakdowns || [],
2594
- retentionViewGranularity: e.initialRetentionState.retentionViewGranularity ?? "week",
2595
- retentionPeriods: e.initialRetentionState.retentionPeriods ?? 12,
2596
- retentionType: e.initialRetentionState.retentionType ?? "classic"
2597
- }, { retention: n }, e.initialActiveView || "chart");
2598
- }
2599
- if (e.initialQuery) {
2600
- let t = e.initialQuery, n, r = "concat";
2601
- Mt(t) ? (n = t.queries.map(jt), t.mergeStrategy && (r = t.mergeStrategy)) : n = [jt(t)];
2602
- let i = X.getDefaultChartConfig();
2603
- return X.save({
2604
- queryStates: n,
2605
- activeQueryIndex: 0,
2606
- mergeStrategy: r
2607
- }, { query: {
2608
- chartType: e.initialChartConfig?.chartType || i.chartType,
2609
- chartConfig: e.initialChartConfig?.chartConfig || i.chartConfig,
2610
- displayConfig: e.initialChartConfig?.displayConfig || i.displayConfig
2611
- } }, e.initialActiveView || "chart");
2612
- }
2613
- if (e.initialChartConfig) {
2614
- let t = X.getDefaultChartConfig(), n = {
2615
- chartType: e.initialChartConfig.chartType || t.chartType,
2616
- chartConfig: e.initialChartConfig.chartConfig || t.chartConfig,
2617
- displayConfig: e.initialChartConfig.displayConfig || t.displayConfig
2618
- };
2619
- return X.save({
2620
- queryStates: [K()],
2621
- activeQueryIndex: 0,
2622
- mergeStrategy: "concat"
2623
- }, { query: n }, e.initialActiveView || "chart");
2624
- }
2625
- return e.initialActiveView ? X.save({
2707
+ function sn(e, t) {
2708
+ let n = e.getDefaultChartConfig();
2709
+ return {
2710
+ chartType: t?.chartType || n.chartType,
2711
+ chartConfig: t?.chartConfig || n.chartConfig,
2712
+ displayConfig: t?.displayConfig || n.displayConfig
2713
+ };
2714
+ }
2715
+ function cn(e) {
2716
+ return e.initialActiveView || "chart";
2717
+ }
2718
+ function ln(e) {
2719
+ let t = sn(h, e.initialChartConfig), n = e.initialFunnelState ?? {};
2720
+ return h.save({
2721
+ funnelCube: n.funnelCube ?? null,
2722
+ funnelSteps: n.funnelSteps || [],
2723
+ activeFunnelStepIndex: 0,
2724
+ funnelTimeDimension: n.funnelTimeDimension ?? null,
2725
+ funnelBindingKey: n.funnelBindingKey ?? null
2726
+ }, { funnel: t }, cn(e));
2727
+ }
2728
+ function un(e) {
2729
+ let t = sn(b, e.initialChartConfig), n = e.initialFlowState ?? {};
2730
+ return b.save({
2731
+ flowCube: n.flowCube ?? null,
2732
+ flowBindingKey: n.flowBindingKey ?? null,
2733
+ flowTimeDimension: n.flowTimeDimension ?? null,
2734
+ startingStep: n.startingStep || {
2735
+ name: "",
2736
+ filters: []
2737
+ },
2738
+ stepsBefore: n.stepsBefore ?? 3,
2739
+ stepsAfter: n.stepsAfter ?? 3,
2740
+ eventDimension: n.eventDimension ?? null,
2741
+ joinStrategy: n.joinStrategy ?? "auto"
2742
+ }, { flow: t }, cn(e));
2743
+ }
2744
+ function dn(e) {
2745
+ let t = sn(y, e.initialChartConfig), n = e.initialRetentionState ?? {}, r = T(E);
2746
+ return y.save({
2747
+ retentionCube: n.retentionCube ?? null,
2748
+ retentionBindingKey: n.retentionBindingKey ?? null,
2749
+ retentionTimeDimension: n.retentionTimeDimension ?? null,
2750
+ retentionDateRange: n.retentionDateRange ?? r,
2751
+ retentionCohortFilters: n.retentionCohortFilters || [],
2752
+ retentionActivityFilters: n.retentionActivityFilters || [],
2753
+ retentionBreakdowns: n.retentionBreakdowns || [],
2754
+ retentionViewGranularity: n.retentionViewGranularity ?? "week",
2755
+ retentionPeriods: n.retentionPeriods ?? 12,
2756
+ retentionType: n.retentionType ?? "classic"
2757
+ }, { retention: t }, cn(e));
2758
+ }
2759
+ function fn(e, t) {
2760
+ let n, r = "concat";
2761
+ on(t) ? (n = t.queries.map(an), t.mergeStrategy && (r = t.mergeStrategy)) : n = [an(t)];
2762
+ let i = sn(X, e.initialChartConfig);
2763
+ return X.save({
2764
+ queryStates: n,
2765
+ activeQueryIndex: 0,
2766
+ mergeStrategy: r
2767
+ }, { query: i }, cn(e));
2768
+ }
2769
+ function pn(e) {
2770
+ let t = sn(X, e.initialChartConfig);
2771
+ return X.save({
2772
+ queryStates: [K()],
2773
+ activeQueryIndex: 0,
2774
+ mergeStrategy: "concat"
2775
+ }, { query: t }, cn(e));
2776
+ }
2777
+ function mn(e) {
2778
+ return X.save({
2626
2779
  queryStates: [K()],
2627
2780
  activeQueryIndex: 0,
2628
2781
  mergeStrategy: "concat"
2629
- }, { query: X.getDefaultChartConfig() }, e.initialActiveView) : null;
2782
+ }, { query: X.getDefaultChartConfig() }, e.initialActiveView);
2783
+ }
2784
+ function hn(e) {
2785
+ return e.initialAnalysisType === "funnel" && e.initialFunnelState ? ln(e) : e.initialAnalysisType === "flow" && e.initialFlowState ? un(e) : e.initialAnalysisType === "retention" && e.initialRetentionState ? dn(e) : e.initialQuery ? fn(e, e.initialQuery) : e.initialChartConfig ? pn(e) : e.initialActiveView ? mn(e) : null;
2630
2786
  }
2631
- function Pt(e, t) {
2787
+ //#endregion
2788
+ //#region src/client/stores/analysisBuilderStore.tsx
2789
+ function gn(e, t) {
2632
2790
  return {
2633
2791
  reset: () => {
2634
2792
  e({
2635
- ...vt(),
2636
- ...bt(),
2637
- ...St(),
2638
- ...wt(),
2639
- ...Et(),
2793
+ ...Gt(),
2794
+ ...qt(),
2795
+ ...Yt(),
2796
+ ...Zt(),
2797
+ ...$t(),
2640
2798
  charts: {
2641
2799
  query: X.getDefaultChartConfig(),
2642
- funnel: O.getDefaultChartConfig(),
2643
- flow: P.getDefaultChartConfig(),
2644
- retention: N.getDefaultChartConfig()
2800
+ funnel: h.getDefaultChartConfig(),
2801
+ flow: b.getDefaultChartConfig(),
2802
+ retention: y.getDefaultChartConfig()
2645
2803
  },
2646
2804
  activeViews: {
2647
2805
  query: "chart",
@@ -2654,28 +2812,28 @@ function Pt(e, t) {
2654
2812
  clearCurrentMode: () => e((e) => {
2655
2813
  switch (e.analysisType) {
2656
2814
  case "funnel": return {
2657
- ...St(),
2815
+ ...Yt(),
2658
2816
  charts: {
2659
2817
  ...e.charts,
2660
- funnel: O.getDefaultChartConfig()
2818
+ funnel: h.getDefaultChartConfig()
2661
2819
  }
2662
2820
  };
2663
2821
  case "flow": return {
2664
- ...wt(),
2822
+ ...Zt(),
2665
2823
  charts: {
2666
2824
  ...e.charts,
2667
- flow: P.getDefaultChartConfig()
2825
+ flow: b.getDefaultChartConfig()
2668
2826
  }
2669
2827
  };
2670
2828
  case "retention": return {
2671
- ...Et(),
2829
+ ...$t(),
2672
2830
  charts: {
2673
2831
  ...e.charts,
2674
- retention: N.getDefaultChartConfig()
2832
+ retention: y.getDefaultChartConfig()
2675
2833
  }
2676
2834
  };
2677
2835
  default: return {
2678
- ...bt(),
2836
+ ...qt(),
2679
2837
  userManuallySelectedChart: !1,
2680
2838
  charts: {
2681
2839
  ...e.charts,
@@ -2701,15 +2859,15 @@ function Pt(e, t) {
2701
2859
  }
2702
2860
  };
2703
2861
  }
2704
- function Ft(n = {}) {
2705
- let r = Nt(n), o = (e, t, n) => ({
2706
- ...yt(e, t, n),
2707
- ...xt(e, t, n),
2708
- ...Ct(e, t, n),
2709
- ...Tt(e, t, n),
2710
- ...Dt(e, t, n),
2711
- ...At(e, t, n),
2712
- ...Pt(e, t)
2862
+ function _n(n = {}) {
2863
+ let r = hn(n), o = (e, t, n) => ({
2864
+ ...Kt(e, t, n),
2865
+ ...Jt(e, t, n),
2866
+ ...Xt(e, t, n),
2867
+ ...Qt(e, t, n),
2868
+ ...en(e, t, n),
2869
+ ...rn(e, t, n),
2870
+ ...gn(e, t)
2713
2871
  });
2714
2872
  if (n.disableLocalStorage) {
2715
2873
  let t = a()(i(e(o), { name: "AnalysisBuilderStore (no-persist)" }));
@@ -2718,10 +2876,10 @@ function Ft(n = {}) {
2718
2876
  return a()(i(e(t(o, {
2719
2877
  name: n.storageKey || "drizzle-cube-analysis-builder-v3",
2720
2878
  partialize: (e) => e.saveWorkspace(),
2721
- merge: (e, t) => e && A(e) ? {
2879
+ merge: (e, t) => e && m(e) ? {
2722
2880
  ...t,
2723
2881
  _persistedWorkspace: e
2724
- } : e && k(e) ? {
2882
+ } : e && v(e) ? {
2725
2883
  ...t,
2726
2884
  _persistedConfig: e
2727
2885
  } : r ? {
@@ -2744,10 +2902,10 @@ function Ft(n = {}) {
2744
2902
  }
2745
2903
  })), { name: "AnalysisBuilderStore" }));
2746
2904
  }
2747
- var It = le(null);
2748
- function Lt({ children: e, initialQuery: t, initialChartConfig: n, disableLocalStorage: r, storageKey: i, initialAnalysisType: a, initialFunnelState: o, initialFlowState: s, initialRetentionState: c, initialActiveView: l }) {
2749
- let u = V(null);
2750
- return u.current ||= Ft({
2905
+ var vn = P(null);
2906
+ function yn({ children: e, initialQuery: t, initialChartConfig: n, disableLocalStorage: r, storageKey: i, initialAnalysisType: a, initialFunnelState: o, initialFlowState: s, initialRetentionState: c, initialActiveView: l }) {
2907
+ let u = z(null);
2908
+ return u.current ||= _n({
2751
2909
  initialQuery: t,
2752
2910
  initialChartConfig: n,
2753
2911
  disableLocalStorage: r,
@@ -2757,22 +2915,22 @@ function Lt({ children: e, initialQuery: t, initialChartConfig: n, disableLocalS
2757
2915
  initialFlowState: s,
2758
2916
  initialRetentionState: c,
2759
2917
  initialActiveView: l
2760
- }), /* @__PURE__ */ W(It.Provider, {
2918
+ }), /* @__PURE__ */ H(vn.Provider, {
2761
2919
  value: u.current,
2762
2920
  children: e
2763
2921
  });
2764
2922
  }
2765
2923
  function $(e) {
2766
- let t = ue(It);
2924
+ let t = pe(vn);
2767
2925
  if (!t) throw Error("useAnalysisBuilderStore must be used within AnalysisBuilderStoreProvider");
2768
2926
  return r(t, e);
2769
2927
  }
2770
- function Rt() {
2771
- let e = ue(It);
2928
+ function bn() {
2929
+ let e = pe(vn);
2772
2930
  if (!e) throw Error("useAnalysisBuilderStoreApi must be used within AnalysisBuilderStoreProvider");
2773
2931
  return e;
2774
2932
  }
2775
- var zt = (e) => e.queryStates[e.activeQueryIndex] || K(), Bt = (e) => zt(e).metrics, Vt = (e) => zt(e).breakdowns, Ht = (e) => zt(e).filters, Ut = (e) => {
2933
+ var xn = (e) => e.queryStates[e.activeQueryIndex] || K(), Sn = (e) => xn(e).metrics, Cn = (e) => xn(e).breakdowns, wn = (e) => xn(e).filters, Tn = (e) => {
2776
2934
  let t = e.charts[e.analysisType];
2777
2935
  return t ? {
2778
2936
  chartType: t.chartType,
@@ -2787,18 +2945,18 @@ var zt = (e) => e.queryStates[e.activeQueryIndex] || K(), Bt = (e) => zt(e).metr
2787
2945
  showTooltip: !0
2788
2946
  }
2789
2947
  };
2790
- }, Wt = (e) => ({
2948
+ }, En = (e) => ({
2791
2949
  activeTab: e.activeTab,
2792
2950
  activeView: e.activeView,
2793
2951
  displayLimit: e.displayLimit,
2794
2952
  showFieldModal: e.showFieldModal,
2795
2953
  fieldModalMode: e.fieldModalMode
2796
- }), Gt = (e) => ({
2954
+ }), Dn = (e) => ({
2797
2955
  queryStates: e.queryStates,
2798
2956
  activeQueryIndex: e.activeQueryIndex,
2799
2957
  mergeStrategy: e.mergeStrategy,
2800
2958
  isMultiQueryMode: e.analysisType === "query" && e.queryStates.length > 1
2801
- }), Kt = (e) => ({
2959
+ }), On = (e) => ({
2802
2960
  funnelCube: e.funnelCube,
2803
2961
  funnelSteps: e.funnelSteps,
2804
2962
  activeFunnelStepIndex: e.activeFunnelStepIndex,
@@ -2809,16 +2967,16 @@ var zt = (e) => e.queryStates[e.activeQueryIndex] || K(), Bt = (e) => zt(e).metr
2809
2967
  });
2810
2968
  //#endregion
2811
2969
  //#region src/client/utils/multiQueryValidation.ts
2812
- function qt(e) {
2970
+ function kn(e) {
2813
2971
  return e.timeDimensions || [];
2814
2972
  }
2815
- function Jt(e) {
2973
+ function An(e) {
2816
2974
  let t = [];
2817
2975
  if (e.length < 2) return t;
2818
- let n = qt(e[0]);
2976
+ let n = kn(e[0]);
2819
2977
  if (n.length === 0) return t;
2820
2978
  for (let r = 1; r < e.length; r++) {
2821
- let i = qt(e[r]);
2979
+ let i = kn(e[r]);
2822
2980
  if (i.length === 0 && n.length > 0) {
2823
2981
  t.push({
2824
2982
  type: "missing_time_dimension",
@@ -2844,7 +3002,7 @@ function Jt(e) {
2844
3002
  }
2845
3003
  return t;
2846
3004
  }
2847
- function Yt(e, t) {
3005
+ function jn(e, t) {
2848
3006
  let n = [];
2849
3007
  if (e.length < 2 || t.length === 0) return n;
2850
3008
  for (let r = 0; r < e.length; r++) {
@@ -2858,7 +3016,7 @@ function Yt(e, t) {
2858
3016
  }
2859
3017
  return n;
2860
3018
  }
2861
- function Xt(e) {
3019
+ function Mn(e) {
2862
3020
  let t = [];
2863
3021
  if (e.length < 2) return t;
2864
3022
  let n = /* @__PURE__ */ new Map();
@@ -2877,7 +3035,7 @@ function Xt(e) {
2877
3035
  affectedMeasures: r
2878
3036
  }), t;
2879
3037
  }
2880
- function Zt(e) {
3038
+ function Nn(e) {
2881
3039
  let t = [];
2882
3040
  if (e.length < 2) return t;
2883
3041
  let n = e.map((e) => e.timeDimensions?.[0]?.dateRange);
@@ -2887,39 +3045,45 @@ function Zt(e) {
2887
3045
  message: "Queries have different date ranges - some data points may be missing in merged results"
2888
3046
  }), t;
2889
3047
  }
2890
- function Qt(e, t, n = []) {
3048
+ function Pn(e, t, n = []) {
2891
3049
  let r = [], i = [];
2892
3050
  return e.length < 2 ? {
2893
3051
  isValid: !0,
2894
3052
  errors: r,
2895
3053
  warnings: i
2896
- } : (i.push(...Xt(e)), i.push(...Zt(e)), t === "merge" && (r.push(...Jt(e)), n.length > 0 && r.push(...Yt(e, n))), {
3054
+ } : (i.push(...Mn(e)), i.push(...Nn(e)), t === "merge" && (r.push(...An(e)), n.length > 0 && r.push(...jn(e, n))), {
2897
3055
  isValid: r.length === 0,
2898
3056
  errors: r,
2899
3057
  warnings: i
2900
3058
  });
2901
3059
  }
2902
- function $t(e) {
2903
- return e.filter((e) => (e.measures?.length || 0) + (e.dimensions?.length || 0) + (e.timeDimensions?.length || 0) > 0).length >= 2;
3060
+ function Fn(e) {
3061
+ return (e.measures?.length || 0) + (e.dimensions?.length || 0) + (e.timeDimensions?.length || 0);
2904
3062
  }
2905
- function en(e) {
3063
+ function In(e) {
3064
+ return e.filter((e) => Fn(e) > 0).length >= 2;
3065
+ }
3066
+ function Ln(e, t) {
3067
+ return `${e} ${t}${e === 1 ? "" : "s"}`;
3068
+ }
3069
+ function Rn(e) {
2906
3070
  if (e.isValid && e.warnings.length === 0) return "Configuration is valid";
2907
3071
  let t = [];
2908
- return e.errors.length > 0 && t.push(`${e.errors.length} error${e.errors.length > 1 ? "s" : ""}`), e.warnings.length > 0 && t.push(`${e.warnings.length} warning${e.warnings.length > 1 ? "s" : ""}`), t.join(", ");
3072
+ return e.errors.length > 0 && t.push(Ln(e.errors.length, "error")), e.warnings.length > 0 && t.push(Ln(e.warnings.length, "warning")), t.join(", ");
2909
3073
  }
2910
3074
  //#endregion
2911
3075
  //#region src/client/hooks/useAnalysisQueryBuilder.ts
2912
- function tn() {
2913
- let e = $((e) => e.queryStates), t = $((e) => e.activeQueryIndex), n = $((e) => e.mergeStrategy), r = $((e) => e.setActiveQueryIndex), i = $((e) => e.setMergeStrategy), a = $((e) => e.addQuery), o = $((e) => e.removeQuery), s = $((e) => e.getCurrentState), c = $((e) => e.getMergeKeys), l = $((e) => e.isMultiQueryMode), u = s(), d = l(), f = c(), p = B(() => {
3076
+ function zn() {
3077
+ let e = $((e) => e.queryStates), t = $((e) => e.activeQueryIndex), n = $((e) => e.mergeStrategy), r = $((e) => e.setActiveQueryIndex), i = $((e) => e.setMergeStrategy), a = $((e) => e.addQuery), o = $((e) => e.removeQuery), s = $((e) => e.getCurrentState), c = $((e) => e.getMergeKeys), l = $((e) => e.isMultiQueryMode), u = s(), d = l(), f = c(), p = R(() => {
2914
3078
  let n = e[t] || u;
2915
- return ve(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
3079
+ return G(n.metrics, n.breakdowns, n.filters, n.order, !1, n.limit);
2916
3080
  }, [
2917
3081
  e,
2918
3082
  t,
2919
3083
  u
2920
- ]), m = B(() => {
3084
+ ]), m = R(() => {
2921
3085
  let t = e[0]?.breakdowns || [];
2922
- return e.map((e, r) => ve(e.metrics, n === "merge" && r > 0 ? t : e.breakdowns, e.filters, e.order, !1, e.limit));
3086
+ return e.map((e, r) => G(e.metrics, n === "merge" && r > 0 ? t : e.breakdowns, e.filters, e.order, !1, e.limit));
2923
3087
  }, [e, n]);
2924
3088
  return {
2925
3089
  queryState: u,
@@ -2930,7 +3094,7 @@ function tn() {
2930
3094
  mergeKeys: f,
2931
3095
  currentQuery: p,
2932
3096
  allQueries: m,
2933
- multiQueryConfig: B(() => {
3097
+ multiQueryConfig: R(() => {
2934
3098
  if (e.length <= 1) return null;
2935
3099
  let t = m.filter((e) => e.measures && e.measures.length > 0 || e.dimensions && e.dimensions.length > 0 || e.timeDimensions && e.timeDimensions.length > 0);
2936
3100
  return t.length < 2 ? null : {
@@ -2945,13 +3109,13 @@ function tn() {
2945
3109
  n,
2946
3110
  f
2947
3111
  ]),
2948
- multiQueryValidation: B(() => d ? Qt(m, n, f || []) : null, [
3112
+ multiQueryValidation: R(() => d ? Pn(m, n, f || []) : null, [
2949
3113
  d,
2950
3114
  m,
2951
3115
  n,
2952
3116
  f
2953
3117
  ]),
2954
- isValidQuery: B(() => p.measures && p.measures.length > 0 || p.dimensions && p.dimensions.length > 0 || p.timeDimensions && p.timeDimensions.length > 0, [p]),
3118
+ isValidQuery: R(() => p.measures && p.measures.length > 0 || p.dimensions && p.dimensions.length > 0 || p.timeDimensions && p.timeDimensions.length > 0, [p]),
2955
3119
  setActiveQueryIndex: r,
2956
3120
  setMergeStrategy: i,
2957
3121
  addQuery: a,
@@ -2960,10 +3124,10 @@ function tn() {
2960
3124
  }
2961
3125
  //#endregion
2962
3126
  //#region src/client/hooks/useAnalysisCombinedFields.ts
2963
- function nn(e) {
3127
+ function Bn(e) {
2964
3128
  let { queryState: t, queryStates: n, isMultiQueryMode: r, mergeStrategy: i, activeQueryIndex: a } = e;
2965
3129
  return {
2966
- combinedMetrics: B(() => {
3130
+ combinedMetrics: R(() => {
2967
3131
  if (!r) return t.metrics;
2968
3132
  let e = /* @__PURE__ */ new Set(), i = [];
2969
3133
  for (let t = 0; t < n.length; t++) {
@@ -2982,7 +3146,7 @@ function nn(e) {
2982
3146
  n,
2983
3147
  t.metrics
2984
3148
  ]),
2985
- combinedBreakdowns: B(() => {
3149
+ combinedBreakdowns: R(() => {
2986
3150
  if (!r) return t.breakdowns;
2987
3151
  let e = /* @__PURE__ */ new Set(), i = [];
2988
3152
  for (let t of n) for (let n of t.breakdowns) e.has(n.field) || (e.add(n.field), i.push(n));
@@ -2992,7 +3156,7 @@ function nn(e) {
2992
3156
  n,
2993
3157
  t.breakdowns
2994
3158
  ]),
2995
- effectiveBreakdowns: B(() => i === "merge" && a > 0 ? n[0]?.breakdowns || [] : t.breakdowns, [
3159
+ effectiveBreakdowns: R(() => i === "merge" && a > 0 ? n[0]?.breakdowns || [] : t.breakdowns, [
2996
3160
  i,
2997
3161
  a,
2998
3162
  n,
@@ -3001,158 +3165,276 @@ function nn(e) {
3001
3165
  };
3002
3166
  }
3003
3167
  //#endregion
3168
+ //#region src/client/hooks/analysisQueryExecutionModes.ts
3169
+ function Vn(e) {
3170
+ return e.isRetentionMode ? "retention" : e.isFlowMode ? "flow" : e.isFunnelMode ? "funnel" : e.isMultiMode ? "multi" : "single";
3171
+ }
3172
+ function Hn(e, t) {
3173
+ return t[e];
3174
+ }
3175
+ function Un(e) {
3176
+ return {
3177
+ funnelExecutedQueries: e.isFunnelMode && e.funnelExecutedQueries && e.funnelExecutedQueries.length > 0 ? e.funnelExecutedQueries : null,
3178
+ funnelServerQuery: e.isFunnelMode ? e.funnelServerQuery : null,
3179
+ funnelDebugData: e.isFunnelMode ? e.funnelDebugData : null,
3180
+ flowServerQuery: e.isFlowMode ? e.flowServerQuery : null,
3181
+ flowChartData: e.isFlowMode ? e.flowData : null,
3182
+ flowDebugData: e.isFlowMode ? e.flowDebugData : null,
3183
+ retentionServerQuery: e.isRetentionMode ? e.retentionServerQuery : null,
3184
+ retentionChartData: e.isRetentionMode ? e.retentionChartData : null,
3185
+ retentionDebugData: e.isRetentionMode ? e.retentionDebugData : null
3186
+ };
3187
+ }
3188
+ function Wn(e) {
3189
+ return {
3190
+ single: !e.isValidQuery || !e.isSingleMode,
3191
+ multi: !e.hasMultiQueryConfig || !e.isMultiMode,
3192
+ funnel: !e.isFunnelMode || !e.hasFunnelConfig && !e.hasServerFunnelQuery,
3193
+ flow: !e.isFlowMode || !e.hasServerFlowQuery,
3194
+ retention: !e.isRetentionMode || !e.hasServerRetentionQuery,
3195
+ dryRun: !!(!e.isValidQuery || e.isFunnelMode || e.isFlowMode || e.isRetentionMode)
3196
+ };
3197
+ }
3198
+ function Gn(e) {
3199
+ let { hasResults: t, initialData: n, isValidQuery: r, isLoading: i, isFetching: a, error: o } = e;
3200
+ return n && n.length > 0 && !t ? "success" : r ? i && !t ? "loading" : a && t ? "refreshing" : o ? "error" : t ? "success" : "idle" : "idle";
3201
+ }
3202
+ function Kn(e) {
3203
+ return e.isRetentionMode && e.retentionChartData ? e.retentionChartData.rows.map((e) => ({
3204
+ "Retention.period": `P${e.period}`,
3205
+ "Retention.rate": e.retentionRate,
3206
+ "Retention.retained": e.retainedUsers,
3207
+ "Retention.cohortSize": e.cohortSize,
3208
+ "Retention.segment": e.breakdownValue || "All Users"
3209
+ })) : e.isFlowMode && e.flowData ? [e.flowData] : e.isFunnelMode && e.funnelChartData ? e.funnelChartData : e.isMultiMode && e.multiData ? e.multiData : e.singleRawData ? e.singleRawData : e.initialData && e.initialData.length > 0 ? e.initialData : null;
3210
+ }
3211
+ //#endregion
3004
3212
  //#region src/client/hooks/useAnalysisQueryExecution.ts
3005
- function rn(e) {
3006
- 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: m, retentionValidation: _ } = e, { getFieldLabel: y } = te(), b = u === "funnel" || l, w = u === "flow", T = u === "retention", E = u === "query" && i, ne = u === "query" && !i, D = u === "funnel" && !!d, O = B(() => D || !b || !c || n.length < 2 ? null : ee(n, c), [
3007
- D,
3008
- b,
3213
+ function qn(e) {
3214
+ let { currentQuery: t, allQueries: n, multiQueryConfig: r, isMultiQueryMode: i, isValidQuery: a, initialData: o, mergeStrategy: s, funnelBindingKey: c, isFunnelModeEnabled: l, analysisType: u, serverFunnelQuery: d, serverFlowQuery: f, serverRetentionQuery: p, retentionValidation: m } = e, { getFieldLabel: h } = ee(), g = u === "funnel" || l, _ = u === "flow", v = u === "retention", y = u === "query" && i, b = u === "query" && !i, x = u === "funnel" && !!d, S = Vn({
3215
+ isRetentionMode: v,
3216
+ isFlowMode: _,
3217
+ isFunnelMode: g,
3218
+ isMultiMode: y
3219
+ }), C = R(() => x || !g || !c || n.length < 2 ? null : fe(n, c), [
3220
+ x,
3221
+ g,
3009
3222
  c,
3010
3223
  n
3011
- ]), k = p(t, {
3012
- skip: !a || !ne,
3224
+ ]), w = Wn({
3225
+ isValidQuery: a,
3226
+ isSingleMode: b,
3227
+ isMultiMode: y,
3228
+ isFunnelMode: g,
3229
+ isFlowMode: _,
3230
+ isRetentionMode: v,
3231
+ hasMultiQueryConfig: !!r,
3232
+ hasFunnelConfig: !!C,
3233
+ hasServerFunnelQuery: !!d,
3234
+ hasServerFlowQuery: !!f,
3235
+ hasServerRetentionQuery: !!p
3236
+ }), T = ne(t, {
3237
+ skip: w.single,
3013
3238
  debounceMs: 300
3014
- }), A = g(r, {
3015
- skip: !r || !E,
3239
+ }), E = ie(r, {
3240
+ skip: w.multi,
3016
3241
  debounceMs: 300
3017
- }), j = v(O, {
3018
- skip: !b || !O && !d,
3242
+ }), D = oe(C, {
3243
+ skip: w.funnel,
3019
3244
  debounceMs: 300,
3020
- prebuiltServerQuery: D ? d : void 0
3021
- }), M = x(f ?? null, {
3022
- skip: !w || !f,
3245
+ prebuiltServerQuery: x ? d : void 0
3246
+ }), O = le(f ?? null, {
3247
+ skip: w.flow,
3023
3248
  debounceMs: 300
3024
- }), N = h(m ?? null, {
3025
- skip: !T || !m,
3249
+ }), k = re(p ?? null, {
3250
+ skip: w.retention,
3026
3251
  debounceMs: 300,
3027
- getFieldLabel: y
3028
- }), P = C({
3252
+ getFieldLabel: h
3253
+ }), te = de({
3029
3254
  queries: i ? n : [t],
3030
3255
  isMultiQueryMode: i,
3031
- skip: !a || b || w || T
3032
- }), re = S(j.serverQuery, { skip: !b || !j.serverQuery }), ie = S(M.serverQuery, { skip: !w || !M.serverQuery }), ae = S(m, { skip: !T || !m }), oe = T ? N.isLoading || N.isDebouncing : w ? M.isLoading || M.isDebouncing : b ? j.isExecuting || j.isDebouncing : E ? A.isLoading : k.isLoading, se = T ? N.isFetching : w ? M.isFetching : b ? j.isExecuting : E ? A.isFetching : k.isFetching, F = T ? N.error : w ? M.error : b ? j.error : E ? A.error : k.error, ce = !!(k.debouncedQuery || A.debouncedConfig || !j.isDebouncing || !M.isDebouncing || !N.isDebouncing), I = R((e) => {
3033
- T ? N.execute(e) : w ? M.refetch(e) : b ? j.execute(e) : E ? A.refetch(e) : k.refetch(e);
3256
+ skip: w.dryRun
3257
+ }), A = ue(D.serverQuery, { skip: !g || !D.serverQuery }), ae = ue(O.serverQuery, { skip: !_ || !O.serverQuery }), se = ue(p, { skip: !v || !p }), ce = Hn(S, {
3258
+ retention: k.isLoading || k.isDebouncing,
3259
+ flow: O.isLoading || O.isDebouncing,
3260
+ funnel: D.isExecuting || D.isDebouncing,
3261
+ multi: E.isLoading,
3262
+ single: T.isLoading
3263
+ }), j = Hn(S, {
3264
+ retention: k.isFetching,
3265
+ flow: O.isFetching,
3266
+ funnel: D.isExecuting,
3267
+ multi: E.isFetching,
3268
+ single: T.isFetching
3269
+ }), M = Hn(S, {
3270
+ retention: k.error,
3271
+ flow: O.error,
3272
+ funnel: D.error,
3273
+ multi: E.error,
3274
+ single: T.error
3275
+ }), N = !!(T.debouncedQuery || E.debouncedConfig || !D.isDebouncing || !O.isDebouncing || !k.isDebouncing), P = I((e) => {
3276
+ switch (S) {
3277
+ case "retention":
3278
+ k.execute(e);
3279
+ break;
3280
+ case "flow":
3281
+ O.refetch(e);
3282
+ break;
3283
+ case "funnel":
3284
+ D.execute(e);
3285
+ break;
3286
+ case "multi":
3287
+ E.refetch(e);
3288
+ break;
3289
+ default: T.refetch(e);
3290
+ }
3034
3291
  }, [
3035
- T,
3036
- w,
3037
- b,
3292
+ S,
3293
+ k,
3294
+ O,
3295
+ D,
3038
3296
  E,
3039
- N,
3040
- M,
3041
- j,
3042
- A,
3043
- k
3044
- ]), le = B(() => {
3045
- let e = T ? N.chartData : w ? M.data : b ? j.chartData : E ? A.data : k.rawData;
3046
- return o && o.length > 0 && !e ? "success" : a ? oe && !e ? "loading" : se && e ? "refreshing" : F ? "error" : e ? "success" : "idle" : "idle";
3047
- }, [
3297
+ T
3298
+ ]), F = R(() => Gn({
3299
+ hasResults: Hn(S, {
3300
+ retention: k.chartData,
3301
+ flow: O.data,
3302
+ funnel: D.chartData,
3303
+ multi: E.data,
3304
+ single: T.rawData
3305
+ }),
3306
+ initialData: o,
3307
+ isValidQuery: a,
3308
+ isLoading: ce,
3309
+ isFetching: j,
3310
+ error: M
3311
+ }), [
3048
3312
  a,
3049
- oe,
3050
- se,
3051
- F,
3052
- k.rawData,
3053
- A.data,
3054
- j.chartData,
3055
- M.data,
3056
- N.chartData,
3313
+ ce,
3314
+ j,
3315
+ M,
3316
+ T.rawData,
3317
+ E.data,
3318
+ D.chartData,
3319
+ O.data,
3320
+ k.chartData,
3057
3321
  o,
3058
- E,
3059
- b,
3060
- w,
3061
- T
3062
- ]), L = B(() => T && N.chartData ? N.chartData.rows.map((e) => ({
3063
- "Retention.period": `P${e.period}`,
3064
- "Retention.rate": e.retentionRate,
3065
- "Retention.retained": e.retainedUsers,
3066
- "Retention.cohortSize": e.cohortSize,
3067
- "Retention.segment": e.breakdownValue || "All Users"
3068
- })) : w && M.data ? [M.data] : b && j.chartData ? j.chartData : E && A.data ? A.data : k.rawData ? k.rawData : o && o.length > 0 ? o : null, [
3069
- k.rawData,
3070
- A.data,
3071
- j.chartData,
3072
- M.data,
3073
- N.chartData,
3322
+ S
3323
+ ]), pe = R(() => Kn({
3324
+ isRetentionMode: v,
3325
+ isFlowMode: _,
3326
+ isFunnelMode: g,
3327
+ isMultiMode: y,
3328
+ retentionChartData: k.chartData,
3329
+ flowData: O.data,
3330
+ funnelChartData: D.chartData,
3331
+ multiData: E.data,
3332
+ singleRawData: T.rawData,
3333
+ initialData: o
3334
+ }), [
3335
+ T.rawData,
3336
+ E.data,
3337
+ D.chartData,
3338
+ O.data,
3339
+ k.chartData,
3074
3340
  o,
3075
- E,
3076
- b,
3077
- w,
3078
- T
3079
- ]), ue = B(() => b && j.stepResults ? j.stepResults.map((e) => e.data) : !E || !A.perQueryData ? null : A.perQueryData, [
3080
- E,
3081
- b,
3082
- A.perQueryData,
3083
- j.stepResults
3084
- ]), z = b && j.executedQueries?.length > 0 ? j.executedQueries : null, V = b ? j.serverQuery : null, H = b ? re.debugData : null, U = w ? M.serverQuery : null, W = w ? M.data : null, G = w ? ie.debugData : null, de = T ? m ?? null : null, fe = T ? N.chartData : null, pe = T ? ae.debugData : null, me = B(() => T ? N.needsRefresh : w ? M.needsRefresh : b ? j.needsRefresh : E ? !1 : k.needsRefresh, [
3085
- T,
3086
- w,
3087
- b,
3088
- E,
3089
- N.needsRefresh,
3090
- M.needsRefresh,
3091
- j.needsRefresh,
3092
- k.needsRefresh
3093
- ]), he = B(() => {
3094
- if (ne && k.warnings) return k.warnings;
3095
- }, [ne, k.warnings]);
3341
+ y,
3342
+ g,
3343
+ _,
3344
+ v
3345
+ ]), L = R(() => g && D.stepResults ? D.stepResults.map((e) => e.data) : !y || !E.perQueryData ? null : E.perQueryData, [
3346
+ y,
3347
+ g,
3348
+ E.perQueryData,
3349
+ D.stepResults
3350
+ ]), { funnelExecutedQueries: z, funnelServerQuery: B, funnelDebugData: V, flowServerQuery: H, flowChartData: U, flowDebugData: me, retentionServerQuery: W, retentionChartData: he, retentionDebugData: ge } = Un({
3351
+ isFunnelMode: g,
3352
+ isFlowMode: _,
3353
+ isRetentionMode: v,
3354
+ funnelExecutedQueries: D.executedQueries,
3355
+ funnelServerQuery: D.serverQuery,
3356
+ funnelDebugData: A.debugData,
3357
+ flowServerQuery: O.serverQuery,
3358
+ flowData: O.data,
3359
+ flowDebugData: ae.debugData,
3360
+ retentionServerQuery: p ?? null,
3361
+ retentionChartData: k.chartData,
3362
+ retentionDebugData: se.debugData
3363
+ }), _e = R(() => Hn(S, {
3364
+ retention: k.needsRefresh,
3365
+ flow: O.needsRefresh,
3366
+ funnel: D.needsRefresh,
3367
+ multi: !1,
3368
+ single: T.needsRefresh
3369
+ }), [
3370
+ S,
3371
+ k.needsRefresh,
3372
+ O.needsRefresh,
3373
+ D.needsRefresh,
3374
+ T.needsRefresh
3375
+ ]), ve = R(() => {
3376
+ if (b && T.warnings) return T.warnings;
3377
+ }, [b, T.warnings]);
3096
3378
  return {
3097
- executionStatus: le,
3098
- executionResults: L,
3099
- perQueryResults: ue,
3100
- isLoading: oe,
3101
- isFetching: se,
3102
- error: F,
3103
- debugDataPerQuery: P.debugDataPerQuery,
3104
- hasDebounced: ce,
3105
- refetch: I,
3379
+ executionStatus: F,
3380
+ executionResults: pe,
3381
+ perQueryResults: L,
3382
+ isLoading: ce,
3383
+ isFetching: j,
3384
+ error: M,
3385
+ debugDataPerQuery: te.debugDataPerQuery,
3386
+ hasDebounced: N,
3387
+ refetch: P,
3106
3388
  funnelExecutedQueries: z,
3107
- funnelServerQuery: V,
3108
- funnelDebugData: H,
3109
- flowServerQuery: U,
3110
- flowChartData: W,
3111
- flowDebugData: G,
3112
- retentionServerQuery: de,
3113
- retentionChartData: fe,
3114
- retentionDebugData: pe,
3115
- retentionValidation: _ ?? null,
3116
- needsRefresh: me,
3117
- warnings: he
3389
+ funnelServerQuery: B,
3390
+ funnelDebugData: V,
3391
+ flowServerQuery: H,
3392
+ flowChartData: U,
3393
+ flowDebugData: me,
3394
+ retentionServerQuery: W,
3395
+ retentionChartData: he,
3396
+ retentionDebugData: ge,
3397
+ retentionValidation: m ?? null,
3398
+ needsRefresh: _e,
3399
+ warnings: ve
3118
3400
  };
3119
3401
  }
3120
3402
  //#endregion
3121
3403
  //#region src/client/hooks/useAnalysisChartDefaults.ts
3122
- function an(e) {
3123
- let { externalColorPalette: t, combinedMetrics: r, combinedBreakdowns: i, hasDebounced: a } = e, o = $((e) => e.analysisType), { chartType: s, chartConfig: c, displayConfig: l } = $(n(Ut)), u = $((e) => e.userManuallySelectedChart), d = $((e) => e.localPaletteName), f = $((e) => e.setChartTypeManual), p = $((e) => e.setChartConfig), m = $((e) => e.setDisplayConfig), h = $((e) => e.setFunnelChartType), g = $((e) => e.setFunnelChartConfig), _ = $((e) => e.setFunnelDisplayConfig), v = $((e) => e.setLocalPaletteName), y = $((e) => e.setUserManuallySelectedChart), b = R((e) => {
3124
- if (o === "funnel") h(e);
3404
+ function Jn(e) {
3405
+ let { externalColorPalette: t, combinedMetrics: r, combinedBreakdowns: i, hasDebounced: a } = e, o = $((e) => e.analysisType), { chartType: s, chartConfig: c, displayConfig: l } = $(n(Tn)), u = $((e) => e.userManuallySelectedChart), d = $((e) => e.localPaletteName), p = $((e) => e.setChartTypeManual), m = $((e) => e.setChartConfig), h = $((e) => e.setDisplayConfig), g = $((e) => e.setFunnelChartType), _ = $((e) => e.setFunnelChartConfig), v = $((e) => e.setFunnelDisplayConfig), y = $((e) => e.setLocalPaletteName), b = $((e) => e.setUserManuallySelectedChart), x = I((e) => {
3406
+ if (o === "funnel") g(e);
3125
3407
  else {
3126
- f(e);
3127
- let { chartConfig: t } = Ye(r, i, e);
3128
- p(t);
3408
+ p(e);
3409
+ let { chartConfig: t } = Dt(r, i, e);
3410
+ m(t);
3129
3411
  }
3130
3412
  }, [
3131
3413
  o,
3132
3414
  r,
3133
3415
  i,
3134
- h,
3135
- f,
3136
- p
3137
- ]), x = R((e) => {
3138
- o === "funnel" ? g(e) : p(e);
3139
- }, [
3140
- o,
3141
3416
  g,
3142
- p
3143
- ]), S = R((e) => {
3417
+ p,
3418
+ m
3419
+ ]), S = I((e) => {
3144
3420
  o === "funnel" ? _(e) : m(e);
3145
3421
  }, [
3146
3422
  o,
3147
3423
  _,
3148
3424
  m
3149
- ]), C = B(() => qe(r, i), [r, i]), ee = B(() => t ? Array.isArray(t) && typeof t[0] == "string" ? {
3425
+ ]), C = I((e) => {
3426
+ o === "funnel" ? v(e) : h(e);
3427
+ }, [
3428
+ o,
3429
+ v,
3430
+ h
3431
+ ]), w = R(() => Tt(r, i), [r, i]), T = R(() => t ? Array.isArray(t) && typeof t[0] == "string" ? {
3150
3432
  name: "custom",
3151
3433
  label: "Custom",
3152
3434
  colors: t,
3153
3435
  gradient: t
3154
- } : t : ie(d), [t, d]), w = V("");
3155
- return z(() => {
3436
+ } : t : f(d), [t, d]), E = z("");
3437
+ return L(() => {
3156
3438
  if (!a || r.length === 0 && i.length === 0) return;
3157
3439
  let e = JSON.stringify({
3158
3440
  metrics: r.map((e) => e.field),
@@ -3161,22 +3443,22 @@ function an(e) {
3161
3443
  isTime: e.isTimeDimension
3162
3444
  }))
3163
3445
  });
3164
- if (e === w.current) return;
3165
- w.current = e;
3166
- let t = Ze(r, i, s, u);
3446
+ if (e === E.current) return;
3447
+ E.current = e;
3448
+ let t = kt(r, i, s, u);
3167
3449
  if (t) {
3168
- let { chartConfig: e } = Ye(r, i, t);
3169
- b(t), x(e), y(!1);
3450
+ let { chartConfig: e } = Dt(r, i, t);
3451
+ x(t), S(e), b(!1);
3170
3452
  } else if (r.length > 0 || i.length > 0) {
3171
3453
  if (s === "table") {
3172
3454
  let e = [...i.map((e) => e.field), ...r.map((e) => e.field)], t = Array.isArray(c.xAxis) ? c.xAxis : [], n = e.filter((e) => !t.includes(e));
3173
- n.length > 0 && x({
3455
+ n.length > 0 && S({
3174
3456
  ...c,
3175
3457
  xAxis: [...t, ...n]
3176
3458
  });
3177
3459
  } else if (!c.xAxis?.length && !c.yAxis?.length && !c.series?.length) {
3178
- let { chartConfig: e } = Ye(r, i, s);
3179
- x(e);
3460
+ let { chartConfig: e } = Dt(r, i, s);
3461
+ S(e);
3180
3462
  }
3181
3463
  }
3182
3464
  }, [
@@ -3186,27 +3468,27 @@ function an(e) {
3186
3468
  s,
3187
3469
  u,
3188
3470
  c,
3189
- b,
3190
3471
  x,
3191
- y
3472
+ S,
3473
+ b
3192
3474
  ]), {
3193
3475
  chartType: s,
3194
3476
  chartConfig: c,
3195
3477
  displayConfig: l,
3196
- colorPalette: ee,
3478
+ colorPalette: T,
3197
3479
  localPaletteName: d,
3198
- chartAvailability: C,
3480
+ chartAvailability: w,
3199
3481
  userManuallySelectedChart: u,
3200
- setChartType: b,
3201
- setChartConfig: x,
3202
- setDisplayConfig: S,
3203
- setLocalPaletteName: v
3482
+ setChartType: x,
3483
+ setChartConfig: S,
3484
+ setDisplayConfig: C,
3485
+ setLocalPaletteName: y
3204
3486
  };
3205
3487
  }
3206
3488
  //#endregion
3207
3489
  //#region src/client/hooks/useAnalysisUIState.ts
3208
- function on() {
3209
- let e = $((e) => e.activeTab), t = $((e) => e.activeView), n = $((e) => e.displayLimit), r = $((e) => e.showFieldModal), i = $((e) => e.fieldModalMode), a = $((e) => e.userManuallySelectedChart), o = $((e) => e.setActiveTab), s = $((e) => e.setActiveView), c = $((e) => e.setDisplayLimit), l = $((e) => e.closeFieldModal), [u, d] = H(0);
3490
+ function Yn() {
3491
+ let e = $((e) => e.activeTab), t = $((e) => e.activeView), n = $((e) => e.displayLimit), r = $((e) => e.showFieldModal), i = $((e) => e.fieldModalMode), a = $((e) => e.userManuallySelectedChart), o = $((e) => e.setActiveTab), s = $((e) => e.setActiveView), c = $((e) => e.setDisplayLimit), l = $((e) => e.closeFieldModal), [u, d] = B(0);
3210
3492
  return {
3211
3493
  activeTab: e,
3212
3494
  activeView: t,
@@ -3224,42 +3506,42 @@ function on() {
3224
3506
  }
3225
3507
  //#endregion
3226
3508
  //#region src/client/utils/shareUtils.ts
3227
- var sn = o(), cn = 1800, ln = "share=";
3228
- function un(e) {
3229
- return (0, sn.compressToEncodedURIComponent)(JSON.stringify(e));
3509
+ var Xn = o(), Zn = 1800, Qn = "share=";
3510
+ function $n(e) {
3511
+ return (0, Xn.compressToEncodedURIComponent)(JSON.stringify(e));
3230
3512
  }
3231
- function dn(e) {
3513
+ function er(e) {
3232
3514
  try {
3233
- let t = (0, sn.decompressFromEncodedURIComponent)(e);
3515
+ let t = (0, Xn.decompressFromEncodedURIComponent)(e);
3234
3516
  if (!t) return null;
3235
3517
  let n = JSON.parse(t);
3236
- return k(n) ? n : (console.warn("[shareUtils] Invalid AnalysisConfig in share URL"), null);
3518
+ return v(n) ? n : (console.warn("[shareUtils] Invalid AnalysisConfig in share URL"), null);
3237
3519
  } catch {
3238
3520
  return null;
3239
3521
  }
3240
3522
  }
3241
- function fn(e) {
3242
- let t = un(e);
3523
+ function tr(e) {
3524
+ let t = $n(e);
3243
3525
  return {
3244
- ok: t.length <= cn,
3526
+ ok: t.length <= Zn,
3245
3527
  size: t.length,
3246
- maxSize: cn
3528
+ maxSize: Zn
3247
3529
  };
3248
3530
  }
3249
- function pn(e) {
3250
- let t = un(e);
3251
- if (t.length <= cn) return {
3531
+ function nr(e) {
3532
+ let t = $n(e);
3533
+ if (t.length <= Zn) return {
3252
3534
  encoded: t,
3253
3535
  queryOnly: !1
3254
3536
  };
3255
- let n = un({
3537
+ let n = $n({
3256
3538
  version: e.version,
3257
3539
  analysisType: e.analysisType,
3258
3540
  activeView: e.activeView,
3259
3541
  charts: {},
3260
3542
  query: e.query
3261
3543
  });
3262
- return n.length <= cn ? {
3544
+ return n.length <= Zn ? {
3263
3545
  encoded: n,
3264
3546
  queryOnly: !0
3265
3547
  } : {
@@ -3267,40 +3549,40 @@ function pn(e) {
3267
3549
  queryOnly: !0
3268
3550
  };
3269
3551
  }
3270
- function mn(e) {
3271
- let { encoded: t } = pn(e);
3272
- return t ? `${window.location.origin}${window.location.pathname}#${ln}${t}` : null;
3552
+ function rr(e) {
3553
+ let { encoded: t } = nr(e);
3554
+ return t ? `${window.location.origin}${window.location.pathname}#${Qn}${t}` : null;
3273
3555
  }
3274
- function hn() {
3556
+ function ir() {
3275
3557
  if (typeof window > "u") return null;
3276
3558
  let e = window.location.hash;
3277
- return !e || !e.startsWith(`#${ln}`) ? null : e.slice(7);
3559
+ return !e || !e.startsWith(`#${Qn}`) ? null : e.slice(7);
3278
3560
  }
3279
- function gn() {
3561
+ function ar() {
3280
3562
  if (typeof window > "u") return;
3281
3563
  let e = new URL(window.location.href);
3282
3564
  e.hash = "", window.history.replaceState(null, "", e.toString());
3283
3565
  }
3284
- function _n() {
3285
- let e = hn();
3286
- return e ? dn(e) : null;
3566
+ function or() {
3567
+ let e = ir();
3568
+ return e ? er(e) : null;
3287
3569
  }
3288
3570
  //#endregion
3289
3571
  //#region src/client/hooks/useAnalysisInitialization.ts
3290
- function vn(e) {
3291
- let { currentQuery: t, isValidQuery: n, chartType: r, chartConfig: i, displayConfig: a, onQueryChange: o, onChartConfigChange: s } = e, c = $((e) => e.load), l = V(!1);
3292
- z(() => {
3572
+ function sr(e) {
3573
+ let { currentQuery: t, isValidQuery: n, chartType: r, chartConfig: i, displayConfig: a, onQueryChange: o, onChartConfigChange: s } = e, c = $((e) => e.load), l = z(!1);
3574
+ L(() => {
3293
3575
  if (l.current) return;
3294
3576
  l.current = !0;
3295
- let e = _n();
3296
- e && (c(e), gn());
3297
- }, [c]), z(() => {
3577
+ let e = or();
3578
+ e && (c(e), ar());
3579
+ }, [c]), L(() => {
3298
3580
  o && n && o(t);
3299
3581
  }, [
3300
3582
  t,
3301
3583
  n,
3302
3584
  o
3303
- ]), z(() => {
3585
+ ]), L(() => {
3304
3586
  s && s({
3305
3587
  chartType: r,
3306
3588
  chartConfig: i,
@@ -3315,99 +3597,99 @@ function vn(e) {
3315
3597
  }
3316
3598
  //#endregion
3317
3599
  //#region src/client/hooks/useAnalysisBuilderHook.ts
3318
- function yn(e = {}) {
3319
- let { initialData: t, externalColorPalette: n, onQueryChange: r, onChartConfigChange: i } = e, { features: a } = c(), o = Rt(), s = tn(), l = nn({
3320
- queryState: s.queryState,
3321
- queryStates: s.queryStates,
3322
- isMultiQueryMode: s.isMultiQueryMode,
3323
- mergeStrategy: s.mergeStrategy,
3324
- activeQueryIndex: s.activeQueryIndex
3325
- }), u = $((e) => e.funnelBindingKey), d = $((e) => e.analysisType), f = $((e) => e.funnelCube), p = $((e) => e.funnelSteps), m = $((e) => e.activeFunnelStepIndex), h = $((e) => e.funnelTimeDimension), g = B(() => d !== "funnel" || !u?.dimension || !h || !p || p.length < 2 ? !1 : p.every((e) => e.filters.length > 0), [
3600
+ function cr(e = {}) {
3601
+ let { initialData: t, externalColorPalette: n, onQueryChange: r, onChartConfigChange: i } = e, { features: a } = s(), o = bn(), c = zn(), l = Bn({
3602
+ queryState: c.queryState,
3603
+ queryStates: c.queryStates,
3604
+ isMultiQueryMode: c.isMultiQueryMode,
3605
+ mergeStrategy: c.mergeStrategy,
3606
+ activeQueryIndex: c.activeQueryIndex
3607
+ }), u = $((e) => e.funnelBindingKey), d = $((e) => e.analysisType), f = $((e) => e.funnelCube), p = $((e) => e.funnelSteps), m = $((e) => e.activeFunnelStepIndex), h = $((e) => e.funnelTimeDimension), g = R(() => d !== "funnel" || !u?.dimension || !h || !p || p.length < 2 ? !1 : p.every((e) => e.filters.length > 0), [
3326
3608
  d,
3327
3609
  u,
3328
3610
  h,
3329
3611
  p
3330
- ]), _ = $((e) => e.charts.funnel?.chartType) || "funnel", v = $((e) => e.charts.funnel?.chartConfig), y = B(() => v || {}, [v]), b = $((e) => e.flowCube), x = $((e) => e.flowBindingKey), S = $((e) => e.flowTimeDimension), C = $((e) => e.eventDimension), ee = $((e) => e.startingStep), w = $((e) => e.stepsBefore), te = $((e) => e.stepsAfter), T = $((e) => e.joinStrategy), E = $((e) => e.charts.flow?.displayConfig), ne = B(() => E || {
3612
+ ]), _ = $((e) => e.charts.funnel?.chartType) || "funnel", v = $((e) => e.charts.funnel?.chartConfig), y = R(() => v || {}, [v]), b = $((e) => e.flowCube), x = $((e) => e.flowBindingKey), S = $((e) => e.flowTimeDimension), C = $((e) => e.eventDimension), w = $((e) => e.startingStep), T = $((e) => e.stepsBefore), E = $((e) => e.stepsAfter), D = $((e) => e.joinStrategy), ee = $((e) => e.charts.flow?.displayConfig), O = R(() => ee || {
3331
3613
  showLegend: !0,
3332
3614
  showGrid: !0,
3333
3615
  showTooltip: !0
3334
- }, [E]), D = $((e) => e.charts.flow?.chartType) || "sankey", O = $((e) => e.buildFunnelQueryFromSteps), k = B(() => d === "funnel" ? O() : null, [
3616
+ }, [ee]), k = $((e) => e.charts.flow?.chartType) || "sankey", te = $((e) => e.buildFunnelQueryFromSteps), ne = R(() => d === "funnel" ? te() : null, [
3335
3617
  d,
3336
- O,
3618
+ te,
3337
3619
  p
3338
- ]), A = $((e) => e.buildFlowQuery), j = B(() => d === "flow" ? A() : null, [
3620
+ ]), A = $((e) => e.buildFlowQuery), re = R(() => d === "flow" ? A() : null, [
3339
3621
  d,
3340
3622
  A,
3341
3623
  b,
3342
3624
  x,
3343
3625
  S,
3344
3626
  C,
3345
- ee,
3346
3627
  w,
3347
- te,
3348
- D,
3349
- T
3350
- ]), M = $((e) => e.retentionCube), N = $((e) => e.retentionBindingKey), P = $((e) => e.retentionTimeDimension), re = $((e) => e.retentionDateRange), ie = $((e) => e.retentionCohortFilters), ae = $((e) => e.retentionActivityFilters), oe = $((e) => e.retentionBreakdowns), se = $((e) => e.retentionViewGranularity), F = $((e) => e.retentionPeriods), ce = $((e) => e.retentionType), I = $((e) => e.buildRetentionQuery), le = $((e) => e.getRetentionValidation), L = $((e) => e.charts.retention?.displayConfig), ue = $((e) => e.setRetentionCube), z = $((e) => e.setRetentionBindingKey), H = $((e) => e.setRetentionTimeDimension), U = $((e) => e.setRetentionDateRange), W = $((e) => e.setRetentionCohortFilters), G = $((e) => e.setRetentionActivityFilters), de = $((e) => e.setRetentionBreakdowns), fe = $((e) => e.addRetentionBreakdown), pe = $((e) => e.removeRetentionBreakdown), me = $((e) => e.setRetentionViewGranularity), he = $((e) => e.setRetentionPeriods), ge = $((e) => e.setRetentionType), _e = B(() => d === "retention" ? I() : null, [
3628
+ T,
3629
+ E,
3630
+ k,
3631
+ D
3632
+ ]), ie = $((e) => e.retentionCube), ae = $((e) => e.retentionBindingKey), oe = $((e) => e.retentionTimeDimension), se = $((e) => e.retentionDateRange), ce = $((e) => e.retentionCohortFilters), le = $((e) => e.retentionActivityFilters), ue = $((e) => e.retentionBreakdowns), de = $((e) => e.retentionViewGranularity), fe = $((e) => e.retentionPeriods), j = $((e) => e.retentionType), M = $((e) => e.buildRetentionQuery), N = $((e) => e.getRetentionValidation), P = $((e) => e.charts.retention?.displayConfig), F = $((e) => e.setRetentionCube), pe = $((e) => e.setRetentionBindingKey), L = $((e) => e.setRetentionTimeDimension), B = $((e) => e.setRetentionDateRange), V = $((e) => e.setRetentionCohortFilters), H = $((e) => e.setRetentionActivityFilters), U = $((e) => e.setRetentionBreakdowns), me = $((e) => e.addRetentionBreakdown), W = $((e) => e.removeRetentionBreakdown), he = $((e) => e.setRetentionViewGranularity), ge = $((e) => e.setRetentionPeriods), _e = $((e) => e.setRetentionType), ve = R(() => d === "retention" ? M() : null, [
3351
3633
  d,
3352
- I,
3353
3634
  M,
3354
- N,
3355
- P,
3356
- re,
3635
+ ie,
3636
+ ae,
3357
3637
  oe,
3358
3638
  se,
3359
- F,
3639
+ ue,
3640
+ de,
3641
+ fe,
3642
+ j,
3360
3643
  ce,
3361
- ie,
3362
- ae
3363
- ]), ve = B(() => d === "retention" ? le() : null, [
3644
+ le
3645
+ ]), ye = R(() => d === "retention" ? N() : null, [
3364
3646
  d,
3365
- le,
3366
- M,
3367
3647
  N,
3368
- P,
3369
- re
3370
- ]), K = B(() => d === "retention" ? _e !== null : d === "flow" ? j !== null : d === "funnel" ? k !== null : s.isValidQuery ?? !1, [
3648
+ ie,
3649
+ ae,
3650
+ oe,
3651
+ se
3652
+ ]), G = R(() => d === "retention" ? ve !== null : d === "flow" ? re !== null : d === "funnel" ? ne !== null : c.isValidQuery ?? !1, [
3371
3653
  d,
3372
- _e,
3373
- j,
3374
- k,
3375
- s.isValidQuery
3376
- ]), q = rn({
3377
- currentQuery: s.currentQuery,
3378
- allQueries: s.allQueries,
3379
- multiQueryConfig: s.multiQueryConfig,
3380
- isMultiQueryMode: s.isMultiQueryMode,
3381
- isValidQuery: K,
3654
+ ve,
3655
+ re,
3656
+ ne,
3657
+ c.isValidQuery
3658
+ ]), K = qn({
3659
+ currentQuery: c.currentQuery,
3660
+ allQueries: c.allQueries,
3661
+ multiQueryConfig: c.multiQueryConfig,
3662
+ isMultiQueryMode: c.isMultiQueryMode,
3663
+ isValidQuery: G,
3382
3664
  initialData: t,
3383
- mergeStrategy: s.mergeStrategy,
3665
+ mergeStrategy: c.mergeStrategy,
3384
3666
  funnelBindingKey: u,
3385
3667
  isFunnelModeEnabled: g,
3386
3668
  analysisType: d,
3387
- serverFunnelQuery: k,
3388
- serverFlowQuery: j,
3389
- serverRetentionQuery: _e,
3390
- retentionValidation: ve
3391
- }), J = an({
3669
+ serverFunnelQuery: ne,
3670
+ serverFlowQuery: re,
3671
+ serverRetentionQuery: ve,
3672
+ retentionValidation: ye
3673
+ }), q = Jn({
3392
3674
  externalColorPalette: n,
3393
3675
  combinedMetrics: l.combinedMetrics,
3394
3676
  combinedBreakdowns: l.combinedBreakdowns,
3395
- hasDebounced: q.hasDebounced
3396
- }), Y = on();
3397
- vn({
3398
- currentQuery: s.currentQuery,
3399
- isValidQuery: s.isValidQuery ?? !1,
3400
- chartType: J.chartType,
3401
- chartConfig: J.chartConfig,
3402
- displayConfig: J.displayConfig,
3677
+ hasDebounced: K.hasDebounced
3678
+ }), J = Yn();
3679
+ sr({
3680
+ currentQuery: c.currentQuery,
3681
+ isValidQuery: c.isValidQuery ?? !1,
3682
+ chartType: q.chartType,
3683
+ chartConfig: q.chartConfig,
3684
+ displayConfig: q.displayConfig,
3403
3685
  onQueryChange: r,
3404
3686
  onChartConfigChange: i
3405
3687
  });
3406
- let ye = $((e) => e.openMetricsModal), be = $((e) => e.addMetric), xe = $((e) => e.removeMetric), Se = $((e) => e.toggleMetric), Ce = $((e) => e.reorderMetrics), we = $((e) => e.openBreakdownsModal), Te = $((e) => e.addBreakdown), Ee = $((e) => e.removeBreakdown), De = $((e) => e.toggleBreakdown), Oe = $((e) => e.setBreakdownGranularity), ke = $((e) => e.toggleBreakdownComparison), Ae = $((e) => e.reorderBreakdowns), je = $((e) => e.setFilters), Me = $((e) => e.dropFieldToFilter), Ne = $((e) => e.setOrder), Pe = $((e) => e.setLimit), Fe = $((e) => e.clearQuery), Ie = $((e) => e.clearCurrentMode), Le = $((e) => e.setFunnelBindingKey), Re = $((e) => e.setAnalysisType), ze = $((e) => e.setFunnelCube), Be = $((e) => e.addFunnelStep), Ve = $((e) => e.removeFunnelStep), He = $((e) => e.updateFunnelStep), Ue = $((e) => e.setActiveFunnelStepIndex), We = $((e) => e.reorderFunnelSteps), Ge = $((e) => e.setFunnelTimeDimension), Ke = $((e) => e.charts.funnel?.displayConfig), qe = B(() => Ke || {
3688
+ let be = $((e) => e.openMetricsModal), xe = $((e) => e.addMetric), Se = $((e) => e.removeMetric), Ce = $((e) => e.toggleMetric), we = $((e) => e.reorderMetrics), Te = $((e) => e.openBreakdownsModal), Ee = $((e) => e.addBreakdown), De = $((e) => e.removeBreakdown), Oe = $((e) => e.toggleBreakdown), ke = $((e) => e.setBreakdownGranularity), Ae = $((e) => e.toggleBreakdownComparison), je = $((e) => e.reorderBreakdowns), Me = $((e) => e.setFilters), Ne = $((e) => e.dropFieldToFilter), Pe = $((e) => e.setOrder), Fe = $((e) => e.setLimit), Ie = $((e) => e.clearQuery), Le = $((e) => e.clearCurrentMode), Re = $((e) => e.setFunnelBindingKey), ze = $((e) => e.setAnalysisType), Be = $((e) => e.setFunnelCube), Ve = $((e) => e.addFunnelStep), He = $((e) => e.removeFunnelStep), Ue = $((e) => e.updateFunnelStep), We = $((e) => e.setActiveFunnelStepIndex), Ge = $((e) => e.reorderFunnelSteps), Ke = $((e) => e.setFunnelTimeDimension), qe = $((e) => e.charts.funnel?.displayConfig), Je = R(() => qe || {
3407
3689
  showLegend: !0,
3408
3690
  showGrid: !0,
3409
3691
  showTooltip: !0
3410
- }, [Ke]), Je = $((e) => e.setFunnelDisplayConfig), Ye = $((e) => e.setFlowCube), Xe = $((e) => e.setFlowBindingKey), Ze = $((e) => e.setFlowTimeDimension), Qe = $((e) => e.setEventDimension), $e = $((e) => e.setStartingStepName), et = $((e) => e.setStartingStepFilters), tt = $((e) => e.setStepsBefore), nt = $((e) => e.setStepsAfter), rt = $((e) => e.setJoinStrategy), it = R((e) => {
3692
+ }, [qe]), Y = $((e) => e.setFunnelDisplayConfig), Ye = $((e) => e.setFlowCube), Xe = $((e) => e.setFlowBindingKey), Ze = $((e) => e.setFlowTimeDimension), Qe = $((e) => e.setEventDimension), $e = $((e) => e.setStartingStepName), et = $((e) => e.setStartingStepFilters), tt = $((e) => e.setStepsBefore), nt = $((e) => e.setStepsAfter), rt = $((e) => e.setJoinStrategy), it = I((e) => {
3411
3693
  o.setState((t) => ({ charts: {
3412
3694
  ...t.charts,
3413
3695
  flow: {
@@ -3419,7 +3701,7 @@ function yn(e = {}) {
3419
3701
  displayConfig: e
3420
3702
  }
3421
3703
  } }));
3422
- }, [o]), at = R((e) => {
3704
+ }, [o]), at = I((e) => {
3423
3705
  o.setState((t) => ({ charts: {
3424
3706
  ...t.charts,
3425
3707
  retention: {
@@ -3431,9 +3713,9 @@ function yn(e = {}) {
3431
3713
  displayConfig: e
3432
3714
  }
3433
3715
  } }));
3434
- }, [o]), ot = $((e) => e.aiState), st = $((e) => e.openAI), ct = $((e) => e.closeAI), lt = $((e) => e.setAIPrompt), ut = $((e) => e.setAIGenerating), dt = $((e) => e.setAIError), ft = $((e) => e.setAIHasGeneratedQuery), pt = $((e) => e.saveAIPreviousState), mt = $((e) => e.restoreAIPreviousState), ht = V("idle"), X = K, Z = $((e) => e.getValidation), gt = B(() => Z(), [
3435
- Z,
3436
- s.queryStates,
3716
+ }, [o]), ot = $((e) => e.aiState), st = $((e) => e.openAI), ct = $((e) => e.closeAI), lt = $((e) => e.setAIPrompt), ut = $((e) => e.setAIGenerating), dt = $((e) => e.setAIError), ft = $((e) => e.setAIHasGeneratedQuery), pt = $((e) => e.saveAIPreviousState), mt = $((e) => e.restoreAIPreviousState), ht = z("idle"), gt = G, _t = $((e) => e.getValidation), vt = R(() => _t(), [
3717
+ _t,
3718
+ c.queryStates,
3437
3719
  d,
3438
3720
  p,
3439
3721
  u,
@@ -3442,19 +3724,23 @@ function yn(e = {}) {
3442
3724
  x,
3443
3725
  S,
3444
3726
  C,
3445
- ee,
3446
3727
  w,
3447
- te,
3448
- T
3449
- ]), _t = R((e, t, n, r) => {
3450
- Y.fieldModalMode === "metrics" && t === "measure" ? Se(e.name) : Y.fieldModalMode === "breakdown" && (d === "retention" && t === "dimension" ? fe({ field: e.name }) : De(e.name, t === "timeDimension")), r || Y.closeFieldModal();
3728
+ T,
3729
+ E,
3730
+ D
3731
+ ]), yt = I((e, t) => {
3732
+ d === "retention" && t === "dimension" ? me({ field: e.name }) : Oe(e.name, t === "timeDimension");
3451
3733
  }, [
3452
- Y,
3453
- Se,
3454
- De,
3455
- fe,
3456
- d
3457
- ]), Q = R(async () => {
3734
+ d,
3735
+ me,
3736
+ Oe
3737
+ ]), bt = I((e, t, n, r) => {
3738
+ J.fieldModalMode === "metrics" && t === "measure" ? Ce(e.name) : J.fieldModalMode === "breakdown" && yt(e, t), r || J.closeFieldModal();
3739
+ }, [
3740
+ J,
3741
+ Ce,
3742
+ yt
3743
+ ]), xt = I(async () => {
3458
3744
  if (a?.aiEndpoint) {
3459
3745
  pt(), ut(!0), dt(null);
3460
3746
  try {
@@ -3471,15 +3757,15 @@ function yn(e = {}) {
3471
3757
  ut,
3472
3758
  dt,
3473
3759
  ft
3474
- ]), vt = R(() => {
3760
+ ]), St = I(() => {
3475
3761
  ct(), ft(!1);
3476
- }, [ct, ft]), yt = R(() => {
3762
+ }, [ct, ft]), Ct = I(() => {
3477
3763
  mt(), ct();
3478
- }, [mt, ct]), bt = R(async () => {
3764
+ }, [mt, ct]), wt = I(async () => {
3479
3765
  ht.current = "copied", setTimeout(() => {
3480
3766
  ht.current = "idle";
3481
3767
  }, 2e3);
3482
- }, []), xt = R(() => {
3768
+ }, []), Tt = I(() => {
3483
3769
  let e = o.getState();
3484
3770
  return e.analysisType === "funnel" ? e.buildFunnelQueryFromSteps() || e.buildCurrentQuery() : e.queryStates.length > 1 ? {
3485
3771
  queries: e.buildAllQueries(),
@@ -3489,34 +3775,34 @@ function yn(e = {}) {
3489
3775
  funnelBindingKey: e.funnelBindingKey,
3490
3776
  stepTimeToConvert: e.stepTimeToConvert
3491
3777
  } : e.buildCurrentQuery();
3492
- }, [o]), St = R(() => {
3778
+ }, [o]), Et = I(() => {
3493
3779
  let e = o.getState(), t = e.charts[e.analysisType];
3494
3780
  return t ? {
3495
3781
  chartType: t.chartType,
3496
3782
  chartConfig: t.chartConfig,
3497
3783
  displayConfig: t.displayConfig
3498
3784
  } : {
3499
- chartType: J.chartType,
3500
- chartConfig: J.chartConfig,
3501
- displayConfig: J.displayConfig
3785
+ chartType: q.chartType,
3786
+ chartConfig: q.chartConfig,
3787
+ displayConfig: q.displayConfig
3502
3788
  };
3503
3789
  }, [
3504
3790
  o,
3505
- J.chartType,
3506
- J.chartConfig,
3507
- J.displayConfig
3508
- ]), Ct = R(() => o.getState().analysisType, [o]);
3791
+ q.chartType,
3792
+ q.chartConfig,
3793
+ q.displayConfig
3794
+ ]), Dt = I(() => o.getState().analysisType, [o]);
3509
3795
  return {
3510
- queryState: s.queryState,
3511
- queryStates: s.queryStates,
3512
- activeQueryIndex: s.activeQueryIndex,
3513
- mergeStrategy: s.mergeStrategy,
3514
- isMultiQueryMode: s.isMultiQueryMode,
3515
- mergeKeys: s.mergeKeys,
3516
- currentQuery: s.currentQuery,
3517
- allQueries: s.allQueries,
3518
- multiQueryConfig: s.multiQueryConfig,
3519
- multiQueryValidation: s.multiQueryValidation,
3796
+ queryState: c.queryState,
3797
+ queryStates: c.queryStates,
3798
+ activeQueryIndex: c.activeQueryIndex,
3799
+ mergeStrategy: c.mergeStrategy,
3800
+ isMultiQueryMode: c.isMultiQueryMode,
3801
+ mergeKeys: c.mergeKeys,
3802
+ currentQuery: c.currentQuery,
3803
+ allQueries: c.allQueries,
3804
+ multiQueryConfig: c.multiQueryConfig,
3805
+ multiQueryValidation: c.multiQueryValidation,
3520
3806
  funnelBindingKey: u,
3521
3807
  isFunnelModeEnabled: g,
3522
3808
  analysisType: d,
@@ -3526,62 +3812,62 @@ function yn(e = {}) {
3526
3812
  funnelTimeDimension: h,
3527
3813
  funnelChartType: _,
3528
3814
  funnelChartConfig: y,
3529
- funnelDisplayConfig: qe,
3815
+ funnelDisplayConfig: Je,
3530
3816
  flowCube: b,
3531
3817
  flowBindingKey: x,
3532
3818
  flowTimeDimension: S,
3533
3819
  eventDimension: C,
3534
- startingStep: ee,
3535
- stepsBefore: w,
3536
- stepsAfter: te,
3537
- joinStrategy: T,
3538
- flowDisplayConfig: ne,
3539
- retentionCube: M,
3540
- retentionBindingKey: N,
3541
- retentionTimeDimension: P,
3542
- retentionDateRange: re,
3543
- retentionCohortFilters: ie,
3544
- retentionActivityFilters: ae,
3545
- retentionBreakdowns: oe,
3546
- retentionViewGranularity: se,
3547
- retentionPeriods: F,
3548
- retentionType: ce,
3549
- retentionDisplayConfig: L,
3550
- executionStatus: q.executionStatus,
3551
- executionResults: q.executionResults,
3552
- perQueryResults: q.perQueryResults,
3553
- isLoading: q.isLoading,
3554
- isFetching: q.isFetching,
3555
- error: q.error,
3556
- isValidQuery: K,
3557
- debugDataPerQuery: q.debugDataPerQuery,
3558
- needsRefresh: q.needsRefresh,
3559
- warnings: q.warnings,
3560
- funnelExecutedQueries: q.funnelExecutedQueries,
3561
- funnelServerQuery: q.funnelServerQuery,
3562
- funnelDebugData: q.funnelDebugData,
3563
- flowServerQuery: q.flowServerQuery,
3564
- flowDebugData: q.flowDebugData,
3565
- retentionServerQuery: q.retentionServerQuery,
3566
- retentionDebugData: q.retentionDebugData,
3567
- retentionChartData: q.retentionChartData,
3568
- retentionValidation: q.retentionValidation,
3569
- chartType: J.chartType,
3570
- chartConfig: J.chartConfig,
3571
- displayConfig: J.displayConfig,
3572
- colorPalette: J.colorPalette,
3573
- localPaletteName: J.localPaletteName,
3574
- chartAvailability: J.chartAvailability,
3820
+ startingStep: w,
3821
+ stepsBefore: T,
3822
+ stepsAfter: E,
3823
+ joinStrategy: D,
3824
+ flowDisplayConfig: O,
3825
+ retentionCube: ie,
3826
+ retentionBindingKey: ae,
3827
+ retentionTimeDimension: oe,
3828
+ retentionDateRange: se,
3829
+ retentionCohortFilters: ce,
3830
+ retentionActivityFilters: le,
3831
+ retentionBreakdowns: ue,
3832
+ retentionViewGranularity: de,
3833
+ retentionPeriods: fe,
3834
+ retentionType: j,
3835
+ retentionDisplayConfig: P,
3836
+ executionStatus: K.executionStatus,
3837
+ executionResults: K.executionResults,
3838
+ perQueryResults: K.perQueryResults,
3839
+ isLoading: K.isLoading,
3840
+ isFetching: K.isFetching,
3841
+ error: K.error,
3842
+ isValidQuery: G,
3843
+ debugDataPerQuery: K.debugDataPerQuery,
3844
+ needsRefresh: K.needsRefresh,
3845
+ warnings: K.warnings,
3846
+ funnelExecutedQueries: K.funnelExecutedQueries,
3847
+ funnelServerQuery: K.funnelServerQuery,
3848
+ funnelDebugData: K.funnelDebugData,
3849
+ flowServerQuery: K.flowServerQuery,
3850
+ flowDebugData: K.flowDebugData,
3851
+ retentionServerQuery: K.retentionServerQuery,
3852
+ retentionDebugData: K.retentionDebugData,
3853
+ retentionChartData: K.retentionChartData,
3854
+ retentionValidation: K.retentionValidation,
3855
+ chartType: q.chartType,
3856
+ chartConfig: q.chartConfig,
3857
+ displayConfig: q.displayConfig,
3858
+ colorPalette: q.colorPalette,
3859
+ localPaletteName: q.localPaletteName,
3860
+ chartAvailability: q.chartAvailability,
3575
3861
  combinedMetrics: l.combinedMetrics,
3576
3862
  combinedBreakdowns: l.combinedBreakdowns,
3577
3863
  effectiveBreakdowns: l.effectiveBreakdowns,
3578
- activeTab: Y.activeTab,
3579
- activeView: Y.activeView,
3580
- displayLimit: Y.displayLimit,
3581
- showFieldModal: Y.showFieldModal,
3582
- fieldModalMode: Y.fieldModalMode,
3583
- activeTableIndex: Y.activeTableIndex,
3584
- userManuallySelectedChart: Y.userManuallySelectedChart,
3864
+ activeTab: J.activeTab,
3865
+ activeView: J.activeView,
3866
+ displayLimit: J.displayLimit,
3867
+ showFieldModal: J.showFieldModal,
3868
+ fieldModalMode: J.fieldModalMode,
3869
+ activeTableIndex: J.activeTableIndex,
3870
+ userManuallySelectedChart: J.userManuallySelectedChart,
3585
3871
  aiState: {
3586
3872
  isOpen: ot.isOpen,
3587
3873
  userPrompt: ot.userPrompt,
@@ -3590,39 +3876,39 @@ function yn(e = {}) {
3590
3876
  hasGeneratedQuery: ot.hasGeneratedQuery
3591
3877
  },
3592
3878
  shareButtonState: ht.current,
3593
- canShare: X,
3594
- adapterValidation: gt,
3879
+ canShare: gt,
3880
+ adapterValidation: vt,
3595
3881
  actions: {
3596
- setActiveQueryIndex: s.setActiveQueryIndex,
3597
- setMergeStrategy: s.setMergeStrategy,
3598
- openMetricsModal: ye,
3599
- addMetric: be,
3600
- removeMetric: xe,
3601
- toggleMetric: Se,
3602
- reorderMetrics: Ce,
3603
- openBreakdownsModal: we,
3604
- addBreakdown: Te,
3605
- removeBreakdown: Ee,
3606
- toggleBreakdown: De,
3607
- setBreakdownGranularity: Oe,
3608
- toggleBreakdownComparison: ke,
3609
- reorderBreakdowns: Ae,
3610
- setFilters: je,
3611
- dropFieldToFilter: Me,
3612
- setOrder: Ne,
3613
- setLimit: Pe,
3614
- addQuery: s.addQuery,
3615
- removeQuery: s.removeQuery,
3616
- setFunnelBindingKey: Le,
3617
- setAnalysisType: Re,
3618
- setFunnelCube: ze,
3619
- addFunnelStep: Be,
3620
- removeFunnelStep: Ve,
3621
- updateFunnelStep: He,
3622
- setActiveFunnelStepIndex: Ue,
3623
- reorderFunnelSteps: We,
3624
- setFunnelTimeDimension: Ge,
3625
- setFunnelDisplayConfig: Je,
3882
+ setActiveQueryIndex: c.setActiveQueryIndex,
3883
+ setMergeStrategy: c.setMergeStrategy,
3884
+ openMetricsModal: be,
3885
+ addMetric: xe,
3886
+ removeMetric: Se,
3887
+ toggleMetric: Ce,
3888
+ reorderMetrics: we,
3889
+ openBreakdownsModal: Te,
3890
+ addBreakdown: Ee,
3891
+ removeBreakdown: De,
3892
+ toggleBreakdown: Oe,
3893
+ setBreakdownGranularity: ke,
3894
+ toggleBreakdownComparison: Ae,
3895
+ reorderBreakdowns: je,
3896
+ setFilters: Me,
3897
+ dropFieldToFilter: Ne,
3898
+ setOrder: Pe,
3899
+ setLimit: Fe,
3900
+ addQuery: c.addQuery,
3901
+ removeQuery: c.removeQuery,
3902
+ setFunnelBindingKey: Re,
3903
+ setAnalysisType: ze,
3904
+ setFunnelCube: Be,
3905
+ addFunnelStep: Ve,
3906
+ removeFunnelStep: He,
3907
+ updateFunnelStep: Ue,
3908
+ setActiveFunnelStepIndex: We,
3909
+ reorderFunnelSteps: Ge,
3910
+ setFunnelTimeDimension: Ke,
3911
+ setFunnelDisplayConfig: Y,
3626
3912
  setFlowCube: Ye,
3627
3913
  setFlowBindingKey: Xe,
3628
3914
  setFlowTimeDimension: Ze,
@@ -3633,48 +3919,48 @@ function yn(e = {}) {
3633
3919
  setStepsAfter: nt,
3634
3920
  setJoinStrategy: rt,
3635
3921
  setFlowDisplayConfig: it,
3636
- setRetentionCube: ue,
3637
- setRetentionBindingKey: z,
3638
- setRetentionTimeDimension: H,
3639
- setRetentionDateRange: U,
3640
- setRetentionCohortFilters: W,
3641
- setRetentionActivityFilters: G,
3642
- setRetentionBreakdowns: de,
3643
- addRetentionBreakdown: fe,
3644
- removeRetentionBreakdown: pe,
3645
- setRetentionViewGranularity: me,
3646
- setRetentionPeriods: he,
3647
- setRetentionType: ge,
3922
+ setRetentionCube: F,
3923
+ setRetentionBindingKey: pe,
3924
+ setRetentionTimeDimension: L,
3925
+ setRetentionDateRange: B,
3926
+ setRetentionCohortFilters: V,
3927
+ setRetentionActivityFilters: H,
3928
+ setRetentionBreakdowns: U,
3929
+ addRetentionBreakdown: me,
3930
+ removeRetentionBreakdown: W,
3931
+ setRetentionViewGranularity: he,
3932
+ setRetentionPeriods: ge,
3933
+ setRetentionType: _e,
3648
3934
  setRetentionDisplayConfig: at,
3649
- setChartType: J.setChartType,
3650
- setChartConfig: J.setChartConfig,
3651
- setDisplayConfig: J.setDisplayConfig,
3652
- setLocalPaletteName: J.setLocalPaletteName,
3653
- setActiveTab: Y.setActiveTab,
3654
- setActiveView: Y.setActiveView,
3655
- setDisplayLimit: Y.setDisplayLimit,
3656
- closeFieldModal: Y.closeFieldModal,
3657
- setActiveTableIndex: Y.setActiveTableIndex,
3935
+ setChartType: q.setChartType,
3936
+ setChartConfig: q.setChartConfig,
3937
+ setDisplayConfig: q.setDisplayConfig,
3938
+ setLocalPaletteName: q.setLocalPaletteName,
3939
+ setActiveTab: J.setActiveTab,
3940
+ setActiveView: J.setActiveView,
3941
+ setDisplayLimit: J.setDisplayLimit,
3942
+ closeFieldModal: J.closeFieldModal,
3943
+ setActiveTableIndex: J.setActiveTableIndex,
3658
3944
  openAI: st,
3659
3945
  closeAI: ct,
3660
3946
  setAIPrompt: lt,
3661
- generateAI: Q,
3662
- acceptAI: vt,
3663
- cancelAI: yt,
3664
- share: bt,
3665
- clearQuery: Fe,
3666
- clearCurrentMode: Ie,
3667
- refetch: q.refetch,
3668
- handleFieldSelected: _t
3947
+ generateAI: xt,
3948
+ acceptAI: St,
3949
+ cancelAI: Ct,
3950
+ share: wt,
3951
+ clearQuery: Ie,
3952
+ clearCurrentMode: Le,
3953
+ refetch: K.refetch,
3954
+ handleFieldSelected: bt
3669
3955
  },
3670
- getQueryConfig: xt,
3671
- getChartConfig: St,
3672
- getAnalysisType: Ct
3956
+ getQueryConfig: Tt,
3957
+ getChartConfig: Et,
3958
+ getAnalysisType: Dt
3673
3959
  };
3674
3960
  }
3675
3961
  //#endregion
3676
3962
  //#region src/client/utils/funnelValidation.ts
3677
- function bn(e, t) {
3963
+ function lr(e, t) {
3678
3964
  let n = [];
3679
3965
  if (!t?.cubes) return n;
3680
3966
  if (typeof e.dimension == "string") {
@@ -3698,7 +3984,7 @@ function bn(e, t) {
3698
3984
  }
3699
3985
  return n;
3700
3986
  }
3701
- function xn(e) {
3987
+ function ur(e) {
3702
3988
  let t = [];
3703
3989
  for (let n = 0; n < e.length; n++) {
3704
3990
  let r = e[n], i = r.query;
@@ -3710,17 +3996,17 @@ function xn(e) {
3710
3996
  }
3711
3997
  return t;
3712
3998
  }
3713
- function Sn(e, t) {
3999
+ function dr(e, t) {
3714
4000
  if (typeof e.dimension == "string") return !0;
3715
- let n = w(t);
4001
+ let n = j(t);
3716
4002
  return n ? e.dimension.some((e) => e.cube === n) : !1;
3717
4003
  }
3718
- function Cn(e, t) {
4004
+ function fr(e, t) {
3719
4005
  let n = [];
3720
4006
  for (let r = 0; r < t.length; r++) {
3721
4007
  let i = t[r];
3722
- if (!Sn(e, i.query)) {
3723
- let e = w(i.query) || "unknown";
4008
+ if (!dr(e, i.query)) {
4009
+ let e = j(i.query) || "unknown";
3724
4010
  n.push({
3725
4011
  type: "cross_cube",
3726
4012
  message: `Step ${r + 1} uses cube "${e}" but no binding key mapping exists for it`,
@@ -3730,26 +4016,26 @@ function Cn(e, t) {
3730
4016
  }
3731
4017
  return n;
3732
4018
  }
3733
- function wn(e) {
4019
+ function pr(e) {
3734
4020
  return e ? /^P(?:\d+Y)?(?:\d+M)?(?:\d+W)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$/.test(e) ? null : {
3735
4021
  type: "time_window",
3736
4022
  message: `Invalid time window format "${e}". Expected ISO 8601 duration (e.g., P7D, PT1H)`
3737
4023
  } : null;
3738
4024
  }
3739
- function Tn(e, t) {
4025
+ function mr(e, t) {
3740
4026
  let n = [], r = [];
3741
4027
  e.steps.length < 2 && n.push({
3742
4028
  type: "general",
3743
4029
  message: "Funnel requires at least 2 steps"
3744
- }), e.bindingKey?.dimension ? (n.push(...bn(e.bindingKey, t)), n.push(...Cn(e.bindingKey, e.steps))) : n.push({
4030
+ }), e.bindingKey?.dimension ? (n.push(...lr(e.bindingKey, t)), n.push(...fr(e.bindingKey, e.steps))) : n.push({
3745
4031
  type: "binding_key",
3746
4032
  message: "Binding key dimension is required"
3747
- }), n.push(...xn(e.steps));
4033
+ }), n.push(...ur(e.steps));
3748
4034
  for (let t = 0; t < e.steps.length; t++) {
3749
- let r = e.steps[t], i = wn(r.timeToConvert);
4035
+ let r = e.steps[t], i = pr(r.timeToConvert);
3750
4036
  i && (i.stepIndex = t, n.push(i));
3751
4037
  }
3752
- let i = wn(e.globalTimeWindow);
4038
+ let i = pr(e.globalTimeWindow);
3753
4039
  return i && n.push(i), e.steps.length > 5 && r.push({
3754
4040
  type: "general",
3755
4041
  message: "Funnels with more than 5 steps may have reduced performance"
@@ -3759,7 +4045,7 @@ function Tn(e, t) {
3759
4045
  warnings: r
3760
4046
  };
3761
4047
  }
3762
- function En(e, t) {
4048
+ function hr(e, t) {
3763
4049
  return t < 2 ? {
3764
4050
  isValid: !1,
3765
4051
  message: "Add at least 2 steps for funnel"
@@ -3768,7 +4054,7 @@ function En(e, t) {
3768
4054
  message: "Select a binding key dimension"
3769
4055
  } : { isValid: !0 };
3770
4056
  }
3771
- function Dn(e) {
4057
+ function gr(e) {
3772
4058
  if (!e?.cubes) return [];
3773
4059
  let t = [];
3774
4060
  for (let n of e.cubes) if (n.dimensions) for (let e of n.dimensions) (e.type === "string" || e.type === "number") && t.push({
@@ -3778,7 +4064,7 @@ function Dn(e) {
3778
4064
  });
3779
4065
  return t;
3780
4066
  }
3781
- function On(e) {
4067
+ function _r(e) {
3782
4068
  if (!e?.dimension) return "Select binding key...";
3783
4069
  if (typeof e.dimension == "string") return e.dimension.split(".")[1] || e.dimension;
3784
4070
  if (e.dimension.length > 0) {
@@ -3788,6 +4074,6 @@ function On(e) {
3788
4074
  return "Select binding key...";
3789
4075
  }
3790
4076
  //#endregion
3791
- export { Gt as A, Lt as C, Ht as D, zt as E, ot as F, ze as I, $ as M, Rt as N, Kt as O, st as P, Jt as S, Ut as T, Xt as _, Cn as a, Yt as b, yn as c, dn as d, mn as f, Zt as g, _n as h, bn as i, Wt as j, Bt as k, un as l, hn as m, On as n, Tn as o, fn as p, En as r, xn as s, Dn as t, pn as u, en as v, Vt as w, Qt as x, $t as y };
4077
+ export { Dn as A, yn as C, wn as D, xn as E, nt as F, Je as I, $ as M, bn as N, On as O, Pt as P, An as S, Tn as T, Mn as _, fr as a, jn as b, cr as c, er as d, rr as f, Nn as g, or as h, lr as i, En as j, Sn as k, $n as l, ir as m, _r as n, mr as o, tr as p, hr as r, ur as s, gr as t, nr as u, Rn as v, Cn as w, Pn as x, In as y };
3792
4078
 
3793
- //# sourceMappingURL=analysis-builder-shared-x576-O5p.js.map
4079
+ //# sourceMappingURL=analysis-builder-shared-BVK4TYfR.js.map