drizzle-cube 0.6.6 → 0.6.7

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 (499) hide show
  1. package/README.md +231 -106
  2. package/dist/adapters/ActivityGridChart.config-CA4DWvoH.js +2 -0
  3. package/dist/adapters/ActivityGridChart.config-DC2PXV56.cjs +1 -0
  4. package/dist/adapters/AreaChart.config-BY4hUUJY.js +2 -0
  5. package/dist/adapters/AreaChart.config-CPwW53vL.cjs +1 -0
  6. package/dist/adapters/BarChart.config-Be-PGzp5.js +2 -0
  7. package/dist/adapters/BarChart.config-CfdsJtHY.cjs +1 -0
  8. package/dist/adapters/BoxPlotChart.config-BYwJZm4S.js +2 -0
  9. package/dist/adapters/BoxPlotChart.config-BoZN94lR.cjs +1 -0
  10. package/dist/adapters/BubbleChart.config-DX9aSqMD.js +2 -0
  11. package/dist/adapters/BubbleChart.config-ijpB_fme.cjs +1 -0
  12. package/dist/adapters/CandlestickChart.config-C3iEXUN1.js +2 -0
  13. package/dist/adapters/CandlestickChart.config-DIGeboSZ.cjs +1 -0
  14. package/dist/adapters/DataTable.config-BjFTY-Md.js +2 -0
  15. package/dist/adapters/DataTable.config-ClJZRtsp.cjs +1 -0
  16. package/dist/adapters/FunnelChart.config-DYDd9Y2z.cjs +1 -0
  17. package/dist/adapters/FunnelChart.config-cVxnY9hD.js +2 -0
  18. package/dist/adapters/GaugeChart.config-BxWKW2b5.js +2 -0
  19. package/dist/adapters/GaugeChart.config-DsmevM9y.cjs +1 -0
  20. package/dist/adapters/HeatMapChart.config-BhO-Wj54.js +2 -0
  21. package/dist/adapters/HeatMapChart.config-HWcgNRuG.cjs +1 -0
  22. package/dist/adapters/KpiDelta.config-D3JOnd5n.js +2 -0
  23. package/dist/adapters/KpiDelta.config-DmLmTPSH.cjs +1 -0
  24. package/dist/adapters/KpiNumber.config-CVghzBbF.cjs +1 -0
  25. package/dist/adapters/KpiNumber.config-aK-Ueuhk.js +2 -0
  26. package/dist/adapters/KpiText.config-DLl8NWit.js +2 -0
  27. package/dist/adapters/KpiText.config-DbWJ42vd.cjs +1 -0
  28. package/dist/adapters/LineChart.config-C3i3Tgro.cjs +1 -0
  29. package/dist/adapters/LineChart.config-El3XPCFT.js +2 -0
  30. package/dist/adapters/MarkdownChart.config-D39QzWHW.js +2 -0
  31. package/dist/adapters/MarkdownChart.config-e_9gUs93.cjs +1 -0
  32. package/dist/adapters/MeasureProfileChart.config-BWQ82qcV.js +2 -0
  33. package/dist/adapters/MeasureProfileChart.config-l9WITF80.cjs +1 -0
  34. package/dist/adapters/PieChart.config-CO3Gib0h.js +2 -0
  35. package/dist/adapters/PieChart.config-yqXTNkix.cjs +1 -0
  36. package/dist/adapters/ProportionBarChart.config-B7CtjFwg.cjs +1 -0
  37. package/dist/adapters/ProportionBarChart.config-tGjQou_c.js +2 -0
  38. package/dist/adapters/RadarChart.config-B2YZnD_e.js +2 -0
  39. package/dist/adapters/RadarChart.config-DwJmHK8y.cjs +1 -0
  40. package/dist/adapters/RadialBarChart.config-B9XP-cQ1.cjs +1 -0
  41. package/dist/adapters/RadialBarChart.config-y2riBDwJ.js +2 -0
  42. package/dist/adapters/RetentionCombinedChart.config-Fzxwm_WV.cjs +1 -0
  43. package/dist/adapters/RetentionCombinedChart.config-ohy-zQbu.js +2 -0
  44. package/dist/adapters/RetentionHeatmap.config-0ykBWgUp.js +2 -0
  45. package/dist/adapters/RetentionHeatmap.config-DF_4ARr0.cjs +1 -0
  46. package/dist/adapters/SankeyChart.config-ChdkKqAn.cjs +1 -0
  47. package/dist/adapters/SankeyChart.config-Cl8kxpKq.js +2 -0
  48. package/dist/adapters/ScatterChart.config-BIqh_Z8u.cjs +1 -0
  49. package/dist/adapters/ScatterChart.config-D4v0Z_w4.js +2 -0
  50. package/dist/adapters/SunburstChart.config-CGMw6hSr.cjs +1 -0
  51. package/dist/adapters/SunburstChart.config-CmK6DVYQ.js +2 -0
  52. package/dist/adapters/TreeMapChart.config-B6WC-TVm.js +2 -0
  53. package/dist/adapters/TreeMapChart.config-q-kBddZC.cjs +1 -0
  54. package/dist/adapters/WaterfallChart.config-BiOMGjjF.cjs +1 -0
  55. package/dist/adapters/WaterfallChart.config-C_K8zN09.js +2 -0
  56. package/dist/adapters/chartConfigHelpers-BZMu_1EP.cjs +1 -0
  57. package/dist/adapters/{chartConfigHelpers-CcvqrIWF.js → chartConfigHelpers-BsnbxA2c.js} +30 -1
  58. package/dist/adapters/compiler-CGJQlQ6Q.cjs +166 -0
  59. package/dist/adapters/{compiler-ZruQ85ff.js → compiler-mz2Uudwd.js} +116 -60
  60. package/dist/adapters/core/index.cjs +1 -1
  61. package/dist/adapters/core/index.js +1 -1
  62. package/dist/adapters/{core-BMZhIzaI.js → core-4WY4M7hp.js} +8 -8
  63. package/dist/adapters/core-FpI2NfHt.cjs +1 -0
  64. package/dist/adapters/{dist-CH3hwAUk.js → dist-ChBfLb7x.js} +7 -4
  65. package/dist/adapters/{dist-BOdf-GQO.cjs → dist-CohrBmKe.cjs} +2 -2
  66. package/dist/adapters/express/index.cjs +1 -1
  67. package/dist/adapters/express/index.js +5 -5
  68. package/dist/adapters/fastify/index.cjs +2 -2
  69. package/dist/adapters/fastify/index.js +10 -6
  70. package/dist/adapters/google-BhvizbFR.cjs +2 -0
  71. package/dist/adapters/{google-CvKM9yVM.js → google-eKAc20al.js} +3 -3
  72. package/dist/adapters/{handler-xR2P1EI4.js → handler-PjEeNmXY.js} +230 -152
  73. package/dist/adapters/{handler-_PXp3G47.cjs → handler-g8k2CZG2.cjs} +9 -9
  74. package/dist/adapters/hono/index.cjs +1 -1
  75. package/dist/adapters/hono/index.js +26 -18
  76. package/dist/adapters/mcp-tools.cjs +1 -1
  77. package/dist/adapters/mcp-tools.js +2 -2
  78. package/dist/adapters/mcp-transport-OBc8jVG5.js +603 -0
  79. package/dist/adapters/mcp-transport-n1r1Kqzn.cjs +40 -0
  80. package/dist/adapters/nextjs/index.cjs +1 -1
  81. package/dist/adapters/nextjs/index.js +14 -11
  82. package/dist/adapters/openai-7xjDI7R2.cjs +19 -0
  83. package/dist/adapters/{openai-B6hWZk_r.js → openai-CcY2fW3E.js} +18 -17
  84. package/dist/adapters/openai-DHjN2OwG.js +9295 -0
  85. package/dist/{server/openai-C3-mjSAc.cjs → adapters/openai-DnWF0wCU.cjs} +1 -1
  86. package/dist/adapters/utils-DJ0_72_G.cjs +128 -0
  87. package/dist/adapters/{utils-U7gV5wQL.js → utils-G52pPkce.js} +51 -17
  88. package/dist/adapters/utils.cjs +1 -1
  89. package/dist/adapters/utils.js +1 -1
  90. package/dist/cjs/client/charts/chartConfigHelpers.d.ts +20 -0
  91. package/dist/cjs/client/components/AgenticNotebook/AgentChatPanel.d.ts +1 -1
  92. package/dist/cjs/client/components/AgenticNotebook/ChatInput.d.ts +1 -1
  93. package/dist/cjs/client/components/AgenticNotebook/ChatMessage.d.ts +1 -1
  94. package/dist/cjs/client/components/AgenticNotebook/NotebookCanvas.d.ts +2 -2
  95. package/dist/cjs/client/components/AgenticNotebook/NotebookMarkdownBlock.d.ts +1 -1
  96. package/dist/cjs/client/components/AgenticNotebook/NotebookPortletBlock.d.ts +1 -1
  97. package/dist/cjs/client/components/AgenticNotebook/index.d.ts +1 -1
  98. package/dist/cjs/client/components/AnalysisBuilder/AnalysisQueryPanel.d.ts +1 -1
  99. package/dist/cjs/client/components/AnalysisBuilder/AnalysisResultsPanel.d.ts +1 -1
  100. package/dist/cjs/client/components/AnalysisBuilder/AnalysisTypeSelector.d.ts +1 -1
  101. package/dist/cjs/client/components/AnalysisBuilder/BreakdownComparisonToggle.d.ts +1 -1
  102. package/dist/cjs/client/components/AnalysisBuilder/BreakdownItemCard.d.ts +1 -1
  103. package/dist/cjs/client/components/AnalysisBuilder/BreakdownRow.d.ts +1 -1
  104. package/dist/cjs/client/components/AnalysisBuilder/BreakdownSection.d.ts +1 -1
  105. package/dist/cjs/client/components/AnalysisBuilder/ExecutionPlanPanel.d.ts +1 -1
  106. package/dist/cjs/client/components/AnalysisBuilder/FieldSearchResults.d.ts +1 -1
  107. package/dist/cjs/client/components/AnalysisBuilder/FlowConfigPanel.d.ts +1 -1
  108. package/dist/cjs/client/components/AnalysisBuilder/FlowDepthControls.d.ts +1 -1
  109. package/dist/cjs/client/components/AnalysisBuilder/FlowModeContent.d.ts +1 -1
  110. package/dist/cjs/client/components/AnalysisBuilder/FlowVisualizationPicker.d.ts +1 -1
  111. package/dist/cjs/client/components/AnalysisBuilder/FunnelBindingKeySelector.d.ts +1 -1
  112. package/dist/cjs/client/components/AnalysisBuilder/FunnelConfigPanel.d.ts +1 -1
  113. package/dist/cjs/client/components/AnalysisBuilder/FunnelModeContent.d.ts +1 -1
  114. package/dist/cjs/client/components/AnalysisBuilder/FunnelStepCard.d.ts +1 -1
  115. package/dist/cjs/client/components/AnalysisBuilder/FunnelStepList.d.ts +1 -1
  116. package/dist/cjs/client/components/AnalysisBuilder/LegacyBooleanOptions.d.ts +1 -1
  117. package/dist/cjs/client/components/AnalysisBuilder/MetricItemCard.d.ts +1 -1
  118. package/dist/cjs/client/components/AnalysisBuilder/MetricRow.d.ts +1 -1
  119. package/dist/cjs/client/components/AnalysisBuilder/MetricsSection.d.ts +1 -1
  120. package/dist/cjs/client/components/AnalysisBuilder/RetentionConfigPanel.d.ts +2 -2
  121. package/dist/cjs/client/components/AnalysisBuilder/RetentionModeContent.d.ts +1 -1
  122. package/dist/cjs/client/components/AnalysisBuilder/SortToggleButton.d.ts +1 -1
  123. package/dist/cjs/client/components/DashboardPortletCard.d.ts +1 -1
  124. package/dist/cjs/client/components/DataBrowser/DataBrowserTable.d.ts +1 -1
  125. package/dist/cjs/client/components/analyticsPortlet/intrinsicChartHeight.d.ts +9 -0
  126. package/dist/cjs/client/components/charts/ActivityGridChart.d.ts +1 -1
  127. package/dist/cjs/client/components/charts/AngledXAxisTick.d.ts +5 -0
  128. package/dist/cjs/client/components/charts/AreaChart.d.ts +1 -1
  129. package/dist/cjs/client/components/charts/BarChart.d.ts +1 -1
  130. package/dist/cjs/client/components/charts/BoxPlotChart.d.ts +1 -1
  131. package/dist/cjs/client/components/charts/BubbleChart.d.ts +1 -1
  132. package/dist/cjs/client/components/charts/CandlestickChart.d.ts +1 -1
  133. package/dist/cjs/client/components/charts/ChartContainer.d.ts +7 -1
  134. package/dist/cjs/client/components/charts/ChartSummaryHeader.d.ts +31 -0
  135. package/dist/cjs/client/components/charts/DataTable.d.ts +1 -1
  136. package/dist/cjs/client/components/charts/FunnelChart.d.ts +1 -1
  137. package/dist/cjs/client/components/charts/GaugeChart.d.ts +1 -1
  138. package/dist/cjs/client/components/charts/HeatMapChart.d.ts +1 -1
  139. package/dist/cjs/client/components/charts/KpiCompactLayout.d.ts +31 -0
  140. package/dist/cjs/client/components/charts/KpiDelta.d.ts +1 -1
  141. package/dist/cjs/client/components/charts/KpiDelta.helpers.d.ts +2 -0
  142. package/dist/cjs/client/components/charts/KpiNumber.d.ts +1 -1
  143. package/dist/cjs/client/components/charts/KpiStates.d.ts +7 -2
  144. package/dist/cjs/client/components/charts/KpiText.d.ts +1 -1
  145. package/dist/cjs/client/components/charts/LineChart.d.ts +1 -1
  146. package/dist/cjs/client/components/charts/MarkdownChart.d.ts +1 -1
  147. package/dist/cjs/client/components/charts/MeasureProfileChart.d.ts +1 -1
  148. package/dist/cjs/client/components/charts/PieChart.d.ts +1 -1
  149. package/dist/cjs/client/components/charts/ProportionBarChart.config.d.ts +10 -0
  150. package/dist/cjs/client/components/charts/ProportionBarChart.d.ts +12 -0
  151. package/dist/cjs/client/components/charts/RadarChart.d.ts +1 -1
  152. package/dist/cjs/client/components/charts/RadialBarChart.d.ts +1 -1
  153. package/dist/cjs/client/components/charts/RetentionCombinedChart.d.ts +1 -1
  154. package/dist/cjs/client/components/charts/RetentionHeatmap.d.ts +1 -1
  155. package/dist/cjs/client/components/charts/SankeyChart.d.ts +1 -1
  156. package/dist/cjs/client/components/charts/ScatterChart.d.ts +1 -1
  157. package/dist/cjs/client/components/charts/SunburstChart.d.ts +1 -1
  158. package/dist/cjs/client/components/charts/TreeMapChart.d.ts +1 -1
  159. package/dist/cjs/client/components/charts/WaterfallChart.d.ts +1 -1
  160. package/dist/cjs/client/components/charts/cartesianChartHelpers.d.ts +62 -0
  161. package/dist/cjs/client/components/charts/chartScaffolding.d.ts +29 -0
  162. package/dist/cjs/client/icons/types.d.ts +1 -0
  163. package/dist/cjs/client/types.d.ts +7 -1
  164. package/dist/cli/index.cjs +6 -5
  165. package/dist/client/charts/chartConfigHelpers.d.ts +20 -0
  166. package/dist/client/charts.js +13 -13
  167. package/dist/client/chunks/{DashboardEditModal-9o16JNF0.js → DashboardEditModal-BEG0d7wI.js} +4599 -1321
  168. package/dist/client/chunks/DashboardEditModal-BEG0d7wI.js.map +1 -0
  169. package/dist/client/chunks/ProportionBarChart-xLX6XD4W.js +109 -0
  170. package/dist/client/chunks/ProportionBarChart-xLX6XD4W.js.map +1 -0
  171. package/dist/client/chunks/{RetentionCombinedChart-DY7wKLs5.js → RetentionCombinedChart-DeFz5wJh.js} +8 -8
  172. package/dist/client/chunks/{RetentionCombinedChart-DY7wKLs5.js.map → RetentionCombinedChart-DeFz5wJh.js.map} +1 -1
  173. package/dist/client/chunks/{RetentionHeatmap-iNCG-dLd.js → RetentionHeatmap-DkJOiNwz.js} +6 -6
  174. package/dist/client/chunks/{RetentionHeatmap-iNCG-dLd.js.map → RetentionHeatmap-DkJOiNwz.js.map} +1 -1
  175. package/dist/client/chunks/{analysis-builder-BDWychCW.js → analysis-builder-BWLL6ztg.js} +421 -413
  176. package/dist/client/chunks/analysis-builder-BWLL6ztg.js.map +1 -0
  177. package/dist/client/chunks/{analysis-builder-shared-DkL0e-wU.js → analysis-builder-shared-Ba3JsRNw.js} +454 -452
  178. package/dist/client/chunks/analysis-builder-shared-Ba3JsRNw.js.map +1 -0
  179. package/dist/client/chunks/{chart-activity-grid-DDqFVWoa.js → chart-activity-grid-CyVDJSAI.js} +43 -6
  180. package/dist/client/chunks/{chart-activity-grid-DDqFVWoa.js.map → chart-activity-grid-CyVDJSAI.js.map} +1 -1
  181. package/dist/client/chunks/chart-area-b5UAS6NZ.js +963 -0
  182. package/dist/client/chunks/chart-area-b5UAS6NZ.js.map +1 -0
  183. package/dist/client/chunks/{chart-bar-DAO3PPcE.js → chart-bar-aVNonvWw.js} +71 -64
  184. package/dist/client/chunks/chart-bar-aVNonvWw.js.map +1 -0
  185. package/dist/client/chunks/{chart-box-plot-CUpFyQQk.js → chart-box-plot-Bx6M97VL.js} +3 -3
  186. package/dist/client/chunks/{chart-box-plot-CUpFyQQk.js.map → chart-box-plot-Bx6M97VL.js.map} +1 -1
  187. package/dist/client/chunks/{chart-bubble-DvP_6_n9.js → chart-bubble-EWd4_ucG.js} +5 -5
  188. package/dist/client/chunks/{chart-bubble-DvP_6_n9.js.map → chart-bubble-EWd4_ucG.js.map} +1 -1
  189. package/dist/client/chunks/{chart-candlestick-Dx8ZCMzl.js → chart-candlestick-CG5EX67b.js} +3 -3
  190. package/dist/client/chunks/{chart-candlestick-Dx8ZCMzl.js.map → chart-candlestick-CG5EX67b.js.map} +1 -1
  191. package/dist/client/chunks/{chart-config-activity-grid-BU_bkvER.js → chart-config-activity-grid-C4vXGQNu.js} +2 -2
  192. package/dist/client/chunks/{chart-config-activity-grid-BU_bkvER.js.map → chart-config-activity-grid-C4vXGQNu.js.map} +1 -1
  193. package/dist/client/chunks/{chart-config-area-DxwIZ4Uf.js → chart-config-area-DsrZCIwF.js} +35 -4
  194. package/dist/client/chunks/chart-config-area-DsrZCIwF.js.map +1 -0
  195. package/dist/client/chunks/{chart-config-bar-Cc8GY9aQ.js → chart-config-bar-BixSs43E.js} +7 -7
  196. package/dist/client/chunks/{chart-config-bar-Cc8GY9aQ.js.map → chart-config-bar-BixSs43E.js.map} +1 -1
  197. package/dist/client/chunks/{chart-config-box-plot-Bs8ovYvV.js → chart-config-box-plot-DMuJZqkr.js} +2 -2
  198. package/dist/client/chunks/{chart-config-box-plot-Bs8ovYvV.js.map → chart-config-box-plot-DMuJZqkr.js.map} +1 -1
  199. package/dist/client/chunks/{chart-config-bubble-BfgY7pt8.js → chart-config-bubble-1IyZinH0.js} +2 -2
  200. package/dist/client/chunks/{chart-config-bubble-BfgY7pt8.js.map → chart-config-bubble-1IyZinH0.js.map} +1 -1
  201. package/dist/client/chunks/{chart-config-candlestick-jaeNNEtC.js → chart-config-candlestick-QwQwJB_-.js} +2 -2
  202. package/dist/client/chunks/{chart-config-candlestick-jaeNNEtC.js.map → chart-config-candlestick-QwQwJB_-.js.map} +1 -1
  203. package/dist/client/chunks/{chart-config-data-table-CRk0C0rW.js → chart-config-data-table-CrGyS7aJ.js} +2 -2
  204. package/dist/client/chunks/{chart-config-data-table-CRk0C0rW.js.map → chart-config-data-table-CrGyS7aJ.js.map} +1 -1
  205. package/dist/client/chunks/{chart-config-funnel-boT_LNfl.js → chart-config-funnel-DMLLKtPF.js} +2 -2
  206. package/dist/client/chunks/{chart-config-funnel-boT_LNfl.js.map → chart-config-funnel-DMLLKtPF.js.map} +1 -1
  207. package/dist/client/chunks/{chart-config-gauge-C5uJEr97.js → chart-config-gauge-DNafFwfS.js} +2 -2
  208. package/dist/client/chunks/{chart-config-gauge-C5uJEr97.js.map → chart-config-gauge-DNafFwfS.js.map} +1 -1
  209. package/dist/client/chunks/{chart-config-heat-map-CCarP44-.js → chart-config-heat-map-CJF65SyL.js} +2 -2
  210. package/dist/client/chunks/{chart-config-heat-map-CCarP44-.js.map → chart-config-heat-map-CJF65SyL.js.map} +1 -1
  211. package/dist/client/chunks/{chart-config-kpi-delta-DYopvwyG.js → chart-config-kpi-delta-Cl7k6jTj.js} +13 -4
  212. package/dist/client/chunks/chart-config-kpi-delta-Cl7k6jTj.js.map +1 -0
  213. package/dist/client/chunks/{chart-config-kpi-number-BhMdoArB.js → chart-config-kpi-number-DCcnANWC.js} +6 -4
  214. package/dist/client/chunks/chart-config-kpi-number-DCcnANWC.js.map +1 -0
  215. package/dist/client/chunks/{chart-config-kpi-text-DE6Zdi53.js → chart-config-kpi-text-DnnxvOSA.js} +2 -2
  216. package/dist/client/chunks/{chart-config-kpi-text-DE6Zdi53.js.map → chart-config-kpi-text-DnnxvOSA.js.map} +1 -1
  217. package/dist/client/chunks/{chart-config-line-CBfM0Rds.js → chart-config-line-CBF9Px9b.js} +9 -7
  218. package/dist/client/chunks/chart-config-line-CBF9Px9b.js.map +1 -0
  219. package/dist/client/chunks/{chart-config-markdown-BCDyBI8K.js → chart-config-markdown-C5kBQOjP.js} +2 -2
  220. package/dist/client/chunks/{chart-config-markdown-BCDyBI8K.js.map → chart-config-markdown-C5kBQOjP.js.map} +1 -1
  221. package/dist/client/chunks/{chart-config-measure-profile-BgQIH1u2.js → chart-config-measure-profile-CRSRIpKh.js} +2 -2
  222. package/dist/client/chunks/{chart-config-measure-profile-BgQIH1u2.js.map → chart-config-measure-profile-CRSRIpKh.js.map} +1 -1
  223. package/dist/client/chunks/{chart-config-pie-ChfFz6DV.js → chart-config-pie-DZLa6Eqm.js} +3 -3
  224. package/dist/client/chunks/{chart-config-pie-ChfFz6DV.js.map → chart-config-pie-DZLa6Eqm.js.map} +1 -1
  225. package/dist/client/chunks/{chart-config-radar-BlAIGnww.js → chart-config-radar-DR6vHHyd.js} +3 -3
  226. package/dist/client/chunks/{chart-config-radar-BlAIGnww.js.map → chart-config-radar-DR6vHHyd.js.map} +1 -1
  227. package/dist/client/chunks/{chart-config-radial-bar-VFerwbCO.js → chart-config-radial-bar-DVFou4fB.js} +3 -3
  228. package/dist/client/chunks/{chart-config-radial-bar-VFerwbCO.js.map → chart-config-radial-bar-DVFou4fB.js.map} +1 -1
  229. package/dist/client/chunks/{chart-config-sankey-BhrDxIgj.js → chart-config-sankey-De8E0C1A.js} +2 -2
  230. package/dist/client/chunks/{chart-config-sankey-BhrDxIgj.js.map → chart-config-sankey-De8E0C1A.js.map} +1 -1
  231. package/dist/client/chunks/{chart-config-scatter-q_olh54e.js → chart-config-scatter-CWA89oX4.js} +2 -2
  232. package/dist/client/chunks/{chart-config-scatter-q_olh54e.js.map → chart-config-scatter-CWA89oX4.js.map} +1 -1
  233. package/dist/client/chunks/{chart-config-sunburst-BOmkOnKn.js → chart-config-sunburst-B4NUYHMH.js} +2 -2
  234. package/dist/client/chunks/{chart-config-sunburst-BOmkOnKn.js.map → chart-config-sunburst-B4NUYHMH.js.map} +1 -1
  235. package/dist/client/chunks/{chart-config-tree-map-BjX88YBY.js → chart-config-tree-map-Uhise6Bx.js} +3 -3
  236. package/dist/client/chunks/{chart-config-tree-map-BjX88YBY.js.map → chart-config-tree-map-Uhise6Bx.js.map} +1 -1
  237. package/dist/client/chunks/{chart-config-waterfall-QsWXVSoF.js → chart-config-waterfall-DlQb_PLh.js} +2 -2
  238. package/dist/client/chunks/{chart-config-waterfall-QsWXVSoF.js.map → chart-config-waterfall-DlQb_PLh.js.map} +1 -1
  239. package/dist/client/chunks/{chart-data-table-BP6DMdom.js → chart-data-table-D6Cu86m_.js} +1072 -1034
  240. package/dist/client/chunks/chart-data-table-D6Cu86m_.js.map +1 -0
  241. package/dist/client/chunks/{chart-funnel-xeVGBy-p.js → chart-funnel-CLRYMbFj.js} +3 -3
  242. package/dist/client/chunks/{chart-funnel-xeVGBy-p.js.map → chart-funnel-CLRYMbFj.js.map} +1 -1
  243. package/dist/client/chunks/{chart-gauge-DXQ4r3cb.js → chart-gauge-BRqb8eNU.js} +62 -62
  244. package/dist/client/chunks/{chart-gauge-DXQ4r3cb.js.map → chart-gauge-BRqb8eNU.js.map} +1 -1
  245. package/dist/client/chunks/{chart-heat-map-Pnk6rhqQ.js → chart-heat-map-BCfr3nYJ.js} +4 -4
  246. package/dist/client/chunks/{chart-heat-map-Pnk6rhqQ.js.map → chart-heat-map-BCfr3nYJ.js.map} +1 -1
  247. package/dist/client/chunks/{chart-kpi-delta-nXQnRRBr.js → chart-kpi-delta-ISxzG6g_.js} +122 -48
  248. package/dist/client/chunks/chart-kpi-delta-ISxzG6g_.js.map +1 -0
  249. package/dist/client/chunks/chart-kpi-number-OmRCPf7D.js +263 -0
  250. package/dist/client/chunks/chart-kpi-number-OmRCPf7D.js.map +1 -0
  251. package/dist/client/chunks/{chart-kpi-text-CurpqmaD.js → chart-kpi-text-BUm932QA.js} +4 -4
  252. package/dist/client/chunks/{chart-kpi-text-CurpqmaD.js.map → chart-kpi-text-BUm932QA.js.map} +1 -1
  253. package/dist/client/chunks/chart-line-BM_DrpQW.js +117 -0
  254. package/dist/client/chunks/chart-line-BM_DrpQW.js.map +1 -0
  255. package/dist/client/chunks/{chart-markdown-BVrqqygz.js → chart-markdown-BNrsZpqM.js} +1550 -1349
  256. package/dist/client/chunks/chart-markdown-BNrsZpqM.js.map +1 -0
  257. package/dist/client/chunks/{chart-measure-profile-k9_QDQbB.js → chart-measure-profile-DttUWxIu.js} +6 -5
  258. package/dist/client/chunks/{chart-measure-profile-k9_QDQbB.js.map → chart-measure-profile-DttUWxIu.js.map} +1 -1
  259. package/dist/client/chunks/{chart-pie-BDaaYt7a.js → chart-pie-D7pxCMll.js} +11 -11
  260. package/dist/client/chunks/{chart-pie-BDaaYt7a.js.map → chart-pie-D7pxCMll.js.map} +1 -1
  261. package/dist/client/chunks/{chart-radar-Bz07PIVe.js → chart-radar-sUnyHn3a.js} +10 -10
  262. package/dist/client/chunks/{chart-radar-Bz07PIVe.js.map → chart-radar-sUnyHn3a.js.map} +1 -1
  263. package/dist/client/chunks/{chart-radial-bar-DpyxKQMj.js → chart-radial-bar-Df9zbhst.js} +11 -11
  264. package/dist/client/chunks/{chart-radial-bar-DpyxKQMj.js.map → chart-radial-bar-Df9zbhst.js.map} +1 -1
  265. package/dist/client/chunks/{chart-sankey-BAeNbI-p.js → chart-sankey-d_iS5fjB.js} +3 -3
  266. package/dist/client/chunks/{chart-sankey-BAeNbI-p.js.map → chart-sankey-d_iS5fjB.js.map} +1 -1
  267. package/dist/client/chunks/{chart-scatter-CRhGLCcy.js → chart-scatter-DD5v7r4K.js} +10 -10
  268. package/dist/client/chunks/{chart-scatter-CRhGLCcy.js.map → chart-scatter-DD5v7r4K.js.map} +1 -1
  269. package/dist/client/chunks/{chart-sunburst-D3wV5OrK.js → chart-sunburst-jL5f9PiB.js} +4 -4
  270. package/dist/client/chunks/{chart-sunburst-D3wV5OrK.js.map → chart-sunburst-jL5f9PiB.js.map} +1 -1
  271. package/dist/client/chunks/{chart-tree-map-iI3ewOKY.js → chart-tree-map-DK-pNvh4.js} +31 -29
  272. package/dist/client/chunks/{chart-tree-map-iI3ewOKY.js.map → chart-tree-map-DK-pNvh4.js.map} +1 -1
  273. package/dist/client/chunks/{chart-waterfall-BrrYTZfs.js → chart-waterfall-CBGewe2Z.js} +4 -4
  274. package/dist/client/chunks/{chart-waterfall-BrrYTZfs.js.map → chart-waterfall-CBGewe2Z.js.map} +1 -1
  275. package/dist/client/chunks/{charts-core-Cs-UIsQa.js → charts-core-BHjcM-rm.js} +2 -2
  276. package/dist/client/chunks/{charts-core-Cs-UIsQa.js.map → charts-core-BHjcM-rm.js.map} +1 -1
  277. package/dist/client/chunks/charts-loader-FXj1JiQZ.js +85 -0
  278. package/dist/client/chunks/charts-loader-FXj1JiQZ.js.map +1 -0
  279. package/dist/client/chunks/{core-D7vPfUIe.js → core-BWRP9s8x.js} +9 -8
  280. package/dist/client/chunks/core-BWRP9s8x.js.map +1 -0
  281. package/dist/client/chunks/{dist-BwQr11Fz.js → dist-BPmPx7kz.js} +56 -51
  282. package/dist/client/chunks/{dist-BwQr11Fz.js.map → dist-BPmPx7kz.js.map} +1 -1
  283. package/dist/client/chunks/{exceljs.min-Dey-qIFL.js → exceljs.min-DWC_b8G9.js} +236 -202
  284. package/dist/client/chunks/{exceljs.min-Dey-qIFL.js.map → exceljs.min-DWC_b8G9.js.map} +1 -1
  285. package/dist/client/chunks/{javascript-DFnKaHmQ.js → javascript-D6aJaG8F.js} +7 -5
  286. package/dist/client/chunks/javascript-D6aJaG8F.js.map +1 -0
  287. package/dist/client/chunks/json-BrJhaXJI.js +44 -0
  288. package/dist/client/chunks/json-BrJhaXJI.js.map +1 -0
  289. package/dist/client/chunks/{nl-NL-2zTAWTej.js → nl-NL-B1MNDJT-.js} +39 -2
  290. package/dist/client/chunks/{nl-NL-2zTAWTej.js.map → nl-NL-B1MNDJT-.js.map} +1 -1
  291. package/dist/client/chunks/{rolldown-runtime-CWhphoD1.js → rolldown-runtime-DArdT4gl.js} +2 -2
  292. package/dist/client/chunks/{schema-visualization-BGT_cNon.js → schema-visualization-BXdd320w.js} +10 -10
  293. package/dist/client/chunks/schema-visualization-BXdd320w.js.map +1 -0
  294. package/dist/client/chunks/{syntaxHighlighting-Bq2Bj9Xt.js → syntaxHighlighting-Cm43as8i.js} +2 -2
  295. package/dist/client/chunks/{syntaxHighlighting-Bq2Bj9Xt.js.map → syntaxHighlighting-Cm43as8i.js.map} +1 -1
  296. package/dist/client/chunks/{useDebounce-7suCFq9v.js → useDirtyStateTracking-CFgSTyny.js} +112 -50
  297. package/dist/client/chunks/useDirtyStateTracking-CFgSTyny.js.map +1 -0
  298. package/dist/client/chunks/{useExplainAI-DueJjb0r.js → useExplainAI-CisDjZNp.js} +18 -18
  299. package/dist/client/chunks/{useExplainAI-DueJjb0r.js.map → useExplainAI-CisDjZNp.js.map} +1 -1
  300. package/dist/client/chunks/{utils-DjLiJKS_.js → utils-CToHkuhU.js} +2 -2
  301. package/dist/client/chunks/{utils-DjLiJKS_.js.map → utils-CToHkuhU.js.map} +1 -1
  302. package/dist/client/chunks/{vendor-ChnlgSP0.js → vendor-D5xADz_A.js} +223 -167
  303. package/dist/client/chunks/vendor-D5xADz_A.js.map +1 -0
  304. package/dist/client/components/AgenticNotebook/AgentChatPanel.d.ts +1 -1
  305. package/dist/client/components/AgenticNotebook/ChatInput.d.ts +1 -1
  306. package/dist/client/components/AgenticNotebook/ChatMessage.d.ts +1 -1
  307. package/dist/client/components/AgenticNotebook/NotebookCanvas.d.ts +2 -2
  308. package/dist/client/components/AgenticNotebook/NotebookMarkdownBlock.d.ts +1 -1
  309. package/dist/client/components/AgenticNotebook/NotebookPortletBlock.d.ts +1 -1
  310. package/dist/client/components/AgenticNotebook/index.d.ts +1 -1
  311. package/dist/client/components/AnalysisBuilder/AnalysisQueryPanel.d.ts +1 -1
  312. package/dist/client/components/AnalysisBuilder/AnalysisResultsPanel.d.ts +1 -1
  313. package/dist/client/components/AnalysisBuilder/AnalysisTypeSelector.d.ts +1 -1
  314. package/dist/client/components/AnalysisBuilder/BreakdownComparisonToggle.d.ts +1 -1
  315. package/dist/client/components/AnalysisBuilder/BreakdownItemCard.d.ts +1 -1
  316. package/dist/client/components/AnalysisBuilder/BreakdownRow.d.ts +1 -1
  317. package/dist/client/components/AnalysisBuilder/BreakdownSection.d.ts +1 -1
  318. package/dist/client/components/AnalysisBuilder/ExecutionPlanPanel.d.ts +1 -1
  319. package/dist/client/components/AnalysisBuilder/FieldSearchResults.d.ts +1 -1
  320. package/dist/client/components/AnalysisBuilder/FlowConfigPanel.d.ts +1 -1
  321. package/dist/client/components/AnalysisBuilder/FlowDepthControls.d.ts +1 -1
  322. package/dist/client/components/AnalysisBuilder/FlowModeContent.d.ts +1 -1
  323. package/dist/client/components/AnalysisBuilder/FlowVisualizationPicker.d.ts +1 -1
  324. package/dist/client/components/AnalysisBuilder/FunnelBindingKeySelector.d.ts +1 -1
  325. package/dist/client/components/AnalysisBuilder/FunnelConfigPanel.d.ts +1 -1
  326. package/dist/client/components/AnalysisBuilder/FunnelModeContent.d.ts +1 -1
  327. package/dist/client/components/AnalysisBuilder/FunnelStepCard.d.ts +1 -1
  328. package/dist/client/components/AnalysisBuilder/FunnelStepList.d.ts +1 -1
  329. package/dist/client/components/AnalysisBuilder/LegacyBooleanOptions.d.ts +1 -1
  330. package/dist/client/components/AnalysisBuilder/MetricItemCard.d.ts +1 -1
  331. package/dist/client/components/AnalysisBuilder/MetricRow.d.ts +1 -1
  332. package/dist/client/components/AnalysisBuilder/MetricsSection.d.ts +1 -1
  333. package/dist/client/components/AnalysisBuilder/RetentionConfigPanel.d.ts +2 -2
  334. package/dist/client/components/AnalysisBuilder/RetentionModeContent.d.ts +1 -1
  335. package/dist/client/components/AnalysisBuilder/SortToggleButton.d.ts +1 -1
  336. package/dist/client/components/DashboardPortletCard.d.ts +1 -1
  337. package/dist/client/components/DataBrowser/DataBrowserTable.d.ts +1 -1
  338. package/dist/client/components/analyticsPortlet/intrinsicChartHeight.d.ts +9 -0
  339. package/dist/client/components/charts/ActivityGridChart.d.ts +1 -1
  340. package/dist/client/components/charts/AngledXAxisTick.d.ts +5 -0
  341. package/dist/client/components/charts/AreaChart.d.ts +1 -1
  342. package/dist/client/components/charts/BarChart.d.ts +1 -1
  343. package/dist/client/components/charts/BoxPlotChart.d.ts +1 -1
  344. package/dist/client/components/charts/BubbleChart.d.ts +1 -1
  345. package/dist/client/components/charts/CandlestickChart.d.ts +1 -1
  346. package/dist/client/components/charts/ChartContainer.d.ts +7 -1
  347. package/dist/client/components/charts/ChartSummaryHeader.d.ts +31 -0
  348. package/dist/client/components/charts/DataTable.d.ts +1 -1
  349. package/dist/client/components/charts/FunnelChart.d.ts +1 -1
  350. package/dist/client/components/charts/GaugeChart.d.ts +1 -1
  351. package/dist/client/components/charts/HeatMapChart.d.ts +1 -1
  352. package/dist/client/components/charts/KpiCompactLayout.d.ts +31 -0
  353. package/dist/client/components/charts/KpiDelta.d.ts +1 -1
  354. package/dist/client/components/charts/KpiDelta.helpers.d.ts +2 -0
  355. package/dist/client/components/charts/KpiNumber.d.ts +1 -1
  356. package/dist/client/components/charts/KpiStates.d.ts +7 -2
  357. package/dist/client/components/charts/KpiText.d.ts +1 -1
  358. package/dist/client/components/charts/LineChart.d.ts +1 -1
  359. package/dist/client/components/charts/MarkdownChart.d.ts +1 -1
  360. package/dist/client/components/charts/MeasureProfileChart.d.ts +1 -1
  361. package/dist/client/components/charts/PieChart.d.ts +1 -1
  362. package/dist/client/components/charts/ProportionBarChart.config.d.ts +10 -0
  363. package/dist/client/components/charts/ProportionBarChart.d.ts +12 -0
  364. package/dist/client/components/charts/RadarChart.d.ts +1 -1
  365. package/dist/client/components/charts/RadialBarChart.d.ts +1 -1
  366. package/dist/client/components/charts/RetentionCombinedChart.d.ts +1 -1
  367. package/dist/client/components/charts/RetentionHeatmap.d.ts +1 -1
  368. package/dist/client/components/charts/SankeyChart.d.ts +1 -1
  369. package/dist/client/components/charts/ScatterChart.d.ts +1 -1
  370. package/dist/client/components/charts/SunburstChart.d.ts +1 -1
  371. package/dist/client/components/charts/TreeMapChart.d.ts +1 -1
  372. package/dist/client/components/charts/WaterfallChart.d.ts +1 -1
  373. package/dist/client/components/charts/cartesianChartHelpers.d.ts +62 -0
  374. package/dist/client/components/charts/chartScaffolding.d.ts +29 -0
  375. package/dist/client/components.js +3 -4
  376. package/dist/client/hooks.js +4 -5
  377. package/dist/client/icons/types.d.ts +1 -0
  378. package/dist/client/icons.js +1 -1
  379. package/dist/client/index.js +48 -49
  380. package/dist/client/index.js.map +1 -1
  381. package/dist/client/providers.js +1 -1
  382. package/dist/client/schema.js +1 -1
  383. package/dist/client/styles.css +1 -1
  384. package/dist/client/styles.d.css.ts +2 -0
  385. package/dist/client/types.d.ts +7 -1
  386. package/dist/client/utils.js +13 -9
  387. package/dist/client/utils.js.map +1 -1
  388. package/dist/client-bundle-stats.html +388 -33
  389. package/dist/mcp-app/mcp-app.html +152 -165
  390. package/dist/server/chartConfigHelpers-BZMu_1EP.cjs +1 -0
  391. package/dist/server/{chartConfigHelpers-CcvqrIWF.js → chartConfigHelpers-BsnbxA2c.js} +30 -1
  392. package/dist/server/{dist-CH3hwAUk.js → dist-ChBfLb7x.js} +7 -4
  393. package/dist/server/{dist-BOdf-GQO.cjs → dist-CohrBmKe.cjs} +2 -2
  394. package/dist/server/google-BhvizbFR.cjs +2 -0
  395. package/dist/server/{google-CvKM9yVM.js → google-eKAc20al.js} +3 -3
  396. package/dist/server/index.cjs +84 -84
  397. package/dist/server/index.js +2418 -2260
  398. package/dist/server/openai-CUf4vc3Q.js +9295 -0
  399. package/dist/server/openai-Cu4TXXjl.cjs +19 -0
  400. package/dist/server/{openai-B6hWZk_r.js → openai-Czk1BdHa.js} +18 -17
  401. package/dist/{adapters/openai-C3-mjSAc.cjs → server/openai-DBwI1OSu.cjs} +1 -1
  402. package/dist/server/rolldown-runtime-B0aSnxlc.js +20 -0
  403. package/dist/server/rolldown-runtime-DF3sbh8G.cjs +1 -0
  404. package/package.json +14 -10
  405. package/dist/adapters/ActivityGridChart.config-BK3hB9co.cjs +0 -1
  406. package/dist/adapters/ActivityGridChart.config-C-68HsAw.js +0 -2
  407. package/dist/adapters/AreaChart.config-5G7_E-7u.cjs +0 -1
  408. package/dist/adapters/AreaChart.config-C7S67Qt4.js +0 -2
  409. package/dist/adapters/BarChart.config-C6kG_uEt.cjs +0 -1
  410. package/dist/adapters/BarChart.config-DQcicZYy.js +0 -2
  411. package/dist/adapters/BoxPlotChart.config-B4xDTwop.js +0 -2
  412. package/dist/adapters/BoxPlotChart.config-DifAPvo0.cjs +0 -1
  413. package/dist/adapters/BubbleChart.config-BS2edxZ5.cjs +0 -1
  414. package/dist/adapters/BubbleChart.config-C5AYou9n.js +0 -2
  415. package/dist/adapters/CandlestickChart.config-Duknkqyk.js +0 -2
  416. package/dist/adapters/CandlestickChart.config-jk3ZXIAQ.cjs +0 -1
  417. package/dist/adapters/DataTable.config-BG_5hx63.cjs +0 -1
  418. package/dist/adapters/DataTable.config-Bkv6CmFa.js +0 -2
  419. package/dist/adapters/FunnelChart.config-Dvy0S17e.js +0 -2
  420. package/dist/adapters/FunnelChart.config-DzqGZgKz.cjs +0 -1
  421. package/dist/adapters/GaugeChart.config-DAWIU33N.js +0 -2
  422. package/dist/adapters/GaugeChart.config-DC0NW8XT.cjs +0 -1
  423. package/dist/adapters/HeatMapChart.config-BlQDS9nY.cjs +0 -1
  424. package/dist/adapters/HeatMapChart.config-DccGkzHI.js +0 -2
  425. package/dist/adapters/KpiDelta.config-DvpALT3Z.js +0 -2
  426. package/dist/adapters/KpiDelta.config-u2AlJkZ3.cjs +0 -1
  427. package/dist/adapters/KpiNumber.config-CF_LqRh-.cjs +0 -1
  428. package/dist/adapters/KpiNumber.config-lhEzZOFR.js +0 -2
  429. package/dist/adapters/KpiText.config-BCYGZdnx.js +0 -2
  430. package/dist/adapters/KpiText.config-FbnsbjdV.cjs +0 -1
  431. package/dist/adapters/LineChart.config-B7qWURRH.js +0 -2
  432. package/dist/adapters/LineChart.config-B9JKd48E.cjs +0 -1
  433. package/dist/adapters/MarkdownChart.config-BIS9PqHh.js +0 -2
  434. package/dist/adapters/MarkdownChart.config-BfM9NaQe.cjs +0 -1
  435. package/dist/adapters/MeasureProfileChart.config-1hh--3nI.js +0 -2
  436. package/dist/adapters/MeasureProfileChart.config-cmL8wp6a.cjs +0 -1
  437. package/dist/adapters/PieChart.config-DzzCeT7z.cjs +0 -1
  438. package/dist/adapters/PieChart.config-aRJJwYx4.js +0 -2
  439. package/dist/adapters/RadarChart.config-AcZ7kWG8.js +0 -2
  440. package/dist/adapters/RadarChart.config-CddBTWAo.cjs +0 -1
  441. package/dist/adapters/RadialBarChart.config-D4qPexJV.cjs +0 -1
  442. package/dist/adapters/RadialBarChart.config-y-NBkq5N.js +0 -2
  443. package/dist/adapters/RetentionCombinedChart.config-BkRNE7lX.cjs +0 -1
  444. package/dist/adapters/RetentionCombinedChart.config-WoX6n6D5.js +0 -2
  445. package/dist/adapters/RetentionHeatmap.config-ByjWidhh.cjs +0 -1
  446. package/dist/adapters/RetentionHeatmap.config-DjXLk03y.js +0 -2
  447. package/dist/adapters/SankeyChart.config-BWO9LszQ.cjs +0 -1
  448. package/dist/adapters/SankeyChart.config-SuP0jjib.js +0 -2
  449. package/dist/adapters/ScatterChart.config-Dk1G4Eaj.cjs +0 -1
  450. package/dist/adapters/ScatterChart.config-DzVXd1ZM.js +0 -2
  451. package/dist/adapters/SunburstChart.config-Cu4ib4Ui.cjs +0 -1
  452. package/dist/adapters/SunburstChart.config-_0gUzNs7.js +0 -2
  453. package/dist/adapters/TreeMapChart.config-DbwYrje4.js +0 -2
  454. package/dist/adapters/TreeMapChart.config-hM8PukgE.cjs +0 -1
  455. package/dist/adapters/WaterfallChart.config-CjUHeE8R.js +0 -2
  456. package/dist/adapters/WaterfallChart.config-Dwxt0kK-.cjs +0 -1
  457. package/dist/adapters/chartConfigHelpers-DHQB-_v5.cjs +0 -1
  458. package/dist/adapters/compiler-D0v5KJhv.cjs +0 -166
  459. package/dist/adapters/core-VK-KVH9q.cjs +0 -1
  460. package/dist/adapters/google-BOnRIN1w.cjs +0 -2
  461. package/dist/adapters/mcp-transport-C2v5BTDF.cjs +0 -40
  462. package/dist/adapters/mcp-transport-CyDBoYEe.js +0 -601
  463. package/dist/adapters/openai-B1pC8nVM.js +0 -6178
  464. package/dist/adapters/openai-DQZaHN0V.cjs +0 -18
  465. package/dist/adapters/utils-CBR-9AMD.cjs +0 -128
  466. package/dist/client/chunks/ConfirmModal-D6eLc9NO.js +0 -3283
  467. package/dist/client/chunks/ConfirmModal-D6eLc9NO.js.map +0 -1
  468. package/dist/client/chunks/DashboardEditModal-9o16JNF0.js.map +0 -1
  469. package/dist/client/chunks/analysis-builder-BDWychCW.js.map +0 -1
  470. package/dist/client/chunks/analysis-builder-shared-DkL0e-wU.js.map +0 -1
  471. package/dist/client/chunks/chart-area-BHxPNsmc.js +0 -775
  472. package/dist/client/chunks/chart-area-BHxPNsmc.js.map +0 -1
  473. package/dist/client/chunks/chart-bar-DAO3PPcE.js.map +0 -1
  474. package/dist/client/chunks/chart-config-area-DxwIZ4Uf.js.map +0 -1
  475. package/dist/client/chunks/chart-config-kpi-delta-DYopvwyG.js.map +0 -1
  476. package/dist/client/chunks/chart-config-kpi-number-BhMdoArB.js.map +0 -1
  477. package/dist/client/chunks/chart-config-line-CBfM0Rds.js.map +0 -1
  478. package/dist/client/chunks/chart-data-table-BP6DMdom.js.map +0 -1
  479. package/dist/client/chunks/chart-kpi-delta-nXQnRRBr.js.map +0 -1
  480. package/dist/client/chunks/chart-kpi-number-m8UGJfBr.js +0 -244
  481. package/dist/client/chunks/chart-kpi-number-m8UGJfBr.js.map +0 -1
  482. package/dist/client/chunks/chart-line-sJK-cJc0.js +0 -101
  483. package/dist/client/chunks/chart-line-sJK-cJc0.js.map +0 -1
  484. package/dist/client/chunks/chart-markdown-BVrqqygz.js.map +0 -1
  485. package/dist/client/chunks/charts-loader-DAJbAD7a.js +0 -84
  486. package/dist/client/chunks/charts-loader-DAJbAD7a.js.map +0 -1
  487. package/dist/client/chunks/core-D7vPfUIe.js.map +0 -1
  488. package/dist/client/chunks/javascript-DFnKaHmQ.js.map +0 -1
  489. package/dist/client/chunks/json-Cu6rbgWf.js +0 -38
  490. package/dist/client/chunks/json-Cu6rbgWf.js.map +0 -1
  491. package/dist/client/chunks/schema-visualization-BGT_cNon.js.map +0 -1
  492. package/dist/client/chunks/useDebounce-7suCFq9v.js.map +0 -1
  493. package/dist/client/chunks/useDirtyStateTracking-D2OiqKoQ.js +0 -66
  494. package/dist/client/chunks/useDirtyStateTracking-D2OiqKoQ.js.map +0 -1
  495. package/dist/client/chunks/vendor-ChnlgSP0.js.map +0 -1
  496. package/dist/server/chartConfigHelpers-DHQB-_v5.cjs +0 -1
  497. package/dist/server/google-BOnRIN1w.cjs +0 -2
  498. package/dist/server/openai-B1pC8nVM.js +0 -6178
  499. package/dist/server/openai-DQZaHN0V.cjs +0 -18
@@ -1,3283 +0,0 @@
1
- import { S as e, _ as t, mt as n, v as r } from "./chart-data-table-BP6DMdom.js";
2
- import { a as i, l as a, s as o } from "./retention-ChW9jYdy.js";
3
- import { C as s, F as c, O as l, T as u } from "./useDebounce-7suCFq9v.js";
4
- import { P as d } from "./chart-activity-grid-DDqFVWoa.js";
5
- import { a as f, t as p } from "./syntaxHighlighting-Bq2Bj9Xt.js";
6
- import { n as m, t as h } from "./charts-core-Cs-UIsQa.js";
7
- import g, { memo as _, useCallback as v, useEffect as y, useMemo as b, useRef as x, useState as S } from "react";
8
- import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
9
- //#region src/client/types/analysisConfig.ts
10
- var E = (e) => e.analysisType === "query", D = (e) => e.analysisType === "funnel", O = (e) => e.analysisType === "flow", k = (e) => e.analysisType === "retention", A = (e) => "queries" in e.query && Array.isArray(e.query.queries), j = (e) => !A(e), M = (e) => {
11
- if (!e || typeof e != "object") return !1;
12
- let t = e;
13
- return !(t.version !== 1 || t.analysisType !== "query" && t.analysisType !== "funnel" && t.analysisType !== "flow" && t.analysisType !== "retention" || !t.query || typeof t.query != "object" || t.activeView !== "table" && t.activeView !== "chart");
14
- }, N = () => ({
15
- version: 1,
16
- analysisType: "query",
17
- activeView: "chart",
18
- charts: { query: {
19
- chartType: "bar",
20
- chartConfig: {},
21
- displayConfig: {}
22
- } },
23
- query: {
24
- measures: [],
25
- dimensions: []
26
- }
27
- }), P = () => ({
28
- version: 1,
29
- analysisType: "funnel",
30
- activeView: "chart",
31
- charts: { funnel: {
32
- chartType: "funnel",
33
- chartConfig: {},
34
- displayConfig: {}
35
- } },
36
- query: { funnel: {
37
- bindingKey: "",
38
- timeDimension: "",
39
- steps: []
40
- } }
41
- }), F = () => ({
42
- version: 1,
43
- analysisType: "flow",
44
- activeView: "chart",
45
- charts: { flow: {
46
- chartType: "sankey",
47
- chartConfig: {},
48
- displayConfig: {}
49
- } },
50
- query: { flow: {
51
- bindingKey: "",
52
- timeDimension: "",
53
- eventDimension: "",
54
- startingStep: {
55
- name: "",
56
- filter: void 0
57
- },
58
- stepsBefore: 3,
59
- stepsAfter: 3,
60
- joinStrategy: "auto"
61
- } }
62
- }), I = () => ({
63
- version: 1,
64
- analysisType: "retention",
65
- activeView: "chart",
66
- charts: { retention: {
67
- chartType: "heatmap",
68
- chartConfig: {},
69
- displayConfig: {}
70
- } },
71
- query: { retention: {
72
- timeDimension: "",
73
- bindingKey: "",
74
- dateRange: {
75
- start: "",
76
- end: ""
77
- },
78
- granularity: "week",
79
- periods: 12,
80
- retentionType: "classic"
81
- } }
82
- }), L = (e = "query") => {
83
- switch (e) {
84
- case "funnel": return P();
85
- case "flow": return F();
86
- case "retention": return I();
87
- default: return N();
88
- }
89
- }, ee = (e) => {
90
- if (!e || typeof e != "object") return !1;
91
- let t = e;
92
- return !(t.version !== 1 || t.activeType !== "query" && t.activeType !== "funnel" && t.activeType !== "flow" && t.activeType !== "retention" || !t.modes || typeof t.modes != "object");
93
- }, R = () => ({
94
- version: 1,
95
- activeType: "query",
96
- modes: {
97
- query: N(),
98
- funnel: P(),
99
- flow: F(),
100
- retention: I()
101
- }
102
- });
103
- //#endregion
104
- //#region src/client/utils/configMigration.ts
105
- function z(e) {
106
- return typeof e == "object" && !!e && "queries" in e && Array.isArray(e.queries);
107
- }
108
- function te(e) {
109
- return typeof e == "object" && !!e && "queries" in e && Array.isArray(e.queries) && "mergeStrategy" in e && e.mergeStrategy === "funnel";
110
- }
111
- function B(e) {
112
- return typeof e == "object" && !!e && "funnel" in e && typeof e.funnel == "object";
113
- }
114
- function ne(e) {
115
- return typeof e == "object" && !!e && "flow" in e && typeof e.flow == "object";
116
- }
117
- function V(e, t) {
118
- return t === "funnel" ? {
119
- chartType: e.funnelChartType || e.chartType || "funnel",
120
- chartConfig: e.funnelChartConfig || e.chartConfig || {},
121
- displayConfig: e.funnelDisplayConfig || e.displayConfig || {}
122
- } : t === "flow" ? {
123
- chartType: e.chartType || "sankey",
124
- chartConfig: e.chartConfig || {},
125
- displayConfig: e.displayConfig || {}
126
- } : t === "retention" ? {
127
- chartType: e.chartType || "retentionCombined",
128
- chartConfig: e.chartConfig || {},
129
- displayConfig: e.displayConfig || {}
130
- } : {
131
- chartType: e.chartType || "bar",
132
- chartConfig: e.chartConfig || {},
133
- displayConfig: e.displayConfig || {}
134
- };
135
- }
136
- function H(e) {
137
- try {
138
- let t = JSON.parse(e.query);
139
- if (a(t)) return {
140
- version: 1,
141
- analysisType: "retention",
142
- activeView: "chart",
143
- charts: { retention: V(e, "retention") },
144
- query: t
145
- };
146
- if (ne(t)) return {
147
- version: 1,
148
- analysisType: "flow",
149
- activeView: "chart",
150
- charts: { flow: V(e, "flow") },
151
- query: t
152
- };
153
- if (B(t)) return {
154
- version: 1,
155
- analysisType: "funnel",
156
- activeView: "chart",
157
- charts: { funnel: V(e, "funnel") },
158
- query: t
159
- };
160
- if (te(t)) return re(t, e);
161
- if (e.analysisType === "funnel") return {
162
- version: 1,
163
- analysisType: "funnel",
164
- activeView: "chart",
165
- charts: { funnel: V(e, "funnel") },
166
- query: B(t) ? t : { funnel: {
167
- bindingKey: "",
168
- timeDimension: "",
169
- steps: []
170
- } }
171
- };
172
- let n = V(e, "query");
173
- return z(t) ? {
174
- version: 1,
175
- analysisType: "query",
176
- activeView: "chart",
177
- charts: { query: n },
178
- query: {
179
- queries: t.queries,
180
- mergeStrategy: t.mergeStrategy === "funnel" ? "concat" : t.mergeStrategy,
181
- mergeKeys: t.mergeKeys,
182
- queryLabels: t.queryLabels
183
- }
184
- } : {
185
- version: 1,
186
- analysisType: "query",
187
- activeView: "chart",
188
- charts: { query: n },
189
- query: t
190
- };
191
- } catch (e) {
192
- return console.warn("[configMigration] Failed to parse legacy portlet:", e), N();
193
- }
194
- }
195
- function re(e, t) {
196
- let n = "";
197
- e.funnelBindingKey?.dimension && (typeof e.funnelBindingKey.dimension == "string" ? n = e.funnelBindingKey.dimension : Array.isArray(e.funnelBindingKey.dimension) && (n = e.funnelBindingKey.dimension.map((e) => ({
198
- cube: e.cube,
199
- dimension: e.dimension
200
- }))));
201
- let r = "";
202
- e.queries.length > 0 && e.queries[0].timeDimensions?.length && (r = e.queries[0].timeDimensions[0].dimension);
203
- let i = e.queries.map((t, n) => {
204
- let r = { name: e.queryLabels?.[n] || `Step ${n + 1}` };
205
- return t.filters && t.filters.length > 0 && (r.filter = t.filters.length === 1 ? t.filters[0] : { and: t.filters }), e.stepTimeToConvert && e.stepTimeToConvert[n] && (r.timeToConvert = e.stepTimeToConvert[n]), r;
206
- });
207
- return {
208
- version: 1,
209
- analysisType: "funnel",
210
- activeView: "chart",
211
- charts: { funnel: t ? V(t, "funnel") : {
212
- chartType: "funnel",
213
- chartConfig: {},
214
- displayConfig: {}
215
- } },
216
- query: { funnel: {
217
- bindingKey: n,
218
- timeDimension: r,
219
- steps: i,
220
- includeTimeMetrics: !0
221
- } }
222
- };
223
- }
224
- function ie(e) {
225
- if (M(e)) return e;
226
- if (e && typeof e == "object" && "query" in e && typeof e.query == "string") return H(e);
227
- if (e && typeof e == "object") try {
228
- return H({ query: JSON.stringify(e) });
229
- } catch {}
230
- return console.warn("[configMigration] Unknown config format, using defaults"), N();
231
- }
232
- function ae(e) {
233
- return typeof e == "object" && !!e && "analysisConfig" in e && M(e.analysisConfig);
234
- }
235
- function U(e) {
236
- if (ae(e)) return e;
237
- let t = H({
238
- query: e.query ?? "{}",
239
- chartType: e.chartType,
240
- chartConfig: e.chartConfig,
241
- displayConfig: e.displayConfig,
242
- analysisType: e.analysisType === "flow" || e.analysisType === "retention" ? void 0 : e.analysisType,
243
- funnelChartType: e.funnelChartType,
244
- funnelChartConfig: e.funnelChartConfig,
245
- funnelDisplayConfig: e.funnelDisplayConfig
246
- });
247
- return {
248
- ...e,
249
- analysisConfig: t
250
- };
251
- }
252
- //#endregion
253
- //#region src/client/shared/filters/operators.ts
254
- var W = {
255
- equals: {
256
- label: "filter.operator.equals.label",
257
- description: "filter.operator.equals.description",
258
- requiresValues: !0,
259
- supportsMultipleValues: !0,
260
- valueType: "any",
261
- fieldTypes: [
262
- "string",
263
- "number",
264
- "boolean",
265
- "time"
266
- ]
267
- },
268
- notEquals: {
269
- label: "filter.operator.notEquals.label",
270
- description: "filter.operator.notEquals.description",
271
- requiresValues: !0,
272
- supportsMultipleValues: !0,
273
- valueType: "any",
274
- fieldTypes: [
275
- "string",
276
- "number",
277
- "boolean",
278
- "time"
279
- ]
280
- },
281
- contains: {
282
- label: "filter.operator.contains.label",
283
- description: "filter.operator.contains.description",
284
- requiresValues: !0,
285
- supportsMultipleValues: !1,
286
- valueType: "string",
287
- fieldTypes: ["string"]
288
- },
289
- notContains: {
290
- label: "filter.operator.notContains.label",
291
- description: "filter.operator.notContains.description",
292
- requiresValues: !0,
293
- supportsMultipleValues: !1,
294
- valueType: "string",
295
- fieldTypes: ["string"]
296
- },
297
- startsWith: {
298
- label: "filter.operator.startsWith.label",
299
- description: "filter.operator.startsWith.description",
300
- requiresValues: !0,
301
- supportsMultipleValues: !1,
302
- valueType: "string",
303
- fieldTypes: ["string"]
304
- },
305
- notStartsWith: {
306
- label: "filter.operator.notStartsWith.label",
307
- description: "filter.operator.notStartsWith.description",
308
- requiresValues: !0,
309
- supportsMultipleValues: !1,
310
- valueType: "string",
311
- fieldTypes: ["string"]
312
- },
313
- endsWith: {
314
- label: "filter.operator.endsWith.label",
315
- description: "filter.operator.endsWith.description",
316
- requiresValues: !0,
317
- supportsMultipleValues: !1,
318
- valueType: "string",
319
- fieldTypes: ["string"]
320
- },
321
- notEndsWith: {
322
- label: "filter.operator.notEndsWith.label",
323
- description: "filter.operator.notEndsWith.description",
324
- requiresValues: !0,
325
- supportsMultipleValues: !1,
326
- valueType: "string",
327
- fieldTypes: ["string"]
328
- },
329
- like: {
330
- label: "filter.operator.like.label",
331
- description: "filter.operator.like.description",
332
- requiresValues: !0,
333
- supportsMultipleValues: !1,
334
- valueType: "string",
335
- fieldTypes: ["string"]
336
- },
337
- notLike: {
338
- label: "filter.operator.notLike.label",
339
- description: "filter.operator.notLike.description",
340
- requiresValues: !0,
341
- supportsMultipleValues: !1,
342
- valueType: "string",
343
- fieldTypes: ["string"]
344
- },
345
- ilike: {
346
- label: "filter.operator.ilike.label",
347
- description: "filter.operator.ilike.description",
348
- requiresValues: !0,
349
- supportsMultipleValues: !1,
350
- valueType: "string",
351
- fieldTypes: ["string"]
352
- },
353
- gt: {
354
- label: "filter.operator.gt.label",
355
- description: "filter.operator.gt.description",
356
- requiresValues: !0,
357
- supportsMultipleValues: !1,
358
- valueType: "number",
359
- fieldTypes: [
360
- "number",
361
- "count",
362
- "sum",
363
- "avg",
364
- "min",
365
- "max"
366
- ]
367
- },
368
- gte: {
369
- label: "filter.operator.gte.label",
370
- description: "filter.operator.gte.description",
371
- requiresValues: !0,
372
- supportsMultipleValues: !1,
373
- valueType: "number",
374
- fieldTypes: [
375
- "number",
376
- "count",
377
- "sum",
378
- "avg",
379
- "min",
380
- "max"
381
- ]
382
- },
383
- lt: {
384
- label: "filter.operator.lt.label",
385
- description: "filter.operator.lt.description",
386
- requiresValues: !0,
387
- supportsMultipleValues: !1,
388
- valueType: "number",
389
- fieldTypes: [
390
- "number",
391
- "count",
392
- "sum",
393
- "avg",
394
- "min",
395
- "max"
396
- ]
397
- },
398
- lte: {
399
- label: "filter.operator.lte.label",
400
- description: "filter.operator.lte.description",
401
- requiresValues: !0,
402
- supportsMultipleValues: !1,
403
- valueType: "number",
404
- fieldTypes: [
405
- "number",
406
- "count",
407
- "sum",
408
- "avg",
409
- "min",
410
- "max"
411
- ]
412
- },
413
- between: {
414
- label: "filter.operator.between.label",
415
- description: "filter.operator.between.description",
416
- requiresValues: !0,
417
- supportsMultipleValues: !1,
418
- valueType: "number",
419
- fieldTypes: [
420
- "number",
421
- "count",
422
- "sum",
423
- "avg",
424
- "min",
425
- "max"
426
- ]
427
- },
428
- notBetween: {
429
- label: "filter.operator.notBetween.label",
430
- description: "filter.operator.notBetween.description",
431
- requiresValues: !0,
432
- supportsMultipleValues: !1,
433
- valueType: "number",
434
- fieldTypes: [
435
- "number",
436
- "count",
437
- "sum",
438
- "avg",
439
- "min",
440
- "max"
441
- ]
442
- },
443
- in: {
444
- label: "filter.operator.in.label",
445
- description: "filter.operator.in.description",
446
- requiresValues: !0,
447
- supportsMultipleValues: !0,
448
- valueType: "any",
449
- fieldTypes: [
450
- "string",
451
- "number",
452
- "boolean"
453
- ]
454
- },
455
- notIn: {
456
- label: "filter.operator.notIn.label",
457
- description: "filter.operator.notIn.description",
458
- requiresValues: !0,
459
- supportsMultipleValues: !0,
460
- valueType: "any",
461
- fieldTypes: [
462
- "string",
463
- "number",
464
- "boolean"
465
- ]
466
- },
467
- set: {
468
- label: "filter.operator.set.label",
469
- description: "filter.operator.set.description",
470
- requiresValues: !1,
471
- supportsMultipleValues: !1,
472
- valueType: "any",
473
- fieldTypes: [
474
- "string",
475
- "number",
476
- "time",
477
- "boolean"
478
- ]
479
- },
480
- notSet: {
481
- label: "filter.operator.notSet.label",
482
- description: "filter.operator.notSet.description",
483
- requiresValues: !1,
484
- supportsMultipleValues: !1,
485
- valueType: "any",
486
- fieldTypes: [
487
- "string",
488
- "number",
489
- "time",
490
- "boolean"
491
- ]
492
- },
493
- isEmpty: {
494
- label: "filter.operator.isEmpty.label",
495
- description: "filter.operator.isEmpty.description",
496
- requiresValues: !1,
497
- supportsMultipleValues: !1,
498
- valueType: "string",
499
- fieldTypes: ["string"]
500
- },
501
- isNotEmpty: {
502
- label: "filter.operator.isNotEmpty.label",
503
- description: "filter.operator.isNotEmpty.description",
504
- requiresValues: !1,
505
- supportsMultipleValues: !1,
506
- valueType: "string",
507
- fieldTypes: ["string"]
508
- },
509
- inDateRange: {
510
- label: "filter.operator.inDateRange.label",
511
- description: "filter.operator.inDateRange.description",
512
- requiresValues: !0,
513
- supportsMultipleValues: !1,
514
- valueType: "date",
515
- fieldTypes: ["time"]
516
- },
517
- beforeDate: {
518
- label: "filter.operator.beforeDate.label",
519
- description: "filter.operator.beforeDate.description",
520
- requiresValues: !0,
521
- supportsMultipleValues: !1,
522
- valueType: "date",
523
- fieldTypes: ["time"]
524
- },
525
- afterDate: {
526
- label: "filter.operator.afterDate.label",
527
- description: "filter.operator.afterDate.description",
528
- requiresValues: !0,
529
- supportsMultipleValues: !1,
530
- valueType: "date",
531
- fieldTypes: ["time"]
532
- },
533
- regex: {
534
- label: "filter.operator.regex.label",
535
- description: "filter.operator.regex.description",
536
- requiresValues: !0,
537
- supportsMultipleValues: !1,
538
- valueType: "string",
539
- fieldTypes: ["string"]
540
- },
541
- notRegex: {
542
- label: "filter.operator.notRegex.label",
543
- description: "filter.operator.notRegex.description",
544
- requiresValues: !0,
545
- supportsMultipleValues: !1,
546
- valueType: "string",
547
- fieldTypes: ["string"]
548
- },
549
- arrayContains: {
550
- label: "filter.operator.arrayContains.label",
551
- description: "filter.operator.arrayContains.description",
552
- requiresValues: !0,
553
- supportsMultipleValues: !0,
554
- valueType: "string",
555
- fieldTypes: ["string"]
556
- },
557
- arrayOverlaps: {
558
- label: "filter.operator.arrayOverlaps.label",
559
- description: "filter.operator.arrayOverlaps.description",
560
- requiresValues: !0,
561
- supportsMultipleValues: !0,
562
- valueType: "string",
563
- fieldTypes: ["string"]
564
- },
565
- arrayContained: {
566
- label: "filter.operator.arrayContained.label",
567
- description: "filter.operator.arrayContained.description",
568
- requiresValues: !0,
569
- supportsMultipleValues: !0,
570
- valueType: "string",
571
- fieldTypes: ["string"]
572
- }
573
- }, oe = /* @__PURE__ */ new Set([
574
- "string",
575
- "time",
576
- "boolean"
577
- ]);
578
- function se(e) {
579
- return oe.has(e) ? e : "number";
580
- }
581
- function ce(e) {
582
- let t = se(e), n = [];
583
- for (let [e, r] of Object.entries(W)) r.fieldTypes.includes(t) && n.push({
584
- operator: e,
585
- label: r.label
586
- });
587
- return n;
588
- }
589
- //#endregion
590
- //#region src/client/utils/filterUtils.ts
591
- function le(e) {
592
- return e ? e.map((e) => typeof e == "string" ? { filterId: e } : e) : [];
593
- }
594
- function ue(e) {
595
- return e.map((e) => e.member ? e : e.filterId);
596
- }
597
- function G(e, t) {
598
- return e ? e.some((e) => typeof e == "string" ? e === t : e.filterId === t) : !1;
599
- }
600
- function K(e, t) {
601
- if (!e) return;
602
- let n = e.find((e) => typeof e == "string" ? e === t : e.filterId === t);
603
- return typeof n == "object" ? n.member : void 0;
604
- }
605
- function de(e, t) {
606
- return t && "member" in e && "operator" in e ? {
607
- ...e,
608
- member: t
609
- } : e;
610
- }
611
- function q(e) {
612
- if ("member" in e && "operator" in e) {
613
- let t = e;
614
- return [
615
- "set",
616
- "notSet",
617
- "isEmpty",
618
- "isNotEmpty"
619
- ].includes(t.operator) || t.operator === "inDateRange" && t.dateRange ? !0 : !!(t.values && t.values.length > 0);
620
- }
621
- return "type" in e && "filters" in e && e.filters.filter((e) => q(e)).length > 0;
622
- }
623
- function fe(e, t) {
624
- return !e || !e.length || !t || !t.length ? [] : e.filter((e) => G(t, e.id)).filter((e) => q(e.filter)).map((e) => de(e.filter, K(t, e.id)));
625
- }
626
- function pe(e, t, n = "server") {
627
- return !e || e.length === 0 ? t : !t || t.length === 0 ? [...e] : n === "server" ? [{ and: c([...e, ...t]) }] : [{
628
- type: "and",
629
- filters: [...e, ...t]
630
- }];
631
- }
632
- function me(e) {
633
- let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set();
634
- return e.portlets.forEach((e) => {
635
- try {
636
- let i = U(e).analysisConfig.query, a = (e) => {
637
- e.measures && Array.isArray(e.measures) && e.measures.forEach((e) => t.add(e)), e.dimensions && Array.isArray(e.dimensions) && e.dimensions.forEach((e) => n.add(e)), e.timeDimensions && Array.isArray(e.timeDimensions) && e.timeDimensions.forEach((e) => {
638
- e.dimension && r.add(e.dimension);
639
- }), e.filters && l(e.filters).forEach((e) => {
640
- n.add(e);
641
- });
642
- };
643
- if ("funnel" in i) {
644
- let e = i;
645
- e.funnel?.timeDimension && r.add(e.funnel.timeDimension);
646
- } else "queries" in i ? i.queries.forEach((e) => a(e)) : a(i);
647
- } catch (t) {
648
- console.warn("Failed to extract fields from portlet:", e.id, t);
649
- }
650
- }), {
651
- measures: t,
652
- dimensions: n,
653
- timeDimensions: r
654
- };
655
- }
656
- function J(e) {
657
- if (e.dateRange) return e.dateRange;
658
- if (e.values && e.values.length > 0) return e.values.length === 1 ? e.values[0] : e.values;
659
- }
660
- function he(e, t, n) {
661
- if (!n || n.length === 0 || !t || t.length === 0) return n;
662
- let r = e?.filter((e) => e.isUniversalTime && G(t, e.id))?.filter((e) => {
663
- if (!("member" in e.filter)) return !1;
664
- let t = e.filter;
665
- return J(t) !== void 0;
666
- });
667
- if (!r || r.length === 0) return n;
668
- let i = r[0].filter, a = J(i);
669
- return n.map((e) => ({
670
- ...e,
671
- dateRange: a
672
- }));
673
- }
674
- //#endregion
675
- //#region src/client/shared/components/CodeBlock.tsx
676
- var ge = ({ code: e, language: t, title: n, maxHeight: i = "16rem", height: a, className: o = "", headerRight: s }) => {
677
- let { t: c } = d(), [l, u] = S(!1), m = x(null), h = r("copy"), g = r("check");
678
- return y(() => {
679
- if (!m.current) return;
680
- let n = m.current, r = !0;
681
- return n.textContent = e, f().then(() => {
682
- if (!r) return;
683
- let i = p();
684
- i && (n.innerHTML = i.highlight(e, { language: t }).value);
685
- }).catch(() => {
686
- r && (n.textContent = e);
687
- }), () => {
688
- r = !1;
689
- };
690
- }, [e, t]), /* @__PURE__ */ T("div", {
691
- className: `dc:relative ${o}`,
692
- children: [/* @__PURE__ */ T("div", {
693
- className: "dc:flex dc:items-center dc:justify-between dc:mb-2 dc:gap-2",
694
- children: [n && /* @__PURE__ */ w("h4", {
695
- className: "dc:text-sm dc:font-semibold text-dc-text",
696
- children: n
697
- }), /* @__PURE__ */ T("div", {
698
- className: "dc:flex dc:items-center dc:gap-2 dc:ml-auto",
699
- children: [s, /* @__PURE__ */ w("button", {
700
- onClick: async () => {
701
- try {
702
- await navigator.clipboard.writeText(e), u(!0), setTimeout(() => u(!1), 2e3);
703
- } catch {
704
- let t = document.createElement("textarea");
705
- t.value = e, t.style.position = "fixed", t.style.left = "-999999px", document.body.appendChild(t), t.select(), document.execCommand("copy"), document.body.removeChild(t), u(!0), setTimeout(() => u(!1), 2e3);
706
- }
707
- },
708
- className: "dc:px-2 dc:py-1 dc:text-xs dc:rounded hover:bg-dc-surface-secondary dc:border border-dc-border dc:transition-colors dc:flex dc:items-center dc:gap-1.5",
709
- title: l ? "Copied!" : "Copy to clipboard",
710
- children: l ? /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w(g, { className: "dc:w-3.5 dc:h-3.5 text-dc-success" }), /* @__PURE__ */ w("span", {
711
- className: "text-dc-success",
712
- children: c("common.actions.copied")
713
- })] }) : /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w(h, { className: "dc:w-3.5 dc:h-3.5 text-dc-text-secondary" }), /* @__PURE__ */ w("span", {
714
- className: "text-dc-text-secondary",
715
- children: c("common.actions.copy")
716
- })] })
717
- })]
718
- })]
719
- }), /* @__PURE__ */ w("div", {
720
- className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:overflow-auto",
721
- style: a ? {
722
- height: a,
723
- minHeight: a,
724
- maxHeight: a
725
- } : { maxHeight: i },
726
- children: /* @__PURE__ */ w("pre", {
727
- className: "dc:p-3 dc:text-xs dc:m-0",
728
- children: /* @__PURE__ */ w("code", {
729
- ref: m,
730
- className: `hljs language-${t}`,
731
- children: e
732
- })
733
- })
734
- })]
735
- });
736
- }, Y = [
737
- {
738
- name: "default",
739
- label: "Default",
740
- colors: [
741
- "#3b82f6",
742
- "#10b981",
743
- "#f59e0b",
744
- "#ef4444",
745
- "#8b5cf6",
746
- "#f97316",
747
- "#06b6d4",
748
- "#84cc16"
749
- ],
750
- gradient: [
751
- "#fde725",
752
- "#7ad151",
753
- "#22a884",
754
- "#2a788e",
755
- "#414487",
756
- "#440154"
757
- ]
758
- },
759
- {
760
- name: "ocean",
761
- label: "Ocean",
762
- colors: [
763
- "#1e3a8a",
764
- "#1e40af",
765
- "#2563eb",
766
- "#3b82f6",
767
- "#06b6d4",
768
- "#0891b2",
769
- "#0e7490",
770
- "#0f766e"
771
- ],
772
- gradient: [
773
- "#38bdf8",
774
- "#0ea5e9",
775
- "#0284c7",
776
- "#0369a1",
777
- "#075985",
778
- "#0c4a6e"
779
- ]
780
- },
781
- {
782
- name: "sunset",
783
- label: "Sunset",
784
- colors: [
785
- "#dc2626",
786
- "#ea580c",
787
- "#f59e0b",
788
- "#eab308",
789
- "#d97706",
790
- "#b45309",
791
- "#92400e",
792
- "#7c2d12"
793
- ],
794
- gradient: [
795
- "#fbbf24",
796
- "#f59e0b",
797
- "#d97706",
798
- "#b45309",
799
- "#92400e",
800
- "#7c2d12"
801
- ]
802
- },
803
- {
804
- name: "forest",
805
- label: "Forest",
806
- colors: [
807
- "#166534",
808
- "#15803d",
809
- "#16a34a",
810
- "#22c55e",
811
- "#4ade80",
812
- "#65a30d",
813
- "#84cc16",
814
- "#a3e635"
815
- ],
816
- gradient: [
817
- "#4ade80",
818
- "#22c55e",
819
- "#16a34a",
820
- "#15803d",
821
- "#166534",
822
- "#14532d"
823
- ]
824
- },
825
- {
826
- name: "purple",
827
- label: "Purple",
828
- colors: [
829
- "#581c87",
830
- "#7c3aed",
831
- "#8b5cf6",
832
- "#a855f7",
833
- "#c084fc",
834
- "#e879f9",
835
- "#f0abfc",
836
- "#fbbf24"
837
- ],
838
- gradient: [
839
- "#a855f7",
840
- "#8b5cf6",
841
- "#7c3aed",
842
- "#6d28d9",
843
- "#581c87",
844
- "#4c1d95"
845
- ]
846
- },
847
- {
848
- name: "monochrome",
849
- label: "Monochrome",
850
- colors: [
851
- "#1f2937",
852
- "#374151",
853
- "#4b5563",
854
- "#6b7280",
855
- "#9ca3af",
856
- "#d1d5db",
857
- "#e5e7eb",
858
- "#f3f4f6"
859
- ],
860
- gradient: [
861
- "#9ca3af",
862
- "#6b7280",
863
- "#4b5563",
864
- "#374151",
865
- "#1f2937",
866
- "#111827"
867
- ]
868
- },
869
- {
870
- name: "pastel",
871
- label: "Pastel",
872
- colors: [
873
- "#93c5fd",
874
- "#86efac",
875
- "#fde047",
876
- "#fca5a5",
877
- "#c4b5fd",
878
- "#fdba74",
879
- "#67e8f9",
880
- "#bef264"
881
- ],
882
- gradient: [
883
- "#fed7aa",
884
- "#ddd6fe",
885
- "#fecaca",
886
- "#fef08a",
887
- "#a7f3d0",
888
- "#bfdbfe"
889
- ]
890
- },
891
- {
892
- name: "vibrant",
893
- label: "Vibrant",
894
- colors: [
895
- "#0000ff",
896
- "#00ff00",
897
- "#ffff00",
898
- "#ff0000",
899
- "#ff00ff",
900
- "#ff8000",
901
- "#00ffff",
902
- "#8000ff"
903
- ],
904
- gradient: [
905
- "#ffff00",
906
- "#80ff00",
907
- "#00ff80",
908
- "#00ffff",
909
- "#0080ff",
910
- "#4000ff"
911
- ]
912
- },
913
- {
914
- name: "d3Category10",
915
- label: "D3 Category 10",
916
- colors: [
917
- "#1f77b4",
918
- "#ff7f0e",
919
- "#2ca02c",
920
- "#d62728",
921
- "#9467bd",
922
- "#8c564b",
923
- "#e377c2",
924
- "#7f7f7f",
925
- "#bcbd22",
926
- "#17becf"
927
- ],
928
- gradient: [
929
- "#9467bd",
930
- "#d62728",
931
- "#ff7f0e",
932
- "#bcbd22",
933
- "#2ca02c",
934
- "#1f77b4"
935
- ]
936
- },
937
- {
938
- name: "d3Tableau10",
939
- label: "D3 Tableau 10",
940
- colors: [
941
- "#4e79a7",
942
- "#f28e2c",
943
- "#e15759",
944
- "#76b7b2",
945
- "#59a14f",
946
- "#edc949",
947
- "#af7aa1",
948
- "#ff9da7",
949
- "#9c755f",
950
- "#bab0ab"
951
- ],
952
- gradient: [
953
- "#e15759",
954
- "#f28e2c",
955
- "#edc949",
956
- "#59a14f",
957
- "#76b7b2",
958
- "#4e79a7"
959
- ]
960
- },
961
- {
962
- name: "colorBrewerSet1",
963
- label: "ColorBrewer Set 1",
964
- colors: [
965
- "#e41a1c",
966
- "#377eb8",
967
- "#4daf4a",
968
- "#984ea3",
969
- "#ff7f00",
970
- "#ffff33",
971
- "#a65628",
972
- "#f781bf",
973
- "#999999"
974
- ],
975
- gradient: [
976
- "#984ea3",
977
- "#e41a1c",
978
- "#ff7f00",
979
- "#ffff33",
980
- "#4daf4a",
981
- "#377eb8"
982
- ]
983
- },
984
- {
985
- name: "colorBrewerSet2",
986
- label: "ColorBrewer Set 2",
987
- colors: [
988
- "#66c2a5",
989
- "#fc8d62",
990
- "#8da0cb",
991
- "#e78ac3",
992
- "#a6d854",
993
- "#ffd92f",
994
- "#e5c494",
995
- "#b3b3b3"
996
- ],
997
- gradient: [
998
- "#e78ac3",
999
- "#fc8d62",
1000
- "#ffd92f",
1001
- "#a6d854",
1002
- "#66c2a5",
1003
- "#8da0cb"
1004
- ]
1005
- },
1006
- {
1007
- name: "colorBrewerDark2",
1008
- label: "ColorBrewer Dark 2",
1009
- colors: [
1010
- "#1b9e77",
1011
- "#d95f02",
1012
- "#7570b3",
1013
- "#e7298a",
1014
- "#66a61e",
1015
- "#e6ab02",
1016
- "#a6761d",
1017
- "#666666"
1018
- ],
1019
- gradient: [
1020
- "#e7298a",
1021
- "#d95f02",
1022
- "#e6ab02",
1023
- "#66a61e",
1024
- "#1b9e77",
1025
- "#7570b3"
1026
- ]
1027
- },
1028
- {
1029
- name: "colorBrewerPaired",
1030
- label: "ColorBrewer Paired",
1031
- colors: [
1032
- "#a6cee3",
1033
- "#1f78b4",
1034
- "#b2df8a",
1035
- "#33a02c",
1036
- "#fb9a99",
1037
- "#e31a1c",
1038
- "#fdbf6f",
1039
- "#ff7f00",
1040
- "#cab2d6",
1041
- "#6a3d9a",
1042
- "#ffff99",
1043
- "#b15928"
1044
- ],
1045
- gradient: [
1046
- "#6a3d9a",
1047
- "#e31a1c",
1048
- "#ff7f00",
1049
- "#ffff99",
1050
- "#33a02c",
1051
- "#1f78b4"
1052
- ]
1053
- },
1054
- {
1055
- name: "viridis",
1056
- label: "Viridis",
1057
- colors: [
1058
- "#440154",
1059
- "#482677",
1060
- "#3f4a8a",
1061
- "#31678e",
1062
- "#26838f",
1063
- "#1f9d8a",
1064
- "#6cce5a",
1065
- "#b6de2b"
1066
- ],
1067
- gradient: [
1068
- "#b6de2b",
1069
- "#6cce5a",
1070
- "#1f9d8a",
1071
- "#26838f",
1072
- "#31678e",
1073
- "#3f4a8a",
1074
- "#482677",
1075
- "#440154"
1076
- ]
1077
- },
1078
- {
1079
- name: "plasma",
1080
- label: "Plasma",
1081
- colors: [
1082
- "#0c0786",
1083
- "#5c01a6",
1084
- "#900da4",
1085
- "#bf3984",
1086
- "#e16462",
1087
- "#f99b45",
1088
- "#fcce25",
1089
- "#f0f921"
1090
- ],
1091
- gradient: [
1092
- "#f0f921",
1093
- "#fcce25",
1094
- "#f99b45",
1095
- "#e16462",
1096
- "#bf3984",
1097
- "#900da4",
1098
- "#5c01a6",
1099
- "#0c0786"
1100
- ]
1101
- },
1102
- {
1103
- name: "inferno",
1104
- label: "Inferno",
1105
- colors: [
1106
- "#000003",
1107
- "#1f0c47",
1108
- "#550f6d",
1109
- "#88226a",
1110
- "#a83655",
1111
- "#cc4f39",
1112
- "#e6862a",
1113
- "#fec228"
1114
- ],
1115
- gradient: [
1116
- "#fec228",
1117
- "#e6862a",
1118
- "#cc4f39",
1119
- "#a83655",
1120
- "#88226a",
1121
- "#550f6d",
1122
- "#1f0c47",
1123
- "#000003"
1124
- ]
1125
- },
1126
- {
1127
- name: "magma",
1128
- label: "Magma",
1129
- colors: [
1130
- "#000003",
1131
- "#140b34",
1132
- "#3b0f6f",
1133
- "#641a80",
1134
- "#8b2981",
1135
- "#b63679",
1136
- "#de4968",
1137
- "#fd9f6c"
1138
- ],
1139
- gradient: [
1140
- "#fd9f6c",
1141
- "#de4968",
1142
- "#b63679",
1143
- "#8b2981",
1144
- "#641a80",
1145
- "#3b0f6f",
1146
- "#140b34",
1147
- "#000003"
1148
- ]
1149
- },
1150
- {
1151
- name: "cividis",
1152
- label: "Cividis",
1153
- colors: [
1154
- "#00204c",
1155
- "#003f5c",
1156
- "#2c4b7a",
1157
- "#51576f",
1158
- "#7f6874",
1159
- "#a8786e",
1160
- "#d2906d",
1161
- "#ffb570"
1162
- ],
1163
- gradient: [
1164
- "#ffb570",
1165
- "#d2906d",
1166
- "#a8786e",
1167
- "#7f6874",
1168
- "#51576f",
1169
- "#2c4b7a",
1170
- "#003f5c",
1171
- "#00204c"
1172
- ]
1173
- },
1174
- {
1175
- name: "turbo",
1176
- label: "Turbo",
1177
- colors: [
1178
- "#30123b",
1179
- "#4454c4",
1180
- "#1dd3c0",
1181
- "#42f465",
1182
- "#b2df22",
1183
- "#faba39",
1184
- "#f66c19",
1185
- "#c42e02"
1186
- ],
1187
- gradient: [
1188
- "#c42e02",
1189
- "#f66c19",
1190
- "#faba39",
1191
- "#b2df22",
1192
- "#42f465",
1193
- "#1dd3c0",
1194
- "#4454c4",
1195
- "#30123b"
1196
- ]
1197
- },
1198
- {
1199
- name: "warm",
1200
- label: "Warm",
1201
- colors: [
1202
- "#8b0000",
1203
- "#b22222",
1204
- "#cd5c5c",
1205
- "#ff6347",
1206
- "#ff8c00",
1207
- "#ffa500",
1208
- "#ffd700",
1209
- "#ffff00"
1210
- ],
1211
- gradient: [
1212
- "#ffd700",
1213
- "#ffa500",
1214
- "#ff8c00",
1215
- "#ff6347",
1216
- "#b22222",
1217
- "#8b0000"
1218
- ]
1219
- },
1220
- {
1221
- name: "cool",
1222
- label: "Cool",
1223
- colors: [
1224
- "#000080",
1225
- "#0000ff",
1226
- "#4169e1",
1227
- "#00bfff",
1228
- "#00ffff",
1229
- "#40e0d0",
1230
- "#20b2aa",
1231
- "#008b8b"
1232
- ],
1233
- gradient: [
1234
- "#40e0d0",
1235
- "#00ffff",
1236
- "#00bfff",
1237
- "#4169e1",
1238
- "#0000ff",
1239
- "#000080"
1240
- ]
1241
- },
1242
- {
1243
- name: "earth",
1244
- label: "Earth",
1245
- colors: [
1246
- "#8b4513",
1247
- "#a0522d",
1248
- "#cd853f",
1249
- "#daa520",
1250
- "#d2691e",
1251
- "#bc8f8f",
1252
- "#f4a460",
1253
- "#deb887"
1254
- ],
1255
- gradient: [
1256
- "#f4a460",
1257
- "#d2691e",
1258
- "#daa520",
1259
- "#cd853f",
1260
- "#a0522d",
1261
- "#8b4513"
1262
- ]
1263
- },
1264
- {
1265
- name: "autumn",
1266
- label: "Autumn",
1267
- colors: [
1268
- "#8b0000",
1269
- "#a0522d",
1270
- "#cd853f",
1271
- "#daa520",
1272
- "#ff8c00",
1273
- "#ff4500",
1274
- "#dc143c",
1275
- "#b22222"
1276
- ],
1277
- gradient: [
1278
- "#ff4500",
1279
- "#ff8c00",
1280
- "#daa520",
1281
- "#cd853f",
1282
- "#a0522d",
1283
- "#8b0000"
1284
- ]
1285
- },
1286
- {
1287
- name: "spring",
1288
- label: "Spring",
1289
- colors: [
1290
- "#32cd32",
1291
- "#98fb98",
1292
- "#90ee90",
1293
- "#ffb6c1",
1294
- "#ffc0cb",
1295
- "#ffffe0",
1296
- "#f0fff0",
1297
- "#e0ffff"
1298
- ],
1299
- gradient: [
1300
- "#e0ffff",
1301
- "#ffc0cb",
1302
- "#ffb6c1",
1303
- "#ffffe0",
1304
- "#98fb98",
1305
- "#32cd32"
1306
- ]
1307
- },
1308
- {
1309
- name: "winter",
1310
- label: "Winter",
1311
- colors: [
1312
- "#191970",
1313
- "#4682b4",
1314
- "#87ceeb",
1315
- "#b0e0e6",
1316
- "#e0ffff",
1317
- "#f0f8ff",
1318
- "#c0c0c0",
1319
- "#708090"
1320
- ],
1321
- gradient: [
1322
- "#f0f8ff",
1323
- "#e0ffff",
1324
- "#b0e0e6",
1325
- "#87ceeb",
1326
- "#4682b4",
1327
- "#191970"
1328
- ]
1329
- },
1330
- {
1331
- name: "neon",
1332
- label: "Neon",
1333
- colors: [
1334
- "#ff0080",
1335
- "#00ff80",
1336
- "#8000ff",
1337
- "#ff8000",
1338
- "#0080ff",
1339
- "#80ff00",
1340
- "#ff0040",
1341
- "#40ff00"
1342
- ],
1343
- gradient: [
1344
- "#ff0080",
1345
- "#ff8000",
1346
- "#80ff00",
1347
- "#00ff80",
1348
- "#0080ff",
1349
- "#8000ff"
1350
- ]
1351
- },
1352
- {
1353
- name: "retro",
1354
- label: "Retro",
1355
- colors: [
1356
- "#ff69b4",
1357
- "#ffd700",
1358
- "#32cd32",
1359
- "#00ced1",
1360
- "#ff6347",
1361
- "#9370db",
1362
- "#ffa500",
1363
- "#20b2aa"
1364
- ],
1365
- gradient: [
1366
- "#00ced1",
1367
- "#32cd32",
1368
- "#ffd700",
1369
- "#ff6347",
1370
- "#ff69b4",
1371
- "#9370db"
1372
- ]
1373
- },
1374
- {
1375
- name: "corporate",
1376
- label: "Corporate",
1377
- colors: [
1378
- "#003366",
1379
- "#0066cc",
1380
- "#336699",
1381
- "#6699cc",
1382
- "#4d4d4d",
1383
- "#808080",
1384
- "#b3b3b3",
1385
- "#cccccc"
1386
- ],
1387
- gradient: [
1388
- "#b3b3b3",
1389
- "#808080",
1390
- "#6699cc",
1391
- "#336699",
1392
- "#0066cc",
1393
- "#003366"
1394
- ]
1395
- },
1396
- {
1397
- name: "material",
1398
- label: "Material Design",
1399
- colors: [
1400
- "#f44336",
1401
- "#e91e63",
1402
- "#9c27b0",
1403
- "#673ab7",
1404
- "#3f51b5",
1405
- "#2196f3",
1406
- "#03a9f4",
1407
- "#00bcd4"
1408
- ],
1409
- gradient: [
1410
- "#e91e63",
1411
- "#03a9f4",
1412
- "#00bcd4",
1413
- "#2196f3",
1414
- "#3f51b5",
1415
- "#673ab7"
1416
- ]
1417
- }
1418
- ];
1419
- function X(e) {
1420
- return e && Y.find((t) => t.name === e) || Y[0];
1421
- }
1422
- //#endregion
1423
- //#region src/client/components/ColorPaletteSelector.tsx
1424
- var _e = r("chevronDown");
1425
- function ve({ currentPalette: e = "default", onPaletteChange: t, className: n = "" }) {
1426
- let [r, i] = S(!1), a = x(null), o = X(e);
1427
- y(() => {
1428
- function e(e) {
1429
- a.current && !a.current.contains(e.target) && i(!1);
1430
- }
1431
- if (r) return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
1432
- }, [r]);
1433
- let s = (e) => {
1434
- t(e), i(!1);
1435
- };
1436
- return /* @__PURE__ */ T("div", {
1437
- className: `dc:relative ${n}`,
1438
- ref: a,
1439
- children: [/* @__PURE__ */ T("button", {
1440
- type: "button",
1441
- onClick: () => i(!r),
1442
- className: "dc:inline-flex dc:items-center dc:gap-2 dc:px-3 dc:py-1.5 bg-dc-surface dc:border border-dc-border dc:rounded-md shadow-xs dc:text-sm dc:font-medium text-dc-text-secondary hover:bg-dc-surface-hover focus:outline-hidden dc:focus:ring-2 dc:focus:ring-offset-2 focus:ring-dc-accent",
1443
- children: [
1444
- /* @__PURE__ */ T("div", {
1445
- className: "dc:hidden dc:md:flex dc:items-center dc:gap-1.5",
1446
- children: [
1447
- /* @__PURE__ */ w("div", {
1448
- className: "dc:flex dc:gap-0.5",
1449
- children: o.colors.slice(0, 4).map((e, t) => /* @__PURE__ */ w("div", {
1450
- className: "dc:w-3 dc:h-3 rounded-xs dc:border border-dc-border",
1451
- style: { backgroundColor: e },
1452
- title: `Series Color ${t + 1}`
1453
- }, t))
1454
- }),
1455
- /* @__PURE__ */ w("span", {
1456
- className: "dc:text-xs text-dc-text-secondary",
1457
- children: "|"
1458
- }),
1459
- /* @__PURE__ */ w("div", {
1460
- className: "dc:flex dc:gap-0.5",
1461
- children: o.gradient.slice(0, 3).map((e, t) => /* @__PURE__ */ w("div", {
1462
- className: "dc:w-2 dc:h-3 dc:border-r dc:first:rounded-l-sm dc:last:rounded-r-sm dc:last:border-r-0",
1463
- style: {
1464
- backgroundColor: e,
1465
- borderColor: "var(--dc-border)"
1466
- },
1467
- title: `Gradient Color ${t + 1}`
1468
- }, t))
1469
- })
1470
- ]
1471
- }),
1472
- /* @__PURE__ */ w("span", { children: o.label }),
1473
- /* @__PURE__ */ w(_e, { className: `dc:w-4 dc:h-4 dc:transition-transform ${r ? "dc:rotate-180" : ""}` })
1474
- ]
1475
- }), r && /* @__PURE__ */ w("div", {
1476
- className: "dc:absolute dc:top-full dc:left-0 dc:mt-1 dc:w-72 dc:md:w-80 dc:lg:w-96 bg-dc-surface dc:border border-dc-border dc:rounded-md dc:shadow-lg dc:z-50 dc:max-h-80 dc:overflow-y-auto",
1477
- children: /* @__PURE__ */ w("div", {
1478
- className: "dc:py-1",
1479
- children: Y.slice().sort((e, t) => e.label.localeCompare(t.label)).map((t) => /* @__PURE__ */ w("button", {
1480
- type: "button",
1481
- onClick: () => s(t.name),
1482
- className: `dc:w-full dc:px-3 dc:py-2 dc:text-left dc:text-sm hover:bg-dc-surface-hover focus:outline-hidden focus:bg-dc-surface-hover ${t.name === e ? "bg-dc-surface-secondary" : "text-dc-text-secondary"}`,
1483
- style: t.name === e ? { color: "var(--dc-primary)" } : void 0,
1484
- children: /* @__PURE__ */ T("div", {
1485
- className: "dc:flex dc:items-center dc:gap-3",
1486
- children: [
1487
- /* @__PURE__ */ T("div", {
1488
- className: "dc:hidden dc:md:flex dc:items-center dc:gap-2",
1489
- children: [
1490
- /* @__PURE__ */ w("div", {
1491
- className: "dc:flex dc:gap-0.5",
1492
- children: t.colors.slice(0, 6).map((e, t) => /* @__PURE__ */ w("div", {
1493
- className: "dc:w-3 dc:h-3 rounded-xs dc:border border-dc-border",
1494
- style: { backgroundColor: e }
1495
- }, `series-${t}`))
1496
- }),
1497
- /* @__PURE__ */ w("div", { className: "dc:w-px dc:h-4 bg-dc-border" }),
1498
- /* @__PURE__ */ w("div", {
1499
- className: "dc:flex",
1500
- children: t.gradient.map((e, t) => /* @__PURE__ */ w("div", {
1501
- className: "dc:w-2 dc:h-4 dc:first:rounded-l-sm dc:last:rounded-r-sm",
1502
- style: { backgroundColor: e }
1503
- }, `gradient-${t}`))
1504
- })
1505
- ]
1506
- }),
1507
- /* @__PURE__ */ w("span", {
1508
- className: "dc:font-medium",
1509
- children: t.label
1510
- }),
1511
- t.name === e && /* @__PURE__ */ w("div", {
1512
- className: "dc:ml-auto",
1513
- children: /* @__PURE__ */ w("div", {
1514
- className: "dc:w-2 dc:h-2 dc:rounded-full",
1515
- style: { backgroundColor: "var(--dc-primary)" }
1516
- })
1517
- })
1518
- ]
1519
- })
1520
- }, t.name))
1521
- })
1522
- })]
1523
- });
1524
- }
1525
- //#endregion
1526
- //#region src/client/components/AnalysisBuilder/utils/idUtils.ts
1527
- function Z() {
1528
- return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
1529
- }
1530
- function ye(e) {
1531
- let t = "", n = e;
1532
- do
1533
- t = String.fromCharCode(65 + n % 26) + t, n = Math.floor(n / 26) - 1;
1534
- while (n >= 0);
1535
- return t;
1536
- }
1537
- //#endregion
1538
- //#region src/client/components/AnalysisBuilder/utils/fieldUtils.ts
1539
- function be(e, t) {
1540
- if (!t) return null;
1541
- for (let n of t.cubes) {
1542
- let t = n.measures.find((t) => t.name === e);
1543
- if (t) return {
1544
- field: t,
1545
- cubeName: n.name,
1546
- fieldType: "measure"
1547
- };
1548
- let r = n.dimensions.find((t) => t.name === e);
1549
- if (r) return {
1550
- field: r,
1551
- cubeName: n.name,
1552
- fieldType: r.type === "time" ? "timeDimension" : "dimension"
1553
- };
1554
- }
1555
- return null;
1556
- }
1557
- function xe(e, t) {
1558
- let n = be(e, t);
1559
- return n && (n.field.title || n.field.shortTitle) || e;
1560
- }
1561
- function Se(e, t) {
1562
- return {
1563
- name: t.name,
1564
- title: t.title || t.shortTitle || t.name,
1565
- shortTitle: t.shortTitle || t.title || t.name,
1566
- type: t.type,
1567
- description: t.description,
1568
- cubeName: e,
1569
- fieldType: "measure"
1570
- };
1571
- }
1572
- function Ce(e, t) {
1573
- return {
1574
- name: t.name,
1575
- title: t.title || t.shortTitle || t.name,
1576
- shortTitle: t.shortTitle || t.title || t.name,
1577
- type: t.type,
1578
- description: t.description,
1579
- cubeName: e,
1580
- fieldType: t.type === "time" ? "timeDimension" : "dimension"
1581
- };
1582
- }
1583
- function we(e, t) {
1584
- if (!e) return [];
1585
- let n = t === "metrics" || t === "filter", r = t !== "metrics", i = [];
1586
- for (let t of e.cubes) {
1587
- if (n) for (let e of t.measures) i.push(Se(t.name, e));
1588
- if (r) for (let e of t.dimensions) i.push(Ce(t.name, e));
1589
- }
1590
- return i;
1591
- }
1592
- function Te(e, t, n) {
1593
- let r = e;
1594
- if (n && n !== "all" && (r = r.filter((e) => e.cubeName === n)), t.trim()) {
1595
- let e = t.toLowerCase();
1596
- r = r.filter((t) => t.name.toLowerCase().includes(e) || t.title.toLowerCase().includes(e) || (t.description?.toLowerCase().includes(e) ?? !1));
1597
- }
1598
- return r;
1599
- }
1600
- function Ee(e) {
1601
- let t = /* @__PURE__ */ new Map();
1602
- for (let n of e) {
1603
- let e = t.get(n.cubeName) || [];
1604
- e.push(n), t.set(n.cubeName, e);
1605
- }
1606
- return t;
1607
- }
1608
- function De(e) {
1609
- return e ? e.cubes.map((e) => e.name) : [];
1610
- }
1611
- function Q(e, t) {
1612
- return t && t.cubes.find((t) => t.name === e)?.title || e;
1613
- }
1614
- function Oe(e, t) {
1615
- let n = /* @__PURE__ */ new Set();
1616
- if (!t) return n;
1617
- n.add(e);
1618
- let r = t.cubes.find((t) => t.name === e);
1619
- if (!r || !r.relationships) return n;
1620
- for (let e of r.relationships) n.add(e.targetCube);
1621
- return n;
1622
- }
1623
- function ke(e, t) {
1624
- if (!t) return null;
1625
- let n = Oe(e, t);
1626
- return { cubes: t.cubes.filter((e) => n.has(e.name)).map((e) => ({
1627
- ...e,
1628
- description: e.description || ""
1629
- })) };
1630
- }
1631
- //#endregion
1632
- //#region src/client/components/AnalysisBuilder/utils/recentFieldsUtils.ts
1633
- var Ae = "drizzle-cube-recent-fields", je = 10;
1634
- function Me() {
1635
- try {
1636
- let e = localStorage.getItem(Ae);
1637
- if (e) return JSON.parse(e);
1638
- } catch {}
1639
- return {
1640
- metrics: [],
1641
- breakdowns: []
1642
- };
1643
- }
1644
- function Ne(e, t) {
1645
- try {
1646
- let n = Me(), r = n[t].filter((t) => t !== e);
1647
- r.unshift(e), n[t] = r.slice(0, je), localStorage.setItem(Ae, JSON.stringify(n));
1648
- } catch {}
1649
- }
1650
- function Pe(e, t, n) {
1651
- if (!e || n.length === 0) return [];
1652
- let r = we(e, t), i = [];
1653
- for (let e of n) {
1654
- let t = r.find((t) => t.name === e);
1655
- t && i.push(t);
1656
- }
1657
- return i;
1658
- }
1659
- //#endregion
1660
- //#region src/client/components/AnalysisBuilder/FieldDetailPanel.tsx
1661
- function Fe({ field: n }) {
1662
- let { t: r } = d();
1663
- return n ? /* @__PURE__ */ T("div", {
1664
- className: "dc:p-4",
1665
- children: [
1666
- /* @__PURE__ */ T("div", {
1667
- className: "dc:flex dc:items-start dc:gap-3 dc:mb-4",
1668
- children: [/* @__PURE__ */ w("span", {
1669
- className: `dc:shrink-0 dc:w-12 dc:h-12 dc:flex dc:items-center dc:justify-center dc:rounded-lg ${n.fieldType === "measure" ? "bg-dc-measure text-dc-measure-text" : n.fieldType === "timeDimension" ? "bg-dc-time-dimension text-dc-time-dimension-text" : "bg-dc-dimension text-dc-dimension-text"}`,
1670
- children: (() => {
1671
- if (n.fieldType === "measure") {
1672
- let t = e(n.type);
1673
- return t ? /* @__PURE__ */ w(t, { className: "dc:w-6 dc:h-6" }) : null;
1674
- } else if (n.fieldType === "timeDimension") {
1675
- let e = t("time");
1676
- return e ? /* @__PURE__ */ w(e, { className: "dc:w-6 dc:h-6" }) : null;
1677
- } else {
1678
- let e = t("dimension");
1679
- return e ? /* @__PURE__ */ w(e, { className: "dc:w-6 dc:h-6" }) : null;
1680
- }
1681
- })()
1682
- }), /* @__PURE__ */ T("div", {
1683
- className: "dc:flex-1 dc:min-w-0",
1684
- children: [/* @__PURE__ */ w("h3", {
1685
- className: "dc:text-base dc:font-semibold text-dc-text dc:leading-tight",
1686
- children: n.title
1687
- }), /* @__PURE__ */ w("p", {
1688
- className: "dc:text-xs text-dc-text-muted dc:mt-0.5 dc:truncate",
1689
- children: n.name
1690
- })]
1691
- })]
1692
- }),
1693
- n.description && /* @__PURE__ */ w("div", {
1694
- className: "dc:mb-4",
1695
- children: /* @__PURE__ */ w("p", {
1696
- className: "dc:text-sm text-dc-text-secondary dc:leading-relaxed",
1697
- children: n.description
1698
- })
1699
- }),
1700
- /* @__PURE__ */ T("div", {
1701
- className: "dc:space-y-3 dc:pt-4 dc:border-t border-dc-border",
1702
- children: [
1703
- /* @__PURE__ */ T("div", {
1704
- className: "dc:flex dc:items-center dc:justify-between",
1705
- children: [/* @__PURE__ */ w("span", {
1706
- className: "dc:text-xs text-dc-text-muted",
1707
- children: r("fieldPanel.labels.type")
1708
- }), /* @__PURE__ */ w("span", {
1709
- className: "dc:text-sm text-dc-text dc:font-medium",
1710
- children: n.fieldType === "measure" ? {
1711
- count: r("fieldTypes.count"),
1712
- countDistinct: r("fieldTypes.countDistinct"),
1713
- countDistinctApprox: r("fieldTypes.countDistinctApprox"),
1714
- sum: r("fieldTypes.sum"),
1715
- avg: r("fieldTypes.avg"),
1716
- min: r("fieldTypes.min"),
1717
- max: r("fieldTypes.max"),
1718
- runningTotal: r("fieldTypes.runningTotal"),
1719
- number: r("fieldTypes.number")
1720
- }[n.type] || n.type : n.fieldType === "timeDimension" ? r("fieldTypes.time") : {
1721
- string: r("fieldTypes.string"),
1722
- number: r("fieldTypes.number"),
1723
- boolean: r("fieldTypes.boolean"),
1724
- geo: r("fieldTypes.geo")
1725
- }[n.type] || r("fieldTypes.dimension")
1726
- })]
1727
- }),
1728
- /* @__PURE__ */ T("div", {
1729
- className: "dc:flex dc:items-center dc:justify-between",
1730
- children: [/* @__PURE__ */ w("span", {
1731
- className: "dc:text-xs text-dc-text-muted",
1732
- children: r("fieldPanel.labels.cube")
1733
- }), /* @__PURE__ */ w("span", {
1734
- className: "dc:text-sm text-dc-text dc:font-medium",
1735
- children: n.cubeName
1736
- })]
1737
- }),
1738
- /* @__PURE__ */ T("div", {
1739
- className: "dc:flex dc:items-center dc:justify-between",
1740
- children: [/* @__PURE__ */ w("span", {
1741
- className: "dc:text-xs text-dc-text-muted",
1742
- children: r("fieldPanel.labels.category")
1743
- }), /* @__PURE__ */ w("span", {
1744
- className: `dc:text-xs dc:px-2 dc:py-0.5 dc:rounded dc:font-medium ${n.fieldType === "measure" ? "bg-dc-measure text-dc-measure-text" : n.fieldType === "timeDimension" ? "bg-dc-time-dimension text-dc-time-dimension-text" : "bg-dc-dimension text-dc-dimension-text"}`,
1745
- children: r(n.fieldType === "measure" ? "fieldCategory.measure" : n.fieldType === "timeDimension" ? "fieldCategory.timeDimension" : "fieldCategory.dimension")
1746
- })]
1747
- })
1748
- ]
1749
- }),
1750
- /* @__PURE__ */ w("div", {
1751
- className: "dc:mt-6 dc:p-3 bg-dc-surface dc:rounded-lg",
1752
- children: /* @__PURE__ */ w("p", {
1753
- className: "dc:text-xs text-dc-text-muted",
1754
- children: r("fieldPanel.usageHint")
1755
- })
1756
- })
1757
- ]
1758
- }) : /* @__PURE__ */ w("div", {
1759
- className: "dc:p-6 dc:text-center text-dc-text-muted",
1760
- children: /* @__PURE__ */ w("p", {
1761
- className: "dc:text-sm",
1762
- children: r("fieldPanel.emptyState")
1763
- })
1764
- });
1765
- }
1766
- var Ie = _(Fe), Le = r("check");
1767
- function Re({ field: n, isSelected: r, isFocused: i, onClick: a, onMouseEnter: o, ...s }) {
1768
- let c = () => {
1769
- if (n.fieldType === "measure") {
1770
- let t = e(n.type);
1771
- return t ? /* @__PURE__ */ w(t, { className: "dc:w-4 dc:h-4" }) : null;
1772
- } else if (n.fieldType === "timeDimension") {
1773
- let e = t("time");
1774
- return e ? /* @__PURE__ */ w(e, { className: "dc:w-4 dc:h-4" }) : null;
1775
- } else {
1776
- let e = t("dimension");
1777
- return e ? /* @__PURE__ */ w(e, { className: "dc:w-4 dc:h-4" }) : null;
1778
- }
1779
- }, l = () => n.fieldType === "measure" ? "bg-dc-measure text-dc-measure-text" : n.fieldType === "timeDimension" ? "bg-dc-time-dimension text-dc-time-dimension-text" : "bg-dc-dimension text-dc-dimension-text", u = () => n.fieldType === "measure" ? n.type.charAt(0).toUpperCase() + n.type.slice(1) : n.fieldType === "timeDimension" ? "Time" : "Dim";
1780
- return /* @__PURE__ */ T("button", {
1781
- onClick: a,
1782
- onMouseEnter: o,
1783
- className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:rounded-lg dc:flex dc:items-center dc:gap-3 dc:transition-colors dc:group ${i ? "bg-dc-primary/10 dc:ring-1 ring-dc-primary" : r ? "bg-dc-success/10" : "hover:bg-dc-surface-hover"}`,
1784
- ...s,
1785
- children: [
1786
- /* @__PURE__ */ w("span", {
1787
- className: `dc:shrink-0 dc:w-8 dc:h-8 dc:flex dc:items-center dc:justify-center dc:rounded-md ${n.fieldType === "measure" ? "bg-dc-measure text-dc-measure-text" : n.fieldType === "timeDimension" ? "bg-dc-time-dimension text-dc-time-dimension-text" : "bg-dc-dimension text-dc-dimension-text"}`,
1788
- children: c()
1789
- }),
1790
- /* @__PURE__ */ T("div", {
1791
- className: "dc:flex-1 dc:min-w-0",
1792
- children: [/* @__PURE__ */ w("div", {
1793
- className: "dc:text-sm dc:font-medium text-dc-text dc:truncate",
1794
- children: n.title
1795
- }), /* @__PURE__ */ w("div", {
1796
- className: "dc:text-xs text-dc-text-muted dc:truncate",
1797
- children: n.name
1798
- })]
1799
- }),
1800
- /* @__PURE__ */ w("span", {
1801
- className: `dc:shrink-0 dc:px-2 dc:py-0.5 dc:rounded dc:text-xs dc:font-medium ${l()}`,
1802
- children: u()
1803
- }),
1804
- r && /* @__PURE__ */ w("span", {
1805
- className: "dc:shrink-0 dc:w-5 dc:h-5 dc:flex dc:items-center dc:justify-center dc:rounded-full bg-dc-success text-white",
1806
- children: /* @__PURE__ */ w(Le, { className: "dc:w-3 dc:h-3" })
1807
- })
1808
- ]
1809
- });
1810
- }
1811
- var ze = _(Re);
1812
- //#endregion
1813
- //#region src/client/components/AnalysisBuilder/FieldSearchResults.tsx
1814
- function Be(e, t, n, r, i) {
1815
- let a = Array.from(e.entries()), o = Array.from(e.keys()).indexOf(n);
1816
- return t + a.slice(0, o).reduce((e, [, t]) => e + t.length, 0) + r.indexOf(i);
1817
- }
1818
- var Ve = _(function({ mode: e, schema: t, searchTerm: n, recentOptions: r, groupedFields: i, filteredCount: a, selectedFields: o, focusedIndex: s, onSelectField: c, onFocusField: l }) {
1819
- let { t: u } = d();
1820
- if (a === 0 && r.length === 0) {
1821
- let t;
1822
- return t = n ? u(e === "metrics" ? "fieldSearch.empty.noMatchMetrics" : "fieldSearch.empty.noMatchDimensions", { searchTerm: n }) : u(e === "metrics" ? "fieldSearch.empty.noMetrics" : "fieldSearch.empty.noDimensions"), /* @__PURE__ */ T("div", {
1823
- className: "dc:text-center dc:py-12 text-dc-text-muted",
1824
- children: [/* @__PURE__ */ w("p", {
1825
- className: "dc:text-lg dc:mb-2",
1826
- children: u("fieldSearch.empty.heading")
1827
- }), /* @__PURE__ */ w("p", {
1828
- className: "dc:text-sm",
1829
- children: t
1830
- })]
1831
- });
1832
- }
1833
- let f = (e, t, n = "") => /* @__PURE__ */ w(ze, {
1834
- field: e,
1835
- isSelected: o.includes(e.name),
1836
- isFocused: s === t,
1837
- onClick: (n) => c(e, t, n.shiftKey),
1838
- onMouseEnter: () => l(e, t),
1839
- "data-field-index": t
1840
- }, `${n}${e.name}`);
1841
- return /* @__PURE__ */ T("div", {
1842
- className: "dc:space-y-6",
1843
- children: [r.length > 0 && /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h3", {
1844
- className: "dc:text-xs dc:font-semibold text-dc-text-muted dc:uppercase dc:tracking-wider dc:mb-2",
1845
- children: u("fieldSearch.section.recents")
1846
- }), /* @__PURE__ */ w("div", {
1847
- className: "dc:space-y-1",
1848
- children: r.map((e, t) => f(e, t, "recent-"))
1849
- })] }), Array.from(i.entries()).map(([e, n]) => /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h3", {
1850
- className: "dc:text-xs dc:font-semibold text-dc-text-muted dc:uppercase dc:tracking-wider dc:mb-2",
1851
- children: Q(e, t)
1852
- }), /* @__PURE__ */ w("div", {
1853
- className: "dc:space-y-1",
1854
- children: n.map((t) => f(t, Be(i, r.length, e, n, t)))
1855
- })] }, e))]
1856
- });
1857
- });
1858
- //#endregion
1859
- //#region src/client/components/AnalysisBuilder/hooks/useFieldSearchKeyboard.ts
1860
- function He(e, t, n) {
1861
- let [r, i] = S(null), [a, o] = S(-1), s = x(null), c = v((t) => {
1862
- o((n) => {
1863
- let r = t > 0 ? Math.min(n + 1, e.length - 1) : Math.max(n - 1, 0);
1864
- return i(e[r]), r;
1865
- });
1866
- }, [e]), l = v((r) => {
1867
- if (e.length !== 0) switch (r.key) {
1868
- case "ArrowDown":
1869
- r.preventDefault(), c(1);
1870
- break;
1871
- case "ArrowUp":
1872
- r.preventDefault(), c(-1);
1873
- break;
1874
- case "Enter":
1875
- r.preventDefault(), a >= 0 && e[a] && t(e[a], a, r.shiftKey);
1876
- break;
1877
- case "Escape":
1878
- r.preventDefault(), n();
1879
- break;
1880
- }
1881
- }, [
1882
- e,
1883
- a,
1884
- c,
1885
- t,
1886
- n
1887
- ]);
1888
- return y(() => {
1889
- if (a >= 0 && s.current) {
1890
- let e = s.current.querySelector(`[data-field-index="${a}"]`);
1891
- e && e.scrollIntoView({
1892
- block: "nearest",
1893
- behavior: "smooth"
1894
- });
1895
- }
1896
- }, [a]), {
1897
- focusedField: r,
1898
- setFocusedField: i,
1899
- focusedIndex: a,
1900
- setFocusedIndex: o,
1901
- resultsContainerRef: s,
1902
- handleKeyDown: l
1903
- };
1904
- }
1905
- //#endregion
1906
- //#region src/client/components/AnalysisBuilder/FieldSearchModal.tsx
1907
- var Ue = r("search"), We = r("close");
1908
- function Ge({ isOpen: e, onClose: t, onSelect: n, mode: r, schema: i, selectedFields: a, recentFields: o }) {
1909
- let { t: s } = d(), [c, l] = S(""), [u, f] = S(null), [p, m] = S(null), h = x(null), g = b(() => {
1910
- if (o) return o;
1911
- let e = Me();
1912
- return r === "metrics" ? e.metrics : e.breakdowns;
1913
- }, [o, r]), _ = r, C = b(() => we(i, _), [i, _]), E = b(() => De(i), [i]), D = b(() => Te(C, c, u), [
1914
- C,
1915
- c,
1916
- u
1917
- ]), O = b(() => Ee(D), [D]), k = b(() => c.trim() ? [] : Pe(i, _, g).filter((e) => !u || e.cubeName === u), [
1918
- i,
1919
- _,
1920
- g,
1921
- c,
1922
- u
1923
- ]), A = b(() => {
1924
- let e = [...k];
1925
- return O.forEach((t) => {
1926
- e.push(...t);
1927
- }), e;
1928
- }, [k, O]);
1929
- y(() => {
1930
- e && h.current && h.current.focus();
1931
- }, [e]);
1932
- let j = v((e, t = !1) => {
1933
- Ne(e.name, r === "metrics" ? "metrics" : "breakdowns"), n({
1934
- name: e.name,
1935
- title: e.title,
1936
- shortTitle: e.shortTitle,
1937
- type: e.type,
1938
- description: e.description
1939
- }, e.fieldType, e.cubeName, t);
1940
- }, [r, n]), M = v((e, t, n = !1) => {
1941
- if (n && p !== null && p !== t) {
1942
- let e = Math.min(p, t), n = Math.max(p, t);
1943
- for (let t = e; t <= n; t++) {
1944
- let e = A[t];
1945
- e && !a.includes(e.name) && j(e, !0);
1946
- }
1947
- } else n ? j(e, !0) : j(e, !1);
1948
- m(t);
1949
- }, [
1950
- A,
1951
- p,
1952
- j,
1953
- a
1954
- ]), { focusedField: N, setFocusedField: P, focusedIndex: F, setFocusedIndex: I, resultsContainerRef: L, handleKeyDown: ee } = He(A, M, t), R = v((e, t) => {
1955
- P(e), I(t);
1956
- }, [P, I]);
1957
- if (y(() => {
1958
- e || (l(""), f(null), P(null), I(-1), m(null));
1959
- }, [
1960
- e,
1961
- P,
1962
- I
1963
- ]), !e) return null;
1964
- let z = s(r === "metrics" ? "fieldSearch.placeholder.metrics" : r === "filter" ? "fieldSearch.placeholder.filter" : "fieldSearch.placeholder.dimensions"), te = s(r === "metrics" ? "fieldSearch.modal.title.metrics" : r === "filter" ? "fieldSearch.modal.title.filter" : "fieldSearch.modal.title.dimensions"), B = F >= 0 && A[F] ? `field-option-${A[F].name.replace(/\./g, "-")}` : void 0;
1965
- return /* @__PURE__ */ w("div", {
1966
- className: "dc:fixed dc:inset-0 dc:z-50 dc:flex dc:items-center dc:justify-center",
1967
- style: { backgroundColor: "var(--dc-overlay)" },
1968
- onClick: t,
1969
- role: "presentation",
1970
- children: /* @__PURE__ */ T("div", {
1971
- role: "dialog",
1972
- "aria-modal": "true",
1973
- "aria-label": te,
1974
- className: "bg-dc-surface dc:shadow-xl dc:w-full dc:h-full dc:md:rounded-lg dc:md:w-[900px] dc:md:max-w-[900px] dc:md:h-[80vh] dc:md:max-h-[700px] dc:flex dc:flex-col dc:overflow-hidden",
1975
- onClick: (e) => e.stopPropagation(),
1976
- onKeyDown: ee,
1977
- children: [
1978
- /* @__PURE__ */ T("div", {
1979
- className: "dc:shrink-0 dc:border-b border-dc-border",
1980
- children: [/* @__PURE__ */ T("div", {
1981
- className: "dc:flex dc:items-center dc:px-4 dc:py-3 dc:gap-3",
1982
- children: [
1983
- /* @__PURE__ */ w(Ue, {
1984
- className: "dc:w-5 dc:h-5 text-dc-text-muted",
1985
- "aria-hidden": !0
1986
- }),
1987
- /* @__PURE__ */ w("input", {
1988
- ref: h,
1989
- type: "text",
1990
- value: c,
1991
- onChange: (e) => {
1992
- l(e.target.value), I(-1);
1993
- },
1994
- placeholder: z,
1995
- className: "dc:flex-1 bg-transparent dc:border-none dc:outline-none text-dc-text placeholder-dc-text-muted dc:text-lg",
1996
- "aria-label": z,
1997
- "aria-controls": "field-search-results",
1998
- "aria-activedescendant": B,
1999
- role: "combobox",
2000
- "aria-expanded": "true",
2001
- "aria-autocomplete": "list"
2002
- }),
2003
- /* @__PURE__ */ w("button", {
2004
- onClick: t,
2005
- className: "dc:p-1 text-dc-text-secondary hover:text-dc-text dc:rounded",
2006
- "aria-label": "Close dialog",
2007
- children: /* @__PURE__ */ w(We, {
2008
- className: "dc:w-5 dc:h-5",
2009
- "aria-hidden": !0
2010
- })
2011
- })
2012
- ]
2013
- }), E.length > 1 && /* @__PURE__ */ w("div", {
2014
- className: "dc:md:hidden dc:px-4 dc:pb-3",
2015
- children: /* @__PURE__ */ T("select", {
2016
- value: u || "",
2017
- onChange: (e) => f(e.target.value || null),
2018
- className: "dc:w-full dc:px-3 dc:py-2 bg-dc-surface dc:border border-dc-border dc:rounded-lg dc:text-sm text-dc-text dc:focus:outline-none dc:focus:ring-1 focus:ring-dc-primary",
2019
- "aria-label": "Filter by cube",
2020
- children: [/* @__PURE__ */ w("option", {
2021
- value: "",
2022
- children: s("fieldSearch.filter.allCubes")
2023
- }), E.map((e) => /* @__PURE__ */ w("option", {
2024
- value: e,
2025
- children: Q(e, i)
2026
- }, e))]
2027
- })
2028
- })]
2029
- }),
2030
- /* @__PURE__ */ T("div", {
2031
- className: "dc:flex-1 dc:flex dc:overflow-hidden",
2032
- children: [
2033
- /* @__PURE__ */ w("nav", {
2034
- className: "dc:hidden dc:md:block dc:w-48 dc:shrink-0 dc:border-r border-dc-border dc:overflow-y-auto bg-dc-surface-secondary",
2035
- "aria-label": "Filter by cube",
2036
- children: /* @__PURE__ */ T("div", {
2037
- className: "dc:p-2",
2038
- role: "group",
2039
- "aria-label": "Cube categories",
2040
- children: [/* @__PURE__ */ w("button", {
2041
- onClick: () => f(null),
2042
- className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:rounded-md dc:text-sm dc:transition-colors ${u === null ? "bg-dc-primary/10 text-dc-primary dc:font-medium" : "text-dc-text hover:bg-dc-surface-hover"}`,
2043
- "aria-pressed": u === null,
2044
- children: s("fieldSearch.categories.all")
2045
- }), E.map((e) => /* @__PURE__ */ w("button", {
2046
- onClick: () => f(e),
2047
- className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:rounded-md dc:text-sm dc:transition-colors dc:truncate ${u === e ? "bg-dc-primary/10 text-dc-primary dc:font-medium" : "text-dc-text hover:bg-dc-surface-hover"}`,
2048
- title: Q(e, i),
2049
- "aria-pressed": u === e,
2050
- children: Q(e, i)
2051
- }, e))]
2052
- })
2053
- }),
2054
- /* @__PURE__ */ w("div", {
2055
- id: "field-search-results",
2056
- ref: L,
2057
- className: "dc:flex-1 dc:overflow-y-auto dc:p-4",
2058
- role: "listbox",
2059
- "aria-label": "Available fields",
2060
- children: /* @__PURE__ */ w(Ve, {
2061
- mode: r,
2062
- schema: i,
2063
- searchTerm: c,
2064
- recentOptions: k,
2065
- groupedFields: O,
2066
- filteredCount: D.length,
2067
- selectedFields: a,
2068
- focusedIndex: F,
2069
- onSelectField: M,
2070
- onFocusField: R
2071
- })
2072
- }),
2073
- /* @__PURE__ */ w("div", {
2074
- className: "dc:hidden dc:md:block dc:w-72 dc:shrink-0 dc:border-l border-dc-border bg-dc-surface-secondary dc:overflow-y-auto",
2075
- children: /* @__PURE__ */ w(Ie, { field: N })
2076
- })
2077
- ]
2078
- }),
2079
- /* @__PURE__ */ T("div", {
2080
- className: "dc:shrink-0 dc:border-t border-dc-border dc:px-4 dc:py-3 dc:flex dc:items-center dc:justify-between dc:text-sm text-dc-text-muted",
2081
- children: [/* @__PURE__ */ T("div", { children: [
2082
- /* @__PURE__ */ w("span", {
2083
- className: "text-dc-text-secondary",
2084
- children: D.length
2085
- }),
2086
- " ",
2087
- s(r === "metrics" ? "fieldSearch.footer.metricsAvailable" : r === "filter" ? "fieldSearch.footer.fieldsAvailable" : "fieldSearch.footer.dimensionsAvailable")
2088
- ] }), /* @__PURE__ */ T("div", {
2089
- className: "dc:hidden dc:md:flex dc:items-center dc:gap-4",
2090
- children: [
2091
- /* @__PURE__ */ T("span", { children: [
2092
- /* @__PURE__ */ w("kbd", {
2093
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2094
- children: "↑↓"
2095
- }),
2096
- " ",
2097
- s("fieldSearch.shortcut.navigate")
2098
- ] }),
2099
- /* @__PURE__ */ T("span", { children: [
2100
- /* @__PURE__ */ w("kbd", {
2101
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2102
- children: s("fieldSearch.shortcut.keyEnter")
2103
- }),
2104
- " ",
2105
- s("fieldSearch.shortcut.select")
2106
- ] }),
2107
- /* @__PURE__ */ T("span", { children: [
2108
- /* @__PURE__ */ w("kbd", {
2109
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2110
- children: s("fieldSearch.shortcut.keyShift")
2111
- }),
2112
- s("fieldSearch.shortcut.plusClick"),
2113
- " ",
2114
- s("fieldSearch.shortcut.multiSelect")
2115
- ] }),
2116
- /* @__PURE__ */ T("span", { children: [
2117
- /* @__PURE__ */ w("kbd", {
2118
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2119
- children: s("fieldSearch.shortcut.keyEsc")
2120
- }),
2121
- " ",
2122
- s("fieldSearch.shortcut.close")
2123
- ] })
2124
- ]
2125
- })]
2126
- })
2127
- ]
2128
- })
2129
- });
2130
- }
2131
- //#endregion
2132
- //#region src/client/shared/types.ts
2133
- var Ke = [
2134
- {
2135
- value: "custom",
2136
- label: "dateRange.custom"
2137
- },
2138
- {
2139
- value: "today",
2140
- label: "dateRange.today"
2141
- },
2142
- {
2143
- value: "yesterday",
2144
- label: "dateRange.yesterday"
2145
- },
2146
- {
2147
- value: "this_week",
2148
- label: "dateRange.thisWeek"
2149
- },
2150
- {
2151
- value: "this_month",
2152
- label: "dateRange.thisMonth"
2153
- },
2154
- {
2155
- value: "this_quarter",
2156
- label: "dateRange.thisQuarter"
2157
- },
2158
- {
2159
- value: "this_year",
2160
- label: "dateRange.thisYear"
2161
- },
2162
- {
2163
- value: "last_7_days",
2164
- label: "dateRange.last7Days"
2165
- },
2166
- {
2167
- value: "last_30_days",
2168
- label: "dateRange.last30Days"
2169
- },
2170
- {
2171
- value: "last_n_days",
2172
- label: "dateRange.lastNDays"
2173
- },
2174
- {
2175
- value: "last_week",
2176
- label: "dateRange.lastWeek"
2177
- },
2178
- {
2179
- value: "last_n_weeks",
2180
- label: "dateRange.lastNWeeks"
2181
- },
2182
- {
2183
- value: "last_month",
2184
- label: "dateRange.lastMonth"
2185
- },
2186
- {
2187
- value: "last_12_months",
2188
- label: "dateRange.last12Months"
2189
- },
2190
- {
2191
- value: "last_n_months",
2192
- label: "dateRange.lastNMonths"
2193
- },
2194
- {
2195
- value: "last_quarter",
2196
- label: "dateRange.lastQuarter"
2197
- },
2198
- {
2199
- value: "last_n_quarters",
2200
- label: "dateRange.lastNQuarters"
2201
- },
2202
- {
2203
- value: "last_year",
2204
- label: "dateRange.lastYear"
2205
- },
2206
- {
2207
- value: "last_n_years",
2208
- label: "dateRange.lastNYears"
2209
- }
2210
- ], qe = [
2211
- {
2212
- id: "today",
2213
- label: "Today",
2214
- value: "today"
2215
- },
2216
- {
2217
- id: "yesterday",
2218
- label: "Yesterday",
2219
- value: "yesterday"
2220
- },
2221
- {
2222
- id: "7d",
2223
- label: "7D",
2224
- value: "last 7 days"
2225
- },
2226
- {
2227
- id: "30d",
2228
- label: "30D",
2229
- value: "last 30 days"
2230
- },
2231
- {
2232
- id: "3m",
2233
- label: "3M",
2234
- value: "last 3 months"
2235
- },
2236
- {
2237
- id: "6m",
2238
- label: "6M",
2239
- value: "last 6 months"
2240
- },
2241
- {
2242
- id: "12m",
2243
- label: "12M",
2244
- value: "last 12 months"
2245
- }
2246
- ], Je = [
2247
- {
2248
- id: "wtd",
2249
- label: "Week to Date",
2250
- value: "this week"
2251
- },
2252
- {
2253
- id: "mtd",
2254
- label: "Month to Date",
2255
- value: "this month"
2256
- },
2257
- {
2258
- id: "qtd",
2259
- label: "Quarter to Date",
2260
- value: "this quarter"
2261
- },
2262
- {
2263
- id: "ytd",
2264
- label: "Year to Date",
2265
- value: "this year"
2266
- }
2267
- ];
2268
- function Ye(e) {
2269
- let t = new Date(e), n = t.getDay(), r = n === 0 ? 6 : n - 1;
2270
- return t.setDate(t.getDate() - r), t;
2271
- }
2272
- function Xe(e, t, n) {
2273
- switch (e) {
2274
- case "today": return {
2275
- start: t,
2276
- end: n
2277
- };
2278
- case "yesterday": {
2279
- let e = new Date(t);
2280
- e.setDate(e.getDate() - 1);
2281
- let n = new Date(e);
2282
- return n.setHours(23, 59, 59, 999), {
2283
- start: e,
2284
- end: n
2285
- };
2286
- }
2287
- case "this week": return {
2288
- start: Ye(t),
2289
- end: n
2290
- };
2291
- case "this month": return {
2292
- start: new Date(t.getFullYear(), t.getMonth(), 1),
2293
- end: n
2294
- };
2295
- case "this quarter": {
2296
- let e = Math.floor(t.getMonth() / 3);
2297
- return {
2298
- start: new Date(t.getFullYear(), e * 3, 1),
2299
- end: n
2300
- };
2301
- }
2302
- case "this year": return {
2303
- start: new Date(t.getFullYear(), 0, 1),
2304
- end: n
2305
- };
2306
- default: return null;
2307
- }
2308
- }
2309
- function Ze(e, t, n) {
2310
- let r = e.match(/^last\s+(\d+)\s+(day|days|week|weeks|month|months|quarter|quarters|year|years)$/i);
2311
- if (!r) return null;
2312
- let i = parseInt(r[1], 10), a = r[2].toLowerCase(), o = new Date(t);
2313
- return a === "day" || a === "days" ? o.setDate(o.getDate() - i + 1) : a === "week" || a === "weeks" ? o.setDate(o.getDate() - i * 7 + 1) : a === "month" || a === "months" ? (o.setMonth(o.getMonth() - i), o.setDate(o.getDate() + 1)) : a === "quarter" || a === "quarters" ? (o.setMonth(o.getMonth() - i * 3), o.setDate(o.getDate() + 1)) : (a === "year" || a === "years") && (o.setFullYear(o.getFullYear() - i), o.setDate(o.getDate() + 1)), {
2314
- start: o,
2315
- end: n
2316
- };
2317
- }
2318
- function Qe(e, t) {
2319
- let n = e.match(/^last\s+(week|month|quarter|year)$/i);
2320
- if (!n) return null;
2321
- let r = n[1].toLowerCase();
2322
- if (r === "week") {
2323
- let e = new Date(t), n = e.getDay(), r = n === 0 ? 6 : n - 1;
2324
- e.setDate(e.getDate() - r - 1), e.setHours(23, 59, 59, 999);
2325
- let i = new Date(e);
2326
- return i.setDate(i.getDate() - 6), i.setHours(0, 0, 0, 0), {
2327
- start: i,
2328
- end: e
2329
- };
2330
- }
2331
- if (r === "month") {
2332
- let e = new Date(t.getFullYear(), t.getMonth() - 1, 1), n = new Date(t.getFullYear(), t.getMonth(), 0);
2333
- return n.setHours(23, 59, 59, 999), {
2334
- start: e,
2335
- end: n
2336
- };
2337
- }
2338
- if (r === "quarter") {
2339
- let e = Math.floor(t.getMonth() / 3), n = e === 0 ? 3 : e - 1, r = e === 0 ? t.getFullYear() - 1 : t.getFullYear(), i = new Date(r, n * 3, 1), a = new Date(r, n * 3 + 3, 0);
2340
- return a.setHours(23, 59, 59, 999), {
2341
- start: i,
2342
- end: a
2343
- };
2344
- }
2345
- let i = new Date(t.getFullYear() - 1, 0, 1), a = new Date(t.getFullYear() - 1, 11, 31);
2346
- return a.setHours(23, 59, 59, 999), {
2347
- start: i,
2348
- end: a
2349
- };
2350
- }
2351
- function $e(e) {
2352
- let t = /* @__PURE__ */ new Date();
2353
- t.setHours(0, 0, 0, 0);
2354
- let n = new Date(t);
2355
- return n.setHours(23, 59, 59, 999), Xe(e.toLowerCase(), t, n) ?? Ze(e, t, n) ?? Qe(e, t);
2356
- }
2357
- function et(e, t) {
2358
- let n = {
2359
- month: "short",
2360
- day: "numeric",
2361
- year: "numeric"
2362
- }, r = e.toLocaleDateString("en-US", n), i = t.toLocaleDateString("en-US", n);
2363
- return r === i ? r : e.getFullYear() === t.getFullYear() ? `${e.toLocaleDateString("en-US", {
2364
- month: "short",
2365
- day: "numeric"
2366
- })} - ${i}` : `${r} - ${i}`;
2367
- }
2368
- function tt(e) {
2369
- if (!e) return null;
2370
- if (Array.isArray(e)) return "custom";
2371
- let t = e.toLowerCase().trim(), n = [...qe, ...Je].find((e) => e.value.toLowerCase() === t);
2372
- return n ? n.id : "custom";
2373
- }
2374
- var nt = {
2375
- day: "days",
2376
- week: "weeks",
2377
- month: "months",
2378
- quarter: "quarters",
2379
- year: "years"
2380
- };
2381
- function rt(e) {
2382
- if (!e) return null;
2383
- if (Array.isArray(e)) return { rangeType: "custom" };
2384
- let t = e.match(/^last (\d+) (days|weeks|months|quarters|years)$/);
2385
- if (t) {
2386
- let [, e, n] = t;
2387
- return {
2388
- rangeType: `last_n_${n}`,
2389
- numberValue: parseInt(e) || 1
2390
- };
2391
- }
2392
- let n = e.match(/^last (day|week|month|quarter|year)$/);
2393
- if (n) {
2394
- let [, e] = n;
2395
- return {
2396
- rangeType: `last_n_${nt[e] ?? "years"}`,
2397
- numberValue: 1
2398
- };
2399
- }
2400
- for (let t of Ke) if (t.value !== "custom" && !u(t.value) && s(t.value) === e) return { rangeType: t.value };
2401
- return { rangeType: "custom" };
2402
- }
2403
- //#endregion
2404
- //#region src/client/components/Modal.tsx
2405
- var it = ({ isOpen: e, onClose: t, title: n, size: r = "md", closeOnBackdropClick: i = !0, closeOnEscape: a = !0, showCloseButton: o = !0, children: s, footer: c, noPadding: l = !1 }) => {
2406
- let u = v((e) => {
2407
- e.key === "Escape" && a && t();
2408
- }, [a, t]);
2409
- return y(() => (e ? (a && document.addEventListener("keydown", u), document.body.style.overflow = "hidden") : document.body.style.overflow = "unset", () => {
2410
- document.removeEventListener("keydown", u), document.body.style.overflow = "unset";
2411
- }), [
2412
- e,
2413
- a,
2414
- u
2415
- ]), e ? /* @__PURE__ */ w("div", {
2416
- className: `dc:fixed dc:inset-0 dc:z-50 dc:backdrop-blur-md ${r === "fullscreen-mobile" ? "dc:flex dc:md:flex dc:md:items-center dc:md:justify-center" : "dc:flex dc:items-center dc:justify-center"}`,
2417
- style: { backgroundColor: "var(--dc-overlay)" },
2418
- onClick: i ? t : void 0,
2419
- children: /* @__PURE__ */ T("div", {
2420
- className: `dc:relative bg-dc-surface dc:border border-dc-border ${r === "fullscreen-mobile" ? "dc:rounded-none dc:md:rounded-lg" : "dc:rounded-lg"} ${r === "fullscreen" || r === "fullscreen-mobile" ? "" : "dc:mx-4"} ${(() => {
2421
- switch (r) {
2422
- case "sm": return "dc:max-w-md";
2423
- case "md": return "dc:max-w-lg";
2424
- case "lg": return "dc:max-w-2xl";
2425
- case "xl": return "dc:max-w-6xl";
2426
- case "xxl": return "dc:max-w-[1400px]";
2427
- case "full": return "dc:max-w-7xl";
2428
- case "fullscreen": return "dc:w-[90vw] dc:h-[90vh] dc:max-w-none";
2429
- case "fullscreen-mobile": return "dc:w-full dc:h-full dc:md:w-[min(90vw,1400px)] dc:md:h-[90vh]";
2430
- default: return "dc:max-w-lg";
2431
- }
2432
- })()} ${r === "fullscreen" || r === "fullscreen-mobile" ? "" : "dc:max-h-[90vh]"} dc:flex dc:flex-col`,
2433
- style: { boxShadow: "var(--dc-shadow-2xl)" },
2434
- onClick: (e) => e.stopPropagation(),
2435
- role: "dialog",
2436
- "aria-modal": "true",
2437
- "aria-labelledby": n ? "modal-title" : void 0,
2438
- children: [
2439
- (n || o) && /* @__PURE__ */ T("div", {
2440
- className: "dc:flex dc:items-center dc:justify-between dc:px-6 dc:py-4 dc:border-b border-dc-border",
2441
- children: [n && /* @__PURE__ */ w("h2", {
2442
- id: "modal-title",
2443
- className: "dc:text-xl dc:font-semibold text-dc-text",
2444
- children: n
2445
- }), o && /* @__PURE__ */ w("button", {
2446
- type: "button",
2447
- onClick: t,
2448
- className: "text-dc-text-muted hover:text-dc-text-secondary dc:transition-colors dc:p-2 dc:-mr-2",
2449
- "aria-label": "Close modal",
2450
- children: /* @__PURE__ */ w("svg", {
2451
- width: "24",
2452
- height: "24",
2453
- fill: "none",
2454
- viewBox: "0 0 24 24",
2455
- stroke: "currentColor",
2456
- children: /* @__PURE__ */ w("path", {
2457
- strokeLinecap: "round",
2458
- strokeLinejoin: "round",
2459
- strokeWidth: 2,
2460
- d: "M6 18L18 6M6 6l12 12"
2461
- })
2462
- })
2463
- })]
2464
- }),
2465
- /* @__PURE__ */ w("div", {
2466
- className: `dc:flex-1 dc:overflow-y-auto ${l ? "" : "dc:px-6 dc:py-4"}`,
2467
- children: s
2468
- }),
2469
- c && /* @__PURE__ */ w("div", {
2470
- className: "dc:flex dc:items-center dc:justify-end dc:space-x-3 dc:px-6 dc:py-4 dc:border-t border-dc-border bg-dc-surface-secondary",
2471
- children: g.Children.toArray(c)
2472
- })
2473
- ]
2474
- })
2475
- }) : null;
2476
- };
2477
- //#endregion
2478
- //#region src/client/adapters/funnelModeAdapter.ts
2479
- function at(e) {
2480
- let t = "";
2481
- e.funnelBindingKey && (typeof e.funnelBindingKey.dimension == "string" ? t = e.funnelBindingKey.dimension : Array.isArray(e.funnelBindingKey.dimension) && (t = e.funnelBindingKey.dimension.map((e) => ({
2482
- cube: e.cube,
2483
- dimension: e.dimension
2484
- }))));
2485
- let n = e.funnelTimeDimension || "", r = e.funnelSteps.map((t) => {
2486
- let n = { name: t.name };
2487
- return t.cube && t.cube !== e.funnelCube && (n.cube = t.cube), t.filters && t.filters.length > 0 && (n.filter = t.filters.length === 1 ? t.filters[0] : { and: t.filters }), t.timeToConvert && (n.timeToConvert = t.timeToConvert), n;
2488
- });
2489
- return { funnel: {
2490
- bindingKey: t,
2491
- timeDimension: n,
2492
- steps: r,
2493
- includeTimeMetrics: !0
2494
- } };
2495
- }
2496
- function ot(e) {
2497
- let { funnel: t } = e, n = null;
2498
- if (t.steps.length > 0 && t.steps[0].cube) n = t.steps[0].cube;
2499
- else if (typeof t.bindingKey == "string") {
2500
- let e = t.bindingKey.split(".");
2501
- e.length > 0 && (n = e[0]);
2502
- }
2503
- let r = null;
2504
- t.bindingKey && (typeof t.bindingKey == "string" ? r = { dimension: t.bindingKey } : Array.isArray(t.bindingKey) && (r = { dimension: t.bindingKey.map((e) => ({
2505
- cube: e.cube,
2506
- dimension: e.dimension
2507
- })) }));
2508
- let i = null;
2509
- t.timeDimension && (typeof t.timeDimension == "string" ? i = t.timeDimension : Array.isArray(t.timeDimension) && t.timeDimension.length > 0 && (i = `${t.timeDimension[0].cube}.${t.timeDimension[0].dimension}`));
2510
- let a = t.steps.map((e) => {
2511
- let t = [];
2512
- return e.filter && (t = Array.isArray(e.filter) ? e.filter : typeof e.filter == "object" && "and" in e.filter ? e.filter.and : [e.filter]), {
2513
- id: Z(),
2514
- name: e.name,
2515
- cube: e.cube || n || "",
2516
- filters: t,
2517
- timeToConvert: e.timeToConvert
2518
- };
2519
- });
2520
- return {
2521
- funnelCube: n,
2522
- funnelSteps: a,
2523
- activeFunnelStepIndex: 0,
2524
- funnelTimeDimension: i,
2525
- funnelBindingKey: r
2526
- };
2527
- }
2528
- function st(e) {
2529
- if (!e || typeof e != "object") return !1;
2530
- let t = e;
2531
- if (t.version !== 1 || t.analysisType !== "funnel" || !t.query || typeof t.query != "object") return !1;
2532
- let n = t.query;
2533
- return !(!n.funnel || typeof n.funnel != "object");
2534
- }
2535
- var ct = {
2536
- type: "funnel",
2537
- createInitial() {
2538
- return {
2539
- funnelCube: null,
2540
- funnelSteps: [],
2541
- activeFunnelStepIndex: 0,
2542
- funnelTimeDimension: null,
2543
- funnelBindingKey: null
2544
- };
2545
- },
2546
- extractState(e) {
2547
- return {
2548
- funnelCube: e.funnelCube,
2549
- funnelSteps: e.funnelSteps,
2550
- activeFunnelStepIndex: e.activeFunnelStepIndex,
2551
- funnelTimeDimension: e.funnelTimeDimension,
2552
- funnelBindingKey: e.funnelBindingKey
2553
- };
2554
- },
2555
- canLoad(e) {
2556
- return st(e);
2557
- },
2558
- load(e) {
2559
- if (e.analysisType !== "funnel") throw Error(`Cannot load ${e.analysisType} config with funnel adapter`);
2560
- return ot(e.query);
2561
- },
2562
- save(e, t, n) {
2563
- return {
2564
- version: 1,
2565
- analysisType: "funnel",
2566
- activeView: n,
2567
- charts: { funnel: t.funnel || this.getDefaultChartConfig() },
2568
- query: at(e)
2569
- };
2570
- },
2571
- validate(e) {
2572
- let t = [], n = [];
2573
- e.funnelSteps.length < 2 && t.push("A funnel requires at least 2 steps"), e.funnelBindingKey?.dimension || t.push("A binding key is required to link funnel steps"), e.funnelTimeDimension || t.push("A time dimension is required for funnel ordering"), e.funnelSteps.forEach((e, t) => {
2574
- (!e.name || e.name.trim() === "") && n.push(`Step ${t + 1} has no name`), e.filters.length === 0 && n.push(`Step ${t + 1} "${e.name}" has no filter - all events will match`);
2575
- });
2576
- let r = e.funnelSteps.map((e) => e.name.toLowerCase()), i = r.filter((e, t) => r.indexOf(e) !== t);
2577
- return i.length > 0 && n.push(`Duplicate step names: ${[...new Set(i)].join(", ")}`), {
2578
- isValid: t.length === 0,
2579
- errors: t,
2580
- warnings: n
2581
- };
2582
- },
2583
- clear(e) {
2584
- return {
2585
- ...this.createInitial(),
2586
- funnelCube: e.funnelCube
2587
- };
2588
- },
2589
- getDefaultChartConfig() {
2590
- return {
2591
- chartType: "funnel",
2592
- chartConfig: {},
2593
- displayConfig: {
2594
- showLegend: !0,
2595
- showGrid: !0,
2596
- showTooltip: !0
2597
- }
2598
- };
2599
- }
2600
- };
2601
- //#endregion
2602
- //#region src/client/adapters/flowModeAdapter.ts
2603
- function lt(e) {
2604
- let t = "";
2605
- return e.flowBindingKey && (typeof e.flowBindingKey.dimension == "string" ? t = e.flowBindingKey.dimension : Array.isArray(e.flowBindingKey.dimension) && (t = e.flowBindingKey.dimension.map((e) => ({
2606
- cube: e.cube,
2607
- dimension: e.dimension
2608
- })))), { flow: {
2609
- bindingKey: t,
2610
- timeDimension: e.flowTimeDimension || "",
2611
- startingStep: {
2612
- name: e.startingStep.name || "Starting Step",
2613
- filter: e.startingStep.filters.length === 1 ? e.startingStep.filters[0] : e.startingStep.filters.length > 1 ? e.startingStep.filters : void 0
2614
- },
2615
- stepsBefore: e.stepsBefore,
2616
- stepsAfter: e.stepsAfter,
2617
- eventDimension: e.eventDimension || "",
2618
- joinStrategy: e.joinStrategy
2619
- } };
2620
- }
2621
- function ut(e) {
2622
- let { flow: t } = e, n = null;
2623
- if (typeof t.bindingKey == "string") {
2624
- let e = t.bindingKey.split(".");
2625
- e.length > 0 && (n = e[0]);
2626
- } else Array.isArray(t.bindingKey) && t.bindingKey.length > 0 && (n = t.bindingKey[0].cube);
2627
- let r = null;
2628
- t.bindingKey && (typeof t.bindingKey == "string" ? r = { dimension: t.bindingKey } : Array.isArray(t.bindingKey) && (r = { dimension: t.bindingKey.map((e) => ({
2629
- cube: e.cube,
2630
- dimension: e.dimension
2631
- })) }));
2632
- let i = null;
2633
- t.timeDimension && (typeof t.timeDimension == "string" ? i = t.timeDimension : Array.isArray(t.timeDimension) && t.timeDimension.length > 0 && (i = `${t.timeDimension[0].cube}.${t.timeDimension[0].dimension}`));
2634
- let a = [];
2635
- return t.startingStep.filter && (a = Array.isArray(t.startingStep.filter) ? t.startingStep.filter : [t.startingStep.filter]), {
2636
- flowCube: n,
2637
- flowBindingKey: r,
2638
- flowTimeDimension: i,
2639
- startingStep: {
2640
- name: t.startingStep.name || "",
2641
- filters: a
2642
- },
2643
- stepsBefore: t.stepsBefore || 3,
2644
- stepsAfter: t.stepsAfter || 3,
2645
- eventDimension: t.eventDimension || null,
2646
- joinStrategy: t.joinStrategy || "auto"
2647
- };
2648
- }
2649
- function dt(e) {
2650
- if (!e || typeof e != "object") return !1;
2651
- let t = e;
2652
- if (t.version !== 1 || t.analysisType !== "flow" || !t.query || typeof t.query != "object") return !1;
2653
- let n = t.query;
2654
- return !(!n.flow || typeof n.flow != "object");
2655
- }
2656
- var ft = {
2657
- type: "flow",
2658
- createInitial() {
2659
- return {
2660
- flowCube: null,
2661
- flowBindingKey: null,
2662
- flowTimeDimension: null,
2663
- startingStep: {
2664
- name: "",
2665
- filters: []
2666
- },
2667
- stepsBefore: 3,
2668
- stepsAfter: 3,
2669
- eventDimension: null,
2670
- joinStrategy: "auto"
2671
- };
2672
- },
2673
- extractState(e) {
2674
- return {
2675
- flowCube: e.flowCube,
2676
- flowBindingKey: e.flowBindingKey,
2677
- flowTimeDimension: e.flowTimeDimension,
2678
- startingStep: e.startingStep,
2679
- stepsBefore: e.stepsBefore,
2680
- stepsAfter: e.stepsAfter,
2681
- eventDimension: e.eventDimension,
2682
- joinStrategy: e.joinStrategy || "auto"
2683
- };
2684
- },
2685
- canLoad(e) {
2686
- return dt(e);
2687
- },
2688
- load(e) {
2689
- if (e.analysisType !== "flow") throw Error(`Cannot load ${e.analysisType} config with flow adapter`);
2690
- return ut(e.query);
2691
- },
2692
- save(e, t, n) {
2693
- return {
2694
- version: 1,
2695
- analysisType: "flow",
2696
- activeView: n,
2697
- charts: { flow: t.flow || this.getDefaultChartConfig() },
2698
- query: lt(e)
2699
- };
2700
- },
2701
- validate(e) {
2702
- let t = [], n = [];
2703
- return e.flowCube || t.push("Select an event stream cube for flow analysis"), e.flowBindingKey?.dimension || t.push("A binding key is required to link events to entities"), e.flowTimeDimension || t.push("A time dimension is required for event ordering"), e.eventDimension || t.push("An event dimension is required to categorize events"), e.startingStep.filters.length === 0 && t.push("The starting step must have at least one filter to identify the anchor event"), (e.stepsBefore < 0 || e.stepsBefore > 5) && t.push("Steps before must be between 0 and 5"), (e.stepsAfter < 0 || e.stepsAfter > 5) && t.push("Steps after must be between 0 and 5"), e.joinStrategy && ![
2704
- "auto",
2705
- "lateral",
2706
- "window"
2707
- ].includes(e.joinStrategy) && t.push("Join strategy must be auto, lateral, or window"), e.startingStep.name || n.push("Starting step has no name - using default"), (e.stepsBefore >= 4 || e.stepsAfter >= 4) && n.push("High step depth (4-5) may impact query performance on large datasets"), {
2708
- isValid: t.length === 0,
2709
- errors: t,
2710
- warnings: n
2711
- };
2712
- },
2713
- clear(e) {
2714
- return {
2715
- ...this.createInitial(),
2716
- flowCube: e.flowCube
2717
- };
2718
- },
2719
- getDefaultChartConfig() {
2720
- return {
2721
- chartType: "sankey",
2722
- chartConfig: {},
2723
- displayConfig: {
2724
- showLegend: !0,
2725
- showGrid: !1,
2726
- showTooltip: !0
2727
- }
2728
- };
2729
- }
2730
- };
2731
- //#endregion
2732
- //#region src/client/adapters/retentionModeAdapter.ts
2733
- function pt(e) {
2734
- let t = "";
2735
- e.retentionBindingKey && (typeof e.retentionBindingKey.dimension == "string" ? t = e.retentionBindingKey.dimension : Array.isArray(e.retentionBindingKey.dimension) && (t = e.retentionBindingKey.dimension.map((e) => ({
2736
- cube: e.cube,
2737
- dimension: e.dimension
2738
- }))));
2739
- let n = { retention: {
2740
- timeDimension: e.retentionTimeDimension || "",
2741
- bindingKey: t,
2742
- dateRange: e.retentionDateRange,
2743
- granularity: e.retentionViewGranularity,
2744
- periods: e.retentionPeriods,
2745
- retentionType: e.retentionType
2746
- } };
2747
- return e.retentionCohortFilters.length > 0 && (n.retention.cohortFilters = e.retentionCohortFilters.length === 1 ? e.retentionCohortFilters[0] : e.retentionCohortFilters), e.retentionActivityFilters.length > 0 && (n.retention.activityFilters = e.retentionActivityFilters.length === 1 ? e.retentionActivityFilters[0] : e.retentionActivityFilters), e.retentionBreakdowns && e.retentionBreakdowns.length > 0 && (n.retention.breakdownDimensions = e.retentionBreakdowns.map((e) => e.field)), n;
2748
- }
2749
- function mt(e) {
2750
- let { retention: t } = e, n = null;
2751
- if (typeof t.timeDimension == "string") {
2752
- let e = t.timeDimension.split(".");
2753
- e.length > 0 && (n = e[0]);
2754
- } else t.timeDimension?.cube && (n = t.timeDimension.cube);
2755
- let r = null;
2756
- t.bindingKey && (typeof t.bindingKey == "string" ? r = { dimension: t.bindingKey } : Array.isArray(t.bindingKey) && (r = { dimension: t.bindingKey.map((e) => ({
2757
- cube: e.cube,
2758
- dimension: e.dimension
2759
- })) }));
2760
- let i = null;
2761
- t.timeDimension && (i = typeof t.timeDimension == "string" ? t.timeDimension : `${t.timeDimension.cube}.${t.timeDimension.dimension}`);
2762
- let a = [];
2763
- t.cohortFilters && (a = Array.isArray(t.cohortFilters) ? t.cohortFilters : [t.cohortFilters]);
2764
- let s = [];
2765
- t.activityFilters && (s = Array.isArray(t.activityFilters) ? t.activityFilters : [t.activityFilters]);
2766
- let c = [];
2767
- t.breakdownDimensions && Array.isArray(t.breakdownDimensions) && (c = t.breakdownDimensions.map((e) => ({
2768
- field: e,
2769
- label: e.split(".").pop() || e
2770
- })));
2771
- let l = t.dateRange || o("last_3_months");
2772
- return {
2773
- retentionCube: n,
2774
- retentionBindingKey: r,
2775
- retentionTimeDimension: i,
2776
- retentionDateRange: l,
2777
- retentionViewGranularity: t.granularity,
2778
- retentionPeriods: t.periods,
2779
- retentionType: t.retentionType,
2780
- retentionCohortFilters: a,
2781
- retentionActivityFilters: s,
2782
- retentionBreakdowns: c
2783
- };
2784
- }
2785
- function ht(e) {
2786
- if (!e || typeof e != "object") return !1;
2787
- let t = e;
2788
- if (t.version !== 1 || t.analysisType !== "retention" || !t.query || typeof t.query != "object") return !1;
2789
- let n = t.query;
2790
- return !(!n.retention || typeof n.retention != "object");
2791
- }
2792
- var gt = {
2793
- type: "retention",
2794
- createInitial() {
2795
- return { ...i };
2796
- },
2797
- extractState(e) {
2798
- return {
2799
- retentionCube: e.retentionCube,
2800
- retentionBindingKey: e.retentionBindingKey,
2801
- retentionTimeDimension: e.retentionTimeDimension,
2802
- retentionDateRange: e.retentionDateRange || o("last_3_months"),
2803
- retentionViewGranularity: e.retentionViewGranularity || "week",
2804
- retentionPeriods: e.retentionPeriods || 12,
2805
- retentionType: e.retentionType || "classic",
2806
- retentionCohortFilters: e.retentionCohortFilters || [],
2807
- retentionActivityFilters: e.retentionActivityFilters || [],
2808
- retentionBreakdowns: e.retentionBreakdowns || []
2809
- };
2810
- },
2811
- canLoad(e) {
2812
- return ht(e);
2813
- },
2814
- load(e) {
2815
- if (e.analysisType !== "retention") throw Error(`Cannot load ${e.analysisType} config with retention adapter`);
2816
- return mt(e.query);
2817
- },
2818
- save(e, t, n) {
2819
- return {
2820
- version: 1,
2821
- analysisType: "retention",
2822
- activeView: n,
2823
- charts: { retention: t.retention || this.getDefaultChartConfig() },
2824
- query: pt(e)
2825
- };
2826
- },
2827
- validate(e) {
2828
- let t = [], n = [];
2829
- if (e.retentionCube || t.push("Select a cube for retention analysis"), e.retentionTimeDimension || t.push("Select a timestamp dimension for the analysis"), e.retentionBindingKey?.dimension || t.push("Select a user identifier (binding key) to track retention"), !e.retentionDateRange?.start || !e.retentionDateRange?.end) t.push("Date range is required for retention analysis");
2830
- else {
2831
- let n = new Date(e.retentionDateRange.start), r = new Date(e.retentionDateRange.end);
2832
- isNaN(n.getTime()) && t.push("Invalid start date format"), isNaN(r.getTime()) && t.push("Invalid end date format"), n > r && t.push("Start date must be before or equal to end date");
2833
- }
2834
- return e.retentionPeriods < 1 && t.push("At least 1 retention period is required"), e.retentionPeriods > 52 && n.push("More than 52 periods may impact performance"), e.retentionTimeDimension && e.retentionTimeDimension.split(".").length < 2 && n.push("Time dimension should be in format \"Cube.dimension\""), {
2835
- isValid: t.length === 0,
2836
- errors: t,
2837
- warnings: n
2838
- };
2839
- },
2840
- clear(e) {
2841
- return {
2842
- ...this.createInitial(),
2843
- retentionCube: e.retentionCube,
2844
- retentionDateRange: e.retentionDateRange
2845
- };
2846
- },
2847
- getDefaultChartConfig() {
2848
- return {
2849
- chartType: "retentionCombined",
2850
- chartConfig: {},
2851
- displayConfig: {
2852
- showLegend: !0,
2853
- showTooltip: !0,
2854
- showGrid: !0,
2855
- retentionDisplayMode: "combined"
2856
- }
2857
- };
2858
- }
2859
- };
2860
- //#endregion
2861
- //#region src/client/components/AnalysisBuilder/StringArrayInput.tsx
2862
- function _t({ label: e, value: t, onChange: n, placeholder: r, description: i }) {
2863
- let [a, o] = S(() => t.join("\n"));
2864
- y(() => {
2865
- o(t.join("\n"));
2866
- }, [t]);
2867
- let s = v(() => {
2868
- n(a.split("\n").map((e) => e.trim()).filter((e) => e.length > 0));
2869
- }, [a, n]);
2870
- return /* @__PURE__ */ T("div", {
2871
- className: "dc:space-y-1",
2872
- children: [
2873
- /* @__PURE__ */ w("label", {
2874
- className: "dc:text-sm text-dc-text-secondary",
2875
- children: e
2876
- }),
2877
- /* @__PURE__ */ w("textarea", {
2878
- value: a,
2879
- onChange: (e) => o(e.target.value),
2880
- onBlur: s,
2881
- placeholder: r,
2882
- rows: 4,
2883
- className: "dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text dc:resize-y"
2884
- }),
2885
- i && /* @__PURE__ */ w("p", {
2886
- className: "dc:text-xs text-dc-text-muted",
2887
- children: i
2888
- })
2889
- ]
2890
- });
2891
- }
2892
- //#endregion
2893
- //#region src/client/components/AnalysisBuilder/DisplayOptionControl.tsx
2894
- function $({ description: e, t }) {
2895
- return e ? /* @__PURE__ */ w("p", {
2896
- className: "dc:text-xs text-dc-text-muted",
2897
- children: t(e)
2898
- }) : null;
2899
- }
2900
- function vt({ option: e, displayConfig: t, setValue: n, t: r }) {
2901
- let i = e.key;
2902
- return /* @__PURE__ */ T("label", {
2903
- className: "dc:flex dc:items-center dc:space-x-2",
2904
- children: [/* @__PURE__ */ w("input", {
2905
- type: "checkbox",
2906
- checked: t[i] ?? e.defaultValue ?? !1,
2907
- onChange: (e) => n(e.target.checked),
2908
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
2909
- style: { color: "var(--dc-primary)" }
2910
- }), /* @__PURE__ */ w("span", {
2911
- className: "dc:text-sm text-dc-text",
2912
- children: r(e.label)
2913
- })]
2914
- });
2915
- }
2916
- function yt({ option: e, displayConfig: t, setValue: n, t: r }) {
2917
- let i = t[e.key] ?? e.defaultValue ?? "";
2918
- return /* @__PURE__ */ T("div", {
2919
- className: "dc:space-y-1",
2920
- children: [
2921
- /* @__PURE__ */ T("label", {
2922
- className: "dc:text-sm text-dc-text-secondary",
2923
- children: [r(e.label), e.key === "content" && /* @__PURE__ */ w("span", {
2924
- className: "dc:text-xs text-dc-text-muted dc:ml-1",
2925
- children: "(only headers, lists and links)"
2926
- })]
2927
- }),
2928
- e.key === "content" ? /* @__PURE__ */ w("textarea", {
2929
- value: i,
2930
- onChange: (e) => n(e.target.value),
2931
- placeholder: e.placeholder,
2932
- rows: 8,
2933
- className: "dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent dc:font-mono dc:resize-y bg-dc-surface text-dc-text"
2934
- }) : /* @__PURE__ */ w("input", {
2935
- type: "text",
2936
- value: i,
2937
- onChange: (e) => n(e.target.value),
2938
- placeholder: e.placeholder,
2939
- className: "dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text"
2940
- }),
2941
- /* @__PURE__ */ w($, {
2942
- description: e.description,
2943
- t: r
2944
- })
2945
- ]
2946
- });
2947
- }
2948
- function bt({ option: e, displayConfig: t, colorPalette: n, setValue: r, t: i }) {
2949
- let a = t[e.key] ?? e.defaultValue ?? 0;
2950
- return /* @__PURE__ */ T("div", {
2951
- className: "dc:space-y-1",
2952
- children: [
2953
- /* @__PURE__ */ w("label", {
2954
- className: "dc:text-sm text-dc-text-secondary",
2955
- children: i(e.label)
2956
- }),
2957
- /* @__PURE__ */ w("div", {
2958
- className: "dc:flex dc:flex-wrap dc:gap-2",
2959
- children: n?.colors.map((e, t) => /* @__PURE__ */ w("button", {
2960
- type: "button",
2961
- onClick: () => r(t),
2962
- className: `dc:w-8 dc:h-8 dc:rounded dc:border-2 dc:transition-all dc:duration-200 dc:hover:scale-110 focus:outline-hidden dc:focus:ring-2 focus:ring-dc-accent dc:focus:ring-offset-1 ${a === t ? "dc:ring-2 dc:ring-offset-1 dc:scale-110" : "hover:border-dc-text-muted"}`,
2963
- style: {
2964
- backgroundColor: e,
2965
- borderColor: a === t ? "var(--dc-primary)" : "var(--dc-border)"
2966
- },
2967
- title: `Color ${t + 1}: ${e}`
2968
- }, t)) || [/* @__PURE__ */ w("button", {
2969
- type: "button",
2970
- onClick: () => r(0),
2971
- className: "dc:w-8 dc:h-8 dc:rounded-sm dc:border-2 dc:ring-2 dc:ring-offset-1",
2972
- style: {
2973
- backgroundColor: "#8884d8",
2974
- borderColor: "var(--dc-primary)",
2975
- boxShadow: "0 0 0 2px var(--dc-primary)"
2976
- },
2977
- title: "Default Color"
2978
- }, 0)]
2979
- }),
2980
- /* @__PURE__ */ w($, {
2981
- description: e.description,
2982
- t: i
2983
- })
2984
- ]
2985
- });
2986
- }
2987
- function xt({ option: e, displayConfig: t, setValue: n, t: r }) {
2988
- let i = e.key;
2989
- return /* @__PURE__ */ T("div", {
2990
- className: "dc:space-y-1",
2991
- children: [
2992
- /* @__PURE__ */ w("label", {
2993
- className: "dc:text-sm text-dc-text-secondary",
2994
- children: r(e.label)
2995
- }),
2996
- /* @__PURE__ */ w("input", {
2997
- type: "number",
2998
- value: t[i] ?? e.defaultValue ?? 0,
2999
- onChange: (e) => n(e.target.value === "" ? void 0 : Number(e.target.value)),
3000
- placeholder: e.placeholder,
3001
- min: e.min,
3002
- max: e.max,
3003
- step: e.step,
3004
- className: "dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text"
3005
- }),
3006
- /* @__PURE__ */ w($, {
3007
- description: e.description,
3008
- t: r
3009
- })
3010
- ]
3011
- });
3012
- }
3013
- function St({ option: e, displayConfig: t, setValue: n, t: r }) {
3014
- let i = e.key;
3015
- return /* @__PURE__ */ T("div", {
3016
- className: "dc:space-y-1",
3017
- children: [
3018
- /* @__PURE__ */ w("label", {
3019
- className: "dc:text-sm text-dc-text-secondary",
3020
- children: r(e.label)
3021
- }),
3022
- /* @__PURE__ */ w("select", {
3023
- value: t[i] ?? e.defaultValue ?? "",
3024
- onChange: (e) => n(e.target.value),
3025
- className: "dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text",
3026
- children: e.options?.map((e) => /* @__PURE__ */ w("option", {
3027
- value: e.value,
3028
- children: r(e.label)
3029
- }, e.value))
3030
- }),
3031
- /* @__PURE__ */ w($, {
3032
- description: e.description,
3033
- t: r
3034
- })
3035
- ]
3036
- });
3037
- }
3038
- function Ct({ option: e, displayConfig: t, setValue: n, t: r }) {
3039
- let i = t[e.key] ?? e.defaultValue ?? "#8884d8";
3040
- return /* @__PURE__ */ T("div", {
3041
- className: "dc:space-y-1",
3042
- children: [
3043
- /* @__PURE__ */ w("label", {
3044
- className: "dc:text-sm text-dc-text-secondary",
3045
- children: r(e.label)
3046
- }),
3047
- /* @__PURE__ */ T("div", {
3048
- className: "dc:flex dc:items-center dc:space-x-2",
3049
- children: [/* @__PURE__ */ w("input", {
3050
- type: "color",
3051
- value: i,
3052
- onChange: (e) => n(e.target.value),
3053
- className: "dc:w-12 dc:h-8 dc:border border-dc-border dc:rounded-sm dc:cursor-pointer"
3054
- }), /* @__PURE__ */ w("input", {
3055
- type: "text",
3056
- value: i,
3057
- onChange: (e) => n(e.target.value),
3058
- placeholder: e.placeholder || "#8884d8",
3059
- className: "dc:flex-1 dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text"
3060
- })]
3061
- }),
3062
- /* @__PURE__ */ w($, {
3063
- description: e.description,
3064
- t: r
3065
- })
3066
- ]
3067
- });
3068
- }
3069
- function wt({ option: e, displayConfig: t, setValue: n, t: r }) {
3070
- let i = e.key;
3071
- return /* @__PURE__ */ w(h, {
3072
- axisLabel: r(e.label),
3073
- value: t[i] || {},
3074
- onChange: (e) => n(Object.keys(e).length > 0 ? e : void 0)
3075
- });
3076
- }
3077
- function Tt({ option: e, displayConfig: t, setValue: n, t: r }) {
3078
- let i = e.key;
3079
- return /* @__PURE__ */ w(_t, {
3080
- label: r(e.label),
3081
- value: t[i] ?? [],
3082
- onChange: (e) => n(e.length > 0 ? e : void 0),
3083
- placeholder: e.placeholder,
3084
- description: e.description ? r(e.description) : void 0
3085
- });
3086
- }
3087
- function Et({ option: e, displayConfig: t, setValue: n, t: r }) {
3088
- let i = e.key;
3089
- return /* @__PURE__ */ T("div", {
3090
- className: "dc:space-y-1",
3091
- children: [
3092
- /* @__PURE__ */ w("label", {
3093
- className: "dc:text-sm text-dc-text-secondary",
3094
- children: r(e.label)
3095
- }),
3096
- /* @__PURE__ */ w("div", {
3097
- className: "dc:flex dc:border border-dc-border dc:rounded-sm dc:overflow-hidden",
3098
- children: e.options?.map((a) => /* @__PURE__ */ w("button", {
3099
- type: "button",
3100
- onClick: () => n(a.value),
3101
- className: `dc:flex-1 dc:px-3 dc:py-1.5 dc:text-sm dc:font-medium dc:transition-colors ${(t[i] ?? e.defaultValue) === a.value ? "bg-dc-primary text-white" : "bg-dc-surface text-dc-text hover:bg-dc-border"}`,
3102
- children: r(a.label)
3103
- }, a.value))
3104
- }),
3105
- /* @__PURE__ */ w($, {
3106
- description: e.description,
3107
- t: r
3108
- })
3109
- ]
3110
- });
3111
- }
3112
- var Dt = {
3113
- boolean: vt,
3114
- string: yt,
3115
- paletteColor: bt,
3116
- number: xt,
3117
- select: St,
3118
- color: Ct,
3119
- axisFormat: wt,
3120
- stringArray: Tt,
3121
- buttonGroup: Et
3122
- };
3123
- function Ot({ option: e, displayConfig: t, colorPalette: n, onDisplayConfigChange: r }) {
3124
- let { t: i } = d(), a = (n) => r({
3125
- ...t,
3126
- [e.key]: n
3127
- }), o = Dt[e.type];
3128
- return o ? /* @__PURE__ */ w(o, {
3129
- option: e,
3130
- displayConfig: t,
3131
- colorPalette: n,
3132
- setValue: a,
3133
- t: i
3134
- }) : null;
3135
- }
3136
- //#endregion
3137
- //#region src/client/components/AnalysisBuilder/LegacyBooleanOptions.tsx
3138
- var kt = [
3139
- {
3140
- key: "showLegend",
3141
- labelKey: "display.showLegend",
3142
- defaultChecked: !0
3143
- },
3144
- {
3145
- key: "showGrid",
3146
- labelKey: "display.showGrid",
3147
- defaultChecked: !0
3148
- },
3149
- {
3150
- key: "showTooltip",
3151
- labelKey: "display.showTooltip",
3152
- defaultChecked: !0
3153
- },
3154
- {
3155
- key: "stacked",
3156
- labelKey: "display.stacked",
3157
- defaultChecked: !1
3158
- },
3159
- {
3160
- key: "showAllXLabels",
3161
- labelKey: "chart.option.showAllXLabels.label",
3162
- defaultChecked: !0
3163
- },
3164
- {
3165
- key: "hideHeader",
3166
- labelKey: "display.hideHeader",
3167
- defaultChecked: !1
3168
- }
3169
- ], At = _(function({ displayOptions: e, displayConfig: t, onDisplayConfigChange: n }) {
3170
- let { t: r } = d();
3171
- return !e || e.length === 0 ? null : /* @__PURE__ */ w(C, { children: kt.filter((t) => e.includes(t.key)).map((e) => /* @__PURE__ */ T("label", {
3172
- className: "dc:flex dc:items-center dc:space-x-2",
3173
- children: [/* @__PURE__ */ w("input", {
3174
- type: "checkbox",
3175
- checked: t[e.key] ?? e.defaultChecked,
3176
- onChange: (r) => n({
3177
- ...t,
3178
- [e.key]: r.target.checked
3179
- }),
3180
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
3181
- style: { color: "var(--dc-primary)" }
3182
- }), /* @__PURE__ */ w("span", {
3183
- className: "dc:text-sm text-dc-text",
3184
- children: r(e.labelKey)
3185
- })]
3186
- }, e.key)) });
3187
- });
3188
- //#endregion
3189
- //#region src/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.tsx
3190
- function jt({ chartType: e, displayConfig: t, colorPalette: r, onDisplayConfigChange: i, excludeKeys: a }) {
3191
- let { t: o } = d(), { config: s, loaded: c } = n(e);
3192
- return c ? s.displayOptions && s.displayOptions.length > 0 || s.displayOptionsConfig && s.displayOptionsConfig.length > 0 ? /* @__PURE__ */ w("div", {
3193
- className: "dc:space-y-6",
3194
- children: /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w(m, {
3195
- className: "dc:mb-2",
3196
- children: o("display.heading")
3197
- }), /* @__PURE__ */ T("div", {
3198
- className: "dc:space-y-2",
3199
- children: [/* @__PURE__ */ w(At, {
3200
- displayOptions: s.displayOptions,
3201
- displayConfig: t,
3202
- onDisplayConfigChange: i
3203
- }), s.displayOptionsConfig?.filter((e) => !a?.includes(e.key)).map((e) => /* @__PURE__ */ w("div", {
3204
- className: `dc:space-y-1 ${e.type === "axisFormat" ? "dc:mt-6 dc:pt-2" : ""}`,
3205
- children: /* @__PURE__ */ w(Ot, {
3206
- option: e,
3207
- displayConfig: t,
3208
- colorPalette: r,
3209
- onDisplayConfigChange: i
3210
- })
3211
- }, e.key))]
3212
- })] })
3213
- }) : /* @__PURE__ */ w("div", {
3214
- className: "dc:text-center text-dc-text-muted dc:text-sm dc:py-4",
3215
- children: /* @__PURE__ */ w("p", { children: o("display.noOptions") })
3216
- }) : /* @__PURE__ */ w("div", {
3217
- className: "dc:text-center text-dc-text-muted dc:text-sm dc:py-4",
3218
- children: o("display.loading")
3219
- });
3220
- }
3221
- //#endregion
3222
- //#region src/client/components/ConfirmModal.tsx
3223
- var Mt = ({ isOpen: e, onClose: t, onConfirm: n, title: r, message: i, confirmText: a, cancelText: o, confirmVariant: s = "primary", isLoading: c = !1 }) => {
3224
- let { t: l } = d(), u = r ?? l("common.actions.confirm"), f = a ?? l("common.actions.confirm"), p = o ?? l("common.actions.cancel");
3225
- return /* @__PURE__ */ w(it, {
3226
- isOpen: e,
3227
- onClose: t,
3228
- title: u,
3229
- size: "sm",
3230
- closeOnBackdropClick: !c,
3231
- closeOnEscape: !c,
3232
- footer: /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w("button", {
3233
- type: "button",
3234
- onClick: t,
3235
- disabled: c,
3236
- className: "dc:px-4 dc:py-2 dc:text-sm dc:font-medium text-dc-text-secondary bg-dc-surface dc:border border-dc-border dc:rounded-md hover:bg-dc-surface-hover dc:transition-colors dc:focus:outline-none dc:focus:ring-2 dc:focus:ring-offset-2 focus:ring-dc-primary dc:disabled:opacity-50 dc:disabled:cursor-not-allowed",
3237
- children: p
3238
- }), /* @__PURE__ */ w("button", {
3239
- type: "button",
3240
- onClick: async () => {
3241
- await n(), t();
3242
- },
3243
- disabled: c,
3244
- className: (() => {
3245
- let e = "dc:px-4 dc:py-2 dc:text-sm dc:font-medium dc:rounded-md dc:transition-colors dc:focus:outline-none dc:focus:ring-2 dc:focus:ring-offset-2 dc:disabled:opacity-50 dc:disabled:cursor-not-allowed";
3246
- switch (s) {
3247
- case "danger": return `${e} bg-dc-danger dc:text-white dc:hover:bg-dc-danger/90 focus:ring-dc-danger`;
3248
- case "warning": return `${e} bg-dc-warning dc:text-white dc:hover:bg-dc-warning/90 focus:ring-dc-warning`;
3249
- default: return `${e} bg-dc-primary dc:text-white dc:hover:bg-dc-primary/90 focus:ring-dc-primary`;
3250
- }
3251
- })(),
3252
- children: c ? /* @__PURE__ */ T("span", {
3253
- className: "dc:flex dc:items-center dc:gap-2",
3254
- children: [/* @__PURE__ */ T("svg", {
3255
- className: "dc:animate-spin dc:h-4 dc:w-4",
3256
- xmlns: "http://www.w3.org/2000/svg",
3257
- fill: "none",
3258
- viewBox: "0 0 24 24",
3259
- children: [/* @__PURE__ */ w("circle", {
3260
- className: "dc:opacity-25",
3261
- cx: "12",
3262
- cy: "12",
3263
- r: "10",
3264
- stroke: "currentColor",
3265
- strokeWidth: "4"
3266
- }), /* @__PURE__ */ w("path", {
3267
- className: "dc:opacity-75",
3268
- fill: "currentColor",
3269
- d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
3270
- })]
3271
- }), l("common.modal.processing")]
3272
- }) : f
3273
- })] }),
3274
- children: /* @__PURE__ */ w("div", {
3275
- className: "text-dc-text-secondary",
3276
- children: i
3277
- })
3278
- });
3279
- };
3280
- //#endregion
3281
- export { le as A, P as B, ge as C, K as D, fe as E, U as F, D as G, I as H, ie as I, k as J, A as K, H as L, q as M, W as N, G as O, ce as P, L as R, X as S, me as T, R as U, N as V, O as W, M as X, j as Y, ee as Z, ke as _, ct as a, ve as b, Je as c, tt as d, et as f, xe as g, be as h, ft as i, ue as j, pe as k, $e as l, Ge as m, jt as n, it as o, Ke as p, E as q, gt as r, qe as s, Mt as t, rt as u, Z as v, he as w, Y as x, ye as y, F as z };
3282
-
3283
- //# sourceMappingURL=ConfirmModal-D6eLc9NO.js.map