drizzle-cube 0.4.53 → 0.5.1

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 (277) hide show
  1. package/dist/adapters/express/index.cjs +2 -2
  2. package/dist/adapters/express/index.js +109 -96
  3. package/dist/adapters/fastify/index.cjs +2 -2
  4. package/dist/adapters/fastify/index.js +148 -134
  5. package/dist/adapters/{handler-RItnSaEl.js → handler-3LGcjLtr.js} +617 -612
  6. package/dist/adapters/handler-BzzbVpcl.cjs +25 -0
  7. package/dist/adapters/hono/index.cjs +1 -1
  8. package/dist/adapters/hono/index.js +103 -99
  9. package/dist/adapters/{compiler-S6KHiOY6.js → locale-DTnJrxm1.js} +1700 -1563
  10. package/dist/adapters/locale-DueXjqMh.cjs +198 -0
  11. package/dist/adapters/locale.d.ts +8 -0
  12. package/dist/adapters/mcp-tools.cjs +1 -1
  13. package/dist/adapters/mcp-tools.d.ts +7 -3
  14. package/dist/adapters/mcp-tools.js +27 -27
  15. package/dist/adapters/mcp-transport-C7VLf4T5.js +579 -0
  16. package/dist/adapters/mcp-transport-poPHl_2j.cjs +39 -0
  17. package/dist/adapters/mcp-transport.d.ts +25 -2
  18. package/dist/adapters/nextjs/index.cjs +1 -1
  19. package/dist/adapters/nextjs/index.js +152 -132
  20. package/dist/adapters/utils-DNrj-ryp.cjs +17 -0
  21. package/dist/adapters/{utils-IH1ePsBd.js → utils-DOg9oGdt.js} +2341 -819
  22. package/dist/adapters/utils.cjs +1 -1
  23. package/dist/adapters/utils.d.ts +45 -2
  24. package/dist/adapters/utils.js +1 -1
  25. package/dist/client/charts.js +12 -12
  26. package/dist/client/chunks/{DashboardEditModal-BTdV528l.js → DashboardEditModal-cSSIAZGy.js} +1968 -1973
  27. package/dist/client/chunks/DashboardEditModal-cSSIAZGy.js.map +1 -0
  28. package/dist/client/chunks/{FieldSearchModal-D75vy4Wb.js → FieldSearchModal-CZNo4pNK.js} +550 -536
  29. package/dist/client/chunks/FieldSearchModal-CZNo4pNK.js.map +1 -0
  30. package/dist/client/chunks/KpiDelta-Dll_eCV1.js +2 -0
  31. package/dist/client/chunks/KpiNumber-BPlR92hI.js +2 -0
  32. package/dist/client/chunks/KpiText-BIxq7Jso.js +2 -0
  33. package/dist/client/chunks/{RetentionCombinedChart-DIhK5pD8.js → RetentionCombinedChart-BD8tGeM_.js} +96 -96
  34. package/dist/client/chunks/RetentionCombinedChart-BD8tGeM_.js.map +1 -0
  35. package/dist/client/chunks/{RetentionHeatmap-CyREolyP.js → RetentionHeatmap-B_5sewwi.js} +77 -77
  36. package/dist/client/chunks/RetentionHeatmap-B_5sewwi.js.map +1 -0
  37. package/dist/client/chunks/SchemaVisualization-CCICjhvv.js +2 -0
  38. package/dist/client/chunks/SchemaVisualizationLazy-DraGsMx6.js +2 -0
  39. package/dist/client/chunks/af-ZA-xDmO5F0s.js +1431 -0
  40. package/dist/client/chunks/af-ZA-xDmO5F0s.js.map +1 -0
  41. package/dist/client/chunks/{analysis-builder-C1CJ0c7L.js → analysis-builder-BeVZhiQ5.js} +1519 -1507
  42. package/dist/client/chunks/analysis-builder-BeVZhiQ5.js.map +1 -0
  43. package/dist/client/chunks/{analysis-builder-shared-rkjJfWLT.js → analysis-builder-shared-BWc7ZZnG.js} +925 -954
  44. package/dist/client/chunks/analysis-builder-shared-BWc7ZZnG.js.map +1 -0
  45. package/dist/client/chunks/chart-activity-grid-CWT0gLv4.js +2376 -0
  46. package/dist/client/chunks/chart-activity-grid-CWT0gLv4.js.map +1 -0
  47. package/dist/client/chunks/{chart-area-BwYaflNk.js → chart-area-D63kG8OT.js} +157 -157
  48. package/dist/client/chunks/chart-area-D63kG8OT.js.map +1 -0
  49. package/dist/client/chunks/{chart-bar-BiENfFgE.js → chart-bar-BEfsCLjl.js} +78 -78
  50. package/dist/client/chunks/chart-bar-BEfsCLjl.js.map +1 -0
  51. package/dist/client/chunks/{chart-box-plot-BJF1tBXC.js → chart-box-plot-o-h9MRX5.js} +111 -114
  52. package/dist/client/chunks/chart-box-plot-o-h9MRX5.js.map +1 -0
  53. package/dist/client/chunks/{chart-bubble-DQQhGVDJ.js → chart-bubble-CMDp4Pfm.js} +121 -121
  54. package/dist/client/chunks/chart-bubble-CMDp4Pfm.js.map +1 -0
  55. package/dist/client/chunks/chart-candlestick-WyANJ0Ky.js +303 -0
  56. package/dist/client/chunks/chart-candlestick-WyANJ0Ky.js.map +1 -0
  57. package/dist/client/chunks/chart-config-activity-grid-C-EkgYoa.js +51 -0
  58. package/dist/client/chunks/chart-config-activity-grid-C-EkgYoa.js.map +1 -0
  59. package/dist/client/chunks/chart-config-area-CMZpbIah.js +93 -0
  60. package/dist/client/chunks/chart-config-area-CMZpbIah.js.map +1 -0
  61. package/dist/client/chunks/chart-config-bar-B8_V4YLg.js +87 -0
  62. package/dist/client/chunks/chart-config-bar-B8_V4YLg.js.map +1 -0
  63. package/dist/client/chunks/chart-config-box-plot-Dwj7sEbU.js +35 -0
  64. package/dist/client/chunks/chart-config-box-plot-Dwj7sEbU.js.map +1 -0
  65. package/dist/client/chunks/chart-config-bubble-B0w0ZVp4.js +82 -0
  66. package/dist/client/chunks/chart-config-bubble-B0w0ZVp4.js.map +1 -0
  67. package/dist/client/chunks/chart-config-candlestick-Bvo3zeIn.js +72 -0
  68. package/dist/client/chunks/chart-config-candlestick-Bvo3zeIn.js.map +1 -0
  69. package/dist/client/chunks/{chart-config-data-table-Bhdx5Hem.js → chart-config-data-table-BQXSn4b_.js} +9 -9
  70. package/dist/client/chunks/chart-config-data-table-BQXSn4b_.js.map +1 -0
  71. package/dist/client/chunks/chart-config-funnel-BzEsHmjR.js +93 -0
  72. package/dist/client/chunks/chart-config-funnel-BzEsHmjR.js.map +1 -0
  73. package/dist/client/chunks/chart-config-gauge-C5ZiyZy7.js +64 -0
  74. package/dist/client/chunks/chart-config-gauge-C5ZiyZy7.js.map +1 -0
  75. package/dist/client/chunks/chart-config-heat-map-Cv8qNnVP.js +91 -0
  76. package/dist/client/chunks/chart-config-heat-map-Cv8qNnVP.js.map +1 -0
  77. package/dist/client/chunks/chart-config-kpi-delta-BraHQc2E.js +94 -0
  78. package/dist/client/chunks/chart-config-kpi-delta-BraHQc2E.js.map +1 -0
  79. package/dist/client/chunks/chart-config-kpi-number-CeCkx7mC.js +75 -0
  80. package/dist/client/chunks/chart-config-kpi-number-CeCkx7mC.js.map +1 -0
  81. package/dist/client/chunks/chart-config-kpi-text-CImM3SvH.js +47 -0
  82. package/dist/client/chunks/chart-config-kpi-text-CImM3SvH.js.map +1 -0
  83. package/dist/client/chunks/chart-config-line-BVKapAQK.js +104 -0
  84. package/dist/client/chunks/chart-config-line-BVKapAQK.js.map +1 -0
  85. package/dist/client/chunks/chart-config-markdown-C-_g_8te.js +117 -0
  86. package/dist/client/chunks/chart-config-markdown-C-_g_8te.js.map +1 -0
  87. package/dist/client/chunks/chart-config-measure-profile-KTVV1gO3.js +82 -0
  88. package/dist/client/chunks/chart-config-measure-profile-KTVV1gO3.js.map +1 -0
  89. package/dist/client/chunks/chart-config-pie-BZxVl25X.js +68 -0
  90. package/dist/client/chunks/chart-config-pie-BZxVl25X.js.map +1 -0
  91. package/dist/client/chunks/chart-config-radar-B7FByX3t.js +49 -0
  92. package/dist/client/chunks/chart-config-radar-B7FByX3t.js.map +1 -0
  93. package/dist/client/chunks/chart-config-radial-bar-UfW_3yyX.js +38 -0
  94. package/dist/client/chunks/chart-config-radial-bar-UfW_3yyX.js.map +1 -0
  95. package/dist/client/chunks/chart-config-sankey-DGAThN9i.js +66 -0
  96. package/dist/client/chunks/chart-config-sankey-DGAThN9i.js.map +1 -0
  97. package/dist/client/chunks/chart-config-scatter-BVVJuOnt.js +61 -0
  98. package/dist/client/chunks/chart-config-scatter-BVVJuOnt.js.map +1 -0
  99. package/dist/client/chunks/chart-config-sunburst-utejM2YS.js +45 -0
  100. package/dist/client/chunks/chart-config-sunburst-utejM2YS.js.map +1 -0
  101. package/dist/client/chunks/chart-config-tree-map-IHp97OyV.js +51 -0
  102. package/dist/client/chunks/chart-config-tree-map-IHp97OyV.js.map +1 -0
  103. package/dist/client/chunks/chart-config-waterfall-BdqG1V-x.js +59 -0
  104. package/dist/client/chunks/chart-config-waterfall-BdqG1V-x.js.map +1 -0
  105. package/dist/client/chunks/{chart-data-table-2iCsn0CF.js → chart-data-table-C3Xh9jwL.js} +1083 -1086
  106. package/dist/client/chunks/chart-data-table-C3Xh9jwL.js.map +1 -0
  107. package/dist/client/chunks/{chart-funnel-poyOf7-e.js → chart-funnel-C7pgktN5.js} +132 -132
  108. package/dist/client/chunks/chart-funnel-C7pgktN5.js.map +1 -0
  109. package/dist/client/chunks/{chart-gauge-D5J4gRky.js → chart-gauge-D2r2B_AR.js} +150 -150
  110. package/dist/client/chunks/chart-gauge-D2r2B_AR.js.map +1 -0
  111. package/dist/client/chunks/{chart-heat-map-BAMVhLGG.js → chart-heat-map-Dw2yjwfO.js} +75 -80
  112. package/dist/client/chunks/chart-heat-map-Dw2yjwfO.js.map +1 -0
  113. package/dist/client/chunks/{chart-kpi-delta-KQjUIeal.js → chart-kpi-delta-CYE0S1x_.js} +117 -117
  114. package/dist/client/chunks/chart-kpi-delta-CYE0S1x_.js.map +1 -0
  115. package/dist/client/chunks/chart-kpi-number-BlZ79xHW.js +321 -0
  116. package/dist/client/chunks/chart-kpi-number-BlZ79xHW.js.map +1 -0
  117. package/dist/client/chunks/chart-kpi-text-DY1BnxPe.js +148 -0
  118. package/dist/client/chunks/chart-kpi-text-DY1BnxPe.js.map +1 -0
  119. package/dist/client/chunks/{chart-line-B5_WntY5.js → chart-line-CBsTThTv.js} +123 -123
  120. package/dist/client/chunks/chart-line-CBsTThTv.js.map +1 -0
  121. package/dist/client/chunks/chart-markdown-BWaWVkuz.js +3474 -0
  122. package/dist/client/chunks/chart-markdown-BWaWVkuz.js.map +1 -0
  123. package/dist/client/chunks/chart-measure-profile-B41qCTBG.js +179 -0
  124. package/dist/client/chunks/chart-measure-profile-B41qCTBG.js.map +1 -0
  125. package/dist/client/chunks/chart-pie-Djbu8x2v.js +172 -0
  126. package/dist/client/chunks/chart-pie-Djbu8x2v.js.map +1 -0
  127. package/dist/client/chunks/chart-radar-BsTcKV0K.js +154 -0
  128. package/dist/client/chunks/chart-radar-BsTcKV0K.js.map +1 -0
  129. package/dist/client/chunks/chart-radial-bar-Du7XNnwE.js +148 -0
  130. package/dist/client/chunks/chart-radial-bar-Du7XNnwE.js.map +1 -0
  131. package/dist/client/chunks/{chart-sankey-BOyxfG1Q.js → chart-sankey-WwkZAhLy.js} +73 -73
  132. package/dist/client/chunks/chart-sankey-WwkZAhLy.js.map +1 -0
  133. package/dist/client/chunks/chart-scatter-D8krEYsA.js +255 -0
  134. package/dist/client/chunks/chart-scatter-D8krEYsA.js.map +1 -0
  135. package/dist/client/chunks/{chart-sunburst-D9lGEOCc.js → chart-sunburst-CIDB_pTl.js} +66 -66
  136. package/dist/client/chunks/chart-sunburst-CIDB_pTl.js.map +1 -0
  137. package/dist/client/chunks/chart-tree-map-C5C2iaWM.js +298 -0
  138. package/dist/client/chunks/chart-tree-map-C5C2iaWM.js.map +1 -0
  139. package/dist/client/chunks/{chart-waterfall-BCdUx4DC.js → chart-waterfall-BGdPrJ5Y.js} +80 -80
  140. package/dist/client/chunks/chart-waterfall-BGdPrJ5Y.js.map +1 -0
  141. package/dist/client/chunks/{charts-core-C5Yokk-x.js → charts-core-BXOqaYFn.js} +92 -92
  142. package/dist/client/chunks/charts-core-BXOqaYFn.js.map +1 -0
  143. package/dist/client/chunks/en-US-5xPTdCXg.js +35 -0
  144. package/dist/client/chunks/en-US-5xPTdCXg.js.map +1 -0
  145. package/dist/client/chunks/nl-NL-vCifBijs.js +1491 -0
  146. package/dist/client/chunks/nl-NL-vCifBijs.js.map +1 -0
  147. package/dist/client/chunks/{schema-visualization-t1KiOORo.js → schema-visualization-Xp60Ff2W.js} +352 -364
  148. package/dist/client/chunks/schema-visualization-Xp60Ff2W.js.map +1 -0
  149. package/dist/client/chunks/{useDebounce-CKqkM42n.js → useDebounce-CfmUMFau.js} +85 -85
  150. package/dist/client/chunks/useDebounce-CfmUMFau.js.map +1 -0
  151. package/dist/client/chunks/{useExplainAI-DBIfYwz-.js → useExplainAI-BKGmejIj.js} +4 -4
  152. package/dist/client/chunks/{useExplainAI-DBIfYwz-.js.map → useExplainAI-BKGmejIj.js.map} +1 -1
  153. package/dist/client/chunks/{utils--qCr8Yn5.js → utils-BldkcRHv.js} +2 -2
  154. package/dist/client/chunks/{utils--qCr8Yn5.js.map → utils-BldkcRHv.js.map} +1 -1
  155. package/dist/client/chunks/{vendor-BRlsCGnK.js → vendor-ClXpIiea.js} +2 -2
  156. package/dist/client/chunks/{vendor-BRlsCGnK.js.map → vendor-ClXpIiea.js.map} +1 -1
  157. package/dist/client/components/AnalysisBuilder/types.d.ts +6 -6
  158. package/dist/client/components.js +3 -3
  159. package/dist/client/hooks/useTranslation.d.ts +21 -0
  160. package/dist/client/hooks.js +3 -3
  161. package/dist/client/icons.js +1 -1
  162. package/dist/client/index.js +493 -488
  163. package/dist/client/index.js.map +1 -1
  164. package/dist/client/providers/CubeApiProvider.d.ts +2 -1
  165. package/dist/client/providers/CubeProvider.d.ts +7 -1
  166. package/dist/client/providers/I18nProvider.d.ts +18 -0
  167. package/dist/client/providers.js +1 -1
  168. package/dist/client/schema.js +1 -1
  169. package/dist/client/shared/types.d.ts +5 -20
  170. package/dist/client/styles.css +1 -1
  171. package/dist/client/utils.js +5 -5
  172. package/dist/client-bundle-stats.html +1 -1
  173. package/dist/mcp-app/mcp-app.html +40 -36
  174. package/dist/server/index.cjs +42 -40
  175. package/dist/server/index.js +3311 -1672
  176. package/package.json +5 -2
  177. package/dist/adapters/compiler-CRgLzmSn.cjs +0 -198
  178. package/dist/adapters/handler-DumFgnNM.cjs +0 -25
  179. package/dist/adapters/mcp-transport-C6bsIOSV.js +0 -545
  180. package/dist/adapters/mcp-transport-DMhuYmFp.cjs +0 -39
  181. package/dist/adapters/utils-CyBt-as9.cjs +0 -15
  182. package/dist/client/chunks/DashboardEditModal-BTdV528l.js.map +0 -1
  183. package/dist/client/chunks/FieldSearchModal-D75vy4Wb.js.map +0 -1
  184. package/dist/client/chunks/KpiDelta-Bk8bzKYM.js +0 -2
  185. package/dist/client/chunks/KpiNumber-CKF-8e_T.js +0 -2
  186. package/dist/client/chunks/KpiText-Iz1vIvu_.js +0 -2
  187. package/dist/client/chunks/RetentionCombinedChart-DIhK5pD8.js.map +0 -1
  188. package/dist/client/chunks/RetentionHeatmap-CyREolyP.js.map +0 -1
  189. package/dist/client/chunks/SchemaVisualization-B1GUT-FM.js +0 -2
  190. package/dist/client/chunks/SchemaVisualizationLazy-DymwT34e.js +0 -2
  191. package/dist/client/chunks/analysis-builder-C1CJ0c7L.js.map +0 -1
  192. package/dist/client/chunks/analysis-builder-shared-rkjJfWLT.js.map +0 -1
  193. package/dist/client/chunks/chart-activity-grid-DLktOINm.js +0 -806
  194. package/dist/client/chunks/chart-activity-grid-DLktOINm.js.map +0 -1
  195. package/dist/client/chunks/chart-area-BwYaflNk.js.map +0 -1
  196. package/dist/client/chunks/chart-bar-BiENfFgE.js.map +0 -1
  197. package/dist/client/chunks/chart-box-plot-BJF1tBXC.js.map +0 -1
  198. package/dist/client/chunks/chart-bubble-DQQhGVDJ.js.map +0 -1
  199. package/dist/client/chunks/chart-candlestick-C2UuXbLe.js +0 -306
  200. package/dist/client/chunks/chart-candlestick-C2UuXbLe.js.map +0 -1
  201. package/dist/client/chunks/chart-config-activity-grid-DJOU3TEz.js +0 -51
  202. package/dist/client/chunks/chart-config-activity-grid-DJOU3TEz.js.map +0 -1
  203. package/dist/client/chunks/chart-config-area-CWnWVT6a.js +0 -93
  204. package/dist/client/chunks/chart-config-area-CWnWVT6a.js.map +0 -1
  205. package/dist/client/chunks/chart-config-bar-C-7Dr1Ho.js +0 -87
  206. package/dist/client/chunks/chart-config-bar-C-7Dr1Ho.js.map +0 -1
  207. package/dist/client/chunks/chart-config-box-plot-mVOwmLdu.js +0 -35
  208. package/dist/client/chunks/chart-config-box-plot-mVOwmLdu.js.map +0 -1
  209. package/dist/client/chunks/chart-config-bubble-BPE2CeiD.js +0 -82
  210. package/dist/client/chunks/chart-config-bubble-BPE2CeiD.js.map +0 -1
  211. package/dist/client/chunks/chart-config-candlestick-BSB9DRy2.js +0 -72
  212. package/dist/client/chunks/chart-config-candlestick-BSB9DRy2.js.map +0 -1
  213. package/dist/client/chunks/chart-config-data-table-Bhdx5Hem.js.map +0 -1
  214. package/dist/client/chunks/chart-config-funnel-Cl-v-bm1.js +0 -93
  215. package/dist/client/chunks/chart-config-funnel-Cl-v-bm1.js.map +0 -1
  216. package/dist/client/chunks/chart-config-gauge-CdrUTJMJ.js +0 -64
  217. package/dist/client/chunks/chart-config-gauge-CdrUTJMJ.js.map +0 -1
  218. package/dist/client/chunks/chart-config-heat-map-DGE3NzoF.js +0 -91
  219. package/dist/client/chunks/chart-config-heat-map-DGE3NzoF.js.map +0 -1
  220. package/dist/client/chunks/chart-config-kpi-delta-DMrQerUW.js +0 -94
  221. package/dist/client/chunks/chart-config-kpi-delta-DMrQerUW.js.map +0 -1
  222. package/dist/client/chunks/chart-config-kpi-number-DCytCytn.js +0 -75
  223. package/dist/client/chunks/chart-config-kpi-number-DCytCytn.js.map +0 -1
  224. package/dist/client/chunks/chart-config-kpi-text-KdKQUvHo.js +0 -47
  225. package/dist/client/chunks/chart-config-kpi-text-KdKQUvHo.js.map +0 -1
  226. package/dist/client/chunks/chart-config-line-Bl9VDAdz.js +0 -104
  227. package/dist/client/chunks/chart-config-line-Bl9VDAdz.js.map +0 -1
  228. package/dist/client/chunks/chart-config-markdown-BX26b94i.js +0 -117
  229. package/dist/client/chunks/chart-config-markdown-BX26b94i.js.map +0 -1
  230. package/dist/client/chunks/chart-config-measure-profile-DwtRhEFh.js +0 -82
  231. package/dist/client/chunks/chart-config-measure-profile-DwtRhEFh.js.map +0 -1
  232. package/dist/client/chunks/chart-config-pie-BzBcqPMJ.js +0 -68
  233. package/dist/client/chunks/chart-config-pie-BzBcqPMJ.js.map +0 -1
  234. package/dist/client/chunks/chart-config-radar-6ZOgt__z.js +0 -49
  235. package/dist/client/chunks/chart-config-radar-6ZOgt__z.js.map +0 -1
  236. package/dist/client/chunks/chart-config-radial-bar-Df6Eta7N.js +0 -38
  237. package/dist/client/chunks/chart-config-radial-bar-Df6Eta7N.js.map +0 -1
  238. package/dist/client/chunks/chart-config-sankey-DgqKBFvN.js +0 -66
  239. package/dist/client/chunks/chart-config-sankey-DgqKBFvN.js.map +0 -1
  240. package/dist/client/chunks/chart-config-scatter-D5nVLDvi.js +0 -61
  241. package/dist/client/chunks/chart-config-scatter-D5nVLDvi.js.map +0 -1
  242. package/dist/client/chunks/chart-config-sunburst-Ca3FX9nW.js +0 -45
  243. package/dist/client/chunks/chart-config-sunburst-Ca3FX9nW.js.map +0 -1
  244. package/dist/client/chunks/chart-config-tree-map-Bjy4QNa3.js +0 -51
  245. package/dist/client/chunks/chart-config-tree-map-Bjy4QNa3.js.map +0 -1
  246. package/dist/client/chunks/chart-config-waterfall-C5K2eqR7.js +0 -59
  247. package/dist/client/chunks/chart-config-waterfall-C5K2eqR7.js.map +0 -1
  248. package/dist/client/chunks/chart-data-table-2iCsn0CF.js.map +0 -1
  249. package/dist/client/chunks/chart-funnel-poyOf7-e.js.map +0 -1
  250. package/dist/client/chunks/chart-gauge-D5J4gRky.js.map +0 -1
  251. package/dist/client/chunks/chart-heat-map-BAMVhLGG.js.map +0 -1
  252. package/dist/client/chunks/chart-kpi-delta-KQjUIeal.js.map +0 -1
  253. package/dist/client/chunks/chart-kpi-number-CsQgV_x3.js +0 -325
  254. package/dist/client/chunks/chart-kpi-number-CsQgV_x3.js.map +0 -1
  255. package/dist/client/chunks/chart-kpi-text-BR0IyeUU.js +0 -148
  256. package/dist/client/chunks/chart-kpi-text-BR0IyeUU.js.map +0 -1
  257. package/dist/client/chunks/chart-line-B5_WntY5.js.map +0 -1
  258. package/dist/client/chunks/chart-markdown-B6bENbel.js +0 -3473
  259. package/dist/client/chunks/chart-markdown-B6bENbel.js.map +0 -1
  260. package/dist/client/chunks/chart-measure-profile-yWk-obNb.js +0 -179
  261. package/dist/client/chunks/chart-measure-profile-yWk-obNb.js.map +0 -1
  262. package/dist/client/chunks/chart-pie-BodrUoHv.js +0 -172
  263. package/dist/client/chunks/chart-pie-BodrUoHv.js.map +0 -1
  264. package/dist/client/chunks/chart-radar-gG3zfLud.js +0 -154
  265. package/dist/client/chunks/chart-radar-gG3zfLud.js.map +0 -1
  266. package/dist/client/chunks/chart-radial-bar-C2IPCV8c.js +0 -148
  267. package/dist/client/chunks/chart-radial-bar-C2IPCV8c.js.map +0 -1
  268. package/dist/client/chunks/chart-sankey-BOyxfG1Q.js.map +0 -1
  269. package/dist/client/chunks/chart-scatter-B8OwlsAX.js +0 -255
  270. package/dist/client/chunks/chart-scatter-B8OwlsAX.js.map +0 -1
  271. package/dist/client/chunks/chart-sunburst-D9lGEOCc.js.map +0 -1
  272. package/dist/client/chunks/chart-tree-map-DZaKy9he.js +0 -298
  273. package/dist/client/chunks/chart-tree-map-DZaKy9he.js.map +0 -1
  274. package/dist/client/chunks/chart-waterfall-BCdUx4DC.js.map +0 -1
  275. package/dist/client/chunks/charts-core-C5Yokk-x.js.map +0 -1
  276. package/dist/client/chunks/schema-visualization-t1KiOORo.js.map +0 -1
  277. package/dist/client/chunks/useDebounce-CKqkM42n.js.map +0 -1
@@ -1,10 +1,10 @@
1
1
  import { n as e } from "./rolldown-runtime-CCl2IeXn.js";
2
- import { S as t, T as n, _ as r, g as i, i as a, m as o, n as s, r as c, u as l, w as u, x as d, y as f } from "./chart-activity-grid-DLktOINm.js";
3
- import p, { useCallback as m, useEffect as h, useLayoutEffect as g, useMemo as _, useRef as v, useState as y, useSyncExternalStore as b } from "react";
4
- import { jsx as x, jsxs as S } from "react/jsx-runtime";
5
- import { axisBottom as C, axisLeft as w, extent as T, max as ee, scaleLinear as E, scaleOrdinal as D, scaleQuantize as te, scaleSqrt as O, select as k } from "d3";
2
+ import { S as t, T as n, _ as r, g as i, i as a, k as o, m as s, n as c, r as l, u, w as d, x as f, y as p } from "./chart-activity-grid-CWT0gLv4.js";
3
+ import m, { useCallback as h, useEffect as g, useLayoutEffect as _, useMemo as v, useRef as y, useState as b, useSyncExternalStore as x } from "react";
4
+ import { jsx as S, jsxs as C } from "react/jsx-runtime";
5
+ import { axisBottom as w, axisLeft as T, extent as E, max as D, scaleLinear as O, scaleOrdinal as k, scaleQuantize as ee, scaleSqrt as te, select as A } from "d3";
6
6
  //#region src/client/hooks/useTheme.ts
7
- var A = {
7
+ var j = {
8
8
  listeners: /* @__PURE__ */ new Set(),
9
9
  subscribe(e) {
10
10
  return this.listeners.add(e), () => this.listeners.delete(e);
@@ -14,49 +14,49 @@ var A = {
14
14
  }
15
15
  };
16
16
  i(() => {
17
- A.notify();
17
+ j.notify();
18
18
  });
19
- function j() {
19
+ function M() {
20
20
  return {
21
- theme: b(A.subscribe.bind(A), l, l),
22
- setTheme: m((e) => {
23
- o(e), A.notify();
21
+ theme: x(j.subscribe.bind(j), u, u),
22
+ setTheme: h((e) => {
23
+ s(e), j.notify();
24
24
  }, [])
25
25
  };
26
26
  }
27
27
  //#endregion
28
28
  //#region src/client/components/charts/BubbleChart.tsx
29
- var M = /* @__PURE__ */ e({ default: () => N }), N = p.memo(function({ data: e, chartConfig: i, displayConfig: o = {}, queryObject: l, height: p = "100%", colorPalette: m }) {
30
- let b = v(null), A = v(null), [M, N] = y({
29
+ var N = /* @__PURE__ */ e({ default: () => P }), P = m.memo(function({ data: e, chartConfig: i, displayConfig: s = {}, queryObject: u, height: m = "100%", colorPalette: h }) {
30
+ let { t: x } = o(), j = y(null), N = y(null), [P, F] = b({
31
31
  width: 0,
32
32
  height: 0
33
- }), [P, F] = y(!1), { theme: I } = j(), L = r(), R = _(() => ({
34
- showLegend: o?.showLegend ?? !0,
35
- showGrid: o?.showGrid ?? !0,
36
- showTooltip: o?.showTooltip ?? !0,
37
- minBubbleSize: o?.minBubbleSize ?? 5,
38
- maxBubbleSize: o?.maxBubbleSize ?? 50,
39
- bubbleOpacity: o?.bubbleOpacity ?? .7,
40
- xAxisFormat: o?.xAxisFormat,
41
- leftYAxisFormat: o?.leftYAxisFormat
33
+ }), [I, L] = b(!1), { theme: R } = M(), z = r(), B = v(() => ({
34
+ showLegend: s?.showLegend ?? !0,
35
+ showGrid: s?.showGrid ?? !0,
36
+ showTooltip: s?.showTooltip ?? !0,
37
+ minBubbleSize: s?.minBubbleSize ?? 5,
38
+ maxBubbleSize: s?.maxBubbleSize ?? 50,
39
+ bubbleOpacity: s?.bubbleOpacity ?? .7,
40
+ xAxisFormat: s?.xAxisFormat,
41
+ leftYAxisFormat: s?.leftYAxisFormat
42
42
  }), [
43
- o?.showLegend,
44
- o?.showGrid,
45
- o?.showTooltip,
46
- o?.minBubbleSize,
47
- o?.maxBubbleSize,
48
- o?.bubbleOpacity,
49
- o?.xAxisFormat,
50
- o?.leftYAxisFormat
43
+ s?.showLegend,
44
+ s?.showGrid,
45
+ s?.showTooltip,
46
+ s?.minBubbleSize,
47
+ s?.maxBubbleSize,
48
+ s?.bubbleOpacity,
49
+ s?.xAxisFormat,
50
+ s?.leftYAxisFormat
51
51
  ]);
52
- return g(() => {
52
+ return _(() => {
53
53
  let e = 0, t, n, r = () => {
54
- if (A.current) {
55
- let { width: e, height: t } = A.current.getBoundingClientRect();
56
- if (e > 0 && t > 0) return N({
54
+ if (N.current) {
55
+ let { width: e, height: t } = N.current.getBoundingClientRect();
56
+ if (e > 0 && t > 0) return F({
57
57
  width: e,
58
58
  height: t
59
- }), F(!0), !0;
59
+ }), L(!0), !0;
60
60
  }
61
61
  return !1;
62
62
  };
@@ -71,32 +71,32 @@ var M = /* @__PURE__ */ e({ default: () => N }), N = p.memo(function({ data: e,
71
71
  return () => {
72
72
  t && cancelAnimationFrame(t), n && clearTimeout(n);
73
73
  };
74
- }, []), h(() => {
74
+ }, []), g(() => {
75
75
  let e = null, t = () => {
76
- if (A.current) {
77
- let { width: e, height: t } = A.current.getBoundingClientRect();
78
- e > 0 && t > 0 && (N({
76
+ if (N.current) {
77
+ let { width: e, height: t } = N.current.getBoundingClientRect();
78
+ e > 0 && t > 0 && (F({
79
79
  width: e,
80
80
  height: t
81
- }), P || F(!0));
81
+ }), I || L(!0));
82
82
  }
83
83
  };
84
- return A.current && (e = new ResizeObserver((e) => {
84
+ return N.current && (e = new ResizeObserver((e) => {
85
85
  for (let t of e) {
86
86
  let { width: e, height: n } = t.contentRect;
87
- e > 0 && n > 0 && (N({
87
+ e > 0 && n > 0 && (F({
88
88
  width: e,
89
89
  height: n
90
- }), P || F(!0));
90
+ }), I || L(!0));
91
91
  }
92
- }), e.observe(A.current), t()), window.addEventListener("resize", t), () => {
92
+ }), e.observe(N.current), t()), window.addEventListener("resize", t), () => {
93
93
  e && e.disconnect(), window.removeEventListener("resize", t);
94
94
  };
95
- }, [P]), h(() => {
96
- if (!e || e.length === 0 || !b.current || !P || M.width === 0 || (k(b.current).selectAll("*").remove(), !i?.xAxis || !i?.yAxis || !i?.series)) return;
97
- let r = Array.isArray(i.xAxis) ? i.xAxis[0] : i.xAxis, o = Array.isArray(i.yAxis) ? i.yAxis[0] : i.yAxis, p = Array.isArray(i.series) ? i.series[0] : i.series, h = Array.isArray(i.sizeField) ? i.sizeField[0] : i.sizeField || o, g = Array.isArray(i.colorField) ? i.colorField[0] : i.colorField;
98
- if (!r || !o || !p || !h) return;
99
- let _ = t(l, r), v = l?.timeDimensions?.some((e) => e.dimension === r) || !1, y = e.map((e) => {
95
+ }, [I]), g(() => {
96
+ if (!e || e.length === 0 || !j.current || !I || P.width === 0 || (A(j.current).selectAll("*").remove(), !i?.xAxis || !i?.yAxis || !i?.series)) return;
97
+ let r = Array.isArray(i.xAxis) ? i.xAxis[0] : i.xAxis, o = Array.isArray(i.yAxis) ? i.yAxis[0] : i.yAxis, s = Array.isArray(i.series) ? i.series[0] : i.series, m = Array.isArray(i.sizeField) ? i.sizeField[0] : i.sizeField || o, g = Array.isArray(i.colorField) ? i.colorField[0] : i.colorField;
98
+ if (!r || !o || !s || !m) return;
99
+ let _ = t(u, r), v = u?.timeDimensions?.some((e) => e.dimension === r) || !1, y = e.map((e) => {
100
100
  let t = e[r], i, a;
101
101
  if (v && t) {
102
102
  let e = String(t), n;
@@ -104,29 +104,29 @@ var M = /* @__PURE__ */ e({ default: () => N }), N = p.memo(function({ data: e,
104
104
  let t = e;
105
105
  e.includes(" ") && (t = e.replace(" ", "T").replace("+00", "Z").replace(/\+\d{2}:\d{2}$/, "Z")), !t.endsWith("Z") && !t.includes("+") && (t += "Z"), n = new Date(t);
106
106
  } else n = new Date(e);
107
- i = isNaN(n.getTime()) ? parseFloat(e) : n.getTime(), a = d(t, _);
107
+ i = isNaN(n.getTime()) ? parseFloat(e) : n.getTime(), a = f(t, _);
108
108
  } else {
109
- let e = d(t, _) || t;
109
+ let e = f(t, _) || t;
110
110
  i = typeof e == "string" ? parseFloat(e) : e, a = String(e);
111
111
  }
112
- let s = n(e[o]), c = n(e[h]), l = e[p];
112
+ let c = n(e[o]), l = n(e[m]), u = e[s];
113
113
  return {
114
114
  x: i,
115
115
  xLabel: a,
116
- y: s,
117
- size: c === null ? 0 : Math.abs(c),
118
- color: g ? e[g] : l,
119
- series: l,
120
- label: `${l || "Unknown"}`,
121
- isValid: u(i) && s !== null && c !== null && c > 0
116
+ y: c,
117
+ size: l === null ? 0 : Math.abs(l),
118
+ color: g ? e[g] : u,
119
+ series: u,
120
+ label: `${u || "Unknown"}`,
121
+ isValid: d(i) && c !== null && l !== null && l > 0
122
122
  };
123
123
  }).filter((e) => e.isValid && e.size > 0);
124
124
  if (y.length === 0) return;
125
- let x = {
125
+ let b = {
126
126
  ...a,
127
127
  left: a.left + 30,
128
- bottom: R.showLegend && g ? 100 : 40
129
- }, S = M.width - x.left - x.right, A = M.height - x.top - x.bottom, j = k(b.current).attr("width", M.width).attr("height", M.height), N = j.append("g").attr("transform", `translate(${x.left},${x.top})`), F = E().domain(T(y, (e) => e.x)).range([0, S]).nice(), z = E().domain(T(y, (e) => e.y)).range([A, 0]).nice(), B = O().domain([0, ee(y, (e) => e.size)]).range([R.minBubbleSize, R.maxBubbleSize]), V, H = !1, U = [];
128
+ bottom: B.showLegend && g ? 100 : 40
129
+ }, x = P.width - b.left - b.right, S = P.height - b.top - b.bottom, C = A(j.current).attr("width", P.width).attr("height", P.height), M = C.append("g").attr("transform", `translate(${b.left},${b.top})`), N = O().domain(E(y, (e) => e.x)).range([0, x]).nice(), F = O().domain(E(y, (e) => e.y)).range([S, 0]).nice(), L = te().domain([0, D(y, (e) => e.size)]).range([B.minBubbleSize, B.maxBubbleSize]), V, H = !1, U = [];
130
130
  if (g && y.length > 0) {
131
131
  let e = y.map((e) => {
132
132
  let t = e.color;
@@ -134,17 +134,17 @@ var M = /* @__PURE__ */ e({ default: () => N }), N = p.memo(function({ data: e,
134
134
  }).filter((e) => !isNaN(e));
135
135
  if (H = e.length === y.length && e.every((e) => typeof e == "number"), H) {
136
136
  let t = Math.min(...e), n = Math.max(...e);
137
- V = te().domain([t, n]).range(m?.gradient || c);
138
- } else U = [...new Set(y.map((e) => String(e.color)))], V = D().domain(U).range(m?.colors || s);
139
- } else V = D().domain(["default"]).range([s[0]]);
140
- let W = (e, t) => getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t, G = I !== "light", K = G ? W("--dc-text-muted", "#cbd5e1") : W("--dc-text-secondary", "#374151"), q = G ? W("--dc-border", "#475569") : "#9ca3af";
141
- if (R.showGrid) {
142
- let e = N.append("g").attr("class", "grid").attr("transform", `translate(0,${A})`).call(C(F).tickSize(-A).tickFormat(() => ""));
137
+ V = ee().domain([t, n]).range(h?.gradient || l);
138
+ } else U = [...new Set(y.map((e) => String(e.color)))], V = k().domain(U).range(h?.colors || c);
139
+ } else V = k().domain(["default"]).range([c[0]]);
140
+ let W = (e, t) => getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t, G = R !== "light", K = G ? W("--dc-text-muted", "#cbd5e1") : W("--dc-text-secondary", "#374151"), q = G ? W("--dc-border", "#475569") : "#9ca3af";
141
+ if (B.showGrid) {
142
+ let e = M.append("g").attr("class", "grid").attr("transform", `translate(0,${S})`).call(w(N).tickSize(-S).tickFormat(() => ""));
143
143
  e.selectAll("line").style("stroke", q).style("stroke-dasharray", "3,3").style("opacity", .3), e.select(".domain").style("stroke", "none");
144
- let t = N.append("g").attr("class", "grid").call(w(z).tickSize(-S).tickFormat(() => ""));
144
+ let t = M.append("g").attr("class", "grid").call(T(F).tickSize(-x).tickFormat(() => ""));
145
145
  t.selectAll("line").style("stroke", q).style("stroke-dasharray", "3,3").style("opacity", .3), t.select(".domain").style("stroke", "none");
146
146
  }
147
- let J = C(F);
147
+ let J = w(N);
148
148
  v ? J.tickFormat((e) => {
149
149
  let t = new Date(e);
150
150
  if (isNaN(t.getTime())) return String(e);
@@ -160,41 +160,41 @@ var M = /* @__PURE__ */ e({ default: () => N }), N = p.memo(function({ data: e,
160
160
  case "hour": return `${String(t.getUTCMonth() + 1).padStart(2, "0")}-${String(t.getUTCDate()).padStart(2, "0")} ${String(t.getUTCHours()).padStart(2, "0")}:00`;
161
161
  default: return `${t.getUTCFullYear()}-${String(t.getUTCMonth() + 1).padStart(2, "0")}`;
162
162
  }
163
- }) : R.xAxisFormat && J.tickFormat((e) => f(e, R.xAxisFormat));
164
- let Y = N.append("g").attr("transform", `translate(0,${A})`).call(J);
165
- Y.selectAll("text").style("fill", K), Y.selectAll("line, path").style("stroke", q), Y.append("text").attr("x", S / 2).attr("y", 35).attr("fill", K).style("text-anchor", "middle").style("font-size", "12px").text(R.xAxisFormat?.label || L(r));
166
- let X = w(z);
167
- R.leftYAxisFormat && X.tickFormat((e) => f(e, R.leftYAxisFormat));
168
- let Z = N.append("g").call(X);
169
- Z.selectAll("text").style("fill", K), Z.selectAll("line, path").style("stroke", q), Z.append("text").attr("transform", "rotate(-90)").attr("y", -35).attr("x", -A / 2).attr("fill", K).style("text-anchor", "middle").style("font-size", "12px").text(R.leftYAxisFormat?.label || L(o));
170
- let Q = k("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), $ = N.selectAll(".bubble").data(y).enter().append("circle").attr("class", "bubble").attr("cx", (e) => F(e.x)).attr("cy", (e) => z(e.y)).attr("r", (e) => B(e.size)).style("fill", (e) => g && e.color !== void 0 ? V(H ? e.color : String(e.color)) : s[0]).style("opacity", R.bubbleOpacity).style("stroke", "#fff").style("stroke-width", 1).style("cursor", "pointer");
171
- if (R.showTooltip && $.on("mouseover", function(e, t) {
172
- k(this).transition().duration(200).style("opacity", 1).attr("r", B(t.size) * 1.1);
163
+ }) : B.xAxisFormat && J.tickFormat((e) => p(e, B.xAxisFormat));
164
+ let Y = M.append("g").attr("transform", `translate(0,${S})`).call(J);
165
+ Y.selectAll("text").style("fill", K), Y.selectAll("line, path").style("stroke", q), Y.append("text").attr("x", x / 2).attr("y", 35).attr("fill", K).style("text-anchor", "middle").style("font-size", "12px").text(B.xAxisFormat?.label || z(r));
166
+ let X = T(F);
167
+ B.leftYAxisFormat && X.tickFormat((e) => p(e, B.leftYAxisFormat));
168
+ let Z = M.append("g").call(X);
169
+ Z.selectAll("text").style("fill", K), Z.selectAll("line, path").style("stroke", q), Z.append("text").attr("transform", "rotate(-90)").attr("y", -35).attr("x", -S / 2).attr("fill", K).style("text-anchor", "middle").style("font-size", "12px").text(B.leftYAxisFormat?.label || z(o));
170
+ let Q = A("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), $ = M.selectAll(".bubble").data(y).enter().append("circle").attr("class", "bubble").attr("cx", (e) => N(e.x)).attr("cy", (e) => F(e.y)).attr("r", (e) => L(e.size)).style("fill", (e) => g && e.color !== void 0 ? V(H ? e.color : String(e.color)) : c[0]).style("opacity", B.bubbleOpacity).style("stroke", "#fff").style("stroke-width", 1).style("cursor", "pointer");
171
+ if (B.showTooltip && $.on("mouseover", function(e, t) {
172
+ A(this).transition().duration(200).style("opacity", 1).attr("r", L(t.size) * 1.1);
173
173
  let n = [
174
174
  `<strong>${t.series || "Unknown"}</strong>`,
175
- `${L(r)}: ${t.xLabel || (R.xAxisFormat ? f(t.x, R.xAxisFormat) : t.x)}`,
176
- `${L(o)}: ${R.leftYAxisFormat ? f(t.y, R.leftYAxisFormat) : t.y}`,
177
- `${L(h)}: ${R.leftYAxisFormat ? f(t.size, R.leftYAxisFormat) : t.size}`,
178
- g && t.color ? `${L(g)}: ${t.color}` : ""
175
+ `${z(r)}: ${t.xLabel || (B.xAxisFormat ? p(t.x, B.xAxisFormat) : t.x)}`,
176
+ `${z(o)}: ${B.leftYAxisFormat ? p(t.y, B.leftYAxisFormat) : t.y}`,
177
+ `${z(m)}: ${B.leftYAxisFormat ? p(t.size, B.leftYAxisFormat) : t.size}`,
178
+ g && t.color ? `${z(g)}: ${t.color}` : ""
179
179
  ].filter(Boolean).join("<br>");
180
180
  Q.html(n).style("left", e.pageX + 10 + "px").style("top", e.pageY - 10 + "px").transition().duration(200).style("opacity", 1);
181
181
  }).on("mousemove", function(e) {
182
182
  Q.style("left", e.pageX + 10 + "px").style("top", e.pageY - 10 + "px");
183
183
  }).on("mouseout", function(e, t) {
184
- k(this).transition().duration(200).style("opacity", R.bubbleOpacity).attr("r", B(t.size)), Q.transition().duration(200).style("opacity", 0);
185
- }), R.showLegend && g) if (H) {
186
- let e = Math.min(...y.map((e) => e.color)), t = Math.max(...y.map((e) => e.color)), n = N.append("g").attr("class", "color-legend").attr("transform", `translate(${S / 2 - 200 / 2}, ${A + 60})`), r = j.append("defs").append("linearGradient").attr("id", "color-scale-gradient").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%"), i = m?.gradient || c;
184
+ A(this).transition().duration(200).style("opacity", B.bubbleOpacity).attr("r", L(t.size)), Q.transition().duration(200).style("opacity", 0);
185
+ }), B.showLegend && g) if (H) {
186
+ let e = Math.min(...y.map((e) => e.color)), t = Math.max(...y.map((e) => e.color)), n = M.append("g").attr("class", "color-legend").attr("transform", `translate(${x / 2 - 200 / 2}, ${S + 60})`), r = C.append("defs").append("linearGradient").attr("id", "color-scale-gradient").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%"), i = h?.gradient || l;
187
187
  i.forEach((e, t) => {
188
188
  r.append("stop").attr("offset", `${t / (i.length - 1) * 100}%`).attr("stop-color", e);
189
- }), n.append("rect").attr("width", 200).attr("height", 20).style("fill", "url(#color-scale-gradient)").style("stroke", "#ccc").style("stroke-width", 1), n.append("text").attr("x", 0).attr("y", 35).attr("text-anchor", "start").style("font-size", "11px").style("fill", K).text(R.leftYAxisFormat ? f(e, R.leftYAxisFormat) : e.toFixed(2)), n.append("text").attr("x", 200).attr("y", 35).attr("text-anchor", "end").style("font-size", "11px").style("fill", K).text(R.leftYAxisFormat ? f(t, R.leftYAxisFormat) : t.toFixed(2)), n.append("text").attr("x", 200 / 2).attr("y", -5).attr("text-anchor", "middle").style("font-size", "12px").style("font-weight", "bold").style("fill", K).text(L(g));
189
+ }), n.append("rect").attr("width", 200).attr("height", 20).style("fill", "url(#color-scale-gradient)").style("stroke", "#ccc").style("stroke-width", 1), n.append("text").attr("x", 0).attr("y", 35).attr("text-anchor", "start").style("font-size", "11px").style("fill", K).text(B.leftYAxisFormat ? p(e, B.leftYAxisFormat) : e.toFixed(2)), n.append("text").attr("x", 200).attr("y", 35).attr("text-anchor", "end").style("font-size", "11px").style("fill", K).text(B.leftYAxisFormat ? p(t, B.leftYAxisFormat) : t.toFixed(2)), n.append("text").attr("x", 200 / 2).attr("y", -5).attr("text-anchor", "middle").style("font-size", "12px").style("font-weight", "bold").style("fill", K).text(z(g));
190
190
  } else {
191
191
  let e = U;
192
192
  if (e.length > 0) {
193
- let t = N.append("g").attr("class", "legend").attr("transform", `translate(${S / 2 - e.length * 80 / 2}, ${A + 60})`).selectAll(".legend-item").data(e).enter().append("g").attr("class", "legend-item").attr("transform", (e, t) => `translate(${t * 80}, 0)`).style("cursor", "pointer");
194
- t.append("circle").attr("cx", 5).attr("cy", 5).attr("r", 5).style("fill", (e) => V(e)).style("opacity", R.bubbleOpacity), t.append("text").attr("x", 15).attr("y", 5).attr("dy", ".35em").style("font-size", "11px").style("fill", K).text((e) => String(e)), t.on("mouseover", function(e, t) {
193
+ let t = M.append("g").attr("class", "legend").attr("transform", `translate(${x / 2 - e.length * 80 / 2}, ${S + 60})`).selectAll(".legend-item").data(e).enter().append("g").attr("class", "legend-item").attr("transform", (e, t) => `translate(${t * 80}, 0)`).style("cursor", "pointer");
194
+ t.append("circle").attr("cx", 5).attr("cy", 5).attr("r", 5).style("fill", (e) => V(e)).style("opacity", B.bubbleOpacity), t.append("text").attr("x", 15).attr("y", 5).attr("dy", ".35em").style("font-size", "11px").style("fill", K).text((e) => String(e)), t.on("mouseover", function(e, t) {
195
195
  $.transition().duration(200).style("opacity", (e) => g && String(e.color) === t ? 1 : .2);
196
196
  }).on("mouseout", function() {
197
- $.transition().duration(200).style("opacity", R.bubbleOpacity);
197
+ $.transition().duration(200).style("opacity", B.bubbleOpacity);
198
198
  });
199
199
  }
200
200
  }
@@ -204,70 +204,70 @@ var M = /* @__PURE__ */ e({ default: () => N }), N = p.memo(function({ data: e,
204
204
  }, [
205
205
  e,
206
206
  i,
207
- R,
208
- l,
209
- M,
207
+ B,
208
+ u,
210
209
  P,
211
- m,
212
210
  I,
213
- L
214
- ]), !e || e.length === 0 ? /* @__PURE__ */ x("div", {
211
+ h,
212
+ R,
213
+ z
214
+ ]), !e || e.length === 0 ? /* @__PURE__ */ S("div", {
215
215
  className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-text-muted",
216
- style: { height: p },
217
- children: /* @__PURE__ */ S("div", {
216
+ style: { height: m },
217
+ children: /* @__PURE__ */ C("div", {
218
218
  className: "dc:text-center",
219
- children: [/* @__PURE__ */ x("div", {
219
+ children: [/* @__PURE__ */ S("div", {
220
220
  className: "dc:text-sm dc:font-semibold dc:mb-1",
221
- children: "No data available"
222
- }), /* @__PURE__ */ x("div", {
221
+ children: x("chart.runtime.noData")
222
+ }), /* @__PURE__ */ S("div", {
223
223
  className: "dc:text-xs text-dc-text-secondary",
224
- children: "No data points to display in bubble chart"
224
+ children: x("chart.runtime.noDataHint.bubble")
225
225
  })]
226
226
  })
227
- }) : i?.xAxis && i?.yAxis && i?.series ? /* @__PURE__ */ x("div", {
227
+ }) : i?.xAxis && i?.yAxis && i?.series ? /* @__PURE__ */ S("div", {
228
228
  className: "dc:w-full dc:flex-1 dc:flex dc:flex-col dc:relative",
229
229
  style: {
230
- height: p,
230
+ height: m,
231
231
  minHeight: "250px",
232
232
  overflow: "hidden"
233
233
  },
234
- children: /* @__PURE__ */ S("div", {
235
- ref: A,
234
+ children: /* @__PURE__ */ C("div", {
235
+ ref: N,
236
236
  className: "dc:w-full dc:h-full dc:relative",
237
- children: [/* @__PURE__ */ x("svg", {
238
- ref: b,
237
+ children: [/* @__PURE__ */ S("svg", {
238
+ ref: j,
239
239
  className: "dc:w-full dc:h-full"
240
- }), !P && /* @__PURE__ */ x("div", {
240
+ }), !I && /* @__PURE__ */ S("div", {
241
241
  className: "dc:absolute dc:inset-0 dc:flex dc:items-center dc:justify-center",
242
- children: /* @__PURE__ */ x("div", {
242
+ children: /* @__PURE__ */ S("div", {
243
243
  className: "text-dc-text-muted dc:text-sm",
244
- children: "Measuring chart dimensions..."
244
+ children: x("chart.runtime.measuringDimensions")
245
245
  })
246
246
  })]
247
247
  })
248
- }) : /* @__PURE__ */ x("div", {
248
+ }) : /* @__PURE__ */ S("div", {
249
249
  className: "dc:flex dc:items-center dc:justify-center dc:w-full text-dc-warning",
250
- style: { height: p },
251
- children: /* @__PURE__ */ S("div", {
250
+ style: { height: m },
251
+ children: /* @__PURE__ */ C("div", {
252
252
  className: "dc:text-center",
253
253
  children: [
254
- /* @__PURE__ */ x("div", {
254
+ /* @__PURE__ */ S("div", {
255
255
  className: "dc:text-sm dc:font-semibold dc:mb-1",
256
- children: "Configuration Required"
256
+ children: x("chart.runtime.activityGridConfigRequired")
257
257
  }),
258
- /* @__PURE__ */ x("div", {
258
+ /* @__PURE__ */ S("div", {
259
259
  className: "dc:text-xs",
260
- children: "Bubble chart requires xAxis, yAxis, series, and sizeField dimensions"
260
+ children: x("chart.runtime.configErrorHint.bubbleRequired")
261
261
  }),
262
- /* @__PURE__ */ x("div", {
262
+ /* @__PURE__ */ S("div", {
263
263
  className: "dc:text-xs dc:mt-1",
264
- children: "Optional: colorField for bubble coloring"
264
+ children: x("chart.runtime.configErrorHint.bubbleOptional")
265
265
  })
266
266
  ]
267
267
  })
268
268
  });
269
269
  });
270
270
  //#endregion
271
- export { j as n, M as t };
271
+ export { M as n, N as t };
272
272
 
273
- //# sourceMappingURL=chart-bubble-DQQhGVDJ.js.map
273
+ //# sourceMappingURL=chart-bubble-CMDp4Pfm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-bubble-CMDp4Pfm.js","names":[],"sources":["../../../src/client/hooks/useTheme.ts","../../../src/client/components/charts/BubbleChart.tsx"],"sourcesContent":["/**\n * useTheme - External Theme State Hook\n *\n * Uses React 18's useSyncExternalStore to prevent parent component re-renders.\n * The theme state is stored externally and changes are propagated through\n * a subscribe/notify pattern.\n *\n * This prevents the ThemeToggle component from causing Layout re-renders.\n */\n\nimport { useSyncExternalStore, useCallback } from 'react'\nimport { getTheme, setTheme as setThemeUtil, watchThemeChanges, type Theme } from '../theme'\n\n// External store for theme state\nconst themeStore = {\n listeners: new Set<() => void>(),\n\n subscribe(listener: () => void) {\n this.listeners.add(listener)\n return () => this.listeners.delete(listener)\n },\n\n notify() {\n this.listeners.forEach(listener => listener())\n }\n}\n\n// Watch theme changes from DOM/system and notify subscribers\nwatchThemeChanges(() => {\n themeStore.notify()\n})\n\n/**\n * Hook to access and update theme\n *\n * Returns current theme and a setter function.\n * Only components using this hook will re-render on theme changes.\n */\nexport function useTheme() {\n // Subscribe to external theme store\n const theme = useSyncExternalStore(\n themeStore.subscribe.bind(themeStore),\n getTheme, // Client-side snapshot\n getTheme // Server-side snapshot (SSR)\n )\n\n // Stable setter function\n const setTheme = useCallback((newTheme: Theme) => {\n setThemeUtil(newTheme)\n themeStore.notify()\n }, [])\n\n return { theme, setTheme }\n}\n","import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation'\nimport { select, scaleLinear, scaleSqrt, scaleOrdinal, scaleQuantize, extent, max, axisBottom, axisLeft, transition as _transition, type ScaleOrdinal, type ScaleQuantize } from 'd3'\n// _transition import is for side effects only - it extends Selection.prototype with .transition() method\nimport { CHART_COLORS, CHART_COLORS_GRADIENT, CHART_MARGINS } from '../../utils/chartConstants'\nimport { formatTimeValue, getFieldGranularity, parseNumericValue, isValidNumericValue, formatAxisValue } from '../../utils/chartUtils'\nimport { useCubeFieldLabel } from '../../hooks/useCubeFieldLabel'\nimport { useTheme } from '../../hooks/useTheme'\nimport type { ChartProps } from '../../types'\n\ninterface BubbleData {\n x: number\n xLabel?: string // Formatted label for time dimensions\n y: number\n size: number\n color?: string | number\n label: string\n series?: string\n}\n\nconst BubbleChart = React.memo(function BubbleChart({\n data,\n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const { t } = useTranslation()\n const svgRef = useRef<SVGSVGElement | null>(null)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 })\n const [dimensionsReady, setDimensionsReady] = useState(false)\n const { theme } = useTheme()\n const getFieldLabel = useCubeFieldLabel()\n\n // Memoize safeDisplayConfig to prevent unnecessary re-renders\n const safeDisplayConfig = useMemo(() => ({\n showLegend: displayConfig?.showLegend ?? true,\n showGrid: displayConfig?.showGrid ?? true,\n showTooltip: displayConfig?.showTooltip ?? true,\n minBubbleSize: displayConfig?.minBubbleSize ?? 5,\n maxBubbleSize: displayConfig?.maxBubbleSize ?? 50,\n bubbleOpacity: displayConfig?.bubbleOpacity ?? 0.7,\n xAxisFormat: displayConfig?.xAxisFormat,\n leftYAxisFormat: displayConfig?.leftYAxisFormat\n }), [\n displayConfig?.showLegend,\n displayConfig?.showGrid,\n displayConfig?.showTooltip,\n displayConfig?.minBubbleSize,\n displayConfig?.maxBubbleSize,\n displayConfig?.bubbleOpacity,\n displayConfig?.xAxisFormat,\n displayConfig?.leftYAxisFormat\n ])\n\n // Enhanced dimension measurement with retry mechanism\n useLayoutEffect(() => {\n let retryCount = 0\n const maxRetries = 10\n let rafId: number\n let timeoutId: ReturnType<typeof setTimeout>\n \n const updateDimensions = () => {\n if (containerRef.current) {\n const { width, height } = containerRef.current.getBoundingClientRect()\n \n if (width > 0 && height > 0) {\n setDimensions({ width, height })\n setDimensionsReady(true)\n return true\n }\n }\n return false\n }\n \n // Immediate measurement\n const success = updateDimensions()\n \n if (!success && retryCount < maxRetries) {\n // Retry with requestAnimationFrame\n const retryWithRaf = () => {\n const rafSuccess = updateDimensions()\n \n if (!rafSuccess && retryCount < maxRetries) {\n retryCount++\n // Use setTimeout for additional retries with increasing delays\n timeoutId = setTimeout(() => {\n rafId = requestAnimationFrame(retryWithRaf)\n }, 50 * retryCount) // Increasing delay: 50ms, 100ms, 150ms, etc.\n }\n }\n \n rafId = requestAnimationFrame(retryWithRaf)\n }\n \n return () => {\n if (rafId) cancelAnimationFrame(rafId)\n if (timeoutId) clearTimeout(timeoutId)\n }\n }, [])\n\n // Enhanced ResizeObserver for dynamic resizing with immediate initialization\n useEffect(() => {\n let resizeObserver: ResizeObserver | null = null\n \n const updateDimensions = () => {\n if (containerRef.current) {\n const { width, height } = containerRef.current.getBoundingClientRect()\n if (width > 0 && height > 0) {\n setDimensions({ width, height })\n if (!dimensionsReady) {\n setDimensionsReady(true)\n }\n }\n }\n }\n \n // Initialize ResizeObserver immediately\n if (containerRef.current) {\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect\n if (width > 0 && height > 0) {\n setDimensions({ width, height })\n if (!dimensionsReady) {\n setDimensionsReady(true)\n }\n }\n }\n })\n \n resizeObserver.observe(containerRef.current)\n \n // Also try immediate measurement as fallback\n updateDimensions()\n }\n\n // Window resize as additional fallback\n window.addEventListener('resize', updateDimensions)\n \n return () => {\n if (resizeObserver) {\n resizeObserver.disconnect()\n }\n window.removeEventListener('resize', updateDimensions)\n }\n }, [dimensionsReady])\n\n useEffect(() => {\n if (!data || data.length === 0 || !svgRef.current || !dimensionsReady || dimensions.width === 0) {\n return\n }\n\n // Clear previous chart\n select(svgRef.current).selectAll('*').remove()\n\n\n // Validate chartConfig - only new format supported\n if (!chartConfig?.xAxis || !chartConfig?.yAxis || !chartConfig?.series) {\n return\n }\n\n const xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n const yAxisField = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis[0] : chartConfig.yAxis\n const seriesField = Array.isArray(chartConfig.series) ? chartConfig.series[0] : chartConfig.series\n const sizeFieldName = Array.isArray(chartConfig.sizeField) ? chartConfig.sizeField[0] : chartConfig.sizeField || yAxisField\n const colorFieldName = Array.isArray(chartConfig.colorField) ? chartConfig.colorField[0] : chartConfig.colorField\n\n\n if (!xAxisField || !yAxisField || !seriesField || !sizeFieldName) {\n return\n }\n\n // Transform data for bubble chart\n // Null handling: Filter out bubbles where x, y, or size are null\n const xGranularity = getFieldGranularity(queryObject, xAxisField)\n\n // Check if x-axis field is a time dimension\n const isTimeDimension = queryObject?.timeDimensions?.some(\n (td: { dimension: string }) => td.dimension === xAxisField\n ) || false\n\n const bubbleData: BubbleData[] = data\n .map(item => {\n const rawXValue = item[xAxisField]\n let xNum: number\n let xLabel: string\n\n if (isTimeDimension && rawXValue) {\n // For time dimensions, convert to timestamp for proper numeric positioning\n const dateStr = String(rawXValue)\n // Try to parse as date - handle ISO format and PostgreSQL format\n let date: Date\n if (dateStr.match(/^\\d{4}-\\d{2}-\\d{2}[T ]/)) {\n // Full timestamp format\n let isoStr = dateStr\n if (dateStr.includes(' ')) {\n isoStr = dateStr.replace(' ', 'T').replace('+00', 'Z').replace(/\\+\\d{2}:\\d{2}$/, 'Z')\n }\n if (!isoStr.endsWith('Z') && !isoStr.includes('+')) {\n isoStr = isoStr + 'Z'\n }\n date = new Date(isoStr)\n } else {\n date = new Date(dateStr)\n }\n\n xNum = isNaN(date.getTime()) ? parseFloat(dateStr) : date.getTime()\n xLabel = formatTimeValue(rawXValue, xGranularity)\n } else {\n // Non-time value - use as-is\n const formattedValue = formatTimeValue(rawXValue, xGranularity) || rawXValue\n xNum = typeof formattedValue === 'string' ? parseFloat(formattedValue) : formattedValue\n xLabel = String(formattedValue)\n }\n\n const yValue = parseNumericValue(item[yAxisField])\n const sizeValue = parseNumericValue(item[sizeFieldName])\n const seriesValue = item[seriesField]\n\n return {\n x: xNum,\n xLabel, // Store formatted label for tooltip display\n y: yValue as number, // Type assertion: filter below ensures this is never null\n size: sizeValue !== null ? Math.abs(sizeValue) : 0, // Ensure positive size\n color: colorFieldName ? item[colorFieldName] : seriesValue,\n series: seriesValue,\n label: `${seriesValue || 'Unknown'}`,\n isValid: isValidNumericValue(xNum) && yValue !== null && sizeValue !== null && sizeValue > 0\n }\n })\n .filter(d => d.isValid && d.size > 0) // Filter out bubbles with invalid coordinates or no size\n\n if (bubbleData.length === 0) return\n\n const margin = { \n ...CHART_MARGINS, \n left: CHART_MARGINS.left + 30, // Add extra 30px left margin for Y-axis label\n bottom: (safeDisplayConfig.showLegend && colorFieldName) ? 100 : 40 // Add extra space for legend\n }\n const width = dimensions.width - margin.left - margin.right\n const chartHeight = dimensions.height - margin.top - margin.bottom\n\n const svg = select(svgRef.current)\n .attr('width', dimensions.width)\n .attr('height', dimensions.height)\n\n const g = svg.append('g')\n .attr('transform', `translate(${margin.left},${margin.top})`)\n\n // Set up scales\n const xScale = scaleLinear()\n .domain(extent(bubbleData, d => d.x) as [number, number])\n .range([0, width])\n .nice()\n\n const yScale = scaleLinear()\n .domain(extent(bubbleData, d => d.y) as [number, number])\n .range([chartHeight, 0])\n .nice()\n\n const sizeScale = scaleSqrt()\n .domain([0, max(bubbleData, d => d.size) as number])\n .range([safeDisplayConfig.minBubbleSize, safeDisplayConfig.maxBubbleSize])\n\n // Set up color scale\n let colorScale: ScaleOrdinal<string, string> | ScaleQuantize<string>\n let isNumericColorField = false\n let uniqueColors: string[] = []\n \n if (colorFieldName && bubbleData.length > 0) {\n // Check if color field is numeric for color scaling (same logic as TreeMapChart)\n const colorValues = bubbleData.map(item => {\n const value = item.color\n return typeof value === 'string' ? parseFloat(value) : value\n }).filter((val): val is number => !isNaN(val as number))\n \n isNumericColorField = colorValues.length === bubbleData.length && colorValues.every(val => typeof val === 'number')\n \n if (isNumericColorField) {\n // Use D3 quantize scale for better color distribution with small ranges\n const minValue = Math.min(...colorValues)\n const maxValue = Math.max(...colorValues)\n \n // Create D3 quantize color scale - maps continuous data to discrete color bands\n colorScale = scaleQuantize<string>()\n .domain([minValue, maxValue])\n .range(colorPalette?.gradient || CHART_COLORS_GRADIENT)\n } else {\n // Categorical color field - use series colors\n uniqueColors = [...new Set(bubbleData.map(d => String(d.color)))]\n colorScale = scaleOrdinal<string>()\n .domain(uniqueColors)\n .range(colorPalette?.colors || CHART_COLORS)\n }\n } else {\n // Single color for all bubbles\n colorScale = scaleOrdinal<string>()\n .domain(['default'])\n .range([CHART_COLORS[0]])\n }\n\n // Get theme colors from CSS variables\n const getThemeColor = (varName: string, fallback: string) => {\n const value = getComputedStyle(document.documentElement).getPropertyValue(varName).trim()\n return value || fallback\n }\n\n const isDark = theme !== 'light'\n const textColor = isDark\n ? getThemeColor('--dc-text-muted', '#cbd5e1') // Lighter text for dark mode\n : getThemeColor('--dc-text-secondary', '#374151') // Darker text for light mode\n const gridColor = isDark\n ? getThemeColor('--dc-border', '#475569') // Lighter grid for dark mode\n : '#9ca3af' // Much darker gray for light mode visibility\n\n // Add grid\n if (safeDisplayConfig.showGrid) {\n // X-axis grid\n const xGrid = g.append('g')\n .attr('class', 'grid')\n .attr('transform', `translate(0,${chartHeight})`)\n .call(axisBottom(xScale)\n .tickSize(-chartHeight)\n .tickFormat(() => '')\n )\n\n xGrid.selectAll('line')\n .style('stroke', gridColor)\n .style('stroke-dasharray', '3,3')\n .style('opacity', 0.3)\n\n xGrid.select('.domain')\n .style('stroke', 'none')\n\n // Y-axis grid\n const yGrid = g.append('g')\n .attr('class', 'grid')\n .call(axisLeft(yScale)\n .tickSize(-width)\n .tickFormat(() => '')\n )\n\n yGrid.selectAll('line')\n .style('stroke', gridColor)\n .style('stroke-dasharray', '3,3')\n .style('opacity', 0.3)\n\n yGrid.select('.domain')\n .style('stroke', 'none')\n }\n\n // Add X axis with proper time formatting if needed\n const xAxisGenerator = axisBottom(xScale)\n\n // If it's a time dimension, format the tick labels\n if (isTimeDimension) {\n xAxisGenerator.tickFormat((d) => {\n const date = new Date(d as number)\n if (isNaN(date.getTime())) return String(d)\n\n // Format based on granularity\n switch (xGranularity?.toLowerCase()) {\n case 'year':\n return String(date.getUTCFullYear())\n case 'quarter': {\n const q = Math.floor(date.getUTCMonth() / 3) + 1\n return `${date.getUTCFullYear()}-Q${q}`\n }\n case 'month':\n return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}`\n case 'week':\n case 'day':\n return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}-${String(date.getUTCDate()).padStart(2, '0')}`\n case 'hour':\n return `${String(date.getUTCMonth() + 1).padStart(2, '0')}-${String(date.getUTCDate()).padStart(2, '0')} ${String(date.getUTCHours()).padStart(2, '0')}:00`\n default:\n return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}`\n }\n })\n } else if (safeDisplayConfig.xAxisFormat) {\n // Apply custom formatting for non-time X-axis\n xAxisGenerator.tickFormat((d) => formatAxisValue(d as number, safeDisplayConfig.xAxisFormat))\n }\n\n const xAxis = g.append('g')\n .attr('transform', `translate(0,${chartHeight})`)\n .call(xAxisGenerator)\n\n xAxis.selectAll('text')\n .style('fill', textColor)\n\n xAxis.selectAll('line, path')\n .style('stroke', gridColor)\n\n xAxis.append('text')\n .attr('x', width / 2)\n .attr('y', 35)\n .attr('fill', textColor)\n .style('text-anchor', 'middle')\n .style('font-size', '12px')\n .text(safeDisplayConfig.xAxisFormat?.label || getFieldLabel(xAxisField))\n\n // Add Y axis with optional formatting\n const yAxisGenerator = axisLeft(yScale)\n if (safeDisplayConfig.leftYAxisFormat) {\n yAxisGenerator.tickFormat((d) => formatAxisValue(d as number, safeDisplayConfig.leftYAxisFormat))\n }\n const yAxis = g.append('g')\n .call(yAxisGenerator)\n\n yAxis.selectAll('text')\n .style('fill', textColor)\n\n yAxis.selectAll('line, path')\n .style('stroke', gridColor)\n\n yAxis.append('text')\n .attr('transform', 'rotate(-90)')\n .attr('y', -35)\n .attr('x', -chartHeight / 2)\n .attr('fill', textColor)\n .style('text-anchor', 'middle')\n .style('font-size', '12px')\n .text(safeDisplayConfig.leftYAxisFormat?.label || getFieldLabel(yAxisField))\n\n // Create tooltip\n const tooltip = select('body').append('div')\n .attr('class', 'bubble-chart-tooltip')\n .style('position', 'absolute')\n .style('padding', '8px')\n .style('background', 'rgba(0, 0, 0, 0.8)')\n .style('color', 'white')\n .style('border-radius', '4px')\n .style('font-size', '12px')\n .style('pointer-events', 'none')\n .style('opacity', 0)\n .style('z-index', 1000)\n\n // Add bubbles\n const bubbles = g.selectAll('.bubble')\n .data(bubbleData)\n .enter().append('circle')\n .attr('class', 'bubble')\n .attr('cx', d => xScale(d.x))\n .attr('cy', d => yScale(d.y))\n .attr('r', d => sizeScale(d.size))\n .style('fill', d => {\n if (colorFieldName && d.color !== undefined) {\n return isNumericColorField\n ? (colorScale as ScaleQuantize<string>)(d.color as number)\n : (colorScale as ScaleOrdinal<string, string>)(String(d.color))\n }\n return CHART_COLORS[0]\n })\n .style('opacity', safeDisplayConfig.bubbleOpacity)\n .style('stroke', '#fff')\n .style('stroke-width', 1)\n .style('cursor', 'pointer')\n\n // Add hover effects\n if (safeDisplayConfig.showTooltip) {\n bubbles\n .on('mouseover', function(event, d) {\n select(this)\n .transition()\n .duration(200)\n .style('opacity', 1)\n .attr('r', sizeScale(d.size) * 1.1)\n\n const tooltipContent = [\n `<strong>${d.series || 'Unknown'}</strong>`,\n `${getFieldLabel(xAxisField)}: ${d.xLabel || (safeDisplayConfig.xAxisFormat ? formatAxisValue(d.x, safeDisplayConfig.xAxisFormat) : d.x)}`,\n `${getFieldLabel(yAxisField)}: ${safeDisplayConfig.leftYAxisFormat ? formatAxisValue(d.y, safeDisplayConfig.leftYAxisFormat) : d.y}`,\n `${getFieldLabel(sizeFieldName)}: ${safeDisplayConfig.leftYAxisFormat ? formatAxisValue(d.size, safeDisplayConfig.leftYAxisFormat) : d.size}`,\n colorFieldName && d.color ? `${getFieldLabel(colorFieldName)}: ${d.color}` : ''\n ].filter(Boolean).join('<br>')\n\n tooltip\n .html(tooltipContent)\n .style('left', (event.pageX + 10) + 'px')\n .style('top', (event.pageY - 10) + 'px')\n .transition()\n .duration(200)\n .style('opacity', 1)\n })\n .on('mousemove', function(event) {\n tooltip\n .style('left', (event.pageX + 10) + 'px')\n .style('top', (event.pageY - 10) + 'px')\n })\n .on('mouseout', function(_event, d) {\n select(this)\n .transition()\n .duration(200)\n .style('opacity', safeDisplayConfig.bubbleOpacity)\n .attr('r', sizeScale(d.size))\n\n tooltip\n .transition()\n .duration(200)\n .style('opacity', 0)\n })\n }\n\n // Add legend if needed\n if (safeDisplayConfig.showLegend && colorFieldName) {\n if (isNumericColorField) {\n // Create gradient legend for numeric color field\n const legendWidth = 200\n const legendHeight = 20\n const minValue = Math.min(...bubbleData.map(d => d.color as number))\n const maxValue = Math.max(...bubbleData.map(d => d.color as number))\n \n const legend = g.append('g')\n .attr('class', 'color-legend')\n .attr('transform', `translate(${width / 2 - legendWidth / 2}, ${chartHeight + 60})`)\n\n // Create gradient definition\n const defs = svg.append('defs')\n const gradient = defs.append('linearGradient')\n .attr('id', 'color-scale-gradient')\n .attr('x1', '0%')\n .attr('y1', '0%')\n .attr('x2', '100%')\n .attr('y2', '0%')\n\n // Add color stops for the gradient\n const gradientColors = colorPalette?.gradient || CHART_COLORS_GRADIENT\n gradientColors.forEach((color, i) => {\n gradient.append('stop')\n .attr('offset', `${(i / (gradientColors.length - 1)) * 100}%`)\n .attr('stop-color', color)\n })\n\n // Add the gradient rectangle\n legend.append('rect')\n .attr('width', legendWidth)\n .attr('height', legendHeight)\n .style('fill', 'url(#color-scale-gradient)')\n .style('stroke', '#ccc')\n .style('stroke-width', 1)\n\n // Add min value label\n legend.append('text')\n .attr('x', 0)\n .attr('y', legendHeight + 15)\n .attr('text-anchor', 'start')\n .style('font-size', '11px')\n .style('fill', textColor)\n .text(safeDisplayConfig.leftYAxisFormat ? formatAxisValue(minValue, safeDisplayConfig.leftYAxisFormat) : minValue.toFixed(2))\n\n // Add max value label\n legend.append('text')\n .attr('x', legendWidth)\n .attr('y', legendHeight + 15)\n .attr('text-anchor', 'end')\n .style('font-size', '11px')\n .style('fill', textColor)\n .text(safeDisplayConfig.leftYAxisFormat ? formatAxisValue(maxValue, safeDisplayConfig.leftYAxisFormat) : maxValue.toFixed(2))\n\n // Add field name label\n legend.append('text')\n .attr('x', legendWidth / 2)\n .attr('y', -5)\n .attr('text-anchor', 'middle')\n .style('font-size', '12px')\n .style('font-weight', 'bold')\n .style('fill', textColor)\n .text(getFieldLabel(colorFieldName))\n\n } else {\n // Original categorical legend\n const legendItems = uniqueColors\n\n if (legendItems.length > 0) {\n const legend = g.append('g')\n .attr('class', 'legend')\n .attr('transform', `translate(${width / 2 - (legendItems.length * 80) / 2}, ${chartHeight + 60})`)\n\n const legendItem = legend.selectAll('.legend-item')\n .data(legendItems)\n .enter().append('g')\n .attr('class', 'legend-item')\n .attr('transform', (_d, i) => `translate(${i * 80}, 0)`)\n .style('cursor', 'pointer')\n\n legendItem.append('circle')\n .attr('cx', 5)\n .attr('cy', 5)\n .attr('r', 5)\n .style('fill', d => (colorScale as ScaleOrdinal<string, string>)(d as string))\n .style('opacity', safeDisplayConfig.bubbleOpacity)\n\n legendItem.append('text')\n .attr('x', 15)\n .attr('y', 5)\n .attr('dy', '.35em')\n .style('font-size', '11px')\n .style('fill', textColor)\n .text(d => String(d))\n\n // Legend hover effects\n legendItem\n .on('mouseover', function(_event, legendKey) {\n // Highlight matching bubbles\n bubbles\n .transition()\n .duration(200)\n .style('opacity', d => {\n const matches = colorFieldName && String(d.color) === legendKey\n return matches ? 1 : 0.2\n })\n })\n .on('mouseout', function() {\n // Reset all bubbles\n bubbles\n .transition()\n .duration(200)\n .style('opacity', safeDisplayConfig.bubbleOpacity)\n })\n }\n }\n }\n\n // Cleanup function\n return () => {\n tooltip.remove()\n }\n }, [data, chartConfig, safeDisplayConfig, queryObject, dimensions, dimensionsReady, colorPalette, theme, getFieldLabel])\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\">{t('chart.runtime.noData')}</div>\n <div className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.noDataHint.bubble')}</div>\n </div>\n </div>\n )\n }\n\n // Validate that we have required fields\n const hasValidConfig = chartConfig?.xAxis && chartConfig?.yAxis && chartConfig?.series\n if (!hasValidConfig) {\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\">{t('chart.runtime.activityGridConfigRequired')}</div>\n <div className=\"dc:text-xs\">{t('chart.runtime.configErrorHint.bubbleRequired')}</div>\n <div className=\"dc:text-xs dc:mt-1\">{t('chart.runtime.configErrorHint.bubbleOptional')}</div>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"dc:w-full dc:flex-1 dc:flex dc:flex-col dc:relative\" style={{ height, minHeight: '250px', overflow: 'hidden' }}>\n <div ref={containerRef} className=\"dc:w-full dc:h-full dc:relative\">\n <svg ref={svgRef} className=\"dc:w-full dc:h-full\" />\n {!dimensionsReady && (\n <div className=\"dc:absolute dc:inset-0 dc:flex dc:items-center dc:justify-center\">\n <div className=\"text-dc-text-muted dc:text-sm\">{t('chart.runtime.measuringDimensions')}</div>\n </div>\n )}\n </div>\n </div>\n )\n})\n\nexport default BubbleChart"],"mappings":"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"}