drizzle-cube 0.4.52 → 0.5.0

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 (276) hide show
  1. package/dist/adapters/express/index.cjs +2 -2
  2. package/dist/adapters/express/index.js +92 -83
  3. package/dist/adapters/fastify/index.cjs +2 -2
  4. package/dist/adapters/fastify/index.js +126 -116
  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 +94 -86
  9. package/dist/adapters/{compiler-D_o2IzHn.js → locale-DTnJrxm1.js} +1363 -1079
  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.js +14 -14
  14. package/dist/adapters/mcp-transport-45SiFcCH.cjs +39 -0
  15. package/dist/adapters/mcp-transport-Bxpc4mRy.js +553 -0
  16. package/dist/adapters/mcp-transport.d.ts +11 -0
  17. package/dist/adapters/nextjs/index.cjs +1 -1
  18. package/dist/adapters/nextjs/index.js +138 -122
  19. package/dist/adapters/utils-DNrj-ryp.cjs +17 -0
  20. package/dist/adapters/{utils-IH1ePsBd.js → utils-DOg9oGdt.js} +2341 -819
  21. package/dist/adapters/utils.cjs +1 -1
  22. package/dist/adapters/utils.d.ts +7 -0
  23. package/dist/adapters/utils.js +1 -1
  24. package/dist/client/charts.js +12 -12
  25. package/dist/client/chunks/{DashboardEditModal-BTdV528l.js → DashboardEditModal-cSSIAZGy.js} +1968 -1973
  26. package/dist/client/chunks/DashboardEditModal-cSSIAZGy.js.map +1 -0
  27. package/dist/client/chunks/{FieldSearchModal-D75vy4Wb.js → FieldSearchModal-CZNo4pNK.js} +550 -536
  28. package/dist/client/chunks/FieldSearchModal-CZNo4pNK.js.map +1 -0
  29. package/dist/client/chunks/KpiDelta-Dll_eCV1.js +2 -0
  30. package/dist/client/chunks/KpiNumber-BPlR92hI.js +2 -0
  31. package/dist/client/chunks/KpiText-BIxq7Jso.js +2 -0
  32. package/dist/client/chunks/{RetentionCombinedChart-DIhK5pD8.js → RetentionCombinedChart-BD8tGeM_.js} +96 -96
  33. package/dist/client/chunks/RetentionCombinedChart-BD8tGeM_.js.map +1 -0
  34. package/dist/client/chunks/{RetentionHeatmap-CyREolyP.js → RetentionHeatmap-B_5sewwi.js} +77 -77
  35. package/dist/client/chunks/RetentionHeatmap-B_5sewwi.js.map +1 -0
  36. package/dist/client/chunks/SchemaVisualization-CCICjhvv.js +2 -0
  37. package/dist/client/chunks/SchemaVisualizationLazy-DraGsMx6.js +2 -0
  38. package/dist/client/chunks/af-ZA-xDmO5F0s.js +1431 -0
  39. package/dist/client/chunks/af-ZA-xDmO5F0s.js.map +1 -0
  40. package/dist/client/chunks/{analysis-builder-C1CJ0c7L.js → analysis-builder-BeVZhiQ5.js} +1519 -1507
  41. package/dist/client/chunks/analysis-builder-BeVZhiQ5.js.map +1 -0
  42. package/dist/client/chunks/{analysis-builder-shared-rkjJfWLT.js → analysis-builder-shared-BWc7ZZnG.js} +925 -954
  43. package/dist/client/chunks/analysis-builder-shared-BWc7ZZnG.js.map +1 -0
  44. package/dist/client/chunks/chart-activity-grid-CWT0gLv4.js +2376 -0
  45. package/dist/client/chunks/chart-activity-grid-CWT0gLv4.js.map +1 -0
  46. package/dist/client/chunks/{chart-area-BwYaflNk.js → chart-area-D63kG8OT.js} +157 -157
  47. package/dist/client/chunks/chart-area-D63kG8OT.js.map +1 -0
  48. package/dist/client/chunks/{chart-bar-BiENfFgE.js → chart-bar-BEfsCLjl.js} +78 -78
  49. package/dist/client/chunks/chart-bar-BEfsCLjl.js.map +1 -0
  50. package/dist/client/chunks/{chart-box-plot-BJF1tBXC.js → chart-box-plot-o-h9MRX5.js} +111 -114
  51. package/dist/client/chunks/chart-box-plot-o-h9MRX5.js.map +1 -0
  52. package/dist/client/chunks/{chart-bubble-DQQhGVDJ.js → chart-bubble-CMDp4Pfm.js} +121 -121
  53. package/dist/client/chunks/chart-bubble-CMDp4Pfm.js.map +1 -0
  54. package/dist/client/chunks/chart-candlestick-WyANJ0Ky.js +303 -0
  55. package/dist/client/chunks/chart-candlestick-WyANJ0Ky.js.map +1 -0
  56. package/dist/client/chunks/chart-config-activity-grid-C-EkgYoa.js +51 -0
  57. package/dist/client/chunks/chart-config-activity-grid-C-EkgYoa.js.map +1 -0
  58. package/dist/client/chunks/chart-config-area-CMZpbIah.js +93 -0
  59. package/dist/client/chunks/chart-config-area-CMZpbIah.js.map +1 -0
  60. package/dist/client/chunks/chart-config-bar-B8_V4YLg.js +87 -0
  61. package/dist/client/chunks/chart-config-bar-B8_V4YLg.js.map +1 -0
  62. package/dist/client/chunks/chart-config-box-plot-Dwj7sEbU.js +35 -0
  63. package/dist/client/chunks/chart-config-box-plot-Dwj7sEbU.js.map +1 -0
  64. package/dist/client/chunks/chart-config-bubble-B0w0ZVp4.js +82 -0
  65. package/dist/client/chunks/chart-config-bubble-B0w0ZVp4.js.map +1 -0
  66. package/dist/client/chunks/chart-config-candlestick-Bvo3zeIn.js +72 -0
  67. package/dist/client/chunks/chart-config-candlestick-Bvo3zeIn.js.map +1 -0
  68. package/dist/client/chunks/{chart-config-data-table-Bhdx5Hem.js → chart-config-data-table-BQXSn4b_.js} +9 -9
  69. package/dist/client/chunks/chart-config-data-table-BQXSn4b_.js.map +1 -0
  70. package/dist/client/chunks/chart-config-funnel-BzEsHmjR.js +93 -0
  71. package/dist/client/chunks/chart-config-funnel-BzEsHmjR.js.map +1 -0
  72. package/dist/client/chunks/chart-config-gauge-C5ZiyZy7.js +64 -0
  73. package/dist/client/chunks/chart-config-gauge-C5ZiyZy7.js.map +1 -0
  74. package/dist/client/chunks/chart-config-heat-map-Cv8qNnVP.js +91 -0
  75. package/dist/client/chunks/chart-config-heat-map-Cv8qNnVP.js.map +1 -0
  76. package/dist/client/chunks/chart-config-kpi-delta-BraHQc2E.js +94 -0
  77. package/dist/client/chunks/chart-config-kpi-delta-BraHQc2E.js.map +1 -0
  78. package/dist/client/chunks/chart-config-kpi-number-CeCkx7mC.js +75 -0
  79. package/dist/client/chunks/chart-config-kpi-number-CeCkx7mC.js.map +1 -0
  80. package/dist/client/chunks/chart-config-kpi-text-CImM3SvH.js +47 -0
  81. package/dist/client/chunks/chart-config-kpi-text-CImM3SvH.js.map +1 -0
  82. package/dist/client/chunks/chart-config-line-BVKapAQK.js +104 -0
  83. package/dist/client/chunks/chart-config-line-BVKapAQK.js.map +1 -0
  84. package/dist/client/chunks/chart-config-markdown-C-_g_8te.js +117 -0
  85. package/dist/client/chunks/chart-config-markdown-C-_g_8te.js.map +1 -0
  86. package/dist/client/chunks/chart-config-measure-profile-KTVV1gO3.js +82 -0
  87. package/dist/client/chunks/chart-config-measure-profile-KTVV1gO3.js.map +1 -0
  88. package/dist/client/chunks/chart-config-pie-BZxVl25X.js +68 -0
  89. package/dist/client/chunks/chart-config-pie-BZxVl25X.js.map +1 -0
  90. package/dist/client/chunks/chart-config-radar-B7FByX3t.js +49 -0
  91. package/dist/client/chunks/chart-config-radar-B7FByX3t.js.map +1 -0
  92. package/dist/client/chunks/chart-config-radial-bar-UfW_3yyX.js +38 -0
  93. package/dist/client/chunks/chart-config-radial-bar-UfW_3yyX.js.map +1 -0
  94. package/dist/client/chunks/chart-config-sankey-DGAThN9i.js +66 -0
  95. package/dist/client/chunks/chart-config-sankey-DGAThN9i.js.map +1 -0
  96. package/dist/client/chunks/chart-config-scatter-BVVJuOnt.js +61 -0
  97. package/dist/client/chunks/chart-config-scatter-BVVJuOnt.js.map +1 -0
  98. package/dist/client/chunks/chart-config-sunburst-utejM2YS.js +45 -0
  99. package/dist/client/chunks/chart-config-sunburst-utejM2YS.js.map +1 -0
  100. package/dist/client/chunks/chart-config-tree-map-IHp97OyV.js +51 -0
  101. package/dist/client/chunks/chart-config-tree-map-IHp97OyV.js.map +1 -0
  102. package/dist/client/chunks/chart-config-waterfall-BdqG1V-x.js +59 -0
  103. package/dist/client/chunks/chart-config-waterfall-BdqG1V-x.js.map +1 -0
  104. package/dist/client/chunks/{chart-data-table-2iCsn0CF.js → chart-data-table-C3Xh9jwL.js} +1083 -1086
  105. package/dist/client/chunks/chart-data-table-C3Xh9jwL.js.map +1 -0
  106. package/dist/client/chunks/{chart-funnel-poyOf7-e.js → chart-funnel-C7pgktN5.js} +132 -132
  107. package/dist/client/chunks/chart-funnel-C7pgktN5.js.map +1 -0
  108. package/dist/client/chunks/{chart-gauge-D5J4gRky.js → chart-gauge-D2r2B_AR.js} +150 -150
  109. package/dist/client/chunks/chart-gauge-D2r2B_AR.js.map +1 -0
  110. package/dist/client/chunks/{chart-heat-map-BAMVhLGG.js → chart-heat-map-Dw2yjwfO.js} +75 -80
  111. package/dist/client/chunks/chart-heat-map-Dw2yjwfO.js.map +1 -0
  112. package/dist/client/chunks/{chart-kpi-delta-KQjUIeal.js → chart-kpi-delta-CYE0S1x_.js} +117 -117
  113. package/dist/client/chunks/chart-kpi-delta-CYE0S1x_.js.map +1 -0
  114. package/dist/client/chunks/chart-kpi-number-BlZ79xHW.js +321 -0
  115. package/dist/client/chunks/chart-kpi-number-BlZ79xHW.js.map +1 -0
  116. package/dist/client/chunks/chart-kpi-text-DY1BnxPe.js +148 -0
  117. package/dist/client/chunks/chart-kpi-text-DY1BnxPe.js.map +1 -0
  118. package/dist/client/chunks/{chart-line-B5_WntY5.js → chart-line-CBsTThTv.js} +123 -123
  119. package/dist/client/chunks/chart-line-CBsTThTv.js.map +1 -0
  120. package/dist/client/chunks/chart-markdown-BWaWVkuz.js +3474 -0
  121. package/dist/client/chunks/chart-markdown-BWaWVkuz.js.map +1 -0
  122. package/dist/client/chunks/chart-measure-profile-B41qCTBG.js +179 -0
  123. package/dist/client/chunks/chart-measure-profile-B41qCTBG.js.map +1 -0
  124. package/dist/client/chunks/chart-pie-Djbu8x2v.js +172 -0
  125. package/dist/client/chunks/chart-pie-Djbu8x2v.js.map +1 -0
  126. package/dist/client/chunks/chart-radar-BsTcKV0K.js +154 -0
  127. package/dist/client/chunks/chart-radar-BsTcKV0K.js.map +1 -0
  128. package/dist/client/chunks/chart-radial-bar-Du7XNnwE.js +148 -0
  129. package/dist/client/chunks/chart-radial-bar-Du7XNnwE.js.map +1 -0
  130. package/dist/client/chunks/{chart-sankey-BOyxfG1Q.js → chart-sankey-WwkZAhLy.js} +73 -73
  131. package/dist/client/chunks/chart-sankey-WwkZAhLy.js.map +1 -0
  132. package/dist/client/chunks/chart-scatter-D8krEYsA.js +255 -0
  133. package/dist/client/chunks/chart-scatter-D8krEYsA.js.map +1 -0
  134. package/dist/client/chunks/{chart-sunburst-D9lGEOCc.js → chart-sunburst-CIDB_pTl.js} +66 -66
  135. package/dist/client/chunks/chart-sunburst-CIDB_pTl.js.map +1 -0
  136. package/dist/client/chunks/chart-tree-map-C5C2iaWM.js +298 -0
  137. package/dist/client/chunks/chart-tree-map-C5C2iaWM.js.map +1 -0
  138. package/dist/client/chunks/{chart-waterfall-BCdUx4DC.js → chart-waterfall-BGdPrJ5Y.js} +80 -80
  139. package/dist/client/chunks/chart-waterfall-BGdPrJ5Y.js.map +1 -0
  140. package/dist/client/chunks/{charts-core-C5Yokk-x.js → charts-core-BXOqaYFn.js} +92 -92
  141. package/dist/client/chunks/charts-core-BXOqaYFn.js.map +1 -0
  142. package/dist/client/chunks/en-US-5xPTdCXg.js +35 -0
  143. package/dist/client/chunks/en-US-5xPTdCXg.js.map +1 -0
  144. package/dist/client/chunks/nl-NL-vCifBijs.js +1491 -0
  145. package/dist/client/chunks/nl-NL-vCifBijs.js.map +1 -0
  146. package/dist/client/chunks/{schema-visualization-t1KiOORo.js → schema-visualization-Xp60Ff2W.js} +352 -364
  147. package/dist/client/chunks/schema-visualization-Xp60Ff2W.js.map +1 -0
  148. package/dist/client/chunks/{useDebounce-CKqkM42n.js → useDebounce-CfmUMFau.js} +85 -85
  149. package/dist/client/chunks/useDebounce-CfmUMFau.js.map +1 -0
  150. package/dist/client/chunks/{useExplainAI-DBIfYwz-.js → useExplainAI-BKGmejIj.js} +4 -4
  151. package/dist/client/chunks/{useExplainAI-DBIfYwz-.js.map → useExplainAI-BKGmejIj.js.map} +1 -1
  152. package/dist/client/chunks/{utils--qCr8Yn5.js → utils-BldkcRHv.js} +2 -2
  153. package/dist/client/chunks/{utils--qCr8Yn5.js.map → utils-BldkcRHv.js.map} +1 -1
  154. package/dist/client/chunks/{vendor-BRlsCGnK.js → vendor-ClXpIiea.js} +2 -2
  155. package/dist/client/chunks/{vendor-BRlsCGnK.js.map → vendor-ClXpIiea.js.map} +1 -1
  156. package/dist/client/components/AnalysisBuilder/types.d.ts +6 -6
  157. package/dist/client/components.js +3 -3
  158. package/dist/client/hooks/useTranslation.d.ts +21 -0
  159. package/dist/client/hooks.js +3 -3
  160. package/dist/client/icons.js +1 -1
  161. package/dist/client/index.js +493 -488
  162. package/dist/client/index.js.map +1 -1
  163. package/dist/client/providers/CubeApiProvider.d.ts +2 -1
  164. package/dist/client/providers/CubeProvider.d.ts +7 -1
  165. package/dist/client/providers/I18nProvider.d.ts +18 -0
  166. package/dist/client/providers.js +1 -1
  167. package/dist/client/schema.js +1 -1
  168. package/dist/client/shared/types.d.ts +5 -20
  169. package/dist/client/styles.css +1 -1
  170. package/dist/client/utils.js +5 -5
  171. package/dist/client-bundle-stats.html +1 -1
  172. package/dist/mcp-app/mcp-app.html +26 -24
  173. package/dist/server/index.cjs +42 -40
  174. package/dist/server/index.js +3353 -1567
  175. package/package.json +5 -2
  176. package/dist/adapters/compiler-Bbsijr3W.cjs +0 -198
  177. package/dist/adapters/handler-DumFgnNM.cjs +0 -25
  178. package/dist/adapters/mcp-transport-C6bsIOSV.js +0 -545
  179. package/dist/adapters/mcp-transport-DMhuYmFp.cjs +0 -39
  180. package/dist/adapters/utils-CyBt-as9.cjs +0 -15
  181. package/dist/client/chunks/DashboardEditModal-BTdV528l.js.map +0 -1
  182. package/dist/client/chunks/FieldSearchModal-D75vy4Wb.js.map +0 -1
  183. package/dist/client/chunks/KpiDelta-Bk8bzKYM.js +0 -2
  184. package/dist/client/chunks/KpiNumber-CKF-8e_T.js +0 -2
  185. package/dist/client/chunks/KpiText-Iz1vIvu_.js +0 -2
  186. package/dist/client/chunks/RetentionCombinedChart-DIhK5pD8.js.map +0 -1
  187. package/dist/client/chunks/RetentionHeatmap-CyREolyP.js.map +0 -1
  188. package/dist/client/chunks/SchemaVisualization-B1GUT-FM.js +0 -2
  189. package/dist/client/chunks/SchemaVisualizationLazy-DymwT34e.js +0 -2
  190. package/dist/client/chunks/analysis-builder-C1CJ0c7L.js.map +0 -1
  191. package/dist/client/chunks/analysis-builder-shared-rkjJfWLT.js.map +0 -1
  192. package/dist/client/chunks/chart-activity-grid-DLktOINm.js +0 -806
  193. package/dist/client/chunks/chart-activity-grid-DLktOINm.js.map +0 -1
  194. package/dist/client/chunks/chart-area-BwYaflNk.js.map +0 -1
  195. package/dist/client/chunks/chart-bar-BiENfFgE.js.map +0 -1
  196. package/dist/client/chunks/chart-box-plot-BJF1tBXC.js.map +0 -1
  197. package/dist/client/chunks/chart-bubble-DQQhGVDJ.js.map +0 -1
  198. package/dist/client/chunks/chart-candlestick-C2UuXbLe.js +0 -306
  199. package/dist/client/chunks/chart-candlestick-C2UuXbLe.js.map +0 -1
  200. package/dist/client/chunks/chart-config-activity-grid-DJOU3TEz.js +0 -51
  201. package/dist/client/chunks/chart-config-activity-grid-DJOU3TEz.js.map +0 -1
  202. package/dist/client/chunks/chart-config-area-CWnWVT6a.js +0 -93
  203. package/dist/client/chunks/chart-config-area-CWnWVT6a.js.map +0 -1
  204. package/dist/client/chunks/chart-config-bar-C-7Dr1Ho.js +0 -87
  205. package/dist/client/chunks/chart-config-bar-C-7Dr1Ho.js.map +0 -1
  206. package/dist/client/chunks/chart-config-box-plot-mVOwmLdu.js +0 -35
  207. package/dist/client/chunks/chart-config-box-plot-mVOwmLdu.js.map +0 -1
  208. package/dist/client/chunks/chart-config-bubble-BPE2CeiD.js +0 -82
  209. package/dist/client/chunks/chart-config-bubble-BPE2CeiD.js.map +0 -1
  210. package/dist/client/chunks/chart-config-candlestick-BSB9DRy2.js +0 -72
  211. package/dist/client/chunks/chart-config-candlestick-BSB9DRy2.js.map +0 -1
  212. package/dist/client/chunks/chart-config-data-table-Bhdx5Hem.js.map +0 -1
  213. package/dist/client/chunks/chart-config-funnel-Cl-v-bm1.js +0 -93
  214. package/dist/client/chunks/chart-config-funnel-Cl-v-bm1.js.map +0 -1
  215. package/dist/client/chunks/chart-config-gauge-CdrUTJMJ.js +0 -64
  216. package/dist/client/chunks/chart-config-gauge-CdrUTJMJ.js.map +0 -1
  217. package/dist/client/chunks/chart-config-heat-map-DGE3NzoF.js +0 -91
  218. package/dist/client/chunks/chart-config-heat-map-DGE3NzoF.js.map +0 -1
  219. package/dist/client/chunks/chart-config-kpi-delta-DMrQerUW.js +0 -94
  220. package/dist/client/chunks/chart-config-kpi-delta-DMrQerUW.js.map +0 -1
  221. package/dist/client/chunks/chart-config-kpi-number-DCytCytn.js +0 -75
  222. package/dist/client/chunks/chart-config-kpi-number-DCytCytn.js.map +0 -1
  223. package/dist/client/chunks/chart-config-kpi-text-KdKQUvHo.js +0 -47
  224. package/dist/client/chunks/chart-config-kpi-text-KdKQUvHo.js.map +0 -1
  225. package/dist/client/chunks/chart-config-line-Bl9VDAdz.js +0 -104
  226. package/dist/client/chunks/chart-config-line-Bl9VDAdz.js.map +0 -1
  227. package/dist/client/chunks/chart-config-markdown-BX26b94i.js +0 -117
  228. package/dist/client/chunks/chart-config-markdown-BX26b94i.js.map +0 -1
  229. package/dist/client/chunks/chart-config-measure-profile-DwtRhEFh.js +0 -82
  230. package/dist/client/chunks/chart-config-measure-profile-DwtRhEFh.js.map +0 -1
  231. package/dist/client/chunks/chart-config-pie-BzBcqPMJ.js +0 -68
  232. package/dist/client/chunks/chart-config-pie-BzBcqPMJ.js.map +0 -1
  233. package/dist/client/chunks/chart-config-radar-6ZOgt__z.js +0 -49
  234. package/dist/client/chunks/chart-config-radar-6ZOgt__z.js.map +0 -1
  235. package/dist/client/chunks/chart-config-radial-bar-Df6Eta7N.js +0 -38
  236. package/dist/client/chunks/chart-config-radial-bar-Df6Eta7N.js.map +0 -1
  237. package/dist/client/chunks/chart-config-sankey-DgqKBFvN.js +0 -66
  238. package/dist/client/chunks/chart-config-sankey-DgqKBFvN.js.map +0 -1
  239. package/dist/client/chunks/chart-config-scatter-D5nVLDvi.js +0 -61
  240. package/dist/client/chunks/chart-config-scatter-D5nVLDvi.js.map +0 -1
  241. package/dist/client/chunks/chart-config-sunburst-Ca3FX9nW.js +0 -45
  242. package/dist/client/chunks/chart-config-sunburst-Ca3FX9nW.js.map +0 -1
  243. package/dist/client/chunks/chart-config-tree-map-Bjy4QNa3.js +0 -51
  244. package/dist/client/chunks/chart-config-tree-map-Bjy4QNa3.js.map +0 -1
  245. package/dist/client/chunks/chart-config-waterfall-C5K2eqR7.js +0 -59
  246. package/dist/client/chunks/chart-config-waterfall-C5K2eqR7.js.map +0 -1
  247. package/dist/client/chunks/chart-data-table-2iCsn0CF.js.map +0 -1
  248. package/dist/client/chunks/chart-funnel-poyOf7-e.js.map +0 -1
  249. package/dist/client/chunks/chart-gauge-D5J4gRky.js.map +0 -1
  250. package/dist/client/chunks/chart-heat-map-BAMVhLGG.js.map +0 -1
  251. package/dist/client/chunks/chart-kpi-delta-KQjUIeal.js.map +0 -1
  252. package/dist/client/chunks/chart-kpi-number-CsQgV_x3.js +0 -325
  253. package/dist/client/chunks/chart-kpi-number-CsQgV_x3.js.map +0 -1
  254. package/dist/client/chunks/chart-kpi-text-BR0IyeUU.js +0 -148
  255. package/dist/client/chunks/chart-kpi-text-BR0IyeUU.js.map +0 -1
  256. package/dist/client/chunks/chart-line-B5_WntY5.js.map +0 -1
  257. package/dist/client/chunks/chart-markdown-B6bENbel.js +0 -3473
  258. package/dist/client/chunks/chart-markdown-B6bENbel.js.map +0 -1
  259. package/dist/client/chunks/chart-measure-profile-yWk-obNb.js +0 -179
  260. package/dist/client/chunks/chart-measure-profile-yWk-obNb.js.map +0 -1
  261. package/dist/client/chunks/chart-pie-BodrUoHv.js +0 -172
  262. package/dist/client/chunks/chart-pie-BodrUoHv.js.map +0 -1
  263. package/dist/client/chunks/chart-radar-gG3zfLud.js +0 -154
  264. package/dist/client/chunks/chart-radar-gG3zfLud.js.map +0 -1
  265. package/dist/client/chunks/chart-radial-bar-C2IPCV8c.js +0 -148
  266. package/dist/client/chunks/chart-radial-bar-C2IPCV8c.js.map +0 -1
  267. package/dist/client/chunks/chart-sankey-BOyxfG1Q.js.map +0 -1
  268. package/dist/client/chunks/chart-scatter-B8OwlsAX.js +0 -255
  269. package/dist/client/chunks/chart-scatter-B8OwlsAX.js.map +0 -1
  270. package/dist/client/chunks/chart-sunburst-D9lGEOCc.js.map +0 -1
  271. package/dist/client/chunks/chart-tree-map-DZaKy9he.js +0 -298
  272. package/dist/client/chunks/chart-tree-map-DZaKy9he.js.map +0 -1
  273. package/dist/client/chunks/chart-waterfall-BCdUx4DC.js.map +0 -1
  274. package/dist/client/chunks/charts-core-C5Yokk-x.js.map +0 -1
  275. package/dist/client/chunks/schema-visualization-t1KiOORo.js.map +0 -1
  276. package/dist/client/chunks/useDebounce-CKqkM42n.js.map +0 -1
@@ -1,9 +1,9 @@
1
- import { B as e, z as t } from "./chart-data-table-2iCsn0CF.js";
2
- import { _ as n } from "./chart-activity-grid-DLktOINm.js";
3
- import r, { useEffect as i, useRef as a, useState as o } from "react";
4
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
1
+ import { B as e, z as t } from "./chart-data-table-C3Xh9jwL.js";
2
+ import { _ as n, k as r } from "./chart-activity-grid-CWT0gLv4.js";
3
+ import i, { useEffect as a, useRef as o, useState as s } from "react";
4
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
5
  //#region src/client/utils/periodUtils.ts
6
- function l(e, t) {
6
+ function u(e, t) {
7
7
  let n = new Date(e);
8
8
  switch (t.toLowerCase()) {
9
9
  case "day":
@@ -29,14 +29,14 @@ function l(e, t) {
29
29
  }
30
30
  return n;
31
31
  }
32
- function u(e, t, n) {
32
+ function d(e, t, n) {
33
33
  if (!e || !t || !n) return !0;
34
34
  let r = e[t];
35
35
  if (!r) return !0;
36
36
  let i = new Date(r);
37
- return isNaN(i.getTime()) ? !0 : l(i, n) <= /* @__PURE__ */ new Date();
37
+ return isNaN(i.getTime()) ? !0 : u(i, n) <= /* @__PURE__ */ new Date();
38
38
  }
39
- function d(e, t) {
39
+ function f(e, t) {
40
40
  if (!e?.timeDimensions || e.timeDimensions.length === 0) return null;
41
41
  if (t) {
42
42
  let n = e.timeDimensions.find((e) => e.dimension === t || e.dimension?.includes(t) || t?.includes(e.dimension));
@@ -44,7 +44,7 @@ function d(e, t) {
44
44
  }
45
45
  return e.timeDimensions[0]?.granularity || null;
46
46
  }
47
- function f(e, t, n, r, i = !1) {
47
+ function p(e, t, n, r, i = !1) {
48
48
  let a = {
49
49
  filteredData: e,
50
50
  excludedIncompletePeriod: !1,
@@ -52,7 +52,7 @@ function f(e, t, n, r, i = !1) {
52
52
  granularity: null
53
53
  };
54
54
  if (e.length < 2) return a;
55
- let o = d(n, t);
55
+ let o = f(n, t);
56
56
  if (i) return {
57
57
  filteredData: e.slice(0, -1),
58
58
  excludedIncompletePeriod: !1,
@@ -65,7 +65,7 @@ function f(e, t, n, r, i = !1) {
65
65
  };
66
66
  if (!o) return a;
67
67
  let s = e[e.length - 1];
68
- return u(s, t, o) ? {
68
+ return d(s, t, o) ? {
69
69
  ...a,
70
70
  granularity: o
71
71
  } : {
@@ -77,29 +77,29 @@ function f(e, t, n, r, i = !1) {
77
77
  }
78
78
  //#endregion
79
79
  //#region src/client/components/charts/KpiDelta.tsx
80
- function p({ values: e, lastValue: t, positiveColor: n, negativeColor: r, formatValue: i, width: a, height: o }) {
81
- let l = Math.max(10, Math.floor(a / 10)), u = e.length > l ? e.slice(-l) : e, d = u.map((e) => e - t), f = Math.min(...d, 0), p = Math.max(...d, 0);
82
- if (Math.max(Math.abs(f), Math.abs(p)) === 0 || d.length === 0) return /* @__PURE__ */ s("div", {
80
+ function m({ values: e, lastValue: t, positiveColor: n, negativeColor: r, formatValue: i, width: a, height: o }) {
81
+ let s = Math.max(10, Math.floor(a / 10)), u = e.length > s ? e.slice(-s) : e, d = u.map((e) => e - t), f = Math.min(...d, 0), p = Math.max(...d, 0);
82
+ if (Math.max(Math.abs(f), Math.abs(p)) === 0 || d.length === 0) return /* @__PURE__ */ c("div", {
83
83
  className: "dc:flex dc:items-center dc:justify-center bg-dc-bg-secondary dc:rounded-sm dc:border border-dc-border",
84
84
  style: {
85
85
  width: `${a}px`,
86
86
  height: `${o}px`
87
87
  },
88
- children: /* @__PURE__ */ s("span", {
88
+ children: /* @__PURE__ */ c("span", {
89
89
  className: "dc:text-xs text-dc-text-muted",
90
90
  children: "No variance data"
91
91
  })
92
92
  });
93
93
  let m = a - (u.length - 1) * 2, h = Math.max(4, m / u.length), g = p - f, _ = g > 0 ? p / g * 100 : 50;
94
- return /* @__PURE__ */ c("div", {
94
+ return /* @__PURE__ */ l("div", {
95
95
  className: "dc:flex dc:items-center dc:space-x-2",
96
- children: [/* @__PURE__ */ c("div", {
96
+ children: [/* @__PURE__ */ l("div", {
97
97
  className: "dc:relative",
98
98
  style: {
99
99
  width: `${a}px`,
100
100
  height: `${o}px`
101
101
  },
102
- children: [/* @__PURE__ */ s("div", {
102
+ children: [/* @__PURE__ */ c("div", {
103
103
  className: "dc:absolute dc:left-0 dc:right-0",
104
104
  style: {
105
105
  height: "1px",
@@ -108,13 +108,13 @@ function p({ values: e, lastValue: t, positiveColor: n, negativeColor: r, format
108
108
  zIndex: 1
109
109
  }
110
110
  }), d.map((e, t) => {
111
- let a = Math.abs(e) / g, c = Math.max(2, a * (o - 4)), l = e >= 0, d = t === u.length - 1, f = l ? n : r;
112
- return /* @__PURE__ */ s("div", {
111
+ let a = Math.abs(e) / g, s = Math.max(2, a * (o - 4)), l = e >= 0, d = t === u.length - 1, f = l ? n : r;
112
+ return /* @__PURE__ */ c("div", {
113
113
  className: "dc:absolute rounded-xs",
114
114
  style: {
115
115
  left: `${t * (h + 2)}px`,
116
116
  width: `${h}px`,
117
- height: `${c}px`,
117
+ height: `${s}px`,
118
118
  backgroundColor: f,
119
119
  opacity: d ? 1 : .6,
120
120
  ...l ? { bottom: `${100 - _}%` } : { top: `${_}%` },
@@ -123,25 +123,25 @@ function p({ values: e, lastValue: t, positiveColor: n, negativeColor: r, format
123
123
  title: `${i(u[t])}: ${e >= 0 ? "+" : ""}${i(e)} vs current`
124
124
  }, t);
125
125
  })]
126
- }), /* @__PURE__ */ c("div", {
126
+ }), /* @__PURE__ */ l("div", {
127
127
  className: "dc:flex dc:flex-col dc:justify-between dc:text-xs text-dc-text-muted",
128
128
  style: { height: `${o}px` },
129
- children: [/* @__PURE__ */ c("span", { children: ["+", i(p)] }), /* @__PURE__ */ c("span", { children: ["", i(f)] })]
129
+ children: [/* @__PURE__ */ l("span", { children: ["+", i(p)] }), /* @__PURE__ */ l("span", { children: ["", i(f)] })]
130
130
  })]
131
131
  });
132
132
  }
133
- var m = r.memo(function({ data: r, chartConfig: l, displayConfig: u = {}, queryObject: d, height: m = "100%", colorPalette: h }) {
134
- let [g, _] = o(32), [v, y] = o(250), b = a(null), x = a(null), S = n();
135
- if (i(() => {
133
+ var h = i.memo(function({ data: i, chartConfig: u, displayConfig: d = {}, queryObject: f, height: h = "100%", colorPalette: g }) {
134
+ let { t: _ } = r(), [v, y] = s(32), [b, x] = s(250), S = o(null), C = o(null), w = n();
135
+ if (a(() => {
136
136
  let e = () => {
137
- if (b.current) {
138
- let e = b.current.getBoundingClientRect(), t = e.width, n = e.height;
137
+ if (S.current) {
138
+ let e = S.current.getBoundingClientRect(), t = e.width, n = e.height;
139
139
  if (t > 0 && n > 0) {
140
140
  let e = t / 4, r = n / 4;
141
- _(Math.max(28, Math.min(Math.min(e, r), 140))), setTimeout(() => {
142
- if (x.current) {
143
- let e = x.current.getBoundingClientRect().width, n = t - 100, r = Math.max(e, Math.min(n, t * .7));
144
- y(Math.max(100, r));
141
+ y(Math.max(28, Math.min(Math.min(e, r), 140))), setTimeout(() => {
142
+ if (C.current) {
143
+ let e = C.current.getBoundingClientRect().width, n = t - 100, r = Math.max(e, Math.min(n, t * .7));
144
+ x(Math.max(100, r));
145
145
  }
146
146
  }, 10);
147
147
  }
@@ -149,186 +149,186 @@ var m = r.memo(function({ data: r, chartConfig: l, displayConfig: u = {}, queryO
149
149
  }, t = setTimeout(e, 50), n = new ResizeObserver(() => {
150
150
  setTimeout(e, 10);
151
151
  });
152
- return b.current && n.observe(b.current), () => {
152
+ return S.current && n.observe(S.current), () => {
153
153
  clearTimeout(t), n.disconnect();
154
154
  };
155
- }, [r, l]), !r || r.length === 0) return /* @__PURE__ */ s("div", {
155
+ }, [i, u]), !i || i.length === 0) return /* @__PURE__ */ c("div", {
156
156
  className: "dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full",
157
157
  style: {
158
- height: m === "100%" ? "100%" : m,
159
- minHeight: m === "100%" ? "200px" : void 0
158
+ height: h === "100%" ? "100%" : h,
159
+ minHeight: h === "100%" ? "200px" : void 0
160
160
  },
161
- children: /* @__PURE__ */ c("div", {
161
+ children: /* @__PURE__ */ l("div", {
162
162
  className: "dc:text-center text-dc-text-muted",
163
- children: [/* @__PURE__ */ s("div", {
163
+ children: [/* @__PURE__ */ c("div", {
164
164
  className: "dc:text-sm dc:font-semibold dc:mb-1",
165
- children: "No data available"
166
- }), /* @__PURE__ */ s("div", {
165
+ children: _("chart.runtime.noData")
166
+ }), /* @__PURE__ */ c("div", {
167
167
  className: "dc:text-xs text-dc-text-secondary",
168
168
  children: "No data points to display"
169
169
  })]
170
170
  })
171
171
  });
172
- let C = [], w = [];
173
- if (l?.yAxis && (C = Array.isArray(l.yAxis) ? l.yAxis : [l.yAxis]), l?.xAxis && (w = Array.isArray(l.xAxis) ? l.xAxis : [l.xAxis]), C.length === 0) return /* @__PURE__ */ s("div", {
172
+ let T = [], E = [];
173
+ if (u?.yAxis && (T = Array.isArray(u.yAxis) ? u.yAxis : [u.yAxis]), u?.xAxis && (E = Array.isArray(u.xAxis) ? u.xAxis : [u.xAxis]), T.length === 0) return /* @__PURE__ */ c("div", {
174
174
  className: "dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full",
175
175
  style: {
176
- height: m === "100%" ? "100%" : m,
177
- minHeight: m === "100%" ? "200px" : void 0,
176
+ height: h === "100%" ? "100%" : h,
177
+ minHeight: h === "100%" ? "200px" : void 0,
178
178
  backgroundColor: "var(--dc-danger-bg)",
179
179
  color: "var(--dc-danger)",
180
180
  borderColor: "var(--dc-danger-border)"
181
181
  },
182
- children: /* @__PURE__ */ c("div", {
182
+ children: /* @__PURE__ */ l("div", {
183
183
  className: "dc:text-center",
184
- children: [/* @__PURE__ */ s("div", {
184
+ children: [/* @__PURE__ */ c("div", {
185
185
  className: "dc:text-sm dc:font-semibold dc:mb-1",
186
- children: "Configuration Error"
187
- }), /* @__PURE__ */ s("div", {
186
+ children: _("chart.runtime.configError")
187
+ }), /* @__PURE__ */ c("div", {
188
188
  className: "dc:text-xs",
189
- children: "No measure field configured"
189
+ children: _("chart.runtime.configErrorHint.noMeasure")
190
190
  })]
191
191
  })
192
192
  });
193
- let T = C[0], E = w[0], D = [...r];
194
- E && (D = D.sort((e, t) => {
195
- let n = e[E], r = t[E];
193
+ let D = T[0], O = E[0], k = [...i];
194
+ O && (k = k.sort((e, t) => {
195
+ let n = e[O], r = t[O];
196
196
  return n < r ? -1 : n > r ? 1 : 0;
197
197
  }));
198
- let { useLastCompletePeriod: O = !0, skipLastPeriod: k = !1 } = u, { filteredData: A, excludedIncompletePeriod: j, skippedLastPeriod: M, granularity: N } = f(D, E, d, O, k), P = A.map((e) => e[T]).filter((e) => e != null && !isNaN(Number(e))).map((e) => Number(e));
199
- if (P.length < 2) return /* @__PURE__ */ s("div", {
198
+ let { useLastCompletePeriod: A = !0, skipLastPeriod: j = !1 } = d, { filteredData: M, excludedIncompletePeriod: N, skippedLastPeriod: P, granularity: F } = p(k, O, f, A, j), I = M.map((e) => e[D]).filter((e) => e != null && !isNaN(Number(e))).map((e) => Number(e));
199
+ if (I.length < 2) return /* @__PURE__ */ c("div", {
200
200
  className: "dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full",
201
201
  style: {
202
- height: m === "100%" ? "100%" : m,
203
- minHeight: m === "100%" ? "200px" : void 0,
202
+ height: h === "100%" ? "100%" : h,
203
+ minHeight: h === "100%" ? "200px" : void 0,
204
204
  backgroundColor: "var(--dc-warning-bg)",
205
205
  color: "var(--dc-warning)",
206
206
  borderColor: "var(--dc-warning-border)"
207
207
  },
208
- children: /* @__PURE__ */ c("div", {
208
+ children: /* @__PURE__ */ l("div", {
209
209
  className: "dc:text-center",
210
210
  children: [
211
- /* @__PURE__ */ s("div", {
211
+ /* @__PURE__ */ c("div", {
212
212
  className: "dc:text-sm dc:font-semibold dc:mb-1",
213
- children: "Insufficient Data"
213
+ children: _("chart.runtime.kpiDelta.insufficientData")
214
214
  }),
215
- /* @__PURE__ */ s("div", {
215
+ /* @__PURE__ */ c("div", {
216
216
  className: "dc:text-xs",
217
- children: "Delta calculation requires at least 2 data points"
217
+ children: _("chart.runtime.kpiDelta.requiresTwoPoints")
218
218
  }),
219
219
  /* @__PURE__ */ c("div", {
220
220
  className: "dc:text-xs",
221
- children: ["Current data points: ", P.length]
221
+ children: _("chart.runtime.kpiDelta.currentPoints", { count: I.length })
222
222
  })
223
223
  ]
224
224
  })
225
225
  });
226
- let F = P[P.length - 1], I = P[P.length - 2], L = F - I, R = I === 0 ? 0 : L / Math.abs(I) * 100, z = L >= 0, B = (e) => {
227
- if (u.formatValue) return u.formatValue(e);
226
+ let L = I[I.length - 1], R = I[I.length - 2], z = L - R, B = R === 0 ? 0 : z / Math.abs(R) * 100, V = z >= 0, H = (e) => {
227
+ if (d.formatValue) return d.formatValue(e);
228
228
  if (e == null) return "—";
229
- let t = u.decimals ?? 0, n = u.prefix ?? "", r;
229
+ let t = d.decimals ?? 0, n = d.prefix ?? "", r;
230
230
  return r = Math.abs(e) >= 1e9 ? (e / 1e9).toFixed(t) + "B" : Math.abs(e) >= 1e6 ? (e / 1e6).toFixed(t) + "M" : Math.abs(e) >= 1e3 ? (e / 1e3).toFixed(t) + "K" : e.toFixed(t), n + r;
231
- }, V = () => {
232
- if (u.positiveColorIndex !== void 0 && h?.colors) {
233
- let e = u.positiveColorIndex;
234
- if (e >= 0 && e < h.colors.length) return h.colors[e];
231
+ }, U = () => {
232
+ if (d.positiveColorIndex !== void 0 && g?.colors) {
233
+ let e = d.positiveColorIndex;
234
+ if (e >= 0 && e < g.colors.length) return g.colors[e];
235
235
  }
236
236
  return "#10b981";
237
- }, H = () => {
238
- if (u.negativeColorIndex !== void 0 && h?.colors) {
239
- let e = u.negativeColorIndex;
240
- if (e >= 0 && e < h.colors.length) return h.colors[e];
237
+ }, W = () => {
238
+ if (d.negativeColorIndex !== void 0 && g?.colors) {
239
+ let e = d.negativeColorIndex;
240
+ if (e >= 0 && e < g.colors.length) return g.colors[e];
241
241
  }
242
242
  return "#ef4444";
243
- }, U = V(), W = H(), G = z ? U : W;
244
- return /* @__PURE__ */ c("div", {
245
- ref: b,
243
+ }, G = U(), K = W(), q = V ? G : K;
244
+ return /* @__PURE__ */ l("div", {
245
+ ref: S,
246
246
  className: "dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full dc:h-full dc:p-4",
247
247
  style: {
248
- height: m === "100%" ? "100%" : m,
249
- minHeight: m === "100%" ? "200px" : void 0
248
+ height: h === "100%" ? "100%" : h,
249
+ minHeight: h === "100%" ? "200px" : void 0
250
250
  },
251
251
  children: [
252
- /* @__PURE__ */ c("div", {
252
+ /* @__PURE__ */ l("div", {
253
253
  className: "text-dc-text-secondary dc:font-bold dc:text-center dc:mb-2 dc:flex dc:items-center dc:justify-center dc:gap-1",
254
254
  style: {
255
255
  fontSize: "14px",
256
256
  lineHeight: "1.2"
257
257
  },
258
- children: [/* @__PURE__ */ s("span", { children: (() => {
259
- let e = S(T);
260
- return e && e.length > 1 ? e : T;
261
- })() }), (j || M) && /* @__PURE__ */ s("span", {
262
- title: M ? `Excludes last ${N || "period"}` : `Excludes current incomplete ${N}`,
258
+ children: [/* @__PURE__ */ c("span", { children: (() => {
259
+ let e = w(D);
260
+ return e && e.length > 1 ? e : D;
261
+ })() }), (N || P) && /* @__PURE__ */ c("span", {
262
+ title: P ? `Excludes last ${F || "period"}` : `Excludes current incomplete ${F}`,
263
263
  className: "dc:cursor-help",
264
- children: /* @__PURE__ */ s(e, {
264
+ children: /* @__PURE__ */ c(e, {
265
265
  icon: t,
266
266
  className: "dc:w-4 dc:h-4 text-dc-text-muted dc:opacity-70"
267
267
  })
268
268
  })]
269
269
  }),
270
- /* @__PURE__ */ c("div", {
270
+ /* @__PURE__ */ l("div", {
271
271
  className: "dc:flex dc:items-center dc:justify-center dc:space-x-4 dc:mb-2",
272
- children: [/* @__PURE__ */ s("div", {
273
- ref: x,
272
+ children: [/* @__PURE__ */ c("div", {
273
+ ref: C,
274
274
  className: "dc:font-bold dc:leading-none",
275
275
  style: {
276
- fontSize: `${g}px`,
276
+ fontSize: `${v}px`,
277
277
  color: "var(--dc-text)"
278
278
  },
279
- children: B(F)
280
- }), /* @__PURE__ */ c("div", {
279
+ children: H(L)
280
+ }), /* @__PURE__ */ l("div", {
281
281
  className: "dc:flex dc:items-center dc:space-x-1",
282
- children: [/* @__PURE__ */ s("div", {
282
+ children: [/* @__PURE__ */ c("div", {
283
283
  className: "dc:font-bold",
284
284
  style: {
285
- color: G,
286
- fontSize: `${g * .35}px`
285
+ color: q,
286
+ fontSize: `${v * .35}px`
287
287
  },
288
- children: z ? "▲" : "▼"
289
- }), /* @__PURE__ */ c("div", {
288
+ children: V ? "▲" : "▼"
289
+ }), /* @__PURE__ */ l("div", {
290
290
  className: "dc:text-left",
291
- children: [/* @__PURE__ */ c("div", {
291
+ children: [/* @__PURE__ */ l("div", {
292
292
  className: "dc:font-bold dc:leading-tight",
293
293
  style: {
294
- fontSize: `${g * .35}px`,
295
- color: G
294
+ fontSize: `${v * .35}px`,
295
+ color: q
296
296
  },
297
- children: [z ? "+" : "", B(L)]
298
- }), /* @__PURE__ */ c("div", {
297
+ children: [V ? "+" : "", H(z)]
298
+ }), /* @__PURE__ */ l("div", {
299
299
  className: "dc:font-semibold dc:leading-tight",
300
300
  style: {
301
- fontSize: `${g * .28}px`,
302
- color: G,
301
+ fontSize: `${v * .28}px`,
302
+ color: q,
303
303
  opacity: .8
304
304
  },
305
305
  children: [
306
- z ? "+" : "",
307
- R.toFixed(1),
306
+ V ? "+" : "",
307
+ B.toFixed(1),
308
308
  "%"
309
309
  ]
310
310
  })]
311
311
  })]
312
312
  })]
313
313
  }),
314
- u.suffix && !u.formatValue && /* @__PURE__ */ s("div", {
314
+ d.suffix && !d.formatValue && /* @__PURE__ */ c("div", {
315
315
  className: "text-dc-text-muted dc:text-center dc:mb-3",
316
316
  style: {
317
317
  fontSize: "14px",
318
318
  lineHeight: "1.2",
319
319
  opacity: .8
320
320
  },
321
- children: u.suffix
321
+ children: d.suffix
322
322
  }),
323
- u.showHistogram !== !1 && P.length > 2 && /* @__PURE__ */ s("div", {
323
+ d.showHistogram !== !1 && I.length > 2 && /* @__PURE__ */ c("div", {
324
324
  className: "dc:mt-2 dc:w-full dc:flex dc:justify-center dc:overflow-hidden",
325
- children: /* @__PURE__ */ s(p, {
326
- values: P,
327
- lastValue: F,
328
- positiveColor: U,
329
- negativeColor: W,
330
- formatValue: B,
331
- width: v,
325
+ children: /* @__PURE__ */ c(m, {
326
+ values: I,
327
+ lastValue: L,
328
+ positiveColor: G,
329
+ negativeColor: K,
330
+ formatValue: H,
331
+ width: b,
332
332
  height: 64
333
333
  })
334
334
  })
@@ -336,6 +336,6 @@ var m = r.memo(function({ data: r, chartConfig: l, displayConfig: u = {}, queryO
336
336
  });
337
337
  });
338
338
  //#endregion
339
- export { u as a, d as i, f as n, l as r, m as t };
339
+ export { d as a, f as i, p as n, u as r, h as t };
340
340
 
341
- //# sourceMappingURL=chart-kpi-delta-KQjUIeal.js.map
341
+ //# sourceMappingURL=chart-kpi-delta-CYE0S1x_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-kpi-delta-CYE0S1x_.js","names":[],"sources":["../../../src/client/utils/periodUtils.ts","../../../src/client/components/charts/KpiDelta.tsx"],"sourcesContent":["/**\n * Utility functions for detecting incomplete time periods in KPI charts\n */\n\n/**\n * Get the end date of a period based on granularity\n * @param date - The date within the period\n * @param granularity - The time granularity (day, week, month, quarter, year)\n * @returns The end date of the period (end of day)\n */\nexport function getPeriodEndDate(date: Date, granularity: string): Date {\n const endDate = new Date(date)\n\n switch (granularity.toLowerCase()) {\n case 'day':\n // End of the same day\n endDate.setHours(23, 59, 59, 999)\n break\n\n case 'week': {\n // End of the week (Saturday, assuming week starts Sunday)\n const dayOfWeek = endDate.getDay()\n const daysUntilSaturday = 6 - dayOfWeek\n endDate.setDate(endDate.getDate() + daysUntilSaturday)\n endDate.setHours(23, 59, 59, 999)\n break\n }\n\n case 'month':\n // Last day of the month\n endDate.setMonth(endDate.getMonth() + 1, 0) // Set to day 0 of next month = last day of current month\n endDate.setHours(23, 59, 59, 999)\n break\n\n case 'quarter': {\n // Last day of the quarter\n const currentMonth = endDate.getMonth()\n const quarterEndMonth = Math.floor(currentMonth / 3) * 3 + 2 // 0->2, 3->5, 6->8, 9->11\n endDate.setMonth(quarterEndMonth + 1, 0) // Last day of quarter end month\n endDate.setHours(23, 59, 59, 999)\n break\n }\n\n case 'year':\n // December 31st\n endDate.setMonth(11, 31) // December 31\n endDate.setHours(23, 59, 59, 999)\n break\n\n default:\n // Unknown granularity - treat as complete\n endDate.setHours(23, 59, 59, 999)\n }\n\n return endDate\n}\n\n/**\n * Check if the last period in the data is complete based on granularity\n * @param lastDataPoint - The last data point in the sorted dataset\n * @param timeDimensionField - The field name containing the time value\n * @param granularity - The time granularity\n * @returns true if the period is complete, false if it's incomplete\n */\nexport function isLastPeriodComplete(\n lastDataPoint: any,\n timeDimensionField: string,\n granularity: string\n): boolean {\n if (!lastDataPoint || !timeDimensionField || !granularity) {\n return true // Assume complete if we can't determine\n }\n\n const timeValue = lastDataPoint[timeDimensionField]\n if (!timeValue) {\n return true // Assume complete if no time value\n }\n\n // Parse the time value\n const date = new Date(timeValue)\n if (isNaN(date.getTime())) {\n return true // Assume complete if invalid date\n }\n\n // Get the end of this period\n const periodEnd = getPeriodEndDate(date, granularity)\n\n // Compare with current time\n const now = new Date()\n\n // If the period end is in the future, the period is incomplete\n return periodEnd <= now\n}\n\n/**\n * Extract granularity from a query object\n * @param queryObject - The CubeQuery object\n * @param dimensionField - Optional specific dimension field to match\n * @returns The granularity string or null if not found\n */\nexport function getQueryGranularity(\n queryObject: any,\n dimensionField?: string\n): string | null {\n if (!queryObject?.timeDimensions || queryObject.timeDimensions.length === 0) {\n return null\n }\n\n // If a specific dimension field is provided, try to find its granularity\n if (dimensionField) {\n const matchingDim = queryObject.timeDimensions.find((td: any) =>\n td.dimension === dimensionField ||\n td.dimension?.includes(dimensionField) ||\n dimensionField?.includes(td.dimension)\n )\n if (matchingDim?.granularity) {\n return matchingDim.granularity\n }\n }\n\n // Fallback to first time dimension's granularity\n const firstTimeDim = queryObject.timeDimensions[0]\n return firstTimeDim?.granularity || null\n}\n\n/**\n * Filter data to exclude incomplete or last period\n * @param data - The data array sorted by time\n * @param timeDimensionField - The field containing time values\n * @param queryObject - The query object containing timeDimensions\n * @param useLastCompletePeriod - Whether to check for incomplete periods\n * @param skipLastPeriod - Whether to always skip the last period (overrides useLastCompletePeriod)\n * @returns Object with filtered data and whether filtering was applied\n */\nexport function filterIncompletePeriod(\n data: any[],\n timeDimensionField: string | undefined,\n queryObject: any,\n useLastCompletePeriod: boolean,\n skipLastPeriod: boolean = false\n): { filteredData: any[]; excludedIncompletePeriod: boolean; skippedLastPeriod: boolean; granularity: string | null } {\n // Default return - no filtering\n const noFilter = {\n filteredData: data,\n excludedIncompletePeriod: false,\n skippedLastPeriod: false,\n granularity: null\n }\n\n // Need at least 2 data points to filter\n if (data.length < 2) {\n return noFilter\n }\n\n const granularity = getQueryGranularity(queryObject, timeDimensionField)\n\n // If skipLastPeriod is enabled, always skip the last period\n if (skipLastPeriod) {\n return {\n filteredData: data.slice(0, -1),\n excludedIncompletePeriod: false,\n skippedLastPeriod: true,\n granularity\n }\n }\n\n // Skip incomplete period check if feature is disabled\n if (!useLastCompletePeriod) {\n return { ...noFilter, granularity }\n }\n\n // Skip if no time dimension field\n if (!timeDimensionField) {\n return { ...noFilter, granularity }\n }\n\n // Skip if no time dimensions in query\n if (!queryObject?.timeDimensions || queryObject.timeDimensions.length === 0) {\n return { ...noFilter, granularity }\n }\n\n if (!granularity) {\n return noFilter\n }\n\n // Check if last period is incomplete\n const lastRow = data[data.length - 1]\n if (!isLastPeriodComplete(lastRow, timeDimensionField, granularity)) {\n return {\n filteredData: data.slice(0, -1),\n excludedIncompletePeriod: true,\n skippedLastPeriod: false,\n granularity\n }\n }\n\n return { ...noFilter, granularity }\n}\n","import React, { useState, useRef, useEffect } from \"react\";\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { Icon } from \"@iconify/react\";\nimport infoCircleIcon from \"@iconify-icons/tabler/info-circle\";\nimport { useCubeFieldLabel } from \"../../hooks/useCubeFieldLabel\";\nimport { filterIncompletePeriod } from \"../../utils/periodUtils\";\nimport type { ChartProps } from \"../../types\";\n\ninterface VarianceHistogramProps {\n values: number[];\n lastValue: number;\n positiveColor: string;\n negativeColor: string;\n formatValue: (value: number) => string;\n width: number;\n height: number;\n}\n\nfunction VarianceHistogram({\n values,\n lastValue,\n positiveColor,\n negativeColor,\n formatValue,\n width,\n height,\n}: VarianceHistogramProps) {\n // Limit to most recent N values to fit in the histogram\n // Calculate max bars based on width (minimum 8px per bar including gap)\n const maxBars = Math.max(10, Math.floor(width / 10));\n const limitedValues =\n values.length > maxBars\n ? values.slice(-maxBars) // Take the most recent values\n : values;\n\n // Calculate variance (difference) from current/last value for each point\n const variances = limitedValues.map((value) => value - lastValue);\n\n // Find min/max variance for scaling (include 0 as baseline)\n const minVariance = Math.min(...variances, 0);\n const maxVariance = Math.max(...variances, 0);\n const range = Math.max(Math.abs(minVariance), Math.abs(maxVariance));\n\n if (range === 0 || variances.length === 0) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center bg-dc-bg-secondary dc:rounded-sm dc:border border-dc-border\"\n style={{ width: `${width}px`, height: `${height}px` }}\n >\n <span className=\"dc:text-xs text-dc-text-muted\">No variance data</span>\n </div>\n );\n }\n\n // Calculate bar dimensions\n const barGap = 2;\n const availableWidth = width - (limitedValues.length - 1) * barGap;\n const barWidth = Math.max(4, availableWidth / limitedValues.length);\n\n // Calculate where zero line should be positioned (as percentage from top)\n // If maxVariance = 67 and minVariance = -24, total range = 91\n // Zero should be at 67/91 = 73.6% from top\n const totalRange = maxVariance - minVariance;\n const zeroLinePercent =\n totalRange > 0 ? (maxVariance / totalRange) * 100 : 50;\n\n return (\n <div className=\"dc:flex dc:items-center dc:space-x-2\">\n {/* Histogram bars */}\n <div\n className=\"dc:relative\"\n style={{\n width: `${width}px`,\n height: `${height}px`,\n }}\n >\n {/* Zero line (represents current value) */}\n <div\n className=\"dc:absolute dc:left-0 dc:right-0\"\n style={{\n height: \"1px\",\n top: `${zeroLinePercent}%`,\n backgroundColor: \"var(--dc-border)\",\n zIndex: 1,\n }}\n />\n\n {/* Variance bars - oldest to newest (left to right) */}\n {variances.map((variance, index) => {\n // Calculate bar height as proportion of total range\n const normalizedHeight = Math.abs(variance) / totalRange;\n const barHeight = Math.max(2, normalizedHeight * (height - 4));\n const isPositive = variance >= 0;\n const isLastValue = index === limitedValues.length - 1;\n const color = isPositive ? positiveColor : negativeColor;\n const xPosition = index * (barWidth + barGap);\n\n return (\n <div\n key={index}\n className=\"dc:absolute rounded-xs\"\n style={{\n left: `${xPosition}px`,\n width: `${barWidth}px`,\n height: `${barHeight}px`,\n backgroundColor: color,\n opacity: isLastValue ? 1 : 0.6,\n // Position bar relative to zero line\n ...(isPositive\n ? { bottom: `${100 - zeroLinePercent}%` }\n : { top: `${zeroLinePercent}%` }),\n zIndex: 2,\n }}\n title={`${formatValue(limitedValues[index])}: ${variance >= 0 ? \"+\" : \"\"}${formatValue(variance)} vs current`}\n />\n );\n })}\n </div>\n\n {/* Variance labels on the right - show actual value difference */}\n <div\n className=\"dc:flex dc:flex-col dc:justify-between dc:text-xs text-dc-text-muted\"\n style={{ height: `${height}px` }}\n >\n <span>+{formatValue(maxVariance)}</span>\n <span>\n {minVariance < 0 ? \"\" : \"\"}\n {formatValue(minVariance)}\n </span>\n </div>\n </div>\n );\n}\n\nconst KpiDelta = React.memo(function KpiDelta({\n data,\n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette,\n}: ChartProps) {\n const { t } = useTranslation();\n const [fontSize, setFontSize] = useState(32);\n const [textWidth, setTextWidth] = useState(250);\n const containerRef = useRef<HTMLDivElement>(null);\n const valueRef = useRef<HTMLDivElement>(null);\n // Use specialized hook to avoid re-renders from unrelated context changes\n const getFieldLabel = useCubeFieldLabel();\n\n // Calculate font size and text width based on container dimensions\n useEffect(() => {\n const updateDimensions = () => {\n if (containerRef.current) {\n const container = containerRef.current;\n const rect = container.getBoundingClientRect();\n const containerWidth = rect.width;\n const containerHeight = rect.height;\n\n if (containerWidth > 0 && containerHeight > 0) {\n const widthBasedSize = containerWidth / 4;\n const heightBasedSize = containerHeight / 4;\n const baseFontSize = Math.min(widthBasedSize, heightBasedSize);\n const clampedFontSize = Math.max(28, Math.min(baseFontSize, 140));\n setFontSize(clampedFontSize);\n\n setTimeout(() => {\n if (valueRef.current) {\n const textRect = valueRef.current.getBoundingClientRect();\n const measuredWidth = textRect.width;\n // Scale histogram width with container, accounting for labels on the right (~60px)\n const maxHistogramWidth = containerWidth - 100; // Leave room for padding and labels\n const effectiveWidth = Math.max(\n measuredWidth,\n Math.min(maxHistogramWidth, containerWidth * 0.7),\n );\n setTextWidth(Math.max(100, effectiveWidth)); // Minimum 100px\n }\n }, 10);\n }\n }\n };\n\n const timer = setTimeout(updateDimensions, 50);\n\n const resizeObserver = new ResizeObserver(() => {\n setTimeout(updateDimensions, 10);\n });\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n\n return () => {\n clearTimeout(timer);\n resizeObserver.disconnect();\n };\n }, [data, chartConfig]);\n\n if (!data || data.length === 0) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? \"200px\" : undefined,\n }}\n >\n <div className=\"dc:text-center text-dc-text-muted\">\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\">\n No data points to display\n </div>\n </div>\n </div>\n );\n }\n\n // Extract value and dimension fields from chart config\n let valueFields: string[] = [];\n let dimensionFields: string[] = [];\n\n if (chartConfig?.yAxis) {\n valueFields = Array.isArray(chartConfig.yAxis)\n ? chartConfig.yAxis\n : [chartConfig.yAxis];\n }\n\n if (chartConfig?.xAxis) {\n dimensionFields = Array.isArray(chartConfig.xAxis)\n ? chartConfig.xAxis\n : [chartConfig.xAxis];\n }\n\n if (valueFields.length === 0) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? \"200px\" : undefined,\n backgroundColor: \"var(--dc-danger-bg)\",\n color: \"var(--dc-danger)\",\n borderColor: \"var(--dc-danger-border)\",\n }}\n >\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.configError')}</div>\n <div className=\"dc:text-xs\">{t('chart.runtime.configErrorHint.noMeasure')}</div>\n </div>\n </div>\n );\n }\n\n const valueField = valueFields[0];\n const dimensionField = dimensionFields[0]; // Optional\n\n // Sort data by dimension if available (for time series)\n let sortedData = [...data];\n if (dimensionField) {\n sortedData = sortedData.sort((a, b) => {\n const aVal = a[dimensionField];\n const bVal = b[dimensionField];\n if (aVal < bVal) return -1;\n if (aVal > bVal) return 1;\n return 0;\n });\n }\n\n // Filter out incomplete or last period if enabled\n const { useLastCompletePeriod = true, skipLastPeriod = false } =\n displayConfig;\n const {\n filteredData,\n excludedIncompletePeriod,\n skippedLastPeriod,\n granularity,\n } = filterIncompletePeriod(\n sortedData,\n dimensionField,\n queryObject,\n useLastCompletePeriod,\n skipLastPeriod,\n );\n\n // Use filtered data for calculations\n const dataToUse = filteredData;\n\n // Extract values from filtered data\n const values = dataToUse\n .map((row) => row[valueField])\n .filter((val) => val !== null && val !== undefined && !isNaN(Number(val)))\n .map((val) => Number(val));\n\n if (values.length < 2) {\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? \"200px\" : undefined,\n backgroundColor: \"var(--dc-warning-bg)\",\n color: \"var(--dc-warning)\",\n borderColor: \"var(--dc-warning-border)\",\n }}\n >\n <div className=\"dc:text-center\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">{t('chart.runtime.kpiDelta.insufficientData')}</div>\n <div className=\"dc:text-xs\">\n {t('chart.runtime.kpiDelta.requiresTwoPoints')}\n </div>\n <div className=\"dc:text-xs\">{t('chart.runtime.kpiDelta.currentPoints', { count: values.length })}</div>\n </div>\n </div>\n );\n }\n\n // Calculate delta between last and second-last values\n const lastValue = values[values.length - 1];\n const secondLastValue = values[values.length - 2];\n const absoluteChange = lastValue - secondLastValue;\n const percentageChange =\n secondLastValue !== 0\n ? (absoluteChange / Math.abs(secondLastValue)) * 100\n : 0;\n\n const isPositiveChange = absoluteChange >= 0;\n\n // Format number with appropriate units and decimals\n const formatNumber = (value: number | null | undefined): string => {\n // If custom formatValue is provided, use it exclusively\n if (displayConfig.formatValue) {\n return displayConfig.formatValue(value);\n }\n\n // Null handling: Show placeholder for missing data\n if (value === null || value === undefined) {\n return \"—\";\n }\n\n const decimals = displayConfig.decimals ?? 0;\n const prefix = displayConfig.prefix ?? \"\";\n\n let formattedValue: string;\n\n if (Math.abs(value) >= 1e9) {\n formattedValue = (value / 1e9).toFixed(decimals) + \"B\";\n } else if (Math.abs(value) >= 1e6) {\n formattedValue = (value / 1e6).toFixed(decimals) + \"M\";\n } else if (Math.abs(value) >= 1e3) {\n formattedValue = (value / 1e3).toFixed(decimals) + \"K\";\n } else {\n formattedValue = value.toFixed(decimals);\n }\n\n return prefix + formattedValue;\n };\n\n // Get colors from palette\n const getPositiveColor = (): string => {\n if (\n displayConfig.positiveColorIndex !== undefined &&\n colorPalette?.colors\n ) {\n const colorIndex = displayConfig.positiveColorIndex;\n if (colorIndex >= 0 && colorIndex < colorPalette.colors.length) {\n return colorPalette.colors[colorIndex];\n }\n }\n return \"#10b981\"; // Default green\n };\n\n const getNegativeColor = (): string => {\n if (\n displayConfig.negativeColorIndex !== undefined &&\n colorPalette?.colors\n ) {\n const colorIndex = displayConfig.negativeColorIndex;\n if (colorIndex >= 0 && colorIndex < colorPalette.colors.length) {\n return colorPalette.colors[colorIndex];\n }\n }\n return \"#ef4444\"; // Default red\n };\n\n const positiveColor = getPositiveColor();\n const negativeColor = getNegativeColor();\n const currentColor = isPositiveChange ? positiveColor : negativeColor;\n\n return (\n <div\n ref={containerRef}\n className=\"dc:flex dc:flex-col dc:items-center dc:justify-center dc:w-full dc:h-full dc:p-4\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? \"200px\" : undefined,\n }}\n >\n {/* Field Label */}\n <div\n className=\"text-dc-text-secondary dc:font-bold dc:text-center dc:mb-2 dc:flex dc:items-center dc:justify-center dc:gap-1\"\n style={{\n fontSize: \"14px\",\n lineHeight: \"1.2\",\n }}\n >\n <span>\n {(() => {\n const label = getFieldLabel(valueField);\n return label && label.length > 1 ? label : valueField;\n })()}\n </span>\n {(excludedIncompletePeriod || skippedLastPeriod) && (\n <span\n title={\n skippedLastPeriod\n ? `Excludes last ${granularity || \"period\"}`\n : `Excludes current incomplete ${granularity}`\n }\n className=\"dc:cursor-help\"\n >\n <Icon\n icon={infoCircleIcon}\n className=\"dc:w-4 dc:h-4 text-dc-text-muted dc:opacity-70\"\n />\n </span>\n )}\n </div>\n\n {/* Main KPI Value and Delta */}\n <div className=\"dc:flex dc:items-center dc:justify-center dc:space-x-4 dc:mb-2\">\n {/* Main KPI Value */}\n <div\n ref={valueRef}\n className=\"dc:font-bold dc:leading-none\"\n style={{\n fontSize: `${fontSize}px`,\n color: \"var(--dc-text)\", // Keep main value neutral\n }}\n >\n {formatNumber(lastValue)}\n </div>\n\n {/* Delta Information */}\n <div className=\"dc:flex dc:items-center dc:space-x-1\">\n {/* Arrow */}\n <div\n className=\"dc:font-bold\"\n style={{\n color: currentColor,\n fontSize: `${fontSize * 0.35}px`,\n }}\n >\n {isPositiveChange ? \"▲\" : \"▼\"}\n </div>\n\n {/* Delta Values */}\n <div className=\"dc:text-left\">\n <div\n className=\"dc:font-bold dc:leading-tight\"\n style={{\n fontSize: `${fontSize * 0.35}px`,\n color: currentColor,\n }}\n >\n {isPositiveChange ? \"+\" : \"\"}\n {formatNumber(absoluteChange)}\n </div>\n <div\n className=\"dc:font-semibold dc:leading-tight\"\n style={{\n fontSize: `${fontSize * 0.28}px`,\n color: currentColor,\n opacity: 0.8,\n }}\n >\n {isPositiveChange ? \"+\" : \"\"}\n {percentageChange.toFixed(1)}%\n </div>\n </div>\n </div>\n </div>\n\n {/* Unit/Suffix (hidden when formatValue is provided) */}\n {displayConfig.suffix && !displayConfig.formatValue && (\n <div\n className=\"text-dc-text-muted dc:text-center dc:mb-3\"\n style={{\n fontSize: \"14px\",\n lineHeight: \"1.2\",\n opacity: 0.8,\n }}\n >\n {displayConfig.suffix}\n </div>\n )}\n\n {/* Variance Histogram */}\n {displayConfig.showHistogram !== false && values.length > 2 && (\n <div className=\"dc:mt-2 dc:w-full dc:flex dc:justify-center dc:overflow-hidden\">\n <VarianceHistogram\n values={values}\n lastValue={lastValue}\n positiveColor={positiveColor}\n negativeColor={negativeColor}\n formatValue={formatNumber}\n width={textWidth}\n height={64}\n />\n </div>\n )}\n </div>\n );\n})\n\nexport default KpiDelta\n"],"mappings":"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"}