drizzle-cube 0.5.6 → 0.5.8

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 (405) hide show
  1. package/dist/{server/dist-DxegvyZF.cjs → adapters/dist-BOdf-GQO.cjs} +1 -1
  2. package/dist/adapters/express/index.cjs +1 -1
  3. package/dist/adapters/express/index.js +4 -4
  4. package/dist/adapters/fastify/index.cjs +2 -2
  5. package/dist/adapters/fastify/index.js +4 -4
  6. package/dist/{server/google-BXwMolCu.js → adapters/google-CFYljAOF.js} +1 -1
  7. package/dist/adapters/{google-Dgo9-Kb5.cjs → google-DUlXeeDA.cjs} +1 -1
  8. package/dist/adapters/{handler-Odsi9_Rd.js → handler-Cx8QYLk6.js} +20 -6
  9. package/dist/adapters/{handler-C0nUppAK.cjs → handler-CzbCuS6_.cjs} +4 -4
  10. package/dist/adapters/hono/index.cjs +1 -1
  11. package/dist/adapters/hono/index.js +7 -7
  12. package/dist/adapters/{locale-Dy3LcTwN.js → locale-BPB7flIG.js} +16 -1
  13. package/dist/adapters/{locale-Dv6bl_eU.cjs → locale-tIMrNcCr.cjs} +6 -6
  14. package/dist/adapters/mcp-tools.cjs +1 -1
  15. package/dist/adapters/mcp-tools.js +2 -2
  16. package/dist/adapters/mcp-transport-C2QzXm6h.cjs +40 -0
  17. package/dist/adapters/mcp-transport-D0B3S1tB.js +579 -0
  18. package/dist/adapters/nextjs/index.cjs +1 -1
  19. package/dist/adapters/nextjs/index.js +4 -4
  20. package/dist/{server/openai-zpXlGbbF.js → adapters/openai-B5jEiqiB.js} +2139 -948
  21. package/dist/{server/openai-CLWSwD-D.js → adapters/openai-BZdAA7Ji.js} +1 -1
  22. package/dist/adapters/openai-D0musiYP.cjs +17 -0
  23. package/dist/adapters/{openai-BjLV_Wjx.cjs → openai-D_U4V0kT.cjs} +1 -1
  24. package/dist/adapters/{utils-Bd5mzZfk.js → utils-D9JPLmfl.js} +24 -10
  25. package/dist/adapters/{utils-DklqMBHn.cjs → utils-KV37IBIv.cjs} +4 -4
  26. package/dist/adapters/utils.cjs +1 -1
  27. package/dist/adapters/utils.js +1 -1
  28. package/dist/client/charts/ChartLoader.d.ts +1 -1
  29. package/dist/client/charts.js +13 -13
  30. package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js +9682 -0
  31. package/dist/client/chunks/DashboardEditModal-CjCIAT-J.js.map +1 -0
  32. package/dist/client/chunks/{RetentionCombinedChart-CivIny9P.js → RetentionCombinedChart-BPkfcTa8.js} +4 -4
  33. package/dist/client/chunks/{RetentionCombinedChart-CivIny9P.js.map → RetentionCombinedChart-BPkfcTa8.js.map} +1 -1
  34. package/dist/client/chunks/{RetentionHeatmap-BHCgwZmB.js → RetentionHeatmap-DGzLzr7h.js} +3 -3
  35. package/dist/client/chunks/{RetentionHeatmap-BHCgwZmB.js.map → RetentionHeatmap-DGzLzr7h.js.map} +1 -1
  36. package/dist/client/chunks/{af-ZA-BdL6DOWy.js → af-ZA-BTaChuqI.js} +1 -1
  37. package/dist/client/chunks/{af-ZA-BdL6DOWy.js.map → af-ZA-BTaChuqI.js.map} +1 -1
  38. package/dist/client/chunks/{analysis-builder-MoGvbMRe.js → analysis-builder-MuMIzoRq.js} +244 -244
  39. package/dist/client/chunks/{analysis-builder-MoGvbMRe.js.map → analysis-builder-MuMIzoRq.js.map} +1 -1
  40. package/dist/client/chunks/{analysis-builder-shared-DmyRh2O3.js → analysis-builder-shared-CYVwSPqt.js} +289 -289
  41. package/dist/client/chunks/{analysis-builder-shared-DmyRh2O3.js.map → analysis-builder-shared-CYVwSPqt.js.map} +1 -1
  42. package/dist/client/chunks/{chart-activity-grid-Bdb8U_NC.js → chart-activity-grid-DmruKPab.js} +13 -8
  43. package/dist/client/chunks/{chart-activity-grid-Bdb8U_NC.js.map → chart-activity-grid-DmruKPab.js.map} +1 -1
  44. package/dist/client/chunks/{chart-area-BZEnT-tf.js → chart-area-DHCPM4Em.js} +3 -3
  45. package/dist/client/chunks/{chart-area-BZEnT-tf.js.map → chart-area-DHCPM4Em.js.map} +1 -1
  46. package/dist/client/chunks/{chart-bar-CTmdv_v0.js → chart-bar-KddciGDv.js} +4 -4
  47. package/dist/client/chunks/{chart-bar-CTmdv_v0.js.map → chart-bar-KddciGDv.js.map} +1 -1
  48. package/dist/client/chunks/{chart-box-plot-CYObdFtp.js → chart-box-plot-DYKfyOI8.js} +3 -3
  49. package/dist/client/chunks/{chart-box-plot-CYObdFtp.js.map → chart-box-plot-DYKfyOI8.js.map} +1 -1
  50. package/dist/client/chunks/{chart-bubble-CjFprySz.js → chart-bubble-CfqiB538.js} +3 -3
  51. package/dist/client/chunks/{chart-bubble-CjFprySz.js.map → chart-bubble-CfqiB538.js.map} +1 -1
  52. package/dist/client/chunks/{chart-candlestick-D2HoM3B5.js → chart-candlestick-Dwc92Mrj.js} +3 -3
  53. package/dist/client/chunks/{chart-candlestick-D2HoM3B5.js.map → chart-candlestick-Dwc92Mrj.js.map} +1 -1
  54. package/dist/client/chunks/{chart-config-activity-grid-Bom99j9m.js → chart-config-activity-grid-D_UX4NHC.js} +2 -2
  55. package/dist/client/chunks/{chart-config-activity-grid-Bom99j9m.js.map → chart-config-activity-grid-D_UX4NHC.js.map} +1 -1
  56. package/dist/client/chunks/{chart-config-area-DtYTKZxS.js → chart-config-area-Bq_UsW3x.js} +2 -2
  57. package/dist/client/chunks/{chart-config-area-DtYTKZxS.js.map → chart-config-area-Bq_UsW3x.js.map} +1 -1
  58. package/dist/client/chunks/{chart-config-bar-7v5JVY2y.js → chart-config-bar-_JEGZnAu.js} +2 -2
  59. package/dist/client/chunks/{chart-config-bar-7v5JVY2y.js.map → chart-config-bar-_JEGZnAu.js.map} +1 -1
  60. package/dist/client/chunks/{chart-config-box-plot-BHGv-wqu.js → chart-config-box-plot-DJ-dWWXA.js} +2 -2
  61. package/dist/client/chunks/{chart-config-box-plot-BHGv-wqu.js.map → chart-config-box-plot-DJ-dWWXA.js.map} +1 -1
  62. package/dist/client/chunks/{chart-config-bubble-BkHm-mfu.js → chart-config-bubble-gIoqVyjZ.js} +2 -2
  63. package/dist/client/chunks/{chart-config-bubble-BkHm-mfu.js.map → chart-config-bubble-gIoqVyjZ.js.map} +1 -1
  64. package/dist/client/chunks/{chart-config-candlestick-D1aaHvTe.js → chart-config-candlestick-N6DchAA3.js} +2 -2
  65. package/dist/client/chunks/{chart-config-candlestick-D1aaHvTe.js.map → chart-config-candlestick-N6DchAA3.js.map} +1 -1
  66. package/dist/client/chunks/{chart-config-data-table-B_Hw8w2J.js → chart-config-data-table-d7VBY-y_.js} +2 -2
  67. package/dist/client/chunks/{chart-config-data-table-B_Hw8w2J.js.map → chart-config-data-table-d7VBY-y_.js.map} +1 -1
  68. package/dist/client/chunks/{chart-config-funnel-DL8PSGuL.js → chart-config-funnel-DEYMcxsD.js} +2 -2
  69. package/dist/client/chunks/{chart-config-funnel-DL8PSGuL.js.map → chart-config-funnel-DEYMcxsD.js.map} +1 -1
  70. package/dist/client/chunks/{chart-config-gauge-BVLxuA3f.js → chart-config-gauge-DSwC04l0.js} +2 -2
  71. package/dist/client/chunks/{chart-config-gauge-BVLxuA3f.js.map → chart-config-gauge-DSwC04l0.js.map} +1 -1
  72. package/dist/client/chunks/{chart-config-heat-map-CjudGdui.js → chart-config-heat-map-CfRnRNcw.js} +2 -2
  73. package/dist/client/chunks/{chart-config-heat-map-CjudGdui.js.map → chart-config-heat-map-CfRnRNcw.js.map} +1 -1
  74. package/dist/client/chunks/{chart-config-kpi-delta-Bf47hGqD.js → chart-config-kpi-delta-D6BIkHL3.js} +2 -2
  75. package/dist/client/chunks/{chart-config-kpi-delta-Bf47hGqD.js.map → chart-config-kpi-delta-D6BIkHL3.js.map} +1 -1
  76. package/dist/client/chunks/{chart-config-kpi-number-QTQRNgOi.js → chart-config-kpi-number-Bx-V9a62.js} +2 -2
  77. package/dist/client/chunks/{chart-config-kpi-number-QTQRNgOi.js.map → chart-config-kpi-number-Bx-V9a62.js.map} +1 -1
  78. package/dist/client/chunks/{chart-config-kpi-text-BRze2eyh.js → chart-config-kpi-text-CcqC1u-8.js} +2 -2
  79. package/dist/client/chunks/{chart-config-kpi-text-BRze2eyh.js.map → chart-config-kpi-text-CcqC1u-8.js.map} +1 -1
  80. package/dist/client/chunks/{chart-config-line-BFeCqmKH.js → chart-config-line-Db3jDsWc.js} +2 -2
  81. package/dist/client/chunks/{chart-config-line-BFeCqmKH.js.map → chart-config-line-Db3jDsWc.js.map} +1 -1
  82. package/dist/client/chunks/{chart-config-markdown-EWYckwXv.js → chart-config-markdown-BtRIe8JN.js} +2 -2
  83. package/dist/client/chunks/{chart-config-markdown-EWYckwXv.js.map → chart-config-markdown-BtRIe8JN.js.map} +1 -1
  84. package/dist/client/chunks/{chart-config-measure-profile-B9nIhqKR.js → chart-config-measure-profile-DxRGa-zf.js} +2 -2
  85. package/dist/client/chunks/{chart-config-measure-profile-B9nIhqKR.js.map → chart-config-measure-profile-DxRGa-zf.js.map} +1 -1
  86. package/dist/client/chunks/{chart-config-pie-6LHtEyMM.js → chart-config-pie-DD4SmRTF.js} +2 -2
  87. package/dist/client/chunks/{chart-config-pie-6LHtEyMM.js.map → chart-config-pie-DD4SmRTF.js.map} +1 -1
  88. package/dist/client/chunks/{chart-config-radar-BuLS6Inn.js → chart-config-radar-CC2XAaGr.js} +2 -2
  89. package/dist/client/chunks/{chart-config-radar-BuLS6Inn.js.map → chart-config-radar-CC2XAaGr.js.map} +1 -1
  90. package/dist/client/chunks/{chart-config-radial-bar-BP0eMohx.js → chart-config-radial-bar-DmxKx1R0.js} +2 -2
  91. package/dist/client/chunks/{chart-config-radial-bar-BP0eMohx.js.map → chart-config-radial-bar-DmxKx1R0.js.map} +1 -1
  92. package/dist/client/chunks/{chart-config-sankey-CT8oGIGP.js → chart-config-sankey-BTnWA7EW.js} +2 -2
  93. package/dist/client/chunks/{chart-config-sankey-CT8oGIGP.js.map → chart-config-sankey-BTnWA7EW.js.map} +1 -1
  94. package/dist/client/chunks/{chart-config-scatter-DOSpN07Z.js → chart-config-scatter-DSYTjwRb.js} +2 -2
  95. package/dist/client/chunks/{chart-config-scatter-DOSpN07Z.js.map → chart-config-scatter-DSYTjwRb.js.map} +1 -1
  96. package/dist/client/chunks/{chart-config-sunburst-BSUX_YoB.js → chart-config-sunburst-Bwjtdf7X.js} +2 -2
  97. package/dist/client/chunks/{chart-config-sunburst-BSUX_YoB.js.map → chart-config-sunburst-Bwjtdf7X.js.map} +1 -1
  98. package/dist/client/chunks/{chart-config-tree-map-D8GuAgVB.js → chart-config-tree-map-BI-oQStO.js} +2 -2
  99. package/dist/client/chunks/{chart-config-tree-map-D8GuAgVB.js.map → chart-config-tree-map-BI-oQStO.js.map} +1 -1
  100. package/dist/client/chunks/{chart-config-waterfall-BDi7BoJP.js → chart-config-waterfall-DSnyixbI.js} +2 -2
  101. package/dist/client/chunks/{chart-config-waterfall-BDi7BoJP.js.map → chart-config-waterfall-DSnyixbI.js.map} +1 -1
  102. package/dist/client/chunks/{chart-data-table-DT4uBZaq.js → chart-data-table-BO4sXsim.js} +842 -834
  103. package/dist/client/chunks/chart-data-table-BO4sXsim.js.map +1 -0
  104. package/dist/client/chunks/{chart-funnel-B9crR3b3.js → chart-funnel-DnWRsmnS.js} +3 -3
  105. package/dist/client/chunks/{chart-funnel-B9crR3b3.js.map → chart-funnel-DnWRsmnS.js.map} +1 -1
  106. package/dist/client/chunks/{chart-gauge-DAMFsicz.js → chart-gauge-CgMeqeGb.js} +3 -3
  107. package/dist/client/chunks/{chart-gauge-DAMFsicz.js.map → chart-gauge-CgMeqeGb.js.map} +1 -1
  108. package/dist/client/chunks/{chart-heat-map-BxgM_X1G.js → chart-heat-map-DcGm9SWK.js} +3 -3
  109. package/dist/client/chunks/{chart-heat-map-BxgM_X1G.js.map → chart-heat-map-DcGm9SWK.js.map} +1 -1
  110. package/dist/client/chunks/{chart-kpi-delta-DJKL02Ut.js → chart-kpi-delta-C2wKPqCb.js} +6 -6
  111. package/dist/client/chunks/{chart-kpi-delta-DJKL02Ut.js.map → chart-kpi-delta-C2wKPqCb.js.map} +1 -1
  112. package/dist/client/chunks/{chart-kpi-number-CuNEYbRx.js → chart-kpi-number-gWYF44ol.js} +8 -8
  113. package/dist/client/chunks/{chart-kpi-number-CuNEYbRx.js.map → chart-kpi-number-gWYF44ol.js.map} +1 -1
  114. package/dist/client/chunks/{chart-kpi-text-u8FJaZDQ.js → chart-kpi-text-DIYtJtk4.js} +4 -4
  115. package/dist/client/chunks/{chart-kpi-text-u8FJaZDQ.js.map → chart-kpi-text-DIYtJtk4.js.map} +1 -1
  116. package/dist/client/chunks/{chart-line-BZhzOjRl.js → chart-line-9BEGN5Ti.js} +4 -4
  117. package/dist/client/chunks/{chart-line-BZhzOjRl.js.map → chart-line-9BEGN5Ti.js.map} +1 -1
  118. package/dist/client/chunks/chart-markdown-dgUetjyM.js +3654 -0
  119. package/dist/client/chunks/chart-markdown-dgUetjyM.js.map +1 -0
  120. package/dist/client/chunks/{chart-measure-profile-BnpIOS4Q.js → chart-measure-profile-ClfpLs4q.js} +4 -4
  121. package/dist/client/chunks/{chart-measure-profile-BnpIOS4Q.js.map → chart-measure-profile-ClfpLs4q.js.map} +1 -1
  122. package/dist/client/chunks/{chart-pie-CsdzxmSK.js → chart-pie-BjAIhyOi.js} +4 -4
  123. package/dist/client/chunks/{chart-pie-CsdzxmSK.js.map → chart-pie-BjAIhyOi.js.map} +1 -1
  124. package/dist/client/chunks/{chart-radar-C_9RwMKw.js → chart-radar-Dgkcl2bN.js} +4 -4
  125. package/dist/client/chunks/{chart-radar-C_9RwMKw.js.map → chart-radar-Dgkcl2bN.js.map} +1 -1
  126. package/dist/client/chunks/{chart-radial-bar-CewRelyQ.js → chart-radial-bar-DdWJjAhK.js} +4 -4
  127. package/dist/client/chunks/{chart-radial-bar-CewRelyQ.js.map → chart-radial-bar-DdWJjAhK.js.map} +1 -1
  128. package/dist/client/chunks/{chart-sankey-ItraHWH1.js → chart-sankey-M3XpO_ah.js} +3 -3
  129. package/dist/client/chunks/{chart-sankey-ItraHWH1.js.map → chart-sankey-M3XpO_ah.js.map} +1 -1
  130. package/dist/client/chunks/{chart-scatter-k2IJbO2Y.js → chart-scatter-DaHYP_OL.js} +4 -4
  131. package/dist/client/chunks/{chart-scatter-k2IJbO2Y.js.map → chart-scatter-DaHYP_OL.js.map} +1 -1
  132. package/dist/client/chunks/{chart-sunburst-NsFRuqi9.js → chart-sunburst-A_u6lqlS.js} +4 -4
  133. package/dist/client/chunks/{chart-sunburst-NsFRuqi9.js.map → chart-sunburst-A_u6lqlS.js.map} +1 -1
  134. package/dist/client/chunks/{chart-tree-map-Cj_ewpwJ.js → chart-tree-map-uiwUU4nb.js} +4 -4
  135. package/dist/client/chunks/{chart-tree-map-Cj_ewpwJ.js.map → chart-tree-map-uiwUU4nb.js.map} +1 -1
  136. package/dist/client/chunks/{chart-waterfall-C-MTFcOz.js → chart-waterfall-BuhMoagf.js} +4 -4
  137. package/dist/client/chunks/{chart-waterfall-C-MTFcOz.js.map → chart-waterfall-BuhMoagf.js.map} +1 -1
  138. package/dist/client/chunks/{charts-core-vZA3zPKb.js → charts-core-jRtb0S2M.js} +2 -2
  139. package/dist/client/chunks/{charts-core-vZA3zPKb.js.map → charts-core-jRtb0S2M.js.map} +1 -1
  140. package/dist/client/chunks/{core-Su6tIYhp.js → core-D7vPfUIe.js} +84 -84
  141. package/dist/client/chunks/{core-Su6tIYhp.js.map → core-D7vPfUIe.js.map} +1 -1
  142. package/dist/client/chunks/{dist-BTq3NoG3.js → dist-zPWyTBdU.js} +1 -1
  143. package/dist/client/chunks/{dist-BTq3NoG3.js.map → dist-zPWyTBdU.js.map} +1 -1
  144. package/dist/client/chunks/{en-US-D-1JPTPv.js → en-US-BE6VoG0o.js} +1 -1
  145. package/dist/client/chunks/{en-US-D-1JPTPv.js.map → en-US-BE6VoG0o.js.map} +1 -1
  146. package/dist/client/chunks/{exceljs.min-Dc1cBQ5l.js → exceljs.min-CIqBqwTW.js} +2 -2
  147. package/dist/client/chunks/{exceljs.min-Dc1cBQ5l.js.map → exceljs.min-CIqBqwTW.js.map} +1 -1
  148. package/dist/client/chunks/{javascript-YXkoOgWa.js → javascript-DFnKaHmQ.js} +3 -3
  149. package/dist/client/chunks/{javascript-YXkoOgWa.js.map → javascript-DFnKaHmQ.js.map} +1 -1
  150. package/dist/client/chunks/{json-O7MKB_4V.js → json-Cu6rbgWf.js} +1 -1
  151. package/dist/client/chunks/{json-O7MKB_4V.js.map → json-Cu6rbgWf.js.map} +1 -1
  152. package/dist/client/chunks/{nl-NL-BErZMygi.js → nl-NL-CpVs7ox3.js} +7 -2
  153. package/dist/client/chunks/{nl-NL-BErZMygi.js.map → nl-NL-CpVs7ox3.js.map} +1 -1
  154. package/dist/client/chunks/{providers-DX3Vw5kc.js → providers-DwQCKdGW.js} +1 -1
  155. package/dist/client/chunks/{providers-DX3Vw5kc.js.map → providers-DwQCKdGW.js.map} +1 -1
  156. package/dist/client/chunks/{retention-YhT1Oohi.js → retention-ChW9jYdy.js} +1 -1
  157. package/dist/client/chunks/{retention-YhT1Oohi.js.map → retention-ChW9jYdy.js.map} +1 -1
  158. package/dist/client/chunks/{schema-visualization-BY9L2nBQ.js → schema-visualization-DE09kQE3.js} +5 -5
  159. package/dist/client/chunks/{schema-visualization-BY9L2nBQ.js.map → schema-visualization-DE09kQE3.js.map} +1 -1
  160. package/dist/client/chunks/{sql-r2a-9CCK.js → sql-CmVzGP4w.js} +1 -1
  161. package/dist/client/chunks/{sql-r2a-9CCK.js.map → sql-CmVzGP4w.js.map} +1 -1
  162. package/dist/client/chunks/{useDebounce-DGfYXtkm.js → useDirtyStateTracking-CoeQbprt.js} +99 -37
  163. package/dist/client/chunks/useDirtyStateTracking-CoeQbprt.js.map +1 -0
  164. package/dist/client/chunks/{useExplainAI-CD0KuKwY.js → useExplainAI-DlnXWdmz.js} +19 -19
  165. package/dist/client/chunks/{useExplainAI-CD0KuKwY.js.map → useExplainAI-DlnXWdmz.js.map} +1 -1
  166. package/dist/client/chunks/{useNotebookLayout-DKkMenhj.js → useNotebookLayout-Ck3Z3uzg.js} +2 -2
  167. package/dist/client/chunks/{useNotebookLayout-DKkMenhj.js.map → useNotebookLayout-Ck3Z3uzg.js.map} +1 -1
  168. package/dist/client/chunks/{utils-D2SCtAkZ.js → utils-CTKNaXS8.js} +40 -13
  169. package/dist/client/chunks/utils-CTKNaXS8.js.map +1 -0
  170. package/dist/client/chunks/{vendor-CfR5hJGc.js → vendor-CPIYyeuD.js} +102 -97
  171. package/dist/client/chunks/vendor-CPIYyeuD.js.map +1 -0
  172. package/dist/client/components/AnalysisBuilder/AnalysisAIPanel.d.ts +1 -1
  173. package/dist/client/components/AnalysisBuilder/AnalysisAxisDropZone.d.ts +1 -1
  174. package/dist/client/components/AnalysisBuilder/AnalysisChartConfigPanel.d.ts +1 -1
  175. package/dist/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.d.ts +1 -1
  176. package/dist/client/components/AnalysisBuilder/AnalysisFilterGroup.d.ts +1 -1
  177. package/dist/client/components/AnalysisBuilder/AnalysisFilterItem.d.ts +1 -1
  178. package/dist/client/components/AnalysisBuilder/AnalysisFilterSection.d.ts +1 -1
  179. package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +1 -1
  180. package/dist/client/components/AnalysisBuilder/ExplainAIPanel.d.ts +2 -1
  181. package/dist/client/components/AnalysisBuilder/FieldDetailPanel.d.ts +1 -1
  182. package/dist/client/components/AnalysisBuilder/FieldSearchItem.d.ts +1 -1
  183. package/dist/client/components/AnalysisBuilder/FieldSearchModal.d.ts +1 -1
  184. package/dist/client/components/AnalysisBuilder/FilterConfigModal.d.ts +2 -1
  185. package/dist/client/components/AnalysisBuilder/LimitSection.d.ts +1 -1
  186. package/dist/client/components/AnalysisBuilder/SectionHeading.d.ts +1 -1
  187. package/dist/client/components/AnalyticsDashboard.d.ts +1 -1
  188. package/dist/client/components/AnalyticsPage.d.ts +1 -1
  189. package/dist/client/components/ChartErrorBoundary.d.ts +1 -1
  190. package/dist/client/components/ChartTypeSelector.d.ts +1 -1
  191. package/dist/client/components/ColorPaletteSelector.d.ts +1 -1
  192. package/dist/client/components/DashboardEditModal.d.ts +2 -1
  193. package/dist/client/components/DashboardFilters/DashboardFilterConfigModal.d.ts +1 -1
  194. package/dist/client/components/DashboardFilters/DashboardFilterItem.d.ts +1 -1
  195. package/dist/client/components/DashboardGrid.d.ts +3 -1
  196. package/dist/client/components/DashboardThumbnailPlaceholder.d.ts +1 -1
  197. package/dist/client/components/DataBrowser/DataBrowserSidebar.d.ts +1 -1
  198. package/dist/client/components/DataBrowser/DataBrowserToolbar.d.ts +1 -1
  199. package/dist/client/components/DataBrowser/index.d.ts +1 -1
  200. package/dist/client/components/DataHistogram.d.ts +1 -1
  201. package/dist/client/components/DebugModal.d.ts +1 -1
  202. package/dist/client/components/DrillBreadcrumb.d.ts +2 -1
  203. package/dist/client/components/LoadingIndicator.d.ts +1 -1
  204. package/dist/client/components/MobileStackedLayout.d.ts +1 -1
  205. package/dist/client/components/PortletAnalysisModal.d.ts +1 -1
  206. package/dist/client/components/PortletContainer.d.ts +1 -1
  207. package/dist/client/components/PortletFilterConfigModal.d.ts +6 -4
  208. package/dist/client/components/RowManagedLayout.d.ts +1 -1
  209. package/dist/client/components/ScaledGridWrapper.d.ts +1 -1
  210. package/dist/client/components/SchemaVisualization/CubeNode.d.ts +1 -1
  211. package/dist/client/components/SchemaVisualization/FieldDetailPanel.d.ts +1 -1
  212. package/dist/client/components/SchemaVisualization/RelationshipEdge.d.ts +1 -1
  213. package/dist/client/components/SchemaVisualization/SchemaVisualizationLazy.d.ts +1 -1
  214. package/dist/client/components/SchemaVisualization/index.d.ts +1 -1
  215. package/dist/client/components/TextPortletModal.d.ts +1 -1
  216. package/dist/client/components/charts/AxisFormatControls.d.ts +2 -2
  217. package/dist/client/components/charts/ChartContainer.d.ts +1 -1
  218. package/dist/client/components/charts/ChartLegend.d.ts +1 -1
  219. package/dist/client/components/charts/ChartTooltip.d.ts +1 -1
  220. package/dist/client/components/charts/MissingDependencyFallback.d.ts +1 -1
  221. package/dist/client/components/dashboard/DashboardContext.d.ts +113 -0
  222. package/dist/client/components/dashboard/DashboardCoordinator.d.ts +2 -0
  223. package/dist/client/components/dashboard/DashboardFilterBar.d.ts +8 -0
  224. package/dist/client/components/dashboard/DashboardGridSurface.d.ts +8 -0
  225. package/dist/client/components/dashboard/DashboardModals.d.ts +8 -0
  226. package/dist/client/components/dashboard/DashboardProvider.d.ts +2 -0
  227. package/dist/client/components/dashboard/DashboardToolbar.d.ts +11 -0
  228. package/dist/client/components/dashboard/dashboardGridUtils.d.ts +17 -0
  229. package/dist/client/components/dashboard/index.d.ts +13 -0
  230. package/dist/client/components.d.ts +2 -0
  231. package/dist/client/components.js +3 -4
  232. package/dist/client/hooks/dashboard/useDashboardController.d.ts +2 -2
  233. package/dist/client/hooks/useDashboardHook.d.ts +2 -2
  234. package/dist/client/hooks.js +5 -6
  235. package/dist/client/icons.d.ts +1 -1
  236. package/dist/client/icons.js +2 -2
  237. package/dist/client/index.d.ts +2 -0
  238. package/dist/client/index.js +161 -163
  239. package/dist/client/index.js.map +1 -1
  240. package/dist/client/providers/CubeApiProvider.d.ts +1 -1
  241. package/dist/client/providers/CubeFeaturesProvider.d.ts +1 -1
  242. package/dist/client/providers/CubeMetaProvider.d.ts +1 -1
  243. package/dist/client/providers/CubeProvider.d.ts +1 -1
  244. package/dist/client/providers/I18nProvider.d.ts +1 -1
  245. package/dist/client/providers.js +3 -3
  246. package/dist/client/schema.js +1 -1
  247. package/dist/client/stores/analysisBuilderStore.d.ts +1 -1
  248. package/dist/client/stores/dashboardStore.d.ts +1 -1
  249. package/dist/client/stores/dataBrowserStore.d.ts +1 -1
  250. package/dist/client/stores/notebookStore.d.ts +1 -1
  251. package/dist/client/styles.css +1 -1
  252. package/dist/client/types/drill.d.ts +1 -1
  253. package/dist/client/types.d.ts +7 -2
  254. package/dist/client/utils/drillQueryBuilder.d.ts +2 -2
  255. package/dist/client/utils/filterUtils.d.ts +33 -5
  256. package/dist/client/utils/joinReachability.d.ts +27 -0
  257. package/dist/client/utils.js +6 -7
  258. package/dist/client-bundle-stats.html +1 -1
  259. package/dist/mcp-app/mcp-app.html +78 -52
  260. package/dist/{adapters/dist-Boc63-1q.cjs → server/dist-BOdf-GQO.cjs} +1 -1
  261. package/dist/{adapters/google-CT4kgmBf.js → server/google-CFYljAOF.js} +1 -1
  262. package/dist/server/{google-DzQWXFwF.cjs → google-DUlXeeDA.cjs} +1 -1
  263. package/dist/server/index.cjs +11 -11
  264. package/dist/server/index.d.ts +2 -5050
  265. package/dist/server/index.js +58 -15
  266. package/dist/{adapters/openai-CuUGrKaK.js → server/openai-B5jEiqiB.js} +2139 -948
  267. package/dist/{adapters/openai-DQawCWQb.js → server/openai-BZdAA7Ji.js} +1 -1
  268. package/dist/server/openai-D0musiYP.cjs +17 -0
  269. package/dist/server/{openai-BfiZU0rG.cjs → openai-D_U4V0kT.cjs} +1 -1
  270. package/dist/server/server/adapters/base-adapter.d.ts +287 -0
  271. package/dist/server/server/adapters/databend-adapter.d.ts +114 -0
  272. package/dist/server/server/adapters/duckdb-adapter.d.ts +122 -0
  273. package/dist/server/server/adapters/mysql-adapter.d.ts +122 -0
  274. package/dist/server/server/adapters/postgres-adapter.d.ts +119 -0
  275. package/dist/server/server/adapters/singlestore-adapter.d.ts +4 -0
  276. package/dist/server/server/adapters/snowflake-adapter.d.ts +116 -0
  277. package/dist/server/server/adapters/sqlite-adapter.d.ts +140 -0
  278. package/dist/server/server/agent/chart-validation.d.ts +27 -0
  279. package/dist/server/server/agent/handler.d.ts +25 -0
  280. package/dist/server/server/agent/index.d.ts +11 -0
  281. package/dist/server/server/agent/providers/anthropic.d.ts +24 -0
  282. package/dist/server/server/agent/providers/factory.d.ts +12 -0
  283. package/dist/server/server/agent/providers/google.d.ts +23 -0
  284. package/dist/server/server/agent/providers/index.d.ts +6 -0
  285. package/dist/server/server/agent/providers/openai.d.ts +26 -0
  286. package/dist/server/server/agent/providers/types.d.ts +95 -0
  287. package/dist/server/server/agent/system-prompt.d.ts +5 -0
  288. package/dist/server/server/agent/tools.d.ts +28 -0
  289. package/dist/server/server/agent/types.d.ts +192 -0
  290. package/dist/server/server/ai/discovery.d.ts +62 -0
  291. package/dist/server/server/ai/index.d.ts +10 -0
  292. package/dist/server/server/ai/mcp-prompts.d.ts +83 -0
  293. package/dist/server/server/ai/query-schema.d.ts +258 -0
  294. package/dist/server/server/ai/schemas.d.ts +63 -0
  295. package/dist/server/server/ai/suggestion.d.ts +19 -0
  296. package/dist/server/server/ai/validation.d.ts +34 -0
  297. package/dist/server/server/builders/comparison-query-builder.d.ts +70 -0
  298. package/dist/server/server/builders/cte-builder.d.ts +62 -0
  299. package/dist/server/server/builders/date-time-builder.d.ts +29 -0
  300. package/dist/server/server/builders/filter-builder.d.ts +23 -0
  301. package/dist/server/server/builders/flow-query-builder.d.ts +109 -0
  302. package/dist/server/server/builders/funnel-query-builder.d.ts +134 -0
  303. package/dist/server/server/builders/group-by-builder.d.ts +27 -0
  304. package/dist/server/server/builders/index.d.ts +13 -0
  305. package/dist/server/server/builders/measure-builder.d.ts +142 -0
  306. package/dist/server/server/builders/retention-query-builder.d.ts +100 -0
  307. package/dist/server/server/cache-providers/index.d.ts +5 -0
  308. package/dist/server/server/cache-providers/memory.d.ts +105 -0
  309. package/dist/server/server/cache-utils.d.ts +65 -0
  310. package/dist/server/server/compiler.d.ts +218 -0
  311. package/dist/server/server/cube-utils.d.ts +133 -0
  312. package/dist/server/server/database-utils.d.ts +18 -0
  313. package/dist/server/server/executor.d.ts +183 -0
  314. package/dist/server/server/executors/base-executor.d.ts +16 -0
  315. package/dist/server/server/executors/databend-executor.d.ts +33 -0
  316. package/dist/server/server/executors/duckdb-executor.d.ts +33 -0
  317. package/dist/server/server/executors/index.d.ts +21 -0
  318. package/dist/server/server/executors/mysql-executor.d.ts +27 -0
  319. package/dist/server/server/executors/postgres-executor.d.ts +27 -0
  320. package/dist/server/server/executors/singlestore-executor.d.ts +9 -0
  321. package/dist/server/server/executors/snowflake-executor.d.ts +33 -0
  322. package/dist/server/server/executors/sqlite-executor.d.ts +28 -0
  323. package/dist/server/server/explain/databend-parser.d.ts +16 -0
  324. package/dist/server/server/explain/duckdb-parser.d.ts +28 -0
  325. package/dist/server/server/explain/index.d.ts +9 -0
  326. package/dist/server/server/explain/mysql-parser.d.ts +38 -0
  327. package/dist/server/server/explain/postgres-parser.d.ts +18 -0
  328. package/dist/server/server/explain/snowflake-parser.d.ts +17 -0
  329. package/dist/server/server/explain/sqlite-parser.d.ts +23 -0
  330. package/dist/server/server/filter-cache.d.ts +73 -0
  331. package/dist/server/server/gap-filler.d.ts +42 -0
  332. package/dist/server/server/index.d.ts +36 -0
  333. package/dist/server/server/logical-plan/index.d.ts +14 -0
  334. package/dist/server/server/logical-plan/logical-plan-builder.d.ts +58 -0
  335. package/dist/server/server/logical-plan/logical-planner.d.ts +232 -0
  336. package/dist/server/server/logical-plan/optimiser.d.ts +32 -0
  337. package/dist/server/server/logical-plan/types.d.ts +191 -0
  338. package/dist/server/server/physical-plan/drizzle-plan-builder.d.ts +50 -0
  339. package/dist/server/server/physical-plan/drizzle-sql-builder.d.ts +107 -0
  340. package/dist/server/server/physical-plan/index.d.ts +2 -0
  341. package/dist/server/server/physical-plan/processors/cte-processor.d.ts +6 -0
  342. package/dist/server/server/physical-plan/processors/index.d.ts +6 -0
  343. package/dist/server/server/physical-plan/processors/joins-processor.d.ts +6 -0
  344. package/dist/server/server/physical-plan/processors/predicates-processor.d.ts +6 -0
  345. package/dist/server/server/physical-plan/processors/selection-processor.d.ts +6 -0
  346. package/dist/server/server/physical-plan/processors/shared.d.ts +33 -0
  347. package/dist/server/server/physical-plan/processors/window-processor.d.ts +6 -0
  348. package/dist/server/server/prompts/explain-analysis-prompt.d.ts +47 -0
  349. package/dist/server/server/prompts/index.d.ts +27 -0
  350. package/dist/server/server/prompts/single-step-prompt.d.ts +31 -0
  351. package/dist/server/server/prompts/step0-validation-prompt.d.ts +39 -0
  352. package/dist/server/server/prompts/step1-shape-prompt.d.ts +29 -0
  353. package/dist/server/server/prompts/step2-complete-prompt.d.ts +19 -0
  354. package/dist/server/server/prompts/types.d.ts +37 -0
  355. package/dist/server/server/resolvers/calculated-measure-resolver.d.ts +93 -0
  356. package/dist/server/server/resolvers/index.d.ts +6 -0
  357. package/dist/server/server/resolvers/join-path-resolver.d.ts +152 -0
  358. package/dist/server/server/template-substitution.d.ts +57 -0
  359. package/dist/server/server/types/analysis.d.ts +189 -0
  360. package/dist/server/server/types/cache.d.ts +132 -0
  361. package/dist/server/server/types/core.d.ts +164 -0
  362. package/dist/server/server/types/cube.d.ts +530 -0
  363. package/dist/server/server/types/executor.d.ts +156 -0
  364. package/dist/server/server/types/flow.d.ts +143 -0
  365. package/dist/server/server/types/funnel.d.ts +118 -0
  366. package/dist/server/server/types/index.d.ts +11 -0
  367. package/dist/server/server/types/metadata.d.ts +113 -0
  368. package/dist/server/server/types/query.d.ts +153 -0
  369. package/dist/server/server/types/retention.d.ts +141 -0
  370. package/dist/server/server/types/utils.d.ts +11 -0
  371. package/package.json +6 -6
  372. package/dist/adapters/mcp-transport-BCtjU0lC.cjs +0 -40
  373. package/dist/adapters/mcp-transport-DW_Uks-O.js +0 -579
  374. package/dist/adapters/openai-Bgri5TJc.cjs +0 -16
  375. package/dist/client/chunks/DashboardEditModal-BiJwVv0b.js +0 -6696
  376. package/dist/client/chunks/DashboardEditModal-BiJwVv0b.js.map +0 -1
  377. package/dist/client/chunks/FieldSearchModal-DdcbCwAi.js +0 -2660
  378. package/dist/client/chunks/FieldSearchModal-DdcbCwAi.js.map +0 -1
  379. package/dist/client/chunks/chart-data-table-DT4uBZaq.js.map +0 -1
  380. package/dist/client/chunks/chart-markdown-DEtjn8gx.js +0 -3539
  381. package/dist/client/chunks/chart-markdown-DEtjn8gx.js.map +0 -1
  382. package/dist/client/chunks/syntaxHighlighting-5zHcjn27.js +0 -30
  383. package/dist/client/chunks/syntaxHighlighting-5zHcjn27.js.map +0 -1
  384. package/dist/client/chunks/useDebounce-DGfYXtkm.js.map +0 -1
  385. package/dist/client/chunks/useDirtyStateTracking-KAjwj1Ht.js +0 -66
  386. package/dist/client/chunks/useDirtyStateTracking-KAjwj1Ht.js.map +0 -1
  387. package/dist/client/chunks/utils-D2SCtAkZ.js.map +0 -1
  388. package/dist/client/chunks/vendor-CfR5hJGc.js.map +0 -1
  389. package/dist/server/openai-BwsBio1K.cjs +0 -16
  390. /package/dist/adapters/{express → adapters/express}/index.d.ts +0 -0
  391. /package/dist/adapters/{fastify → adapters/fastify}/index.d.ts +0 -0
  392. /package/dist/adapters/{hono → adapters/hono}/index.d.ts +0 -0
  393. /package/dist/adapters/{locale.d.ts → adapters/locale.d.ts} +0 -0
  394. /package/dist/adapters/{mcp-tools.d.ts → adapters/mcp-tools.d.ts} +0 -0
  395. /package/dist/adapters/{mcp-transport.d.ts → adapters/mcp-transport.d.ts} +0 -0
  396. /package/dist/adapters/{nextjs → adapters/nextjs}/index.d.ts +0 -0
  397. /package/dist/adapters/{types.d.ts → adapters/types.d.ts} +0 -0
  398. /package/dist/adapters/{utils.d.ts → adapters/utils.d.ts} +0 -0
  399. /package/dist/adapters/{anthropic-B_rg0BhK.js → anthropic-CZh4hB-m.js} +0 -0
  400. /package/dist/adapters/{anthropic-BIva8k1r.cjs → anthropic-DG4r1LSm.cjs} +0 -0
  401. /package/dist/adapters/{dist-De5fzUEM.js → dist-CH3hwAUk.js} +0 -0
  402. /package/dist/client/chunks/{rolldown-runtime-CKnJJeip.js → rolldown-runtime-CWhphoD1.js} +0 -0
  403. /package/dist/server/{anthropic-BsNspi1r.js → anthropic-CZh4hB-m.js} +0 -0
  404. /package/dist/server/{anthropic-DsCEX6Fm.cjs → anthropic-DG4r1LSm.cjs} +0 -0
  405. /package/dist/server/{dist-CMWZC51B.js → dist-CH3hwAUk.js} +0 -0
@@ -1,2660 +0,0 @@
1
- import { A as e, P as t, b as n, k as r } from "./chart-data-table-DT4uBZaq.js";
2
- import { k as i } from "./chart-activity-grid-Bdb8U_NC.js";
3
- import { a, l as o, s } from "./retention-YhT1Oohi.js";
4
- import { a as c, t as l } from "./syntaxHighlighting-5zHcjn27.js";
5
- import { n as u, t as d } from "./charts-core-vZA3zPKb.js";
6
- import f, { memo as p, useCallback as m, useEffect as h, useMemo as g, useRef as _, useState as v } from "react";
7
- import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
8
- //#region src/client/types/analysisConfig.ts
9
- var S = (e) => e.analysisType === "query", C = (e) => e.analysisType === "funnel", w = (e) => e.analysisType === "flow", T = (e) => e.analysisType === "retention", E = (e) => "queries" in e.query && Array.isArray(e.query.queries), D = (e) => !E(e), O = (e) => {
10
- if (!e || typeof e != "object") return !1;
11
- let t = e;
12
- 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");
13
- }, k = () => ({
14
- version: 1,
15
- analysisType: "query",
16
- activeView: "chart",
17
- charts: { query: {
18
- chartType: "bar",
19
- chartConfig: {},
20
- displayConfig: {}
21
- } },
22
- query: {
23
- measures: [],
24
- dimensions: []
25
- }
26
- }), A = () => ({
27
- version: 1,
28
- analysisType: "funnel",
29
- activeView: "chart",
30
- charts: { funnel: {
31
- chartType: "funnel",
32
- chartConfig: {},
33
- displayConfig: {}
34
- } },
35
- query: { funnel: {
36
- bindingKey: "",
37
- timeDimension: "",
38
- steps: []
39
- } }
40
- }), j = () => ({
41
- version: 1,
42
- analysisType: "flow",
43
- activeView: "chart",
44
- charts: { flow: {
45
- chartType: "sankey",
46
- chartConfig: {},
47
- displayConfig: {}
48
- } },
49
- query: { flow: {
50
- bindingKey: "",
51
- timeDimension: "",
52
- eventDimension: "",
53
- startingStep: {
54
- name: "",
55
- filter: void 0
56
- },
57
- stepsBefore: 3,
58
- stepsAfter: 3,
59
- joinStrategy: "auto"
60
- } }
61
- }), M = () => ({
62
- version: 1,
63
- analysisType: "retention",
64
- activeView: "chart",
65
- charts: { retention: {
66
- chartType: "heatmap",
67
- chartConfig: {},
68
- displayConfig: {}
69
- } },
70
- query: { retention: {
71
- timeDimension: "",
72
- bindingKey: "",
73
- dateRange: {
74
- start: "",
75
- end: ""
76
- },
77
- granularity: "week",
78
- periods: 12,
79
- retentionType: "classic"
80
- } }
81
- }), N = (e = "query") => {
82
- switch (e) {
83
- case "funnel": return A();
84
- case "flow": return j();
85
- case "retention": return M();
86
- default: return k();
87
- }
88
- }, P = (e) => {
89
- if (!e || typeof e != "object") return !1;
90
- let t = e;
91
- return !(t.version !== 1 || t.activeType !== "query" && t.activeType !== "funnel" && t.activeType !== "flow" && t.activeType !== "retention" || !t.modes || typeof t.modes != "object");
92
- }, F = () => ({
93
- version: 1,
94
- activeType: "query",
95
- modes: {
96
- query: k(),
97
- funnel: A(),
98
- flow: j(),
99
- retention: M()
100
- }
101
- });
102
- //#endregion
103
- //#region src/client/utils/configMigration.ts
104
- function I(e) {
105
- return typeof e == "object" && !!e && "queries" in e && Array.isArray(e.queries);
106
- }
107
- function L(e) {
108
- return typeof e == "object" && !!e && "queries" in e && Array.isArray(e.queries) && "mergeStrategy" in e && e.mergeStrategy === "funnel";
109
- }
110
- function R(e) {
111
- return typeof e == "object" && !!e && "funnel" in e && typeof e.funnel == "object";
112
- }
113
- function z(e) {
114
- return typeof e == "object" && !!e && "flow" in e && typeof e.flow == "object";
115
- }
116
- function B(e, t) {
117
- return t === "funnel" ? {
118
- chartType: e.funnelChartType || e.chartType || "funnel",
119
- chartConfig: e.funnelChartConfig || e.chartConfig || {},
120
- displayConfig: e.funnelDisplayConfig || e.displayConfig || {}
121
- } : t === "flow" ? {
122
- chartType: e.chartType || "sankey",
123
- chartConfig: e.chartConfig || {},
124
- displayConfig: e.displayConfig || {}
125
- } : t === "retention" ? {
126
- chartType: e.chartType || "retentionCombined",
127
- chartConfig: e.chartConfig || {},
128
- displayConfig: e.displayConfig || {}
129
- } : {
130
- chartType: e.chartType || "bar",
131
- chartConfig: e.chartConfig || {},
132
- displayConfig: e.displayConfig || {}
133
- };
134
- }
135
- function V(e) {
136
- try {
137
- let t = JSON.parse(e.query);
138
- if (o(t)) return {
139
- version: 1,
140
- analysisType: "retention",
141
- activeView: "chart",
142
- charts: { retention: B(e, "retention") },
143
- query: t
144
- };
145
- if (z(t)) return {
146
- version: 1,
147
- analysisType: "flow",
148
- activeView: "chart",
149
- charts: { flow: B(e, "flow") },
150
- query: t
151
- };
152
- if (R(t)) return {
153
- version: 1,
154
- analysisType: "funnel",
155
- activeView: "chart",
156
- charts: { funnel: B(e, "funnel") },
157
- query: t
158
- };
159
- if (L(t)) return ee(t, e);
160
- if (e.analysisType === "funnel") return {
161
- version: 1,
162
- analysisType: "funnel",
163
- activeView: "chart",
164
- charts: { funnel: B(e, "funnel") },
165
- query: R(t) ? t : { funnel: {
166
- bindingKey: "",
167
- timeDimension: "",
168
- steps: []
169
- } }
170
- };
171
- let n = B(e, "query");
172
- return I(t) ? {
173
- version: 1,
174
- analysisType: "query",
175
- activeView: "chart",
176
- charts: { query: n },
177
- query: {
178
- queries: t.queries,
179
- mergeStrategy: t.mergeStrategy === "funnel" ? "concat" : t.mergeStrategy,
180
- mergeKeys: t.mergeKeys,
181
- queryLabels: t.queryLabels
182
- }
183
- } : {
184
- version: 1,
185
- analysisType: "query",
186
- activeView: "chart",
187
- charts: { query: n },
188
- query: t
189
- };
190
- } catch (e) {
191
- return console.warn("[configMigration] Failed to parse legacy portlet:", e), k();
192
- }
193
- }
194
- function ee(e, t) {
195
- let n = "";
196
- e.funnelBindingKey?.dimension && (typeof e.funnelBindingKey.dimension == "string" ? n = e.funnelBindingKey.dimension : Array.isArray(e.funnelBindingKey.dimension) && (n = e.funnelBindingKey.dimension.map((e) => ({
197
- cube: e.cube,
198
- dimension: e.dimension
199
- }))));
200
- let r = "";
201
- e.queries.length > 0 && e.queries[0].timeDimensions?.length && (r = e.queries[0].timeDimensions[0].dimension);
202
- let i = e.queries.map((t, n) => {
203
- let r = { name: e.queryLabels?.[n] || `Step ${n + 1}` };
204
- 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;
205
- });
206
- return {
207
- version: 1,
208
- analysisType: "funnel",
209
- activeView: "chart",
210
- charts: { funnel: t ? B(t, "funnel") : {
211
- chartType: "funnel",
212
- chartConfig: {},
213
- displayConfig: {}
214
- } },
215
- query: { funnel: {
216
- bindingKey: n,
217
- timeDimension: r,
218
- steps: i,
219
- includeTimeMetrics: !0
220
- } }
221
- };
222
- }
223
- function te(e) {
224
- if (O(e)) return e;
225
- if (e && typeof e == "object" && "query" in e && typeof e.query == "string") return V(e);
226
- if (e && typeof e == "object") try {
227
- return V({ query: JSON.stringify(e) });
228
- } catch {}
229
- return console.warn("[configMigration] Unknown config format, using defaults"), k();
230
- }
231
- function ne(e) {
232
- return typeof e == "object" && !!e && "analysisConfig" in e && O(e.analysisConfig);
233
- }
234
- function re(e) {
235
- if (ne(e)) return e;
236
- let t = V({
237
- query: e.query ?? "{}",
238
- chartType: e.chartType,
239
- chartConfig: e.chartConfig,
240
- displayConfig: e.displayConfig,
241
- analysisType: e.analysisType === "flow" || e.analysisType === "retention" ? void 0 : e.analysisType,
242
- funnelChartType: e.funnelChartType,
243
- funnelChartConfig: e.funnelChartConfig,
244
- funnelDisplayConfig: e.funnelDisplayConfig
245
- });
246
- return {
247
- ...e,
248
- analysisConfig: t
249
- };
250
- }
251
- //#endregion
252
- //#region src/client/utils/filterUtils.ts
253
- function H(e) {
254
- if ("member" in e && "operator" in e) {
255
- let t = e;
256
- return [
257
- "set",
258
- "notSet",
259
- "isEmpty",
260
- "isNotEmpty"
261
- ].includes(t.operator) || t.operator === "inDateRange" && t.dateRange ? !0 : !!(t.values && t.values.length > 0);
262
- }
263
- return "type" in e && "filters" in e ? e.filters.filter((e) => H(e)).length > 0 : !1;
264
- }
265
- function ie(e, t) {
266
- return !e || !e.length || !t || !t.length ? [] : e.filter((e) => t.includes(e.id)).filter((e) => H(e.filter)).map((e) => e.filter);
267
- }
268
- function U(e) {
269
- if ("type" in e && "filters" in e) {
270
- let t = e, n = t.filters.map(U);
271
- return t.type === "and" ? { and: n } : { or: n };
272
- }
273
- return e;
274
- }
275
- function ae(e, t, n = "server") {
276
- return !e || e.length === 0 ? t : !t || t.length === 0 ? [...e] : n === "server" ? [{ and: [...e, ...t].map(U) }] : [{
277
- type: "and",
278
- filters: [...e, ...t]
279
- }];
280
- }
281
- function oe(e) {
282
- let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set();
283
- return e.portlets.forEach((e) => {
284
- try {
285
- let i = re(e).analysisConfig.query, a = (e) => {
286
- 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) => {
287
- e.dimension && r.add(e.dimension);
288
- }), e.filters && W(e.filters).forEach((e) => {
289
- n.add(e);
290
- });
291
- };
292
- if ("funnel" in i) {
293
- let e = i;
294
- e.funnel?.timeDimension && r.add(e.funnel.timeDimension);
295
- } else "queries" in i ? i.queries.forEach((e) => a(e)) : a(i);
296
- } catch (t) {
297
- console.warn("Failed to extract fields from portlet:", e.id, t);
298
- }
299
- }), {
300
- measures: t,
301
- dimensions: n,
302
- timeDimensions: r
303
- };
304
- }
305
- function W(e) {
306
- let t = [];
307
- return e.forEach((e) => {
308
- "member" in e ? t.push(e.member) : "type" in e && "filters" in e && t.push(...W(e.filters));
309
- }), [...new Set(t)];
310
- }
311
- function G(e) {
312
- if (e.dateRange) return e.dateRange;
313
- if (e.values && e.values.length > 0) return e.values.length === 1 ? e.values[0] : e.values;
314
- }
315
- function se(e, t, n) {
316
- if (!n || n.length === 0 || !t || t.length === 0) return n;
317
- let r = e?.filter((e) => e.isUniversalTime && t.includes(e.id))?.filter((e) => {
318
- if (!("member" in e.filter)) return !1;
319
- let t = e.filter;
320
- return G(t) !== void 0;
321
- });
322
- if (!r || r.length === 0) return n;
323
- let i = r[0].filter, a = G(i);
324
- return n.map((e) => ({
325
- ...e,
326
- dateRange: a
327
- }));
328
- }
329
- //#endregion
330
- //#region src/client/shared/components/CodeBlock.tsx
331
- var ce = ({ code: t, language: n, title: r, maxHeight: a = "16rem", height: o, className: s = "", headerRight: u }) => {
332
- let { t: d } = i(), [f, p] = v(!1), m = _(null), g = e("copy"), S = e("check");
333
- return h(() => {
334
- if (!m.current) return;
335
- let e = m.current, r = !0;
336
- return e.textContent = t, c().then(() => {
337
- if (!r) return;
338
- let i = l();
339
- i && (e.innerHTML = i.highlight(t, { language: n }).value);
340
- }).catch(() => {
341
- r && (e.textContent = t);
342
- }), () => {
343
- r = !1;
344
- };
345
- }, [t, n]), /* @__PURE__ */ x("div", {
346
- className: `dc:relative ${s}`,
347
- children: [/* @__PURE__ */ x("div", {
348
- className: "dc:flex dc:items-center dc:justify-between dc:mb-2 dc:gap-2",
349
- children: [r && /* @__PURE__ */ b("h4", {
350
- className: "dc:text-sm dc:font-semibold text-dc-text",
351
- children: r
352
- }), /* @__PURE__ */ x("div", {
353
- className: "dc:flex dc:items-center dc:gap-2 dc:ml-auto",
354
- children: [u, /* @__PURE__ */ b("button", {
355
- onClick: async () => {
356
- try {
357
- await navigator.clipboard.writeText(t), p(!0), setTimeout(() => p(!1), 2e3);
358
- } catch {
359
- let e = document.createElement("textarea");
360
- e.value = t, e.style.position = "fixed", e.style.left = "-999999px", document.body.appendChild(e), e.select(), document.execCommand("copy"), document.body.removeChild(e), p(!0), setTimeout(() => p(!1), 2e3);
361
- }
362
- },
363
- 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",
364
- title: f ? "Copied!" : "Copy to clipboard",
365
- children: f ? /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(S, { className: "dc:w-3.5 dc:h-3.5 text-dc-success" }), /* @__PURE__ */ b("span", {
366
- className: "text-dc-success",
367
- children: d("common.actions.copied")
368
- })] }) : /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b(g, { className: "dc:w-3.5 dc:h-3.5 text-dc-text-secondary" }), /* @__PURE__ */ b("span", {
369
- className: "text-dc-text-secondary",
370
- children: d("common.actions.copy")
371
- })] })
372
- })]
373
- })]
374
- }), /* @__PURE__ */ b("div", {
375
- className: "bg-dc-surface-secondary dc:border border-dc-border dc:rounded dc:overflow-auto",
376
- style: o ? {
377
- height: o,
378
- minHeight: o,
379
- maxHeight: o
380
- } : { maxHeight: a },
381
- children: /* @__PURE__ */ b("pre", {
382
- className: "dc:p-3 dc:text-xs dc:m-0",
383
- children: /* @__PURE__ */ b("code", {
384
- ref: m,
385
- className: `hljs language-${n}`,
386
- children: t
387
- })
388
- })
389
- })]
390
- });
391
- }, K = [
392
- {
393
- name: "default",
394
- label: "Default",
395
- colors: [
396
- "#3b82f6",
397
- "#10b981",
398
- "#f59e0b",
399
- "#ef4444",
400
- "#8b5cf6",
401
- "#f97316",
402
- "#06b6d4",
403
- "#84cc16"
404
- ],
405
- gradient: [
406
- "#fde725",
407
- "#7ad151",
408
- "#22a884",
409
- "#2a788e",
410
- "#414487",
411
- "#440154"
412
- ]
413
- },
414
- {
415
- name: "ocean",
416
- label: "Ocean",
417
- colors: [
418
- "#1e3a8a",
419
- "#1e40af",
420
- "#2563eb",
421
- "#3b82f6",
422
- "#06b6d4",
423
- "#0891b2",
424
- "#0e7490",
425
- "#0f766e"
426
- ],
427
- gradient: [
428
- "#38bdf8",
429
- "#0ea5e9",
430
- "#0284c7",
431
- "#0369a1",
432
- "#075985",
433
- "#0c4a6e"
434
- ]
435
- },
436
- {
437
- name: "sunset",
438
- label: "Sunset",
439
- colors: [
440
- "#dc2626",
441
- "#ea580c",
442
- "#f59e0b",
443
- "#eab308",
444
- "#d97706",
445
- "#b45309",
446
- "#92400e",
447
- "#7c2d12"
448
- ],
449
- gradient: [
450
- "#fbbf24",
451
- "#f59e0b",
452
- "#d97706",
453
- "#b45309",
454
- "#92400e",
455
- "#7c2d12"
456
- ]
457
- },
458
- {
459
- name: "forest",
460
- label: "Forest",
461
- colors: [
462
- "#166534",
463
- "#15803d",
464
- "#16a34a",
465
- "#22c55e",
466
- "#4ade80",
467
- "#65a30d",
468
- "#84cc16",
469
- "#a3e635"
470
- ],
471
- gradient: [
472
- "#4ade80",
473
- "#22c55e",
474
- "#16a34a",
475
- "#15803d",
476
- "#166534",
477
- "#14532d"
478
- ]
479
- },
480
- {
481
- name: "purple",
482
- label: "Purple",
483
- colors: [
484
- "#581c87",
485
- "#7c3aed",
486
- "#8b5cf6",
487
- "#a855f7",
488
- "#c084fc",
489
- "#e879f9",
490
- "#f0abfc",
491
- "#fbbf24"
492
- ],
493
- gradient: [
494
- "#a855f7",
495
- "#8b5cf6",
496
- "#7c3aed",
497
- "#6d28d9",
498
- "#581c87",
499
- "#4c1d95"
500
- ]
501
- },
502
- {
503
- name: "monochrome",
504
- label: "Monochrome",
505
- colors: [
506
- "#1f2937",
507
- "#374151",
508
- "#4b5563",
509
- "#6b7280",
510
- "#9ca3af",
511
- "#d1d5db",
512
- "#e5e7eb",
513
- "#f3f4f6"
514
- ],
515
- gradient: [
516
- "#9ca3af",
517
- "#6b7280",
518
- "#4b5563",
519
- "#374151",
520
- "#1f2937",
521
- "#111827"
522
- ]
523
- },
524
- {
525
- name: "pastel",
526
- label: "Pastel",
527
- colors: [
528
- "#93c5fd",
529
- "#86efac",
530
- "#fde047",
531
- "#fca5a5",
532
- "#c4b5fd",
533
- "#fdba74",
534
- "#67e8f9",
535
- "#bef264"
536
- ],
537
- gradient: [
538
- "#fed7aa",
539
- "#ddd6fe",
540
- "#fecaca",
541
- "#fef08a",
542
- "#a7f3d0",
543
- "#bfdbfe"
544
- ]
545
- },
546
- {
547
- name: "vibrant",
548
- label: "Vibrant",
549
- colors: [
550
- "#0000ff",
551
- "#00ff00",
552
- "#ffff00",
553
- "#ff0000",
554
- "#ff00ff",
555
- "#ff8000",
556
- "#00ffff",
557
- "#8000ff"
558
- ],
559
- gradient: [
560
- "#ffff00",
561
- "#80ff00",
562
- "#00ff80",
563
- "#00ffff",
564
- "#0080ff",
565
- "#4000ff"
566
- ]
567
- },
568
- {
569
- name: "d3Category10",
570
- label: "D3 Category 10",
571
- colors: [
572
- "#1f77b4",
573
- "#ff7f0e",
574
- "#2ca02c",
575
- "#d62728",
576
- "#9467bd",
577
- "#8c564b",
578
- "#e377c2",
579
- "#7f7f7f",
580
- "#bcbd22",
581
- "#17becf"
582
- ],
583
- gradient: [
584
- "#9467bd",
585
- "#d62728",
586
- "#ff7f0e",
587
- "#bcbd22",
588
- "#2ca02c",
589
- "#1f77b4"
590
- ]
591
- },
592
- {
593
- name: "d3Tableau10",
594
- label: "D3 Tableau 10",
595
- colors: [
596
- "#4e79a7",
597
- "#f28e2c",
598
- "#e15759",
599
- "#76b7b2",
600
- "#59a14f",
601
- "#edc949",
602
- "#af7aa1",
603
- "#ff9da7",
604
- "#9c755f",
605
- "#bab0ab"
606
- ],
607
- gradient: [
608
- "#e15759",
609
- "#f28e2c",
610
- "#edc949",
611
- "#59a14f",
612
- "#76b7b2",
613
- "#4e79a7"
614
- ]
615
- },
616
- {
617
- name: "colorBrewerSet1",
618
- label: "ColorBrewer Set 1",
619
- colors: [
620
- "#e41a1c",
621
- "#377eb8",
622
- "#4daf4a",
623
- "#984ea3",
624
- "#ff7f00",
625
- "#ffff33",
626
- "#a65628",
627
- "#f781bf",
628
- "#999999"
629
- ],
630
- gradient: [
631
- "#984ea3",
632
- "#e41a1c",
633
- "#ff7f00",
634
- "#ffff33",
635
- "#4daf4a",
636
- "#377eb8"
637
- ]
638
- },
639
- {
640
- name: "colorBrewerSet2",
641
- label: "ColorBrewer Set 2",
642
- colors: [
643
- "#66c2a5",
644
- "#fc8d62",
645
- "#8da0cb",
646
- "#e78ac3",
647
- "#a6d854",
648
- "#ffd92f",
649
- "#e5c494",
650
- "#b3b3b3"
651
- ],
652
- gradient: [
653
- "#e78ac3",
654
- "#fc8d62",
655
- "#ffd92f",
656
- "#a6d854",
657
- "#66c2a5",
658
- "#8da0cb"
659
- ]
660
- },
661
- {
662
- name: "colorBrewerDark2",
663
- label: "ColorBrewer Dark 2",
664
- colors: [
665
- "#1b9e77",
666
- "#d95f02",
667
- "#7570b3",
668
- "#e7298a",
669
- "#66a61e",
670
- "#e6ab02",
671
- "#a6761d",
672
- "#666666"
673
- ],
674
- gradient: [
675
- "#e7298a",
676
- "#d95f02",
677
- "#e6ab02",
678
- "#66a61e",
679
- "#1b9e77",
680
- "#7570b3"
681
- ]
682
- },
683
- {
684
- name: "colorBrewerPaired",
685
- label: "ColorBrewer Paired",
686
- colors: [
687
- "#a6cee3",
688
- "#1f78b4",
689
- "#b2df8a",
690
- "#33a02c",
691
- "#fb9a99",
692
- "#e31a1c",
693
- "#fdbf6f",
694
- "#ff7f00",
695
- "#cab2d6",
696
- "#6a3d9a",
697
- "#ffff99",
698
- "#b15928"
699
- ],
700
- gradient: [
701
- "#6a3d9a",
702
- "#e31a1c",
703
- "#ff7f00",
704
- "#ffff99",
705
- "#33a02c",
706
- "#1f78b4"
707
- ]
708
- },
709
- {
710
- name: "viridis",
711
- label: "Viridis",
712
- colors: [
713
- "#440154",
714
- "#482677",
715
- "#3f4a8a",
716
- "#31678e",
717
- "#26838f",
718
- "#1f9d8a",
719
- "#6cce5a",
720
- "#b6de2b"
721
- ],
722
- gradient: [
723
- "#b6de2b",
724
- "#6cce5a",
725
- "#1f9d8a",
726
- "#26838f",
727
- "#31678e",
728
- "#3f4a8a",
729
- "#482677",
730
- "#440154"
731
- ]
732
- },
733
- {
734
- name: "plasma",
735
- label: "Plasma",
736
- colors: [
737
- "#0c0786",
738
- "#5c01a6",
739
- "#900da4",
740
- "#bf3984",
741
- "#e16462",
742
- "#f99b45",
743
- "#fcce25",
744
- "#f0f921"
745
- ],
746
- gradient: [
747
- "#f0f921",
748
- "#fcce25",
749
- "#f99b45",
750
- "#e16462",
751
- "#bf3984",
752
- "#900da4",
753
- "#5c01a6",
754
- "#0c0786"
755
- ]
756
- },
757
- {
758
- name: "inferno",
759
- label: "Inferno",
760
- colors: [
761
- "#000003",
762
- "#1f0c47",
763
- "#550f6d",
764
- "#88226a",
765
- "#a83655",
766
- "#cc4f39",
767
- "#e6862a",
768
- "#fec228"
769
- ],
770
- gradient: [
771
- "#fec228",
772
- "#e6862a",
773
- "#cc4f39",
774
- "#a83655",
775
- "#88226a",
776
- "#550f6d",
777
- "#1f0c47",
778
- "#000003"
779
- ]
780
- },
781
- {
782
- name: "magma",
783
- label: "Magma",
784
- colors: [
785
- "#000003",
786
- "#140b34",
787
- "#3b0f6f",
788
- "#641a80",
789
- "#8b2981",
790
- "#b63679",
791
- "#de4968",
792
- "#fd9f6c"
793
- ],
794
- gradient: [
795
- "#fd9f6c",
796
- "#de4968",
797
- "#b63679",
798
- "#8b2981",
799
- "#641a80",
800
- "#3b0f6f",
801
- "#140b34",
802
- "#000003"
803
- ]
804
- },
805
- {
806
- name: "cividis",
807
- label: "Cividis",
808
- colors: [
809
- "#00204c",
810
- "#003f5c",
811
- "#2c4b7a",
812
- "#51576f",
813
- "#7f6874",
814
- "#a8786e",
815
- "#d2906d",
816
- "#ffb570"
817
- ],
818
- gradient: [
819
- "#ffb570",
820
- "#d2906d",
821
- "#a8786e",
822
- "#7f6874",
823
- "#51576f",
824
- "#2c4b7a",
825
- "#003f5c",
826
- "#00204c"
827
- ]
828
- },
829
- {
830
- name: "turbo",
831
- label: "Turbo",
832
- colors: [
833
- "#30123b",
834
- "#4454c4",
835
- "#1dd3c0",
836
- "#42f465",
837
- "#b2df22",
838
- "#faba39",
839
- "#f66c19",
840
- "#c42e02"
841
- ],
842
- gradient: [
843
- "#c42e02",
844
- "#f66c19",
845
- "#faba39",
846
- "#b2df22",
847
- "#42f465",
848
- "#1dd3c0",
849
- "#4454c4",
850
- "#30123b"
851
- ]
852
- },
853
- {
854
- name: "warm",
855
- label: "Warm",
856
- colors: [
857
- "#8b0000",
858
- "#b22222",
859
- "#cd5c5c",
860
- "#ff6347",
861
- "#ff8c00",
862
- "#ffa500",
863
- "#ffd700",
864
- "#ffff00"
865
- ],
866
- gradient: [
867
- "#ffd700",
868
- "#ffa500",
869
- "#ff8c00",
870
- "#ff6347",
871
- "#b22222",
872
- "#8b0000"
873
- ]
874
- },
875
- {
876
- name: "cool",
877
- label: "Cool",
878
- colors: [
879
- "#000080",
880
- "#0000ff",
881
- "#4169e1",
882
- "#00bfff",
883
- "#00ffff",
884
- "#40e0d0",
885
- "#20b2aa",
886
- "#008b8b"
887
- ],
888
- gradient: [
889
- "#40e0d0",
890
- "#00ffff",
891
- "#00bfff",
892
- "#4169e1",
893
- "#0000ff",
894
- "#000080"
895
- ]
896
- },
897
- {
898
- name: "earth",
899
- label: "Earth",
900
- colors: [
901
- "#8b4513",
902
- "#a0522d",
903
- "#cd853f",
904
- "#daa520",
905
- "#d2691e",
906
- "#bc8f8f",
907
- "#f4a460",
908
- "#deb887"
909
- ],
910
- gradient: [
911
- "#f4a460",
912
- "#d2691e",
913
- "#daa520",
914
- "#cd853f",
915
- "#a0522d",
916
- "#8b4513"
917
- ]
918
- },
919
- {
920
- name: "autumn",
921
- label: "Autumn",
922
- colors: [
923
- "#8b0000",
924
- "#a0522d",
925
- "#cd853f",
926
- "#daa520",
927
- "#ff8c00",
928
- "#ff4500",
929
- "#dc143c",
930
- "#b22222"
931
- ],
932
- gradient: [
933
- "#ff4500",
934
- "#ff8c00",
935
- "#daa520",
936
- "#cd853f",
937
- "#a0522d",
938
- "#8b0000"
939
- ]
940
- },
941
- {
942
- name: "spring",
943
- label: "Spring",
944
- colors: [
945
- "#32cd32",
946
- "#98fb98",
947
- "#90ee90",
948
- "#ffb6c1",
949
- "#ffc0cb",
950
- "#ffffe0",
951
- "#f0fff0",
952
- "#e0ffff"
953
- ],
954
- gradient: [
955
- "#e0ffff",
956
- "#ffc0cb",
957
- "#ffb6c1",
958
- "#ffffe0",
959
- "#98fb98",
960
- "#32cd32"
961
- ]
962
- },
963
- {
964
- name: "winter",
965
- label: "Winter",
966
- colors: [
967
- "#191970",
968
- "#4682b4",
969
- "#87ceeb",
970
- "#b0e0e6",
971
- "#e0ffff",
972
- "#f0f8ff",
973
- "#c0c0c0",
974
- "#708090"
975
- ],
976
- gradient: [
977
- "#f0f8ff",
978
- "#e0ffff",
979
- "#b0e0e6",
980
- "#87ceeb",
981
- "#4682b4",
982
- "#191970"
983
- ]
984
- },
985
- {
986
- name: "neon",
987
- label: "Neon",
988
- colors: [
989
- "#ff0080",
990
- "#00ff80",
991
- "#8000ff",
992
- "#ff8000",
993
- "#0080ff",
994
- "#80ff00",
995
- "#ff0040",
996
- "#40ff00"
997
- ],
998
- gradient: [
999
- "#ff0080",
1000
- "#ff8000",
1001
- "#80ff00",
1002
- "#00ff80",
1003
- "#0080ff",
1004
- "#8000ff"
1005
- ]
1006
- },
1007
- {
1008
- name: "retro",
1009
- label: "Retro",
1010
- colors: [
1011
- "#ff69b4",
1012
- "#ffd700",
1013
- "#32cd32",
1014
- "#00ced1",
1015
- "#ff6347",
1016
- "#9370db",
1017
- "#ffa500",
1018
- "#20b2aa"
1019
- ],
1020
- gradient: [
1021
- "#00ced1",
1022
- "#32cd32",
1023
- "#ffd700",
1024
- "#ff6347",
1025
- "#ff69b4",
1026
- "#9370db"
1027
- ]
1028
- },
1029
- {
1030
- name: "corporate",
1031
- label: "Corporate",
1032
- colors: [
1033
- "#003366",
1034
- "#0066cc",
1035
- "#336699",
1036
- "#6699cc",
1037
- "#4d4d4d",
1038
- "#808080",
1039
- "#b3b3b3",
1040
- "#cccccc"
1041
- ],
1042
- gradient: [
1043
- "#b3b3b3",
1044
- "#808080",
1045
- "#6699cc",
1046
- "#336699",
1047
- "#0066cc",
1048
- "#003366"
1049
- ]
1050
- },
1051
- {
1052
- name: "material",
1053
- label: "Material Design",
1054
- colors: [
1055
- "#f44336",
1056
- "#e91e63",
1057
- "#9c27b0",
1058
- "#673ab7",
1059
- "#3f51b5",
1060
- "#2196f3",
1061
- "#03a9f4",
1062
- "#00bcd4"
1063
- ],
1064
- gradient: [
1065
- "#e91e63",
1066
- "#03a9f4",
1067
- "#00bcd4",
1068
- "#2196f3",
1069
- "#3f51b5",
1070
- "#673ab7"
1071
- ]
1072
- }
1073
- ];
1074
- function q(e) {
1075
- return e && K.find((t) => t.name === e) || K[0];
1076
- }
1077
- //#endregion
1078
- //#region src/client/components/Modal.tsx
1079
- var J = ({ 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 }) => {
1080
- let u = m((e) => {
1081
- e.key === "Escape" && a && t();
1082
- }, [a, t]);
1083
- return h(() => (e ? (a && document.addEventListener("keydown", u), document.body.style.overflow = "hidden") : document.body.style.overflow = "unset", () => {
1084
- document.removeEventListener("keydown", u), document.body.style.overflow = "unset";
1085
- }), [
1086
- e,
1087
- a,
1088
- u
1089
- ]), e ? /* @__PURE__ */ b("div", {
1090
- 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"}`,
1091
- style: { backgroundColor: "var(--dc-overlay)" },
1092
- onClick: i ? t : void 0,
1093
- children: /* @__PURE__ */ x("div", {
1094
- 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"} ${(() => {
1095
- switch (r) {
1096
- case "sm": return "dc:max-w-md";
1097
- case "md": return "dc:max-w-lg";
1098
- case "lg": return "dc:max-w-2xl";
1099
- case "xl": return "dc:max-w-6xl";
1100
- case "xxl": return "dc:max-w-[1400px]";
1101
- case "full": return "dc:max-w-7xl";
1102
- case "fullscreen": return "dc:w-[90vw] dc:h-[90vh] dc:max-w-none";
1103
- case "fullscreen-mobile": return "dc:w-full dc:h-full dc:md:w-[min(90vw,1400px)] dc:md:h-[90vh]";
1104
- default: return "dc:max-w-lg";
1105
- }
1106
- })()} ${r === "fullscreen" || r === "fullscreen-mobile" ? "" : "dc:max-h-[90vh]"} dc:flex dc:flex-col`,
1107
- style: { boxShadow: "var(--dc-shadow-2xl)" },
1108
- onClick: (e) => e.stopPropagation(),
1109
- role: "dialog",
1110
- "aria-modal": "true",
1111
- "aria-labelledby": n ? "modal-title" : void 0,
1112
- children: [
1113
- (n || o) && /* @__PURE__ */ x("div", {
1114
- className: "dc:flex dc:items-center dc:justify-between dc:px-6 dc:py-4 dc:border-b border-dc-border",
1115
- children: [n && /* @__PURE__ */ b("h2", {
1116
- id: "modal-title",
1117
- className: "dc:text-xl dc:font-semibold text-dc-text",
1118
- children: n
1119
- }), o && /* @__PURE__ */ b("button", {
1120
- type: "button",
1121
- onClick: t,
1122
- className: "text-dc-text-muted hover:text-dc-text-secondary dc:transition-colors dc:p-2 dc:-mr-2",
1123
- "aria-label": "Close modal",
1124
- children: /* @__PURE__ */ b("svg", {
1125
- width: "24",
1126
- height: "24",
1127
- fill: "none",
1128
- viewBox: "0 0 24 24",
1129
- stroke: "currentColor",
1130
- children: /* @__PURE__ */ b("path", {
1131
- strokeLinecap: "round",
1132
- strokeLinejoin: "round",
1133
- strokeWidth: 2,
1134
- d: "M6 18L18 6M6 6l12 12"
1135
- })
1136
- })
1137
- })]
1138
- }),
1139
- /* @__PURE__ */ b("div", {
1140
- className: `dc:flex-1 dc:overflow-y-auto ${l ? "" : "dc:px-6 dc:py-4"}`,
1141
- children: s
1142
- }),
1143
- c && /* @__PURE__ */ b("div", {
1144
- 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",
1145
- children: f.Children.toArray(c)
1146
- })
1147
- ]
1148
- })
1149
- }) : null;
1150
- };
1151
- //#endregion
1152
- //#region src/client/components/AnalysisBuilder/utils/idUtils.ts
1153
- function Y() {
1154
- return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
1155
- }
1156
- function le(e) {
1157
- let t = "", n = e;
1158
- do
1159
- t = String.fromCharCode(65 + n % 26) + t, n = Math.floor(n / 26) - 1;
1160
- while (n >= 0);
1161
- return t;
1162
- }
1163
- //#endregion
1164
- //#region src/client/components/AnalysisBuilder/utils/fieldUtils.ts
1165
- function X(e, t) {
1166
- if (!t) return null;
1167
- for (let n of t.cubes) {
1168
- let t = n.measures.find((t) => t.name === e);
1169
- if (t) return {
1170
- field: t,
1171
- cubeName: n.name,
1172
- fieldType: "measure"
1173
- };
1174
- let r = n.dimensions.find((t) => t.name === e);
1175
- if (r) return {
1176
- field: r,
1177
- cubeName: n.name,
1178
- fieldType: r.type === "time" ? "timeDimension" : "dimension"
1179
- };
1180
- }
1181
- return null;
1182
- }
1183
- function ue(e, t) {
1184
- let n = X(e, t);
1185
- return n && (n.field.title || n.field.shortTitle) || e;
1186
- }
1187
- function Z(e, t) {
1188
- if (!e) return [];
1189
- let n = [];
1190
- for (let r of e.cubes) if (t === "metrics") for (let e of r.measures) n.push({
1191
- name: e.name,
1192
- title: e.title || e.shortTitle || e.name,
1193
- shortTitle: e.shortTitle || e.title || e.name,
1194
- type: e.type,
1195
- description: e.description,
1196
- cubeName: r.name,
1197
- fieldType: "measure"
1198
- });
1199
- else if (t === "breakdown" || t === "dimensionFilter") for (let e of r.dimensions) n.push({
1200
- name: e.name,
1201
- title: e.title || e.shortTitle || e.name,
1202
- shortTitle: e.shortTitle || e.title || e.name,
1203
- type: e.type,
1204
- description: e.description,
1205
- cubeName: r.name,
1206
- fieldType: e.type === "time" ? "timeDimension" : "dimension"
1207
- });
1208
- else {
1209
- for (let e of r.measures) n.push({
1210
- name: e.name,
1211
- title: e.title || e.shortTitle || e.name,
1212
- shortTitle: e.shortTitle || e.title || e.name,
1213
- type: e.type,
1214
- description: e.description,
1215
- cubeName: r.name,
1216
- fieldType: "measure"
1217
- });
1218
- for (let e of r.dimensions) n.push({
1219
- name: e.name,
1220
- title: e.title || e.shortTitle || e.name,
1221
- shortTitle: e.shortTitle || e.title || e.name,
1222
- type: e.type,
1223
- description: e.description,
1224
- cubeName: r.name,
1225
- fieldType: e.type === "time" ? "timeDimension" : "dimension"
1226
- });
1227
- }
1228
- return n;
1229
- }
1230
- function de(e, t, n) {
1231
- let r = e;
1232
- if (n && n !== "all" && (r = r.filter((e) => e.cubeName === n)), t.trim()) {
1233
- let e = t.toLowerCase();
1234
- r = r.filter((t) => t.name.toLowerCase().includes(e) || t.title.toLowerCase().includes(e) || (t.description?.toLowerCase().includes(e) ?? !1));
1235
- }
1236
- return r;
1237
- }
1238
- function fe(e) {
1239
- let t = /* @__PURE__ */ new Map();
1240
- for (let n of e) {
1241
- let e = t.get(n.cubeName) || [];
1242
- e.push(n), t.set(n.cubeName, e);
1243
- }
1244
- return t;
1245
- }
1246
- function pe(e) {
1247
- return e ? e.cubes.map((e) => e.name) : [];
1248
- }
1249
- function Q(e, t) {
1250
- return t && t.cubes.find((t) => t.name === e)?.title || e;
1251
- }
1252
- function me(e, t) {
1253
- let n = /* @__PURE__ */ new Set();
1254
- if (!t) return n;
1255
- n.add(e);
1256
- let r = t.cubes.find((t) => t.name === e);
1257
- if (!r || !r.relationships) return n;
1258
- for (let e of r.relationships) n.add(e.targetCube);
1259
- return n;
1260
- }
1261
- function he(e, t) {
1262
- if (!t) return null;
1263
- let n = me(e, t);
1264
- return { cubes: t.cubes.filter((e) => n.has(e.name)).map((e) => ({
1265
- ...e,
1266
- description: e.description || ""
1267
- })) };
1268
- }
1269
- //#endregion
1270
- //#region src/client/components/AnalysisBuilder/utils/recentFieldsUtils.ts
1271
- var ge = "drizzle-cube-recent-fields", _e = 10;
1272
- function ve() {
1273
- try {
1274
- let e = localStorage.getItem(ge);
1275
- if (e) return JSON.parse(e);
1276
- } catch {}
1277
- return {
1278
- metrics: [],
1279
- breakdowns: []
1280
- };
1281
- }
1282
- function ye(e, t) {
1283
- try {
1284
- let n = ve(), r = n[t].filter((t) => t !== e);
1285
- r.unshift(e), n[t] = r.slice(0, _e), localStorage.setItem(ge, JSON.stringify(n));
1286
- } catch {}
1287
- }
1288
- function be(e, t, n) {
1289
- if (!e || n.length === 0) return [];
1290
- let r = Z(e, t), i = [];
1291
- for (let e of n) {
1292
- let t = r.find((t) => t.name === e);
1293
- t && i.push(t);
1294
- }
1295
- return i;
1296
- }
1297
- //#endregion
1298
- //#region src/client/adapters/funnelModeAdapter.ts
1299
- function xe(e) {
1300
- let t = "";
1301
- e.funnelBindingKey && (typeof e.funnelBindingKey.dimension == "string" ? t = e.funnelBindingKey.dimension : Array.isArray(e.funnelBindingKey.dimension) && (t = e.funnelBindingKey.dimension.map((e) => ({
1302
- cube: e.cube,
1303
- dimension: e.dimension
1304
- }))));
1305
- let n = e.funnelTimeDimension || "", r = e.funnelSteps.map((t) => {
1306
- let n = { name: t.name };
1307
- 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;
1308
- });
1309
- return { funnel: {
1310
- bindingKey: t,
1311
- timeDimension: n,
1312
- steps: r,
1313
- includeTimeMetrics: !0
1314
- } };
1315
- }
1316
- function Se(e) {
1317
- let { funnel: t } = e, n = null;
1318
- if (t.steps.length > 0 && t.steps[0].cube) n = t.steps[0].cube;
1319
- else if (typeof t.bindingKey == "string") {
1320
- let e = t.bindingKey.split(".");
1321
- e.length > 0 && (n = e[0]);
1322
- }
1323
- let r = null;
1324
- t.bindingKey && (typeof t.bindingKey == "string" ? r = { dimension: t.bindingKey } : Array.isArray(t.bindingKey) && (r = { dimension: t.bindingKey.map((e) => ({
1325
- cube: e.cube,
1326
- dimension: e.dimension
1327
- })) }));
1328
- let i = null;
1329
- 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}`));
1330
- let a = t.steps.map((e) => {
1331
- let t = [];
1332
- return e.filter && (t = Array.isArray(e.filter) ? e.filter : typeof e.filter == "object" && "and" in e.filter ? e.filter.and : [e.filter]), {
1333
- id: Y(),
1334
- name: e.name,
1335
- cube: e.cube || n || "",
1336
- filters: t,
1337
- timeToConvert: e.timeToConvert
1338
- };
1339
- });
1340
- return {
1341
- funnelCube: n,
1342
- funnelSteps: a,
1343
- activeFunnelStepIndex: 0,
1344
- funnelTimeDimension: i,
1345
- funnelBindingKey: r
1346
- };
1347
- }
1348
- function Ce(e) {
1349
- if (!e || typeof e != "object") return !1;
1350
- let t = e;
1351
- if (t.version !== 1 || t.analysisType !== "funnel" || !t.query || typeof t.query != "object") return !1;
1352
- let n = t.query;
1353
- return !(!n.funnel || typeof n.funnel != "object");
1354
- }
1355
- var we = {
1356
- type: "funnel",
1357
- createInitial() {
1358
- return {
1359
- funnelCube: null,
1360
- funnelSteps: [],
1361
- activeFunnelStepIndex: 0,
1362
- funnelTimeDimension: null,
1363
- funnelBindingKey: null
1364
- };
1365
- },
1366
- extractState(e) {
1367
- return {
1368
- funnelCube: e.funnelCube,
1369
- funnelSteps: e.funnelSteps,
1370
- activeFunnelStepIndex: e.activeFunnelStepIndex,
1371
- funnelTimeDimension: e.funnelTimeDimension,
1372
- funnelBindingKey: e.funnelBindingKey
1373
- };
1374
- },
1375
- canLoad(e) {
1376
- return Ce(e);
1377
- },
1378
- load(e) {
1379
- if (e.analysisType !== "funnel") throw Error(`Cannot load ${e.analysisType} config with funnel adapter`);
1380
- return Se(e.query);
1381
- },
1382
- save(e, t, n) {
1383
- return {
1384
- version: 1,
1385
- analysisType: "funnel",
1386
- activeView: n,
1387
- charts: { funnel: t.funnel || this.getDefaultChartConfig() },
1388
- query: xe(e)
1389
- };
1390
- },
1391
- validate(e) {
1392
- let t = [], n = [];
1393
- 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) => {
1394
- (!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`);
1395
- });
1396
- let r = e.funnelSteps.map((e) => e.name.toLowerCase()), i = r.filter((e, t) => r.indexOf(e) !== t);
1397
- return i.length > 0 && n.push(`Duplicate step names: ${[...new Set(i)].join(", ")}`), {
1398
- isValid: t.length === 0,
1399
- errors: t,
1400
- warnings: n
1401
- };
1402
- },
1403
- clear(e) {
1404
- return {
1405
- ...this.createInitial(),
1406
- funnelCube: e.funnelCube
1407
- };
1408
- },
1409
- getDefaultChartConfig() {
1410
- return {
1411
- chartType: "funnel",
1412
- chartConfig: {},
1413
- displayConfig: {
1414
- showLegend: !0,
1415
- showGrid: !0,
1416
- showTooltip: !0
1417
- }
1418
- };
1419
- }
1420
- };
1421
- //#endregion
1422
- //#region src/client/adapters/flowModeAdapter.ts
1423
- function Te(e) {
1424
- let t = "";
1425
- return e.flowBindingKey && (typeof e.flowBindingKey.dimension == "string" ? t = e.flowBindingKey.dimension : Array.isArray(e.flowBindingKey.dimension) && (t = e.flowBindingKey.dimension.map((e) => ({
1426
- cube: e.cube,
1427
- dimension: e.dimension
1428
- })))), { flow: {
1429
- bindingKey: t,
1430
- timeDimension: e.flowTimeDimension || "",
1431
- startingStep: {
1432
- name: e.startingStep.name || "Starting Step",
1433
- filter: e.startingStep.filters.length === 1 ? e.startingStep.filters[0] : e.startingStep.filters.length > 1 ? e.startingStep.filters : void 0
1434
- },
1435
- stepsBefore: e.stepsBefore,
1436
- stepsAfter: e.stepsAfter,
1437
- eventDimension: e.eventDimension || "",
1438
- joinStrategy: e.joinStrategy
1439
- } };
1440
- }
1441
- function Ee(e) {
1442
- let { flow: t } = e, n = null;
1443
- if (typeof t.bindingKey == "string") {
1444
- let e = t.bindingKey.split(".");
1445
- e.length > 0 && (n = e[0]);
1446
- } else Array.isArray(t.bindingKey) && t.bindingKey.length > 0 && (n = t.bindingKey[0].cube);
1447
- let r = null;
1448
- t.bindingKey && (typeof t.bindingKey == "string" ? r = { dimension: t.bindingKey } : Array.isArray(t.bindingKey) && (r = { dimension: t.bindingKey.map((e) => ({
1449
- cube: e.cube,
1450
- dimension: e.dimension
1451
- })) }));
1452
- let i = null;
1453
- 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}`));
1454
- let a = [];
1455
- return t.startingStep.filter && (a = Array.isArray(t.startingStep.filter) ? t.startingStep.filter : [t.startingStep.filter]), {
1456
- flowCube: n,
1457
- flowBindingKey: r,
1458
- flowTimeDimension: i,
1459
- startingStep: {
1460
- name: t.startingStep.name || "",
1461
- filters: a
1462
- },
1463
- stepsBefore: t.stepsBefore || 3,
1464
- stepsAfter: t.stepsAfter || 3,
1465
- eventDimension: t.eventDimension || null,
1466
- joinStrategy: t.joinStrategy || "auto"
1467
- };
1468
- }
1469
- function De(e) {
1470
- if (!e || typeof e != "object") return !1;
1471
- let t = e;
1472
- if (t.version !== 1 || t.analysisType !== "flow" || !t.query || typeof t.query != "object") return !1;
1473
- let n = t.query;
1474
- return !(!n.flow || typeof n.flow != "object");
1475
- }
1476
- var Oe = {
1477
- type: "flow",
1478
- createInitial() {
1479
- return {
1480
- flowCube: null,
1481
- flowBindingKey: null,
1482
- flowTimeDimension: null,
1483
- startingStep: {
1484
- name: "",
1485
- filters: []
1486
- },
1487
- stepsBefore: 3,
1488
- stepsAfter: 3,
1489
- eventDimension: null,
1490
- joinStrategy: "auto"
1491
- };
1492
- },
1493
- extractState(e) {
1494
- return {
1495
- flowCube: e.flowCube,
1496
- flowBindingKey: e.flowBindingKey,
1497
- flowTimeDimension: e.flowTimeDimension,
1498
- startingStep: e.startingStep,
1499
- stepsBefore: e.stepsBefore,
1500
- stepsAfter: e.stepsAfter,
1501
- eventDimension: e.eventDimension,
1502
- joinStrategy: e.joinStrategy || "auto"
1503
- };
1504
- },
1505
- canLoad(e) {
1506
- return De(e);
1507
- },
1508
- load(e) {
1509
- if (e.analysisType !== "flow") throw Error(`Cannot load ${e.analysisType} config with flow adapter`);
1510
- return Ee(e.query);
1511
- },
1512
- save(e, t, n) {
1513
- return {
1514
- version: 1,
1515
- analysisType: "flow",
1516
- activeView: n,
1517
- charts: { flow: t.flow || this.getDefaultChartConfig() },
1518
- query: Te(e)
1519
- };
1520
- },
1521
- validate(e) {
1522
- let t = [], n = [];
1523
- 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 && ![
1524
- "auto",
1525
- "lateral",
1526
- "window"
1527
- ].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"), {
1528
- isValid: t.length === 0,
1529
- errors: t,
1530
- warnings: n
1531
- };
1532
- },
1533
- clear(e) {
1534
- return {
1535
- ...this.createInitial(),
1536
- flowCube: e.flowCube
1537
- };
1538
- },
1539
- getDefaultChartConfig() {
1540
- return {
1541
- chartType: "sankey",
1542
- chartConfig: {},
1543
- displayConfig: {
1544
- showLegend: !0,
1545
- showGrid: !1,
1546
- showTooltip: !0
1547
- }
1548
- };
1549
- }
1550
- };
1551
- //#endregion
1552
- //#region src/client/adapters/retentionModeAdapter.ts
1553
- function ke(e) {
1554
- let t = "";
1555
- e.retentionBindingKey && (typeof e.retentionBindingKey.dimension == "string" ? t = e.retentionBindingKey.dimension : Array.isArray(e.retentionBindingKey.dimension) && (t = e.retentionBindingKey.dimension.map((e) => ({
1556
- cube: e.cube,
1557
- dimension: e.dimension
1558
- }))));
1559
- let n = { retention: {
1560
- timeDimension: e.retentionTimeDimension || "",
1561
- bindingKey: t,
1562
- dateRange: e.retentionDateRange,
1563
- granularity: e.retentionViewGranularity,
1564
- periods: e.retentionPeriods,
1565
- retentionType: e.retentionType
1566
- } };
1567
- 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;
1568
- }
1569
- function Ae(e) {
1570
- let { retention: t } = e, n = null;
1571
- if (typeof t.timeDimension == "string") {
1572
- let e = t.timeDimension.split(".");
1573
- e.length > 0 && (n = e[0]);
1574
- } else t.timeDimension?.cube && (n = t.timeDimension.cube);
1575
- let r = null;
1576
- t.bindingKey && (typeof t.bindingKey == "string" ? r = { dimension: t.bindingKey } : Array.isArray(t.bindingKey) && (r = { dimension: t.bindingKey.map((e) => ({
1577
- cube: e.cube,
1578
- dimension: e.dimension
1579
- })) }));
1580
- let i = null;
1581
- t.timeDimension && (i = typeof t.timeDimension == "string" ? t.timeDimension : `${t.timeDimension.cube}.${t.timeDimension.dimension}`);
1582
- let a = [];
1583
- t.cohortFilters && (a = Array.isArray(t.cohortFilters) ? t.cohortFilters : [t.cohortFilters]);
1584
- let o = [];
1585
- t.activityFilters && (o = Array.isArray(t.activityFilters) ? t.activityFilters : [t.activityFilters]);
1586
- let c = [];
1587
- t.breakdownDimensions && Array.isArray(t.breakdownDimensions) && (c = t.breakdownDimensions.map((e) => ({
1588
- field: e,
1589
- label: e.split(".").pop() || e
1590
- })));
1591
- let l = t.dateRange || s("last_3_months");
1592
- return {
1593
- retentionCube: n,
1594
- retentionBindingKey: r,
1595
- retentionTimeDimension: i,
1596
- retentionDateRange: l,
1597
- retentionViewGranularity: t.granularity,
1598
- retentionPeriods: t.periods,
1599
- retentionType: t.retentionType,
1600
- retentionCohortFilters: a,
1601
- retentionActivityFilters: o,
1602
- retentionBreakdowns: c
1603
- };
1604
- }
1605
- function je(e) {
1606
- if (!e || typeof e != "object") return !1;
1607
- let t = e;
1608
- if (t.version !== 1 || t.analysisType !== "retention" || !t.query || typeof t.query != "object") return !1;
1609
- let n = t.query;
1610
- return !(!n.retention || typeof n.retention != "object");
1611
- }
1612
- var Me = {
1613
- type: "retention",
1614
- createInitial() {
1615
- return { ...a };
1616
- },
1617
- extractState(e) {
1618
- return {
1619
- retentionCube: e.retentionCube,
1620
- retentionBindingKey: e.retentionBindingKey,
1621
- retentionTimeDimension: e.retentionTimeDimension,
1622
- retentionDateRange: e.retentionDateRange || s("last_3_months"),
1623
- retentionViewGranularity: e.retentionViewGranularity || "week",
1624
- retentionPeriods: e.retentionPeriods || 12,
1625
- retentionType: e.retentionType || "classic",
1626
- retentionCohortFilters: e.retentionCohortFilters || [],
1627
- retentionActivityFilters: e.retentionActivityFilters || [],
1628
- retentionBreakdowns: e.retentionBreakdowns || []
1629
- };
1630
- },
1631
- canLoad(e) {
1632
- return je(e);
1633
- },
1634
- load(e) {
1635
- if (e.analysisType !== "retention") throw Error(`Cannot load ${e.analysisType} config with retention adapter`);
1636
- return Ae(e.query);
1637
- },
1638
- save(e, t, n) {
1639
- return {
1640
- version: 1,
1641
- analysisType: "retention",
1642
- activeView: n,
1643
- charts: { retention: t.retention || this.getDefaultChartConfig() },
1644
- query: ke(e)
1645
- };
1646
- },
1647
- validate(e) {
1648
- let t = [], n = [];
1649
- 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");
1650
- else {
1651
- let n = new Date(e.retentionDateRange.start), r = new Date(e.retentionDateRange.end);
1652
- 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");
1653
- }
1654
- 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\""), {
1655
- isValid: t.length === 0,
1656
- errors: t,
1657
- warnings: n
1658
- };
1659
- },
1660
- clear(e) {
1661
- return {
1662
- ...this.createInitial(),
1663
- retentionCube: e.retentionCube,
1664
- retentionDateRange: e.retentionDateRange
1665
- };
1666
- },
1667
- getDefaultChartConfig() {
1668
- return {
1669
- chartType: "retentionCombined",
1670
- chartConfig: {},
1671
- displayConfig: {
1672
- showLegend: !0,
1673
- showTooltip: !0,
1674
- showGrid: !0,
1675
- retentionDisplayMode: "combined"
1676
- }
1677
- };
1678
- }
1679
- };
1680
- //#endregion
1681
- //#region src/client/components/AnalysisBuilder/AnalysisDisplayConfigPanel.tsx
1682
- function Ne({ label: e, value: t, onChange: n, placeholder: r, description: i }) {
1683
- let [a, o] = v(() => t.join("\n"));
1684
- h(() => {
1685
- o(t.join("\n"));
1686
- }, [t]);
1687
- let s = m(() => {
1688
- n(a.split("\n").map((e) => e.trim()).filter((e) => e.length > 0));
1689
- }, [a, n]);
1690
- return /* @__PURE__ */ x("div", {
1691
- className: "dc:space-y-1",
1692
- children: [
1693
- /* @__PURE__ */ b("label", {
1694
- className: "dc:text-sm text-dc-text-secondary",
1695
- children: e
1696
- }),
1697
- /* @__PURE__ */ b("textarea", {
1698
- value: a,
1699
- onChange: (e) => o(e.target.value),
1700
- onBlur: s,
1701
- placeholder: r,
1702
- rows: 4,
1703
- 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"
1704
- }),
1705
- i && /* @__PURE__ */ b("p", {
1706
- className: "dc:text-xs text-dc-text-muted",
1707
- children: i
1708
- })
1709
- ]
1710
- });
1711
- }
1712
- function Pe({ chartType: e, displayConfig: t, colorPalette: r, onDisplayConfigChange: a, excludeKeys: o }) {
1713
- let { t: s } = i(), { config: c, loaded: l } = n(e);
1714
- return l ? c.displayOptions && c.displayOptions.length > 0 || c.displayOptionsConfig && c.displayOptionsConfig.length > 0 ? /* @__PURE__ */ b("div", {
1715
- className: "dc:space-y-6",
1716
- children: /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b(u, {
1717
- className: "dc:mb-2",
1718
- children: s("display.heading")
1719
- }), /* @__PURE__ */ x("div", {
1720
- className: "dc:space-y-2",
1721
- children: [
1722
- c.displayOptions?.includes("showLegend") && /* @__PURE__ */ x("label", {
1723
- className: "dc:flex dc:items-center dc:space-x-2",
1724
- children: [/* @__PURE__ */ b("input", {
1725
- type: "checkbox",
1726
- checked: t.showLegend ?? !0,
1727
- onChange: (e) => a({
1728
- ...t,
1729
- showLegend: e.target.checked
1730
- }),
1731
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
1732
- style: { color: "var(--dc-primary)" }
1733
- }), /* @__PURE__ */ b("span", {
1734
- className: "dc:text-sm text-dc-text",
1735
- children: s("display.showLegend")
1736
- })]
1737
- }),
1738
- c.displayOptions?.includes("showGrid") && /* @__PURE__ */ x("label", {
1739
- className: "dc:flex dc:items-center dc:space-x-2",
1740
- children: [/* @__PURE__ */ b("input", {
1741
- type: "checkbox",
1742
- checked: t.showGrid ?? !0,
1743
- onChange: (e) => a({
1744
- ...t,
1745
- showGrid: e.target.checked
1746
- }),
1747
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
1748
- style: { color: "var(--dc-primary)" }
1749
- }), /* @__PURE__ */ b("span", {
1750
- className: "dc:text-sm text-dc-text",
1751
- children: s("display.showGrid")
1752
- })]
1753
- }),
1754
- c.displayOptions?.includes("showTooltip") && /* @__PURE__ */ x("label", {
1755
- className: "dc:flex dc:items-center dc:space-x-2",
1756
- children: [/* @__PURE__ */ b("input", {
1757
- type: "checkbox",
1758
- checked: t.showTooltip ?? !0,
1759
- onChange: (e) => a({
1760
- ...t,
1761
- showTooltip: e.target.checked
1762
- }),
1763
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
1764
- style: { color: "var(--dc-primary)" }
1765
- }), /* @__PURE__ */ b("span", {
1766
- className: "dc:text-sm text-dc-text",
1767
- children: s("display.showTooltip")
1768
- })]
1769
- }),
1770
- c.displayOptions?.includes("stacked") && /* @__PURE__ */ x("label", {
1771
- className: "dc:flex dc:items-center dc:space-x-2",
1772
- children: [/* @__PURE__ */ b("input", {
1773
- type: "checkbox",
1774
- checked: t.stacked ?? !1,
1775
- onChange: (e) => a({
1776
- ...t,
1777
- stacked: e.target.checked
1778
- }),
1779
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
1780
- style: { color: "var(--dc-primary)" }
1781
- }), /* @__PURE__ */ b("span", {
1782
- className: "dc:text-sm text-dc-text",
1783
- children: s("display.stacked")
1784
- })]
1785
- }),
1786
- c.displayOptions?.includes("showAllXLabels") && /* @__PURE__ */ x("label", {
1787
- className: "dc:flex dc:items-center dc:space-x-2",
1788
- children: [/* @__PURE__ */ b("input", {
1789
- type: "checkbox",
1790
- checked: t.showAllXLabels ?? !0,
1791
- onChange: (e) => a({
1792
- ...t,
1793
- showAllXLabels: e.target.checked
1794
- }),
1795
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
1796
- style: { color: "var(--dc-primary)" }
1797
- }), /* @__PURE__ */ b("span", {
1798
- className: "dc:text-sm text-dc-text",
1799
- children: s("chart.option.showAllXLabels.label")
1800
- })]
1801
- }),
1802
- c.displayOptions?.includes("hideHeader") && /* @__PURE__ */ x("label", {
1803
- className: "dc:flex dc:items-center dc:space-x-2",
1804
- children: [/* @__PURE__ */ b("input", {
1805
- type: "checkbox",
1806
- checked: t.hideHeader ?? !1,
1807
- onChange: (e) => a({
1808
- ...t,
1809
- hideHeader: e.target.checked
1810
- }),
1811
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
1812
- style: { color: "var(--dc-primary)" }
1813
- }), /* @__PURE__ */ b("span", {
1814
- className: "dc:text-sm text-dc-text",
1815
- children: s("display.hideHeader")
1816
- })]
1817
- }),
1818
- c.displayOptionsConfig?.filter((e) => !o?.includes(e.key)).map((e) => /* @__PURE__ */ x("div", {
1819
- className: `dc:space-y-1 ${e.type === "axisFormat" ? "dc:mt-6 dc:pt-2" : ""}`,
1820
- children: [
1821
- e.type === "boolean" && /* @__PURE__ */ x("label", {
1822
- className: "dc:flex dc:items-center dc:space-x-2",
1823
- children: [/* @__PURE__ */ b("input", {
1824
- type: "checkbox",
1825
- checked: t[e.key] ?? e.defaultValue ?? !1,
1826
- onChange: (n) => a({
1827
- ...t,
1828
- [e.key]: n.target.checked
1829
- }),
1830
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
1831
- style: { color: "var(--dc-primary)" }
1832
- }), /* @__PURE__ */ b("span", {
1833
- className: "dc:text-sm text-dc-text",
1834
- children: s(e.label)
1835
- })]
1836
- }),
1837
- e.type === "string" && /* @__PURE__ */ x("div", {
1838
- className: "dc:space-y-1",
1839
- children: [
1840
- /* @__PURE__ */ x("label", {
1841
- className: "dc:text-sm text-dc-text-secondary",
1842
- children: [s(e.label), e.key === "content" && /* @__PURE__ */ b("span", {
1843
- className: "dc:text-xs text-dc-text-muted dc:ml-1",
1844
- children: "(only headers, lists and links)"
1845
- })]
1846
- }),
1847
- e.key === "content" ? /* @__PURE__ */ b("textarea", {
1848
- value: t[e.key] ?? e.defaultValue ?? "",
1849
- onChange: (n) => a({
1850
- ...t,
1851
- [e.key]: n.target.value
1852
- }),
1853
- placeholder: e.placeholder,
1854
- rows: 8,
1855
- 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"
1856
- }) : /* @__PURE__ */ b("input", {
1857
- type: "text",
1858
- value: t[e.key] ?? e.defaultValue ?? "",
1859
- onChange: (n) => a({
1860
- ...t,
1861
- [e.key]: n.target.value
1862
- }),
1863
- placeholder: e.placeholder,
1864
- 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"
1865
- }),
1866
- e.description && /* @__PURE__ */ b("p", {
1867
- className: "dc:text-xs text-dc-text-muted",
1868
- children: s(e.description)
1869
- })
1870
- ]
1871
- }),
1872
- e.type === "paletteColor" && /* @__PURE__ */ x("div", {
1873
- className: "dc:space-y-1",
1874
- children: [
1875
- /* @__PURE__ */ b("label", {
1876
- className: "dc:text-sm text-dc-text-secondary",
1877
- children: s(e.label)
1878
- }),
1879
- /* @__PURE__ */ b("div", {
1880
- className: "dc:flex dc:flex-wrap dc:gap-2",
1881
- children: r?.colors.map((n, r) => {
1882
- let i = (t[e.key] ?? e.defaultValue ?? 0) === r;
1883
- return /* @__PURE__ */ b("button", {
1884
- type: "button",
1885
- onClick: () => a({
1886
- ...t,
1887
- [e.key]: r
1888
- }),
1889
- 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 ${i ? "dc:ring-2 dc:ring-offset-1 dc:scale-110" : "hover:border-dc-text-muted"}`,
1890
- style: {
1891
- backgroundColor: n,
1892
- borderColor: i ? "var(--dc-primary)" : "var(--dc-border)"
1893
- },
1894
- title: `Color ${r + 1}: ${n}`
1895
- }, r);
1896
- }) || [/* @__PURE__ */ b("button", {
1897
- type: "button",
1898
- onClick: () => a({
1899
- ...t,
1900
- [e.key]: 0
1901
- }),
1902
- className: "dc:w-8 dc:h-8 dc:rounded-sm dc:border-2 dc:ring-2 dc:ring-offset-1",
1903
- style: {
1904
- backgroundColor: "#8884d8",
1905
- borderColor: "var(--dc-primary)",
1906
- boxShadow: "0 0 0 2px var(--dc-primary)"
1907
- },
1908
- title: "Default Color"
1909
- }, 0)]
1910
- }),
1911
- e.description && /* @__PURE__ */ b("p", {
1912
- className: "dc:text-xs text-dc-text-muted",
1913
- children: s(e.description)
1914
- })
1915
- ]
1916
- }),
1917
- e.type === "number" && /* @__PURE__ */ x("div", {
1918
- className: "dc:space-y-1",
1919
- children: [
1920
- /* @__PURE__ */ b("label", {
1921
- className: "dc:text-sm text-dc-text-secondary",
1922
- children: s(e.label)
1923
- }),
1924
- /* @__PURE__ */ b("input", {
1925
- type: "number",
1926
- value: t[e.key] ?? e.defaultValue ?? 0,
1927
- onChange: (n) => a({
1928
- ...t,
1929
- [e.key]: n.target.value === "" ? void 0 : Number(n.target.value)
1930
- }),
1931
- placeholder: e.placeholder,
1932
- min: e.min,
1933
- max: e.max,
1934
- step: e.step,
1935
- 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"
1936
- }),
1937
- e.description && /* @__PURE__ */ b("p", {
1938
- className: "dc:text-xs text-dc-text-muted",
1939
- children: s(e.description)
1940
- })
1941
- ]
1942
- }),
1943
- e.type === "select" && /* @__PURE__ */ x("div", {
1944
- className: "dc:space-y-1",
1945
- children: [
1946
- /* @__PURE__ */ b("label", {
1947
- className: "dc:text-sm text-dc-text-secondary",
1948
- children: s(e.label)
1949
- }),
1950
- /* @__PURE__ */ b("select", {
1951
- value: t[e.key] ?? e.defaultValue ?? "",
1952
- onChange: (n) => a({
1953
- ...t,
1954
- [e.key]: n.target.value
1955
- }),
1956
- 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",
1957
- children: e.options?.map((e) => /* @__PURE__ */ b("option", {
1958
- value: e.value,
1959
- children: s(e.label)
1960
- }, e.value))
1961
- }),
1962
- e.description && /* @__PURE__ */ b("p", {
1963
- className: "dc:text-xs text-dc-text-muted",
1964
- children: s(e.description)
1965
- })
1966
- ]
1967
- }),
1968
- e.type === "color" && /* @__PURE__ */ x("div", {
1969
- className: "dc:space-y-1",
1970
- children: [
1971
- /* @__PURE__ */ b("label", {
1972
- className: "dc:text-sm text-dc-text-secondary",
1973
- children: s(e.label)
1974
- }),
1975
- /* @__PURE__ */ x("div", {
1976
- className: "dc:flex dc:items-center dc:space-x-2",
1977
- children: [/* @__PURE__ */ b("input", {
1978
- type: "color",
1979
- value: t[e.key] ?? e.defaultValue ?? "#8884d8",
1980
- onChange: (n) => a({
1981
- ...t,
1982
- [e.key]: n.target.value
1983
- }),
1984
- className: "dc:w-12 dc:h-8 dc:border border-dc-border dc:rounded-sm dc:cursor-pointer"
1985
- }), /* @__PURE__ */ b("input", {
1986
- type: "text",
1987
- value: t[e.key] ?? e.defaultValue ?? "#8884d8",
1988
- onChange: (n) => a({
1989
- ...t,
1990
- [e.key]: n.target.value
1991
- }),
1992
- placeholder: e.placeholder || "#8884d8",
1993
- 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"
1994
- })]
1995
- }),
1996
- e.description && /* @__PURE__ */ b("p", {
1997
- className: "dc:text-xs text-dc-text-muted",
1998
- children: s(e.description)
1999
- })
2000
- ]
2001
- }),
2002
- e.type === "axisFormat" && /* @__PURE__ */ b(d, {
2003
- axisLabel: s(e.label),
2004
- value: t[e.key] || {},
2005
- onChange: (n) => a({
2006
- ...t,
2007
- [e.key]: Object.keys(n).length > 0 ? n : void 0
2008
- })
2009
- }),
2010
- e.type === "stringArray" && /* @__PURE__ */ b(Ne, {
2011
- label: s(e.label),
2012
- value: t[e.key] ?? [],
2013
- onChange: (n) => a({
2014
- ...t,
2015
- [e.key]: n.length > 0 ? n : void 0
2016
- }),
2017
- placeholder: e.placeholder,
2018
- description: e.description ? s(e.description) : void 0
2019
- }),
2020
- e.type === "buttonGroup" && /* @__PURE__ */ x("div", {
2021
- className: "dc:space-y-1",
2022
- children: [
2023
- /* @__PURE__ */ b("label", {
2024
- className: "dc:text-sm text-dc-text-secondary",
2025
- children: s(e.label)
2026
- }),
2027
- /* @__PURE__ */ b("div", {
2028
- className: "dc:flex dc:border border-dc-border dc:rounded-sm dc:overflow-hidden",
2029
- children: e.options?.map((n) => /* @__PURE__ */ b("button", {
2030
- type: "button",
2031
- onClick: () => a({
2032
- ...t,
2033
- [e.key]: n.value
2034
- }),
2035
- className: `dc:flex-1 dc:px-3 dc:py-1.5 dc:text-sm dc:font-medium dc:transition-colors ${(t[e.key] ?? e.defaultValue) === n.value ? "bg-dc-primary text-white" : "bg-dc-surface text-dc-text hover:bg-dc-border"}`,
2036
- children: s(n.label)
2037
- }, n.value))
2038
- }),
2039
- e.description && /* @__PURE__ */ b("p", {
2040
- className: "dc:text-xs text-dc-text-muted",
2041
- children: s(e.description)
2042
- })
2043
- ]
2044
- })
2045
- ]
2046
- }, e.key))
2047
- ]
2048
- })] })
2049
- }) : /* @__PURE__ */ b("div", {
2050
- className: "dc:text-center text-dc-text-muted dc:text-sm dc:py-4",
2051
- children: /* @__PURE__ */ b("p", { children: s("display.noOptions") })
2052
- }) : /* @__PURE__ */ b("div", {
2053
- className: "dc:text-center text-dc-text-muted dc:text-sm dc:py-4",
2054
- children: s("display.loading")
2055
- });
2056
- }
2057
- //#endregion
2058
- //#region src/client/components/ConfirmModal.tsx
2059
- var Fe = ({ isOpen: e, onClose: t, onConfirm: n, title: r, message: a, confirmText: o, cancelText: s, confirmVariant: c = "primary", isLoading: l = !1 }) => {
2060
- let { t: u } = i(), d = r ?? u("common.actions.confirm"), f = o ?? u("common.actions.confirm"), p = s ?? u("common.actions.cancel");
2061
- return /* @__PURE__ */ b(J, {
2062
- isOpen: e,
2063
- onClose: t,
2064
- title: d,
2065
- size: "sm",
2066
- closeOnBackdropClick: !l,
2067
- closeOnEscape: !l,
2068
- footer: /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("button", {
2069
- type: "button",
2070
- onClick: t,
2071
- disabled: l,
2072
- 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",
2073
- children: p
2074
- }), /* @__PURE__ */ b("button", {
2075
- type: "button",
2076
- onClick: async () => {
2077
- await n(), t();
2078
- },
2079
- disabled: l,
2080
- className: (() => {
2081
- 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";
2082
- switch (c) {
2083
- case "danger": return `${e} bg-dc-danger dc:text-white dc:hover:bg-dc-danger/90 focus:ring-dc-danger`;
2084
- case "warning": return `${e} bg-dc-warning dc:text-white dc:hover:bg-dc-warning/90 focus:ring-dc-warning`;
2085
- default: return `${e} bg-dc-primary dc:text-white dc:hover:bg-dc-primary/90 focus:ring-dc-primary`;
2086
- }
2087
- })(),
2088
- children: l ? /* @__PURE__ */ x("span", {
2089
- className: "dc:flex dc:items-center dc:gap-2",
2090
- children: [/* @__PURE__ */ x("svg", {
2091
- className: "dc:animate-spin dc:h-4 dc:w-4",
2092
- xmlns: "http://www.w3.org/2000/svg",
2093
- fill: "none",
2094
- viewBox: "0 0 24 24",
2095
- children: [/* @__PURE__ */ b("circle", {
2096
- className: "dc:opacity-25",
2097
- cx: "12",
2098
- cy: "12",
2099
- r: "10",
2100
- stroke: "currentColor",
2101
- strokeWidth: "4"
2102
- }), /* @__PURE__ */ b("path", {
2103
- className: "dc:opacity-75",
2104
- fill: "currentColor",
2105
- 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"
2106
- })]
2107
- }), u("common.modal.processing")]
2108
- }) : f
2109
- })] }),
2110
- children: /* @__PURE__ */ b("div", {
2111
- className: "text-dc-text-secondary",
2112
- children: a
2113
- })
2114
- });
2115
- }, Ie = e("chevronDown");
2116
- function Le({ currentPalette: e = "default", onPaletteChange: t, className: n = "" }) {
2117
- let [r, i] = v(!1), a = _(null), o = q(e);
2118
- h(() => {
2119
- function e(e) {
2120
- a.current && !a.current.contains(e.target) && i(!1);
2121
- }
2122
- if (r) return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
2123
- }, [r]);
2124
- let s = (e) => {
2125
- t(e), i(!1);
2126
- };
2127
- return /* @__PURE__ */ x("div", {
2128
- className: `dc:relative ${n}`,
2129
- ref: a,
2130
- children: [/* @__PURE__ */ x("button", {
2131
- type: "button",
2132
- onClick: () => i(!r),
2133
- 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",
2134
- children: [
2135
- /* @__PURE__ */ x("div", {
2136
- className: "dc:hidden dc:md:flex dc:items-center dc:gap-1.5",
2137
- children: [
2138
- /* @__PURE__ */ b("div", {
2139
- className: "dc:flex dc:gap-0.5",
2140
- children: o.colors.slice(0, 4).map((e, t) => /* @__PURE__ */ b("div", {
2141
- className: "dc:w-3 dc:h-3 rounded-xs dc:border border-dc-border",
2142
- style: { backgroundColor: e },
2143
- title: `Series Color ${t + 1}`
2144
- }, t))
2145
- }),
2146
- /* @__PURE__ */ b("span", {
2147
- className: "dc:text-xs text-dc-text-secondary",
2148
- children: "|"
2149
- }),
2150
- /* @__PURE__ */ b("div", {
2151
- className: "dc:flex dc:gap-0.5",
2152
- children: o.gradient.slice(0, 3).map((e, t) => /* @__PURE__ */ b("div", {
2153
- 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",
2154
- style: {
2155
- backgroundColor: e,
2156
- borderColor: "var(--dc-border)"
2157
- },
2158
- title: `Gradient Color ${t + 1}`
2159
- }, t))
2160
- })
2161
- ]
2162
- }),
2163
- /* @__PURE__ */ b("span", { children: o.label }),
2164
- /* @__PURE__ */ b(Ie, { className: `dc:w-4 dc:h-4 dc:transition-transform ${r ? "dc:rotate-180" : ""}` })
2165
- ]
2166
- }), r && /* @__PURE__ */ b("div", {
2167
- 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",
2168
- children: /* @__PURE__ */ b("div", {
2169
- className: "dc:py-1",
2170
- children: K.slice().sort((e, t) => e.label.localeCompare(t.label)).map((t) => /* @__PURE__ */ b("button", {
2171
- type: "button",
2172
- onClick: () => s(t.name),
2173
- 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"}`,
2174
- style: t.name === e ? { color: "var(--dc-primary)" } : void 0,
2175
- children: /* @__PURE__ */ x("div", {
2176
- className: "dc:flex dc:items-center dc:gap-3",
2177
- children: [
2178
- /* @__PURE__ */ x("div", {
2179
- className: "dc:hidden dc:md:flex dc:items-center dc:gap-2",
2180
- children: [
2181
- /* @__PURE__ */ b("div", {
2182
- className: "dc:flex dc:gap-0.5",
2183
- children: t.colors.slice(0, 6).map((e, t) => /* @__PURE__ */ b("div", {
2184
- className: "dc:w-3 dc:h-3 rounded-xs dc:border border-dc-border",
2185
- style: { backgroundColor: e }
2186
- }, `series-${t}`))
2187
- }),
2188
- /* @__PURE__ */ b("div", { className: "dc:w-px dc:h-4 bg-dc-border" }),
2189
- /* @__PURE__ */ b("div", {
2190
- className: "dc:flex",
2191
- children: t.gradient.map((e, t) => /* @__PURE__ */ b("div", {
2192
- className: "dc:w-2 dc:h-4 dc:first:rounded-l-sm dc:last:rounded-r-sm",
2193
- style: { backgroundColor: e }
2194
- }, `gradient-${t}`))
2195
- })
2196
- ]
2197
- }),
2198
- /* @__PURE__ */ b("span", {
2199
- className: "dc:font-medium",
2200
- children: t.label
2201
- }),
2202
- t.name === e && /* @__PURE__ */ b("div", {
2203
- className: "dc:ml-auto",
2204
- children: /* @__PURE__ */ b("div", {
2205
- className: "dc:w-2 dc:h-2 dc:rounded-full",
2206
- style: { backgroundColor: "var(--dc-primary)" }
2207
- })
2208
- })
2209
- ]
2210
- })
2211
- }, t.name))
2212
- })
2213
- })]
2214
- });
2215
- }
2216
- //#endregion
2217
- //#region src/client/components/AnalysisBuilder/FieldSearchItem.tsx
2218
- var Re = e("check");
2219
- function ze({ field: e, isSelected: n, isFocused: i, onClick: a, onMouseEnter: o, ...s }) {
2220
- let c = () => {
2221
- if (e.fieldType === "measure") {
2222
- let n = t(e.type);
2223
- return n ? /* @__PURE__ */ b(n, { className: "dc:w-4 dc:h-4" }) : null;
2224
- } else if (e.fieldType === "timeDimension") {
2225
- let e = r("time");
2226
- return e ? /* @__PURE__ */ b(e, { className: "dc:w-4 dc:h-4" }) : null;
2227
- } else {
2228
- let e = r("dimension");
2229
- return e ? /* @__PURE__ */ b(e, { className: "dc:w-4 dc:h-4" }) : null;
2230
- }
2231
- }, l = () => e.fieldType === "measure" ? "bg-dc-measure text-dc-measure-text" : e.fieldType === "timeDimension" ? "bg-dc-time-dimension text-dc-time-dimension-text" : "bg-dc-dimension text-dc-dimension-text", u = () => e.fieldType === "measure" ? e.type.charAt(0).toUpperCase() + e.type.slice(1) : e.fieldType === "timeDimension" ? "Time" : "Dim";
2232
- return /* @__PURE__ */ x("button", {
2233
- onClick: a,
2234
- onMouseEnter: o,
2235
- 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" : n ? "bg-dc-success/10" : "hover:bg-dc-surface-hover"}`,
2236
- ...s,
2237
- children: [
2238
- /* @__PURE__ */ b("span", {
2239
- className: `dc:shrink-0 dc:w-8 dc:h-8 dc:flex dc:items-center dc:justify-center dc:rounded-md ${e.fieldType === "measure" ? "bg-dc-measure text-dc-measure-text" : e.fieldType === "timeDimension" ? "bg-dc-time-dimension text-dc-time-dimension-text" : "bg-dc-dimension text-dc-dimension-text"}`,
2240
- children: c()
2241
- }),
2242
- /* @__PURE__ */ x("div", {
2243
- className: "dc:flex-1 dc:min-w-0",
2244
- children: [/* @__PURE__ */ b("div", {
2245
- className: "dc:text-sm dc:font-medium text-dc-text dc:truncate",
2246
- children: e.title
2247
- }), /* @__PURE__ */ b("div", {
2248
- className: "dc:text-xs text-dc-text-muted dc:truncate",
2249
- children: e.name
2250
- })]
2251
- }),
2252
- /* @__PURE__ */ b("span", {
2253
- className: `dc:shrink-0 dc:px-2 dc:py-0.5 dc:rounded dc:text-xs dc:font-medium ${l()}`,
2254
- children: u()
2255
- }),
2256
- n && /* @__PURE__ */ b("span", {
2257
- 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",
2258
- children: /* @__PURE__ */ b(Re, { className: "dc:w-3 dc:h-3" })
2259
- })
2260
- ]
2261
- });
2262
- }
2263
- var $ = p(ze);
2264
- //#endregion
2265
- //#region src/client/components/AnalysisBuilder/FieldDetailPanel.tsx
2266
- function Be({ field: e }) {
2267
- let { t: n } = i();
2268
- return e ? /* @__PURE__ */ x("div", {
2269
- className: "dc:p-4",
2270
- children: [
2271
- /* @__PURE__ */ x("div", {
2272
- className: "dc:flex dc:items-start dc:gap-3 dc:mb-4",
2273
- children: [/* @__PURE__ */ b("span", {
2274
- className: `dc:shrink-0 dc:w-12 dc:h-12 dc:flex dc:items-center dc:justify-center dc:rounded-lg ${e.fieldType === "measure" ? "bg-dc-measure text-dc-measure-text" : e.fieldType === "timeDimension" ? "bg-dc-time-dimension text-dc-time-dimension-text" : "bg-dc-dimension text-dc-dimension-text"}`,
2275
- children: (() => {
2276
- if (e.fieldType === "measure") {
2277
- let n = t(e.type);
2278
- return n ? /* @__PURE__ */ b(n, { className: "dc:w-6 dc:h-6" }) : null;
2279
- } else if (e.fieldType === "timeDimension") {
2280
- let e = r("time");
2281
- return e ? /* @__PURE__ */ b(e, { className: "dc:w-6 dc:h-6" }) : null;
2282
- } else {
2283
- let e = r("dimension");
2284
- return e ? /* @__PURE__ */ b(e, { className: "dc:w-6 dc:h-6" }) : null;
2285
- }
2286
- })()
2287
- }), /* @__PURE__ */ x("div", {
2288
- className: "dc:flex-1 dc:min-w-0",
2289
- children: [/* @__PURE__ */ b("h3", {
2290
- className: "dc:text-base dc:font-semibold text-dc-text dc:leading-tight",
2291
- children: e.title
2292
- }), /* @__PURE__ */ b("p", {
2293
- className: "dc:text-xs text-dc-text-muted dc:mt-0.5 dc:truncate",
2294
- children: e.name
2295
- })]
2296
- })]
2297
- }),
2298
- e.description && /* @__PURE__ */ b("div", {
2299
- className: "dc:mb-4",
2300
- children: /* @__PURE__ */ b("p", {
2301
- className: "dc:text-sm text-dc-text-secondary dc:leading-relaxed",
2302
- children: e.description
2303
- })
2304
- }),
2305
- /* @__PURE__ */ x("div", {
2306
- className: "dc:space-y-3 dc:pt-4 dc:border-t border-dc-border",
2307
- children: [
2308
- /* @__PURE__ */ x("div", {
2309
- className: "dc:flex dc:items-center dc:justify-between",
2310
- children: [/* @__PURE__ */ b("span", {
2311
- className: "dc:text-xs text-dc-text-muted",
2312
- children: n("fieldPanel.labels.type")
2313
- }), /* @__PURE__ */ b("span", {
2314
- className: "dc:text-sm text-dc-text dc:font-medium",
2315
- children: e.fieldType === "measure" ? {
2316
- count: n("fieldTypes.count"),
2317
- countDistinct: n("fieldTypes.countDistinct"),
2318
- countDistinctApprox: n("fieldTypes.countDistinctApprox"),
2319
- sum: n("fieldTypes.sum"),
2320
- avg: n("fieldTypes.avg"),
2321
- min: n("fieldTypes.min"),
2322
- max: n("fieldTypes.max"),
2323
- runningTotal: n("fieldTypes.runningTotal"),
2324
- number: n("fieldTypes.number")
2325
- }[e.type] || e.type : e.fieldType === "timeDimension" ? n("fieldTypes.time") : {
2326
- string: n("fieldTypes.string"),
2327
- number: n("fieldTypes.number"),
2328
- boolean: n("fieldTypes.boolean"),
2329
- geo: n("fieldTypes.geo")
2330
- }[e.type] || n("fieldTypes.dimension")
2331
- })]
2332
- }),
2333
- /* @__PURE__ */ x("div", {
2334
- className: "dc:flex dc:items-center dc:justify-between",
2335
- children: [/* @__PURE__ */ b("span", {
2336
- className: "dc:text-xs text-dc-text-muted",
2337
- children: n("fieldPanel.labels.cube")
2338
- }), /* @__PURE__ */ b("span", {
2339
- className: "dc:text-sm text-dc-text dc:font-medium",
2340
- children: e.cubeName
2341
- })]
2342
- }),
2343
- /* @__PURE__ */ x("div", {
2344
- className: "dc:flex dc:items-center dc:justify-between",
2345
- children: [/* @__PURE__ */ b("span", {
2346
- className: "dc:text-xs text-dc-text-muted",
2347
- children: n("fieldPanel.labels.category")
2348
- }), /* @__PURE__ */ b("span", {
2349
- className: `dc:text-xs dc:px-2 dc:py-0.5 dc:rounded dc:font-medium ${e.fieldType === "measure" ? "bg-dc-measure text-dc-measure-text" : e.fieldType === "timeDimension" ? "bg-dc-time-dimension text-dc-time-dimension-text" : "bg-dc-dimension text-dc-dimension-text"}`,
2350
- children: n(e.fieldType === "measure" ? "fieldCategory.measure" : e.fieldType === "timeDimension" ? "fieldCategory.timeDimension" : "fieldCategory.dimension")
2351
- })]
2352
- })
2353
- ]
2354
- }),
2355
- /* @__PURE__ */ b("div", {
2356
- className: "dc:mt-6 dc:p-3 bg-dc-surface dc:rounded-lg",
2357
- children: /* @__PURE__ */ b("p", {
2358
- className: "dc:text-xs text-dc-text-muted",
2359
- children: n("fieldPanel.usageHint")
2360
- })
2361
- })
2362
- ]
2363
- }) : /* @__PURE__ */ b("div", {
2364
- className: "dc:p-6 dc:text-center text-dc-text-muted",
2365
- children: /* @__PURE__ */ b("p", {
2366
- className: "dc:text-sm",
2367
- children: n("fieldPanel.emptyState")
2368
- })
2369
- });
2370
- }
2371
- var Ve = p(Be), He = e("search"), Ue = e("close");
2372
- function We({ isOpen: e, onClose: t, onSelect: n, mode: r, schema: a, selectedFields: o, recentFields: s }) {
2373
- let { t: c } = i(), [l, u] = v(""), [d, f] = v(null), [p, y] = v(null), [S, C] = v(-1), [w, T] = v(null), E = _(null), D = _(null), O = g(() => {
2374
- if (s) return s;
2375
- let e = ve();
2376
- return r === "metrics" ? e.metrics : e.breakdowns;
2377
- }, [s, r]), k = r, A = g(() => Z(a, k), [a, k]), j = g(() => pe(a), [a]), M = g(() => de(A, l, d), [
2378
- A,
2379
- l,
2380
- d
2381
- ]), N = g(() => fe(M), [M]), P = g(() => l.trim() ? [] : be(a, k, O).filter((e) => !d || e.cubeName === d), [
2382
- a,
2383
- k,
2384
- O,
2385
- l,
2386
- d
2387
- ]), F = g(() => {
2388
- let e = [...P];
2389
- return N.forEach((t) => {
2390
- e.push(...t);
2391
- }), e;
2392
- }, [P, N]);
2393
- h(() => {
2394
- e && E.current && E.current.focus();
2395
- }, [e]), h(() => {
2396
- e || (u(""), f(null), y(null), C(-1), T(null));
2397
- }, [e]);
2398
- let I = m((e, t = !1) => {
2399
- ye(e.name, r === "metrics" ? "metrics" : "breakdowns"), n({
2400
- name: e.name,
2401
- title: e.title,
2402
- shortTitle: e.shortTitle,
2403
- type: e.type,
2404
- description: e.description
2405
- }, e.fieldType, e.cubeName, t);
2406
- }, [r, n]), L = m((e, t, n = !1) => {
2407
- if (n && w !== null && w !== t) {
2408
- let e = Math.min(w, t), n = Math.max(w, t);
2409
- for (let t = e; t <= n; t++) {
2410
- let e = F[t];
2411
- e && !o.includes(e.name) && I(e, !0);
2412
- }
2413
- } else n ? I(e, !0) : I(e, !1);
2414
- T(t);
2415
- }, [
2416
- F,
2417
- w,
2418
- I,
2419
- o
2420
- ]), R = m((e) => {
2421
- if (F.length !== 0) switch (e.key) {
2422
- case "ArrowDown":
2423
- e.preventDefault(), C((e) => {
2424
- let t = Math.min(e + 1, F.length - 1);
2425
- return y(F[t]), t;
2426
- });
2427
- break;
2428
- case "ArrowUp":
2429
- e.preventDefault(), C((e) => {
2430
- let t = Math.max(e - 1, 0);
2431
- return y(F[t]), t;
2432
- });
2433
- break;
2434
- case "Enter":
2435
- e.preventDefault(), S >= 0 && F[S] && L(F[S], S, e.shiftKey);
2436
- break;
2437
- case "Escape":
2438
- e.preventDefault(), t();
2439
- break;
2440
- }
2441
- }, [
2442
- F,
2443
- S,
2444
- L,
2445
- t
2446
- ]);
2447
- if (h(() => {
2448
- if (S >= 0 && D.current) {
2449
- let e = D.current.querySelector(`[data-field-index="${S}"]`);
2450
- e && e.scrollIntoView({
2451
- block: "nearest",
2452
- behavior: "smooth"
2453
- });
2454
- }
2455
- }, [S]), !e) return null;
2456
- let z = c(r === "metrics" ? "fieldSearch.placeholder.metrics" : r === "filter" ? "fieldSearch.placeholder.filter" : "fieldSearch.placeholder.dimensions"), B = c(r === "metrics" ? "fieldSearch.modal.title.metrics" : r === "filter" ? "fieldSearch.modal.title.filter" : "fieldSearch.modal.title.dimensions"), V = S >= 0 && F[S] ? `field-option-${F[S].name.replace(/\./g, "-")}` : void 0;
2457
- return /* @__PURE__ */ b("div", {
2458
- className: "dc:fixed dc:inset-0 dc:z-50 dc:flex dc:items-center dc:justify-center",
2459
- style: { backgroundColor: "var(--dc-overlay)" },
2460
- onClick: t,
2461
- role: "presentation",
2462
- children: /* @__PURE__ */ x("div", {
2463
- role: "dialog",
2464
- "aria-modal": "true",
2465
- "aria-label": B,
2466
- 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",
2467
- onClick: (e) => e.stopPropagation(),
2468
- onKeyDown: R,
2469
- children: [
2470
- /* @__PURE__ */ x("div", {
2471
- className: "dc:shrink-0 dc:border-b border-dc-border",
2472
- children: [/* @__PURE__ */ x("div", {
2473
- className: "dc:flex dc:items-center dc:px-4 dc:py-3 dc:gap-3",
2474
- children: [
2475
- /* @__PURE__ */ b(He, {
2476
- className: "dc:w-5 dc:h-5 text-dc-text-muted",
2477
- "aria-hidden": !0
2478
- }),
2479
- /* @__PURE__ */ b("input", {
2480
- ref: E,
2481
- type: "text",
2482
- value: l,
2483
- onChange: (e) => {
2484
- u(e.target.value), C(-1);
2485
- },
2486
- placeholder: z,
2487
- className: "dc:flex-1 bg-transparent dc:border-none dc:outline-none text-dc-text placeholder-dc-text-muted dc:text-lg",
2488
- "aria-label": z,
2489
- "aria-controls": "field-search-results",
2490
- "aria-activedescendant": V,
2491
- role: "combobox",
2492
- "aria-expanded": "true",
2493
- "aria-autocomplete": "list"
2494
- }),
2495
- /* @__PURE__ */ b("button", {
2496
- onClick: t,
2497
- className: "dc:p-1 text-dc-text-secondary hover:text-dc-text dc:rounded",
2498
- "aria-label": "Close dialog",
2499
- children: /* @__PURE__ */ b(Ue, {
2500
- className: "dc:w-5 dc:h-5",
2501
- "aria-hidden": !0
2502
- })
2503
- })
2504
- ]
2505
- }), j.length > 1 && /* @__PURE__ */ b("div", {
2506
- className: "dc:md:hidden dc:px-4 dc:pb-3",
2507
- children: /* @__PURE__ */ x("select", {
2508
- value: d || "",
2509
- onChange: (e) => f(e.target.value || null),
2510
- 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",
2511
- "aria-label": "Filter by cube",
2512
- children: [/* @__PURE__ */ b("option", {
2513
- value: "",
2514
- children: c("fieldSearch.filter.allCubes")
2515
- }), j.map((e) => /* @__PURE__ */ b("option", {
2516
- value: e,
2517
- children: Q(e, a)
2518
- }, e))]
2519
- })
2520
- })]
2521
- }),
2522
- /* @__PURE__ */ x("div", {
2523
- className: "dc:flex-1 dc:flex dc:overflow-hidden",
2524
- children: [
2525
- /* @__PURE__ */ b("nav", {
2526
- 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",
2527
- "aria-label": "Filter by cube",
2528
- children: /* @__PURE__ */ x("div", {
2529
- className: "dc:p-2",
2530
- role: "group",
2531
- "aria-label": "Cube categories",
2532
- children: [/* @__PURE__ */ b("button", {
2533
- onClick: () => f(null),
2534
- className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:rounded-md dc:text-sm dc:transition-colors ${d === null ? "bg-dc-primary/10 text-dc-primary dc:font-medium" : "text-dc-text hover:bg-dc-surface-hover"}`,
2535
- "aria-pressed": d === null,
2536
- children: c("fieldSearch.categories.all")
2537
- }), j.map((e) => /* @__PURE__ */ b("button", {
2538
- onClick: () => f(e),
2539
- className: `dc:w-full dc:text-left dc:px-3 dc:py-2 dc:rounded-md dc:text-sm dc:transition-colors dc:truncate ${d === e ? "bg-dc-primary/10 text-dc-primary dc:font-medium" : "text-dc-text hover:bg-dc-surface-hover"}`,
2540
- title: Q(e, a),
2541
- "aria-pressed": d === e,
2542
- children: Q(e, a)
2543
- }, e))]
2544
- })
2545
- }),
2546
- /* @__PURE__ */ b("div", {
2547
- id: "field-search-results",
2548
- ref: D,
2549
- className: "dc:flex-1 dc:overflow-y-auto dc:p-4",
2550
- role: "listbox",
2551
- "aria-label": "Available fields",
2552
- children: M.length === 0 && P.length === 0 ? /* @__PURE__ */ x("div", {
2553
- className: "dc:text-center dc:py-12 text-dc-text-muted",
2554
- children: [/* @__PURE__ */ b("p", {
2555
- className: "dc:text-lg dc:mb-2",
2556
- children: c("fieldSearch.empty.heading")
2557
- }), /* @__PURE__ */ b("p", {
2558
- className: "dc:text-sm",
2559
- children: l ? c(r === "metrics" ? "fieldSearch.empty.noMatchMetrics" : "fieldSearch.empty.noMatchDimensions", { searchTerm: l }) : c(r === "metrics" ? "fieldSearch.empty.noMetrics" : "fieldSearch.empty.noDimensions")
2560
- })]
2561
- }) : /* @__PURE__ */ x("div", {
2562
- className: "dc:space-y-6",
2563
- children: [P.length > 0 && /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
2564
- className: "dc:text-xs dc:font-semibold text-dc-text-muted dc:uppercase dc:tracking-wider dc:mb-2",
2565
- children: c("fieldSearch.section.recents")
2566
- }), /* @__PURE__ */ b("div", {
2567
- className: "dc:space-y-1",
2568
- children: P.map((e, t) => /* @__PURE__ */ b($, {
2569
- field: e,
2570
- isSelected: o.includes(e.name),
2571
- isFocused: S === t,
2572
- onClick: (n) => L(e, t, n.shiftKey),
2573
- onMouseEnter: () => {
2574
- y(e), C(t);
2575
- },
2576
- "data-field-index": t
2577
- }, `recent-${e.name}`))
2578
- })] }), Array.from(N.entries()).map(([e, t]) => /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
2579
- className: "dc:text-xs dc:font-semibold text-dc-text-muted dc:uppercase dc:tracking-wider dc:mb-2",
2580
- children: Q(e, a)
2581
- }), /* @__PURE__ */ b("div", {
2582
- className: "dc:space-y-1",
2583
- children: t.map((n) => {
2584
- let r = P.length + Array.from(N.entries()).slice(0, Array.from(N.keys()).indexOf(e)).reduce((e, [, t]) => e + t.length, 0) + t.indexOf(n);
2585
- return /* @__PURE__ */ b($, {
2586
- field: n,
2587
- isSelected: o.includes(n.name),
2588
- isFocused: S === r,
2589
- onClick: (e) => L(n, r, e.shiftKey),
2590
- onMouseEnter: () => {
2591
- y(n), C(r);
2592
- },
2593
- "data-field-index": r
2594
- }, n.name);
2595
- })
2596
- })] }, e))]
2597
- })
2598
- }),
2599
- /* @__PURE__ */ b("div", {
2600
- 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",
2601
- children: /* @__PURE__ */ b(Ve, { field: p })
2602
- })
2603
- ]
2604
- }),
2605
- /* @__PURE__ */ x("div", {
2606
- 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",
2607
- children: [/* @__PURE__ */ x("div", { children: [
2608
- /* @__PURE__ */ b("span", {
2609
- className: "text-dc-text-secondary",
2610
- children: M.length
2611
- }),
2612
- " ",
2613
- c(r === "metrics" ? "fieldSearch.footer.metricsAvailable" : r === "filter" ? "fieldSearch.footer.fieldsAvailable" : "fieldSearch.footer.dimensionsAvailable")
2614
- ] }), /* @__PURE__ */ x("div", {
2615
- className: "dc:hidden dc:md:flex dc:items-center dc:gap-4",
2616
- children: [
2617
- /* @__PURE__ */ x("span", { children: [
2618
- /* @__PURE__ */ b("kbd", {
2619
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2620
- children: "↑↓"
2621
- }),
2622
- " ",
2623
- c("fieldSearch.shortcut.navigate")
2624
- ] }),
2625
- /* @__PURE__ */ x("span", { children: [
2626
- /* @__PURE__ */ b("kbd", {
2627
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2628
- children: c("fieldSearch.shortcut.keyEnter")
2629
- }),
2630
- " ",
2631
- c("fieldSearch.shortcut.select")
2632
- ] }),
2633
- /* @__PURE__ */ x("span", { children: [
2634
- /* @__PURE__ */ b("kbd", {
2635
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2636
- children: c("fieldSearch.shortcut.keyShift")
2637
- }),
2638
- c("fieldSearch.shortcut.plusClick"),
2639
- " ",
2640
- c("fieldSearch.shortcut.multiSelect")
2641
- ] }),
2642
- /* @__PURE__ */ x("span", { children: [
2643
- /* @__PURE__ */ b("kbd", {
2644
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2645
- children: c("fieldSearch.shortcut.keyEsc")
2646
- }),
2647
- " ",
2648
- c("fieldSearch.shortcut.close")
2649
- ] })
2650
- ]
2651
- })]
2652
- })
2653
- ]
2654
- })
2655
- });
2656
- }
2657
- //#endregion
2658
- export { F as A, te as C, A as D, j as E, T as F, D as I, O as L, C as M, E as N, k as O, S as P, P as R, re as S, N as T, se as _, Me as a, ae as b, X as c, Y as d, le as f, ce as g, q as h, Pe as i, w as j, M as k, ue as l, K as m, Le as n, Oe as o, J as p, Fe as r, we as s, We as t, he as u, oe as v, V as w, H as x, ie as y };
2659
-
2660
- //# sourceMappingURL=FieldSearchModal-DdcbCwAi.js.map