@kubit-ui-web/react-charts 1.1.0 → 1.3.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 (257) hide show
  1. package/README.md +96 -0
  2. package/dist/cjs/charts/barChart/barChart.type.d.ts +4 -0
  3. package/dist/cjs/charts/barChart/barChart.type.d.ts.map +1 -1
  4. package/dist/cjs/charts/barChart/barChartStructure.d.ts.map +1 -1
  5. package/dist/cjs/charts/barChart/barChartStructure.js +9 -2
  6. package/dist/cjs/charts/barChart/context/buildBarContextValues.d.ts +3 -1
  7. package/dist/cjs/charts/barChart/context/buildBarContextValues.d.ts.map +1 -1
  8. package/dist/cjs/charts/barChart/context/buildBarContextValues.js +177 -16
  9. package/dist/cjs/charts/barChart/fragments/barChartPath.d.ts +6 -0
  10. package/dist/cjs/charts/barChart/fragments/barChartPath.d.ts.map +1 -1
  11. package/dist/cjs/charts/barChart/fragments/barChartPath.js +38 -4
  12. package/dist/cjs/charts/barChart/fragments/barChartSeparator.d.ts.map +1 -1
  13. package/dist/cjs/charts/barChart/fragments/barChartSeparator.js +52 -2
  14. package/dist/cjs/charts/barChart/fragments/barChartXAxis.d.ts.map +1 -1
  15. package/dist/cjs/charts/barChart/fragments/barChartXAxis.js +2 -1
  16. package/dist/cjs/charts/barChart/fragments/barChartYAxis.d.ts.map +1 -1
  17. package/dist/cjs/charts/barChart/fragments/barChartYAxis.js +2 -1
  18. package/dist/cjs/charts/barChart/fragments/fixture/barContextData.d.ts.map +1 -1
  19. package/dist/cjs/charts/barChart/fragments/fixture/barContextData.js +1 -0
  20. package/dist/cjs/charts/barChart/utils/getBarDataValue.d.ts.map +1 -1
  21. package/dist/cjs/charts/barChart/utils/getBarDataValue.js +5 -0
  22. package/dist/cjs/charts/constants/chartDefaults.d.ts +77 -0
  23. package/dist/cjs/charts/constants/chartDefaults.d.ts.map +1 -0
  24. package/dist/cjs/charts/constants/chartDefaults.js +76 -0
  25. package/dist/cjs/charts/lineChart/context/buildLineContextValue.d.ts +3 -1
  26. package/dist/cjs/charts/lineChart/context/buildLineContextValue.d.ts.map +1 -1
  27. package/dist/cjs/charts/lineChart/context/buildLineContextValue.js +162 -46
  28. package/dist/cjs/charts/lineChart/fragments/fixture/contextData.d.ts +1 -0
  29. package/dist/cjs/charts/lineChart/fragments/fixture/contextData.d.ts.map +1 -1
  30. package/dist/cjs/charts/lineChart/fragments/fixture/contextData.js +1 -0
  31. package/dist/cjs/charts/lineChart/fragments/lineChartPath.d.ts.map +1 -1
  32. package/dist/cjs/charts/lineChart/fragments/lineChartPath.js +34 -1
  33. package/dist/cjs/charts/lineChart/fragments/lineChartProjection.d.ts +1 -1
  34. package/dist/cjs/charts/lineChart/fragments/lineChartProjection.d.ts.map +1 -1
  35. package/dist/cjs/charts/lineChart/fragments/lineChartProjection.js +44 -0
  36. package/dist/cjs/charts/lineChart/fragments/lineChartSeparator.d.ts.map +1 -1
  37. package/dist/cjs/charts/lineChart/fragments/lineChartSeparator.js +52 -2
  38. package/dist/cjs/charts/lineChart/lineChart.type.d.ts +2 -1
  39. package/dist/cjs/charts/lineChart/lineChart.type.d.ts.map +1 -1
  40. package/dist/cjs/charts/lineChart/lineChartStructure.d.ts.map +1 -1
  41. package/dist/cjs/charts/lineChart/lineChartStructure.js +15 -11
  42. package/dist/cjs/components/zoomArea/hooks/useResponsiveCanvas.d.ts.map +1 -1
  43. package/dist/cjs/components/zoomArea/hooks/useResponsiveCanvas.js +6 -1
  44. package/dist/cjs/types/errors.type.d.ts +14 -1
  45. package/dist/cjs/types/errors.type.d.ts.map +1 -1
  46. package/dist/cjs/types/errors.type.js +18 -0
  47. package/dist/cjs/utils/buildErrors/buildErrors.d.ts +63 -0
  48. package/dist/cjs/utils/buildErrors/buildErrors.d.ts.map +1 -1
  49. package/dist/cjs/utils/buildErrors/buildErrors.js +32 -0
  50. package/dist/cjs/utils/buildErrors/charts/buildBarChartErrors.d.ts +17 -0
  51. package/dist/cjs/utils/buildErrors/charts/buildBarChartErrors.d.ts.map +1 -0
  52. package/dist/cjs/utils/buildErrors/charts/buildBarChartErrors.js +16 -0
  53. package/dist/cjs/utils/buildErrors/charts/buildLineChartErrors.d.ts +13 -0
  54. package/dist/cjs/utils/buildErrors/charts/buildLineChartErrors.d.ts.map +1 -0
  55. package/dist/cjs/utils/buildErrors/charts/buildLineChartErrors.js +12 -0
  56. package/dist/cjs/utils/buildErrors/constants/errorMessages/barChartErrorMessages.d.ts +19 -0
  57. package/dist/cjs/utils/buildErrors/constants/errorMessages/barChartErrorMessages.d.ts.map +1 -0
  58. package/dist/cjs/utils/buildErrors/constants/errorMessages/barChartErrorMessages.js +23 -0
  59. package/dist/cjs/utils/buildErrors/constants/errorMessages/lineChartErrorMessages.d.ts +25 -0
  60. package/dist/cjs/utils/buildErrors/constants/errorMessages/lineChartErrorMessages.d.ts.map +1 -0
  61. package/dist/cjs/utils/buildErrors/constants/errorMessages/lineChartErrorMessages.js +29 -0
  62. package/dist/cjs/utils/buildErrors/constants/errors/barChartErrors.d.ts +20 -0
  63. package/dist/cjs/utils/buildErrors/constants/errors/barChartErrors.d.ts.map +1 -0
  64. package/dist/cjs/utils/buildErrors/constants/errors/barChartErrors.js +28 -0
  65. package/dist/cjs/utils/buildErrors/constants/errors/lineChartErrors.d.ts +26 -0
  66. package/dist/cjs/utils/buildErrors/constants/errors/lineChartErrors.d.ts.map +1 -0
  67. package/dist/cjs/utils/buildErrors/constants/errors/lineChartErrors.js +34 -0
  68. package/dist/cjs/utils/buildErrors/index.d.ts +2 -0
  69. package/dist/cjs/utils/buildErrors/index.d.ts.map +1 -0
  70. package/dist/cjs/utils/buildErrors/index.js +2 -0
  71. package/dist/cjs/utils/createErrorAccumulator/createErrorAccumulator.d.ts +7 -0
  72. package/dist/cjs/utils/createErrorAccumulator/createErrorAccumulator.d.ts.map +1 -0
  73. package/dist/cjs/utils/createErrorAccumulator/createErrorAccumulator.js +54 -0
  74. package/dist/cjs/utils/createErrorAccumulator/index.d.ts +2 -0
  75. package/dist/cjs/utils/createErrorAccumulator/index.d.ts.map +1 -0
  76. package/dist/cjs/utils/createErrorAccumulator/index.js +1 -0
  77. package/dist/cjs/utils/cssGradientToSvg/cssGradientToSvg.d.ts.map +1 -1
  78. package/dist/cjs/utils/cssGradientToSvg/cssGradientToSvg.js +2 -2
  79. package/dist/cjs/utils/getCanvasDimensions/getCanvasDimensions.d.ts.map +1 -1
  80. package/dist/cjs/utils/getCanvasDimensions/getCanvasDimensions.js +13 -2
  81. package/dist/cjs/utils/index.d.ts +2 -0
  82. package/dist/cjs/utils/index.d.ts.map +1 -1
  83. package/dist/cjs/utils/index.js +2 -0
  84. package/dist/cjs/utils/logger/index.d.ts +2 -0
  85. package/dist/cjs/utils/logger/index.d.ts.map +1 -0
  86. package/dist/cjs/utils/logger/index.js +1 -0
  87. package/dist/cjs/utils/logger/logger.d.ts +45 -0
  88. package/dist/cjs/utils/logger/logger.d.ts.map +1 -0
  89. package/dist/cjs/utils/logger/logger.js +140 -0
  90. package/dist/cjs/utils/ssr/index.d.ts +2 -0
  91. package/dist/cjs/utils/ssr/index.d.ts.map +1 -0
  92. package/dist/cjs/utils/ssr/index.js +1 -0
  93. package/dist/cjs/utils/ssr/ssr.d.ts +80 -0
  94. package/dist/cjs/utils/ssr/ssr.d.ts.map +1 -0
  95. package/dist/cjs/utils/ssr/ssr.js +117 -0
  96. package/dist/cjs/utils/textBound/textBound.d.ts.map +1 -1
  97. package/dist/cjs/utils/textBound/textBound.js +17 -5
  98. package/dist/esm/charts/barChart/barChart.type.d.ts +4 -0
  99. package/dist/esm/charts/barChart/barChart.type.d.ts.map +1 -1
  100. package/dist/esm/charts/barChart/barChartStructure.d.ts.map +1 -1
  101. package/dist/esm/charts/barChart/barChartStructure.js +9 -2
  102. package/dist/esm/charts/barChart/context/buildBarContextValues.d.ts +3 -1
  103. package/dist/esm/charts/barChart/context/buildBarContextValues.d.ts.map +1 -1
  104. package/dist/esm/charts/barChart/context/buildBarContextValues.js +177 -16
  105. package/dist/esm/charts/barChart/fragments/barChartPath.d.ts +6 -0
  106. package/dist/esm/charts/barChart/fragments/barChartPath.d.ts.map +1 -1
  107. package/dist/esm/charts/barChart/fragments/barChartPath.js +38 -4
  108. package/dist/esm/charts/barChart/fragments/barChartSeparator.d.ts.map +1 -1
  109. package/dist/esm/charts/barChart/fragments/barChartSeparator.js +52 -2
  110. package/dist/esm/charts/barChart/fragments/barChartXAxis.d.ts.map +1 -1
  111. package/dist/esm/charts/barChart/fragments/barChartXAxis.js +2 -1
  112. package/dist/esm/charts/barChart/fragments/barChartYAxis.d.ts.map +1 -1
  113. package/dist/esm/charts/barChart/fragments/barChartYAxis.js +2 -1
  114. package/dist/esm/charts/barChart/fragments/fixture/barContextData.d.ts.map +1 -1
  115. package/dist/esm/charts/barChart/fragments/fixture/barContextData.js +1 -0
  116. package/dist/esm/charts/barChart/utils/getBarDataValue.d.ts.map +1 -1
  117. package/dist/esm/charts/barChart/utils/getBarDataValue.js +5 -0
  118. package/dist/esm/charts/constants/chartDefaults.d.ts +77 -0
  119. package/dist/esm/charts/constants/chartDefaults.d.ts.map +1 -0
  120. package/dist/esm/charts/constants/chartDefaults.js +76 -0
  121. package/dist/esm/charts/lineChart/context/buildLineContextValue.d.ts +3 -1
  122. package/dist/esm/charts/lineChart/context/buildLineContextValue.d.ts.map +1 -1
  123. package/dist/esm/charts/lineChart/context/buildLineContextValue.js +162 -46
  124. package/dist/esm/charts/lineChart/fragments/fixture/contextData.d.ts +1 -0
  125. package/dist/esm/charts/lineChart/fragments/fixture/contextData.d.ts.map +1 -1
  126. package/dist/esm/charts/lineChart/fragments/fixture/contextData.js +1 -0
  127. package/dist/esm/charts/lineChart/fragments/lineChartPath.d.ts.map +1 -1
  128. package/dist/esm/charts/lineChart/fragments/lineChartPath.js +34 -1
  129. package/dist/esm/charts/lineChart/fragments/lineChartProjection.d.ts +1 -1
  130. package/dist/esm/charts/lineChart/fragments/lineChartProjection.d.ts.map +1 -1
  131. package/dist/esm/charts/lineChart/fragments/lineChartProjection.js +44 -0
  132. package/dist/esm/charts/lineChart/fragments/lineChartSeparator.d.ts.map +1 -1
  133. package/dist/esm/charts/lineChart/fragments/lineChartSeparator.js +52 -2
  134. package/dist/esm/charts/lineChart/lineChart.type.d.ts +2 -1
  135. package/dist/esm/charts/lineChart/lineChart.type.d.ts.map +1 -1
  136. package/dist/esm/charts/lineChart/lineChartStructure.d.ts.map +1 -1
  137. package/dist/esm/charts/lineChart/lineChartStructure.js +15 -11
  138. package/dist/esm/components/zoomArea/hooks/useResponsiveCanvas.d.ts.map +1 -1
  139. package/dist/esm/components/zoomArea/hooks/useResponsiveCanvas.js +6 -1
  140. package/dist/esm/types/errors.type.d.ts +14 -1
  141. package/dist/esm/types/errors.type.d.ts.map +1 -1
  142. package/dist/esm/types/errors.type.js +18 -0
  143. package/dist/esm/utils/buildErrors/buildErrors.d.ts +63 -0
  144. package/dist/esm/utils/buildErrors/buildErrors.d.ts.map +1 -1
  145. package/dist/esm/utils/buildErrors/buildErrors.js +32 -0
  146. package/dist/esm/utils/buildErrors/charts/buildBarChartErrors.d.ts +17 -0
  147. package/dist/esm/utils/buildErrors/charts/buildBarChartErrors.d.ts.map +1 -0
  148. package/dist/esm/utils/buildErrors/charts/buildBarChartErrors.js +16 -0
  149. package/dist/esm/utils/buildErrors/charts/buildLineChartErrors.d.ts +13 -0
  150. package/dist/esm/utils/buildErrors/charts/buildLineChartErrors.d.ts.map +1 -0
  151. package/dist/esm/utils/buildErrors/charts/buildLineChartErrors.js +12 -0
  152. package/dist/esm/utils/buildErrors/constants/errorMessages/barChartErrorMessages.d.ts +19 -0
  153. package/dist/esm/utils/buildErrors/constants/errorMessages/barChartErrorMessages.d.ts.map +1 -0
  154. package/dist/esm/utils/buildErrors/constants/errorMessages/barChartErrorMessages.js +23 -0
  155. package/dist/esm/utils/buildErrors/constants/errorMessages/lineChartErrorMessages.d.ts +25 -0
  156. package/dist/esm/utils/buildErrors/constants/errorMessages/lineChartErrorMessages.d.ts.map +1 -0
  157. package/dist/esm/utils/buildErrors/constants/errorMessages/lineChartErrorMessages.js +29 -0
  158. package/dist/esm/utils/buildErrors/constants/errors/barChartErrors.d.ts +20 -0
  159. package/dist/esm/utils/buildErrors/constants/errors/barChartErrors.d.ts.map +1 -0
  160. package/dist/esm/utils/buildErrors/constants/errors/barChartErrors.js +28 -0
  161. package/dist/esm/utils/buildErrors/constants/errors/lineChartErrors.d.ts +26 -0
  162. package/dist/esm/utils/buildErrors/constants/errors/lineChartErrors.d.ts.map +1 -0
  163. package/dist/esm/utils/buildErrors/constants/errors/lineChartErrors.js +34 -0
  164. package/dist/esm/utils/buildErrors/index.d.ts +2 -0
  165. package/dist/esm/utils/buildErrors/index.d.ts.map +1 -0
  166. package/dist/esm/utils/buildErrors/index.js +2 -0
  167. package/dist/esm/utils/createErrorAccumulator/createErrorAccumulator.d.ts +7 -0
  168. package/dist/esm/utils/createErrorAccumulator/createErrorAccumulator.d.ts.map +1 -0
  169. package/dist/esm/utils/createErrorAccumulator/createErrorAccumulator.js +54 -0
  170. package/dist/esm/utils/createErrorAccumulator/index.d.ts +2 -0
  171. package/dist/esm/utils/createErrorAccumulator/index.d.ts.map +1 -0
  172. package/dist/esm/utils/createErrorAccumulator/index.js +1 -0
  173. package/dist/esm/utils/cssGradientToSvg/cssGradientToSvg.d.ts.map +1 -1
  174. package/dist/esm/utils/cssGradientToSvg/cssGradientToSvg.js +2 -2
  175. package/dist/esm/utils/getCanvasDimensions/getCanvasDimensions.d.ts.map +1 -1
  176. package/dist/esm/utils/getCanvasDimensions/getCanvasDimensions.js +13 -2
  177. package/dist/esm/utils/index.d.ts +2 -0
  178. package/dist/esm/utils/index.d.ts.map +1 -1
  179. package/dist/esm/utils/index.js +2 -0
  180. package/dist/esm/utils/logger/index.d.ts +2 -0
  181. package/dist/esm/utils/logger/index.d.ts.map +1 -0
  182. package/dist/esm/utils/logger/index.js +1 -0
  183. package/dist/esm/utils/logger/logger.d.ts +45 -0
  184. package/dist/esm/utils/logger/logger.d.ts.map +1 -0
  185. package/dist/esm/utils/logger/logger.js +140 -0
  186. package/dist/esm/utils/ssr/index.d.ts +2 -0
  187. package/dist/esm/utils/ssr/index.d.ts.map +1 -0
  188. package/dist/esm/utils/ssr/index.js +1 -0
  189. package/dist/esm/utils/ssr/ssr.d.ts +80 -0
  190. package/dist/esm/utils/ssr/ssr.d.ts.map +1 -0
  191. package/dist/esm/utils/ssr/ssr.js +117 -0
  192. package/dist/esm/utils/textBound/textBound.d.ts.map +1 -1
  193. package/dist/esm/utils/textBound/textBound.js +17 -5
  194. package/dist/kubit-ui-web-react-charts.cjs.js +1 -1
  195. package/dist/kubit-ui-web-react-charts.es.js +1 -1
  196. package/dist/kubit-ui-web-react-charts.umd.js +1 -1
  197. package/dist/types/charts/barChart/barChart.type.d.ts +4 -0
  198. package/dist/types/charts/barChart/barChart.type.d.ts.map +1 -1
  199. package/dist/types/charts/barChart/barChartStructure.d.ts.map +1 -1
  200. package/dist/types/charts/barChart/context/buildBarContextValues.d.ts +3 -1
  201. package/dist/types/charts/barChart/context/buildBarContextValues.d.ts.map +1 -1
  202. package/dist/types/charts/barChart/fragments/barChartPath.d.ts +6 -0
  203. package/dist/types/charts/barChart/fragments/barChartPath.d.ts.map +1 -1
  204. package/dist/types/charts/barChart/fragments/barChartSeparator.d.ts.map +1 -1
  205. package/dist/types/charts/barChart/fragments/barChartXAxis.d.ts.map +1 -1
  206. package/dist/types/charts/barChart/fragments/barChartYAxis.d.ts.map +1 -1
  207. package/dist/types/charts/barChart/fragments/fixture/barContextData.d.ts.map +1 -1
  208. package/dist/types/charts/barChart/utils/getBarDataValue.d.ts.map +1 -1
  209. package/dist/types/charts/constants/chartDefaults.d.ts +77 -0
  210. package/dist/types/charts/constants/chartDefaults.d.ts.map +1 -0
  211. package/dist/types/charts/lineChart/context/buildLineContextValue.d.ts +3 -1
  212. package/dist/types/charts/lineChart/context/buildLineContextValue.d.ts.map +1 -1
  213. package/dist/types/charts/lineChart/fragments/fixture/contextData.d.ts +1 -0
  214. package/dist/types/charts/lineChart/fragments/fixture/contextData.d.ts.map +1 -1
  215. package/dist/types/charts/lineChart/fragments/lineChartPath.d.ts.map +1 -1
  216. package/dist/types/charts/lineChart/fragments/lineChartProjection.d.ts.map +1 -1
  217. package/dist/types/charts/lineChart/fragments/lineChartSeparator.d.ts.map +1 -1
  218. package/dist/types/charts/lineChart/lineChart.type.d.ts +2 -1
  219. package/dist/types/charts/lineChart/lineChart.type.d.ts.map +1 -1
  220. package/dist/types/charts/lineChart/lineChartStructure.d.ts.map +1 -1
  221. package/dist/types/components/zoomArea/hooks/useResponsiveCanvas.d.ts.map +1 -1
  222. package/dist/types/types/errors.type.d.ts +14 -1
  223. package/dist/types/types/errors.type.d.ts.map +1 -1
  224. package/dist/types/utils/buildErrors/buildErrors.d.ts +63 -0
  225. package/dist/types/utils/buildErrors/buildErrors.d.ts.map +1 -1
  226. package/dist/types/utils/buildErrors/charts/buildBarChartErrors.d.ts +17 -0
  227. package/dist/types/utils/buildErrors/charts/buildBarChartErrors.d.ts.map +1 -0
  228. package/dist/types/utils/buildErrors/charts/buildLineChartErrors.d.ts +13 -0
  229. package/dist/types/utils/buildErrors/charts/buildLineChartErrors.d.ts.map +1 -0
  230. package/dist/types/utils/buildErrors/constants/errorMessages/barChartErrorMessages.d.ts +19 -0
  231. package/dist/types/utils/buildErrors/constants/errorMessages/barChartErrorMessages.d.ts.map +1 -0
  232. package/dist/types/utils/buildErrors/constants/errorMessages/lineChartErrorMessages.d.ts +25 -0
  233. package/dist/types/utils/buildErrors/constants/errorMessages/lineChartErrorMessages.d.ts.map +1 -0
  234. package/dist/types/utils/buildErrors/constants/errors/barChartErrors.d.ts +20 -0
  235. package/dist/types/utils/buildErrors/constants/errors/barChartErrors.d.ts.map +1 -0
  236. package/dist/types/utils/buildErrors/constants/errors/lineChartErrors.d.ts +26 -0
  237. package/dist/types/utils/buildErrors/constants/errors/lineChartErrors.d.ts.map +1 -0
  238. package/dist/types/utils/buildErrors/index.d.ts +2 -0
  239. package/dist/types/utils/buildErrors/index.d.ts.map +1 -0
  240. package/dist/types/utils/createErrorAccumulator/createErrorAccumulator.d.ts +7 -0
  241. package/dist/types/utils/createErrorAccumulator/createErrorAccumulator.d.ts.map +1 -0
  242. package/dist/types/utils/createErrorAccumulator/index.d.ts +2 -0
  243. package/dist/types/utils/createErrorAccumulator/index.d.ts.map +1 -0
  244. package/dist/types/utils/cssGradientToSvg/cssGradientToSvg.d.ts.map +1 -1
  245. package/dist/types/utils/getCanvasDimensions/getCanvasDimensions.d.ts.map +1 -1
  246. package/dist/types/utils/index.d.ts +2 -0
  247. package/dist/types/utils/index.d.ts.map +1 -1
  248. package/dist/types/utils/logger/index.d.ts +2 -0
  249. package/dist/types/utils/logger/index.d.ts.map +1 -0
  250. package/dist/types/utils/logger/logger.d.ts +45 -0
  251. package/dist/types/utils/logger/logger.d.ts.map +1 -0
  252. package/dist/types/utils/ssr/index.d.ts +2 -0
  253. package/dist/types/utils/ssr/index.d.ts.map +1 -0
  254. package/dist/types/utils/ssr/ssr.d.ts +80 -0
  255. package/dist/types/utils/ssr/ssr.d.ts.map +1 -0
  256. package/dist/types/utils/textBound/textBound.d.ts.map +1 -1
  257. package/package.json +5 -5
@@ -0,0 +1,80 @@
1
+ /**
2
+ * SSR (Server-Side Rendering) utilities
3
+ *
4
+ * Provides safe access to browser APIs when rendering on the server.
5
+ * Compatible with Next.js, Remix, Gatsby, and other SSR frameworks.
6
+ */
7
+ /**
8
+ * Check if code is running in a browser environment
9
+ * @returns true if window is defined (browser), false otherwise (SSR)
10
+ */
11
+ export declare const isBrowser: () => boolean;
12
+ /**
13
+ * Check if code is running in a server environment
14
+ * @returns true if running on server (no window), false otherwise
15
+ */
16
+ export declare const isServer: () => boolean;
17
+ /**
18
+ * Safely access window object
19
+ * @returns window object if in browser, undefined if on server
20
+ */
21
+ export declare const safeWindow: () => Window | undefined;
22
+ /**
23
+ * Safely access document object
24
+ * @returns document object if in browser, undefined if on server
25
+ */
26
+ export declare const safeDocument: () => Document | undefined;
27
+ /**
28
+ * Safely execute code that requires browser APIs
29
+ * Returns undefined on server, executes callback in browser
30
+ *
31
+ * @param callback - Function to execute in browser environment
32
+ * @returns Result of callback if in browser, undefined if on server
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * const width = safeExecute(() => window.innerWidth) ?? 0;
37
+ * ```
38
+ */
39
+ export declare const safeExecute: <T>(callback: () => T) => T | undefined;
40
+ /**
41
+ * Safely execute code with a fallback value for SSR
42
+ *
43
+ * @param callback - Function to execute in browser environment
44
+ * @param fallback - Value to return if on server or if callback fails
45
+ * @returns Result of callback if in browser, fallback otherwise
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * const fontSize = safeExecuteWithFallback(
50
+ * () => parseFloat(getComputedStyle(document.documentElement).fontSize),
51
+ * 16
52
+ * );
53
+ * ```
54
+ */
55
+ export declare const safeExecuteWithFallback: <T>(callback: () => T, fallback: T) => T;
56
+ /**
57
+ * Create an SVG element safely (browser-only)
58
+ * Returns undefined on server
59
+ *
60
+ * @param tagName - SVG element tag name
61
+ * @returns SVG element if in browser, undefined if on server
62
+ */
63
+ export declare const createSVGElement: <K extends keyof SVGElementTagNameMap>(tagName: K) => SVGElementTagNameMap[K] | undefined;
64
+ /**
65
+ * Get computed style safely
66
+ * Returns undefined on server
67
+ *
68
+ * @param element - Element to get computed style for
69
+ * @returns CSSStyleDeclaration if in browser, undefined if on server
70
+ */
71
+ export declare const safeGetComputedStyle: (element: Element) => CSSStyleDeclaration | undefined;
72
+ /**
73
+ * Query selector safely
74
+ * Returns null on server or if not found
75
+ *
76
+ * @param selector - CSS selector string
77
+ * @returns Element if found in browser, null otherwise
78
+ */
79
+ export declare const safeQuerySelector: <T extends Element = Element>(selector: string) => T | null;
80
+ //# sourceMappingURL=ssr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr.d.ts","sourceRoot":"","sources":["../../../../src/utils/ssr/ssr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,SAAS,QAAO,OAE5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,QAAO,OAE3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,QAAO,MAAM,GAAG,SAEtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,QAAO,QAAQ,GAAG,SAE1C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,UAAU,MAAM,CAAC,KAAG,CAAC,GAAG,SAStD,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,GAAI,CAAC,EAAE,UAAU,MAAM,CAAC,EAAE,UAAU,CAAC,KAAG,CAE3E,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,oBAAoB,EACnE,SAAS,CAAC,KACT,oBAAoB,CAAC,CAAC,CAAC,GAAG,SAM5B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,OAAO,KACf,mBAAmB,GAAG,SAMxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,OAAO,GAAG,OAAO,EAC3D,UAAU,MAAM,KACf,CAAC,GAAG,IAMN,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * SSR (Server-Side Rendering) utilities
3
+ *
4
+ * Provides safe access to browser APIs when rendering on the server.
5
+ * Compatible with Next.js, Remix, Gatsby, and other SSR frameworks.
6
+ */
7
+ /**
8
+ * Check if code is running in a browser environment
9
+ * @returns true if window is defined (browser), false otherwise (SSR)
10
+ */
11
+ export const isBrowser = () => {
12
+ return typeof window !== 'undefined' && typeof document !== 'undefined';
13
+ };
14
+ /**
15
+ * Check if code is running in a server environment
16
+ * @returns true if running on server (no window), false otherwise
17
+ */
18
+ export const isServer = () => {
19
+ return !isBrowser();
20
+ };
21
+ /**
22
+ * Safely access window object
23
+ * @returns window object if in browser, undefined if on server
24
+ */
25
+ export const safeWindow = () => {
26
+ return isBrowser() ? window : undefined;
27
+ };
28
+ /**
29
+ * Safely access document object
30
+ * @returns document object if in browser, undefined if on server
31
+ */
32
+ export const safeDocument = () => {
33
+ return isBrowser() ? document : undefined;
34
+ };
35
+ /**
36
+ * Safely execute code that requires browser APIs
37
+ * Returns undefined on server, executes callback in browser
38
+ *
39
+ * @param callback - Function to execute in browser environment
40
+ * @returns Result of callback if in browser, undefined if on server
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * const width = safeExecute(() => window.innerWidth) ?? 0;
45
+ * ```
46
+ */
47
+ export const safeExecute = (callback) => {
48
+ if (!isBrowser()) {
49
+ return undefined;
50
+ }
51
+ try {
52
+ return callback();
53
+ }
54
+ catch (error) {
55
+ return undefined;
56
+ }
57
+ };
58
+ /**
59
+ * Safely execute code with a fallback value for SSR
60
+ *
61
+ * @param callback - Function to execute in browser environment
62
+ * @param fallback - Value to return if on server or if callback fails
63
+ * @returns Result of callback if in browser, fallback otherwise
64
+ *
65
+ * @example
66
+ * ```ts
67
+ * const fontSize = safeExecuteWithFallback(
68
+ * () => parseFloat(getComputedStyle(document.documentElement).fontSize),
69
+ * 16
70
+ * );
71
+ * ```
72
+ */
73
+ export const safeExecuteWithFallback = (callback, fallback) => {
74
+ return safeExecute(callback) ?? fallback;
75
+ };
76
+ /**
77
+ * Create an SVG element safely (browser-only)
78
+ * Returns undefined on server
79
+ *
80
+ * @param tagName - SVG element tag name
81
+ * @returns SVG element if in browser, undefined if on server
82
+ */
83
+ export const createSVGElement = (tagName) => {
84
+ const doc = safeDocument();
85
+ if (!doc) {
86
+ return undefined;
87
+ }
88
+ return doc.createElementNS('http://www.w3.org/2000/svg', tagName);
89
+ };
90
+ /**
91
+ * Get computed style safely
92
+ * Returns undefined on server
93
+ *
94
+ * @param element - Element to get computed style for
95
+ * @returns CSSStyleDeclaration if in browser, undefined if on server
96
+ */
97
+ export const safeGetComputedStyle = (element) => {
98
+ const win = safeWindow();
99
+ if (!win) {
100
+ return undefined;
101
+ }
102
+ return win.getComputedStyle(element);
103
+ };
104
+ /**
105
+ * Query selector safely
106
+ * Returns null on server or if not found
107
+ *
108
+ * @param selector - CSS selector string
109
+ * @returns Element if found in browser, null otherwise
110
+ */
111
+ export const safeQuerySelector = (selector) => {
112
+ const doc = safeDocument();
113
+ if (!doc) {
114
+ return null;
115
+ }
116
+ return doc.querySelector(selector);
117
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"textBound.d.ts","sourceRoot":"","sources":["../../../../src/utils/textBound/textBound.ts"],"names":[],"mappings":"AAAA,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,SAAS,GAAI,0DAOvB,cAAc,KAAG,MA0BnB,CAAC"}
1
+ {"version":3,"file":"textBound.d.ts","sourceRoot":"","sources":["../../../../src/utils/textBound/textBound.ts"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,SAAS,GAAI,0DAOvB,cAAc,KAAG,MAwCnB,CAAC"}
@@ -1,15 +1,27 @@
1
+ import { createSVGElement, isBrowser, safeDocument } from '../ssr/ssr';
1
2
  export const textBound = ({ bound, data, fontSize, svgHeight, svgWidth, viewBox, }) => {
2
- if (!window || !document || !data.length) {
3
+ // SSR-safe: Return 0 if not in browser or no data
4
+ if (!isBrowser() || !data.length) {
5
+ return 0;
6
+ }
7
+ const doc = safeDocument();
8
+ if (!doc) {
9
+ return 0;
10
+ }
11
+ const svgContainer = createSVGElement('svg');
12
+ if (!svgContainer) {
3
13
  return 0;
4
14
  }
5
- const svgContainer = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
6
15
  svgContainer.setAttribute('style', 'position: absolute; visibility: hidden; top: -9999px; left: -9999px;');
7
16
  svgContainer.setAttribute('viewBox', viewBox);
8
17
  svgContainer.setAttribute('width', svgWidth);
9
18
  svgContainer.setAttribute('height', svgHeight);
10
- document.body.appendChild(svgContainer);
19
+ doc.body.appendChild(svgContainer);
11
20
  const sizes = data.map((d) => {
12
- const text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
21
+ const text = createSVGElement('text');
22
+ if (!text) {
23
+ return 0;
24
+ }
13
25
  text.setAttribute('font-size', fontSize);
14
26
  text.textContent = d;
15
27
  svgContainer.appendChild(text);
@@ -18,5 +30,5 @@ export const textBound = ({ bound, data, fontSize, svgHeight, svgWidth, viewBox,
18
30
  return size;
19
31
  });
20
32
  svgContainer.remove();
21
- return Math.max(...sizes);
33
+ return Math.max(...sizes, 0); // Ensure at least 0 is returned
22
34
  };
@@ -5,6 +5,7 @@ import type { BarChartStyles, BarOrientation } from '../../components/bar/bar.ty
5
5
  import type { PathProps, StyleProps } from '../../components/path/path.types';
6
6
  import type { TickData } from '../../components/tick/tick.types';
7
7
  import type { CanvasConfig } from '../../types/canvas.type';
8
+ import type { ChartError, ChartErrorCollection, ErrorType } from '../../types/errors.type';
8
9
  import type { Positions } from '../../types/position.enum';
9
10
  export type BarChartChildrenType = ReactNode | ReactElement<PathProps | XAxisProps | YAxisProps>;
10
11
  export interface BarChartIDataPoint {
@@ -51,6 +52,8 @@ export type BarChartContextType = Omit<BarChartExtraSpacings, OmitLineProps> & {
51
52
  barChildrenCount: number;
52
53
  gapBetweenBars?: number;
53
54
  orientation: (typeof BarOrientation)[keyof typeof BarOrientation];
55
+ error?: ChartError;
56
+ addError?: (errorType: keyof typeof ErrorType, error: Omit<ChartError, 'type'>) => void;
54
57
  };
55
58
  export interface BarChartProps {
56
59
  children: BarChartChildrenType;
@@ -74,6 +77,7 @@ export interface BarChartProps {
74
77
  onBlur?: (event: React.FocusEvent<SVGElement>) => void;
75
78
  onKeyDown?: (event: React.KeyboardEvent<SVGSVGElement>) => void;
76
79
  onKeyUp?: (event: React.KeyboardEvent<SVGSVGElement>) => void;
80
+ onErrors?: (errors: ChartErrorCollection) => void;
77
81
  }
78
82
  export interface BarChartTickNumeric {
79
83
  max: number;
@@ -1 +1 @@
1
- {"version":3,"file":"barChart.type.d.ts","sourceRoot":"","sources":["../../../../src/charts/barChart/barChart.type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"barChart.type.d.ts","sourceRoot":"","sources":["../../../../src/charts/barChart/barChart.type.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"barChartStructure.d.ts","sourceRoot":"","sources":["../../../../src/charts/barChart/barChartStructure.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOrD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAyFrD,CAAC"}
1
+ {"version":3,"file":"barChartStructure.d.ts","sourceRoot":"","sources":["../../../../src/charts/barChart/barChartStructure.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOrD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAoGrD,CAAC"}
@@ -3,6 +3,7 @@ import { Children, useMemo } from 'react';
3
3
  import { SvgContainer } from '../../components/svgContainer/svgContainer';
4
4
  import { buildViewBox } from '../../components/svgContainer/utils/buildViewBox/buildViewBox';
5
5
  import { DefaultCanvasConfig } from '../../types/canvas.type';
6
+ import { createErrorAccumulator } from '../../utils/createErrorAccumulator';
6
7
  import { getDataFingerprint } from '../../utils/getDataFingerprint/getDataFingerprint';
7
8
  import { parseStringToNumberPx } from '../../utils/parseStringToNumberPx.ts/parseStringToNumberPx';
8
9
  import { BarChartContext } from './context/barChartContext';
@@ -10,7 +11,7 @@ import { buildBarContextValue } from './context/buildBarContextValues';
10
11
  import { BarChartXAxis } from './fragments/barChartXAxis';
11
12
  import { BarChartYAxis } from './fragments/barChartYAxis';
12
13
  import { countBarChildren } from './utils/countBarChildren';
13
- export const BarChartStructure = ({ canvasConfig = DefaultCanvasConfig, caption, children, classNames, data, dataTestId, gapBetweenBars = 0, height = '100%', orientation, pKey, role, tabIndex, width = '100%', ...props }) => {
14
+ export const BarChartStructure = ({ canvasConfig = DefaultCanvasConfig, caption, children, classNames, data, dataTestId, gapBetweenBars = 0, height = '100%', onErrors, orientation, pKey, role, tabIndex, width = '100%', ...props }) => {
14
15
  // Extracts and sets default values for canvas configuration
15
16
  const { extraSpace: canvasExtraSpace, height: canvasHeight, width: canvasWidth } = canvasConfig;
16
17
  const parsedCanvasWidth = parseStringToNumberPx(canvasWidth);
@@ -32,11 +33,17 @@ export const BarChartStructure = ({ canvasConfig = DefaultCanvasConfig, caption,
32
33
  const maxValue = Math.max(parsedCanvasWidth, parsedCanvasHeight, parsedCanvasExtraSpace ?? 0);
33
34
  const ajustedX = parsedCanvasWidth / maxValue;
34
35
  const ajustedY = parsedCanvasHeight / maxValue;
36
+ const errorAccumulator = useMemo(() => createErrorAccumulator(onErrors), [onErrors]);
35
37
  // Create a fingerprint of the data to avoid unnecessary contextValue updates
36
38
  const dataFingerprint = getDataFingerprint(data);
37
39
  // Build the context value
38
40
  const contextValue = useMemo(() => {
41
+ // Clear previous errors before building new context
42
+ errorAccumulator.clearErrors();
39
43
  return buildBarContextValue({
44
+ addError: (errorType, error) => {
45
+ errorAccumulator.addError(errorType, error);
46
+ },
40
47
  ajustedX,
41
48
  ajustedY,
42
49
  canvasHeight: parsedCanvasHeight,
@@ -48,7 +55,7 @@ export const BarChartStructure = ({ canvasConfig = DefaultCanvasConfig, caption,
48
55
  pKey,
49
56
  viewBox,
50
57
  });
51
- }, [canvasHeight, canvasWidth, dataFingerprint, pKey, orientation]);
58
+ }, [canvasHeight, canvasWidth, dataFingerprint, pKey, orientation, errorAccumulator.addError]);
52
59
  return (_jsx(SvgContainer, { caption: caption, className: classNames, dataTestId: dataTestId, height: height, role: role, tabIndex: tabIndex, viewBox: viewBox, width: width, ...props, children: _jsx(BarChartContext.Provider, { value: {
53
60
  ...contextValue,
54
61
  barChildrenCount,
@@ -1,4 +1,5 @@
1
1
  import { BarOrientation } from '../../../components/bar/bar.type';
2
+ import { type ChartError, ErrorType } from '../../../types/errors.type';
2
3
  import type { BarChartChildrenType, BarChartContextType, BarChartIDataPoint } from '../barChart.type';
3
4
  interface BuildContextValue {
4
5
  children: BarChartChildrenType;
@@ -11,6 +12,7 @@ interface BuildContextValue {
11
12
  gapBetweenBars: number;
12
13
  orientation: (typeof BarOrientation)[keyof typeof BarOrientation];
13
14
  viewBox: string;
15
+ addError?: (errorType: keyof typeof ErrorType, error: Omit<ChartError, 'type'>) => void;
14
16
  }
15
17
  type OmitProps = 'data' | 'pKey' | 'canvasHeight' | 'canvasWidth' | 'canvasExtraSpace' | 'xBreakAxis' | 'yBreakAxis' | 'xCursor' | 'yCursor' | 'barChildrenCount' | 'orientation';
16
18
  /**
@@ -19,6 +21,6 @@ type OmitProps = 'data' | 'pKey' | 'canvasHeight' | 'canvasWidth' | 'canvasExtra
19
21
  * @param {BuildContextValue} options - The options for building the context value.
20
22
  * @returns {LineContextValue} - The built context value.
21
23
  */
22
- export declare const buildBarContextValue: ({ ajustedX, ajustedY, canvasHeight, canvasWidth, children, data, gapBetweenBars, orientation, pKey, viewBox, }: BuildContextValue) => Omit<BarChartContextType, OmitProps>;
24
+ export declare const buildBarContextValue: ({ addError, ajustedX, ajustedY, canvasHeight, canvasWidth, children, data, gapBetweenBars, orientation, pKey, viewBox, }: BuildContextValue) => Omit<BarChartContextType, OmitProps>;
23
25
  export {};
24
26
  //# sourceMappingURL=buildBarContextValues.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildBarContextValues.d.ts","sourceRoot":"","sources":["../../../../../src/charts/barChart/context/buildBarContextValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAO3D,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAG1B,UAAU,iBAAiB;IACzB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,SAAS,GACV,MAAM,GACN,MAAM,GACN,cAAc,GACd,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,SAAS,GACT,kBAAkB,GAClB,aAAa,CAAC;AAElB;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,gHAWlC,iBAAiB,KAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CA2GzD,CAAC"}
1
+ {"version":3,"file":"buildBarContextValues.d.ts","sourceRoot":"","sources":["../../../../../src/charts/barChart/context/buildBarContextValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAoBjE,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAI1B,UAAU,iBAAiB;IACzB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,IAAI,EAAE,kBAAkB,EAAE,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,OAAO,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;CACzF;AAED,KAAK,SAAS,GACV,MAAM,GACN,MAAM,GACN,cAAc,GACd,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,YAAY,GACZ,SAAS,GACT,SAAS,GACT,kBAAkB,GAClB,aAAa,CAAC;AAElB;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,0HAYlC,iBAAiB,KAAG,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAkSzD,CAAC"}
@@ -1,8 +1,12 @@
1
1
  import { BarOrientation } from '../../../components/bar/bar.type';
2
+ import { ErrorType } from '../../../types/errors.type';
2
3
  import { Positions } from '../../../types/position.enum';
4
+ import { BuildError, buildBarDistributionError, buildCanvasDimensionsError, buildError, } from '../../../utils/buildErrors/buildErrors';
3
5
  import { getXCoordinates, getYCoordinates } from '../../../utils/getCoordinates/getCoordinates';
4
6
  import { getPoints } from '../../../utils/getPoints/getPoints';
5
7
  import { getXTicks, getYTicks } from '../../../utils/getTicks/getTicks';
8
+ import { AXIS_VALIDATION, BAR_CHART_DEFAULTS, BAR_CHART_FALLBACK_DATA, BREAK_AXIS_DEFAULTS, CHART_CANVAS_DEFAULTS, SHARED_FALLBACK_DATA, } from '../../constants/chartDefaults';
9
+ import { countBarChildren } from '../utils/countBarChildren';
6
10
  import { getAxisExtraSpacing } from '../utils/getAxisExtraSpacing';
7
11
  /**
8
12
  * Builds the context value for the line chart.
@@ -10,17 +14,62 @@ import { getAxisExtraSpacing } from '../utils/getAxisExtraSpacing';
10
14
  * @param {BuildContextValue} options - The options for building the context value.
11
15
  * @returns {LineContextValue} - The built context value.
12
16
  */
13
- export const buildBarContextValue = ({ ajustedX, ajustedY, canvasHeight, canvasWidth, children, data, gapBetweenBars, orientation, pKey, viewBox, }) => {
17
+ export const buildBarContextValue = ({ addError, ajustedX, ajustedY, canvasHeight, canvasWidth, children, data, gapBetweenBars, orientation, pKey, viewBox, }) => {
18
+ let error = undefined;
19
+ // 1. Validate data exists
20
+ if (!data || data.length === 0) {
21
+ const dataError = {
22
+ error: buildError(BuildError.BAR_CHART_NO_DATA),
23
+ };
24
+ addError?.('BAR_CHART_CONTEXT_ERROR', dataError);
25
+ error = dataError;
26
+ }
27
+ // 2. Validate canvas dimensions
28
+ if (canvasWidth <= 0 || canvasHeight <= 0) {
29
+ const canvasError = {
30
+ error: buildCanvasDimensionsError(canvasWidth, canvasHeight),
31
+ };
32
+ addError?.('BAR_CHART_CONTEXT_ERROR', canvasError);
33
+ error = canvasError;
34
+ }
35
+ // 3. Validate bar spacing and distribution
36
+ const barChildrenCount = countBarChildren(children);
37
+ const defaultBarWidth = BAR_CHART_DEFAULTS.BAR_WIDTH; // Default width used in BarChartPath
38
+ const requiredSpace = barChildrenCount * defaultBarWidth;
39
+ const totalGapSpace = (barChildrenCount - 1) * gapBetweenBars;
40
+ const availableSpace = orientation === BarOrientation.VERTICAL ? canvasWidth : canvasHeight;
41
+ if (requiredSpace + totalGapSpace > availableSpace) {
42
+ const distributionError = {
43
+ error: buildBarDistributionError('all', `Insufficient space: requires ${requiredSpace + totalGapSpace}px but only ${availableSpace}px available`),
44
+ };
45
+ addError?.('BAR_CHART_CONTEXT_ERROR', distributionError);
46
+ error = distributionError;
47
+ }
48
+ // Use safe defaults for data processing if there are critical errors
49
+ const safeData = data && data.length > 0
50
+ ? data
51
+ : [
52
+ {
53
+ [BAR_CHART_FALLBACK_DATA.FALLBACK_SECONDARY_KEY]: BAR_CHART_FALLBACK_DATA.DEFAULT_X_VALUE,
54
+ [pKey]: SHARED_FALLBACK_DATA.FALLBACK_PKEY_FIRST,
55
+ },
56
+ {
57
+ [BAR_CHART_FALLBACK_DATA.FALLBACK_SECONDARY_KEY]: BAR_CHART_FALLBACK_DATA.DEFAULT_X_VALUE,
58
+ [pKey]: SHARED_FALLBACK_DATA.FALLBACK_PKEY_SECOND,
59
+ },
60
+ ];
61
+ const safeCanvasWidth = canvasWidth > 0 ? canvasWidth : CHART_CANVAS_DEFAULTS.SAFE_WIDTH;
62
+ const safeCanvasHeight = canvasHeight > 0 ? canvasHeight : CHART_CANVAS_DEFAULTS.SAFE_HEIGHT;
14
63
  /**
15
64
  * Get the extra spacings for the line chart.
16
65
  */
17
66
  const { barChartXPosition, barChartYPosition, extraSpaceBottomY, extraSpaceLeftX, extraSpaceRightX, extraSpaceTopY, securityXSpace, securityYSpace, xAxisText, xBreakAxis, xData, yAxisText, yBreakAxis, yData, } = getAxisExtraSpacing({
18
67
  ajustedX,
19
68
  ajustedY,
20
- canvasHeight,
21
- canvasWidth,
69
+ canvasHeight: safeCanvasHeight,
70
+ canvasWidth: safeCanvasWidth,
22
71
  children,
23
- data,
72
+ data: safeData,
24
73
  gapBetweenBars,
25
74
  orientation,
26
75
  pKey,
@@ -33,35 +82,94 @@ export const buildBarContextValue = ({ ajustedX, ajustedY, canvasHeight, canvasW
33
82
  const yAxisSpace = extraSpaceLeftX + extraSpaceRightX;
34
83
  const xTickValue = getXTicks({
35
84
  initPos: extraSpaceLeftX,
36
- maxSpaceAvailable: canvasWidth,
85
+ maxSpaceAvailable: safeCanvasWidth,
37
86
  otherAxisSpace: yAxisSpace,
38
87
  securitySpace: securityXSpace,
39
88
  tickValues: xData,
40
89
  });
90
+ if ((xTickValue ?? []).some(({ position }) => isNaN(position))) {
91
+ const xTickError = {
92
+ error: buildError(BuildError.INVALID_X_TICK),
93
+ };
94
+ addError?.('BAR_CHART_CONTEXT_ERROR', xTickError);
95
+ error = xTickError;
96
+ }
97
+ // Validate X-axis tick values
98
+ if (xTickValue) {
99
+ const hasInsufficientTicks = xTickValue.length < AXIS_VALIDATION.MIN_TICK_COUNT;
100
+ const hasIdenticalValues = xTickValue.length >= AXIS_VALIDATION.MIN_TICK_COUNT &&
101
+ new Set(xTickValue.map(tick => tick.value)).size === AXIS_VALIDATION.UNIQUE_VALUE_THRESHOLD;
102
+ if (hasInsufficientTicks) {
103
+ const xAxisError = {
104
+ error: buildError(BuildError.LINE_CHART_X_AXIS_INSUFFICIENT_TICKS),
105
+ };
106
+ addError?.('BAR_CHART_X_AXIS_ERROR', xAxisError);
107
+ if (!error) {
108
+ error = xAxisError;
109
+ }
110
+ }
111
+ if (hasIdenticalValues) {
112
+ const xAxisError = {
113
+ error: buildError(BuildError.LINE_CHART_X_AXIS_IDENTICAL_VALUES),
114
+ };
115
+ addError?.('BAR_CHART_X_AXIS_ERROR', xAxisError);
116
+ if (!error) {
117
+ error = xAxisError;
118
+ }
119
+ }
120
+ }
41
121
  /**
42
122
  * Calculate the tick values for the Y Axis.
43
123
  */
44
124
  const crossYAxis = barChartYPosition !== Positions.LEFT && barChartYPosition !== Positions.RIGHT;
45
125
  const otherAxisSpace = extraSpaceTopY + extraSpaceBottomY;
46
126
  const yTickValue = getYTicks({
47
- initPos: canvasHeight - extraSpaceBottomY,
48
- maxSpaceAvailable: canvasHeight,
127
+ initPos: safeCanvasHeight - extraSpaceBottomY,
128
+ maxSpaceAvailable: safeCanvasHeight,
49
129
  needAjusted: orientation === BarOrientation.HORIZONTAL,
50
130
  otherAxisSpace,
51
131
  securitySpace: securityYSpace,
52
132
  tickValues: yData,
53
133
  });
134
+ // Validate Y-axis tick values
135
+ if (yTickValue) {
136
+ const hasInsufficientTicks = yTickValue.length < AXIS_VALIDATION.MIN_TICK_COUNT;
137
+ const hasIdenticalValues = yTickValue.length >= AXIS_VALIDATION.MIN_TICK_COUNT &&
138
+ new Set(yTickValue.map(tick => tick.value)).size === AXIS_VALIDATION.UNIQUE_VALUE_THRESHOLD;
139
+ if (hasInsufficientTicks) {
140
+ const yAxisError = {
141
+ error: buildError(BuildError.LINE_CHART_Y_AXIS_INSUFFICIENT_TICKS),
142
+ };
143
+ addError?.('BAR_CHART_Y_AXIS_ERROR', yAxisError);
144
+ if (!error) {
145
+ error = yAxisError;
146
+ }
147
+ }
148
+ if (hasIdenticalValues) {
149
+ const yAxisError = {
150
+ error: buildError(BuildError.LINE_CHART_Y_AXIS_IDENTICAL_VALUES),
151
+ };
152
+ addError?.('BAR_CHART_Y_AXIS_ERROR', yAxisError);
153
+ if (!error) {
154
+ error = yAxisError;
155
+ }
156
+ }
157
+ }
54
158
  /**
55
159
  * Calculate the custom breakAxis for the X and Y Axis.
56
160
  */
57
- const customBreakXAxis = crossXAxis ? getPoints(yTickValue || [], [String(xBreakAxis)])[0] : 0;
58
- const customBreakYAxis = crossYAxis ? getPoints(xTickValue || [], [String(yBreakAxis)])[0] : 0;
161
+ const customBreakXAxis = crossXAxis
162
+ ? getPoints(yTickValue || [], [String(xBreakAxis)])[0]
163
+ : BREAK_AXIS_DEFAULTS.DEFAULT_BREAK_VALUE;
164
+ const customBreakYAxis = crossYAxis
165
+ ? getPoints(xTickValue || [], [String(yBreakAxis)])[0]
166
+ : BREAK_AXIS_DEFAULTS.DEFAULT_BREAK_VALUE;
59
167
  /**
60
168
  * Calculate the X coordinates for the line chart.
61
169
  */
62
170
  const xCoordinates = getXCoordinates({
63
- canvasHeight,
64
- canvasWidth,
171
+ canvasHeight: safeCanvasHeight,
172
+ canvasWidth: safeCanvasWidth,
65
173
  customBreakAxis: Number(customBreakXAxis),
66
174
  extraSpaceBottomY,
67
175
  extraSpaceLeftX,
@@ -74,8 +182,8 @@ export const buildBarContextValue = ({ ajustedX, ajustedY, canvasHeight, canvasW
74
182
  * Calculate the Y coordinates for the line chart.
75
183
  */
76
184
  const yCoordinates = getYCoordinates({
77
- canvasHeight,
78
- canvasWidth,
185
+ canvasHeight: safeCanvasHeight,
186
+ canvasWidth: safeCanvasWidth,
79
187
  customBreakAxis: Number(customBreakYAxis),
80
188
  extraSpaceBottomY,
81
189
  extraSpaceLeftX,
@@ -84,18 +192,71 @@ export const buildBarContextValue = ({ ajustedX, ajustedY, canvasHeight, canvasW
84
192
  position: barChartYPosition,
85
193
  securityYSpace,
86
194
  });
87
- return {
195
+ // Validate axis coordinates for zero-length axes
196
+ if (xCoordinates.x1 === xCoordinates.x2) {
197
+ const xAxisError = {
198
+ error: buildError(BuildError.LINE_CHART_X_AXIS_ZERO_LENGTH),
199
+ };
200
+ addError?.('BAR_CHART_X_AXIS_ERROR', xAxisError);
201
+ if (!error) {
202
+ error = xAxisError;
203
+ }
204
+ }
205
+ if (yCoordinates.y1 === yCoordinates.y2) {
206
+ const yAxisError = {
207
+ error: buildError(BuildError.LINE_CHART_Y_AXIS_ZERO_LENGTH),
208
+ };
209
+ addError?.('BAR_CHART_Y_AXIS_ERROR', yAxisError);
210
+ if (!error) {
211
+ error = yAxisError;
212
+ }
213
+ }
214
+ const baseContext = {
215
+ addError,
88
216
  crossXAxis,
89
217
  crossYAxis,
218
+ data: safeData,
90
219
  extraSpaceBottomY,
91
220
  extraSpaceLeftX,
92
221
  extraSpaceRightX,
93
222
  extraSpaceTopY,
94
223
  securityXSpace,
95
224
  securityYSpace,
96
- xAxisCoordinates: { coordinates: xCoordinates, tickValues: xTickValue },
225
+ xAxisCoordinates: {
226
+ coordinates: xCoordinates,
227
+ tickValues: xTickValue ||
228
+ (error
229
+ ? [
230
+ {
231
+ position: BREAK_AXIS_DEFAULTS.DEFAULT_BREAK_VALUE,
232
+ value: SHARED_FALLBACK_DATA.FALLBACK_PKEY_FIRST,
233
+ },
234
+ { position: safeCanvasWidth, value: SHARED_FALLBACK_DATA.FALLBACK_PKEY_SECOND },
235
+ ]
236
+ : []),
237
+ },
97
238
  xAxisText,
98
- yAxisCoordinates: { coordinates: yCoordinates, tickValues: yTickValue },
239
+ yAxisCoordinates: {
240
+ coordinates: yCoordinates,
241
+ tickValues: yTickValue ||
242
+ (error
243
+ ? [
244
+ { position: safeCanvasHeight, value: SHARED_FALLBACK_DATA.FALLBACK_PKEY_FIRST },
245
+ {
246
+ position: BREAK_AXIS_DEFAULTS.DEFAULT_BREAK_VALUE,
247
+ value: SHARED_FALLBACK_DATA.FALLBACK_PKEY_SECOND,
248
+ },
249
+ ]
250
+ : []),
251
+ },
99
252
  yAxisText,
100
253
  };
254
+ // Add error only if it exists
255
+ if (error) {
256
+ return {
257
+ ...baseContext,
258
+ error: { ...error, type: ErrorType.BAR_CHART_CONTEXT_ERROR },
259
+ };
260
+ }
261
+ return baseContext;
101
262
  };
@@ -1,3 +1,9 @@
1
1
  import type { BarChartPathProps } from '../barChart.type';
2
+ /**
3
+ * Extracts the values for a specific key from the dataset
4
+ * @param data Array of data points
5
+ * @param key Key to extract values from
6
+ * @returns Array of values for the given key
7
+ */
2
8
  export declare const BarChartPath: React.FC<BarChartPathProps>;
3
9
  //# sourceMappingURL=barChartPath.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"barChartPath.d.ts","sourceRoot":"","sources":["../../../../../src/charts/barChart/fragments/barChartPath.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA6CpD,CAAC"}
1
+ {"version":3,"file":"barChartPath.d.ts","sourceRoot":"","sources":["../../../../../src/charts/barChart/fragments/barChartPath.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D;;;;;GAKG;AAEH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA8EpD,CAAC"}