drizzle-cube 0.10.0 → 0.10.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 (266) hide show
  1. package/dist/adapters/ActivityGridChart.config-BpGv0FYq.js +2 -0
  2. package/dist/adapters/ActivityGridChart.config-DWs9dRl7.cjs +1 -0
  3. package/dist/adapters/AreaChart.config-Cn8nAQqj.cjs +1 -0
  4. package/dist/adapters/AreaChart.config-NDMkAi9w.js +2 -0
  5. package/dist/adapters/BarChart.config-CuGCupRX.cjs +1 -0
  6. package/dist/adapters/BarChart.config-D4Ct_ZuS.js +2 -0
  7. package/dist/adapters/BoxPlotChart.config-BEHZDgrz.js +2 -0
  8. package/dist/adapters/BoxPlotChart.config-DnC3xk7q.cjs +1 -0
  9. package/dist/adapters/BubbleChart.config-D0ouKOKS.cjs +1 -0
  10. package/dist/adapters/BubbleChart.config-Du8aEfdQ.js +2 -0
  11. package/dist/adapters/CandlestickChart.config-B0B6dKYG.cjs +1 -0
  12. package/dist/adapters/CandlestickChart.config-DBilZaFc.js +2 -0
  13. package/dist/adapters/DataTable.config-BXalzUPO.cjs +1 -0
  14. package/dist/adapters/DataTable.config-CF8BzQHu.js +2 -0
  15. package/dist/adapters/DotStripChart.config-0ggseDij.cjs +1 -0
  16. package/dist/adapters/DotStripChart.config-CfHh0XSW.js +2 -0
  17. package/dist/adapters/FunnelChart.config-AcSpen_Q.js +2 -0
  18. package/dist/adapters/FunnelChart.config-D6k89qDc.cjs +1 -0
  19. package/dist/adapters/GaugeChart.config-B5BcrEvW.cjs +1 -0
  20. package/dist/adapters/GaugeChart.config-BChbha74.js +2 -0
  21. package/dist/adapters/HeatMapChart.config-BgkP8kiW.js +2 -0
  22. package/dist/adapters/HeatMapChart.config-Crq7vBwj.cjs +1 -0
  23. package/dist/adapters/KpiDelta.config-Cqu1WOkV.js +2 -0
  24. package/dist/adapters/KpiDelta.config-edWLG1bM.cjs +1 -0
  25. package/dist/adapters/KpiNumber.config-BLkE67us.cjs +1 -0
  26. package/dist/adapters/KpiNumber.config-DNsH72Rs.js +2 -0
  27. package/dist/adapters/KpiText.config-CAnLZYht.cjs +1 -0
  28. package/dist/adapters/KpiText.config-CQGd10Hj.js +2 -0
  29. package/dist/adapters/LineChart.config-C7l_xff-.js +2 -0
  30. package/dist/adapters/LineChart.config-DOxwtnfG.cjs +1 -0
  31. package/dist/adapters/MarkdownChart.config-BV5j1oJl.cjs +1 -0
  32. package/dist/adapters/MarkdownChart.config-CBkJAEpW.js +2 -0
  33. package/dist/adapters/MeasureProfileChart.config-CyyFz-x_.cjs +1 -0
  34. package/dist/adapters/MeasureProfileChart.config-VIvr7lq6.js +2 -0
  35. package/dist/adapters/PieChart.config-BP8OlSJ4.js +2 -0
  36. package/dist/adapters/PieChart.config-BaMxIlBa.cjs +1 -0
  37. package/dist/adapters/ProportionBarChart.config-CtZaP8Xn.js +2 -0
  38. package/dist/adapters/ProportionBarChart.config-DAyEQ8Pn.cjs +1 -0
  39. package/dist/adapters/RadarChart.config-CG07QZUT.cjs +1 -0
  40. package/dist/adapters/RadarChart.config-DJJuD-Tb.js +2 -0
  41. package/dist/adapters/RadialBarChart.config-BNgzWkot.cjs +1 -0
  42. package/dist/adapters/RadialBarChart.config-DVM_jg9B.js +2 -0
  43. package/dist/adapters/RecordsTable.config-BEQmKQ-S.cjs +1 -0
  44. package/dist/adapters/RecordsTable.config-d4s8HV9m.js +2 -0
  45. package/dist/adapters/RetentionCombinedChart.config-DJ4N-ffd.cjs +1 -0
  46. package/dist/adapters/RetentionCombinedChart.config-DV1h3rW2.js +2 -0
  47. package/dist/adapters/RetentionHeatmap.config-CIJDenRg.cjs +1 -0
  48. package/dist/adapters/RetentionHeatmap.config-P3VVn3QJ.js +2 -0
  49. package/dist/adapters/SankeyChart.config-CQ89DYf7.cjs +1 -0
  50. package/dist/adapters/SankeyChart.config-CfMmdmXJ.js +2 -0
  51. package/dist/adapters/ScatterChart.config-C4zrFpF-.cjs +1 -0
  52. package/dist/adapters/ScatterChart.config-DaJ3LVWH.js +2 -0
  53. package/dist/adapters/SunburstChart.config-1ZRhfGr0.cjs +1 -0
  54. package/dist/adapters/SunburstChart.config-DHgrSIkQ.js +2 -0
  55. package/dist/adapters/TreeMapChart.config-Cy3sAsJP.js +2 -0
  56. package/dist/adapters/TreeMapChart.config-D365WWEK.cjs +1 -0
  57. package/dist/adapters/WaterfallChart.config-DYEf1vQT.js +2 -0
  58. package/dist/adapters/WaterfallChart.config-s8pICbm8.cjs +1 -0
  59. package/dist/adapters/{compiler-BKg3j2mm.js → compiler-C8fOs43d.js} +1116 -1089
  60. package/dist/adapters/compiler-Dw5tYox7.cjs +166 -0
  61. package/dist/adapters/core/index.cjs +1 -1
  62. package/dist/adapters/core/index.js +1 -1
  63. package/dist/adapters/{core-JgUTMhxl.cjs → core-BP6GiYzO.cjs} +1 -1
  64. package/dist/adapters/{core-Bmb7XMBz.js → core-z6vXJ8nF.js} +2 -2
  65. package/dist/adapters/express/index.cjs +1 -1
  66. package/dist/adapters/express/index.js +5 -5
  67. package/dist/adapters/fastify/index.cjs +1 -1
  68. package/dist/adapters/fastify/index.js +23 -23
  69. package/dist/adapters/{handler-CfZt5W8b.cjs → handler-B78akmC_.cjs} +4 -4
  70. package/dist/adapters/{handler-B1_zd-qo.js → handler-CI3Rt-Zt.js} +33 -32
  71. package/dist/adapters/hono/index.cjs +1 -1
  72. package/dist/adapters/hono/index.js +4 -4
  73. package/dist/adapters/mcp-app-html-C1fEW5oE.js +5 -0
  74. package/dist/adapters/mcp-app-html-CGk4ubE0.cjs +1 -0
  75. package/dist/adapters/mcp-app-html.cjs +1 -1
  76. package/dist/adapters/mcp-app-html.js +1 -1
  77. package/dist/adapters/mcp-tools.cjs +1 -1
  78. package/dist/adapters/mcp-tools.js +3 -3
  79. package/dist/adapters/{mcp-transport-DzxluRyH.cjs → mcp-transport-Bc7-KSG_.cjs} +1 -1
  80. package/dist/adapters/{mcp-transport-BTmAXLo8.js → mcp-transport-DpS_e0gL.js} +1 -1
  81. package/dist/adapters/nextjs/index.cjs +1 -1
  82. package/dist/adapters/nextjs/index.js +5 -5
  83. package/dist/adapters/{openai-Br__Bn2t.cjs → openai-7064EJ1j.cjs} +2 -2
  84. package/dist/adapters/{openai-C32tey5N.cjs → openai-B0mByiYQ.cjs} +1 -1
  85. package/dist/adapters/{openai-BpcMIv4e.js → openai-CnUBYFyY.js} +1 -1
  86. package/dist/adapters/{openai-yfJF-3Rv.js → openai-DpGdZL3m.js} +3 -3
  87. package/dist/adapters/{utils-i2h5cwI3.js → utils-CN_bxSiq.js} +1064 -936
  88. package/dist/adapters/utils-CvC1czqb.cjs +141 -0
  89. package/dist/adapters/utils.cjs +1 -1
  90. package/dist/adapters/utils.js +1 -1
  91. package/dist/cjs/client/components/DashboardFilters/useCompactFilterBar.d.ts +5 -0
  92. package/dist/cjs/client/components/dashboardPortletCard/PortletCardHeader.d.ts +2 -0
  93. package/dist/cjs/client/utils/filterUtils.d.ts +30 -0
  94. package/dist/cjs/client/utils/joinReachability.d.ts +1 -0
  95. package/dist/cjs/server/ai/query-schema.d.ts +7 -2
  96. package/dist/cjs/server/builders/date-time-builder.d.ts +1 -1
  97. package/dist/cjs/server/builders/date-time-helpers.d.ts +2 -0
  98. package/dist/cjs/server/builders/filter-builder.d.ts +1 -1
  99. package/dist/cjs/server/builders/in-date-range-validation.d.ts +25 -0
  100. package/dist/client/charts.js +12 -12
  101. package/dist/client/chunks/{DashboardEditModal-P-HUNrcp.js → DashboardEditModal-5ZSP--FQ.js} +1039 -986
  102. package/dist/client/chunks/DashboardEditModal-5ZSP--FQ.js.map +1 -0
  103. package/dist/client/chunks/{DotStripChart-in6QHc0b.js → DotStripChart-DTukhwG-.js} +3 -3
  104. package/dist/client/chunks/{DotStripChart-in6QHc0b.js.map → DotStripChart-DTukhwG-.js.map} +1 -1
  105. package/dist/client/chunks/{ProportionBarChart-CjuOm7NT.js → ProportionBarChart-CPZ2cHxH.js} +3 -3
  106. package/dist/client/chunks/{ProportionBarChart-CjuOm7NT.js.map → ProportionBarChart-CPZ2cHxH.js.map} +1 -1
  107. package/dist/client/chunks/{RecordsTable-CXXsiaV1.js → RecordsTable-BC5l67Dc.js} +4 -4
  108. package/dist/client/chunks/{RecordsTable-CXXsiaV1.js.map → RecordsTable-BC5l67Dc.js.map} +1 -1
  109. package/dist/client/chunks/{RetentionCombinedChart-DFCeEFkx.js → RetentionCombinedChart-aj5xblfu.js} +3 -3
  110. package/dist/client/chunks/{RetentionCombinedChart-DFCeEFkx.js.map → RetentionCombinedChart-aj5xblfu.js.map} +1 -1
  111. package/dist/client/chunks/{RetentionHeatmap-jpshJ2Af.js → RetentionHeatmap-CKckuEMF.js} +2 -2
  112. package/dist/client/chunks/{RetentionHeatmap-jpshJ2Af.js.map → RetentionHeatmap-CKckuEMF.js.map} +1 -1
  113. package/dist/client/chunks/{af-ZA-C0dGb_53.js → af-ZA-BglLInx4.js} +13 -1
  114. package/dist/client/chunks/{af-ZA-C0dGb_53.js.map → af-ZA-BglLInx4.js.map} +1 -1
  115. package/dist/client/chunks/{analysis-builder-CRghdHVl.js → analysis-builder-Db4umQtd.js} +9 -9
  116. package/dist/client/chunks/{analysis-builder-CRghdHVl.js.map → analysis-builder-Db4umQtd.js.map} +1 -1
  117. package/dist/client/chunks/{analysis-builder-shared-DBSxWIj8.js → analysis-builder-shared-BEvvX6ln.js} +9 -9
  118. package/dist/client/chunks/{analysis-builder-shared-DBSxWIj8.js.map → analysis-builder-shared-BEvvX6ln.js.map} +1 -1
  119. package/dist/client/chunks/{chart-activity-grid-DGazwi4C.js → chart-activity-grid-Bbc58UJD.js} +17 -4
  120. package/dist/client/chunks/chart-activity-grid-Bbc58UJD.js.map +1 -0
  121. package/dist/client/chunks/{chart-area-zyLGD-ym.js → chart-area-9uCXIvMN.js} +2 -2
  122. package/dist/client/chunks/{chart-area-zyLGD-ym.js.map → chart-area-9uCXIvMN.js.map} +1 -1
  123. package/dist/client/chunks/{chart-bar-DMCBq8qJ.js → chart-bar-C5a1T9Ce.js} +3 -3
  124. package/dist/client/chunks/{chart-bar-DMCBq8qJ.js.map → chart-bar-C5a1T9Ce.js.map} +1 -1
  125. package/dist/client/chunks/{chart-box-plot-5Z55A-it.js → chart-box-plot-BbBrZsaJ.js} +2 -2
  126. package/dist/client/chunks/{chart-box-plot-5Z55A-it.js.map → chart-box-plot-BbBrZsaJ.js.map} +1 -1
  127. package/dist/client/chunks/{chart-bubble-YD28dX8w.js → chart-bubble-dt5ESb7m.js} +2 -2
  128. package/dist/client/chunks/{chart-bubble-YD28dX8w.js.map → chart-bubble-dt5ESb7m.js.map} +1 -1
  129. package/dist/client/chunks/{chart-candlestick-BUMpBI08.js → chart-candlestick-2A2J_NsK.js} +2 -2
  130. package/dist/client/chunks/{chart-candlestick-BUMpBI08.js.map → chart-candlestick-2A2J_NsK.js.map} +1 -1
  131. package/dist/client/chunks/{chart-data-table-BdMo3zVh.js → chart-data-table-zSjYEy0r.js} +2 -2
  132. package/dist/client/chunks/{chart-data-table-BdMo3zVh.js.map → chart-data-table-zSjYEy0r.js.map} +1 -1
  133. package/dist/client/chunks/{chart-funnel-BRyZS6ie.js → chart-funnel-CuOSCsbt.js} +2 -2
  134. package/dist/client/chunks/{chart-funnel-BRyZS6ie.js.map → chart-funnel-CuOSCsbt.js.map} +1 -1
  135. package/dist/client/chunks/{chart-gauge-DxgHlZKp.js → chart-gauge-DxKeqCCD.js} +3 -3
  136. package/dist/client/chunks/{chart-gauge-DxgHlZKp.js.map → chart-gauge-DxKeqCCD.js.map} +1 -1
  137. package/dist/client/chunks/{chart-heat-map-5jHm3f-V.js → chart-heat-map-C1dvW-ov.js} +3 -3
  138. package/dist/client/chunks/{chart-heat-map-5jHm3f-V.js.map → chart-heat-map-C1dvW-ov.js.map} +1 -1
  139. package/dist/client/chunks/{chart-kpi-delta-C84P-mwu.js → chart-kpi-delta-CgehGc9d.js} +3 -3
  140. package/dist/client/chunks/{chart-kpi-delta-C84P-mwu.js.map → chart-kpi-delta-CgehGc9d.js.map} +1 -1
  141. package/dist/client/chunks/{chart-kpi-number-D9GqtBWw.js → chart-kpi-number-C31-6A6m.js} +5 -5
  142. package/dist/client/chunks/{chart-kpi-number-D9GqtBWw.js.map → chart-kpi-number-C31-6A6m.js.map} +1 -1
  143. package/dist/client/chunks/{chart-kpi-text-D3HqxXzU.js → chart-kpi-text-D2ydQIEn.js} +3 -3
  144. package/dist/client/chunks/{chart-kpi-text-D3HqxXzU.js.map → chart-kpi-text-D2ydQIEn.js.map} +1 -1
  145. package/dist/client/chunks/{chart-line-IEgiF8Nv.js → chart-line-CjW9Yo03.js} +3 -3
  146. package/dist/client/chunks/{chart-line-IEgiF8Nv.js.map → chart-line-CjW9Yo03.js.map} +1 -1
  147. package/dist/client/chunks/{chart-markdown-B_2Ed7FJ.js → chart-markdown-Cgs62had.js} +2 -2
  148. package/dist/client/chunks/{chart-markdown-B_2Ed7FJ.js.map → chart-markdown-Cgs62had.js.map} +1 -1
  149. package/dist/client/chunks/{chart-measure-profile-CWsPrQhH.js → chart-measure-profile-Cg39gYjR.js} +3 -3
  150. package/dist/client/chunks/{chart-measure-profile-CWsPrQhH.js.map → chart-measure-profile-Cg39gYjR.js.map} +1 -1
  151. package/dist/client/chunks/{chart-pie-BEB2sCXF.js → chart-pie-BTb5nKd7.js} +3 -3
  152. package/dist/client/chunks/{chart-pie-BEB2sCXF.js.map → chart-pie-BTb5nKd7.js.map} +1 -1
  153. package/dist/client/chunks/{chart-radar-BbSbXKbP.js → chart-radar-8384sPlX.js} +3 -3
  154. package/dist/client/chunks/{chart-radar-BbSbXKbP.js.map → chart-radar-8384sPlX.js.map} +1 -1
  155. package/dist/client/chunks/{chart-radial-bar-CNYD7tkM.js → chart-radial-bar-CuBmmOTU.js} +3 -3
  156. package/dist/client/chunks/{chart-radial-bar-CNYD7tkM.js.map → chart-radial-bar-CuBmmOTU.js.map} +1 -1
  157. package/dist/client/chunks/{chart-sankey-DKnTIvSr.js → chart-sankey-CoIuG7Nu.js} +2 -2
  158. package/dist/client/chunks/{chart-sankey-DKnTIvSr.js.map → chart-sankey-CoIuG7Nu.js.map} +1 -1
  159. package/dist/client/chunks/{chart-scatter-CSWF6-lx.js → chart-scatter-Bdj95OeV.js} +3 -3
  160. package/dist/client/chunks/{chart-scatter-CSWF6-lx.js.map → chart-scatter-Bdj95OeV.js.map} +1 -1
  161. package/dist/client/chunks/{chart-sunburst-CdGzCq7q.js → chart-sunburst-CuG8520_.js} +3 -3
  162. package/dist/client/chunks/{chart-sunburst-CdGzCq7q.js.map → chart-sunburst-CuG8520_.js.map} +1 -1
  163. package/dist/client/chunks/{chart-tree-map-BiXB7EiM.js → chart-tree-map-CtJADX87.js} +3 -3
  164. package/dist/client/chunks/{chart-tree-map-BiXB7EiM.js.map → chart-tree-map-CtJADX87.js.map} +1 -1
  165. package/dist/client/chunks/{chart-waterfall-5rSDeLEZ.js → chart-waterfall-D430fO48.js} +3 -3
  166. package/dist/client/chunks/{chart-waterfall-5rSDeLEZ.js.map → chart-waterfall-D430fO48.js.map} +1 -1
  167. package/dist/client/chunks/{charts-core-CKpkoMCa.js → charts-core-BSmlKmf0.js} +2 -2
  168. package/dist/client/chunks/{charts-core-CKpkoMCa.js.map → charts-core-BSmlKmf0.js.map} +1 -1
  169. package/dist/client/chunks/charts-loader-Bz9yHkW1.js +87 -0
  170. package/dist/client/chunks/{charts-loader-BTI0UPK4.js.map → charts-loader-Bz9yHkW1.js.map} +1 -1
  171. package/dist/client/chunks/{nl-NL-kRjxedTf.js → nl-NL-BrqrWoAj.js} +15 -2
  172. package/dist/client/chunks/{nl-NL-kRjxedTf.js.map → nl-NL-BrqrWoAj.js.map} +1 -1
  173. package/dist/client/chunks/{schema-visualization-BbvL74Sf.js → schema-visualization-D2NvjQny.js} +3 -3
  174. package/dist/client/chunks/{schema-visualization-BbvL74Sf.js.map → schema-visualization-D2NvjQny.js.map} +1 -1
  175. package/dist/client/chunks/{useDirtyStateTracking-BfG1lX_3.js → useDirtyStateTracking-DL_AnCWZ.js} +4 -4
  176. package/dist/client/chunks/{useDirtyStateTracking-BfG1lX_3.js.map → useDirtyStateTracking-DL_AnCWZ.js.map} +1 -1
  177. package/dist/client/chunks/{useExplainAI-CDFhgmpE.js → useExplainAI-CdPWtj7E.js} +4 -4
  178. package/dist/client/chunks/{useExplainAI-CDFhgmpE.js.map → useExplainAI-CdPWtj7E.js.map} +1 -1
  179. package/dist/client/chunks/{vendor-DeckzF1j.js → vendor-Bpaolt6h.js} +2 -2
  180. package/dist/client/chunks/{vendor-DeckzF1j.js.map → vendor-Bpaolt6h.js.map} +1 -1
  181. package/dist/client/components/DashboardFilters/useCompactFilterBar.d.ts +5 -0
  182. package/dist/client/components/dashboardPortletCard/PortletCardHeader.d.ts +2 -0
  183. package/dist/client/components.js +1 -1
  184. package/dist/client/hooks.js +3 -3
  185. package/dist/client/icons.js +1 -1
  186. package/dist/client/index.js +13 -13
  187. package/dist/client/providers.js +1 -1
  188. package/dist/client/schema.js +1 -1
  189. package/dist/client/utils/filterUtils.d.ts +30 -0
  190. package/dist/client/utils/joinReachability.d.ts +1 -0
  191. package/dist/client/utils.js +4 -4
  192. package/dist/client-bundle-stats.html +1 -1
  193. package/dist/mcp-app/mcp-app.html +2 -2
  194. package/dist/server/ai/query-schema.d.ts +7 -2
  195. package/dist/server/builders/date-time-builder.d.ts +1 -1
  196. package/dist/server/builders/date-time-helpers.d.ts +2 -0
  197. package/dist/server/builders/filter-builder.d.ts +1 -1
  198. package/dist/server/builders/in-date-range-validation.d.ts +25 -0
  199. package/dist/server/index.cjs +47 -45
  200. package/dist/server/index.js +2158 -2018
  201. package/package.json +2 -1
  202. package/dist/adapters/ActivityGridChart.config-BW77mjsu.cjs +0 -1
  203. package/dist/adapters/ActivityGridChart.config-DQRnTU6e.js +0 -2
  204. package/dist/adapters/AreaChart.config-DbvLVr-Y.cjs +0 -1
  205. package/dist/adapters/AreaChart.config-JbVNmary.js +0 -2
  206. package/dist/adapters/BarChart.config-Bkpwgqbk.js +0 -2
  207. package/dist/adapters/BarChart.config-jgDE3NUv.cjs +0 -1
  208. package/dist/adapters/BoxPlotChart.config-9wKKOZfN.cjs +0 -1
  209. package/dist/adapters/BoxPlotChart.config-Di99sPNJ.js +0 -2
  210. package/dist/adapters/BubbleChart.config-Cdg9nPFz.js +0 -2
  211. package/dist/adapters/BubbleChart.config-CwDXzdxC.cjs +0 -1
  212. package/dist/adapters/CandlestickChart.config-B45GmJYV.js +0 -2
  213. package/dist/adapters/CandlestickChart.config-C8BXzmbD.cjs +0 -1
  214. package/dist/adapters/DataTable.config-c-24M_qU.cjs +0 -1
  215. package/dist/adapters/DataTable.config-fic2OroS.js +0 -2
  216. package/dist/adapters/DotStripChart.config-BcNT3Les.cjs +0 -1
  217. package/dist/adapters/DotStripChart.config-Cqmgw5_z.js +0 -2
  218. package/dist/adapters/FunnelChart.config-D1E5zSay.cjs +0 -1
  219. package/dist/adapters/FunnelChart.config-DPjSoYex.js +0 -2
  220. package/dist/adapters/GaugeChart.config-BDcvnYln.js +0 -2
  221. package/dist/adapters/GaugeChart.config-DQnx37Jf.cjs +0 -1
  222. package/dist/adapters/HeatMapChart.config-BWd863ik.js +0 -2
  223. package/dist/adapters/HeatMapChart.config-HEbSm_Zt.cjs +0 -1
  224. package/dist/adapters/KpiDelta.config-Bj3kfmWv.js +0 -2
  225. package/dist/adapters/KpiDelta.config-CaLnl2w_.cjs +0 -1
  226. package/dist/adapters/KpiNumber.config-Da9HxGT8.cjs +0 -1
  227. package/dist/adapters/KpiNumber.config-n4SwHHlD.js +0 -2
  228. package/dist/adapters/KpiText.config-8VzcnlPF.cjs +0 -1
  229. package/dist/adapters/KpiText.config-CItv_gG6.js +0 -2
  230. package/dist/adapters/LineChart.config-DQ7nHYrr.js +0 -2
  231. package/dist/adapters/LineChart.config-_98RmRA_.cjs +0 -1
  232. package/dist/adapters/MarkdownChart.config-BpbqJDoz.cjs +0 -1
  233. package/dist/adapters/MarkdownChart.config-Dz7KZ621.js +0 -2
  234. package/dist/adapters/MeasureProfileChart.config-BTCTP7L0.js +0 -2
  235. package/dist/adapters/MeasureProfileChart.config-DzPxIxB5.cjs +0 -1
  236. package/dist/adapters/PieChart.config-BhjlnVFv.js +0 -2
  237. package/dist/adapters/PieChart.config-DJlGNsBY.cjs +0 -1
  238. package/dist/adapters/ProportionBarChart.config-Byp_8diR.cjs +0 -1
  239. package/dist/adapters/ProportionBarChart.config-RyjNhw3T.js +0 -2
  240. package/dist/adapters/RadarChart.config-BWdv4uyp.js +0 -2
  241. package/dist/adapters/RadarChart.config-kW4oIVi4.cjs +0 -1
  242. package/dist/adapters/RadialBarChart.config-CFYPoRQY.cjs +0 -1
  243. package/dist/adapters/RadialBarChart.config-D2-_-Z64.js +0 -2
  244. package/dist/adapters/RecordsTable.config-B7KFt3kd.cjs +0 -1
  245. package/dist/adapters/RecordsTable.config-S_aiXGKe.js +0 -2
  246. package/dist/adapters/RetentionCombinedChart.config-CVGWozL3.js +0 -2
  247. package/dist/adapters/RetentionCombinedChart.config-Cd0pTdHY.cjs +0 -1
  248. package/dist/adapters/RetentionHeatmap.config-BNqtWFjQ.js +0 -2
  249. package/dist/adapters/RetentionHeatmap.config-CMi1h_5M.cjs +0 -1
  250. package/dist/adapters/SankeyChart.config-COIfx3Ua.cjs +0 -1
  251. package/dist/adapters/SankeyChart.config-DIh4nEk2.js +0 -2
  252. package/dist/adapters/ScatterChart.config-CrSQhlT4.js +0 -2
  253. package/dist/adapters/ScatterChart.config-DRgg-HAm.cjs +0 -1
  254. package/dist/adapters/SunburstChart.config-08-ufQaK.cjs +0 -1
  255. package/dist/adapters/SunburstChart.config-DmNgAJrO.js +0 -2
  256. package/dist/adapters/TreeMapChart.config-7k2repRB.cjs +0 -1
  257. package/dist/adapters/TreeMapChart.config-C3vzB2dD.js +0 -2
  258. package/dist/adapters/WaterfallChart.config-AV2pHgrb.js +0 -2
  259. package/dist/adapters/WaterfallChart.config-USpcvapo.cjs +0 -1
  260. package/dist/adapters/compiler-BX6Ug_Uq.cjs +0 -166
  261. package/dist/adapters/mcp-app-html-BNg78ecJ.js +0 -5
  262. package/dist/adapters/mcp-app-html-N18EJEvv.cjs +0 -1
  263. package/dist/adapters/utils-Du_UZbn5.cjs +0 -139
  264. package/dist/client/chunks/DashboardEditModal-P-HUNrcp.js.map +0 -1
  265. package/dist/client/chunks/chart-activity-grid-DGazwi4C.js.map +0 -1
  266. package/dist/client/chunks/charts-loader-BTI0UPK4.js +0 -87
@@ -1 +1 @@
1
- {"version":3,"file":"charts-core-CKpkoMCa.js","names":["useTranslation","getCurrencyCodeForLocale","formatAxisValue","SectionHeading","className","getLocaleCurrencySymbol","locale","AxisFormatControls","config","useMemo","value","currencySymbol","preview","previewValue","handleChange","updates","unitButtons","t","axisLabel","btn","current"],"sources":["../../../src/client/components/AnalysisBuilder/SectionHeading.tsx","../../../src/client/components/charts/AxisFormatControls.tsx"],"sourcesContent":["/**\n * SectionHeading Component\n *\n * A reusable section heading for the Analysis Builder panels.\n * Provides consistent styling that can be easily adjusted in one place.\n */\n\nimport type { ReactNode } from 'react'\n\ninterface SectionHeadingProps {\n children: ReactNode\n /** Optional className to add additional styles */\n className?: string\n}\n\n/**\n * Consistent section heading style for Analysis Builder panels.\n * Change the styles here to update all section headings at once.\n */\nexport default function SectionHeading({ children, className = '' }: SectionHeadingProps) {\n return (\n <h3 className={`dc:text-sm dc:font-semibold text-dc-primary dc:uppercase dc:tracking-wide ${className}`}>\n {children}\n </h3>\n )\n}\n","/**\n * AxisFormatControls Component\n *\n * A reusable component for configuring axis number formatting.\n * Provides controls for unit type, abbreviation, decimal places, and custom labels.\n */\n\nimport { useMemo } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation.js'\nimport SectionHeading from '../AnalysisBuilder/SectionHeading.js'\nimport type { AxisFormatConfig } from '../../types.js'\nimport { formatAxisValue } from '../../utils/chartUtils.js'\nimport { getCurrencyCodeForLocale } from '../../utils/axisValueFormatting.js'\n\ninterface AxisFormatControlsProps {\n value: AxisFormatConfig\n onChange: (config: AxisFormatConfig) => void\n axisLabel: string // \"X-Axis\", \"Left Y-Axis\", \"Right Y-Axis\"\n /** Sample value for preview (default: 1250000) */\n previewValue?: number\n}\n\n/**\n * Get the currency symbol for the user's locale\n */\nfunction getLocaleCurrencySymbol(): string {\n const locale = typeof navigator !== 'undefined' ? navigator.language : 'en-US'\n // Format a number as currency and extract just the symbol\n const formatted = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: getCurrencyCodeForLocale(locale),\n currencyDisplay: 'narrowSymbol'\n }).format(0)\n // Extract the currency symbol (remove digits, spaces, and common separators)\n return formatted.replace(/[\\d.,\\s]/g, '').trim() || '$'\n}\n\n/**\n * Single axis format control section\n */\nexport function AxisFormatControls({\n value,\n onChange,\n axisLabel,\n previewValue = 1250000\n}: AxisFormatControlsProps) {\n const { t } = useTranslation()\n const config = useMemo(() => value || {}, [value])\n\n // Get locale-aware currency symbol for the button\n const currencySymbol = useMemo(() => getLocaleCurrencySymbol(), [])\n\n // Generate preview of formatted value\n const preview = useMemo(() => {\n return formatAxisValue(previewValue, config)\n }, [previewValue, config])\n\n const handleChange = (updates: Partial<AxisFormatConfig>) => {\n onChange({ ...config, ...updates })\n }\n\n const unitButtons: Array<{ value: AxisFormatConfig['unit']; label: string }> = [\n { value: 'currency', label: currencySymbol },\n { value: 'percent', label: '%' },\n { value: 'number', label: '#' },\n { value: 'custom', label: t('chart.runtime.axisFormat.custom') }\n ]\n\n return (\n <div className=\"dc:space-y-3 dc:pb-4\">\n {/* Axis Header */}\n <SectionHeading>{axisLabel}</SectionHeading>\n\n {/* Label Input */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.label')}</label>\n <input\n type=\"text\"\n value={config.label || ''}\n onChange={(e) => handleChange({ label: e.target.value || undefined })}\n placeholder={t('chart.runtime.axisFormat.autoLabel')}\n className=\"dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text\"\n />\n </div>\n\n {/* Unit Type */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.unit')}</label>\n <div className=\"dc:flex dc:border border-dc-border dc:rounded-sm dc:overflow-hidden\">\n {unitButtons.map((btn) => (\n <button\n key={btn.value}\n type=\"button\"\n onClick={() => handleChange({ unit: btn.value })}\n className={`dc:flex-1 dc:px-2 dc:py-1.5 dc:text-sm dc:font-medium dc:transition-colors ${\n config.unit === btn.value\n ? 'bg-dc-primary text-white'\n : 'bg-dc-surface text-dc-text hover:bg-dc-border'\n }`}\n >\n {btn.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Currency code (only when Currency is selected) — without it the symbol\n follows the viewer's locale, so a GBP column renders $ to a US viewer. */}\n {config.unit === 'currency' && (\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.currencyCode')}</label>\n <input\n type=\"text\"\n value={config.currencyCode || ''}\n onChange={(e) => handleChange({ currencyCode: e.target.value.trim().toUpperCase() || undefined })}\n placeholder={getCurrencyCodeForLocale(typeof navigator !== 'undefined' ? navigator.language : 'en-US')}\n maxLength={3}\n className=\"dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text\"\n />\n <p className=\"dc:text-xs text-dc-text-muted\">{t('chart.runtime.axisFormat.currencyCodeHint')}</p>\n </div>\n )}\n\n {/* Custom Prefix/Suffix (only when Custom is selected) */}\n {config.unit === 'custom' && (\n <div className=\"dc:flex dc:gap-2\">\n <div className=\"dc:flex-1 dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.prefix')}</label>\n <input\n type=\"text\"\n value={config.customPrefix || ''}\n onChange={(e) => handleChange({ customPrefix: e.target.value || undefined })}\n placeholder={t('chart.runtime.axisFormat.prefixExample')}\n className=\"dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text\"\n />\n </div>\n <div className=\"dc:flex-1 dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.suffix')}</label>\n <input\n type=\"text\"\n value={config.customSuffix || ''}\n onChange={(e) => handleChange({ customSuffix: e.target.value || undefined })}\n placeholder={t('chart.runtime.axisFormat.suffixExample')}\n className=\"dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text\"\n />\n </div>\n </div>\n )}\n\n {/* Abbreviation Toggle */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.abbreviation')}</label>\n <div className=\"dc:flex dc:border border-dc-border dc:rounded-sm dc:overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => handleChange({ abbreviate: true })}\n className={`dc:flex-1 dc:px-3 dc:py-1.5 dc:text-sm dc:font-medium dc:transition-colors ${\n config.abbreviate !== false\n ? 'bg-dc-primary text-white'\n : 'bg-dc-surface text-dc-text hover:bg-dc-border'\n }`}\n >\n {t('chart.runtime.axisFormat.yes')}\n </button>\n <button\n type=\"button\"\n onClick={() => handleChange({ abbreviate: false })}\n className={`dc:flex-1 dc:px-3 dc:py-1.5 dc:text-sm dc:font-medium dc:transition-colors ${\n config.abbreviate === false\n ? 'bg-dc-primary text-white'\n : 'bg-dc-surface text-dc-text hover:bg-dc-border'\n }`}\n >\n {t('chart.runtime.axisFormat.no')}\n </button>\n </div>\n </div>\n\n {/* Decimals */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.decimals')}</label>\n <div className=\"dc:flex dc:gap-2\">\n <button\n type=\"button\"\n onClick={() => {\n const current = config.decimals ?? 2\n if (current > 0) handleChange({ decimals: current - 1 })\n }}\n disabled={(config.decimals ?? 2) <= 0}\n className=\"dc:flex-1 dc:px-3 dc:py-2 dc:text-sm dc:border border-dc-border dc:rounded-sm bg-dc-surface text-dc-text hover:bg-dc-border dc:disabled:opacity-40 dc:disabled:cursor-not-allowed dc:transition-colors\"\n >\n ← .0\n </button>\n <button\n type=\"button\"\n onClick={() => {\n const current = config.decimals ?? 2\n if (current < 4) handleChange({ decimals: current + 1 })\n }}\n disabled={(config.decimals ?? 2) >= 4}\n className=\"dc:flex-1 dc:px-3 dc:py-2 dc:text-sm dc:border border-dc-border dc:rounded-sm bg-dc-surface text-dc-text hover:bg-dc-border dc:disabled:opacity-40 dc:disabled:cursor-not-allowed dc:transition-colors\"\n >\n .00 →\n </button>\n </div>\n </div>\n\n {/* Preview */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.preview')}</label>\n <div className=\"dc:text-sm dc:font-mono text-dc-text\">\n {preview}\n </div>\n </div>\n </div>\n )\n}\n\ninterface MultiAxisFormatControlsProps {\n displayConfig: {\n xAxisFormat?: AxisFormatConfig\n leftYAxisFormat?: AxisFormatConfig\n rightYAxisFormat?: AxisFormatConfig\n }\n onChange: (updates: {\n xAxisFormat?: AxisFormatConfig\n leftYAxisFormat?: AxisFormatConfig\n rightYAxisFormat?: AxisFormatConfig\n }) => void\n /** Which axes to show controls for */\n showAxes?: {\n xAxis?: boolean\n leftYAxis?: boolean\n rightYAxis?: boolean\n }\n}\n\ntype AxisKey = 'xAxisFormat' | 'leftYAxisFormat' | 'rightYAxisFormat'\n\ninterface AxisEntry {\n show: boolean | undefined\n key: AxisKey\n labelKey: string\n previewValue?: number\n}\n\n/**\n * Container component for multiple axis format controls. Each configured axis\n * renders an `AxisFormatControls`; the per-axis entries are data-driven so the\n * three branches collapse into a single map.\n */\nexport function MultiAxisFormatControls({\n displayConfig,\n onChange,\n showAxes = { leftYAxis: true, rightYAxis: true }\n}: MultiAxisFormatControlsProps) {\n const { t } = useTranslation()\n\n const entries: AxisEntry[] = [\n { show: showAxes.leftYAxis, key: 'leftYAxisFormat', labelKey: 'chart.runtime.axisFormat.leftYAxis' },\n { show: showAxes.rightYAxis, key: 'rightYAxisFormat', labelKey: 'chart.runtime.axisFormat.rightYAxis' },\n // Use a year-like number for X-axis preview\n { show: showAxes.xAxis, key: 'xAxisFormat', labelKey: 'chart.runtime.axisFormat.xAxis', previewValue: 2024 }\n ]\n\n const updateAxis = (key: AxisKey, config: AxisFormatConfig) =>\n onChange({ ...displayConfig, [key]: Object.keys(config).length > 0 ? config : undefined })\n\n return (\n <div className=\"dc:space-y-4\">\n {entries.filter((entry) => entry.show).map((entry) => (\n <AxisFormatControls\n key={entry.key}\n axisLabel={t(entry.labelKey)}\n value={displayConfig[entry.key] || {}}\n onChange={(config) => updateAxis(entry.key, config)}\n previewValue={entry.previewValue}\n />\n ))}\n </div>\n )\n}\n\nexport default AxisFormatControls\n"],"mappings":"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"}
1
+ {"version":3,"file":"charts-core-BSmlKmf0.js","names":["useTranslation","getCurrencyCodeForLocale","formatAxisValue","SectionHeading","className","getLocaleCurrencySymbol","locale","AxisFormatControls","config","useMemo","value","currencySymbol","preview","previewValue","handleChange","updates","unitButtons","t","axisLabel","btn","current"],"sources":["../../../src/client/components/AnalysisBuilder/SectionHeading.tsx","../../../src/client/components/charts/AxisFormatControls.tsx"],"sourcesContent":["/**\n * SectionHeading Component\n *\n * A reusable section heading for the Analysis Builder panels.\n * Provides consistent styling that can be easily adjusted in one place.\n */\n\nimport type { ReactNode } from 'react'\n\ninterface SectionHeadingProps {\n children: ReactNode\n /** Optional className to add additional styles */\n className?: string\n}\n\n/**\n * Consistent section heading style for Analysis Builder panels.\n * Change the styles here to update all section headings at once.\n */\nexport default function SectionHeading({ children, className = '' }: SectionHeadingProps) {\n return (\n <h3 className={`dc:text-sm dc:font-semibold text-dc-primary dc:uppercase dc:tracking-wide ${className}`}>\n {children}\n </h3>\n )\n}\n","/**\n * AxisFormatControls Component\n *\n * A reusable component for configuring axis number formatting.\n * Provides controls for unit type, abbreviation, decimal places, and custom labels.\n */\n\nimport { useMemo } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation.js'\nimport SectionHeading from '../AnalysisBuilder/SectionHeading.js'\nimport type { AxisFormatConfig } from '../../types.js'\nimport { formatAxisValue } from '../../utils/chartUtils.js'\nimport { getCurrencyCodeForLocale } from '../../utils/axisValueFormatting.js'\n\ninterface AxisFormatControlsProps {\n value: AxisFormatConfig\n onChange: (config: AxisFormatConfig) => void\n axisLabel: string // \"X-Axis\", \"Left Y-Axis\", \"Right Y-Axis\"\n /** Sample value for preview (default: 1250000) */\n previewValue?: number\n}\n\n/**\n * Get the currency symbol for the user's locale\n */\nfunction getLocaleCurrencySymbol(): string {\n const locale = typeof navigator !== 'undefined' ? navigator.language : 'en-US'\n // Format a number as currency and extract just the symbol\n const formatted = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: getCurrencyCodeForLocale(locale),\n currencyDisplay: 'narrowSymbol'\n }).format(0)\n // Extract the currency symbol (remove digits, spaces, and common separators)\n return formatted.replace(/[\\d.,\\s]/g, '').trim() || '$'\n}\n\n/**\n * Single axis format control section\n */\nexport function AxisFormatControls({\n value,\n onChange,\n axisLabel,\n previewValue = 1250000\n}: AxisFormatControlsProps) {\n const { t } = useTranslation()\n const config = useMemo(() => value || {}, [value])\n\n // Get locale-aware currency symbol for the button\n const currencySymbol = useMemo(() => getLocaleCurrencySymbol(), [])\n\n // Generate preview of formatted value\n const preview = useMemo(() => {\n return formatAxisValue(previewValue, config)\n }, [previewValue, config])\n\n const handleChange = (updates: Partial<AxisFormatConfig>) => {\n onChange({ ...config, ...updates })\n }\n\n const unitButtons: Array<{ value: AxisFormatConfig['unit']; label: string }> = [\n { value: 'currency', label: currencySymbol },\n { value: 'percent', label: '%' },\n { value: 'number', label: '#' },\n { value: 'custom', label: t('chart.runtime.axisFormat.custom') }\n ]\n\n return (\n <div className=\"dc:space-y-3 dc:pb-4\">\n {/* Axis Header */}\n <SectionHeading>{axisLabel}</SectionHeading>\n\n {/* Label Input */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.label')}</label>\n <input\n type=\"text\"\n value={config.label || ''}\n onChange={(e) => handleChange({ label: e.target.value || undefined })}\n placeholder={t('chart.runtime.axisFormat.autoLabel')}\n className=\"dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text\"\n />\n </div>\n\n {/* Unit Type */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.unit')}</label>\n <div className=\"dc:flex dc:border border-dc-border dc:rounded-sm dc:overflow-hidden\">\n {unitButtons.map((btn) => (\n <button\n key={btn.value}\n type=\"button\"\n onClick={() => handleChange({ unit: btn.value })}\n className={`dc:flex-1 dc:px-2 dc:py-1.5 dc:text-sm dc:font-medium dc:transition-colors ${\n config.unit === btn.value\n ? 'bg-dc-primary text-white'\n : 'bg-dc-surface text-dc-text hover:bg-dc-border'\n }`}\n >\n {btn.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Currency code (only when Currency is selected) — without it the symbol\n follows the viewer's locale, so a GBP column renders $ to a US viewer. */}\n {config.unit === 'currency' && (\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.currencyCode')}</label>\n <input\n type=\"text\"\n value={config.currencyCode || ''}\n onChange={(e) => handleChange({ currencyCode: e.target.value.trim().toUpperCase() || undefined })}\n placeholder={getCurrencyCodeForLocale(typeof navigator !== 'undefined' ? navigator.language : 'en-US')}\n maxLength={3}\n className=\"dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text\"\n />\n <p className=\"dc:text-xs text-dc-text-muted\">{t('chart.runtime.axisFormat.currencyCodeHint')}</p>\n </div>\n )}\n\n {/* Custom Prefix/Suffix (only when Custom is selected) */}\n {config.unit === 'custom' && (\n <div className=\"dc:flex dc:gap-2\">\n <div className=\"dc:flex-1 dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.prefix')}</label>\n <input\n type=\"text\"\n value={config.customPrefix || ''}\n onChange={(e) => handleChange({ customPrefix: e.target.value || undefined })}\n placeholder={t('chart.runtime.axisFormat.prefixExample')}\n className=\"dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text\"\n />\n </div>\n <div className=\"dc:flex-1 dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.suffix')}</label>\n <input\n type=\"text\"\n value={config.customSuffix || ''}\n onChange={(e) => handleChange({ customSuffix: e.target.value || undefined })}\n placeholder={t('chart.runtime.axisFormat.suffixExample')}\n className=\"dc:w-full dc:px-2 dc:py-1 dc:text-sm dc:border border-dc-border dc:rounded-sm focus:ring-dc-accent focus:border-dc-accent bg-dc-surface text-dc-text\"\n />\n </div>\n </div>\n )}\n\n {/* Abbreviation Toggle */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.abbreviation')}</label>\n <div className=\"dc:flex dc:border border-dc-border dc:rounded-sm dc:overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => handleChange({ abbreviate: true })}\n className={`dc:flex-1 dc:px-3 dc:py-1.5 dc:text-sm dc:font-medium dc:transition-colors ${\n config.abbreviate !== false\n ? 'bg-dc-primary text-white'\n : 'bg-dc-surface text-dc-text hover:bg-dc-border'\n }`}\n >\n {t('chart.runtime.axisFormat.yes')}\n </button>\n <button\n type=\"button\"\n onClick={() => handleChange({ abbreviate: false })}\n className={`dc:flex-1 dc:px-3 dc:py-1.5 dc:text-sm dc:font-medium dc:transition-colors ${\n config.abbreviate === false\n ? 'bg-dc-primary text-white'\n : 'bg-dc-surface text-dc-text hover:bg-dc-border'\n }`}\n >\n {t('chart.runtime.axisFormat.no')}\n </button>\n </div>\n </div>\n\n {/* Decimals */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.decimals')}</label>\n <div className=\"dc:flex dc:gap-2\">\n <button\n type=\"button\"\n onClick={() => {\n const current = config.decimals ?? 2\n if (current > 0) handleChange({ decimals: current - 1 })\n }}\n disabled={(config.decimals ?? 2) <= 0}\n className=\"dc:flex-1 dc:px-3 dc:py-2 dc:text-sm dc:border border-dc-border dc:rounded-sm bg-dc-surface text-dc-text hover:bg-dc-border dc:disabled:opacity-40 dc:disabled:cursor-not-allowed dc:transition-colors\"\n >\n ← .0\n </button>\n <button\n type=\"button\"\n onClick={() => {\n const current = config.decimals ?? 2\n if (current < 4) handleChange({ decimals: current + 1 })\n }}\n disabled={(config.decimals ?? 2) >= 4}\n className=\"dc:flex-1 dc:px-3 dc:py-2 dc:text-sm dc:border border-dc-border dc:rounded-sm bg-dc-surface text-dc-text hover:bg-dc-border dc:disabled:opacity-40 dc:disabled:cursor-not-allowed dc:transition-colors\"\n >\n .00 →\n </button>\n </div>\n </div>\n\n {/* Preview */}\n <div className=\"dc:space-y-1\">\n <label className=\"dc:text-xs text-dc-text-secondary\">{t('chart.runtime.axisFormat.preview')}</label>\n <div className=\"dc:text-sm dc:font-mono text-dc-text\">\n {preview}\n </div>\n </div>\n </div>\n )\n}\n\ninterface MultiAxisFormatControlsProps {\n displayConfig: {\n xAxisFormat?: AxisFormatConfig\n leftYAxisFormat?: AxisFormatConfig\n rightYAxisFormat?: AxisFormatConfig\n }\n onChange: (updates: {\n xAxisFormat?: AxisFormatConfig\n leftYAxisFormat?: AxisFormatConfig\n rightYAxisFormat?: AxisFormatConfig\n }) => void\n /** Which axes to show controls for */\n showAxes?: {\n xAxis?: boolean\n leftYAxis?: boolean\n rightYAxis?: boolean\n }\n}\n\ntype AxisKey = 'xAxisFormat' | 'leftYAxisFormat' | 'rightYAxisFormat'\n\ninterface AxisEntry {\n show: boolean | undefined\n key: AxisKey\n labelKey: string\n previewValue?: number\n}\n\n/**\n * Container component for multiple axis format controls. Each configured axis\n * renders an `AxisFormatControls`; the per-axis entries are data-driven so the\n * three branches collapse into a single map.\n */\nexport function MultiAxisFormatControls({\n displayConfig,\n onChange,\n showAxes = { leftYAxis: true, rightYAxis: true }\n}: MultiAxisFormatControlsProps) {\n const { t } = useTranslation()\n\n const entries: AxisEntry[] = [\n { show: showAxes.leftYAxis, key: 'leftYAxisFormat', labelKey: 'chart.runtime.axisFormat.leftYAxis' },\n { show: showAxes.rightYAxis, key: 'rightYAxisFormat', labelKey: 'chart.runtime.axisFormat.rightYAxis' },\n // Use a year-like number for X-axis preview\n { show: showAxes.xAxis, key: 'xAxisFormat', labelKey: 'chart.runtime.axisFormat.xAxis', previewValue: 2024 }\n ]\n\n const updateAxis = (key: AxisKey, config: AxisFormatConfig) =>\n onChange({ ...displayConfig, [key]: Object.keys(config).length > 0 ? config : undefined })\n\n return (\n <div className=\"dc:space-y-4\">\n {entries.filter((entry) => entry.show).map((entry) => (\n <AxisFormatControls\n key={entry.key}\n axisLabel={t(entry.labelKey)}\n value={displayConfig[entry.key] || {}}\n onChange={(config) => updateAxis(entry.key, config)}\n previewValue={entry.previewValue}\n />\n ))}\n </div>\n )\n}\n\nexport default AxisFormatControls\n"],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { f as e, g as t, h as n, m as r, p as i } from "./chart-data-table-zSjYEy0r.js";
2
+ import { Suspense as a, lazy as o } from "react";
3
+ import { jsx as s } from "react/jsx-runtime";
4
+ //#region src/client/charts/ChartLoader.tsx
5
+ var c = {
6
+ bar: () => import("./chart-bar-C5a1T9Ce.js").then((e) => e.n),
7
+ line: () => import("./chart-line-CjW9Yo03.js").then((e) => e.n),
8
+ area: () => import("./chart-area-9uCXIvMN.js").then((e) => e.n),
9
+ pie: () => import("./chart-pie-BTb5nKd7.js").then((e) => e.n),
10
+ scatter: () => import("./chart-scatter-Bdj95OeV.js").then((e) => e.n),
11
+ radar: () => import("./chart-radar-8384sPlX.js").then((e) => e.n),
12
+ radialBar: () => import("./chart-radial-bar-CuBmmOTU.js").then((e) => e.n),
13
+ treemap: () => import("./chart-tree-map-CtJADX87.js").then((e) => e.n),
14
+ bubble: () => import("./chart-bubble-dt5ESb7m.js").then((e) => e.t),
15
+ table: () => import("./chart-data-table-zSjYEy0r.js").then((e) => e.n),
16
+ recordsTable: () => import("./RecordsTable-BC5l67Dc.js"),
17
+ activityGrid: () => import("./chart-activity-grid-Bbc58UJD.js").then((e) => e.t),
18
+ kpiNumber: () => import("./chart-kpi-number-C31-6A6m.js").then((e) => e.t),
19
+ kpiDelta: () => import("./chart-kpi-delta-CgehGc9d.js").then((e) => e.t),
20
+ kpiText: () => import("./chart-kpi-text-D2ydQIEn.js").then((e) => e.t),
21
+ markdown: () => import("./chart-markdown-Cgs62had.js").then((e) => e.n),
22
+ funnel: () => import("./chart-funnel-CuOSCsbt.js").then((e) => e.n),
23
+ sankey: () => import("./chart-sankey-CoIuG7Nu.js").then((e) => e.t),
24
+ sunburst: () => import("./chart-sunburst-CuG8520_.js").then((e) => e.t),
25
+ heatmap: () => import("./chart-heat-map-C1dvW-ov.js").then((e) => e.t),
26
+ retentionHeatmap: () => import("./RetentionHeatmap-CKckuEMF.js"),
27
+ retentionCombined: () => import("./RetentionCombinedChart-aj5xblfu.js"),
28
+ boxPlot: () => import("./chart-box-plot-BbBrZsaJ.js").then((e) => e.t),
29
+ dotStrip: () => import("./DotStripChart-DTukhwG-.js"),
30
+ waterfall: () => import("./chart-waterfall-D430fO48.js").then((e) => e.t),
31
+ candlestick: () => import("./chart-candlestick-2A2J_NsK.js").then((e) => e.t),
32
+ measureProfile: () => import("./chart-measure-profile-Cg39gYjR.js").then((e) => e.t),
33
+ proportionBar: () => import("./ProportionBarChart-CPZ2cHxH.js"),
34
+ gauge: () => import("./chart-gauge-DxKeqCCD.js").then((e) => e.t)
35
+ };
36
+ function l(t) {
37
+ let a = n.get(t);
38
+ if (a) return a;
39
+ if (e.has(t)) return e.get(t);
40
+ let s = c[t];
41
+ if (s) {
42
+ let n = i(t, s);
43
+ return e.set(t, o(n)), e.get(t);
44
+ }
45
+ return o(() => Promise.resolve({ default: r(t) }));
46
+ }
47
+ function u(e) {
48
+ return e in c || n.has(e);
49
+ }
50
+ function d({ height: e }) {
51
+ return /* @__PURE__ */ s("div", {
52
+ className: "dc:flex dc:items-center dc:justify-center dc:w-full",
53
+ style: { height: typeof e == "number" ? `${e}px` : e || "200px" },
54
+ children: /* @__PURE__ */ s("div", { className: "dc:animate-pulse bg-dc-surface-secondary dc:rounded-sm dc:w-full dc:h-full dc:min-h-[100px]" })
55
+ });
56
+ }
57
+ function f({ chartType: e, fallback: t, height: n, ...r }) {
58
+ let i = l(e);
59
+ return /* @__PURE__ */ s(a, {
60
+ fallback: t ?? /* @__PURE__ */ s(d, { height: n }),
61
+ children: /* @__PURE__ */ s(i, {
62
+ height: n,
63
+ ...r
64
+ })
65
+ });
66
+ }
67
+ function p(e) {
68
+ let t = c[e];
69
+ t && t();
70
+ }
71
+ function m(e) {
72
+ e.forEach(p);
73
+ }
74
+ function h() {
75
+ let e = Object.keys(c), t = Array.from(n.keys());
76
+ return [.../* @__PURE__ */ new Set([...e, ...t])];
77
+ }
78
+ function g(e) {
79
+ return !t.has(e);
80
+ }
81
+ function _() {
82
+ return Array.from(t);
83
+ }
84
+ //#endregion
85
+ export { u as a, g as i, h as n, p as o, _ as r, m as s, f as t };
86
+
87
+ //# sourceMappingURL=charts-loader-Bz9yHkW1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"charts-loader-BTI0UPK4.js","names":["chartLoaderCache","failedChartTypes","customChartMap","createUnknownChartFallback","createSafeImport","chartImportMap","n","getLazyChart","customChart","chartType","importFn","safeImport","lazy","isValidChartType","DefaultChartFallback","height","LazyChart","chartProps","ChartComponent","Suspense","fallback","preloadChart","preloadCharts","getAvailableChartTypes","builtIn","custom","isChartTypeAvailable","getUnavailableChartTypes"],"sources":["../../../src/client/charts/ChartLoader.tsx"],"sourcesContent":["/**\n * Lazy Chart Loader\n *\n * Provides React.lazy-based dynamic loading for chart components.\n * This enables code splitting - each chart type loads only when needed.\n *\n * Handles missing optional dependencies gracefully by showing a fallback\n * component instead of crashing the application.\n */\n\nimport { lazy, Suspense, ReactNode, LazyExoticComponent } from 'react'\nimport type { BuiltInChartType, ChartType, ChartProps } from '../types.js'\nimport {\n type LazyChartComponent,\n chartLoaderCache,\n failedChartTypes,\n customChartMap,\n createSafeImport,\n createUnknownChartFallback\n} from './chartComponentRegistry.js'\n// Dynamic import functions for built-in chart **components** (the DOM-bearing,\n// client-only side of a chart). This stays separate from `chartRegistry` — which\n// is DOM-free and shared with the server — so importing the unified registry\n// never drags the chart component graph into server/agent code. Lazy loading is\n// a client-only optimisation.\n\n// The custom-chart registration API lives in chartComponentRegistry to avoid an\n// import cycle (chartPlugin → ChartLoader → DataTable → CubeProvider → chartPlugin).\n// Re-exported here so existing import paths keep working.\nexport { registerChartComponent, unregisterChartComponent } from './chartComponentRegistry.js'\n\n// Dynamic import functions for built-in chart **components** — the DOM-bearing,\n// client-only side of a chart. Kept separate from the unified `chartRegistry`\n// (which is DOM-free and shared with the server agent) so importing the registry\n// never drags the chart component graph into server/MCP/agent code. Lazy loading\n// is a client-only optimisation.\nconst chartImportMap: Record<BuiltInChartType, () => Promise<{ default: LazyChartComponent }>> = {\n bar: () => import('../components/charts/BarChart.js'),\n line: () => import('../components/charts/LineChart.js'),\n area: () => import('../components/charts/AreaChart.js'),\n pie: () => import('../components/charts/PieChart.js'),\n scatter: () => import('../components/charts/ScatterChart.js'),\n radar: () => import('../components/charts/RadarChart.js'),\n radialBar: () => import('../components/charts/RadialBarChart.js'),\n treemap: () => import('../components/charts/TreeMapChart.js'),\n bubble: () => import('../components/charts/BubbleChart.js'),\n table: () => import('../components/charts/DataTable.js'),\n recordsTable: () => import('../components/charts/RecordsTable.js'),\n activityGrid: () => import('../components/charts/ActivityGridChart.js'),\n kpiNumber: () => import('../components/charts/KpiNumber.js'),\n kpiDelta: () => import('../components/charts/KpiDelta.js'),\n kpiText: () => import('../components/charts/KpiText.js'),\n markdown: () => import('../components/charts/MarkdownChart.js'),\n funnel: () => import('../components/charts/FunnelChart.js'),\n sankey: () => import('../components/charts/SankeyChart.js'),\n sunburst: () => import('../components/charts/SunburstChart.js'),\n heatmap: () => import('../components/charts/HeatMapChart.js'),\n retentionHeatmap: () => import('../components/charts/RetentionHeatmap.js'),\n retentionCombined: () => import('../components/charts/RetentionCombinedChart.js'),\n boxPlot: () => import('../components/charts/BoxPlotChart.js'),\n dotStrip: () => import('../components/charts/DotStripChart.js'),\n waterfall: () => import('../components/charts/WaterfallChart.js'),\n candlestick: () => import('../components/charts/CandlestickChart.js'),\n measureProfile: () => import('../components/charts/MeasureProfileChart.js'),\n proportionBar: () => import('../components/charts/ProportionBarChart.js'),\n gauge: () => import('../components/charts/GaugeChart.js'),\n}\n\n/**\n * Get or create a lazy component for a chart type.\n * Checks custom (plugin) charts first, then built-in charts.\n * Returns an unknown chart fallback for unregistered types instead of throwing.\n */\nfunction getLazyChart(chartType: ChartType): LazyExoticComponent<LazyChartComponent> {\n // 1. Check custom charts first (allows overriding built-ins)\n const customChart = customChartMap.get(chartType)\n if (customChart) {\n return customChart\n }\n\n // 2. Check built-in cache\n if (chartLoaderCache.has(chartType)) {\n return chartLoaderCache.get(chartType)!\n }\n\n // 3. Check built-in import map (the client component registry)\n const importFn = chartImportMap[chartType as BuiltInChartType]\n if (importFn) {\n const safeImport = createSafeImport(chartType, importFn)\n chartLoaderCache.set(chartType, lazy(safeImport))\n return chartLoaderCache.get(chartType)!\n }\n\n // 4. Unknown chart type — return graceful fallback\n return lazy(() => Promise.resolve({ default: createUnknownChartFallback(chartType) }))\n}\n\n/**\n * Check if a chart type is supported (built-in or custom plugin)\n */\nexport function isValidChartType(chartType: string): chartType is ChartType {\n return chartType in chartImportMap || customChartMap.has(chartType)\n}\n\n// Props for the LazyChart wrapper\nexport interface LazyChartProps extends ChartProps {\n chartType: ChartType\n fallback?: ReactNode\n}\n\n/**\n * Default loading placeholder for charts\n */\nfunction DefaultChartFallback({ height }: { height?: string | number }) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full\"\n style={{ height: typeof height === 'number' ? `${height}px` : height || '200px' }}\n >\n <div className=\"dc:animate-pulse bg-dc-surface-secondary dc:rounded-sm dc:w-full dc:h-full dc:min-h-[100px]\" />\n </div>\n )\n}\n\n/**\n * Lazy Chart Component\n *\n * Renders a chart component with React.lazy dynamic loading.\n * The chart type determines which chart component is loaded.\n *\n * @example\n * ```tsx\n * <LazyChart\n * chartType=\"bar\"\n * data={chartData}\n * chartConfig={{ yAxis: ['value'] }}\n * height={300}\n * />\n * ```\n */\nexport function LazyChart({\n chartType,\n fallback,\n height,\n ...chartProps\n}: LazyChartProps) {\n const ChartComponent = getLazyChart(chartType)\n\n return (\n <Suspense fallback={fallback ?? <DefaultChartFallback height={height} />}>\n <ChartComponent height={height} {...chartProps} />\n </Suspense>\n )\n}\n\n/**\n * Preload a chart type\n *\n * Triggers the dynamic import without rendering.\n * Useful for prefetching charts that will likely be needed.\n *\n * @example\n * ```tsx\n * // Preload bar chart on hover\n * onMouseEnter={() => preloadChart('bar')}\n * ```\n */\nexport function preloadChart(chartType: ChartType): void {\n const importFn = chartImportMap[chartType as BuiltInChartType]\n if (importFn) {\n importFn()\n }\n}\n\n/**\n * Preload multiple chart types\n *\n * @example\n * ```tsx\n * // Preload common charts on app init\n * useEffect(() => {\n * preloadCharts(['bar', 'line', 'pie'])\n * }, [])\n * ```\n */\nexport function preloadCharts(chartTypes: ChartType[]): void {\n chartTypes.forEach(preloadChart)\n}\n\n/**\n * Get all available chart types (built-in + custom plugins)\n */\nexport function getAvailableChartTypes(): ChartType[] {\n const builtIn = Object.keys(chartImportMap) as ChartType[]\n const custom = Array.from(customChartMap.keys())\n // Deduplicate in case a custom chart overrides a built-in\n return [...new Set([...builtIn, ...custom])]\n}\n\n/**\n * Check if a chart type has loaded successfully.\n * Returns false if the chart failed to load due to missing dependencies.\n *\n * Note: This only returns accurate results after the chart has been attempted to load.\n * Use this for conditional UI logic (e.g., hiding unavailable chart types).\n */\nexport function isChartTypeAvailable(chartType: ChartType): boolean {\n return !failedChartTypes.has(chartType)\n}\n\n/**\n * Get list of chart types that failed to load due to missing dependencies.\n */\nexport function getUnavailableChartTypes(): ChartType[] {\n return Array.from(failedChartTypes)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"charts-loader-Bz9yHkW1.js","names":["chartLoaderCache","failedChartTypes","customChartMap","createUnknownChartFallback","createSafeImport","chartImportMap","n","getLazyChart","customChart","chartType","importFn","safeImport","lazy","isValidChartType","DefaultChartFallback","height","LazyChart","chartProps","ChartComponent","Suspense","fallback","preloadChart","preloadCharts","getAvailableChartTypes","builtIn","custom","isChartTypeAvailable","getUnavailableChartTypes"],"sources":["../../../src/client/charts/ChartLoader.tsx"],"sourcesContent":["/**\n * Lazy Chart Loader\n *\n * Provides React.lazy-based dynamic loading for chart components.\n * This enables code splitting - each chart type loads only when needed.\n *\n * Handles missing optional dependencies gracefully by showing a fallback\n * component instead of crashing the application.\n */\n\nimport { lazy, Suspense, ReactNode, LazyExoticComponent } from 'react'\nimport type { BuiltInChartType, ChartType, ChartProps } from '../types.js'\nimport {\n type LazyChartComponent,\n chartLoaderCache,\n failedChartTypes,\n customChartMap,\n createSafeImport,\n createUnknownChartFallback\n} from './chartComponentRegistry.js'\n// Dynamic import functions for built-in chart **components** (the DOM-bearing,\n// client-only side of a chart). This stays separate from `chartRegistry` — which\n// is DOM-free and shared with the server — so importing the unified registry\n// never drags the chart component graph into server/agent code. Lazy loading is\n// a client-only optimisation.\n\n// The custom-chart registration API lives in chartComponentRegistry to avoid an\n// import cycle (chartPlugin → ChartLoader → DataTable → CubeProvider → chartPlugin).\n// Re-exported here so existing import paths keep working.\nexport { registerChartComponent, unregisterChartComponent } from './chartComponentRegistry.js'\n\n// Dynamic import functions for built-in chart **components** — the DOM-bearing,\n// client-only side of a chart. Kept separate from the unified `chartRegistry`\n// (which is DOM-free and shared with the server agent) so importing the registry\n// never drags the chart component graph into server/MCP/agent code. Lazy loading\n// is a client-only optimisation.\nconst chartImportMap: Record<BuiltInChartType, () => Promise<{ default: LazyChartComponent }>> = {\n bar: () => import('../components/charts/BarChart.js'),\n line: () => import('../components/charts/LineChart.js'),\n area: () => import('../components/charts/AreaChart.js'),\n pie: () => import('../components/charts/PieChart.js'),\n scatter: () => import('../components/charts/ScatterChart.js'),\n radar: () => import('../components/charts/RadarChart.js'),\n radialBar: () => import('../components/charts/RadialBarChart.js'),\n treemap: () => import('../components/charts/TreeMapChart.js'),\n bubble: () => import('../components/charts/BubbleChart.js'),\n table: () => import('../components/charts/DataTable.js'),\n recordsTable: () => import('../components/charts/RecordsTable.js'),\n activityGrid: () => import('../components/charts/ActivityGridChart.js'),\n kpiNumber: () => import('../components/charts/KpiNumber.js'),\n kpiDelta: () => import('../components/charts/KpiDelta.js'),\n kpiText: () => import('../components/charts/KpiText.js'),\n markdown: () => import('../components/charts/MarkdownChart.js'),\n funnel: () => import('../components/charts/FunnelChart.js'),\n sankey: () => import('../components/charts/SankeyChart.js'),\n sunburst: () => import('../components/charts/SunburstChart.js'),\n heatmap: () => import('../components/charts/HeatMapChart.js'),\n retentionHeatmap: () => import('../components/charts/RetentionHeatmap.js'),\n retentionCombined: () => import('../components/charts/RetentionCombinedChart.js'),\n boxPlot: () => import('../components/charts/BoxPlotChart.js'),\n dotStrip: () => import('../components/charts/DotStripChart.js'),\n waterfall: () => import('../components/charts/WaterfallChart.js'),\n candlestick: () => import('../components/charts/CandlestickChart.js'),\n measureProfile: () => import('../components/charts/MeasureProfileChart.js'),\n proportionBar: () => import('../components/charts/ProportionBarChart.js'),\n gauge: () => import('../components/charts/GaugeChart.js'),\n}\n\n/**\n * Get or create a lazy component for a chart type.\n * Checks custom (plugin) charts first, then built-in charts.\n * Returns an unknown chart fallback for unregistered types instead of throwing.\n */\nfunction getLazyChart(chartType: ChartType): LazyExoticComponent<LazyChartComponent> {\n // 1. Check custom charts first (allows overriding built-ins)\n const customChart = customChartMap.get(chartType)\n if (customChart) {\n return customChart\n }\n\n // 2. Check built-in cache\n if (chartLoaderCache.has(chartType)) {\n return chartLoaderCache.get(chartType)!\n }\n\n // 3. Check built-in import map (the client component registry)\n const importFn = chartImportMap[chartType as BuiltInChartType]\n if (importFn) {\n const safeImport = createSafeImport(chartType, importFn)\n chartLoaderCache.set(chartType, lazy(safeImport))\n return chartLoaderCache.get(chartType)!\n }\n\n // 4. Unknown chart type — return graceful fallback\n return lazy(() => Promise.resolve({ default: createUnknownChartFallback(chartType) }))\n}\n\n/**\n * Check if a chart type is supported (built-in or custom plugin)\n */\nexport function isValidChartType(chartType: string): chartType is ChartType {\n return chartType in chartImportMap || customChartMap.has(chartType)\n}\n\n// Props for the LazyChart wrapper\nexport interface LazyChartProps extends ChartProps {\n chartType: ChartType\n fallback?: ReactNode\n}\n\n/**\n * Default loading placeholder for charts\n */\nfunction DefaultChartFallback({ height }: { height?: string | number }) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full\"\n style={{ height: typeof height === 'number' ? `${height}px` : height || '200px' }}\n >\n <div className=\"dc:animate-pulse bg-dc-surface-secondary dc:rounded-sm dc:w-full dc:h-full dc:min-h-[100px]\" />\n </div>\n )\n}\n\n/**\n * Lazy Chart Component\n *\n * Renders a chart component with React.lazy dynamic loading.\n * The chart type determines which chart component is loaded.\n *\n * @example\n * ```tsx\n * <LazyChart\n * chartType=\"bar\"\n * data={chartData}\n * chartConfig={{ yAxis: ['value'] }}\n * height={300}\n * />\n * ```\n */\nexport function LazyChart({\n chartType,\n fallback,\n height,\n ...chartProps\n}: LazyChartProps) {\n const ChartComponent = getLazyChart(chartType)\n\n return (\n <Suspense fallback={fallback ?? <DefaultChartFallback height={height} />}>\n <ChartComponent height={height} {...chartProps} />\n </Suspense>\n )\n}\n\n/**\n * Preload a chart type\n *\n * Triggers the dynamic import without rendering.\n * Useful for prefetching charts that will likely be needed.\n *\n * @example\n * ```tsx\n * // Preload bar chart on hover\n * onMouseEnter={() => preloadChart('bar')}\n * ```\n */\nexport function preloadChart(chartType: ChartType): void {\n const importFn = chartImportMap[chartType as BuiltInChartType]\n if (importFn) {\n importFn()\n }\n}\n\n/**\n * Preload multiple chart types\n *\n * @example\n * ```tsx\n * // Preload common charts on app init\n * useEffect(() => {\n * preloadCharts(['bar', 'line', 'pie'])\n * }, [])\n * ```\n */\nexport function preloadCharts(chartTypes: ChartType[]): void {\n chartTypes.forEach(preloadChart)\n}\n\n/**\n * Get all available chart types (built-in + custom plugins)\n */\nexport function getAvailableChartTypes(): ChartType[] {\n const builtIn = Object.keys(chartImportMap) as ChartType[]\n const custom = Array.from(customChartMap.keys())\n // Deduplicate in case a custom chart overrides a built-in\n return [...new Set([...builtIn, ...custom])]\n}\n\n/**\n * Check if a chart type has loaded successfully.\n * Returns false if the chart failed to load due to missing dependencies.\n *\n * Note: This only returns accurate results after the chart has been attempted to load.\n * Use this for conditional UI logic (e.g., hiding unavailable chart types).\n */\nexport function isChartTypeAvailable(chartType: ChartType): boolean {\n return !failedChartTypes.has(chartType)\n}\n\n/**\n * Get list of chart types that failed to load due to missing dependencies.\n */\nexport function getUnavailableChartTypes(): ChartType[] {\n return Array.from(failedChartTypes)\n}\n"],"mappings":"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"}
@@ -915,7 +915,18 @@ var e = {
915
915
  "server.validation.query.cubeNotFoundForFilter": "Cube '{cubeName}' niet gevonden (referenced in filter '{member}')",
916
916
  "server.validation.query.filterFieldNotFound": "Filter veld '{fieldName}' niet gevonden op cube '{cubeName}' (moet zijn een dimensie van meting){hint}",
917
917
  "server.validation.query.unknownFilterOperator": "Onbekende filteroperator '{operator}' op '{member}'. Geldige operatoren: {operators}",
918
- "server.validation.query.inDateRangeMissingRange": "Filter op '{member}' gebruikt 'inDateRange' zonder datumbereik. Geef values: ['last 30 days'], values: ['2024-01-01', '2024-03-31'] of dateRange op.",
918
+ "server.validation.query.invalidInDateRangeValues": "Ongeldige inDateRange-waarden voor '{member}': {reason}",
919
+ "server.validation.query.invalidInDateRangeDateRange": "Ongeldig inDateRange-datumbereik voor '{member}': {reason}",
920
+ "server.validation.query.inDateRangeConflictingInputs": "Ongeldig inDateRange-filter voor '{member}': {reason}",
921
+ "server.validation.query.inDateRangeReason.missing": "geef een datumbereik op",
922
+ "server.validation.query.inDateRangeReason.shape": "gebruik een vlak [begin, eind] paar datums, of één relatief bereik of datum",
923
+ "server.validation.query.inDateRangeReason.invalidDate": "de datum is ongeldig",
924
+ "server.validation.query.inDateRangeReason.invalidRelative": "het relatieve datumbereik '{value}' wordt niet ondersteund",
925
+ "server.validation.query.inDateRangeReason.reverseOrder": "de begindatum mag niet na de einddatum liggen",
926
+ "server.validation.query.inDateRangeReason.conflict": "gebruik values of dateRange, niet beide",
927
+ "server.validation.ai.dryRunFailed": "Kan SQL niet genereren: {error}",
928
+ "server.validation.query.invalidDateRangeInput": "Ongeldig datumbereik: {reason}",
929
+ "server.validation.query.invalidTimeDimensionDateRange": "Ongeldig dateRange voor tijddimensie '{member}': {reason}",
919
930
  "server.validation.query.invalidDateRange": "Kan datumbereik {dateRange} voor '{member}' niet verwerken. Gebruik een relatief bereik ({examples}), één datum ('2024-01-15') of een ['start', 'eind'] paar datums.",
920
931
  "server.validation.query.invalidDateValue": "Filter op '{member}' gebruikt '{operator}' maar {value} is geen geldige datum.",
921
932
  "server.validation.query.orMixesMeasuresAndDimensions": "Een 'or' filtergroep kan geen metingfilters ({measures}) combineren met dimensiefilters ({dimensions}): metingen worden na aggregatie gefilterd en dimensies ervoor. Splits ze op in afzonderlijke filters op het hoogste niveau.",
@@ -1581,6 +1592,8 @@ var e = {
1581
1592
  "portlet.filterConfig.applyToFieldDefault": "Standaard ({field})",
1582
1593
  "portlet.filterConfig.mappedTo": "Gekoppeld aan {field}",
1583
1594
  "portlet.filterConfig.mappedFieldMissing": "Het gekoppelde veld \"{field}\" is niet meer beschikbaar in het schema",
1595
+ "portlet.filterConfig.applyToTimeDimensionsDefault": "Standaard (de tijdsdimensies van de portlet)",
1596
+ "portlet.dateFilterNotApplied": "Het dashboard-datumfilter \"{label}\" beperkt deze portlet niet omdat deze geen tijdsdimensie heeft. Koppel het filter aan een datumveld in de filterinstellingen van de portlet.",
1584
1597
  "textPortlet.editText": "Bewerken Tekst",
1585
1598
  "textPortlet.addText": "Voeg Tekst",
1586
1599
  "textPortlet.markdownContent": "Markdown Content",
@@ -1697,4 +1710,4 @@ var e = {
1697
1710
  //#endregion
1698
1711
  export { e as default };
1699
1712
 
1700
- //# sourceMappingURL=nl-NL-kRjxedTf.js.map
1713
+ //# sourceMappingURL=nl-NL-BrqrWoAj.js.map