drizzle-cube 0.4.29 → 0.4.31

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 (388) hide show
  1. package/dist/adapters/anthropic-BIva8k1r.cjs +1 -0
  2. package/dist/adapters/anthropic-B_rg0BhK.js +140 -0
  3. package/dist/adapters/dist-Boc63-1q.cjs +2 -0
  4. package/dist/adapters/dist-De5fzUEM.js +581 -0
  5. package/dist/adapters/express/index.cjs +2 -10
  6. package/dist/adapters/express/index.d.ts +1 -1
  7. package/dist/adapters/express/index.js +232 -342
  8. package/dist/adapters/fastify/index.cjs +2 -10
  9. package/dist/adapters/fastify/index.d.ts +1 -1
  10. package/dist/adapters/fastify/index.js +275 -424
  11. package/dist/adapters/google-CT4kgmBf.js +154 -0
  12. package/dist/adapters/google-Dgo9-Kb5.cjs +2 -0
  13. package/dist/adapters/handler-BiVT5Sa4.js +2951 -0
  14. package/dist/adapters/handler-GLMhjuwG.cjs +25 -0
  15. package/dist/adapters/hono/index.cjs +2 -10
  16. package/dist/adapters/hono/index.d.ts +1 -1
  17. package/dist/adapters/hono/index.js +307 -402
  18. package/dist/adapters/mcp-prompts-BAutSQYA.js +344 -0
  19. package/dist/adapters/mcp-prompts-DsAkafVn.cjs +5 -0
  20. package/dist/adapters/mcp-transport-Cs6gEFCi.js +8127 -0
  21. package/dist/adapters/mcp-transport-nyTtswLM.cjs +254 -0
  22. package/dist/adapters/nextjs/index.cjs +1 -9
  23. package/dist/adapters/nextjs/index.d.ts +1 -1
  24. package/dist/adapters/nextjs/index.js +377 -600
  25. package/dist/adapters/openai-C5Brybjm.cjs +1 -0
  26. package/dist/adapters/openai-D1zCEi6A.cjs +16 -0
  27. package/dist/adapters/openai-DPuFtYsB.js +4136 -0
  28. package/dist/adapters/openai-wU05wYGL.js +153 -0
  29. package/dist/adapters/types.cjs +0 -1
  30. package/dist/adapters/types.js +0 -1
  31. package/dist/adapters/utils-Dj1adfDc.js +5399 -0
  32. package/dist/adapters/utils-cb6OWP7J.cjs +15 -0
  33. package/dist/adapters/utils.cjs +1 -19
  34. package/dist/adapters/utils.d.ts +1 -1
  35. package/dist/adapters/utils.js +2 -21333
  36. package/dist/client/charts.js +15 -186
  37. package/dist/client/chunks/DashboardEditModal-DenRJiYr.js +6678 -0
  38. package/dist/client/chunks/DashboardEditModal-DenRJiYr.js.map +1 -0
  39. package/dist/client/chunks/FieldSearchModal-BQS1v1up.js +2631 -0
  40. package/dist/client/chunks/FieldSearchModal-BQS1v1up.js.map +1 -0
  41. package/dist/client/chunks/RetentionCombinedChart-D4Yf1TnQ.js +270 -0
  42. package/dist/client/chunks/RetentionCombinedChart-D4Yf1TnQ.js.map +1 -0
  43. package/dist/client/chunks/RetentionCombinedChart.config-DprbXd1N.js +56 -0
  44. package/dist/client/chunks/RetentionCombinedChart.config-DprbXd1N.js.map +1 -0
  45. package/dist/client/chunks/RetentionHeatmap-BoGY6mlZ.js +193 -0
  46. package/dist/client/chunks/RetentionHeatmap-BoGY6mlZ.js.map +1 -0
  47. package/dist/client/chunks/RetentionHeatmap.config-cbaNExVy.js +25 -0
  48. package/dist/client/chunks/RetentionHeatmap.config-cbaNExVy.js.map +1 -0
  49. package/dist/client/chunks/analysis-builder-DG38V1gO.js +6105 -0
  50. package/dist/client/chunks/analysis-builder-DG38V1gO.js.map +1 -0
  51. package/dist/client/chunks/analysis-builder-shared-DaFu78dk.js +3116 -0
  52. package/dist/client/chunks/analysis-builder-shared-DaFu78dk.js.map +1 -0
  53. package/dist/client/chunks/chart-activity-grid-wR2Twpo7.js +806 -0
  54. package/dist/client/chunks/chart-activity-grid-wR2Twpo7.js.map +1 -0
  55. package/dist/client/chunks/chart-area-e9ysnatQ.js +449 -0
  56. package/dist/client/chunks/chart-area-e9ysnatQ.js.map +1 -0
  57. package/dist/client/chunks/chart-bar-Bx4oKlqo.js +270 -0
  58. package/dist/client/chunks/chart-bar-Bx4oKlqo.js.map +1 -0
  59. package/dist/client/chunks/chart-box-plot-CVIi1aM5.js +377 -0
  60. package/dist/client/chunks/chart-box-plot-CVIi1aM5.js.map +1 -0
  61. package/dist/client/chunks/chart-bubble-DvyG15UB.js +273 -0
  62. package/dist/client/chunks/chart-bubble-DvyG15UB.js.map +1 -0
  63. package/dist/client/chunks/chart-candlestick-caHyxB9O.js +306 -0
  64. package/dist/client/chunks/chart-candlestick-caHyxB9O.js.map +1 -0
  65. package/dist/client/chunks/chart-config-activity-grid-USo7JrPh.js +51 -0
  66. package/dist/client/chunks/chart-config-activity-grid-USo7JrPh.js.map +1 -0
  67. package/dist/client/chunks/chart-config-area-D_ZufYzg.js +93 -0
  68. package/dist/client/chunks/chart-config-area-D_ZufYzg.js.map +1 -0
  69. package/dist/client/chunks/chart-config-bar-BCi2Wmd6.js +87 -0
  70. package/dist/client/chunks/chart-config-bar-BCi2Wmd6.js.map +1 -0
  71. package/dist/client/chunks/chart-config-box-plot-afKLzJSp.js +35 -0
  72. package/dist/client/chunks/chart-config-box-plot-afKLzJSp.js.map +1 -0
  73. package/dist/client/chunks/chart-config-bubble-CgbBjPv8.js +82 -0
  74. package/dist/client/chunks/chart-config-bubble-CgbBjPv8.js.map +1 -0
  75. package/dist/client/chunks/chart-config-candlestick-7boGjZ-A.js +72 -0
  76. package/dist/client/chunks/chart-config-candlestick-7boGjZ-A.js.map +1 -0
  77. package/dist/client/chunks/chart-config-data-table-Cl7sBasW.js +30 -0
  78. package/dist/client/chunks/chart-config-data-table-Cl7sBasW.js.map +1 -0
  79. package/dist/client/chunks/chart-config-funnel-CXPYQtTl.js +93 -0
  80. package/dist/client/chunks/chart-config-funnel-CXPYQtTl.js.map +1 -0
  81. package/dist/client/chunks/chart-config-gauge-DUNEUCvh.js +64 -0
  82. package/dist/client/chunks/chart-config-gauge-DUNEUCvh.js.map +1 -0
  83. package/dist/client/chunks/chart-config-heat-map-BFf1tO11.js +91 -0
  84. package/dist/client/chunks/chart-config-heat-map-BFf1tO11.js.map +1 -0
  85. package/dist/client/chunks/chart-config-kpi-delta-C5k2waIJ.js +94 -0
  86. package/dist/client/chunks/chart-config-kpi-delta-C5k2waIJ.js.map +1 -0
  87. package/dist/client/chunks/chart-config-kpi-number-DptOyhk0.js +75 -0
  88. package/dist/client/chunks/chart-config-kpi-number-DptOyhk0.js.map +1 -0
  89. package/dist/client/chunks/chart-config-kpi-text-D9DdVWqd.js +47 -0
  90. package/dist/client/chunks/chart-config-kpi-text-D9DdVWqd.js.map +1 -0
  91. package/dist/client/chunks/chart-config-line-B3NgLF7K.js +104 -0
  92. package/dist/client/chunks/chart-config-line-B3NgLF7K.js.map +1 -0
  93. package/dist/client/chunks/chart-config-markdown-tlfivQTt.js +117 -0
  94. package/dist/client/chunks/chart-config-markdown-tlfivQTt.js.map +1 -0
  95. package/dist/client/chunks/chart-config-measure-profile-D7XDwrU2.js +82 -0
  96. package/dist/client/chunks/chart-config-measure-profile-D7XDwrU2.js.map +1 -0
  97. package/dist/client/chunks/chart-config-pie-wY0B52PC.js +68 -0
  98. package/dist/client/chunks/chart-config-pie-wY0B52PC.js.map +1 -0
  99. package/dist/client/chunks/chart-config-radar-DRpJBy1M.js +49 -0
  100. package/dist/client/chunks/chart-config-radar-DRpJBy1M.js.map +1 -0
  101. package/dist/client/chunks/chart-config-radial-bar-DCUpXv9G.js +38 -0
  102. package/dist/client/chunks/chart-config-radial-bar-DCUpXv9G.js.map +1 -0
  103. package/dist/client/chunks/chart-config-sankey-CdOhlm4h.js +66 -0
  104. package/dist/client/chunks/chart-config-sankey-CdOhlm4h.js.map +1 -0
  105. package/dist/client/chunks/chart-config-scatter-B2su_x8f.js +61 -0
  106. package/dist/client/chunks/chart-config-scatter-B2su_x8f.js.map +1 -0
  107. package/dist/client/chunks/chart-config-sunburst-BPdjbk18.js +45 -0
  108. package/dist/client/chunks/chart-config-sunburst-BPdjbk18.js.map +1 -0
  109. package/dist/client/chunks/chart-config-tree-map-Cbsh2fe2.js +51 -0
  110. package/dist/client/chunks/chart-config-tree-map-Cbsh2fe2.js.map +1 -0
  111. package/dist/client/chunks/chart-config-waterfall-DGmuZfQF.js +59 -0
  112. package/dist/client/chunks/chart-config-waterfall-DGmuZfQF.js.map +1 -0
  113. package/dist/client/chunks/chart-data-table-B2m_6EZe.js +4088 -0
  114. package/dist/client/chunks/chart-data-table-B2m_6EZe.js.map +1 -0
  115. package/dist/client/chunks/chart-funnel-C9JRW79j.js +447 -0
  116. package/dist/client/chunks/chart-funnel-C9JRW79j.js.map +1 -0
  117. package/dist/client/chunks/chart-gauge-BLLJqeXo.js +424 -0
  118. package/dist/client/chunks/chart-gauge-BLLJqeXo.js.map +1 -0
  119. package/dist/client/chunks/chart-heat-map-f2fM2mDC.js +236 -0
  120. package/dist/client/chunks/chart-heat-map-f2fM2mDC.js.map +1 -0
  121. package/dist/client/chunks/chart-kpi-delta-S6qDEoJO.js +343 -0
  122. package/dist/client/chunks/chart-kpi-delta-S6qDEoJO.js.map +1 -0
  123. package/dist/client/chunks/chart-kpi-number-CEUBsVW2.js +326 -0
  124. package/dist/client/chunks/chart-kpi-number-CEUBsVW2.js.map +1 -0
  125. package/dist/client/chunks/chart-kpi-text-DgRig_jQ.js +149 -0
  126. package/dist/client/chunks/chart-kpi-text-DgRig_jQ.js.map +1 -0
  127. package/dist/client/chunks/chart-line-CPhQRMZ7.js +432 -0
  128. package/dist/client/chunks/chart-line-CPhQRMZ7.js.map +1 -0
  129. package/dist/client/chunks/chart-markdown-DXxc43w1.js +3457 -0
  130. package/dist/client/chunks/chart-markdown-DXxc43w1.js.map +1 -0
  131. package/dist/client/chunks/chart-measure-profile-CVlqGslU.js +179 -0
  132. package/dist/client/chunks/chart-measure-profile-CVlqGslU.js.map +1 -0
  133. package/dist/client/chunks/chart-pie-DafSc9sE.js +172 -0
  134. package/dist/client/chunks/chart-pie-DafSc9sE.js.map +1 -0
  135. package/dist/client/chunks/chart-radar-Dz9F5k-B.js +154 -0
  136. package/dist/client/chunks/chart-radar-Dz9F5k-B.js.map +1 -0
  137. package/dist/client/chunks/chart-radial-bar-N3MNUL7o.js +148 -0
  138. package/dist/client/chunks/chart-radial-bar-N3MNUL7o.js.map +1 -0
  139. package/dist/client/chunks/chart-sankey-8nRYnupt.js +222 -0
  140. package/dist/client/chunks/chart-sankey-8nRYnupt.js.map +1 -0
  141. package/dist/client/chunks/chart-scatter-J2JNi88S.js +255 -0
  142. package/dist/client/chunks/chart-scatter-J2JNi88S.js.map +1 -0
  143. package/dist/client/chunks/chart-sunburst-D1NFQjqk.js +221 -0
  144. package/dist/client/chunks/chart-sunburst-D1NFQjqk.js.map +1 -0
  145. package/dist/client/chunks/chart-tree-map-CbYjko2s.js +298 -0
  146. package/dist/client/chunks/chart-tree-map-CbYjko2s.js.map +1 -0
  147. package/dist/client/chunks/chart-waterfall-Z65TGMUO.js +237 -0
  148. package/dist/client/chunks/chart-waterfall-Z65TGMUO.js.map +1 -0
  149. package/dist/client/chunks/charts-core-CJlGzwsW.js +215 -0
  150. package/dist/client/chunks/charts-core-CJlGzwsW.js.map +1 -0
  151. package/dist/client/chunks/charts-loader-BI07yxaQ.js +259 -0
  152. package/dist/client/chunks/charts-loader-BI07yxaQ.js.map +1 -0
  153. package/dist/client/chunks/core-D1TOj17W.js +845 -0
  154. package/dist/client/chunks/core-D1TOj17W.js.map +1 -0
  155. package/dist/client/chunks/dist-DDBeV_JI.js +847 -0
  156. package/dist/client/chunks/dist-DDBeV_JI.js.map +1 -0
  157. package/dist/client/chunks/javascript-BBwTSo6e.js +438 -0
  158. package/dist/client/chunks/javascript-BBwTSo6e.js.map +1 -0
  159. package/dist/client/chunks/json-BpTrLZSh.js +38 -0
  160. package/dist/client/chunks/json-BpTrLZSh.js.map +1 -0
  161. package/dist/client/chunks/lazyChartConfigRegistry-BjhxDaSf.js +149 -0
  162. package/dist/client/chunks/lazyChartConfigRegistry-BjhxDaSf.js.map +1 -0
  163. package/dist/client/chunks/providers-DX3Vw5kc.js +7 -0
  164. package/dist/client/chunks/providers-DX3Vw5kc.js.map +1 -0
  165. package/dist/client/chunks/retention-UEXlSdZ-.js +132 -0
  166. package/dist/client/chunks/retention-UEXlSdZ-.js.map +1 -0
  167. package/dist/client/chunks/rolldown-runtime-lc2dmIiU.js +20 -0
  168. package/dist/client/chunks/schema-visualization-DPL5_Tkh.js +1073 -0
  169. package/dist/client/chunks/schema-visualization-DPL5_Tkh.js.map +1 -0
  170. package/dist/client/chunks/sql-B0chxcEK.js +120 -0
  171. package/dist/client/chunks/sql-B0chxcEK.js.map +1 -0
  172. package/dist/client/chunks/syntaxHighlighting-87bOwTxj.js +30 -0
  173. package/dist/client/chunks/syntaxHighlighting-87bOwTxj.js.map +1 -0
  174. package/dist/client/chunks/useDebounce-DkuM7nQk.js +1394 -0
  175. package/dist/client/chunks/useDebounce-DkuM7nQk.js.map +1 -0
  176. package/dist/client/chunks/useDirtyStateTracking-CgKZWkel.js +66 -0
  177. package/dist/client/chunks/useDirtyStateTracking-CgKZWkel.js.map +1 -0
  178. package/dist/client/chunks/useExplainAI-RflLTDVL.js +203 -0
  179. package/dist/client/chunks/useExplainAI-RflLTDVL.js.map +1 -0
  180. package/dist/client/chunks/useNotebookLayout-BFZ_33Kb.js +37 -0
  181. package/dist/client/chunks/useNotebookLayout-BFZ_33Kb.js.map +1 -0
  182. package/dist/client/chunks/utils--32ZtfbZ.js +128 -0
  183. package/dist/client/chunks/utils--32ZtfbZ.js.map +1 -0
  184. package/dist/client/chunks/vendor-CZX7UVzM.js +828 -0
  185. package/dist/client/chunks/vendor-CZX7UVzM.js.map +1 -0
  186. package/dist/client/components/AnalysisBuilder/AnalysisModeErrorBoundary.d.ts +0 -1
  187. package/dist/client/components.js +4 -18
  188. package/dist/client/hooks.js +6 -58
  189. package/dist/client/icons.js +2 -15
  190. package/dist/client/index.js +1061 -1295
  191. package/dist/client/index.js.map +1 -1
  192. package/dist/client/providers.js +3 -9
  193. package/dist/client/styles.css +2 -1
  194. package/dist/client/types.d.ts +1 -0
  195. package/dist/client/utils.js +7 -74
  196. package/dist/client-bundle-stats.html +1 -1
  197. package/dist/server/anthropic-BsNspi1r.js +140 -0
  198. package/dist/server/anthropic-DsCEX6Fm.cjs +1 -0
  199. package/dist/server/dist-CMWZC51B.js +581 -0
  200. package/dist/server/dist-DxegvyZF.cjs +2 -0
  201. package/dist/server/google-BXwMolCu.js +154 -0
  202. package/dist/server/google-DzQWXFwF.cjs +2 -0
  203. package/dist/server/index.cjs +110 -129
  204. package/dist/server/index.d.ts +43 -9
  205. package/dist/server/index.js +15398 -34394
  206. package/dist/server/openai-CucrxPHM.cjs +16 -0
  207. package/dist/server/openai-DiyuZ3ds.cjs +1 -0
  208. package/dist/server/openai-nZJcAzON.js +4136 -0
  209. package/dist/server/openai-owPdq1yN.js +153 -0
  210. package/package.json +18 -8
  211. package/dist/adapters/anthropic-BTkjgFpT.cjs +0 -1
  212. package/dist/adapters/anthropic-CTu9E801.js +0 -126
  213. package/dist/adapters/google-BAK9pnQf.cjs +0 -2
  214. package/dist/adapters/google-DficVAsJ.js +0 -146
  215. package/dist/adapters/handler-BHguLZOY.js +0 -2713
  216. package/dist/adapters/handler-DOIyiFPg.cjs +0 -39
  217. package/dist/adapters/index-BgCeQBuN.cjs +0 -2
  218. package/dist/adapters/index-C3PskWTr.js +0 -5353
  219. package/dist/adapters/index-C45_meK_.js +0 -719
  220. package/dist/adapters/index-ht4NPca9.cjs +0 -23
  221. package/dist/adapters/mcp-transport-CWGqDQSI.cjs +0 -259
  222. package/dist/adapters/mcp-transport-CyeHMDPl.js +0 -11055
  223. package/dist/adapters/openai-BvA6eLs8.cjs +0 -1
  224. package/dist/adapters/openai-mcE24du8.js +0 -131
  225. package/dist/client/charts.js.map +0 -1
  226. package/dist/client/chunks/RetentionCombinedChart--SnU4Y_I.js +0 -256
  227. package/dist/client/chunks/RetentionCombinedChart--SnU4Y_I.js.map +0 -1
  228. package/dist/client/chunks/RetentionCombinedChart.config-Bbp2ghim.js +0 -48
  229. package/dist/client/chunks/RetentionCombinedChart.config-Bbp2ghim.js.map +0 -1
  230. package/dist/client/chunks/RetentionHeatmap-BHYU8MXY.js +0 -178
  231. package/dist/client/chunks/RetentionHeatmap-BHYU8MXY.js.map +0 -1
  232. package/dist/client/chunks/RetentionHeatmap.config-BWf_-vdj.js +0 -29
  233. package/dist/client/chunks/RetentionHeatmap.config-BWf_-vdj.js.map +0 -1
  234. package/dist/client/chunks/analysis-builder-DMFoAkjT.js +0 -6203
  235. package/dist/client/chunks/analysis-builder-DMFoAkjT.js.map +0 -1
  236. package/dist/client/chunks/analysis-builder-shared-CunrT3gi.js +0 -3140
  237. package/dist/client/chunks/analysis-builder-shared-CunrT3gi.js.map +0 -1
  238. package/dist/client/chunks/chart-activity-grid-DCznpK6N.js +0 -347
  239. package/dist/client/chunks/chart-activity-grid-DCznpK6N.js.map +0 -1
  240. package/dist/client/chunks/chart-area-CqKRIUpj.js +0 -234
  241. package/dist/client/chunks/chart-area-CqKRIUpj.js.map +0 -1
  242. package/dist/client/chunks/chart-bar-Bl5jvrU_.js +0 -267
  243. package/dist/client/chunks/chart-bar-Bl5jvrU_.js.map +0 -1
  244. package/dist/client/chunks/chart-box-plot-CzMb00z_.js +0 -322
  245. package/dist/client/chunks/chart-box-plot-CzMb00z_.js.map +0 -1
  246. package/dist/client/chunks/chart-bubble-BF8Z52eW.js +0 -249
  247. package/dist/client/chunks/chart-bubble-BF8Z52eW.js.map +0 -1
  248. package/dist/client/chunks/chart-candlestick-ByWS945g.js +0 -269
  249. package/dist/client/chunks/chart-candlestick-ByWS945g.js.map +0 -1
  250. package/dist/client/chunks/chart-config-activity-grid-CmOqDuOT.js +0 -50
  251. package/dist/client/chunks/chart-config-activity-grid-CmOqDuOT.js.map +0 -1
  252. package/dist/client/chunks/chart-config-area-CK_GVApT.js +0 -77
  253. package/dist/client/chunks/chart-config-area-CK_GVApT.js.map +0 -1
  254. package/dist/client/chunks/chart-config-bar-C8uzktxl.js +0 -71
  255. package/dist/client/chunks/chart-config-bar-C8uzktxl.js.map +0 -1
  256. package/dist/client/chunks/chart-config-box-plot-D_E_SSc2.js +0 -38
  257. package/dist/client/chunks/chart-config-box-plot-D_E_SSc2.js.map +0 -1
  258. package/dist/client/chunks/chart-config-bubble-q3DoQX5F.js +0 -71
  259. package/dist/client/chunks/chart-config-bubble-q3DoQX5F.js.map +0 -1
  260. package/dist/client/chunks/chart-config-candlestick-CRCpD43-.js +0 -70
  261. package/dist/client/chunks/chart-config-candlestick-CRCpD43-.js.map +0 -1
  262. package/dist/client/chunks/chart-config-data-table-B20Y5JCm.js +0 -28
  263. package/dist/client/chunks/chart-config-data-table-B20Y5JCm.js.map +0 -1
  264. package/dist/client/chunks/chart-config-funnel-3eYnGg8M.js +0 -92
  265. package/dist/client/chunks/chart-config-funnel-3eYnGg8M.js.map +0 -1
  266. package/dist/client/chunks/chart-config-gauge-CQx9w3d4.js +0 -64
  267. package/dist/client/chunks/chart-config-gauge-CQx9w3d4.js.map +0 -1
  268. package/dist/client/chunks/chart-config-heat-map-_wEnTnRA.js +0 -77
  269. package/dist/client/chunks/chart-config-heat-map-_wEnTnRA.js.map +0 -1
  270. package/dist/client/chunks/chart-config-kpi-delta-DLGZ2A3X.js +0 -97
  271. package/dist/client/chunks/chart-config-kpi-delta-DLGZ2A3X.js.map +0 -1
  272. package/dist/client/chunks/chart-config-kpi-number-K-wzviXF.js +0 -75
  273. package/dist/client/chunks/chart-config-kpi-number-K-wzviXF.js.map +0 -1
  274. package/dist/client/chunks/chart-config-kpi-text-BjYqwqaJ.js +0 -47
  275. package/dist/client/chunks/chart-config-kpi-text-BjYqwqaJ.js.map +0 -1
  276. package/dist/client/chunks/chart-config-line-JNagi9tf.js +0 -88
  277. package/dist/client/chunks/chart-config-line-JNagi9tf.js.map +0 -1
  278. package/dist/client/chunks/chart-config-markdown-BWQSjJpy.js +0 -97
  279. package/dist/client/chunks/chart-config-markdown-BWQSjJpy.js.map +0 -1
  280. package/dist/client/chunks/chart-config-measure-profile-ZYaMrtws.js +0 -70
  281. package/dist/client/chunks/chart-config-measure-profile-ZYaMrtws.js.map +0 -1
  282. package/dist/client/chunks/chart-config-pie-CNLXb-fr.js +0 -39
  283. package/dist/client/chunks/chart-config-pie-CNLXb-fr.js.map +0 -1
  284. package/dist/client/chunks/chart-config-radar-oxHfRAa3.js +0 -44
  285. package/dist/client/chunks/chart-config-radar-oxHfRAa3.js.map +0 -1
  286. package/dist/client/chunks/chart-config-radial-bar-_Aw3jAEm.js +0 -37
  287. package/dist/client/chunks/chart-config-radial-bar-_Aw3jAEm.js.map +0 -1
  288. package/dist/client/chunks/chart-config-sankey-C8FX9hGF.js +0 -61
  289. package/dist/client/chunks/chart-config-sankey-C8FX9hGF.js.map +0 -1
  290. package/dist/client/chunks/chart-config-scatter-DFKM80eO.js +0 -53
  291. package/dist/client/chunks/chart-config-scatter-DFKM80eO.js.map +0 -1
  292. package/dist/client/chunks/chart-config-sunburst-BmC0NLTU.js +0 -50
  293. package/dist/client/chunks/chart-config-sunburst-BmC0NLTU.js.map +0 -1
  294. package/dist/client/chunks/chart-config-tree-map-DGMbNTaa.js +0 -47
  295. package/dist/client/chunks/chart-config-tree-map-DGMbNTaa.js.map +0 -1
  296. package/dist/client/chunks/chart-config-waterfall-DTyXV_fo.js +0 -60
  297. package/dist/client/chunks/chart-config-waterfall-DTyXV_fo.js.map +0 -1
  298. package/dist/client/chunks/chart-data-table-HwfF-Ujv.js +0 -293
  299. package/dist/client/chunks/chart-data-table-HwfF-Ujv.js.map +0 -1
  300. package/dist/client/chunks/chart-funnel-WmuoWlCq.js +0 -259
  301. package/dist/client/chunks/chart-funnel-WmuoWlCq.js.map +0 -1
  302. package/dist/client/chunks/chart-gauge-Cot4By-w.js +0 -374
  303. package/dist/client/chunks/chart-gauge-Cot4By-w.js.map +0 -1
  304. package/dist/client/chunks/chart-heat-map-bGNtsZMr.js +0 -231
  305. package/dist/client/chunks/chart-heat-map-bGNtsZMr.js.map +0 -1
  306. package/dist/client/chunks/chart-kpi-delta-DeyKMxgq.js +0 -351
  307. package/dist/client/chunks/chart-kpi-delta-DeyKMxgq.js.map +0 -1
  308. package/dist/client/chunks/chart-kpi-number-D1z1gxXO.js +0 -476
  309. package/dist/client/chunks/chart-kpi-number-D1z1gxXO.js.map +0 -1
  310. package/dist/client/chunks/chart-kpi-text-b7q6KWc0.js +0 -165
  311. package/dist/client/chunks/chart-kpi-text-b7q6KWc0.js.map +0 -1
  312. package/dist/client/chunks/chart-line-3Nf-EPqJ.js +0 -450
  313. package/dist/client/chunks/chart-line-3Nf-EPqJ.js.map +0 -1
  314. package/dist/client/chunks/chart-markdown-BT_-MBq1.js +0 -2721
  315. package/dist/client/chunks/chart-markdown-BT_-MBq1.js.map +0 -1
  316. package/dist/client/chunks/chart-measure-profile-BVjUonqU.js +0 -114
  317. package/dist/client/chunks/chart-measure-profile-BVjUonqU.js.map +0 -1
  318. package/dist/client/chunks/chart-pie-DblG6w7g.js +0 -137
  319. package/dist/client/chunks/chart-pie-DblG6w7g.js.map +0 -1
  320. package/dist/client/chunks/chart-radar-BHZbeeTg.js +0 -129
  321. package/dist/client/chunks/chart-radar-BHZbeeTg.js.map +0 -1
  322. package/dist/client/chunks/chart-radial-bar-AlEJC1Jo.js +0 -119
  323. package/dist/client/chunks/chart-radial-bar-AlEJC1Jo.js.map +0 -1
  324. package/dist/client/chunks/chart-sankey-E8vYKjQF.js +0 -189
  325. package/dist/client/chunks/chart-sankey-E8vYKjQF.js.map +0 -1
  326. package/dist/client/chunks/chart-scatter-Bbxqi0iw.js +0 -202
  327. package/dist/client/chunks/chart-scatter-Bbxqi0iw.js.map +0 -1
  328. package/dist/client/chunks/chart-sunburst-BgnTKolT.js +0 -188
  329. package/dist/client/chunks/chart-sunburst-BgnTKolT.js.map +0 -1
  330. package/dist/client/chunks/chart-tree-map-i9LGCLwl.js +0 -284
  331. package/dist/client/chunks/chart-tree-map-i9LGCLwl.js.map +0 -1
  332. package/dist/client/chunks/chart-waterfall-BeIhCm83.js +0 -191
  333. package/dist/client/chunks/chart-waterfall-BeIhCm83.js.map +0 -1
  334. package/dist/client/chunks/charts-core-BUUO36OM.js +0 -692
  335. package/dist/client/chunks/charts-core-BUUO36OM.js.map +0 -1
  336. package/dist/client/chunks/charts-loader-goTYnavu.js +0 -258
  337. package/dist/client/chunks/charts-loader-goTYnavu.js.map +0 -1
  338. package/dist/client/chunks/components-BFgYvFq6.js +0 -10066
  339. package/dist/client/chunks/components-BFgYvFq6.js.map +0 -1
  340. package/dist/client/chunks/core-Y9e-sNfb.js +0 -1068
  341. package/dist/client/chunks/core-Y9e-sNfb.js.map +0 -1
  342. package/dist/client/chunks/flow-utils-CjQZG5qq.js +0 -16
  343. package/dist/client/chunks/flow-utils-CjQZG5qq.js.map +0 -1
  344. package/dist/client/chunks/funnel-utils-CyonoNeC.js +0 -135
  345. package/dist/client/chunks/funnel-utils-CyonoNeC.js.map +0 -1
  346. package/dist/client/chunks/icons-CwvgmdIP.js +0 -1636
  347. package/dist/client/chunks/icons-CwvgmdIP.js.map +0 -1
  348. package/dist/client/chunks/index-CApFCBF9.js +0 -81
  349. package/dist/client/chunks/index-CApFCBF9.js.map +0 -1
  350. package/dist/client/chunks/index-_2PSgbkC.js +0 -1046
  351. package/dist/client/chunks/index-_2PSgbkC.js.map +0 -1
  352. package/dist/client/chunks/javascript-DII1YQGr.js +0 -659
  353. package/dist/client/chunks/javascript-DII1YQGr.js.map +0 -1
  354. package/dist/client/chunks/json-C_6Prymp.js +0 -39
  355. package/dist/client/chunks/json-C_6Prymp.js.map +0 -1
  356. package/dist/client/chunks/providers-Ds7DRmnO.js +0 -554
  357. package/dist/client/chunks/providers-Ds7DRmnO.js.map +0 -1
  358. package/dist/client/chunks/retention-CzCo8262.js +0 -120
  359. package/dist/client/chunks/retention-CzCo8262.js.map +0 -1
  360. package/dist/client/chunks/schema-visualization-B97a1Ybu.js +0 -772
  361. package/dist/client/chunks/schema-visualization-B97a1Ybu.js.map +0 -1
  362. package/dist/client/chunks/sql-IeKX8fQ8.js +0 -616
  363. package/dist/client/chunks/sql-IeKX8fQ8.js.map +0 -1
  364. package/dist/client/chunks/syntaxHighlighting-DAMSW_A6.js +0 -34
  365. package/dist/client/chunks/syntaxHighlighting-DAMSW_A6.js.map +0 -1
  366. package/dist/client/chunks/theme-Dp3hFed1.js +0 -112
  367. package/dist/client/chunks/theme-Dp3hFed1.js.map +0 -1
  368. package/dist/client/chunks/useDirtyStateTracking-CyAXd07d.js +0 -1231
  369. package/dist/client/chunks/useDirtyStateTracking-CyAXd07d.js.map +0 -1
  370. package/dist/client/chunks/useExplainAI-CfQ_JmF1.js +0 -182
  371. package/dist/client/chunks/useExplainAI-CfQ_JmF1.js.map +0 -1
  372. package/dist/client/chunks/vendor-B2EH3V58.js +0 -2892
  373. package/dist/client/chunks/vendor-B2EH3V58.js.map +0 -1
  374. package/dist/client/components.js.map +0 -1
  375. package/dist/client/hooks.js.map +0 -1
  376. package/dist/client/icons.js.map +0 -1
  377. package/dist/client/providers.js.map +0 -1
  378. package/dist/client/utils.js.map +0 -1
  379. package/dist/server/anthropic-BTkjgFpT.cjs +0 -1
  380. package/dist/server/anthropic-CTu9E801.js +0 -126
  381. package/dist/server/google-BAK9pnQf.cjs +0 -2
  382. package/dist/server/google-DficVAsJ.js +0 -146
  383. package/dist/server/index-BgCeQBuN.cjs +0 -2
  384. package/dist/server/index-C3PskWTr.js +0 -5353
  385. package/dist/server/index-C45_meK_.js +0 -719
  386. package/dist/server/index-ht4NPca9.cjs +0 -23
  387. package/dist/server/openai-BvA6eLs8.cjs +0 -1
  388. package/dist/server/openai-mcE24du8.js +0 -131
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-measure-profile-CVlqGslU.js","names":[],"sources":["../../../src/client/components/charts/MeasureProfileChart.tsx"],"sourcesContent":["import React, { useMemo } from 'react'\nimport { LineChart, Line, XAxis, YAxis, CartesianGrid, ReferenceLine, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport AngledXAxisTick from './AngledXAxisTick'\nimport { CHART_COLORS, CHART_MARGINS } from '../../utils/chartConstants'\nimport { formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport type { ChartProps } from '../../types'\n\n/**\n * Pivots N measures from chartConfig.yAxis[] into sequential X-axis points.\n * Each measure becomes one X-axis category; its numeric value is Y.\n * When a series dimension is provided, values are averaged across all rows\n * that share the same series value.\n *\n * Input (normal cube rows):\n * [{ 'Markouts.avgMinus2m': 10, 'Markouts.avgAtEvent': 0, 'Trades.symbol': 'AAPL' },\n * { 'Markouts.avgMinus2m': 12, 'Markouts.avgAtEvent': 1, 'Trades.symbol': 'AAPL' }]\n *\n * Output (one row per measure, values averaged per series):\n * [{ measureKey: 'Markouts.avgMinus2m', measureLabel: <getFieldLabel result>, AAPL: 11 },\n * { measureKey: 'Markouts.avgAtEvent', measureLabel: <getFieldLabel result>, AAPL: 0.5 }]\n */\nfunction pivotMeasuresToProfile(\n data: Record<string, unknown>[],\n yAxisFields: string[],\n seriesField: string | undefined,\n getFieldLabel: (field: string) => string\n): { profileData: Record<string, unknown>[]; seriesKeys: string[] } {\n if (!data || data.length === 0 || yAxisFields.length === 0) {\n return { profileData: [], seriesKeys: [] }\n }\n\n if (seriesField) {\n const seriesValues = Array.from(new Set(data.map((row) => String(row[seriesField] ?? 'Unknown'))))\n const profileData = yAxisFields.map((field) => {\n const base: Record<string, unknown> = {\n measureKey: field,\n measureLabel: getFieldLabel(field),\n }\n for (const seriesVal of seriesValues) {\n const matchingRows = data.filter((row) => String(row[seriesField] ?? 'Unknown') === seriesVal)\n const values = matchingRows\n .map((r) => {\n const v = r[field]\n return typeof v === 'number' ? v : parseFloat(String(v ?? ''))\n })\n .filter((v) => !isNaN(v))\n base[seriesVal] = values.length > 0 ? values.reduce((a, b) => a + b, 0) / values.length : null\n }\n return base\n })\n return { profileData, seriesKeys: seriesValues }\n } else {\n const VALUE_KEY = '_value'\n const profileData = yAxisFields.map((field) => {\n const values = data\n .map((r) => {\n const v = r[field]\n return typeof v === 'number' ? v : parseFloat(String(v ?? ''))\n })\n .filter((v) => !isNaN(v))\n return {\n measureKey: field,\n measureLabel: getFieldLabel(field),\n [VALUE_KEY]: values.length > 0 ? values.reduce((a, b) => a + b, 0) / values.length : null,\n }\n })\n return { profileData, seriesKeys: [VALUE_KEY] }\n }\n}\n\nconst MeasureProfileChart = React.memo(function MeasureProfileChart({\n data,\n chartConfig,\n displayConfig = {},\n height = '100%',\n colorPalette,\n drillEnabled,\n}: ChartProps) {\n const getFieldLabel = useCubeFieldLabel()\n\n const showReferenceLineAtZero = displayConfig?.showReferenceLineAtZero ?? true\n const showDataLabels = displayConfig?.showDataLabels ?? false\n const lineType = displayConfig?.lineType ?? 'monotone'\n const yAxisFormat = displayConfig?.leftYAxisFormat\n\n const { yAxisFields, seriesField, configError } = useMemo(() => {\n const yAxisFields: string[] = Array.isArray(chartConfig?.yAxis)\n ? chartConfig.yAxis\n : []\n const seriesField = Array.isArray(chartConfig?.series)\n ? chartConfig.series[0]\n : chartConfig?.series ?? undefined\n const configError =\n yAxisFields.length < 2 ? 'Measure Profile chart requires at least 2 measures in Y-Axis' : null\n return { yAxisFields, seriesField, configError }\n }, [chartConfig])\n\n const { profileData, seriesKeys } = useMemo(() => {\n if (configError || !data || data.length === 0) return { profileData: [], seriesKeys: [] }\n return pivotMeasuresToProfile(\n data as Record<string, unknown>[],\n yAxisFields,\n seriesField,\n getFieldLabel\n )\n }, [data, yAxisFields, seriesField, getFieldLabel, configError])\n\n const showLegend = (displayConfig?.showLegend ?? true) && seriesKeys.length > 1\n\n try {\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in measure profile chart</div>\n </div>\n </div>\n )\n }\n\n if (configError) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">{configError}</div>\n </div>\n </div>\n )\n }\n return (\n <div className=\"dc:relative dc:w-full\" style={{ height }}>\n <ChartContainer height=\"100%\">\n <LineChart data={profileData} margin={{ ...CHART_MARGINS, left: 40 }} accessibilityLayer={false}>\n <CartesianGrid strokeDasharray=\"3 3\" style={{ pointerEvents: 'none' }} />\n <XAxis dataKey=\"measureLabel\" type=\"category\" tick={<AngledXAxisTick />} height={60} />\n <YAxis\n tick={{ fontSize: 12 }}\n tickFormatter={yAxisFormat ? (v) => formatAxisValue(v, yAxisFormat) : undefined}\n />\n <ChartTooltip\n formatter={(value: any, name: any) => {\n if (value === null || value === undefined) return ['No data', name]\n const formatted = yAxisFormat ? formatAxisValue(value, yAxisFormat) : value?.toLocaleString?.() ?? value\n const displayName = name === '_value' ? (getFieldLabel(yAxisFields[0]?.split('.')[0]) || 'Value') : name\n return [formatted, displayName]\n }}\n />\n {showReferenceLineAtZero && (\n <ReferenceLine y={0} stroke=\"var(--dc-border, #94a3b8)\" strokeDasharray=\"4 2\" />\n )}\n {showLegend && (\n <Legend wrapperStyle={{ fontSize: '12px', paddingTop: '8px' }} />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Line\n key={seriesKey}\n type={lineType}\n dataKey={seriesKey}\n name={seriesKey === '_value' ? (getFieldLabel(yAxisFields[0]?.split('.')[0]) || 'Value') : seriesKey}\n stroke={\n (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) ||\n CHART_COLORS[index % CHART_COLORS.length]\n }\n strokeWidth={2}\n dot={showDataLabels ? { r: 4 } : { r: 3 }}\n activeDot={{ r: 5 }}\n label={showDataLabels ? { position: 'top', fontSize: 10 } : undefined}\n isAnimationActive={false}\n cursor={drillEnabled ? 'pointer' : undefined}\n />\n ))}\n </LineChart>\n </ChartContainer>\n </div>\n )\n } catch (error) {\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Measure Profile Chart Error</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n})\n\nexport default MeasureProfileChart\n"],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ import { n as e } from "./rolldown-runtime-lc2dmIiU.js";
2
+ import { D as t, S as n, _ as r, n as i, x as a, y as o } from "./chart-activity-grid-wR2Twpo7.js";
3
+ import { c as s, l as c } from "./chart-area-e9ysnatQ.js";
4
+ import l, { useState as u } from "react";
5
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
6
+ import { Cell as p, Legend as m, Pie as h, PieChart as g } from "recharts";
7
+ //#region src/client/components/charts/PieChart.tsx
8
+ var _ = /* @__PURE__ */ e({ default: () => v }), v = l.memo(function({ data: e, chartConfig: l, displayConfig: _ = {}, queryObject: v, height: y = "100%", colorPalette: b, onDataPointClick: x, drillEnabled: S }) {
9
+ let [C, w] = u(null), T = r();
10
+ try {
11
+ let r = {
12
+ showLegend: _?.showLegend ?? !0,
13
+ showTooltip: _?.showTooltip ?? !0,
14
+ leftYAxisFormat: _?.leftYAxisFormat,
15
+ innerRadius: _?.innerRadius || "0%"
16
+ };
17
+ if (!e || e.length === 0) return /* @__PURE__ */ d("div", {
18
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
19
+ style: { height: y },
20
+ children: /* @__PURE__ */ f("div", {
21
+ className: "dc:text-center",
22
+ children: [/* @__PURE__ */ d("div", {
23
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
24
+ children: "No data available"
25
+ }), /* @__PURE__ */ d("div", {
26
+ className: "dc:text-xs text-dc-text-secondary",
27
+ children: "No data points to display in pie chart"
28
+ })]
29
+ })
30
+ });
31
+ let u, E, D, O = [];
32
+ if (l?.xAxis && l?.yAxis) E = Array.isArray(l.xAxis) ? l.xAxis[0] : l.xAxis, D = Array.isArray(l.yAxis) ? l.yAxis : [l.yAxis], O = l.series || [];
33
+ else if (l?.x && l?.y) E = l.x, D = Array.isArray(l.y) ? l.y : [l.y];
34
+ else return /* @__PURE__ */ d("div", {
35
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
36
+ style: { height: y },
37
+ children: /* @__PURE__ */ f("div", {
38
+ className: "dc:text-center",
39
+ children: [/* @__PURE__ */ d("div", {
40
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
41
+ children: "Configuration Error"
42
+ }), /* @__PURE__ */ d("div", {
43
+ className: "dc:text-xs",
44
+ children: "chartConfig.x/y or chartConfig.xAxis/yAxis required for pie chart"
45
+ })]
46
+ })
47
+ });
48
+ if (!E || !D || D.length === 0) return /* @__PURE__ */ d("div", {
49
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
50
+ style: { height: y },
51
+ children: /* @__PURE__ */ f("div", {
52
+ className: "dc:text-center",
53
+ children: [/* @__PURE__ */ d("div", {
54
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
55
+ children: "Configuration Error"
56
+ }), /* @__PURE__ */ d("div", {
57
+ className: "dc:text-xs",
58
+ children: "Missing required X-axis or Y-axis fields"
59
+ })]
60
+ })
61
+ });
62
+ if (O.length > 0) {
63
+ let { data: n } = t(e, E, D, v, O, T);
64
+ if (u = [], n.length > 0) {
65
+ let e = n[0];
66
+ Object.keys(e).forEach((t) => {
67
+ t !== "name" && typeof e[t] == "number" && u.push({
68
+ name: String(t),
69
+ value: e[t]
70
+ });
71
+ });
72
+ }
73
+ } else {
74
+ let t = n(v, E);
75
+ u = e.map((e) => {
76
+ let n = a(e[E], t) || String(e[E]) || "Unknown";
77
+ return typeof e[E] == "boolean" ? n = e[E] ? "Active" : "Inactive" : (n === "true" || n === "false") && (n = n === "true" ? "Active" : "Inactive"), {
78
+ name: n,
79
+ value: typeof e[D[0]] == "string" ? parseFloat(e[D[0]]) : e[D[0]] || 0
80
+ };
81
+ });
82
+ }
83
+ let k = u.length;
84
+ return u = u.filter((e) => e.value != null && !isNaN(e.value) && e.value !== 0 && e.value > 0), u.length === 0 ? /* @__PURE__ */ d("div", {
85
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
86
+ style: { height: y },
87
+ children: /* @__PURE__ */ f("div", {
88
+ className: "dc:text-center",
89
+ children: [/* @__PURE__ */ d("div", {
90
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
91
+ children: "No valid data"
92
+ }), /* @__PURE__ */ d("div", {
93
+ className: "dc:text-xs text-dc-text-secondary",
94
+ children: k > 0 ? `Filtered out ${k} data points (zero or invalid values)` : "No data points to display in pie chart"
95
+ })]
96
+ })
97
+ }) : /* @__PURE__ */ d(c, {
98
+ height: y,
99
+ children: /* @__PURE__ */ f(g, {
100
+ accessibilityLayer: !1,
101
+ children: [
102
+ /* @__PURE__ */ d(h, {
103
+ data: u,
104
+ cx: "50%",
105
+ cy: "50%",
106
+ innerRadius: r.innerRadius === "0%" ? void 0 : r.innerRadius,
107
+ outerRadius: "70%",
108
+ dataKey: "value",
109
+ label: r.showLegend ? void 0 : ({ name: e, percent: t }) => `${e} ${((t || 0) * 100).toFixed(0)}%`,
110
+ cursor: S ? "pointer" : void 0,
111
+ onClick: (e, t, n) => {
112
+ x && S && e && x({
113
+ dataPoint: e,
114
+ clickedField: D[0],
115
+ xValue: e.name,
116
+ position: {
117
+ x: n.clientX,
118
+ y: n.clientY
119
+ },
120
+ nativeEvent: n
121
+ });
122
+ },
123
+ children: u.map((e, t) => /* @__PURE__ */ d(p, {
124
+ fill: b?.colors && b.colors[t % b.colors.length] || i[t % i.length],
125
+ fillOpacity: C ? C === u[t].name ? 1 : .3 : 1
126
+ }, `cell-${t}`))
127
+ }),
128
+ r.showTooltip && /* @__PURE__ */ d(s, { formatter: r.leftYAxisFormat ? (e, t) => [o(e, r.leftYAxisFormat), t] : void 0 }),
129
+ r.showLegend && /* @__PURE__ */ d(m, {
130
+ wrapperStyle: {
131
+ fontSize: "12px",
132
+ paddingTop: "10px"
133
+ },
134
+ iconType: "circle",
135
+ iconSize: 8,
136
+ layout: "horizontal",
137
+ align: "center",
138
+ verticalAlign: "bottom",
139
+ onMouseEnter: (e) => w(String(e.value || "")),
140
+ onMouseLeave: () => w(null)
141
+ })
142
+ ]
143
+ })
144
+ });
145
+ } catch (e) {
146
+ return /* @__PURE__ */ d("div", {
147
+ className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
148
+ style: { height: y },
149
+ children: /* @__PURE__ */ f("div", {
150
+ className: "dc:text-center",
151
+ children: [
152
+ /* @__PURE__ */ d("div", {
153
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
154
+ children: "Pie Chart Error"
155
+ }),
156
+ /* @__PURE__ */ d("div", {
157
+ className: "dc:text-xs dc:mb-2",
158
+ children: e instanceof Error ? e.message : "Unknown rendering error"
159
+ }),
160
+ /* @__PURE__ */ d("div", {
161
+ className: "dc:text-xs text-dc-text-muted",
162
+ children: "Check the data and configuration"
163
+ })
164
+ ]
165
+ })
166
+ });
167
+ }
168
+ });
169
+ //#endregion
170
+ export { _ as n, v as t };
171
+
172
+ //# sourceMappingURL=chart-pie-DafSc9sE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-pie-DafSc9sE.js","names":[],"sources":["../../../src/client/components/charts/PieChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { PieChart as RechartsPieChart, Pie, Cell, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatTimeValue, getFieldGranularity, formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport type { ChartProps } from '../../types'\n\nconst PieChart = React.memo(function PieChart({\n data,\n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette,\n onDataPointClick,\n drillEnabled\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n // Use specialized hook to avoid re-renders from unrelated context changes\n const getFieldLabel = useCubeFieldLabel()\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n leftYAxisFormat: displayConfig?.leftYAxisFormat,\n innerRadius: displayConfig?.innerRadius || '0%'\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in pie chart</div>\n </div>\n </div>\n )\n }\n\n let pieData: Array<{name: string, value: number}>\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">chartConfig.x/y or chartConfig.xAxis/yAxis required for pie chart</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n if (seriesFields.length > 0) {\n // Use series-based transformation for dimension-based pie slices\n const { data: chartData } = transformChartDataWithSeries(\n data,\n xAxisField,\n yAxisFields,\n queryObject,\n seriesFields,\n getFieldLabel\n )\n \n // Convert series data to pie format\n pieData = []\n if (chartData.length > 0) {\n const firstRow = chartData[0]\n Object.keys(firstRow).forEach(key => {\n if (key !== 'name' && typeof firstRow[key] === 'number') {\n pieData.push({\n name: String(key),\n value: firstRow[key]\n })\n }\n })\n }\n } else {\n // Standard measure-based pie chart\n const granularity = getFieldGranularity(queryObject, xAxisField)\n pieData = data.map(item => {\n let name = formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown'\n // Handle boolean values with better labels\n if (typeof item[xAxisField] === 'boolean') {\n name = item[xAxisField] ? 'Active' : 'Inactive'\n } else if (name === 'true' || name === 'false') {\n name = name === 'true' ? 'Active' : 'Inactive'\n }\n return {\n name,\n value: typeof item[yAxisFields[0]] === 'string' \n ? parseFloat(item[yAxisFields[0]]) \n : (item[yAxisFields[0]] || 0)\n }\n })\n }\n\n // Filter out invalid values (null, undefined, NaN, or zero)\n const originalLength = pieData.length\n pieData = pieData.filter(item => \n item.value != null && \n !isNaN(item.value) && \n item.value !== 0 && \n item.value > 0\n )\n \n if (pieData.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No valid data</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">\n {originalLength > 0\n ? `Filtered out ${originalLength} data points (zero or invalid values)`\n : 'No data points to display in pie chart'\n }\n </div>\n </div>\n </div>\n )\n }\n \n return (\n <ChartContainer height={height}>\n <RechartsPieChart accessibilityLayer={false}>\n <Pie\n data={pieData}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={safeDisplayConfig.innerRadius !== '0%' ? safeDisplayConfig.innerRadius : undefined}\n outerRadius=\"70%\"\n dataKey=\"value\"\n label={!safeDisplayConfig.showLegend ? ({ name, percent }) =>\n `${name} ${((percent || 0) * 100).toFixed(0)}%`\n : undefined}\n cursor={drillEnabled ? 'pointer' : undefined}\n onClick={(sliceData: any, _index: number, event: React.MouseEvent) => {\n if (onDataPointClick && drillEnabled && sliceData) {\n onDataPointClick({\n dataPoint: sliceData,\n clickedField: yAxisFields[0],\n xValue: sliceData.name,\n position: { x: event.clientX, y: event.clientY },\n nativeEvent: event\n })\n }\n }}\n >\n {pieData.map((_entry, index) => (\n <Cell\n key={`cell-${index}`}\n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === pieData[index].name ? 1 : 0.3) : 1}\n />\n ))}\n </Pie>\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any, name: string) => [formatAxisValue(value, safeDisplayConfig.leftYAxisFormat), name]\n : undefined\n }\n />\n )}\n {safeDisplayConfig.showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.value || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n </RechartsPieChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'PieChart rendering error\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Pie Chart Error</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n})\n\nexport default PieChart"],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ import { n as e } from "./rolldown-runtime-lc2dmIiU.js";
2
+ import { D as t, S as n, n as r, x as i, y as a } from "./chart-activity-grid-wR2Twpo7.js";
3
+ import { c as o, l as s } from "./chart-area-e9ysnatQ.js";
4
+ import c, { useState as l } from "react";
5
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
6
+ import { Legend as f, PolarAngleAxis as p, PolarGrid as m, PolarRadiusAxis as h, Radar as g, RadarChart as _ } from "recharts";
7
+ //#region src/client/components/charts/RadarChart.tsx
8
+ var v = /* @__PURE__ */ e({ default: () => y }), y = c.memo(function({ data: e, chartConfig: c, displayConfig: v = {}, queryObject: y, height: b = "100%", colorPalette: x }) {
9
+ let [S, C] = l(null);
10
+ try {
11
+ let l = {
12
+ showLegend: v?.showLegend ?? !0,
13
+ showTooltip: v?.showTooltip ?? !0,
14
+ showGrid: v?.showGrid ?? !0,
15
+ leftYAxisFormat: v?.leftYAxisFormat
16
+ };
17
+ if (!e || e.length === 0) return /* @__PURE__ */ u("div", {
18
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
19
+ style: { height: b },
20
+ children: /* @__PURE__ */ d("div", {
21
+ className: "dc:text-center",
22
+ children: [/* @__PURE__ */ u("div", {
23
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
24
+ children: "No data available"
25
+ }), /* @__PURE__ */ u("div", {
26
+ className: "dc:text-xs text-dc-text-secondary",
27
+ children: "No data points to display in radar chart"
28
+ })]
29
+ })
30
+ });
31
+ let w, T = [];
32
+ if (c?.xAxis && c?.yAxis) {
33
+ let { data: n, seriesKeys: r } = t(e, Array.isArray(c.xAxis) ? c.xAxis[0] : c.xAxis, Array.isArray(c.yAxis) ? c.yAxis : [c.yAxis], y, c.series || []);
34
+ w = n, T = r;
35
+ } else {
36
+ let t = e[0], r = Object.keys(t), a = r.find((e) => typeof t[e] == "string" || e.toLowerCase().includes("subject") || e.toLowerCase().includes("name") || e.toLowerCase().includes("category")) || r[0], o = r.filter((e) => typeof t[e] == "number" && e !== a);
37
+ if (o.length === 0) return /* @__PURE__ */ u("div", {
38
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
39
+ style: { height: b },
40
+ children: /* @__PURE__ */ d("div", {
41
+ className: "dc:text-center",
42
+ children: [/* @__PURE__ */ u("div", {
43
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
44
+ children: "Configuration Error"
45
+ }), /* @__PURE__ */ u("div", {
46
+ className: "dc:text-xs",
47
+ children: "No numeric fields found for radar chart values"
48
+ })]
49
+ })
50
+ });
51
+ if (a) {
52
+ let t = n(y, a);
53
+ w = e.map((e) => {
54
+ let n = { name: i(e[a], t) || String(e[a]) || "Unknown" };
55
+ return o.forEach((t) => {
56
+ let r = t.split(".").pop() || t;
57
+ n[r] = typeof e[t] == "string" ? parseFloat(e[t]) : e[t] || 0;
58
+ }), n;
59
+ }), T = o.map((e) => e.split(".").pop() || e);
60
+ } else w = e.map((e) => ({
61
+ name: String(e[r[0]] || "Unknown"),
62
+ value: typeof e[o[0]] == "string" ? parseFloat(e[o[0]]) : e[o[0]] || 0
63
+ })), T = ["value"];
64
+ }
65
+ return !w || w.length === 0 ? /* @__PURE__ */ u("div", {
66
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
67
+ style: { height: b },
68
+ children: /* @__PURE__ */ d("div", {
69
+ className: "dc:text-center",
70
+ children: [/* @__PURE__ */ u("div", {
71
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
72
+ children: "No valid data"
73
+ }), /* @__PURE__ */ u("div", {
74
+ className: "dc:text-xs text-dc-text-secondary",
75
+ children: "No valid data points for radar chart after transformation"
76
+ })]
77
+ })
78
+ }) : /* @__PURE__ */ u(s, {
79
+ height: b,
80
+ children: /* @__PURE__ */ d(_, {
81
+ data: w,
82
+ margin: {
83
+ top: 20,
84
+ right: 80,
85
+ bottom: 20,
86
+ left: 80
87
+ },
88
+ accessibilityLayer: !1,
89
+ children: [
90
+ l.showGrid && /* @__PURE__ */ u(m, {}),
91
+ /* @__PURE__ */ u(p, {
92
+ dataKey: "name",
93
+ tick: { fontSize: 12 },
94
+ className: "text-dc-text-muted"
95
+ }),
96
+ /* @__PURE__ */ u(h, {
97
+ tick: { fontSize: 10 },
98
+ className: "text-dc-text-muted",
99
+ tickFormatter: l.leftYAxisFormat ? (e) => a(e, l.leftYAxisFormat) : void 0
100
+ }),
101
+ l.showTooltip && /* @__PURE__ */ u(o, { formatter: l.leftYAxisFormat ? (e, t) => [a(e, l.leftYAxisFormat), t] : void 0 }),
102
+ l.showLegend && T.length > 1 && /* @__PURE__ */ u(f, {
103
+ wrapperStyle: {
104
+ fontSize: "12px",
105
+ paddingTop: "10px"
106
+ },
107
+ iconType: "rect",
108
+ iconSize: 8,
109
+ layout: "horizontal",
110
+ align: "center",
111
+ verticalAlign: "bottom",
112
+ onMouseEnter: (e) => C(String(e.dataKey || "")),
113
+ onMouseLeave: () => C(null)
114
+ }),
115
+ T.map((e, t) => /* @__PURE__ */ u(g, {
116
+ name: e,
117
+ dataKey: e,
118
+ stroke: x?.colors && x.colors[t % x.colors.length] || r[t % r.length],
119
+ fill: x?.colors && x.colors[t % x.colors.length] || r[t % r.length],
120
+ fillOpacity: S ? S === e ? .6 : .1 : .3,
121
+ strokeOpacity: S ? S === e ? 1 : .3 : 1,
122
+ strokeWidth: 2
123
+ }, e))
124
+ ]
125
+ })
126
+ });
127
+ } catch (e) {
128
+ return /* @__PURE__ */ u("div", {
129
+ className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
130
+ style: { height: b },
131
+ children: /* @__PURE__ */ d("div", {
132
+ className: "dc:text-center",
133
+ children: [
134
+ /* @__PURE__ */ u("div", {
135
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
136
+ children: "Radar Chart Error"
137
+ }),
138
+ /* @__PURE__ */ u("div", {
139
+ className: "dc:text-xs dc:mb-2",
140
+ children: e instanceof Error ? e.message : "Unknown rendering error"
141
+ }),
142
+ /* @__PURE__ */ u("div", {
143
+ className: "dc:text-xs text-dc-text-muted",
144
+ children: "Check the data and configuration"
145
+ })
146
+ ]
147
+ })
148
+ });
149
+ }
150
+ });
151
+ //#endregion
152
+ export { v as n, y as t };
153
+
154
+ //# sourceMappingURL=chart-radar-Dz9F5k-B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-radar-Dz9F5k-B.js","names":[],"sources":["../../../src/client/components/charts/RadarChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { RadarChart as RechartsRadarChart, PolarGrid, PolarAngleAxis, PolarRadiusAxis, Radar, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatTimeValue, getFieldGranularity, formatAxisValue } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nconst RadarChart = React.memo(function RadarChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n leftYAxisFormat: displayConfig?.leftYAxisFormat\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in radar chart</div>\n </div>\n </div>\n )\n }\n\n let radarData: any[]\n let seriesKeys: string[] = []\n\n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - use chart config\n const xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis // Subject/category field\n const yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis] // Value fields\n const seriesFields = chartConfig.series || []\n\n // Use shared function to transform data and handle series\n const { data: chartData, seriesKeys: transformedSeriesKeys } = transformChartDataWithSeries(\n data, \n xAxisField, \n yAxisFields, \n queryObject,\n seriesFields\n )\n \n radarData = chartData\n seriesKeys = transformedSeriesKeys\n } else {\n // Legacy format or auto-detection - try to find suitable fields\n const firstRow = data[0]\n const keys = Object.keys(firstRow)\n \n // Try to find subject/category field\n const subjectField = keys.find(key => \n typeof firstRow[key] === 'string' ||\n key.toLowerCase().includes('subject') ||\n key.toLowerCase().includes('name') ||\n key.toLowerCase().includes('category')\n ) || keys[0]\n\n // Find numeric fields for values\n const valueFields = keys.filter(key => \n typeof firstRow[key] === 'number' && key !== subjectField\n )\n\n if (valueFields.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">No numeric fields found for radar chart values</div>\n </div>\n </div>\n )\n }\n\n // Transform data for radar chart\n if (subjectField) {\n // Use subject field for radar categories\n const granularity = getFieldGranularity(queryObject, subjectField)\n radarData = data.map(item => {\n const transformedItem: any = {\n name: formatTimeValue(item[subjectField], granularity) || String(item[subjectField]) || 'Unknown'\n }\n \n valueFields.forEach(field => {\n const displayName = field.split('.').pop() || field\n transformedItem[displayName] = typeof item[field] === 'string' \n ? parseFloat(item[field]) \n : (item[field] || 0)\n })\n \n return transformedItem\n })\n \n seriesKeys = valueFields.map(field => field.split('.').pop() || field)\n } else {\n // Fallback - use first value field only\n radarData = data.map(item => ({\n name: String(item[keys[0]] || 'Unknown'),\n value: typeof item[valueFields[0]] === 'string' \n ? parseFloat(item[valueFields[0]]) \n : (item[valueFields[0]] || 0)\n }))\n seriesKeys = ['value']\n }\n }\n \n // Validate transformed data\n if (!radarData || radarData.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No valid data</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No valid data points for radar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <ChartContainer height={height}>\n <RechartsRadarChart data={radarData} margin={{ top: 20, right: 80, bottom: 20, left: 80 }} accessibilityLayer={false}>\n {safeDisplayConfig.showGrid && (\n <PolarGrid />\n )}\n <PolarAngleAxis\n dataKey=\"name\"\n tick={{ fontSize: 12 }}\n className=\"text-dc-text-muted\"\n />\n <PolarRadiusAxis\n tick={{ fontSize: 10 }}\n className=\"text-dc-text-muted\"\n tickFormatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any) => formatAxisValue(value, safeDisplayConfig.leftYAxisFormat)\n : undefined\n }\n />\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any, name: string) => [formatAxisValue(value, safeDisplayConfig.leftYAxisFormat), name]\n : undefined\n }\n />\n )}\n {(safeDisplayConfig.showLegend && seriesKeys.length > 1) && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"rect\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.dataKey || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n {seriesKeys.map((seriesKey, index) => (\n <Radar\n key={seriesKey}\n name={seriesKey}\n dataKey={seriesKey}\n stroke={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 0.6 : 0.1) : 0.3}\n strokeOpacity={hoveredLegend ? (hoveredLegend === seriesKey ? 1 : 0.3) : 1}\n strokeWidth={2}\n />\n ))}\n </RechartsRadarChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'RadarChart rendering error\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Radar Chart Error</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n})\n\nexport default RadarChart"],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import { n as e } from "./rolldown-runtime-lc2dmIiU.js";
2
+ import { S as t, n, x as r, y as i } from "./chart-activity-grid-wR2Twpo7.js";
3
+ import { c as a, l as o } from "./chart-area-e9ysnatQ.js";
4
+ import s, { useState as c } from "react";
5
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
+ import { Cell as d, Legend as f, RadialBar as p, RadialBarChart as m } from "recharts";
7
+ //#region src/client/components/charts/RadialBarChart.tsx
8
+ var h = /* @__PURE__ */ e({ default: () => g }), g = s.memo(function({ data: e, chartConfig: s, displayConfig: h = {}, queryObject: g, height: _ = "100%", colorPalette: v }) {
9
+ let [y, b] = c(null);
10
+ try {
11
+ let c = {
12
+ showLegend: h?.showLegend ?? !0,
13
+ showTooltip: h?.showTooltip ?? !0,
14
+ leftYAxisFormat: h?.leftYAxisFormat
15
+ };
16
+ if (!e || e.length === 0) return /* @__PURE__ */ l("div", {
17
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
18
+ style: { height: _ },
19
+ children: /* @__PURE__ */ u("div", {
20
+ className: "dc:text-center",
21
+ children: [/* @__PURE__ */ l("div", {
22
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
23
+ children: "No data available"
24
+ }), /* @__PURE__ */ l("div", {
25
+ className: "dc:text-xs text-dc-text-secondary",
26
+ children: "No data points to display in radial bar chart"
27
+ })]
28
+ })
29
+ });
30
+ let x;
31
+ if (s?.xAxis && s?.yAxis) {
32
+ let i = Array.isArray(s.xAxis) ? s.xAxis[0] : s.xAxis, a = Array.isArray(s.yAxis) ? s.yAxis[0] : s.yAxis, o = t(g, i);
33
+ x = e.map((e, t) => ({
34
+ name: r(e[i], o) || String(e[i]) || "Unknown",
35
+ value: typeof e[a] == "string" ? parseFloat(e[a]) : e[a] || 0,
36
+ fill: v?.colors && v.colors[t % v.colors.length] || n[t % n.length]
37
+ }));
38
+ } else {
39
+ let t = e[0], r = Object.keys(t), i = r.find((e) => typeof t[e] == "string" || e.toLowerCase().includes("name") || e.toLowerCase().includes("label") || e.toLowerCase().includes("category")) || r[0], a = r.find((e) => typeof t[e] == "number" && e !== i) || r[1];
40
+ if (!a) return /* @__PURE__ */ l("div", {
41
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
42
+ style: { height: _ },
43
+ children: /* @__PURE__ */ u("div", {
44
+ className: "dc:text-center",
45
+ children: [/* @__PURE__ */ l("div", {
46
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
47
+ children: "Configuration Error"
48
+ }), /* @__PURE__ */ l("div", {
49
+ className: "dc:text-xs",
50
+ children: "No numeric field found for radial bar chart values"
51
+ })]
52
+ })
53
+ });
54
+ x = e.map((e, t) => {
55
+ let r = e[i];
56
+ return r = typeof r == "boolean" ? r ? "Active" : "Inactive" : r === "true" || r === "false" ? r === "true" ? "Active" : "Inactive" : String(r), {
57
+ name: r,
58
+ value: typeof e[a] == "string" ? parseFloat(e[a]) : e[a] || 0,
59
+ fill: v?.colors && v.colors[t % v.colors.length] || n[t % n.length]
60
+ };
61
+ });
62
+ }
63
+ return x = x.filter((e) => e.value != null && e.value !== 0), x.length === 0 ? /* @__PURE__ */ l("div", {
64
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
65
+ style: { height: _ },
66
+ children: /* @__PURE__ */ u("div", {
67
+ className: "dc:text-center",
68
+ children: [/* @__PURE__ */ l("div", {
69
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
70
+ children: "No valid data"
71
+ }), /* @__PURE__ */ l("div", {
72
+ className: "dc:text-xs text-dc-text-secondary",
73
+ children: "No valid data points for radial bar chart after transformation"
74
+ })]
75
+ })
76
+ }) : /* @__PURE__ */ l(o, {
77
+ height: _,
78
+ children: /* @__PURE__ */ u(m, {
79
+ data: x,
80
+ innerRadius: "10%",
81
+ outerRadius: "80%",
82
+ margin: {
83
+ top: 20,
84
+ right: 30,
85
+ bottom: 20,
86
+ left: 30
87
+ },
88
+ accessibilityLayer: !1,
89
+ children: [
90
+ c.showTooltip && /* @__PURE__ */ l(a, { formatter: c.leftYAxisFormat ? (e, t) => [i(e, c.leftYAxisFormat), t] : void 0 }),
91
+ c.showLegend && /* @__PURE__ */ l(f, {
92
+ wrapperStyle: {
93
+ fontSize: "12px",
94
+ paddingTop: "10px"
95
+ },
96
+ iconType: "circle",
97
+ iconSize: 8,
98
+ layout: "horizontal",
99
+ align: "center",
100
+ verticalAlign: "bottom",
101
+ onMouseEnter: (e) => b(String(e.value || "")),
102
+ onMouseLeave: () => b(null)
103
+ }),
104
+ /* @__PURE__ */ l(p, {
105
+ dataKey: "value",
106
+ cornerRadius: 4,
107
+ label: {
108
+ position: "insideStart",
109
+ fill: "#fff",
110
+ fontSize: 12,
111
+ formatter: c.leftYAxisFormat ? (e) => i(e, c.leftYAxisFormat) : void 0
112
+ },
113
+ children: x.map((e, t) => /* @__PURE__ */ l(d, {
114
+ fill: e.fill,
115
+ fillOpacity: y ? y === e.name ? 1 : .3 : 1
116
+ }, `cell-${t}`))
117
+ })
118
+ ]
119
+ })
120
+ });
121
+ } catch (e) {
122
+ return /* @__PURE__ */ l("div", {
123
+ className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4",
124
+ style: { height: _ },
125
+ children: /* @__PURE__ */ u("div", {
126
+ className: "dc:text-center",
127
+ children: [
128
+ /* @__PURE__ */ l("div", {
129
+ className: "dc:text-sm dc:font-semibold dc:mb-1",
130
+ children: "Radial Bar Chart Error"
131
+ }),
132
+ /* @__PURE__ */ l("div", {
133
+ className: "dc:text-xs dc:mb-2",
134
+ children: e instanceof Error ? e.message : "Unknown rendering error"
135
+ }),
136
+ /* @__PURE__ */ l("div", {
137
+ className: "dc:text-xs text-dc-text-muted",
138
+ children: "Check the data and configuration"
139
+ })
140
+ ]
141
+ })
142
+ });
143
+ }
144
+ });
145
+ //#endregion
146
+ export { h as n, g as t };
147
+
148
+ //# sourceMappingURL=chart-radial-bar-N3MNUL7o.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-radial-bar-N3MNUL7o.js","names":[],"sources":["../../../src/client/components/charts/RadialBarChart.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { RadialBarChart as RechartsRadialBarChart, RadialBar, Legend, Cell } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, formatAxisValue } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nconst RadialBarChart = React.memo(function RadialBarChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n leftYAxisFormat: displayConfig?.leftYAxisFormat\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No data available</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No data points to display in radial bar chart</div>\n </div>\n </div>\n )\n }\n\n let radialData: Array<{name: string, value: number, fill?: string}>\n\n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format - use chart config\n const xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis // Name/category field\n const yAxisField = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis[0] : chartConfig.yAxis // Value field\n\n const granularity = getFieldGranularity(queryObject, xAxisField)\n radialData = data.map((item, index) => ({\n name: formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown',\n value: typeof item[yAxisField] === 'string' \n ? parseFloat(item[yAxisField]) \n : (item[yAxisField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }))\n } else {\n // Legacy format or auto-detection\n const firstRow = data[0]\n const keys = Object.keys(firstRow)\n \n // Try to find name/label field\n const nameField = keys.find(key => \n typeof firstRow[key] === 'string' ||\n key.toLowerCase().includes('name') ||\n key.toLowerCase().includes('label') ||\n key.toLowerCase().includes('category')\n ) || keys[0]\n\n // Find a numeric field for values\n const valueField = keys.find(key => \n typeof firstRow[key] === 'number' && key !== nameField\n ) || keys[1]\n\n if (!valueField) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Configuration Error</div>\n <div className=\"dc:text-xs\">No numeric field found for radial bar chart values</div>\n </div>\n </div>\n )\n }\n\n // Transform data for radial bar chart\n radialData = data.map((item, index) => {\n let name = item[nameField]\n // Handle boolean values with better labels\n if (typeof name === 'boolean') {\n name = name ? 'Active' : 'Inactive'\n } else if (name === 'true' || name === 'false') {\n name = name === 'true' ? 'Active' : 'Inactive'\n } else {\n name = String(name)\n }\n return {\n name,\n value: typeof item[valueField] === 'string' \n ? parseFloat(item[valueField]) \n : (item[valueField] || 0),\n fill: (colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]\n }\n })\n }\n\n // Filter out zero/null values\n radialData = radialData.filter(item => item.value != null && item.value !== 0)\n \n if (radialData.length === 0) {\n return (\n <div className=\"dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No valid data</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">No valid data points for radial bar chart after transformation</div>\n </div>\n </div>\n )\n }\n\n return (\n <ChartContainer height={height}>\n <RechartsRadialBarChart\n data={radialData}\n innerRadius=\"10%\"\n outerRadius=\"80%\"\n margin={{ top: 20, right: 30, bottom: 20, left: 30 }}\n accessibilityLayer={false}\n >\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip\n formatter={safeDisplayConfig.leftYAxisFormat\n ? (value: any, name: string) => [formatAxisValue(value, safeDisplayConfig.leftYAxisFormat), name]\n : undefined\n }\n />\n )}\n {safeDisplayConfig.showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.value || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n <RadialBar\n dataKey=\"value\"\n cornerRadius={4}\n label={{\n position: 'insideStart',\n fill: '#fff',\n fontSize: 12,\n formatter: safeDisplayConfig.leftYAxisFormat\n ? (value: any) => formatAxisValue(value, safeDisplayConfig.leftYAxisFormat)\n : undefined\n }}\n >\n {radialData.map((entry, index) => (\n <Cell \n key={`cell-${index}`} \n fill={entry.fill}\n fillOpacity={hoveredLegend ? (hoveredLegend === entry.name ? 1 : 0.3) : 1}\n />\n ))}\n </RadialBar>\n </RechartsRadialBarChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'RadialBarChart rendering error\n return (\n <div className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4\" style={{ height }}>\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">Radial Bar Chart Error</div>\n <div className=\"dc:text-xs dc:mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"dc:text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n})\n\nexport default RadialBarChart"],"mappings":"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"}