drizzle-cube 0.4.29 → 0.4.30

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 (381) 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.js +232 -342
  7. package/dist/adapters/fastify/index.cjs +2 -10
  8. package/dist/adapters/fastify/index.js +275 -424
  9. package/dist/adapters/google-CT4kgmBf.js +154 -0
  10. package/dist/adapters/google-Dgo9-Kb5.cjs +2 -0
  11. package/dist/adapters/handler-B8vuFQYP.cjs +25 -0
  12. package/dist/adapters/handler-D-2-6uLM.js +2951 -0
  13. package/dist/adapters/hono/index.cjs +2 -10
  14. package/dist/adapters/hono/index.js +307 -402
  15. package/dist/adapters/mcp-prompts-BAutSQYA.js +344 -0
  16. package/dist/adapters/mcp-prompts-DsAkafVn.cjs +5 -0
  17. package/dist/adapters/mcp-transport-CuugoG8t.js +7821 -0
  18. package/dist/adapters/mcp-transport-Dpp6hdZe.cjs +253 -0
  19. package/dist/adapters/nextjs/index.cjs +1 -9
  20. package/dist/adapters/nextjs/index.js +377 -600
  21. package/dist/adapters/openai-CjBvA6mK.js +4114 -0
  22. package/dist/adapters/openai-DhLE0A9Z.cjs +1 -0
  23. package/dist/adapters/openai-Zjw4Zo4R.js +153 -0
  24. package/dist/adapters/openai-eJBw3LfQ.cjs +16 -0
  25. package/dist/adapters/types.cjs +0 -1
  26. package/dist/adapters/types.js +0 -1
  27. package/dist/adapters/utils-ChhNGUOF.js +5396 -0
  28. package/dist/adapters/utils-CwJplXR5.cjs +15 -0
  29. package/dist/adapters/utils.cjs +1 -19
  30. package/dist/adapters/utils.js +2 -21333
  31. package/dist/client/charts.js +15 -186
  32. package/dist/client/chunks/DashboardEditModal-C076pscL.js +6678 -0
  33. package/dist/client/chunks/DashboardEditModal-C076pscL.js.map +1 -0
  34. package/dist/client/chunks/FieldSearchModal-C0DjSWk3.js +2631 -0
  35. package/dist/client/chunks/FieldSearchModal-C0DjSWk3.js.map +1 -0
  36. package/dist/client/chunks/RetentionCombinedChart-DuGXc-AP.js +270 -0
  37. package/dist/client/chunks/RetentionCombinedChart-DuGXc-AP.js.map +1 -0
  38. package/dist/client/chunks/RetentionCombinedChart.config-DprbXd1N.js +56 -0
  39. package/dist/client/chunks/RetentionCombinedChart.config-DprbXd1N.js.map +1 -0
  40. package/dist/client/chunks/RetentionHeatmap-BoGY6mlZ.js +193 -0
  41. package/dist/client/chunks/RetentionHeatmap-BoGY6mlZ.js.map +1 -0
  42. package/dist/client/chunks/RetentionHeatmap.config-cbaNExVy.js +25 -0
  43. package/dist/client/chunks/RetentionHeatmap.config-cbaNExVy.js.map +1 -0
  44. package/dist/client/chunks/analysis-builder-DF0XntqC.js +6111 -0
  45. package/dist/client/chunks/analysis-builder-DF0XntqC.js.map +1 -0
  46. package/dist/client/chunks/analysis-builder-shared-2QhKYbs6.js +3114 -0
  47. package/dist/client/chunks/analysis-builder-shared-2QhKYbs6.js.map +1 -0
  48. package/dist/client/chunks/chart-activity-grid-CNES9VBk.js +803 -0
  49. package/dist/client/chunks/chart-activity-grid-CNES9VBk.js.map +1 -0
  50. package/dist/client/chunks/chart-area-CRJc3KOu.js +449 -0
  51. package/dist/client/chunks/chart-area-CRJc3KOu.js.map +1 -0
  52. package/dist/client/chunks/chart-bar-DD2PjJ5n.js +270 -0
  53. package/dist/client/chunks/chart-bar-DD2PjJ5n.js.map +1 -0
  54. package/dist/client/chunks/chart-box-plot-BcqleldJ.js +377 -0
  55. package/dist/client/chunks/chart-box-plot-BcqleldJ.js.map +1 -0
  56. package/dist/client/chunks/chart-bubble-BmQkVk4K.js +273 -0
  57. package/dist/client/chunks/chart-bubble-BmQkVk4K.js.map +1 -0
  58. package/dist/client/chunks/chart-candlestick-C3Rep469.js +306 -0
  59. package/dist/client/chunks/chart-candlestick-C3Rep469.js.map +1 -0
  60. package/dist/client/chunks/chart-config-activity-grid-USo7JrPh.js +51 -0
  61. package/dist/client/chunks/chart-config-activity-grid-USo7JrPh.js.map +1 -0
  62. package/dist/client/chunks/chart-config-area-D_ZufYzg.js +93 -0
  63. package/dist/client/chunks/chart-config-area-D_ZufYzg.js.map +1 -0
  64. package/dist/client/chunks/chart-config-bar-BCi2Wmd6.js +87 -0
  65. package/dist/client/chunks/chart-config-bar-BCi2Wmd6.js.map +1 -0
  66. package/dist/client/chunks/chart-config-box-plot-afKLzJSp.js +35 -0
  67. package/dist/client/chunks/chart-config-box-plot-afKLzJSp.js.map +1 -0
  68. package/dist/client/chunks/chart-config-bubble-CgbBjPv8.js +82 -0
  69. package/dist/client/chunks/chart-config-bubble-CgbBjPv8.js.map +1 -0
  70. package/dist/client/chunks/chart-config-candlestick-7boGjZ-A.js +72 -0
  71. package/dist/client/chunks/chart-config-candlestick-7boGjZ-A.js.map +1 -0
  72. package/dist/client/chunks/chart-config-data-table-Cl7sBasW.js +30 -0
  73. package/dist/client/chunks/chart-config-data-table-Cl7sBasW.js.map +1 -0
  74. package/dist/client/chunks/chart-config-funnel-CXPYQtTl.js +93 -0
  75. package/dist/client/chunks/chart-config-funnel-CXPYQtTl.js.map +1 -0
  76. package/dist/client/chunks/chart-config-gauge-DUNEUCvh.js +64 -0
  77. package/dist/client/chunks/chart-config-gauge-DUNEUCvh.js.map +1 -0
  78. package/dist/client/chunks/chart-config-heat-map-BFf1tO11.js +91 -0
  79. package/dist/client/chunks/chart-config-heat-map-BFf1tO11.js.map +1 -0
  80. package/dist/client/chunks/chart-config-kpi-delta-C5k2waIJ.js +94 -0
  81. package/dist/client/chunks/chart-config-kpi-delta-C5k2waIJ.js.map +1 -0
  82. package/dist/client/chunks/chart-config-kpi-number-DptOyhk0.js +75 -0
  83. package/dist/client/chunks/chart-config-kpi-number-DptOyhk0.js.map +1 -0
  84. package/dist/client/chunks/chart-config-kpi-text-D9DdVWqd.js +47 -0
  85. package/dist/client/chunks/chart-config-kpi-text-D9DdVWqd.js.map +1 -0
  86. package/dist/client/chunks/chart-config-line-B3NgLF7K.js +104 -0
  87. package/dist/client/chunks/chart-config-line-B3NgLF7K.js.map +1 -0
  88. package/dist/client/chunks/chart-config-markdown-tlfivQTt.js +117 -0
  89. package/dist/client/chunks/chart-config-markdown-tlfivQTt.js.map +1 -0
  90. package/dist/client/chunks/chart-config-measure-profile-D7XDwrU2.js +82 -0
  91. package/dist/client/chunks/chart-config-measure-profile-D7XDwrU2.js.map +1 -0
  92. package/dist/client/chunks/chart-config-pie-wY0B52PC.js +68 -0
  93. package/dist/client/chunks/chart-config-pie-wY0B52PC.js.map +1 -0
  94. package/dist/client/chunks/chart-config-radar-DRpJBy1M.js +49 -0
  95. package/dist/client/chunks/chart-config-radar-DRpJBy1M.js.map +1 -0
  96. package/dist/client/chunks/chart-config-radial-bar-DCUpXv9G.js +38 -0
  97. package/dist/client/chunks/chart-config-radial-bar-DCUpXv9G.js.map +1 -0
  98. package/dist/client/chunks/chart-config-sankey-CdOhlm4h.js +66 -0
  99. package/dist/client/chunks/chart-config-sankey-CdOhlm4h.js.map +1 -0
  100. package/dist/client/chunks/chart-config-scatter-B2su_x8f.js +61 -0
  101. package/dist/client/chunks/chart-config-scatter-B2su_x8f.js.map +1 -0
  102. package/dist/client/chunks/chart-config-sunburst-BPdjbk18.js +45 -0
  103. package/dist/client/chunks/chart-config-sunburst-BPdjbk18.js.map +1 -0
  104. package/dist/client/chunks/chart-config-tree-map-Cbsh2fe2.js +51 -0
  105. package/dist/client/chunks/chart-config-tree-map-Cbsh2fe2.js.map +1 -0
  106. package/dist/client/chunks/chart-config-waterfall-DGmuZfQF.js +59 -0
  107. package/dist/client/chunks/chart-config-waterfall-DGmuZfQF.js.map +1 -0
  108. package/dist/client/chunks/chart-data-table-DehW1C1G.js +4088 -0
  109. package/dist/client/chunks/chart-data-table-DehW1C1G.js.map +1 -0
  110. package/dist/client/chunks/chart-funnel-BjkpnG5g.js +447 -0
  111. package/dist/client/chunks/chart-funnel-BjkpnG5g.js.map +1 -0
  112. package/dist/client/chunks/chart-gauge-BWW_HEfg.js +424 -0
  113. package/dist/client/chunks/chart-gauge-BWW_HEfg.js.map +1 -0
  114. package/dist/client/chunks/chart-heat-map-BWuOuDcm.js +236 -0
  115. package/dist/client/chunks/chart-heat-map-BWuOuDcm.js.map +1 -0
  116. package/dist/client/chunks/chart-kpi-delta-D5OHtDJx.js +343 -0
  117. package/dist/client/chunks/chart-kpi-delta-D5OHtDJx.js.map +1 -0
  118. package/dist/client/chunks/chart-kpi-number-C9zH-aKC.js +326 -0
  119. package/dist/client/chunks/chart-kpi-number-C9zH-aKC.js.map +1 -0
  120. package/dist/client/chunks/chart-kpi-text-ChVn3S7j.js +149 -0
  121. package/dist/client/chunks/chart-kpi-text-ChVn3S7j.js.map +1 -0
  122. package/dist/client/chunks/chart-line-DOIMkP0b.js +431 -0
  123. package/dist/client/chunks/chart-line-DOIMkP0b.js.map +1 -0
  124. package/dist/client/chunks/chart-markdown-DXxc43w1.js +3457 -0
  125. package/dist/client/chunks/chart-markdown-DXxc43w1.js.map +1 -0
  126. package/dist/client/chunks/chart-measure-profile-C6wrr9il.js +179 -0
  127. package/dist/client/chunks/chart-measure-profile-C6wrr9il.js.map +1 -0
  128. package/dist/client/chunks/chart-pie-BU_FgwDc.js +172 -0
  129. package/dist/client/chunks/chart-pie-BU_FgwDc.js.map +1 -0
  130. package/dist/client/chunks/chart-radar-DlufwnAX.js +154 -0
  131. package/dist/client/chunks/chart-radar-DlufwnAX.js.map +1 -0
  132. package/dist/client/chunks/chart-radial-bar-B5vS_Aw5.js +148 -0
  133. package/dist/client/chunks/chart-radial-bar-B5vS_Aw5.js.map +1 -0
  134. package/dist/client/chunks/chart-sankey-FChb26UX.js +222 -0
  135. package/dist/client/chunks/chart-sankey-FChb26UX.js.map +1 -0
  136. package/dist/client/chunks/chart-scatter-DW0cAZ2H.js +255 -0
  137. package/dist/client/chunks/chart-scatter-DW0cAZ2H.js.map +1 -0
  138. package/dist/client/chunks/chart-sunburst-Clf-6WxW.js +221 -0
  139. package/dist/client/chunks/chart-sunburst-Clf-6WxW.js.map +1 -0
  140. package/dist/client/chunks/chart-tree-map-p_VwUJPF.js +298 -0
  141. package/dist/client/chunks/chart-tree-map-p_VwUJPF.js.map +1 -0
  142. package/dist/client/chunks/chart-waterfall-jt44IQ-w.js +237 -0
  143. package/dist/client/chunks/chart-waterfall-jt44IQ-w.js.map +1 -0
  144. package/dist/client/chunks/charts-core-CUVzf4cV.js +215 -0
  145. package/dist/client/chunks/charts-core-CUVzf4cV.js.map +1 -0
  146. package/dist/client/chunks/charts-loader-AGpph8_I.js +259 -0
  147. package/dist/client/chunks/charts-loader-AGpph8_I.js.map +1 -0
  148. package/dist/client/chunks/core-D1TOj17W.js +845 -0
  149. package/dist/client/chunks/core-D1TOj17W.js.map +1 -0
  150. package/dist/client/chunks/dist-DDBeV_JI.js +847 -0
  151. package/dist/client/chunks/dist-DDBeV_JI.js.map +1 -0
  152. package/dist/client/chunks/javascript-BBwTSo6e.js +438 -0
  153. package/dist/client/chunks/javascript-BBwTSo6e.js.map +1 -0
  154. package/dist/client/chunks/json-BpTrLZSh.js +38 -0
  155. package/dist/client/chunks/json-BpTrLZSh.js.map +1 -0
  156. package/dist/client/chunks/lazyChartConfigRegistry-BjhxDaSf.js +149 -0
  157. package/dist/client/chunks/lazyChartConfigRegistry-BjhxDaSf.js.map +1 -0
  158. package/dist/client/chunks/providers-DX3Vw5kc.js +7 -0
  159. package/dist/client/chunks/providers-DX3Vw5kc.js.map +1 -0
  160. package/dist/client/chunks/retention-UEXlSdZ-.js +132 -0
  161. package/dist/client/chunks/retention-UEXlSdZ-.js.map +1 -0
  162. package/dist/client/chunks/rolldown-runtime-lc2dmIiU.js +20 -0
  163. package/dist/client/chunks/schema-visualization-ZugB4Io9.js +1073 -0
  164. package/dist/client/chunks/schema-visualization-ZugB4Io9.js.map +1 -0
  165. package/dist/client/chunks/sql-B0chxcEK.js +120 -0
  166. package/dist/client/chunks/sql-B0chxcEK.js.map +1 -0
  167. package/dist/client/chunks/syntaxHighlighting-87bOwTxj.js +30 -0
  168. package/dist/client/chunks/syntaxHighlighting-87bOwTxj.js.map +1 -0
  169. package/dist/client/chunks/useDebounce-BQjNWndQ.js +1394 -0
  170. package/dist/client/chunks/useDebounce-BQjNWndQ.js.map +1 -0
  171. package/dist/client/chunks/useDirtyStateTracking-CgKZWkel.js +66 -0
  172. package/dist/client/chunks/useDirtyStateTracking-CgKZWkel.js.map +1 -0
  173. package/dist/client/chunks/useExplainAI-c_bHxZe5.js +203 -0
  174. package/dist/client/chunks/useExplainAI-c_bHxZe5.js.map +1 -0
  175. package/dist/client/chunks/useNotebookLayout-BFZ_33Kb.js +37 -0
  176. package/dist/client/chunks/useNotebookLayout-BFZ_33Kb.js.map +1 -0
  177. package/dist/client/chunks/utils-A54Ny29G.js +128 -0
  178. package/dist/client/chunks/utils-A54Ny29G.js.map +1 -0
  179. package/dist/client/chunks/vendor-CoPBRumI.js +828 -0
  180. package/dist/client/chunks/vendor-CoPBRumI.js.map +1 -0
  181. package/dist/client/components.js +4 -18
  182. package/dist/client/hooks.js +6 -58
  183. package/dist/client/icons.js +2 -15
  184. package/dist/client/index.js +1061 -1295
  185. package/dist/client/index.js.map +1 -1
  186. package/dist/client/providers.js +3 -9
  187. package/dist/client/styles.css +2 -1
  188. package/dist/client/types.d.ts +1 -0
  189. package/dist/client/utils.js +7 -74
  190. package/dist/client-bundle-stats.html +1 -1
  191. package/dist/server/anthropic-BsNspi1r.js +140 -0
  192. package/dist/server/anthropic-DsCEX6Fm.cjs +1 -0
  193. package/dist/server/dist-CMWZC51B.js +581 -0
  194. package/dist/server/dist-DxegvyZF.cjs +2 -0
  195. package/dist/server/google-BXwMolCu.js +154 -0
  196. package/dist/server/google-DzQWXFwF.cjs +2 -0
  197. package/dist/server/index.cjs +109 -129
  198. package/dist/server/index.js +15089 -34394
  199. package/dist/server/openai-BPhmb8mi.js +4114 -0
  200. package/dist/server/openai-CLsoLaue.cjs +1 -0
  201. package/dist/server/openai-D1kZ5sdM.js +153 -0
  202. package/dist/server/openai-DkOKbVLC.cjs +16 -0
  203. package/package.json +5 -5
  204. package/dist/adapters/anthropic-BTkjgFpT.cjs +0 -1
  205. package/dist/adapters/anthropic-CTu9E801.js +0 -126
  206. package/dist/adapters/google-BAK9pnQf.cjs +0 -2
  207. package/dist/adapters/google-DficVAsJ.js +0 -146
  208. package/dist/adapters/handler-BHguLZOY.js +0 -2713
  209. package/dist/adapters/handler-DOIyiFPg.cjs +0 -39
  210. package/dist/adapters/index-BgCeQBuN.cjs +0 -2
  211. package/dist/adapters/index-C3PskWTr.js +0 -5353
  212. package/dist/adapters/index-C45_meK_.js +0 -719
  213. package/dist/adapters/index-ht4NPca9.cjs +0 -23
  214. package/dist/adapters/mcp-transport-CWGqDQSI.cjs +0 -259
  215. package/dist/adapters/mcp-transport-CyeHMDPl.js +0 -11055
  216. package/dist/adapters/openai-BvA6eLs8.cjs +0 -1
  217. package/dist/adapters/openai-mcE24du8.js +0 -131
  218. package/dist/client/charts.js.map +0 -1
  219. package/dist/client/chunks/RetentionCombinedChart--SnU4Y_I.js +0 -256
  220. package/dist/client/chunks/RetentionCombinedChart--SnU4Y_I.js.map +0 -1
  221. package/dist/client/chunks/RetentionCombinedChart.config-Bbp2ghim.js +0 -48
  222. package/dist/client/chunks/RetentionCombinedChart.config-Bbp2ghim.js.map +0 -1
  223. package/dist/client/chunks/RetentionHeatmap-BHYU8MXY.js +0 -178
  224. package/dist/client/chunks/RetentionHeatmap-BHYU8MXY.js.map +0 -1
  225. package/dist/client/chunks/RetentionHeatmap.config-BWf_-vdj.js +0 -29
  226. package/dist/client/chunks/RetentionHeatmap.config-BWf_-vdj.js.map +0 -1
  227. package/dist/client/chunks/analysis-builder-DMFoAkjT.js +0 -6203
  228. package/dist/client/chunks/analysis-builder-DMFoAkjT.js.map +0 -1
  229. package/dist/client/chunks/analysis-builder-shared-CunrT3gi.js +0 -3140
  230. package/dist/client/chunks/analysis-builder-shared-CunrT3gi.js.map +0 -1
  231. package/dist/client/chunks/chart-activity-grid-DCznpK6N.js +0 -347
  232. package/dist/client/chunks/chart-activity-grid-DCznpK6N.js.map +0 -1
  233. package/dist/client/chunks/chart-area-CqKRIUpj.js +0 -234
  234. package/dist/client/chunks/chart-area-CqKRIUpj.js.map +0 -1
  235. package/dist/client/chunks/chart-bar-Bl5jvrU_.js +0 -267
  236. package/dist/client/chunks/chart-bar-Bl5jvrU_.js.map +0 -1
  237. package/dist/client/chunks/chart-box-plot-CzMb00z_.js +0 -322
  238. package/dist/client/chunks/chart-box-plot-CzMb00z_.js.map +0 -1
  239. package/dist/client/chunks/chart-bubble-BF8Z52eW.js +0 -249
  240. package/dist/client/chunks/chart-bubble-BF8Z52eW.js.map +0 -1
  241. package/dist/client/chunks/chart-candlestick-ByWS945g.js +0 -269
  242. package/dist/client/chunks/chart-candlestick-ByWS945g.js.map +0 -1
  243. package/dist/client/chunks/chart-config-activity-grid-CmOqDuOT.js +0 -50
  244. package/dist/client/chunks/chart-config-activity-grid-CmOqDuOT.js.map +0 -1
  245. package/dist/client/chunks/chart-config-area-CK_GVApT.js +0 -77
  246. package/dist/client/chunks/chart-config-area-CK_GVApT.js.map +0 -1
  247. package/dist/client/chunks/chart-config-bar-C8uzktxl.js +0 -71
  248. package/dist/client/chunks/chart-config-bar-C8uzktxl.js.map +0 -1
  249. package/dist/client/chunks/chart-config-box-plot-D_E_SSc2.js +0 -38
  250. package/dist/client/chunks/chart-config-box-plot-D_E_SSc2.js.map +0 -1
  251. package/dist/client/chunks/chart-config-bubble-q3DoQX5F.js +0 -71
  252. package/dist/client/chunks/chart-config-bubble-q3DoQX5F.js.map +0 -1
  253. package/dist/client/chunks/chart-config-candlestick-CRCpD43-.js +0 -70
  254. package/dist/client/chunks/chart-config-candlestick-CRCpD43-.js.map +0 -1
  255. package/dist/client/chunks/chart-config-data-table-B20Y5JCm.js +0 -28
  256. package/dist/client/chunks/chart-config-data-table-B20Y5JCm.js.map +0 -1
  257. package/dist/client/chunks/chart-config-funnel-3eYnGg8M.js +0 -92
  258. package/dist/client/chunks/chart-config-funnel-3eYnGg8M.js.map +0 -1
  259. package/dist/client/chunks/chart-config-gauge-CQx9w3d4.js +0 -64
  260. package/dist/client/chunks/chart-config-gauge-CQx9w3d4.js.map +0 -1
  261. package/dist/client/chunks/chart-config-heat-map-_wEnTnRA.js +0 -77
  262. package/dist/client/chunks/chart-config-heat-map-_wEnTnRA.js.map +0 -1
  263. package/dist/client/chunks/chart-config-kpi-delta-DLGZ2A3X.js +0 -97
  264. package/dist/client/chunks/chart-config-kpi-delta-DLGZ2A3X.js.map +0 -1
  265. package/dist/client/chunks/chart-config-kpi-number-K-wzviXF.js +0 -75
  266. package/dist/client/chunks/chart-config-kpi-number-K-wzviXF.js.map +0 -1
  267. package/dist/client/chunks/chart-config-kpi-text-BjYqwqaJ.js +0 -47
  268. package/dist/client/chunks/chart-config-kpi-text-BjYqwqaJ.js.map +0 -1
  269. package/dist/client/chunks/chart-config-line-JNagi9tf.js +0 -88
  270. package/dist/client/chunks/chart-config-line-JNagi9tf.js.map +0 -1
  271. package/dist/client/chunks/chart-config-markdown-BWQSjJpy.js +0 -97
  272. package/dist/client/chunks/chart-config-markdown-BWQSjJpy.js.map +0 -1
  273. package/dist/client/chunks/chart-config-measure-profile-ZYaMrtws.js +0 -70
  274. package/dist/client/chunks/chart-config-measure-profile-ZYaMrtws.js.map +0 -1
  275. package/dist/client/chunks/chart-config-pie-CNLXb-fr.js +0 -39
  276. package/dist/client/chunks/chart-config-pie-CNLXb-fr.js.map +0 -1
  277. package/dist/client/chunks/chart-config-radar-oxHfRAa3.js +0 -44
  278. package/dist/client/chunks/chart-config-radar-oxHfRAa3.js.map +0 -1
  279. package/dist/client/chunks/chart-config-radial-bar-_Aw3jAEm.js +0 -37
  280. package/dist/client/chunks/chart-config-radial-bar-_Aw3jAEm.js.map +0 -1
  281. package/dist/client/chunks/chart-config-sankey-C8FX9hGF.js +0 -61
  282. package/dist/client/chunks/chart-config-sankey-C8FX9hGF.js.map +0 -1
  283. package/dist/client/chunks/chart-config-scatter-DFKM80eO.js +0 -53
  284. package/dist/client/chunks/chart-config-scatter-DFKM80eO.js.map +0 -1
  285. package/dist/client/chunks/chart-config-sunburst-BmC0NLTU.js +0 -50
  286. package/dist/client/chunks/chart-config-sunburst-BmC0NLTU.js.map +0 -1
  287. package/dist/client/chunks/chart-config-tree-map-DGMbNTaa.js +0 -47
  288. package/dist/client/chunks/chart-config-tree-map-DGMbNTaa.js.map +0 -1
  289. package/dist/client/chunks/chart-config-waterfall-DTyXV_fo.js +0 -60
  290. package/dist/client/chunks/chart-config-waterfall-DTyXV_fo.js.map +0 -1
  291. package/dist/client/chunks/chart-data-table-HwfF-Ujv.js +0 -293
  292. package/dist/client/chunks/chart-data-table-HwfF-Ujv.js.map +0 -1
  293. package/dist/client/chunks/chart-funnel-WmuoWlCq.js +0 -259
  294. package/dist/client/chunks/chart-funnel-WmuoWlCq.js.map +0 -1
  295. package/dist/client/chunks/chart-gauge-Cot4By-w.js +0 -374
  296. package/dist/client/chunks/chart-gauge-Cot4By-w.js.map +0 -1
  297. package/dist/client/chunks/chart-heat-map-bGNtsZMr.js +0 -231
  298. package/dist/client/chunks/chart-heat-map-bGNtsZMr.js.map +0 -1
  299. package/dist/client/chunks/chart-kpi-delta-DeyKMxgq.js +0 -351
  300. package/dist/client/chunks/chart-kpi-delta-DeyKMxgq.js.map +0 -1
  301. package/dist/client/chunks/chart-kpi-number-D1z1gxXO.js +0 -476
  302. package/dist/client/chunks/chart-kpi-number-D1z1gxXO.js.map +0 -1
  303. package/dist/client/chunks/chart-kpi-text-b7q6KWc0.js +0 -165
  304. package/dist/client/chunks/chart-kpi-text-b7q6KWc0.js.map +0 -1
  305. package/dist/client/chunks/chart-line-3Nf-EPqJ.js +0 -450
  306. package/dist/client/chunks/chart-line-3Nf-EPqJ.js.map +0 -1
  307. package/dist/client/chunks/chart-markdown-BT_-MBq1.js +0 -2721
  308. package/dist/client/chunks/chart-markdown-BT_-MBq1.js.map +0 -1
  309. package/dist/client/chunks/chart-measure-profile-BVjUonqU.js +0 -114
  310. package/dist/client/chunks/chart-measure-profile-BVjUonqU.js.map +0 -1
  311. package/dist/client/chunks/chart-pie-DblG6w7g.js +0 -137
  312. package/dist/client/chunks/chart-pie-DblG6w7g.js.map +0 -1
  313. package/dist/client/chunks/chart-radar-BHZbeeTg.js +0 -129
  314. package/dist/client/chunks/chart-radar-BHZbeeTg.js.map +0 -1
  315. package/dist/client/chunks/chart-radial-bar-AlEJC1Jo.js +0 -119
  316. package/dist/client/chunks/chart-radial-bar-AlEJC1Jo.js.map +0 -1
  317. package/dist/client/chunks/chart-sankey-E8vYKjQF.js +0 -189
  318. package/dist/client/chunks/chart-sankey-E8vYKjQF.js.map +0 -1
  319. package/dist/client/chunks/chart-scatter-Bbxqi0iw.js +0 -202
  320. package/dist/client/chunks/chart-scatter-Bbxqi0iw.js.map +0 -1
  321. package/dist/client/chunks/chart-sunburst-BgnTKolT.js +0 -188
  322. package/dist/client/chunks/chart-sunburst-BgnTKolT.js.map +0 -1
  323. package/dist/client/chunks/chart-tree-map-i9LGCLwl.js +0 -284
  324. package/dist/client/chunks/chart-tree-map-i9LGCLwl.js.map +0 -1
  325. package/dist/client/chunks/chart-waterfall-BeIhCm83.js +0 -191
  326. package/dist/client/chunks/chart-waterfall-BeIhCm83.js.map +0 -1
  327. package/dist/client/chunks/charts-core-BUUO36OM.js +0 -692
  328. package/dist/client/chunks/charts-core-BUUO36OM.js.map +0 -1
  329. package/dist/client/chunks/charts-loader-goTYnavu.js +0 -258
  330. package/dist/client/chunks/charts-loader-goTYnavu.js.map +0 -1
  331. package/dist/client/chunks/components-BFgYvFq6.js +0 -10066
  332. package/dist/client/chunks/components-BFgYvFq6.js.map +0 -1
  333. package/dist/client/chunks/core-Y9e-sNfb.js +0 -1068
  334. package/dist/client/chunks/core-Y9e-sNfb.js.map +0 -1
  335. package/dist/client/chunks/flow-utils-CjQZG5qq.js +0 -16
  336. package/dist/client/chunks/flow-utils-CjQZG5qq.js.map +0 -1
  337. package/dist/client/chunks/funnel-utils-CyonoNeC.js +0 -135
  338. package/dist/client/chunks/funnel-utils-CyonoNeC.js.map +0 -1
  339. package/dist/client/chunks/icons-CwvgmdIP.js +0 -1636
  340. package/dist/client/chunks/icons-CwvgmdIP.js.map +0 -1
  341. package/dist/client/chunks/index-CApFCBF9.js +0 -81
  342. package/dist/client/chunks/index-CApFCBF9.js.map +0 -1
  343. package/dist/client/chunks/index-_2PSgbkC.js +0 -1046
  344. package/dist/client/chunks/index-_2PSgbkC.js.map +0 -1
  345. package/dist/client/chunks/javascript-DII1YQGr.js +0 -659
  346. package/dist/client/chunks/javascript-DII1YQGr.js.map +0 -1
  347. package/dist/client/chunks/json-C_6Prymp.js +0 -39
  348. package/dist/client/chunks/json-C_6Prymp.js.map +0 -1
  349. package/dist/client/chunks/providers-Ds7DRmnO.js +0 -554
  350. package/dist/client/chunks/providers-Ds7DRmnO.js.map +0 -1
  351. package/dist/client/chunks/retention-CzCo8262.js +0 -120
  352. package/dist/client/chunks/retention-CzCo8262.js.map +0 -1
  353. package/dist/client/chunks/schema-visualization-B97a1Ybu.js +0 -772
  354. package/dist/client/chunks/schema-visualization-B97a1Ybu.js.map +0 -1
  355. package/dist/client/chunks/sql-IeKX8fQ8.js +0 -616
  356. package/dist/client/chunks/sql-IeKX8fQ8.js.map +0 -1
  357. package/dist/client/chunks/syntaxHighlighting-DAMSW_A6.js +0 -34
  358. package/dist/client/chunks/syntaxHighlighting-DAMSW_A6.js.map +0 -1
  359. package/dist/client/chunks/theme-Dp3hFed1.js +0 -112
  360. package/dist/client/chunks/theme-Dp3hFed1.js.map +0 -1
  361. package/dist/client/chunks/useDirtyStateTracking-CyAXd07d.js +0 -1231
  362. package/dist/client/chunks/useDirtyStateTracking-CyAXd07d.js.map +0 -1
  363. package/dist/client/chunks/useExplainAI-CfQ_JmF1.js +0 -182
  364. package/dist/client/chunks/useExplainAI-CfQ_JmF1.js.map +0 -1
  365. package/dist/client/chunks/vendor-B2EH3V58.js +0 -2892
  366. package/dist/client/chunks/vendor-B2EH3V58.js.map +0 -1
  367. package/dist/client/components.js.map +0 -1
  368. package/dist/client/hooks.js.map +0 -1
  369. package/dist/client/icons.js.map +0 -1
  370. package/dist/client/providers.js.map +0 -1
  371. package/dist/client/utils.js.map +0 -1
  372. package/dist/server/anthropic-BTkjgFpT.cjs +0 -1
  373. package/dist/server/anthropic-CTu9E801.js +0 -126
  374. package/dist/server/google-BAK9pnQf.cjs +0 -2
  375. package/dist/server/google-DficVAsJ.js +0 -146
  376. package/dist/server/index-BgCeQBuN.cjs +0 -2
  377. package/dist/server/index-C3PskWTr.js +0 -5353
  378. package/dist/server/index-C45_meK_.js +0 -719
  379. package/dist/server/index-ht4NPca9.cjs +0 -23
  380. package/dist/server/openai-BvA6eLs8.cjs +0 -1
  381. package/dist/server/openai-mcE24du8.js +0 -131
@@ -1,322 +0,0 @@
1
- import { jsx as e, jsxs as y } from "react/jsx-runtime";
2
- import L, { useRef as V, useState as Q, useLayoutEffect as T, useMemo as j } from "react";
3
- import { f as Y, c as D } from "./charts-core-BUUO36OM.js";
4
- const C = 50;
5
- function k(r) {
6
- if (r == null) return null;
7
- const n = typeof r == "number" ? r : parseFloat(String(r));
8
- return isNaN(n) ? null : n;
9
- }
10
- function U(r, n, c, v, o, x, d, l) {
11
- const m = k(r[n]), u = k(r[c]), a = k(r[v]), p = k(r[o]), q = k(r[x]);
12
- return m === null || u === null || a === null || p === null || q === null ? null : { label: d, min: m, q1: u, median: a, q3: p, max: q, color: l };
13
- }
14
- function G(r, n, c, v, o, x) {
15
- const d = k(r[n]), l = k(r[c]), m = k(r[v]);
16
- if (d === null || l === null || m === null) return null;
17
- const u = Math.abs(l);
18
- return {
19
- label: o,
20
- min: d - 2 * u,
21
- q1: d - u,
22
- median: m,
23
- q3: d + u,
24
- max: d + 2 * u,
25
- color: x
26
- };
27
- }
28
- function I({
29
- x: r,
30
- boxWidth: n,
31
- minY: c,
32
- q1Y: v,
33
- medianY: o,
34
- q3Y: x,
35
- maxY: d,
36
- color: l,
37
- label: m
38
- }) {
39
- const u = n / 2, a = r, p = n * 0.4;
40
- return /* @__PURE__ */ y("g", { "data-testid": `box-${m}`, children: [
41
- /* @__PURE__ */ e("line", { x1: a, y1: c, x2: a, y2: d, stroke: l, strokeWidth: 1.5 }),
42
- /* @__PURE__ */ e(
43
- "line",
44
- {
45
- x1: a - p / 2,
46
- y1: c,
47
- x2: a + p / 2,
48
- y2: c,
49
- stroke: l,
50
- strokeWidth: 1.5
51
- }
52
- ),
53
- /* @__PURE__ */ e(
54
- "line",
55
- {
56
- x1: a - p / 2,
57
- y1: d,
58
- x2: a + p / 2,
59
- y2: d,
60
- stroke: l,
61
- strokeWidth: 1.5
62
- }
63
- ),
64
- /* @__PURE__ */ e(
65
- "rect",
66
- {
67
- x: a - u,
68
- y: Math.min(v, x),
69
- width: n,
70
- height: Math.abs(x - v) || 2,
71
- fill: l,
72
- fillOpacity: 0.3,
73
- stroke: l,
74
- strokeWidth: 1.5
75
- }
76
- ),
77
- /* @__PURE__ */ e(
78
- "line",
79
- {
80
- x1: a - u,
81
- y1: o,
82
- x2: a + u,
83
- y2: o,
84
- stroke: l,
85
- strokeWidth: 2.5,
86
- "data-testid": `median-${m}`
87
- }
88
- )
89
- ] });
90
- }
91
- function J({
92
- scale: r,
93
- domainMin: n,
94
- domainMax: c,
95
- width: v,
96
- tickCount: o = 5,
97
- format: x
98
- }) {
99
- const d = j(() => {
100
- const l = c - n;
101
- if (l === 0) return [n];
102
- const m = l / (o - 1);
103
- return Array.from({ length: o }, (u, a) => n + a * m);
104
- }, [n, c, o]);
105
- return /* @__PURE__ */ y("g", { "data-testid": "y-axis", children: [
106
- d.map((l, m) => /* @__PURE__ */ y("g", { transform: `translate(0, ${r(l)})`, children: [
107
- /* @__PURE__ */ e("line", { x1: 0, x2: -6, stroke: "currentColor", strokeWidth: 1 }),
108
- /* @__PURE__ */ e(
109
- "text",
110
- {
111
- x: -10,
112
- textAnchor: "end",
113
- dominantBaseline: "middle",
114
- fontSize: 11,
115
- fill: "currentColor",
116
- className: "text-dc-text-secondary",
117
- children: x ? x(l) : l.toLocaleString()
118
- }
119
- ),
120
- /* @__PURE__ */ e("line", { x1: 0, x2: v, stroke: "currentColor", strokeOpacity: 0.1, strokeWidth: 1 })
121
- ] }, m)),
122
- /* @__PURE__ */ e("line", { y1: r(d[0]), y2: r(d[d.length - 1]), stroke: "currentColor", strokeWidth: 1 })
123
- ] });
124
- }
125
- const te = L.memo(function({
126
- data: n,
127
- chartConfig: c,
128
- displayConfig: v = {},
129
- height: o = "100%",
130
- colorPalette: x,
131
- onDataPointClick: d,
132
- drillEnabled: l
133
- }) {
134
- const m = V(null), [u, a] = Q({ width: 0, height: 0 });
135
- T(() => {
136
- const i = m.current;
137
- if (!i) return;
138
- const s = new ResizeObserver((f) => {
139
- for (const g of f) {
140
- const { width: N, height: A } = g.contentRect;
141
- N > 0 && A > 0 && a({ width: N, height: A });
142
- }
143
- });
144
- s.observe(i);
145
- const h = i.getBoundingClientRect();
146
- return h.width > 0 && h.height > 0 && a({ width: h.width, height: h.height }), () => s.disconnect();
147
- }, []);
148
- const p = v?.leftYAxisFormat, { xField: q, mode: M, fields: F, configError: E } = j(() => {
149
- const i = Array.isArray(c?.xAxis) ? c.xAxis[0] : c?.xAxis ?? c?.x, s = Array.isArray(c?.yAxis) ? c.yAxis : [];
150
- return !i || s.length === 0 ? {
151
- xField: i,
152
- mode: "none",
153
- fields: {},
154
- configError: "BoxPlot requires an X-Axis dimension and at least one measure in Y-Axis"
155
- } : s.length >= 5 ? {
156
- xField: i,
157
- mode: "5measure",
158
- fields: {
159
- minField: s[0],
160
- q1Field: s[1],
161
- medianField: s[2],
162
- q3Field: s[3],
163
- maxField: s[4]
164
- },
165
- configError: null
166
- } : s.length >= 3 ? {
167
- xField: i,
168
- mode: "3measure",
169
- fields: {
170
- avgField: s[0],
171
- stddevField: s[1],
172
- medianField: s[2]
173
- },
174
- configError: null
175
- } : s.length === 2 ? {
176
- xField: i,
177
- mode: "none",
178
- fields: {},
179
- configError: "BoxPlot requires 1 measure (auto), 3 (avg/stddev/median), or 5 (min/q1/median/q3/max)"
180
- } : {
181
- xField: i,
182
- mode: "auto",
183
- fields: { valueField: s[0] },
184
- configError: null
185
- };
186
- }, [c]), R = j(() => {
187
- if (E || !n || n.length === 0 || M === "none") return [];
188
- const i = n.slice(0, C), s = x?.colors ?? D, h = [];
189
- for (let f = 0; f < i.length; f++) {
190
- const g = i[f], N = q ? String(g[q] ?? `Row ${f + 1}`) : `Row ${f + 1}`, A = s[f % s.length];
191
- let b = null;
192
- if (M === "5measure")
193
- b = U(
194
- g,
195
- F.minField,
196
- F.q1Field,
197
- F.medianField,
198
- F.q3Field,
199
- F.maxField,
200
- N,
201
- A
202
- );
203
- else if (M === "3measure")
204
- b = G(g, F.avgField, F.stddevField, F.medianField, N, A);
205
- else {
206
- const w = k(g[F.valueField]);
207
- w !== null && (b = { label: N, min: w, q1: w, median: w, q3: w, max: w, color: A });
208
- }
209
- b && h.push(b);
210
- }
211
- return h;
212
- }, [n, q, M, F, x, E]);
213
- if (!n || n.length === 0)
214
- return /* @__PURE__ */ e("div", { className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted", style: { height: o }, children: /* @__PURE__ */ y("div", { className: "dc:text-center", children: [
215
- /* @__PURE__ */ e("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "No data available" }),
216
- /* @__PURE__ */ e("div", { className: "dc:text-xs text-dc-text-secondary", children: "No data points to display in box plot chart" })
217
- ] }) });
218
- if (E)
219
- return /* @__PURE__ */ e("div", { className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning", style: { height: o }, children: /* @__PURE__ */ y("div", { className: "dc:text-center", children: [
220
- /* @__PURE__ */ e("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "Configuration Error" }),
221
- /* @__PURE__ */ e("div", { className: "dc:text-xs", children: E })
222
- ] }) });
223
- if (R.length === 0)
224
- return /* @__PURE__ */ e("div", { className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted", style: { height: o }, children: /* @__PURE__ */ y("div", { className: "dc:text-center", children: [
225
- /* @__PURE__ */ e("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "No valid data" }),
226
- /* @__PURE__ */ e("div", { className: "dc:text-xs text-dc-text-secondary", children: "Could not compute box plot statistics from the provided data" })
227
- ] }) });
228
- try {
229
- const i = { top: 20, right: 20, bottom: 60, left: 60 }, s = u.width || 600, h = typeof o == "number" ? o : u.height || 400, f = Math.max(s - i.left - i.right, 50), g = Math.max(h - i.top - i.bottom, 50), N = R.flatMap((t) => [t.min, t.max]), A = Math.min(...N), b = Math.max(...N), w = (b - A) * 0.1 || 1, S = A - w, O = b + w, X = O - S, $ = (t) => X === 0 ? g / 2 : g - (t - S) / X * g, W = f / R.length, H = Math.min(W * 0.6, 40), _ = n.length > C;
230
- return /* @__PURE__ */ y("div", { ref: m, className: "dc:relative dc:w-full", style: { height: o }, children: [
231
- /* @__PURE__ */ e(
232
- "svg",
233
- {
234
- width: "100%",
235
- height: _ ? "calc(100% - 20px)" : "100%",
236
- viewBox: `0 0 ${s} ${typeof h == "number" ? h : 400}`,
237
- preserveAspectRatio: "none",
238
- "data-testid": "boxplot-svg",
239
- children: /* @__PURE__ */ y("g", { transform: `translate(${i.left}, ${i.top})`, children: [
240
- /* @__PURE__ */ e(
241
- J,
242
- {
243
- scale: $,
244
- domainMin: S,
245
- domainMax: O,
246
- width: f,
247
- tickCount: 5,
248
- format: p ? (t) => Y(t, p) : void 0
249
- }
250
- ),
251
- R.map((t, P) => {
252
- const z = W * P + W / 2;
253
- return /* @__PURE__ */ y(
254
- "g",
255
- {
256
- onClick: (B) => {
257
- d && l && d({
258
- dataPoint: { ...t },
259
- clickedField: q ?? "",
260
- xValue: t.label,
261
- position: { x: B.clientX, y: B.clientY },
262
- nativeEvent: B
263
- });
264
- },
265
- cursor: l ? "pointer" : void 0,
266
- children: [
267
- /* @__PURE__ */ e("title", { children: `${t.label}: min=${t.min}, Q1=${t.q1}, median=${t.median}, Q3=${t.q3}, max=${t.max}` }),
268
- /* @__PURE__ */ e(
269
- I,
270
- {
271
- x: z,
272
- boxWidth: H,
273
- minY: $(t.min),
274
- q1Y: $(t.q1),
275
- medianY: $(t.median),
276
- q3Y: $(t.q3),
277
- maxY: $(t.max),
278
- color: t.color,
279
- label: t.label
280
- }
281
- ),
282
- /* @__PURE__ */ e(
283
- "text",
284
- {
285
- x: z,
286
- y: g + 20,
287
- textAnchor: "middle",
288
- fontSize: 11,
289
- fill: "currentColor",
290
- className: "text-dc-text-secondary",
291
- "data-testid": `x-label-${t.label}`,
292
- children: t.label
293
- }
294
- )
295
- ]
296
- },
297
- `${t.label}-${P}`
298
- );
299
- })
300
- ] })
301
- }
302
- ),
303
- _ && /* @__PURE__ */ y("div", { className: "dc:text-xs text-dc-warning dc:text-center dc:mt-1", children: [
304
- "Data truncated to ",
305
- C,
306
- " groups (original: ",
307
- n.length,
308
- ")"
309
- ] })
310
- ] });
311
- } catch (i) {
312
- return /* @__PURE__ */ e("div", { className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full text-dc-error dc:p-4", style: { height: o }, children: /* @__PURE__ */ y("div", { className: "dc:text-center", children: [
313
- /* @__PURE__ */ e("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "Box Plot Chart Error" }),
314
- /* @__PURE__ */ e("div", { className: "dc:text-xs dc:mb-2", children: i instanceof Error ? i.message : "Unknown rendering error" }),
315
- /* @__PURE__ */ e("div", { className: "dc:text-xs text-dc-text-muted", children: "Check the data and configuration" })
316
- ] }) });
317
- }
318
- });
319
- export {
320
- te as default
321
- };
322
- //# sourceMappingURL=chart-box-plot-CzMb00z_.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chart-box-plot-CzMb00z_.js","sources":["../../../src/client/components/charts/BoxPlotChart.tsx"],"sourcesContent":["import React, { useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { formatAxisValue } from '../../utils/chartUtils'\nimport type { ChartProps } from '../../types'\n\nconst MAX_BOXES = 50\n\ninterface BoxStats {\n label: string\n min: number\n q1: number\n median: number\n q3: number\n max: number\n color: string\n}\n\nfunction parseNumeric(v: unknown): number | null {\n if (v === undefined || v === null) return null\n const n = typeof v === 'number' ? v : parseFloat(String(v))\n return isNaN(n) ? null : n\n}\n\nfunction buildFrom5Measures(\n row: Record<string, unknown>,\n minField: string,\n q1Field: string,\n medianField: string,\n q3Field: string,\n maxField: string,\n label: string,\n color: string\n): BoxStats | null {\n const min = parseNumeric(row[minField])\n const q1 = parseNumeric(row[q1Field])\n const median = parseNumeric(row[medianField])\n const q3 = parseNumeric(row[q3Field])\n const max = parseNumeric(row[maxField])\n if (min === null || q1 === null || median === null || q3 === null || max === null) return null\n return { label, min, q1, median, q3, max, color }\n}\n\n/** Build approximate box stats assuming normality: Q1/Q3 at ±1σ, whiskers at ±2σ */\nfunction buildFrom3Measures(\n row: Record<string, unknown>,\n avgField: string,\n stddevField: string,\n medianField: string,\n label: string,\n color: string\n): BoxStats | null {\n const avg = parseNumeric(row[avgField])\n const sd = parseNumeric(row[stddevField])\n const median = parseNumeric(row[medianField])\n if (avg === null || sd === null || median === null) return null\n const absSd = Math.abs(sd)\n return {\n label,\n min: avg - 2 * absSd,\n q1: avg - absSd,\n median,\n q3: avg + absSd,\n max: avg + 2 * absSd,\n color,\n }\n}\n\nfunction BoxElement({\n x,\n boxWidth,\n minY,\n q1Y,\n medianY,\n q3Y,\n maxY,\n color,\n label,\n}: {\n x: number\n boxWidth: number\n minY: number\n q1Y: number\n medianY: number\n q3Y: number\n maxY: number\n color: string\n label: string\n}) {\n const halfWidth = boxWidth / 2\n const whiskerX = x\n const capWidth = boxWidth * 0.4\n\n return (\n <g data-testid={`box-${label}`}>\n {/* Whisker line (min to max) */}\n <line x1={whiskerX} y1={minY} x2={whiskerX} y2={maxY} stroke={color} strokeWidth={1.5} />\n {/* Min cap */}\n <line\n x1={whiskerX - capWidth / 2}\n y1={minY}\n x2={whiskerX + capWidth / 2}\n y2={minY}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* Max cap */}\n <line\n x1={whiskerX - capWidth / 2}\n y1={maxY}\n x2={whiskerX + capWidth / 2}\n y2={maxY}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* IQR Box (Q1 to Q3) */}\n <rect\n x={whiskerX - halfWidth}\n y={Math.min(q1Y, q3Y)}\n width={boxWidth}\n height={Math.abs(q3Y - q1Y) || 2}\n fill={color}\n fillOpacity={0.3}\n stroke={color}\n strokeWidth={1.5}\n />\n {/* Median line */}\n <line\n x1={whiskerX - halfWidth}\n y1={medianY}\n x2={whiskerX + halfWidth}\n y2={medianY}\n stroke={color}\n strokeWidth={2.5}\n data-testid={`median-${label}`}\n />\n </g>\n )\n}\n\nfunction YAxis({\n scale,\n domainMin,\n domainMax,\n width,\n tickCount = 5,\n format,\n}: {\n scale: (v: number) => number\n domainMin: number\n domainMax: number\n width: number\n tickCount?: number\n format?: (v: number) => string\n}) {\n const ticks = useMemo(() => {\n const range = domainMax - domainMin\n if (range === 0) return [domainMin]\n const step = range / (tickCount - 1)\n return Array.from({ length: tickCount }, (_, i) => domainMin + i * step)\n }, [domainMin, domainMax, tickCount])\n\n return (\n <g data-testid=\"y-axis\">\n {ticks.map((tick, i) => (\n <g key={i} transform={`translate(0, ${scale(tick)})`}>\n <line x1={0} x2={-6} stroke=\"currentColor\" strokeWidth={1} />\n <text\n x={-10}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n fontSize={11}\n fill=\"currentColor\"\n className=\"text-dc-text-secondary\"\n >\n {format ? format(tick) : tick.toLocaleString()}\n </text>\n <line x1={0} x2={width} stroke=\"currentColor\" strokeOpacity={0.1} strokeWidth={1} />\n </g>\n ))}\n <line y1={scale(ticks[0])} y2={scale(ticks[ticks.length - 1])} stroke=\"currentColor\" strokeWidth={1} />\n </g>\n )\n}\n\nconst BoxPlotChart = React.memo(function BoxPlotChart({\n data,\n chartConfig,\n displayConfig = {},\n height = '100%',\n colorPalette,\n onDataPointClick,\n drillEnabled,\n}: ChartProps) {\n const containerRef = useRef<HTMLDivElement>(null)\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 })\n\n useLayoutEffect(() => {\n const el = containerRef.current\n if (!el) return\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height: h } = entry.contentRect\n if (width > 0 && h > 0) setDimensions({ width, height: h })\n }\n })\n observer.observe(el)\n const rect = el.getBoundingClientRect()\n if (rect.width > 0 && rect.height > 0) setDimensions({ width: rect.width, height: rect.height })\n return () => observer.disconnect()\n }, [])\n\n const yAxisFormat = displayConfig?.leftYAxisFormat\n\n const { xField, mode, fields, configError } = useMemo(() => {\n const xField = Array.isArray(chartConfig?.xAxis)\n ? chartConfig.xAxis[0]\n : chartConfig?.xAxis ?? chartConfig?.x\n\n const yAxisFields: string[] = Array.isArray(chartConfig?.yAxis)\n ? chartConfig.yAxis\n : []\n\n if (!xField || yAxisFields.length === 0) {\n return {\n xField,\n mode: 'none' as const,\n fields: {},\n configError: 'BoxPlot requires an X-Axis dimension and at least one measure in Y-Axis',\n }\n }\n\n // 5-measure mode: yAxis = [min, q1, median, q3, max]\n if (yAxisFields.length >= 5) {\n return {\n xField,\n mode: '5measure' as const,\n fields: {\n minField: yAxisFields[0],\n q1Field: yAxisFields[1],\n medianField: yAxisFields[2],\n q3Field: yAxisFields[3],\n maxField: yAxisFields[4],\n },\n configError: null,\n }\n }\n\n // 3-measure mode: yAxis = [avg, stddev, median]\n if (yAxisFields.length >= 3) {\n return {\n xField,\n mode: '3measure' as const,\n fields: {\n avgField: yAxisFields[0],\n stddevField: yAxisFields[1],\n medianField: yAxisFields[2],\n },\n configError: null,\n }\n }\n\n if (yAxisFields.length === 2) {\n return {\n xField,\n mode: 'none' as const,\n fields: {},\n configError: 'BoxPlot requires 1 measure (auto), 3 (avg/stddev/median), or 5 (min/q1/median/q3/max)',\n }\n }\n\n // Auto mode: use yAxis[0] as the value field (treated as median/value)\n return {\n xField,\n mode: 'auto' as const,\n fields: { valueField: yAxisFields[0] },\n configError: null,\n }\n }, [chartConfig])\n\n const boxes: BoxStats[] = useMemo(() => {\n if (configError || !data || data.length === 0 || mode === 'none') return []\n const rows = (data as Record<string, unknown>[]).slice(0, MAX_BOXES)\n const palette = colorPalette?.colors ?? CHART_COLORS\n\n const results: BoxStats[] = []\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const label = xField ? String(row[xField] ?? `Row ${i + 1}`) : `Row ${i + 1}`\n const color = palette[i % palette.length]\n\n let box: BoxStats | null = null\n if (mode === '5measure') {\n box = buildFrom5Measures(\n row,\n fields.minField!,\n fields.q1Field!,\n fields.medianField!,\n fields.q3Field!,\n fields.maxField!,\n label,\n color\n )\n } else if (mode === '3measure') {\n box = buildFrom3Measures(row, fields.avgField!, fields.stddevField!, fields.medianField!, label, color)\n } else {\n // Auto: use value as median, build minimal box (value ± 0)\n const v = parseNumeric(row[fields.valueField!])\n if (v !== null) {\n box = { label, min: v, q1: v, median: v, q3: v, max: v, color }\n }\n }\n if (box) results.push(box)\n }\n return results\n }, [data, xField, mode, fields, colorPalette, configError])\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 box plot 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\n if (boxes.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 Could not compute box plot statistics from the provided data\n </div>\n </div>\n </div>\n )\n }\n\n try {\n const margin = { top: 20, right: 20, bottom: 60, left: 60 }\n const containerWidth = dimensions.width || 600\n const containerHeight = typeof height === 'number' ? height : (dimensions.height || 400)\n const innerWidth = Math.max(containerWidth - margin.left - margin.right, 50)\n const innerHeight = Math.max(containerHeight - margin.top - margin.bottom, 50)\n\n const allValues = boxes.flatMap((b) => [b.min, b.max])\n const rawMin = Math.min(...allValues)\n const rawMax = Math.max(...allValues)\n const padding = (rawMax - rawMin) * 0.1 || 1\n const domainMin = rawMin - padding\n const domainMax = rawMax + padding\n\n const domainRange = domainMax - domainMin\n const yScale = (v: number) =>\n domainRange === 0 ? innerHeight / 2 : innerHeight - ((v - domainMin) / domainRange) * innerHeight\n\n const boxSpacing = innerWidth / boxes.length\n const boxWidth = Math.min(boxSpacing * 0.6, 40)\n\n const isTruncated = (data as unknown[]).length > MAX_BOXES\n\n return (\n <div ref={containerRef} className=\"dc:relative dc:w-full\" style={{ height }}>\n <svg\n width=\"100%\"\n height={isTruncated ? `calc(100% - 20px)` : '100%'}\n viewBox={`0 0 ${containerWidth} ${typeof containerHeight === 'number' ? containerHeight : 400}`}\n preserveAspectRatio=\"none\"\n data-testid=\"boxplot-svg\"\n >\n <g transform={`translate(${margin.left}, ${margin.top})`}>\n <YAxis\n scale={yScale}\n domainMin={domainMin}\n domainMax={domainMax}\n width={innerWidth}\n tickCount={5}\n format={yAxisFormat ? (v) => formatAxisValue(v, yAxisFormat) : undefined}\n />\n\n {boxes.map((box, i) => {\n const cx = boxSpacing * i + boxSpacing / 2\n return (\n <g\n key={`${box.label}-${i}`}\n onClick={(event: React.MouseEvent) => {\n if (onDataPointClick && drillEnabled) {\n onDataPointClick({\n dataPoint: { ...box },\n clickedField: xField ?? '',\n xValue: box.label,\n position: { x: event.clientX, y: event.clientY },\n nativeEvent: event,\n })\n }\n }}\n cursor={drillEnabled ? 'pointer' : undefined}\n >\n <title>{`${box.label}: min=${box.min}, Q1=${box.q1}, median=${box.median}, Q3=${box.q3}, max=${box.max}`}</title>\n <BoxElement\n x={cx}\n boxWidth={boxWidth}\n minY={yScale(box.min)}\n q1Y={yScale(box.q1)}\n medianY={yScale(box.median)}\n q3Y={yScale(box.q3)}\n maxY={yScale(box.max)}\n color={box.color}\n label={box.label}\n />\n <text\n x={cx}\n y={innerHeight + 20}\n textAnchor=\"middle\"\n fontSize={11}\n fill=\"currentColor\"\n className=\"text-dc-text-secondary\"\n data-testid={`x-label-${box.label}`}\n >\n {box.label}\n </text>\n </g>\n )\n })}\n </g>\n </svg>\n {isTruncated && (\n <div className=\"dc:text-xs text-dc-warning dc:text-center dc:mt-1\">\n Data truncated to {MAX_BOXES} groups (original: {(data as unknown[]).length})\n </div>\n )}\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\">Box Plot 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 BoxPlotChart\n"],"names":["MAX_BOXES","parseNumeric","v","buildFrom5Measures","row","minField","q1Field","medianField","q3Field","maxField","label","color","min","q1","median","q3","max","buildFrom3Measures","avgField","stddevField","avg","sd","absSd","BoxElement","x","boxWidth","minY","q1Y","medianY","q3Y","maxY","halfWidth","whiskerX","capWidth","jsxs","jsx","YAxis","scale","domainMin","domainMax","width","tickCount","format","ticks","useMemo","range","step","_","i","tick","BoxPlotChart","React","data","chartConfig","displayConfig","height","colorPalette","onDataPointClick","drillEnabled","containerRef","useRef","dimensions","setDimensions","useState","useLayoutEffect","el","observer","entries","entry","h","rect","yAxisFormat","xField","mode","fields","configError","yAxisFields","boxes","rows","palette","CHART_COLORS","results","box","margin","containerWidth","containerHeight","innerWidth","innerHeight","allValues","b","rawMin","rawMax","padding","domainRange","yScale","boxSpacing","isTruncated","formatAxisValue","cx","event","error"],"mappings":"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"}
@@ -1,249 +0,0 @@
1
- import { jsx as y, jsxs as te } from "react/jsx-runtime";
2
- import Ae, { useSyncExternalStore as Fe, useCallback as Se, useRef as ne, useState as oe, useMemo as we, useLayoutEffect as ve, useEffect as ce } from "react";
3
- import { select as D, scaleLinear as de, extent as ue, scaleSqrt as ze, max as Te, scaleQuantize as $e, scaleOrdinal as me, axisBottom as xe, axisLeft as fe } from "d3";
4
- import { u as Ne, g as ke, d as ye, i as Ye, e as he, C as pe, h as ge, c as se, f as N } from "./charts-core-BUUO36OM.js";
5
- import { g as be, s as Re, w as Ve } from "./theme-Dp3hFed1.js";
6
- const H = {
7
- listeners: /* @__PURE__ */ new Set(),
8
- subscribe(S) {
9
- return this.listeners.add(S), () => this.listeners.delete(S);
10
- },
11
- notify() {
12
- this.listeners.forEach((S) => S());
13
- }
14
- };
15
- Ve(() => {
16
- H.notify();
17
- });
18
- function Be() {
19
- const S = Fe(
20
- H.subscribe.bind(H),
21
- be,
22
- // Client-side snapshot
23
- be
24
- // Server-side snapshot (SSR)
25
- ), p = Se((r) => {
26
- Re(r), H.notify();
27
- }, []);
28
- return { theme: S, setTheme: p };
29
- }
30
- const Le = Ae.memo(function({
31
- data: p,
32
- chartConfig: r,
33
- displayConfig: i = {},
34
- queryObject: E,
35
- height: W = "100%",
36
- colorPalette: M
37
- }) {
38
- const O = ne(null), w = ne(null), [k, j] = oe({ width: 0, height: 0 }), [Y, q] = oe(!1), { theme: re } = Be(), g = Ne(), s = we(() => ({
39
- showLegend: i?.showLegend ?? !0,
40
- showGrid: i?.showGrid ?? !0,
41
- showTooltip: i?.showTooltip ?? !0,
42
- minBubbleSize: i?.minBubbleSize ?? 5,
43
- maxBubbleSize: i?.maxBubbleSize ?? 50,
44
- bubbleOpacity: i?.bubbleOpacity ?? 0.7,
45
- xAxisFormat: i?.xAxisFormat,
46
- leftYAxisFormat: i?.leftYAxisFormat
47
- }), [
48
- i?.showLegend,
49
- i?.showGrid,
50
- i?.showTooltip,
51
- i?.minBubbleSize,
52
- i?.maxBubbleSize,
53
- i?.bubbleOpacity,
54
- i?.xAxisFormat,
55
- i?.leftYAxisFormat
56
- ]);
57
- return ve(() => {
58
- let a = 0;
59
- const d = 10;
60
- let u, m;
61
- const n = () => {
62
- if (w.current) {
63
- const { width: b, height: o } = w.current.getBoundingClientRect();
64
- if (b > 0 && o > 0)
65
- return j({ width: b, height: o }), q(!0), !0;
66
- }
67
- return !1;
68
- };
69
- if (!n() && a < d) {
70
- const b = () => {
71
- !n() && a < d && (a++, m = setTimeout(() => {
72
- u = requestAnimationFrame(b);
73
- }, 50 * a));
74
- };
75
- u = requestAnimationFrame(b);
76
- }
77
- return () => {
78
- u && cancelAnimationFrame(u), m && clearTimeout(m);
79
- };
80
- }, []), ce(() => {
81
- let a = null;
82
- const d = () => {
83
- if (w.current) {
84
- const { width: u, height: m } = w.current.getBoundingClientRect();
85
- u > 0 && m > 0 && (j({ width: u, height: m }), Y || q(!0));
86
- }
87
- };
88
- return w.current && (a = new ResizeObserver((u) => {
89
- for (const m of u) {
90
- const { width: n, height: v } = m.contentRect;
91
- n > 0 && v > 0 && (j({ width: n, height: v }), Y || q(!0));
92
- }
93
- }), a.observe(w.current), d()), window.addEventListener("resize", d), () => {
94
- a && a.disconnect(), window.removeEventListener("resize", d);
95
- };
96
- }, [Y]), ce(() => {
97
- if (!p || p.length === 0 || !O.current || !Y || k.width === 0 || (D(O.current).selectAll("*").remove(), !r?.xAxis || !r?.yAxis || !r?.series))
98
- return;
99
- const a = Array.isArray(r.xAxis) ? r.xAxis[0] : r.xAxis, d = Array.isArray(r.yAxis) ? r.yAxis[0] : r.yAxis, u = Array.isArray(r.series) ? r.series[0] : r.series, m = Array.isArray(r.sizeField) ? r.sizeField[0] : r.sizeField || d, n = Array.isArray(r.colorField) ? r.colorField[0] : r.colorField;
100
- if (!a || !d || !u || !m)
101
- return;
102
- const v = ke(E, a), b = E?.timeDimensions?.some(
103
- (e) => e.dimension === a
104
- ) || !1, o = p.map((e) => {
105
- const t = e[a];
106
- let l, x;
107
- if (b && t) {
108
- const c = String(t);
109
- let h;
110
- if (c.match(/^\d{4}-\d{2}-\d{2}[T ]/)) {
111
- let F = c;
112
- c.includes(" ") && (F = c.replace(" ", "T").replace("+00", "Z").replace(/\+\d{2}:\d{2}$/, "Z")), !F.endsWith("Z") && !F.includes("+") && (F = F + "Z"), h = new Date(F);
113
- } else
114
- h = new Date(c);
115
- l = isNaN(h.getTime()) ? parseFloat(c) : h.getTime(), x = ye(t, v);
116
- } else {
117
- const c = ye(t, v) || t;
118
- l = typeof c == "string" ? parseFloat(c) : c, x = String(c);
119
- }
120
- const f = he(e[d]), $ = he(e[m]), B = e[u];
121
- return {
122
- x: l,
123
- xLabel: x,
124
- // Store formatted label for tooltip display
125
- y: f,
126
- // Type assertion: filter below ensures this is never null
127
- size: $ !== null ? Math.abs($) : 0,
128
- // Ensure positive size
129
- color: n ? e[n] : B,
130
- series: B,
131
- label: `${B || "Unknown"}`,
132
- isValid: Ye(l) && f !== null && $ !== null && $ > 0
133
- };
134
- }).filter((e) => e.isValid && e.size > 0);
135
- if (o.length === 0) return;
136
- const R = {
137
- ...pe,
138
- left: pe.left + 30,
139
- // Add extra 30px left margin for Y-axis label
140
- bottom: s.showLegend && n ? 100 : 40
141
- // Add extra space for legend
142
- }, L = k.width - R.left - R.right, z = k.height - R.top - R.bottom, le = D(O.current).attr("width", k.width).attr("height", k.height), T = le.append("g").attr("transform", `translate(${R.left},${R.top})`), I = de().domain(ue(o, (e) => e.x)).range([0, L]).nice(), C = de().domain(ue(o, (e) => e.y)).range([z, 0]).nice(), Z = ze().domain([0, Te(o, (e) => e.size)]).range([s.minBubbleSize, s.maxBubbleSize]);
143
- let V, U = !1, X = [];
144
- if (n && o.length > 0) {
145
- const e = o.map((t) => {
146
- const l = t.color;
147
- return typeof l == "string" ? parseFloat(l) : l;
148
- }).filter((t) => !isNaN(t));
149
- if (U = e.length === o.length && e.every((t) => typeof t == "number"), U) {
150
- const t = Math.min(...e), l = Math.max(...e);
151
- V = $e().domain([t, l]).range(M?.gradient || ge);
152
- } else
153
- X = [...new Set(o.map((t) => String(t.color)))], V = me().domain(X).range(M?.colors || se);
154
- } else
155
- V = me().domain(["default"]).range([se[0]]);
156
- const Q = (e, t) => getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t, ie = re !== "light", A = ie ? Q("--dc-text-muted", "#cbd5e1") : Q("--dc-text-secondary", "#374151"), G = ie ? Q("--dc-border", "#475569") : "#9ca3af";
157
- if (s.showGrid) {
158
- const e = T.append("g").attr("class", "grid").attr("transform", `translate(0,${z})`).call(
159
- xe(I).tickSize(-z).tickFormat(() => "")
160
- );
161
- e.selectAll("line").style("stroke", G).style("stroke-dasharray", "3,3").style("opacity", 0.3), e.select(".domain").style("stroke", "none");
162
- const t = T.append("g").attr("class", "grid").call(
163
- fe(C).tickSize(-L).tickFormat(() => "")
164
- );
165
- t.selectAll("line").style("stroke", G).style("stroke-dasharray", "3,3").style("opacity", 0.3), t.select(".domain").style("stroke", "none");
166
- }
167
- const J = xe(I);
168
- b ? J.tickFormat((e) => {
169
- const t = new Date(e);
170
- if (isNaN(t.getTime())) return String(e);
171
- switch (v?.toLowerCase()) {
172
- case "year":
173
- return String(t.getUTCFullYear());
174
- case "quarter": {
175
- const l = Math.floor(t.getUTCMonth() / 3) + 1;
176
- return `${t.getUTCFullYear()}-Q${l}`;
177
- }
178
- case "month":
179
- return `${t.getUTCFullYear()}-${String(t.getUTCMonth() + 1).padStart(2, "0")}`;
180
- case "week":
181
- case "day":
182
- return `${t.getUTCFullYear()}-${String(t.getUTCMonth() + 1).padStart(2, "0")}-${String(t.getUTCDate()).padStart(2, "0")}`;
183
- case "hour":
184
- return `${String(t.getUTCMonth() + 1).padStart(2, "0")}-${String(t.getUTCDate()).padStart(2, "0")} ${String(t.getUTCHours()).padStart(2, "0")}:00`;
185
- default:
186
- return `${t.getUTCFullYear()}-${String(t.getUTCMonth() + 1).padStart(2, "0")}`;
187
- }
188
- }) : s.xAxisFormat && J.tickFormat((e) => N(e, s.xAxisFormat));
189
- const K = T.append("g").attr("transform", `translate(0,${z})`).call(J);
190
- K.selectAll("text").style("fill", A), K.selectAll("line, path").style("stroke", G), K.append("text").attr("x", L / 2).attr("y", 35).attr("fill", A).style("text-anchor", "middle").style("font-size", "12px").text(s.xAxisFormat?.label || g(a));
191
- const ae = fe(C);
192
- s.leftYAxisFormat && ae.tickFormat((e) => N(e, s.leftYAxisFormat));
193
- const P = T.append("g").call(ae);
194
- P.selectAll("text").style("fill", A), P.selectAll("line, path").style("stroke", G), P.append("text").attr("transform", "rotate(-90)").attr("y", -35).attr("x", -z / 2).attr("fill", A).style("text-anchor", "middle").style("font-size", "12px").text(s.leftYAxisFormat?.label || g(d));
195
- const _ = D("body").append("div").attr("class", "bubble-chart-tooltip").style("position", "absolute").style("padding", "8px").style("background", "rgba(0, 0, 0, 0.8)").style("color", "white").style("border-radius", "4px").style("font-size", "12px").style("pointer-events", "none").style("opacity", 0).style("z-index", 1e3), ee = T.selectAll(".bubble").data(o).enter().append("circle").attr("class", "bubble").attr("cx", (e) => I(e.x)).attr("cy", (e) => C(e.y)).attr("r", (e) => Z(e.size)).style("fill", (e) => n && e.color !== void 0 ? V(U ? e.color : String(e.color)) : se[0]).style("opacity", s.bubbleOpacity).style("stroke", "#fff").style("stroke-width", 1).style("cursor", "pointer");
196
- if (s.showTooltip && ee.on("mouseover", function(e, t) {
197
- D(this).transition().duration(200).style("opacity", 1).attr("r", Z(t.size) * 1.1);
198
- const l = [
199
- `<strong>${t.series || "Unknown"}</strong>`,
200
- `${g(a)}: ${t.xLabel || (s.xAxisFormat ? N(t.x, s.xAxisFormat) : t.x)}`,
201
- `${g(d)}: ${s.leftYAxisFormat ? N(t.y, s.leftYAxisFormat) : t.y}`,
202
- `${g(m)}: ${s.leftYAxisFormat ? N(t.size, s.leftYAxisFormat) : t.size}`,
203
- n && t.color ? `${g(n)}: ${t.color}` : ""
204
- ].filter(Boolean).join("<br>");
205
- _.html(l).style("left", e.pageX + 10 + "px").style("top", e.pageY - 10 + "px").transition().duration(200).style("opacity", 1);
206
- }).on("mousemove", function(e) {
207
- _.style("left", e.pageX + 10 + "px").style("top", e.pageY - 10 + "px");
208
- }).on("mouseout", function(e, t) {
209
- D(this).transition().duration(200).style("opacity", s.bubbleOpacity).attr("r", Z(t.size)), _.transition().duration(200).style("opacity", 0);
210
- }), s.showLegend && n)
211
- if (U) {
212
- const l = Math.min(...o.map((h) => h.color)), x = Math.max(...o.map((h) => h.color)), f = T.append("g").attr("class", "color-legend").attr("transform", `translate(${L / 2 - 200 / 2}, ${z + 60})`), B = le.append("defs").append("linearGradient").attr("id", "color-scale-gradient").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%"), c = M?.gradient || ge;
213
- c.forEach((h, F) => {
214
- B.append("stop").attr("offset", `${F / (c.length - 1) * 100}%`).attr("stop-color", h);
215
- }), f.append("rect").attr("width", 200).attr("height", 20).style("fill", "url(#color-scale-gradient)").style("stroke", "#ccc").style("stroke-width", 1), f.append("text").attr("x", 0).attr("y", 35).attr("text-anchor", "start").style("font-size", "11px").style("fill", A).text(s.leftYAxisFormat ? N(l, s.leftYAxisFormat) : l.toFixed(2)), f.append("text").attr("x", 200).attr("y", 35).attr("text-anchor", "end").style("font-size", "11px").style("fill", A).text(s.leftYAxisFormat ? N(x, s.leftYAxisFormat) : x.toFixed(2)), f.append("text").attr("x", 200 / 2).attr("y", -5).attr("text-anchor", "middle").style("font-size", "12px").style("font-weight", "bold").style("fill", A).text(g(n));
216
- } else {
217
- const e = X;
218
- if (e.length > 0) {
219
- const l = T.append("g").attr("class", "legend").attr("transform", `translate(${L / 2 - e.length * 80 / 2}, ${z + 60})`).selectAll(".legend-item").data(e).enter().append("g").attr("class", "legend-item").attr("transform", (x, f) => `translate(${f * 80}, 0)`).style("cursor", "pointer");
220
- l.append("circle").attr("cx", 5).attr("cy", 5).attr("r", 5).style("fill", (x) => V(x)).style("opacity", s.bubbleOpacity), l.append("text").attr("x", 15).attr("y", 5).attr("dy", ".35em").style("font-size", "11px").style("fill", A).text((x) => String(x)), l.on("mouseover", function(x, f) {
221
- ee.transition().duration(200).style("opacity", ($) => n && String($.color) === f ? 1 : 0.2);
222
- }).on("mouseout", function() {
223
- ee.transition().duration(200).style("opacity", s.bubbleOpacity);
224
- });
225
- }
226
- }
227
- return () => {
228
- _.remove();
229
- };
230
- }, [p, r, s, E, k, Y, M, re, g]), !p || p.length === 0 ? /* @__PURE__ */ y("div", { className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted", style: { height: W }, children: /* @__PURE__ */ te("div", { className: "dc:text-center", children: [
231
- /* @__PURE__ */ y("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "No data available" }),
232
- /* @__PURE__ */ y("div", { className: "dc:text-xs text-dc-text-secondary", children: "No data points to display in bubble chart" })
233
- ] }) }) : r?.xAxis && r?.yAxis && r?.series ? /* @__PURE__ */ y("div", { className: "dc:w-full dc:flex-1 dc:flex dc:flex-col dc:relative", style: { height: W, minHeight: "250px", overflow: "hidden" }, children: /* @__PURE__ */ te("div", { ref: w, className: "dc:w-full dc:h-full dc:relative", children: [
234
- /* @__PURE__ */ y("svg", { ref: O, className: "dc:w-full dc:h-full" }),
235
- !Y && /* @__PURE__ */ y("div", { className: "dc:absolute dc:inset-0 dc:flex dc:items-center dc:justify-center", children: /* @__PURE__ */ y("div", { className: "text-dc-text-muted dc:text-sm", children: "Measuring chart dimensions..." }) })
236
- ] }) }) : /* @__PURE__ */ y("div", { className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning", style: { height: W }, children: /* @__PURE__ */ te("div", { className: "dc:text-center", children: [
237
- /* @__PURE__ */ y("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "Configuration Required" }),
238
- /* @__PURE__ */ y("div", { className: "dc:text-xs", children: "Bubble chart requires xAxis, yAxis, series, and sizeField dimensions" }),
239
- /* @__PURE__ */ y("div", { className: "dc:text-xs dc:mt-1", children: "Optional: colorField for bubble coloring" })
240
- ] }) });
241
- }), He = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
242
- __proto__: null,
243
- default: Le
244
- }, Symbol.toStringTag, { value: "Module" }));
245
- export {
246
- He as B,
247
- Be as u
248
- };
249
- //# sourceMappingURL=chart-bubble-BF8Z52eW.js.map