drizzle-cube 0.5.5 → 0.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) 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/adapters/{google-CT4kgmBf.js → google-CFYljAOF.js} +1 -1
  7. package/dist/adapters/{google-Dgo9-Kb5.cjs → google-DUlXeeDA.cjs} +1 -1
  8. package/dist/adapters/{handler-C1Qs8JMY.cjs → handler-C63rJUUK.cjs} +3 -3
  9. package/dist/adapters/{handler-CoaNnZyf.js → handler-Dz1F4iwf.js} +7 -4
  10. package/dist/adapters/hono/index.cjs +1 -1
  11. package/dist/adapters/hono/index.js +4 -4
  12. package/dist/adapters/{locale-CTuvUGBs.cjs → locale-CTNwPVZI.cjs} +6 -6
  13. package/dist/adapters/{locale-wMBdZ3Ks.js → locale-gU_d1Wja.js} +19 -2
  14. package/dist/adapters/mcp-tools.cjs +1 -1
  15. package/dist/adapters/mcp-tools.js +2 -2
  16. package/dist/adapters/mcp-transport-C4J4SAcn.cjs +40 -0
  17. package/dist/adapters/mcp-transport-CVUiifEc.js +579 -0
  18. package/dist/adapters/nextjs/index.cjs +1 -1
  19. package/dist/adapters/nextjs/index.js +4 -4
  20. package/dist/adapters/{openai-BjLV_Wjx.cjs → openai-6wrBvAnv.cjs} +1 -1
  21. package/dist/adapters/openai-BDwb2u7y.cjs +17 -0
  22. package/dist/{server/openai-CLWSwD-D.js → adapters/openai-DiVskd89.js} +1 -1
  23. package/dist/{server/openai-zpXlGbbF.js → adapters/openai-y7GhJNdn.js} +2062 -928
  24. package/dist/adapters/{utils-CIRA5_JO.cjs → utils-CkEkU8Bo.cjs} +4 -4
  25. package/dist/adapters/{utils-hC7Z8V39.js → utils-DosuoabY.js} +33 -19
  26. package/dist/adapters/utils.cjs +1 -1
  27. package/dist/adapters/utils.js +1 -1
  28. package/dist/client/charts.js +13 -13
  29. package/dist/client/chunks/{DashboardEditModal-DayTXEH0.js → DashboardEditModal-6KRE36mm.js} +6232 -3454
  30. package/dist/client/chunks/DashboardEditModal-6KRE36mm.js.map +1 -0
  31. package/dist/client/chunks/{RetentionCombinedChart-D3dRmoos.js → RetentionCombinedChart-CCpu0C-s.js} +4 -4
  32. package/dist/client/chunks/{RetentionCombinedChart-D3dRmoos.js.map → RetentionCombinedChart-CCpu0C-s.js.map} +1 -1
  33. package/dist/client/chunks/{RetentionHeatmap-DHPnn0qH.js → RetentionHeatmap-B24PiIfr.js} +3 -3
  34. package/dist/client/chunks/{RetentionHeatmap-DHPnn0qH.js.map → RetentionHeatmap-B24PiIfr.js.map} +1 -1
  35. package/dist/client/chunks/{af-ZA-BtTNqvHF.js → af-ZA-BTaChuqI.js} +3 -1
  36. package/dist/client/chunks/af-ZA-BTaChuqI.js.map +1 -0
  37. package/dist/client/chunks/{analysis-builder-shared-6BRZcEnu.js → analysis-builder-shared-x576-O5p.js} +289 -289
  38. package/dist/client/chunks/{analysis-builder-shared-6BRZcEnu.js.map → analysis-builder-shared-x576-O5p.js.map} +1 -1
  39. package/dist/client/chunks/{analysis-builder-lcGl099d.js → analysis-builder-zd48FVJO.js} +244 -244
  40. package/dist/client/chunks/{analysis-builder-lcGl099d.js.map → analysis-builder-zd48FVJO.js.map} +1 -1
  41. package/dist/client/chunks/{chart-activity-grid-BnY-jaoa.js → chart-activity-grid-CiHrLH6Y.js} +8 -6
  42. package/dist/client/chunks/chart-activity-grid-CiHrLH6Y.js.map +1 -0
  43. package/dist/client/chunks/{chart-area-G3OvLLK4.js → chart-area-CXFK-Grv.js} +39 -38
  44. package/dist/client/chunks/chart-area-CXFK-Grv.js.map +1 -0
  45. package/dist/client/chunks/{chart-bar-MLIWiLrc.js → chart-bar-DKXfLoGG.js} +53 -52
  46. package/dist/client/chunks/chart-bar-DKXfLoGG.js.map +1 -0
  47. package/dist/client/chunks/{chart-box-plot-c2XqKTWq.js → chart-box-plot-Bu9hy-17.js} +3 -3
  48. package/dist/client/chunks/{chart-box-plot-c2XqKTWq.js.map → chart-box-plot-Bu9hy-17.js.map} +1 -1
  49. package/dist/client/chunks/{chart-bubble-CAGvnYb1.js → chart-bubble-DGkTQlxM.js} +3 -3
  50. package/dist/client/chunks/{chart-bubble-CAGvnYb1.js.map → chart-bubble-DGkTQlxM.js.map} +1 -1
  51. package/dist/client/chunks/{chart-candlestick-oSPk-KQp.js → chart-candlestick-Dau5AF4E.js} +3 -3
  52. package/dist/client/chunks/{chart-candlestick-oSPk-KQp.js.map → chart-candlestick-Dau5AF4E.js.map} +1 -1
  53. package/dist/client/chunks/{chart-config-activity-grid-Dssynumw.js → chart-config-activity-grid-D_UX4NHC.js} +2 -2
  54. package/dist/client/chunks/{chart-config-activity-grid-Dssynumw.js.map → chart-config-activity-grid-D_UX4NHC.js.map} +1 -1
  55. package/dist/client/chunks/{chart-config-area-40fbx2Ah.js → chart-config-area-Bq_UsW3x.js} +3 -2
  56. package/dist/client/chunks/chart-config-area-Bq_UsW3x.js.map +1 -0
  57. package/dist/client/chunks/{chart-config-bar-CUWHwOPN.js → chart-config-bar-_JEGZnAu.js} +3 -2
  58. package/dist/client/chunks/chart-config-bar-_JEGZnAu.js.map +1 -0
  59. package/dist/client/chunks/{chart-config-box-plot-D3Y0ien3.js → chart-config-box-plot-DJ-dWWXA.js} +2 -2
  60. package/dist/client/chunks/{chart-config-box-plot-D3Y0ien3.js.map → chart-config-box-plot-DJ-dWWXA.js.map} +1 -1
  61. package/dist/client/chunks/{chart-config-bubble-BXSTKLn-.js → chart-config-bubble-gIoqVyjZ.js} +2 -2
  62. package/dist/client/chunks/{chart-config-bubble-BXSTKLn-.js.map → chart-config-bubble-gIoqVyjZ.js.map} +1 -1
  63. package/dist/client/chunks/{chart-config-candlestick-DEuD2Av0.js → chart-config-candlestick-N6DchAA3.js} +2 -2
  64. package/dist/client/chunks/{chart-config-candlestick-DEuD2Av0.js.map → chart-config-candlestick-N6DchAA3.js.map} +1 -1
  65. package/dist/client/chunks/{chart-config-data-table-BQXSn4b_.js → chart-config-data-table-d7VBY-y_.js} +2 -2
  66. package/dist/client/chunks/{chart-config-data-table-BQXSn4b_.js.map → chart-config-data-table-d7VBY-y_.js.map} +1 -1
  67. package/dist/client/chunks/{chart-config-funnel-BzEsHmjR.js → chart-config-funnel-DEYMcxsD.js} +2 -2
  68. package/dist/client/chunks/{chart-config-funnel-BzEsHmjR.js.map → chart-config-funnel-DEYMcxsD.js.map} +1 -1
  69. package/dist/client/chunks/{chart-config-gauge-CCva3FfA.js → chart-config-gauge-DSwC04l0.js} +2 -2
  70. package/dist/client/chunks/{chart-config-gauge-CCva3FfA.js.map → chart-config-gauge-DSwC04l0.js.map} +1 -1
  71. package/dist/client/chunks/{chart-config-heat-map-Db4Z8UUn.js → chart-config-heat-map-CfRnRNcw.js} +2 -2
  72. package/dist/client/chunks/{chart-config-heat-map-Db4Z8UUn.js.map → chart-config-heat-map-CfRnRNcw.js.map} +1 -1
  73. package/dist/client/chunks/{chart-config-kpi-delta-BfLf3iyi.js → chart-config-kpi-delta-D6BIkHL3.js} +2 -2
  74. package/dist/client/chunks/{chart-config-kpi-delta-BfLf3iyi.js.map → chart-config-kpi-delta-D6BIkHL3.js.map} +1 -1
  75. package/dist/client/chunks/{chart-config-kpi-number-DWKFc9PX.js → chart-config-kpi-number-Bx-V9a62.js} +2 -2
  76. package/dist/client/chunks/{chart-config-kpi-number-DWKFc9PX.js.map → chart-config-kpi-number-Bx-V9a62.js.map} +1 -1
  77. package/dist/client/chunks/{chart-config-kpi-text-Dr4OG6cY.js → chart-config-kpi-text-CcqC1u-8.js} +2 -2
  78. package/dist/client/chunks/{chart-config-kpi-text-Dr4OG6cY.js.map → chart-config-kpi-text-CcqC1u-8.js.map} +1 -1
  79. package/dist/client/chunks/{chart-config-line-DGYYdDw9.js → chart-config-line-Db3jDsWc.js} +3 -2
  80. package/dist/client/chunks/chart-config-line-Db3jDsWc.js.map +1 -0
  81. package/dist/client/chunks/{chart-config-markdown-C-_g_8te.js → chart-config-markdown-BtRIe8JN.js} +2 -2
  82. package/dist/client/chunks/{chart-config-markdown-C-_g_8te.js.map → chart-config-markdown-BtRIe8JN.js.map} +1 -1
  83. package/dist/client/chunks/{chart-config-measure-profile-sB3n_Azv.js → chart-config-measure-profile-DxRGa-zf.js} +2 -2
  84. package/dist/client/chunks/{chart-config-measure-profile-sB3n_Azv.js.map → chart-config-measure-profile-DxRGa-zf.js.map} +1 -1
  85. package/dist/client/chunks/{chart-config-pie-kte7OXa9.js → chart-config-pie-DD4SmRTF.js} +2 -2
  86. package/dist/client/chunks/{chart-config-pie-kte7OXa9.js.map → chart-config-pie-DD4SmRTF.js.map} +1 -1
  87. package/dist/client/chunks/{chart-config-radar-C9IxP5tc.js → chart-config-radar-CC2XAaGr.js} +2 -2
  88. package/dist/client/chunks/{chart-config-radar-C9IxP5tc.js.map → chart-config-radar-CC2XAaGr.js.map} +1 -1
  89. package/dist/client/chunks/{chart-config-radial-bar-C3WJ8Uhm.js → chart-config-radial-bar-DmxKx1R0.js} +2 -2
  90. package/dist/client/chunks/{chart-config-radial-bar-C3WJ8Uhm.js.map → chart-config-radial-bar-DmxKx1R0.js.map} +1 -1
  91. package/dist/client/chunks/{chart-config-sankey-DGAThN9i.js → chart-config-sankey-BTnWA7EW.js} +2 -2
  92. package/dist/client/chunks/{chart-config-sankey-DGAThN9i.js.map → chart-config-sankey-BTnWA7EW.js.map} +1 -1
  93. package/dist/client/chunks/{chart-config-scatter-BVN_29G5.js → chart-config-scatter-DSYTjwRb.js} +2 -2
  94. package/dist/client/chunks/{chart-config-scatter-BVN_29G5.js.map → chart-config-scatter-DSYTjwRb.js.map} +1 -1
  95. package/dist/client/chunks/{chart-config-sunburst-utejM2YS.js → chart-config-sunburst-Bwjtdf7X.js} +2 -2
  96. package/dist/client/chunks/{chart-config-sunburst-utejM2YS.js.map → chart-config-sunburst-Bwjtdf7X.js.map} +1 -1
  97. package/dist/client/chunks/{chart-config-tree-map-meeJEDi8.js → chart-config-tree-map-BI-oQStO.js} +2 -2
  98. package/dist/client/chunks/{chart-config-tree-map-meeJEDi8.js.map → chart-config-tree-map-BI-oQStO.js.map} +1 -1
  99. package/dist/client/chunks/{chart-config-waterfall-CaPeWZMl.js → chart-config-waterfall-DSnyixbI.js} +2 -2
  100. package/dist/client/chunks/{chart-config-waterfall-CaPeWZMl.js.map → chart-config-waterfall-DSnyixbI.js.map} +1 -1
  101. package/dist/client/chunks/{chart-data-table-BRXHT2H-.js → chart-data-table-Cm5jrpaw.js} +853 -843
  102. package/dist/client/chunks/chart-data-table-Cm5jrpaw.js.map +1 -0
  103. package/dist/client/chunks/{chart-funnel-aQ7G_CqU.js → chart-funnel-Eke8IPtG.js} +3 -3
  104. package/dist/client/chunks/{chart-funnel-aQ7G_CqU.js.map → chart-funnel-Eke8IPtG.js.map} +1 -1
  105. package/dist/client/chunks/{chart-gauge-DqbDKr9E.js → chart-gauge-DeRZNsyl.js} +3 -3
  106. package/dist/client/chunks/{chart-gauge-DqbDKr9E.js.map → chart-gauge-DeRZNsyl.js.map} +1 -1
  107. package/dist/client/chunks/{chart-heat-map--6QnhUM8.js → chart-heat-map-C86thSJ4.js} +3 -3
  108. package/dist/client/chunks/{chart-heat-map--6QnhUM8.js.map → chart-heat-map-C86thSJ4.js.map} +1 -1
  109. package/dist/client/chunks/{chart-kpi-delta-DOSpRjfs.js → chart-kpi-delta-CxOYD2f1.js} +74 -72
  110. package/dist/client/chunks/{chart-kpi-delta-DOSpRjfs.js.map → chart-kpi-delta-CxOYD2f1.js.map} +1 -1
  111. package/dist/client/chunks/{chart-kpi-number-BcMjeKm8.js → chart-kpi-number-C6gWz-x4.js} +65 -64
  112. package/dist/client/chunks/{chart-kpi-number-BcMjeKm8.js.map → chart-kpi-number-C6gWz-x4.js.map} +1 -1
  113. package/dist/client/chunks/{chart-kpi-text-BI9isc2i.js → chart-kpi-text-dDONrhS-.js} +27 -26
  114. package/dist/client/chunks/{chart-kpi-text-BI9isc2i.js.map → chart-kpi-text-dDONrhS-.js.map} +1 -1
  115. package/dist/client/chunks/{chart-line-C0IHQteu.js → chart-line-r4iWevKZ.js} +119 -118
  116. package/dist/client/chunks/chart-line-r4iWevKZ.js.map +1 -0
  117. package/dist/client/chunks/{chart-markdown-BmgSMqPg.js → chart-markdown-BPW-EAm9.js} +940 -943
  118. package/dist/client/chunks/chart-markdown-BPW-EAm9.js.map +1 -0
  119. package/dist/client/chunks/{chart-measure-profile-DEyLW1fd.js → chart-measure-profile-BI3kADCp.js} +4 -4
  120. package/dist/client/chunks/{chart-measure-profile-DEyLW1fd.js.map → chart-measure-profile-BI3kADCp.js.map} +1 -1
  121. package/dist/client/chunks/{chart-pie-DSIekr7p.js → chart-pie-yqH2YVEI.js} +4 -4
  122. package/dist/client/chunks/{chart-pie-DSIekr7p.js.map → chart-pie-yqH2YVEI.js.map} +1 -1
  123. package/dist/client/chunks/{chart-radar-SGl62hK8.js → chart-radar-B-_3v-rE.js} +4 -4
  124. package/dist/client/chunks/{chart-radar-SGl62hK8.js.map → chart-radar-B-_3v-rE.js.map} +1 -1
  125. package/dist/client/chunks/{chart-radial-bar-C42EykOa.js → chart-radial-bar-C0EgzfAF.js} +4 -4
  126. package/dist/client/chunks/{chart-radial-bar-C42EykOa.js.map → chart-radial-bar-C0EgzfAF.js.map} +1 -1
  127. package/dist/client/chunks/{chart-sankey-DguImp0W.js → chart-sankey-CFzjGvZX.js} +3 -3
  128. package/dist/client/chunks/{chart-sankey-DguImp0W.js.map → chart-sankey-CFzjGvZX.js.map} +1 -1
  129. package/dist/client/chunks/{chart-scatter-Doeox4OP.js → chart-scatter-DZPirzwX.js} +4 -4
  130. package/dist/client/chunks/{chart-scatter-Doeox4OP.js.map → chart-scatter-DZPirzwX.js.map} +1 -1
  131. package/dist/client/chunks/{chart-sunburst-F3tgCpL-.js → chart-sunburst-91Q2tzaB.js} +4 -4
  132. package/dist/client/chunks/{chart-sunburst-F3tgCpL-.js.map → chart-sunburst-91Q2tzaB.js.map} +1 -1
  133. package/dist/client/chunks/{chart-tree-map-DvuSCIc8.js → chart-tree-map-Bi4axCvh.js} +4 -4
  134. package/dist/client/chunks/{chart-tree-map-DvuSCIc8.js.map → chart-tree-map-Bi4axCvh.js.map} +1 -1
  135. package/dist/client/chunks/{chart-waterfall-Be5duXlO.js → chart-waterfall-DcHbbPaG.js} +4 -4
  136. package/dist/client/chunks/{chart-waterfall-Be5duXlO.js.map → chart-waterfall-DcHbbPaG.js.map} +1 -1
  137. package/dist/client/chunks/{charts-core-XlOwoP_r.js → charts-core-CrBDYN6N.js} +2 -2
  138. package/dist/client/chunks/{charts-core-XlOwoP_r.js.map → charts-core-CrBDYN6N.js.map} +1 -1
  139. package/dist/client/chunks/{core-Dk6z6kC0.js → core-DsAWNRRv.js} +87 -85
  140. package/dist/client/chunks/{core-Dk6z6kC0.js.map → core-DsAWNRRv.js.map} +1 -1
  141. package/dist/client/chunks/{dist-eZurnOde.js → dist-zPWyTBdU.js} +38 -32
  142. package/dist/client/chunks/dist-zPWyTBdU.js.map +1 -0
  143. package/dist/client/chunks/{en-US-5xPTdCXg.js → en-US-BE6VoG0o.js} +1 -1
  144. package/dist/client/chunks/{en-US-5xPTdCXg.js.map → en-US-BE6VoG0o.js.map} +1 -1
  145. package/dist/client/chunks/{exceljs.min-DaJsLlWM.js → exceljs.min-CIqBqwTW.js} +71 -45
  146. package/dist/client/chunks/{exceljs.min-DaJsLlWM.js.map → exceljs.min-CIqBqwTW.js.map} +1 -1
  147. package/dist/client/chunks/{javascript-DFvvCuoP.js → javascript-DFnKaHmQ.js} +3 -3
  148. package/dist/client/chunks/{javascript-DFvvCuoP.js.map → javascript-DFnKaHmQ.js.map} +1 -1
  149. package/dist/client/chunks/{json-BBm9TlrA.js → json-Cu6rbgWf.js} +1 -1
  150. package/dist/client/chunks/{json-BBm9TlrA.js.map → json-Cu6rbgWf.js.map} +1 -1
  151. package/dist/client/chunks/{nl-NL-BLDeSy_P.js → nl-NL-oyr2wENY.js} +3 -1
  152. package/dist/client/chunks/nl-NL-oyr2wENY.js.map +1 -0
  153. package/dist/client/chunks/{providers-DX3Vw5kc.js → providers-DwQCKdGW.js} +1 -1
  154. package/dist/client/chunks/{providers-DX3Vw5kc.js.map → providers-DwQCKdGW.js.map} +1 -1
  155. package/dist/client/chunks/{retention-YhT1Oohi.js → retention-ChW9jYdy.js} +1 -1
  156. package/dist/client/chunks/{retention-YhT1Oohi.js.map → retention-ChW9jYdy.js.map} +1 -1
  157. package/dist/client/chunks/{rolldown-runtime-CCl2IeXn.js → rolldown-runtime-CWhphoD1.js} +1 -1
  158. package/dist/client/chunks/{schema-visualization-CM5ikSWB.js → schema-visualization-BszcrmZX.js} +294 -290
  159. package/dist/client/chunks/{schema-visualization-CM5ikSWB.js.map → schema-visualization-BszcrmZX.js.map} +1 -1
  160. package/dist/client/chunks/{sql-k0GA6oZ_.js → sql-CmVzGP4w.js} +1 -1
  161. package/dist/client/chunks/{sql-k0GA6oZ_.js.map → sql-CmVzGP4w.js.map} +1 -1
  162. package/dist/client/chunks/{useDebounce-NEZQbfxN.js → useDirtyStateTracking-B5wCDJSj.js} +99 -37
  163. package/dist/client/chunks/useDirtyStateTracking-B5wCDJSj.js.map +1 -0
  164. package/dist/client/chunks/{useExplainAI-DivfI0dW.js → useExplainAI-CCeCYzDm.js} +19 -19
  165. package/dist/client/chunks/{useExplainAI-DivfI0dW.js.map → useExplainAI-CCeCYzDm.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-Ctl_cVNR.js → utils-kqa-JIMg.js} +40 -13
  169. package/dist/client/chunks/utils-kqa-JIMg.js.map +1 -0
  170. package/dist/client/chunks/{vendor-BcLQ6iVZ.js → vendor-0hJNlZXQ.js} +102 -97
  171. package/dist/client/chunks/vendor-0hJNlZXQ.js.map +1 -0
  172. package/dist/client/components/DashboardGrid.d.ts +3 -1
  173. package/dist/client/components/dashboard/DashboardContext.d.ts +113 -0
  174. package/dist/client/components/dashboard/DashboardCoordinator.d.ts +2 -0
  175. package/dist/client/components/dashboard/DashboardFilterBar.d.ts +8 -0
  176. package/dist/client/components/dashboard/DashboardGridSurface.d.ts +8 -0
  177. package/dist/client/components/dashboard/DashboardModals.d.ts +8 -0
  178. package/dist/client/components/dashboard/DashboardProvider.d.ts +2 -0
  179. package/dist/client/components/dashboard/DashboardToolbar.d.ts +11 -0
  180. package/dist/client/components/dashboard/dashboardGridUtils.d.ts +17 -0
  181. package/dist/client/components/dashboard/index.d.ts +13 -0
  182. package/dist/client/components.d.ts +2 -0
  183. package/dist/client/components.js +3 -4
  184. package/dist/client/hooks.js +5 -6
  185. package/dist/client/icons.js +2 -2
  186. package/dist/client/index.d.ts +2 -0
  187. package/dist/client/index.js +161 -163
  188. package/dist/client/index.js.map +1 -1
  189. package/dist/client/providers.js +3 -3
  190. package/dist/client/schema.js +1 -1
  191. package/dist/client/types.d.ts +1 -0
  192. package/dist/client/utils.js +6 -7
  193. package/dist/client-bundle-stats.html +1 -1
  194. package/dist/mcp-app/mcp-app.html +77 -51
  195. package/dist/{adapters/dist-Boc63-1q.cjs → server/dist-BOdf-GQO.cjs} +1 -1
  196. package/dist/server/{google-BXwMolCu.js → google-CFYljAOF.js} +1 -1
  197. package/dist/server/{google-DzQWXFwF.cjs → google-DUlXeeDA.cjs} +1 -1
  198. package/dist/server/index.cjs +9 -9
  199. package/dist/server/index.js +57 -23
  200. package/dist/server/{openai-BfiZU0rG.cjs → openai-6wrBvAnv.cjs} +1 -1
  201. package/dist/server/openai-BDwb2u7y.cjs +17 -0
  202. package/dist/{adapters/openai-DQawCWQb.js → server/openai-DiVskd89.js} +1 -1
  203. package/dist/{adapters/openai-CuUGrKaK.js → server/openai-y7GhJNdn.js} +2062 -928
  204. package/package.json +3 -3
  205. package/dist/adapters/mcp-transport-B_HoB1HQ.js +0 -579
  206. package/dist/adapters/mcp-transport-bQzyrBPI.cjs +0 -40
  207. package/dist/adapters/openai-Bgri5TJc.cjs +0 -16
  208. package/dist/client/chunks/DashboardEditModal-DayTXEH0.js.map +0 -1
  209. package/dist/client/chunks/FieldSearchModal-B7Mr8UNT.js +0 -2644
  210. package/dist/client/chunks/FieldSearchModal-B7Mr8UNT.js.map +0 -1
  211. package/dist/client/chunks/KpiDelta-C-hZ1x01.js +0 -2
  212. package/dist/client/chunks/KpiNumber-Beo8CK0a.js +0 -2
  213. package/dist/client/chunks/KpiText-ytYiRTRO.js +0 -2
  214. package/dist/client/chunks/SchemaVisualization-DbYZBTyi.js +0 -2
  215. package/dist/client/chunks/SchemaVisualizationLazy-BGo-1S3q.js +0 -2
  216. package/dist/client/chunks/af-ZA-BtTNqvHF.js.map +0 -1
  217. package/dist/client/chunks/chart-activity-grid-BnY-jaoa.js.map +0 -1
  218. package/dist/client/chunks/chart-area-G3OvLLK4.js.map +0 -1
  219. package/dist/client/chunks/chart-bar-MLIWiLrc.js.map +0 -1
  220. package/dist/client/chunks/chart-config-area-40fbx2Ah.js.map +0 -1
  221. package/dist/client/chunks/chart-config-bar-CUWHwOPN.js.map +0 -1
  222. package/dist/client/chunks/chart-config-line-DGYYdDw9.js.map +0 -1
  223. package/dist/client/chunks/chart-data-table-BRXHT2H-.js.map +0 -1
  224. package/dist/client/chunks/chart-line-C0IHQteu.js.map +0 -1
  225. package/dist/client/chunks/chart-markdown-BmgSMqPg.js.map +0 -1
  226. package/dist/client/chunks/dist-eZurnOde.js.map +0 -1
  227. package/dist/client/chunks/nl-NL-BLDeSy_P.js.map +0 -1
  228. package/dist/client/chunks/syntaxHighlighting-D8J6Yt9j.js +0 -30
  229. package/dist/client/chunks/syntaxHighlighting-D8J6Yt9j.js.map +0 -1
  230. package/dist/client/chunks/useDebounce-NEZQbfxN.js.map +0 -1
  231. package/dist/client/chunks/useDirtyStateTracking-KAjwj1Ht.js +0 -66
  232. package/dist/client/chunks/useDirtyStateTracking-KAjwj1Ht.js.map +0 -1
  233. package/dist/client/chunks/utils-Ctl_cVNR.js.map +0 -1
  234. package/dist/client/chunks/vendor-BcLQ6iVZ.js.map +0 -1
  235. package/dist/server/openai-BwsBio1K.cjs +0 -16
  236. /package/dist/adapters/{anthropic-B_rg0BhK.js → anthropic-CZh4hB-m.js} +0 -0
  237. /package/dist/adapters/{anthropic-BIva8k1r.cjs → anthropic-DG4r1LSm.cjs} +0 -0
  238. /package/dist/adapters/{dist-De5fzUEM.js → dist-CH3hwAUk.js} +0 -0
  239. /package/dist/server/{anthropic-BsNspi1r.js → anthropic-CZh4hB-m.js} +0 -0
  240. /package/dist/server/{anthropic-DsCEX6Fm.cjs → anthropic-DG4r1LSm.cjs} +0 -0
  241. /package/dist/server/{dist-CMWZC51B.js → dist-CH3hwAUk.js} +0 -0
@@ -1,2644 +0,0 @@
1
- import { A as e, P as t, b as n, k as r } from "./chart-data-table-BRXHT2H-.js";
2
- import { k as i } from "./chart-activity-grid-BnY-jaoa.js";
3
- import { a, l as o, s } from "./retention-YhT1Oohi.js";
4
- import { a as c, t as l } from "./syntaxHighlighting-D8J6Yt9j.js";
5
- import { n as u, t as d } from "./charts-core-XlOwoP_r.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("hideHeader") && /* @__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.hideHeader ?? !1,
1791
- onChange: (e) => a({
1792
- ...t,
1793
- hideHeader: 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("display.hideHeader")
1800
- })]
1801
- }),
1802
- c.displayOptionsConfig?.filter((e) => !o?.includes(e.key)).map((e) => /* @__PURE__ */ x("div", {
1803
- className: `dc:space-y-1 ${e.type === "axisFormat" ? "dc:mt-6 dc:pt-2" : ""}`,
1804
- children: [
1805
- e.type === "boolean" && /* @__PURE__ */ x("label", {
1806
- className: "dc:flex dc:items-center dc:space-x-2",
1807
- children: [/* @__PURE__ */ b("input", {
1808
- type: "checkbox",
1809
- checked: t[e.key] ?? e.defaultValue ?? !1,
1810
- onChange: (n) => a({
1811
- ...t,
1812
- [e.key]: n.target.checked
1813
- }),
1814
- className: "dc:rounded border-dc-border focus:ring-dc-accent",
1815
- style: { color: "var(--dc-primary)" }
1816
- }), /* @__PURE__ */ b("span", {
1817
- className: "dc:text-sm text-dc-text",
1818
- children: s(e.label)
1819
- })]
1820
- }),
1821
- e.type === "string" && /* @__PURE__ */ x("div", {
1822
- className: "dc:space-y-1",
1823
- children: [
1824
- /* @__PURE__ */ x("label", {
1825
- className: "dc:text-sm text-dc-text-secondary",
1826
- children: [s(e.label), e.key === "content" && /* @__PURE__ */ b("span", {
1827
- className: "dc:text-xs text-dc-text-muted dc:ml-1",
1828
- children: "(only headers, lists and links)"
1829
- })]
1830
- }),
1831
- e.key === "content" ? /* @__PURE__ */ b("textarea", {
1832
- value: t[e.key] ?? e.defaultValue ?? "",
1833
- onChange: (n) => a({
1834
- ...t,
1835
- [e.key]: n.target.value
1836
- }),
1837
- placeholder: e.placeholder,
1838
- rows: 8,
1839
- 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"
1840
- }) : /* @__PURE__ */ b("input", {
1841
- type: "text",
1842
- value: t[e.key] ?? e.defaultValue ?? "",
1843
- onChange: (n) => a({
1844
- ...t,
1845
- [e.key]: n.target.value
1846
- }),
1847
- placeholder: e.placeholder,
1848
- 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"
1849
- }),
1850
- e.description && /* @__PURE__ */ b("p", {
1851
- className: "dc:text-xs text-dc-text-muted",
1852
- children: s(e.description)
1853
- })
1854
- ]
1855
- }),
1856
- e.type === "paletteColor" && /* @__PURE__ */ x("div", {
1857
- className: "dc:space-y-1",
1858
- children: [
1859
- /* @__PURE__ */ b("label", {
1860
- className: "dc:text-sm text-dc-text-secondary",
1861
- children: s(e.label)
1862
- }),
1863
- /* @__PURE__ */ b("div", {
1864
- className: "dc:flex dc:flex-wrap dc:gap-2",
1865
- children: r?.colors.map((n, r) => {
1866
- let i = (t[e.key] ?? e.defaultValue ?? 0) === r;
1867
- return /* @__PURE__ */ b("button", {
1868
- type: "button",
1869
- onClick: () => a({
1870
- ...t,
1871
- [e.key]: r
1872
- }),
1873
- 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"}`,
1874
- style: {
1875
- backgroundColor: n,
1876
- borderColor: i ? "var(--dc-primary)" : "var(--dc-border)"
1877
- },
1878
- title: `Color ${r + 1}: ${n}`
1879
- }, r);
1880
- }) || [/* @__PURE__ */ b("button", {
1881
- type: "button",
1882
- onClick: () => a({
1883
- ...t,
1884
- [e.key]: 0
1885
- }),
1886
- className: "dc:w-8 dc:h-8 dc:rounded-sm dc:border-2 dc:ring-2 dc:ring-offset-1",
1887
- style: {
1888
- backgroundColor: "#8884d8",
1889
- borderColor: "var(--dc-primary)",
1890
- boxShadow: "0 0 0 2px var(--dc-primary)"
1891
- },
1892
- title: "Default Color"
1893
- }, 0)]
1894
- }),
1895
- e.description && /* @__PURE__ */ b("p", {
1896
- className: "dc:text-xs text-dc-text-muted",
1897
- children: s(e.description)
1898
- })
1899
- ]
1900
- }),
1901
- e.type === "number" && /* @__PURE__ */ x("div", {
1902
- className: "dc:space-y-1",
1903
- children: [
1904
- /* @__PURE__ */ b("label", {
1905
- className: "dc:text-sm text-dc-text-secondary",
1906
- children: s(e.label)
1907
- }),
1908
- /* @__PURE__ */ b("input", {
1909
- type: "number",
1910
- value: t[e.key] ?? e.defaultValue ?? 0,
1911
- onChange: (n) => a({
1912
- ...t,
1913
- [e.key]: n.target.value === "" ? void 0 : Number(n.target.value)
1914
- }),
1915
- placeholder: e.placeholder,
1916
- min: e.min,
1917
- max: e.max,
1918
- step: e.step,
1919
- 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"
1920
- }),
1921
- e.description && /* @__PURE__ */ b("p", {
1922
- className: "dc:text-xs text-dc-text-muted",
1923
- children: s(e.description)
1924
- })
1925
- ]
1926
- }),
1927
- e.type === "select" && /* @__PURE__ */ x("div", {
1928
- className: "dc:space-y-1",
1929
- children: [
1930
- /* @__PURE__ */ b("label", {
1931
- className: "dc:text-sm text-dc-text-secondary",
1932
- children: s(e.label)
1933
- }),
1934
- /* @__PURE__ */ b("select", {
1935
- value: t[e.key] ?? e.defaultValue ?? "",
1936
- onChange: (n) => a({
1937
- ...t,
1938
- [e.key]: n.target.value
1939
- }),
1940
- 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",
1941
- children: e.options?.map((e) => /* @__PURE__ */ b("option", {
1942
- value: e.value,
1943
- children: s(e.label)
1944
- }, e.value))
1945
- }),
1946
- e.description && /* @__PURE__ */ b("p", {
1947
- className: "dc:text-xs text-dc-text-muted",
1948
- children: s(e.description)
1949
- })
1950
- ]
1951
- }),
1952
- e.type === "color" && /* @__PURE__ */ x("div", {
1953
- className: "dc:space-y-1",
1954
- children: [
1955
- /* @__PURE__ */ b("label", {
1956
- className: "dc:text-sm text-dc-text-secondary",
1957
- children: s(e.label)
1958
- }),
1959
- /* @__PURE__ */ x("div", {
1960
- className: "dc:flex dc:items-center dc:space-x-2",
1961
- children: [/* @__PURE__ */ b("input", {
1962
- type: "color",
1963
- value: t[e.key] ?? e.defaultValue ?? "#8884d8",
1964
- onChange: (n) => a({
1965
- ...t,
1966
- [e.key]: n.target.value
1967
- }),
1968
- className: "dc:w-12 dc:h-8 dc:border border-dc-border dc:rounded-sm dc:cursor-pointer"
1969
- }), /* @__PURE__ */ b("input", {
1970
- type: "text",
1971
- value: t[e.key] ?? e.defaultValue ?? "#8884d8",
1972
- onChange: (n) => a({
1973
- ...t,
1974
- [e.key]: n.target.value
1975
- }),
1976
- placeholder: e.placeholder || "#8884d8",
1977
- 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"
1978
- })]
1979
- }),
1980
- e.description && /* @__PURE__ */ b("p", {
1981
- className: "dc:text-xs text-dc-text-muted",
1982
- children: s(e.description)
1983
- })
1984
- ]
1985
- }),
1986
- e.type === "axisFormat" && /* @__PURE__ */ b(d, {
1987
- axisLabel: s(e.label),
1988
- value: t[e.key] || {},
1989
- onChange: (n) => a({
1990
- ...t,
1991
- [e.key]: Object.keys(n).length > 0 ? n : void 0
1992
- })
1993
- }),
1994
- e.type === "stringArray" && /* @__PURE__ */ b(Ne, {
1995
- label: s(e.label),
1996
- value: t[e.key] ?? [],
1997
- onChange: (n) => a({
1998
- ...t,
1999
- [e.key]: n.length > 0 ? n : void 0
2000
- }),
2001
- placeholder: e.placeholder,
2002
- description: e.description ? s(e.description) : void 0
2003
- }),
2004
- e.type === "buttonGroup" && /* @__PURE__ */ x("div", {
2005
- className: "dc:space-y-1",
2006
- children: [
2007
- /* @__PURE__ */ b("label", {
2008
- className: "dc:text-sm text-dc-text-secondary",
2009
- children: s(e.label)
2010
- }),
2011
- /* @__PURE__ */ b("div", {
2012
- className: "dc:flex dc:border border-dc-border dc:rounded-sm dc:overflow-hidden",
2013
- children: e.options?.map((n) => /* @__PURE__ */ b("button", {
2014
- type: "button",
2015
- onClick: () => a({
2016
- ...t,
2017
- [e.key]: n.value
2018
- }),
2019
- 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"}`,
2020
- children: s(n.label)
2021
- }, n.value))
2022
- }),
2023
- e.description && /* @__PURE__ */ b("p", {
2024
- className: "dc:text-xs text-dc-text-muted",
2025
- children: s(e.description)
2026
- })
2027
- ]
2028
- })
2029
- ]
2030
- }, e.key))
2031
- ]
2032
- })] })
2033
- }) : /* @__PURE__ */ b("div", {
2034
- className: "dc:text-center text-dc-text-muted dc:text-sm dc:py-4",
2035
- children: /* @__PURE__ */ b("p", { children: s("display.noOptions") })
2036
- }) : /* @__PURE__ */ b("div", {
2037
- className: "dc:text-center text-dc-text-muted dc:text-sm dc:py-4",
2038
- children: s("display.loading")
2039
- });
2040
- }
2041
- //#endregion
2042
- //#region src/client/components/ConfirmModal.tsx
2043
- var Fe = ({ isOpen: e, onClose: t, onConfirm: n, title: r, message: a, confirmText: o, cancelText: s, confirmVariant: c = "primary", isLoading: l = !1 }) => {
2044
- let { t: u } = i(), d = r ?? u("common.actions.confirm"), f = o ?? u("common.actions.confirm"), p = s ?? u("common.actions.cancel");
2045
- return /* @__PURE__ */ b(J, {
2046
- isOpen: e,
2047
- onClose: t,
2048
- title: d,
2049
- size: "sm",
2050
- closeOnBackdropClick: !l,
2051
- closeOnEscape: !l,
2052
- footer: /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("button", {
2053
- type: "button",
2054
- onClick: t,
2055
- disabled: l,
2056
- 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",
2057
- children: p
2058
- }), /* @__PURE__ */ b("button", {
2059
- type: "button",
2060
- onClick: async () => {
2061
- await n(), t();
2062
- },
2063
- disabled: l,
2064
- className: (() => {
2065
- 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";
2066
- switch (c) {
2067
- case "danger": return `${e} bg-dc-danger dc:text-white dc:hover:bg-dc-danger/90 focus:ring-dc-danger`;
2068
- case "warning": return `${e} bg-dc-warning dc:text-white dc:hover:bg-dc-warning/90 focus:ring-dc-warning`;
2069
- default: return `${e} bg-dc-primary dc:text-white dc:hover:bg-dc-primary/90 focus:ring-dc-primary`;
2070
- }
2071
- })(),
2072
- children: l ? /* @__PURE__ */ x("span", {
2073
- className: "dc:flex dc:items-center dc:gap-2",
2074
- children: [/* @__PURE__ */ x("svg", {
2075
- className: "dc:animate-spin dc:h-4 dc:w-4",
2076
- xmlns: "http://www.w3.org/2000/svg",
2077
- fill: "none",
2078
- viewBox: "0 0 24 24",
2079
- children: [/* @__PURE__ */ b("circle", {
2080
- className: "dc:opacity-25",
2081
- cx: "12",
2082
- cy: "12",
2083
- r: "10",
2084
- stroke: "currentColor",
2085
- strokeWidth: "4"
2086
- }), /* @__PURE__ */ b("path", {
2087
- className: "dc:opacity-75",
2088
- fill: "currentColor",
2089
- 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"
2090
- })]
2091
- }), u("common.modal.processing")]
2092
- }) : f
2093
- })] }),
2094
- children: /* @__PURE__ */ b("div", {
2095
- className: "text-dc-text-secondary",
2096
- children: a
2097
- })
2098
- });
2099
- }, Ie = e("chevronDown");
2100
- function Le({ currentPalette: e = "default", onPaletteChange: t, className: n = "" }) {
2101
- let [r, i] = v(!1), a = _(null), o = q(e);
2102
- h(() => {
2103
- function e(e) {
2104
- a.current && !a.current.contains(e.target) && i(!1);
2105
- }
2106
- if (r) return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
2107
- }, [r]);
2108
- let s = (e) => {
2109
- t(e), i(!1);
2110
- };
2111
- return /* @__PURE__ */ x("div", {
2112
- className: `dc:relative ${n}`,
2113
- ref: a,
2114
- children: [/* @__PURE__ */ x("button", {
2115
- type: "button",
2116
- onClick: () => i(!r),
2117
- 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",
2118
- children: [
2119
- /* @__PURE__ */ x("div", {
2120
- className: "dc:hidden dc:md:flex dc:items-center dc:gap-1.5",
2121
- children: [
2122
- /* @__PURE__ */ b("div", {
2123
- className: "dc:flex dc:gap-0.5",
2124
- children: o.colors.slice(0, 4).map((e, t) => /* @__PURE__ */ b("div", {
2125
- className: "dc:w-3 dc:h-3 rounded-xs dc:border border-dc-border",
2126
- style: { backgroundColor: e },
2127
- title: `Series Color ${t + 1}`
2128
- }, t))
2129
- }),
2130
- /* @__PURE__ */ b("span", {
2131
- className: "dc:text-xs text-dc-text-secondary",
2132
- children: "|"
2133
- }),
2134
- /* @__PURE__ */ b("div", {
2135
- className: "dc:flex dc:gap-0.5",
2136
- children: o.gradient.slice(0, 3).map((e, t) => /* @__PURE__ */ b("div", {
2137
- 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",
2138
- style: {
2139
- backgroundColor: e,
2140
- borderColor: "var(--dc-border)"
2141
- },
2142
- title: `Gradient Color ${t + 1}`
2143
- }, t))
2144
- })
2145
- ]
2146
- }),
2147
- /* @__PURE__ */ b("span", { children: o.label }),
2148
- /* @__PURE__ */ b(Ie, { className: `dc:w-4 dc:h-4 dc:transition-transform ${r ? "dc:rotate-180" : ""}` })
2149
- ]
2150
- }), r && /* @__PURE__ */ b("div", {
2151
- 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",
2152
- children: /* @__PURE__ */ b("div", {
2153
- className: "dc:py-1",
2154
- children: K.slice().sort((e, t) => e.label.localeCompare(t.label)).map((t) => /* @__PURE__ */ b("button", {
2155
- type: "button",
2156
- onClick: () => s(t.name),
2157
- 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"}`,
2158
- style: t.name === e ? { color: "var(--dc-primary)" } : void 0,
2159
- children: /* @__PURE__ */ x("div", {
2160
- className: "dc:flex dc:items-center dc:gap-3",
2161
- children: [
2162
- /* @__PURE__ */ x("div", {
2163
- className: "dc:hidden dc:md:flex dc:items-center dc:gap-2",
2164
- children: [
2165
- /* @__PURE__ */ b("div", {
2166
- className: "dc:flex dc:gap-0.5",
2167
- children: t.colors.slice(0, 6).map((e, t) => /* @__PURE__ */ b("div", {
2168
- className: "dc:w-3 dc:h-3 rounded-xs dc:border border-dc-border",
2169
- style: { backgroundColor: e }
2170
- }, `series-${t}`))
2171
- }),
2172
- /* @__PURE__ */ b("div", { className: "dc:w-px dc:h-4 bg-dc-border" }),
2173
- /* @__PURE__ */ b("div", {
2174
- className: "dc:flex",
2175
- children: t.gradient.map((e, t) => /* @__PURE__ */ b("div", {
2176
- className: "dc:w-2 dc:h-4 dc:first:rounded-l-sm dc:last:rounded-r-sm",
2177
- style: { backgroundColor: e }
2178
- }, `gradient-${t}`))
2179
- })
2180
- ]
2181
- }),
2182
- /* @__PURE__ */ b("span", {
2183
- className: "dc:font-medium",
2184
- children: t.label
2185
- }),
2186
- t.name === e && /* @__PURE__ */ b("div", {
2187
- className: "dc:ml-auto",
2188
- children: /* @__PURE__ */ b("div", {
2189
- className: "dc:w-2 dc:h-2 dc:rounded-full",
2190
- style: { backgroundColor: "var(--dc-primary)" }
2191
- })
2192
- })
2193
- ]
2194
- })
2195
- }, t.name))
2196
- })
2197
- })]
2198
- });
2199
- }
2200
- //#endregion
2201
- //#region src/client/components/AnalysisBuilder/FieldSearchItem.tsx
2202
- var Re = e("check");
2203
- function ze({ field: e, isSelected: n, isFocused: i, onClick: a, onMouseEnter: o, ...s }) {
2204
- let c = () => {
2205
- if (e.fieldType === "measure") {
2206
- let n = t(e.type);
2207
- return n ? /* @__PURE__ */ b(n, { className: "dc:w-4 dc:h-4" }) : null;
2208
- } else if (e.fieldType === "timeDimension") {
2209
- let e = r("time");
2210
- return e ? /* @__PURE__ */ b(e, { className: "dc:w-4 dc:h-4" }) : null;
2211
- } else {
2212
- let e = r("dimension");
2213
- return e ? /* @__PURE__ */ b(e, { className: "dc:w-4 dc:h-4" }) : null;
2214
- }
2215
- }, 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";
2216
- return /* @__PURE__ */ x("button", {
2217
- onClick: a,
2218
- onMouseEnter: o,
2219
- 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"}`,
2220
- ...s,
2221
- children: [
2222
- /* @__PURE__ */ b("span", {
2223
- 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"}`,
2224
- children: c()
2225
- }),
2226
- /* @__PURE__ */ x("div", {
2227
- className: "dc:flex-1 dc:min-w-0",
2228
- children: [/* @__PURE__ */ b("div", {
2229
- className: "dc:text-sm dc:font-medium text-dc-text dc:truncate",
2230
- children: e.title
2231
- }), /* @__PURE__ */ b("div", {
2232
- className: "dc:text-xs text-dc-text-muted dc:truncate",
2233
- children: e.name
2234
- })]
2235
- }),
2236
- /* @__PURE__ */ b("span", {
2237
- className: `dc:shrink-0 dc:px-2 dc:py-0.5 dc:rounded dc:text-xs dc:font-medium ${l()}`,
2238
- children: u()
2239
- }),
2240
- n && /* @__PURE__ */ b("span", {
2241
- 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",
2242
- children: /* @__PURE__ */ b(Re, { className: "dc:w-3 dc:h-3" })
2243
- })
2244
- ]
2245
- });
2246
- }
2247
- var $ = p(ze);
2248
- //#endregion
2249
- //#region src/client/components/AnalysisBuilder/FieldDetailPanel.tsx
2250
- function Be({ field: e }) {
2251
- let { t: n } = i();
2252
- return e ? /* @__PURE__ */ x("div", {
2253
- className: "dc:p-4",
2254
- children: [
2255
- /* @__PURE__ */ x("div", {
2256
- className: "dc:flex dc:items-start dc:gap-3 dc:mb-4",
2257
- children: [/* @__PURE__ */ b("span", {
2258
- 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"}`,
2259
- children: (() => {
2260
- if (e.fieldType === "measure") {
2261
- let n = t(e.type);
2262
- return n ? /* @__PURE__ */ b(n, { className: "dc:w-6 dc:h-6" }) : null;
2263
- } else if (e.fieldType === "timeDimension") {
2264
- let e = r("time");
2265
- return e ? /* @__PURE__ */ b(e, { className: "dc:w-6 dc:h-6" }) : null;
2266
- } else {
2267
- let e = r("dimension");
2268
- return e ? /* @__PURE__ */ b(e, { className: "dc:w-6 dc:h-6" }) : null;
2269
- }
2270
- })()
2271
- }), /* @__PURE__ */ x("div", {
2272
- className: "dc:flex-1 dc:min-w-0",
2273
- children: [/* @__PURE__ */ b("h3", {
2274
- className: "dc:text-base dc:font-semibold text-dc-text dc:leading-tight",
2275
- children: e.title
2276
- }), /* @__PURE__ */ b("p", {
2277
- className: "dc:text-xs text-dc-text-muted dc:mt-0.5 dc:truncate",
2278
- children: e.name
2279
- })]
2280
- })]
2281
- }),
2282
- e.description && /* @__PURE__ */ b("div", {
2283
- className: "dc:mb-4",
2284
- children: /* @__PURE__ */ b("p", {
2285
- className: "dc:text-sm text-dc-text-secondary dc:leading-relaxed",
2286
- children: e.description
2287
- })
2288
- }),
2289
- /* @__PURE__ */ x("div", {
2290
- className: "dc:space-y-3 dc:pt-4 dc:border-t border-dc-border",
2291
- children: [
2292
- /* @__PURE__ */ x("div", {
2293
- className: "dc:flex dc:items-center dc:justify-between",
2294
- children: [/* @__PURE__ */ b("span", {
2295
- className: "dc:text-xs text-dc-text-muted",
2296
- children: n("fieldPanel.labels.type")
2297
- }), /* @__PURE__ */ b("span", {
2298
- className: "dc:text-sm text-dc-text dc:font-medium",
2299
- children: e.fieldType === "measure" ? {
2300
- count: n("fieldTypes.count"),
2301
- countDistinct: n("fieldTypes.countDistinct"),
2302
- countDistinctApprox: n("fieldTypes.countDistinctApprox"),
2303
- sum: n("fieldTypes.sum"),
2304
- avg: n("fieldTypes.avg"),
2305
- min: n("fieldTypes.min"),
2306
- max: n("fieldTypes.max"),
2307
- runningTotal: n("fieldTypes.runningTotal"),
2308
- number: n("fieldTypes.number")
2309
- }[e.type] || e.type : e.fieldType === "timeDimension" ? n("fieldTypes.time") : {
2310
- string: n("fieldTypes.string"),
2311
- number: n("fieldTypes.number"),
2312
- boolean: n("fieldTypes.boolean"),
2313
- geo: n("fieldTypes.geo")
2314
- }[e.type] || n("fieldTypes.dimension")
2315
- })]
2316
- }),
2317
- /* @__PURE__ */ x("div", {
2318
- className: "dc:flex dc:items-center dc:justify-between",
2319
- children: [/* @__PURE__ */ b("span", {
2320
- className: "dc:text-xs text-dc-text-muted",
2321
- children: n("fieldPanel.labels.cube")
2322
- }), /* @__PURE__ */ b("span", {
2323
- className: "dc:text-sm text-dc-text dc:font-medium",
2324
- children: e.cubeName
2325
- })]
2326
- }),
2327
- /* @__PURE__ */ x("div", {
2328
- className: "dc:flex dc:items-center dc:justify-between",
2329
- children: [/* @__PURE__ */ b("span", {
2330
- className: "dc:text-xs text-dc-text-muted",
2331
- children: n("fieldPanel.labels.category")
2332
- }), /* @__PURE__ */ b("span", {
2333
- 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"}`,
2334
- children: n(e.fieldType === "measure" ? "fieldCategory.measure" : e.fieldType === "timeDimension" ? "fieldCategory.timeDimension" : "fieldCategory.dimension")
2335
- })]
2336
- })
2337
- ]
2338
- }),
2339
- /* @__PURE__ */ b("div", {
2340
- className: "dc:mt-6 dc:p-3 bg-dc-surface dc:rounded-lg",
2341
- children: /* @__PURE__ */ b("p", {
2342
- className: "dc:text-xs text-dc-text-muted",
2343
- children: n("fieldPanel.usageHint")
2344
- })
2345
- })
2346
- ]
2347
- }) : /* @__PURE__ */ b("div", {
2348
- className: "dc:p-6 dc:text-center text-dc-text-muted",
2349
- children: /* @__PURE__ */ b("p", {
2350
- className: "dc:text-sm",
2351
- children: n("fieldPanel.emptyState")
2352
- })
2353
- });
2354
- }
2355
- var Ve = p(Be), He = e("search"), Ue = e("close");
2356
- function We({ isOpen: e, onClose: t, onSelect: n, mode: r, schema: a, selectedFields: o, recentFields: s }) {
2357
- 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(() => {
2358
- if (s) return s;
2359
- let e = ve();
2360
- return r === "metrics" ? e.metrics : e.breakdowns;
2361
- }, [s, r]), k = r, A = g(() => Z(a, k), [a, k]), j = g(() => pe(a), [a]), M = g(() => de(A, l, d), [
2362
- A,
2363
- l,
2364
- d
2365
- ]), N = g(() => fe(M), [M]), P = g(() => l.trim() ? [] : be(a, k, O).filter((e) => !d || e.cubeName === d), [
2366
- a,
2367
- k,
2368
- O,
2369
- l,
2370
- d
2371
- ]), F = g(() => {
2372
- let e = [...P];
2373
- return N.forEach((t) => {
2374
- e.push(...t);
2375
- }), e;
2376
- }, [P, N]);
2377
- h(() => {
2378
- e && E.current && E.current.focus();
2379
- }, [e]), h(() => {
2380
- e || (u(""), f(null), y(null), C(-1), T(null));
2381
- }, [e]);
2382
- let I = m((e, t = !1) => {
2383
- ye(e.name, r === "metrics" ? "metrics" : "breakdowns"), n({
2384
- name: e.name,
2385
- title: e.title,
2386
- shortTitle: e.shortTitle,
2387
- type: e.type,
2388
- description: e.description
2389
- }, e.fieldType, e.cubeName, t);
2390
- }, [r, n]), L = m((e, t, n = !1) => {
2391
- if (n && w !== null && w !== t) {
2392
- let e = Math.min(w, t), n = Math.max(w, t);
2393
- for (let t = e; t <= n; t++) {
2394
- let e = F[t];
2395
- e && !o.includes(e.name) && I(e, !0);
2396
- }
2397
- } else n ? I(e, !0) : I(e, !1);
2398
- T(t);
2399
- }, [
2400
- F,
2401
- w,
2402
- I,
2403
- o
2404
- ]), R = m((e) => {
2405
- if (F.length !== 0) switch (e.key) {
2406
- case "ArrowDown":
2407
- e.preventDefault(), C((e) => {
2408
- let t = Math.min(e + 1, F.length - 1);
2409
- return y(F[t]), t;
2410
- });
2411
- break;
2412
- case "ArrowUp":
2413
- e.preventDefault(), C((e) => {
2414
- let t = Math.max(e - 1, 0);
2415
- return y(F[t]), t;
2416
- });
2417
- break;
2418
- case "Enter":
2419
- e.preventDefault(), S >= 0 && F[S] && L(F[S], S, e.shiftKey);
2420
- break;
2421
- case "Escape":
2422
- e.preventDefault(), t();
2423
- break;
2424
- }
2425
- }, [
2426
- F,
2427
- S,
2428
- L,
2429
- t
2430
- ]);
2431
- if (h(() => {
2432
- if (S >= 0 && D.current) {
2433
- let e = D.current.querySelector(`[data-field-index="${S}"]`);
2434
- e && e.scrollIntoView({
2435
- block: "nearest",
2436
- behavior: "smooth"
2437
- });
2438
- }
2439
- }, [S]), !e) return null;
2440
- 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;
2441
- return /* @__PURE__ */ b("div", {
2442
- className: "dc:fixed dc:inset-0 dc:z-50 dc:flex dc:items-center dc:justify-center",
2443
- style: { backgroundColor: "var(--dc-overlay)" },
2444
- onClick: t,
2445
- role: "presentation",
2446
- children: /* @__PURE__ */ x("div", {
2447
- role: "dialog",
2448
- "aria-modal": "true",
2449
- "aria-label": B,
2450
- 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",
2451
- onClick: (e) => e.stopPropagation(),
2452
- onKeyDown: R,
2453
- children: [
2454
- /* @__PURE__ */ x("div", {
2455
- className: "dc:shrink-0 dc:border-b border-dc-border",
2456
- children: [/* @__PURE__ */ x("div", {
2457
- className: "dc:flex dc:items-center dc:px-4 dc:py-3 dc:gap-3",
2458
- children: [
2459
- /* @__PURE__ */ b(He, {
2460
- className: "dc:w-5 dc:h-5 text-dc-text-muted",
2461
- "aria-hidden": !0
2462
- }),
2463
- /* @__PURE__ */ b("input", {
2464
- ref: E,
2465
- type: "text",
2466
- value: l,
2467
- onChange: (e) => {
2468
- u(e.target.value), C(-1);
2469
- },
2470
- placeholder: z,
2471
- className: "dc:flex-1 bg-transparent dc:border-none dc:outline-none text-dc-text placeholder-dc-text-muted dc:text-lg",
2472
- "aria-label": z,
2473
- "aria-controls": "field-search-results",
2474
- "aria-activedescendant": V,
2475
- role: "combobox",
2476
- "aria-expanded": "true",
2477
- "aria-autocomplete": "list"
2478
- }),
2479
- /* @__PURE__ */ b("button", {
2480
- onClick: t,
2481
- className: "dc:p-1 text-dc-text-secondary hover:text-dc-text dc:rounded",
2482
- "aria-label": "Close dialog",
2483
- children: /* @__PURE__ */ b(Ue, {
2484
- className: "dc:w-5 dc:h-5",
2485
- "aria-hidden": !0
2486
- })
2487
- })
2488
- ]
2489
- }), j.length > 1 && /* @__PURE__ */ b("div", {
2490
- className: "dc:md:hidden dc:px-4 dc:pb-3",
2491
- children: /* @__PURE__ */ x("select", {
2492
- value: d || "",
2493
- onChange: (e) => f(e.target.value || null),
2494
- 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",
2495
- "aria-label": "Filter by cube",
2496
- children: [/* @__PURE__ */ b("option", {
2497
- value: "",
2498
- children: c("fieldSearch.filter.allCubes")
2499
- }), j.map((e) => /* @__PURE__ */ b("option", {
2500
- value: e,
2501
- children: Q(e, a)
2502
- }, e))]
2503
- })
2504
- })]
2505
- }),
2506
- /* @__PURE__ */ x("div", {
2507
- className: "dc:flex-1 dc:flex dc:overflow-hidden",
2508
- children: [
2509
- /* @__PURE__ */ b("nav", {
2510
- 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",
2511
- "aria-label": "Filter by cube",
2512
- children: /* @__PURE__ */ x("div", {
2513
- className: "dc:p-2",
2514
- role: "group",
2515
- "aria-label": "Cube categories",
2516
- children: [/* @__PURE__ */ b("button", {
2517
- onClick: () => f(null),
2518
- 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"}`,
2519
- "aria-pressed": d === null,
2520
- children: c("fieldSearch.categories.all")
2521
- }), j.map((e) => /* @__PURE__ */ b("button", {
2522
- onClick: () => f(e),
2523
- 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"}`,
2524
- title: Q(e, a),
2525
- "aria-pressed": d === e,
2526
- children: Q(e, a)
2527
- }, e))]
2528
- })
2529
- }),
2530
- /* @__PURE__ */ b("div", {
2531
- id: "field-search-results",
2532
- ref: D,
2533
- className: "dc:flex-1 dc:overflow-y-auto dc:p-4",
2534
- role: "listbox",
2535
- "aria-label": "Available fields",
2536
- children: M.length === 0 && P.length === 0 ? /* @__PURE__ */ x("div", {
2537
- className: "dc:text-center dc:py-12 text-dc-text-muted",
2538
- children: [/* @__PURE__ */ b("p", {
2539
- className: "dc:text-lg dc:mb-2",
2540
- children: c("fieldSearch.empty.heading")
2541
- }), /* @__PURE__ */ b("p", {
2542
- className: "dc:text-sm",
2543
- children: l ? c(r === "metrics" ? "fieldSearch.empty.noMatchMetrics" : "fieldSearch.empty.noMatchDimensions", { searchTerm: l }) : c(r === "metrics" ? "fieldSearch.empty.noMetrics" : "fieldSearch.empty.noDimensions")
2544
- })]
2545
- }) : /* @__PURE__ */ x("div", {
2546
- className: "dc:space-y-6",
2547
- children: [P.length > 0 && /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
2548
- className: "dc:text-xs dc:font-semibold text-dc-text-muted dc:uppercase dc:tracking-wider dc:mb-2",
2549
- children: c("fieldSearch.section.recents")
2550
- }), /* @__PURE__ */ b("div", {
2551
- className: "dc:space-y-1",
2552
- children: P.map((e, t) => /* @__PURE__ */ b($, {
2553
- field: e,
2554
- isSelected: o.includes(e.name),
2555
- isFocused: S === t,
2556
- onClick: (n) => L(e, t, n.shiftKey),
2557
- onMouseEnter: () => {
2558
- y(e), C(t);
2559
- },
2560
- "data-field-index": t
2561
- }, `recent-${e.name}`))
2562
- })] }), Array.from(N.entries()).map(([e, t]) => /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("h3", {
2563
- className: "dc:text-xs dc:font-semibold text-dc-text-muted dc:uppercase dc:tracking-wider dc:mb-2",
2564
- children: Q(e, a)
2565
- }), /* @__PURE__ */ b("div", {
2566
- className: "dc:space-y-1",
2567
- children: t.map((n) => {
2568
- 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);
2569
- return /* @__PURE__ */ b($, {
2570
- field: n,
2571
- isSelected: o.includes(n.name),
2572
- isFocused: S === r,
2573
- onClick: (e) => L(n, r, e.shiftKey),
2574
- onMouseEnter: () => {
2575
- y(n), C(r);
2576
- },
2577
- "data-field-index": r
2578
- }, n.name);
2579
- })
2580
- })] }, e))]
2581
- })
2582
- }),
2583
- /* @__PURE__ */ b("div", {
2584
- 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",
2585
- children: /* @__PURE__ */ b(Ve, { field: p })
2586
- })
2587
- ]
2588
- }),
2589
- /* @__PURE__ */ x("div", {
2590
- 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",
2591
- children: [/* @__PURE__ */ x("div", { children: [
2592
- /* @__PURE__ */ b("span", {
2593
- className: "text-dc-text-secondary",
2594
- children: M.length
2595
- }),
2596
- " ",
2597
- c(r === "metrics" ? "fieldSearch.footer.metricsAvailable" : r === "filter" ? "fieldSearch.footer.fieldsAvailable" : "fieldSearch.footer.dimensionsAvailable")
2598
- ] }), /* @__PURE__ */ x("div", {
2599
- className: "dc:hidden dc:md:flex dc:items-center dc:gap-4",
2600
- children: [
2601
- /* @__PURE__ */ x("span", { children: [
2602
- /* @__PURE__ */ b("kbd", {
2603
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2604
- children: "↑↓"
2605
- }),
2606
- " ",
2607
- c("fieldSearch.shortcut.navigate")
2608
- ] }),
2609
- /* @__PURE__ */ x("span", { children: [
2610
- /* @__PURE__ */ b("kbd", {
2611
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2612
- children: c("fieldSearch.shortcut.keyEnter")
2613
- }),
2614
- " ",
2615
- c("fieldSearch.shortcut.select")
2616
- ] }),
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: c("fieldSearch.shortcut.keyShift")
2621
- }),
2622
- c("fieldSearch.shortcut.plusClick"),
2623
- " ",
2624
- c("fieldSearch.shortcut.multiSelect")
2625
- ] }),
2626
- /* @__PURE__ */ x("span", { children: [
2627
- /* @__PURE__ */ b("kbd", {
2628
- className: "dc:px-1.5 dc:py-0.5 bg-dc-surface-tertiary dc:rounded dc:text-xs",
2629
- children: c("fieldSearch.shortcut.keyEsc")
2630
- }),
2631
- " ",
2632
- c("fieldSearch.shortcut.close")
2633
- ] })
2634
- ]
2635
- })]
2636
- })
2637
- ]
2638
- })
2639
- });
2640
- }
2641
- //#endregion
2642
- 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 };
2643
-
2644
- //# sourceMappingURL=FieldSearchModal-B7Mr8UNT.js.map