@kubit-ui-web/react-charts 1.4.0 → 1.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 (106) hide show
  1. package/dist/cjs/charts/barChart/fragments/barChartPath.d.ts.map +1 -1
  2. package/dist/cjs/charts/barChart/fragments/barChartPath.js +12 -7
  3. package/dist/cjs/charts/barChart/fragments/barChartSeparator.d.ts.map +1 -1
  4. package/dist/cjs/charts/barChart/fragments/barChartSeparator.js +20 -8
  5. package/dist/cjs/charts/constants/chartDefaults.d.ts +20 -0
  6. package/dist/cjs/charts/constants/chartDefaults.d.ts.map +1 -1
  7. package/dist/cjs/charts/constants/chartDefaults.js +20 -0
  8. package/dist/cjs/charts/lineChart/fragments/lineChartPath.d.ts.map +1 -1
  9. package/dist/cjs/charts/lineChart/fragments/lineChartPath.js +15 -8
  10. package/dist/cjs/charts/lineChart/fragments/lineChartProjection.d.ts.map +1 -1
  11. package/dist/cjs/charts/lineChart/fragments/lineChartProjection.js +10 -7
  12. package/dist/cjs/charts/lineChart/fragments/lineChartSeparator.d.ts.map +1 -1
  13. package/dist/cjs/charts/lineChart/fragments/lineChartSeparator.js +20 -8
  14. package/dist/cjs/charts/pieChart/context/buildPieContextValue.d.ts +3 -1
  15. package/dist/cjs/charts/pieChart/context/buildPieContextValue.d.ts.map +1 -1
  16. package/dist/cjs/charts/pieChart/context/buildPieContextValue.js +15 -3
  17. package/dist/cjs/charts/pieChart/fragments/pieChartPath.d.ts.map +1 -1
  18. package/dist/cjs/charts/pieChart/fragments/pieChartPath.js +31 -3
  19. package/dist/cjs/charts/pieChart/fragments/pieChartSegment.d.ts.map +1 -1
  20. package/dist/cjs/charts/pieChart/fragments/pieChartSegment.js +58 -1
  21. package/dist/cjs/charts/pieChart/pieChart.type.d.ts +7 -0
  22. package/dist/cjs/charts/pieChart/pieChart.type.d.ts.map +1 -1
  23. package/dist/cjs/charts/pieChart/pieChartStructure.d.ts.map +1 -1
  24. package/dist/cjs/charts/pieChart/pieChartStructure.js +12 -2
  25. package/dist/cjs/types/errors.type.d.ts +3 -0
  26. package/dist/cjs/types/errors.type.d.ts.map +1 -1
  27. package/dist/cjs/types/errors.type.js +4 -0
  28. package/dist/cjs/utils/buildErrors/buildErrors.d.ts +11 -0
  29. package/dist/cjs/utils/buildErrors/buildErrors.d.ts.map +1 -1
  30. package/dist/cjs/utils/buildErrors/buildErrors.js +5 -0
  31. package/dist/cjs/utils/buildErrors/charts/buildPieChartErrors.d.ts +37 -0
  32. package/dist/cjs/utils/buildErrors/charts/buildPieChartErrors.d.ts.map +1 -0
  33. package/dist/cjs/utils/buildErrors/charts/buildPieChartErrors.js +36 -0
  34. package/dist/cjs/utils/buildErrors/constants/errorMessages/pieChartErrorMessages.d.ts +13 -0
  35. package/dist/cjs/utils/buildErrors/constants/errorMessages/pieChartErrorMessages.d.ts.map +1 -0
  36. package/dist/cjs/utils/buildErrors/constants/errorMessages/pieChartErrorMessages.js +20 -0
  37. package/dist/cjs/utils/buildErrors/constants/errors/pieChartErrors.d.ts +14 -0
  38. package/dist/cjs/utils/buildErrors/constants/errors/pieChartErrors.d.ts.map +1 -0
  39. package/dist/cjs/utils/buildErrors/constants/errors/pieChartErrors.js +25 -0
  40. package/dist/esm/charts/barChart/fragments/barChartPath.d.ts.map +1 -1
  41. package/dist/esm/charts/barChart/fragments/barChartPath.js +12 -7
  42. package/dist/esm/charts/barChart/fragments/barChartSeparator.d.ts.map +1 -1
  43. package/dist/esm/charts/barChart/fragments/barChartSeparator.js +20 -8
  44. package/dist/esm/charts/constants/chartDefaults.d.ts +20 -0
  45. package/dist/esm/charts/constants/chartDefaults.d.ts.map +1 -1
  46. package/dist/esm/charts/constants/chartDefaults.js +20 -0
  47. package/dist/esm/charts/lineChart/fragments/lineChartPath.d.ts.map +1 -1
  48. package/dist/esm/charts/lineChart/fragments/lineChartPath.js +15 -8
  49. package/dist/esm/charts/lineChart/fragments/lineChartProjection.d.ts.map +1 -1
  50. package/dist/esm/charts/lineChart/fragments/lineChartProjection.js +10 -7
  51. package/dist/esm/charts/lineChart/fragments/lineChartSeparator.d.ts.map +1 -1
  52. package/dist/esm/charts/lineChart/fragments/lineChartSeparator.js +20 -8
  53. package/dist/esm/charts/pieChart/context/buildPieContextValue.d.ts +3 -1
  54. package/dist/esm/charts/pieChart/context/buildPieContextValue.d.ts.map +1 -1
  55. package/dist/esm/charts/pieChart/context/buildPieContextValue.js +15 -3
  56. package/dist/esm/charts/pieChart/fragments/pieChartPath.d.ts.map +1 -1
  57. package/dist/esm/charts/pieChart/fragments/pieChartPath.js +31 -3
  58. package/dist/esm/charts/pieChart/fragments/pieChartSegment.d.ts.map +1 -1
  59. package/dist/esm/charts/pieChart/fragments/pieChartSegment.js +58 -1
  60. package/dist/esm/charts/pieChart/pieChart.type.d.ts +7 -0
  61. package/dist/esm/charts/pieChart/pieChart.type.d.ts.map +1 -1
  62. package/dist/esm/charts/pieChart/pieChartStructure.d.ts.map +1 -1
  63. package/dist/esm/charts/pieChart/pieChartStructure.js +12 -2
  64. package/dist/esm/types/errors.type.d.ts +3 -0
  65. package/dist/esm/types/errors.type.d.ts.map +1 -1
  66. package/dist/esm/types/errors.type.js +4 -0
  67. package/dist/esm/utils/buildErrors/buildErrors.d.ts +11 -0
  68. package/dist/esm/utils/buildErrors/buildErrors.d.ts.map +1 -1
  69. package/dist/esm/utils/buildErrors/buildErrors.js +5 -0
  70. package/dist/esm/utils/buildErrors/charts/buildPieChartErrors.d.ts +37 -0
  71. package/dist/esm/utils/buildErrors/charts/buildPieChartErrors.d.ts.map +1 -0
  72. package/dist/esm/utils/buildErrors/charts/buildPieChartErrors.js +36 -0
  73. package/dist/esm/utils/buildErrors/constants/errorMessages/pieChartErrorMessages.d.ts +13 -0
  74. package/dist/esm/utils/buildErrors/constants/errorMessages/pieChartErrorMessages.d.ts.map +1 -0
  75. package/dist/esm/utils/buildErrors/constants/errorMessages/pieChartErrorMessages.js +20 -0
  76. package/dist/esm/utils/buildErrors/constants/errors/pieChartErrors.d.ts +14 -0
  77. package/dist/esm/utils/buildErrors/constants/errors/pieChartErrors.d.ts.map +1 -0
  78. package/dist/esm/utils/buildErrors/constants/errors/pieChartErrors.js +25 -0
  79. package/dist/kubit-ui-web-react-charts.cjs.js +1 -1
  80. package/dist/kubit-ui-web-react-charts.es.js +1 -1
  81. package/dist/kubit-ui-web-react-charts.umd.js +1 -1
  82. package/dist/types/charts/barChart/fragments/barChartPath.d.ts.map +1 -1
  83. package/dist/types/charts/barChart/fragments/barChartSeparator.d.ts.map +1 -1
  84. package/dist/types/charts/constants/chartDefaults.d.ts +20 -0
  85. package/dist/types/charts/constants/chartDefaults.d.ts.map +1 -1
  86. package/dist/types/charts/lineChart/fragments/lineChartPath.d.ts.map +1 -1
  87. package/dist/types/charts/lineChart/fragments/lineChartProjection.d.ts.map +1 -1
  88. package/dist/types/charts/lineChart/fragments/lineChartSeparator.d.ts.map +1 -1
  89. package/dist/types/charts/pieChart/context/buildPieContextValue.d.ts +3 -1
  90. package/dist/types/charts/pieChart/context/buildPieContextValue.d.ts.map +1 -1
  91. package/dist/types/charts/pieChart/fragments/pieChartPath.d.ts.map +1 -1
  92. package/dist/types/charts/pieChart/fragments/pieChartSegment.d.ts.map +1 -1
  93. package/dist/types/charts/pieChart/pieChart.type.d.ts +7 -0
  94. package/dist/types/charts/pieChart/pieChart.type.d.ts.map +1 -1
  95. package/dist/types/charts/pieChart/pieChartStructure.d.ts.map +1 -1
  96. package/dist/types/types/errors.type.d.ts +3 -0
  97. package/dist/types/types/errors.type.d.ts.map +1 -1
  98. package/dist/types/utils/buildErrors/buildErrors.d.ts +11 -0
  99. package/dist/types/utils/buildErrors/buildErrors.d.ts.map +1 -1
  100. package/dist/types/utils/buildErrors/charts/buildPieChartErrors.d.ts +37 -0
  101. package/dist/types/utils/buildErrors/charts/buildPieChartErrors.d.ts.map +1 -0
  102. package/dist/types/utils/buildErrors/constants/errorMessages/pieChartErrorMessages.d.ts +13 -0
  103. package/dist/types/utils/buildErrors/constants/errorMessages/pieChartErrorMessages.d.ts.map +1 -0
  104. package/dist/types/utils/buildErrors/constants/errors/pieChartErrors.d.ts +14 -0
  105. package/dist/types/utils/buildErrors/constants/errors/pieChartErrors.d.ts.map +1 -0
  106. package/package.json +1 -1
@@ -5,13 +5,26 @@ import { getPoints } from '../../../utils/getPoints/getPoints';
5
5
  import { LineChartContext } from '../context/lineChartContext';
6
6
  export const LineChartSeparator = ({ areaSeparator, dataTestId, rightSeparator, topSeparator, xBreakAxis, yBreakAxis, }) => {
7
7
  const { addError, crossXAxis, crossYAxis, xAxisCoordinates, yAxisCoordinates } = useContext(LineChartContext);
8
+ // Extract tick values for stable dependencies
9
+ const xTickValues = xAxisCoordinates.tickValues;
10
+ const yTickValues = yAxisCoordinates.tickValues;
11
+ // Pre-calculate numeric values for dependencies
12
+ const xBreakNumeric = xBreakAxis !== undefined
13
+ ? typeof xBreakAxis === 'string'
14
+ ? parseFloat(xBreakAxis)
15
+ : xBreakAxis
16
+ : undefined;
17
+ const yBreakNumeric = yBreakAxis !== undefined
18
+ ? typeof yBreakAxis === 'string'
19
+ ? parseFloat(yBreakAxis)
20
+ : yBreakAxis
21
+ : undefined;
8
22
  // Separator error validations
9
23
  useEffect(() => {
10
24
  // xBreakAxis validation
11
25
  if (xBreakAxis !== undefined) {
12
- const xValues = xAxisCoordinates.tickValues.map(tick => tick.value);
13
- const xBreakNumeric = typeof xBreakAxis === 'string' ? parseFloat(xBreakAxis) : xBreakAxis;
14
- if (isNaN(xBreakNumeric)) {
26
+ const xValues = xTickValues.map(tick => tick.value);
27
+ if (xBreakNumeric === undefined || isNaN(xBreakNumeric)) {
15
28
  addError?.('LINE_CHART_SEPARATOR_ERROR', {
16
29
  error: buildSeparatorXBreakAxisError(xBreakAxis),
17
30
  });
@@ -28,9 +41,8 @@ export const LineChartSeparator = ({ areaSeparator, dataTestId, rightSeparator,
28
41
  }
29
42
  // yBreakAxis validation
30
43
  if (yBreakAxis !== undefined) {
31
- const yValues = yAxisCoordinates.tickValues.map(tick => tick.value);
32
- const yBreakNumeric = typeof yBreakAxis === 'string' ? parseFloat(yBreakAxis) : yBreakAxis;
33
- if (isNaN(yBreakNumeric)) {
44
+ const yValues = yTickValues.map(tick => tick.value);
45
+ if (yBreakNumeric === undefined || isNaN(yBreakNumeric)) {
34
46
  addError?.('LINE_CHART_SEPARATOR_ERROR', {
35
47
  error: buildSeparatorYBreakAxisError(yBreakAxis),
36
48
  });
@@ -45,7 +57,7 @@ export const LineChartSeparator = ({ areaSeparator, dataTestId, rightSeparator,
45
57
  }
46
58
  }
47
59
  }
48
- }, [xBreakAxis, yBreakAxis, xAxisCoordinates.tickValues, yAxisCoordinates.tickValues, addError]);
60
+ }, [xBreakAxis, xBreakNumeric, xTickValues, yBreakAxis, yBreakNumeric, yTickValues]);
49
61
  if (!topSeparator && !rightSeparator && !areaSeparator) {
50
62
  return _jsx(_Fragment, {});
51
63
  }
@@ -64,7 +76,7 @@ export const LineChartSeparator = ({ areaSeparator, dataTestId, rightSeparator,
64
76
  error: buildError(BuildError.LINE_CHART_SEPARATOR_INVALID_COORDINATES),
65
77
  });
66
78
  }
67
- }, [xStart, xEnd, yStart, yEnd, addError]);
79
+ }, [xStart, xEnd, yStart, yEnd]);
68
80
  const squarePath = `M${xStart} ${yStart} H ${xEnd} V ${yEnd} H ${xStart} Z`;
69
81
  const lineTop = `M${xStart} ${yEnd} H ${xEnd}`;
70
82
  const lineRight = `M${xEnd} ${yStart} V ${yEnd}`;
@@ -1,9 +1,11 @@
1
+ import type { ChartError, ErrorType } from '../../../types/errors.type';
1
2
  import type { PieChartChildrenType, PieChartContextType } from '../pieChart.type';
2
3
  interface BuildPieContextValueProps {
3
4
  children: PieChartChildrenType;
4
5
  canvasWidth: number;
5
6
  canvasHeight: number;
6
7
  halfChart?: boolean;
8
+ addError?: (errorType: keyof typeof ErrorType, error: Omit<ChartError, 'type'>) => void;
7
9
  }
8
10
  /**
9
11
  * Builds the context value for the PieChart component.
@@ -11,6 +13,6 @@ interface BuildPieContextValueProps {
11
13
  * @param {BuildPieContextValueProps} props - The props for building the context value.
12
14
  * @returns {Omit<PieChartContextType, 'canvasHeight' | 'canvasWidth' | 'data'>} The context value.
13
15
  */
14
- export declare const buildPieContextValue: ({ canvasHeight, canvasWidth, children, halfChart, }: BuildPieContextValueProps) => Omit<PieChartContextType, "canvasHeight" | "canvasWidth" | "data">;
16
+ export declare const buildPieContextValue: ({ addError, canvasHeight, canvasWidth, children, halfChart, }: BuildPieContextValueProps) => Omit<PieChartContextType, "canvasHeight" | "canvasWidth" | "data">;
15
17
  export {};
16
18
  //# sourceMappingURL=buildPieContextValue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildPieContextValue.d.ts","sourceRoot":"","sources":["../../../../../src/charts/pieChart/context/buildPieContextValue.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAElF,UAAU,yBAAyB;IACjC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AAEH,eAAO,MAAM,oBAAoB,GAAI,qDAKlC,yBAAyB,KAAG,IAAI,CACjC,mBAAmB,EACnB,cAAc,GAAG,aAAa,GAAG,MAAM,CAsCxC,CAAC"}
1
+ {"version":3,"file":"buildPieContextValue.d.ts","sourceRoot":"","sources":["../../../../../src/charts/pieChart/context/buildPieContextValue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAElF,UAAU,yBAAyB;IACjC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,OAAO,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;CACzF;AAED;;;;;GAKG;AAEH,eAAO,MAAM,oBAAoB,GAAI,+DAMlC,yBAAyB,KAAG,IAAI,CACjC,mBAAmB,EACnB,cAAc,GAAG,aAAa,GAAG,MAAM,CAkDxC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { Children, isValidElement } from 'react';
2
+ import { buildCanvasDimensionsError } from '../../../utils/buildErrors/buildErrors';
2
3
  import { parseStringToNumberPx } from '../../../utils/parseStringToNumberPx.ts/parseStringToNumberPx';
4
+ import { CHART_CANVAS_DEFAULTS } from '../../constants/chartDefaults';
3
5
  import { PieChartPath } from '../fragments/pieChartPath';
4
6
  /**
5
7
  * Builds the context value for the PieChart component.
@@ -7,7 +9,16 @@ import { PieChartPath } from '../fragments/pieChartPath';
7
9
  * @param {BuildPieContextValueProps} props - The props for building the context value.
8
10
  * @returns {Omit<PieChartContextType, 'canvasHeight' | 'canvasWidth' | 'data'>} The context value.
9
11
  */
10
- export const buildPieContextValue = ({ canvasHeight, canvasWidth, children, halfChart, }) => {
12
+ export const buildPieContextValue = ({ addError, canvasHeight, canvasWidth, children, halfChart, }) => {
13
+ // Validate canvas dimensions
14
+ if (canvasWidth <= 0 || canvasHeight <= 0) {
15
+ addError?.('PIE_CHART_CONTEXT_ERROR', {
16
+ error: buildCanvasDimensionsError(canvasWidth, canvasHeight),
17
+ });
18
+ }
19
+ // Use safe canvas dimensions with defaults if invalid
20
+ const safeCanvasWidth = canvasWidth > 0 ? canvasWidth : CHART_CANVAS_DEFAULTS.SAFE_WIDTH;
21
+ const safeCanvasHeight = canvasHeight > 0 ? canvasHeight : CHART_CANVAS_DEFAULTS.SAFE_HEIGHT;
11
22
  // Use the min inner radious of the paths to calculate the size
12
23
  let minRadius = undefined;
13
24
  let foreignObjectSize = undefined;
@@ -32,9 +43,10 @@ export const buildPieContextValue = ({ canvasHeight, canvasWidth, children, half
32
43
  const sizeFixed = foreignObjectSize ?? 0;
33
44
  const height = halfChart ? sizeFixed / 2 : sizeFixed;
34
45
  const width = sizeFixed;
35
- const x = canvasWidth / 2;
36
- const y = halfChart ? canvasHeight : canvasHeight / 2;
46
+ const x = safeCanvasWidth / 2;
47
+ const y = halfChart ? safeCanvasHeight : safeCanvasHeight / 2;
37
48
  return {
49
+ addError,
38
50
  foreignObject: {
39
51
  height,
40
52
  width,
@@ -1 +1 @@
1
- {"version":3,"file":"pieChartPath.d.ts","sourceRoot":"","sources":["../../../../../src/charts/pieChart/fragments/pieChartPath.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAyC,MAAM,OAAO,CAAC;AAEvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAM9D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,SAAS,CAyCtC,CAAC"}
1
+ {"version":3,"file":"pieChartPath.d.ts","sourceRoot":"","sources":["../../../../../src/charts/pieChart/fragments/pieChartPath.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAoD,MAAM,OAAO,CAAC;AAElF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAW9D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,SAAS,CA4EtC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { createElement as _createElement } from "react";
3
- import { useContext, useRef } from 'react';
3
+ import { useContext, useEffect, useRef } from 'react';
4
+ import { buildEmptyDataArrayError, buildInvalidTotalError, buildPieDataKeyNotFoundError, } from '../../../utils/buildErrors/buildErrors';
4
5
  import { parseStringToNumberPx } from '../../../utils/parseStringToNumberPx.ts/parseStringToNumberPx';
5
6
  import { PieChartContext } from '../context/pieChartContext';
6
7
  import { PieChartSegment } from './pieChartSegment';
@@ -17,12 +18,39 @@ import { PieChartSegment } from './pieChartSegment';
17
18
  */
18
19
  export const PieChartPath = ({ dataKey, fill, gap, innerRadius, radius, ...props }) => {
19
20
  const key = String(dataKey);
20
- const { canvasHeight, canvasWidth, data, dataTestId, halfChart } = useContext(PieChartContext);
21
+ const { addError, canvasHeight, canvasWidth, data, dataTestId, halfChart } = useContext(PieChartContext);
21
22
  const chartInitAngle = halfChart ? 0 : -Math.PI / 2; // ? 0deg : -90deg
22
23
  const startAngle = useRef(chartInitAngle);
24
+ // Extract data for this key to optimize useEffect dependencies
25
+ const dataArray = data[key];
26
+ const hasDataKey = Object.prototype.hasOwnProperty.call(data, key);
27
+ // Path error validations
28
+ useEffect(() => {
29
+ // Validate dataKey exists in dataset
30
+ if (!hasDataKey) {
31
+ addError?.('PIE_CHART_PATH_ERROR', {
32
+ error: buildPieDataKeyNotFoundError(key),
33
+ });
34
+ return;
35
+ }
36
+ // Validate data array exists and is not empty
37
+ if (!dataArray || dataArray.length === 0) {
38
+ addError?.('PIE_CHART_PATH_ERROR', {
39
+ error: buildEmptyDataArrayError(key),
40
+ });
41
+ return;
42
+ }
43
+ // Calculate total and validate
44
+ const calculatedTotal = dataArray.reduce((acc, group) => acc + group.value, 0);
45
+ if (calculatedTotal <= 0 || isNaN(calculatedTotal)) {
46
+ addError?.('PIE_CHART_PATH_ERROR', {
47
+ error: buildInvalidTotalError(key, calculatedTotal),
48
+ });
49
+ }
50
+ }, [dataArray, hasDataKey, key]);
23
51
  const total = data[key]?.reduce((acc, group) => acc + group.value, 0);
24
52
  const singleStroke = data[key]?.length === 1;
25
53
  const parsedInnerRadius = innerRadius ? parseStringToNumberPx(innerRadius) : undefined;
26
54
  const parsedRadius = radius ? parseStringToNumberPx(radius) : undefined;
27
- return data[key]?.length ? (_jsx("g", { children: data[key].map((group, index) => (_createElement(PieChartSegment, { ...props, ...group, key: `${index.toString()}`, canvasHeight: canvasHeight, canvasWidth: canvasWidth, color: group.color || fill, dataTestId: `${dataTestId}path-${index}`, gap: gap, halfChart: halfChart, innerRadius: parsedInnerRadius, radius: parsedRadius, singleStroke: singleStroke, startAngle: startAngle, total: total }))) })) : (_jsx(_Fragment, {}));
55
+ return data[key]?.length ? (_jsx("g", { children: data[key].map((group, index) => (_createElement(PieChartSegment, { ...props, ...group, key: `${index.toString()}`, canvasHeight: canvasHeight, canvasWidth: canvasWidth, color: group.color || fill, dataKey: key, dataTestId: `${dataTestId}path-${index}`, gap: gap, halfChart: halfChart, index: index, innerRadius: parsedInnerRadius, radius: parsedRadius, singleStroke: singleStroke, startAngle: startAngle, total: total }))) })) : (_jsx(_Fragment, {}));
28
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pieChartSegment.d.ts","sourceRoot":"","sources":["../../../../../src/charts/pieChart/fragments/pieChartSegment.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAmC1D,CAAC"}
1
+ {"version":3,"file":"pieChartSegment.d.ts","sourceRoot":"","sources":["../../../../../src/charts/pieChart/fragments/pieChartSegment.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAoG1D,CAAC"}
@@ -1,5 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useContext, useEffect } from 'react';
2
3
  import { Path } from '../../../components/path/path';
4
+ import { buildInnerRadiusOutOfRangeError, buildInvalidGroupError, buildInvalidInnerRadiusError, buildInvalidRadiusError, buildSegmentNegativeValueError, buildSegmentValueError, } from '../../../utils/buildErrors/buildErrors';
5
+ import { PieChartContext } from '../context/pieChartContext';
3
6
  import { calculateSegmentPath } from '../utils/calculateSegmentPath';
4
7
  /**
5
8
  * Renders a segment of a pie chart.
@@ -16,7 +19,61 @@ import { calculateSegmentPath } from '../utils/calculateSegmentPath';
16
19
  * @param props - Additional props to pass to the Path component.
17
20
  * @returns A React element representing the pie chart segment.
18
21
  */
19
- export const PieChartSegment = ({ canvasHeight, canvasWidth, color = 'blue', gap, halfChart, innerRadius, radius, singleStroke, startAngle, total, value, ...props }) => {
22
+ export const PieChartSegment = ({ canvasHeight, canvasWidth, color = 'blue', dataKey, gap, halfChart, index, innerRadius, name, radius, singleStroke, startAngle, total, value, ...props }) => {
23
+ const { addError } = useContext(PieChartContext);
24
+ // Convert values to primitives for stable dependencies
25
+ const numericValue = Number(value);
26
+ const numericRadius = radius !== undefined ? Number(radius) : undefined;
27
+ const numericInnerRadius = innerRadius !== undefined ? Number(innerRadius) : undefined;
28
+ const trimmedName = name?.trim() || '';
29
+ // Segment error validations
30
+ useEffect(() => {
31
+ // Validate segment has non-empty name property
32
+ if (!trimmedName) {
33
+ addError?.('PIE_CHART_SEGMENT_ERROR', {
34
+ error: buildInvalidGroupError(dataKey || 'unknown', index || 0, 'name'),
35
+ });
36
+ }
37
+ // Validate segment value is numeric
38
+ if (isNaN(numericValue)) {
39
+ addError?.('PIE_CHART_SEGMENT_ERROR', {
40
+ error: buildSegmentValueError(value, trimmedName || `segment-${index}`),
41
+ });
42
+ return;
43
+ }
44
+ // Validate non-negative values
45
+ if (numericValue < 0) {
46
+ addError?.('PIE_CHART_SEGMENT_ERROR', {
47
+ error: buildSegmentNegativeValueError(numericValue, trimmedName || `segment-${index}`),
48
+ });
49
+ }
50
+ // Validate radius if provided
51
+ if (numericRadius !== undefined) {
52
+ if (isNaN(numericRadius) || numericRadius <= 0) {
53
+ addError?.('PIE_CHART_SEGMENT_ERROR', {
54
+ error: buildInvalidRadiusError(radius),
55
+ });
56
+ }
57
+ }
58
+ // Validate innerRadius if provided
59
+ if (numericInnerRadius !== undefined) {
60
+ if (isNaN(numericInnerRadius) || numericInnerRadius < 0) {
61
+ addError?.('PIE_CHART_SEGMENT_ERROR', {
62
+ error: buildInvalidInnerRadiusError(innerRadius),
63
+ });
64
+ }
65
+ // Validate innerRadius < radius
66
+ if (numericRadius !== undefined) {
67
+ if (!isNaN(numericRadius) && !isNaN(numericInnerRadius)) {
68
+ if (numericInnerRadius >= numericRadius) {
69
+ addError?.('PIE_CHART_SEGMENT_ERROR', {
70
+ error: buildInnerRadiusOutOfRangeError(numericInnerRadius, numericRadius),
71
+ });
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }, [dataKey, index, numericInnerRadius, numericRadius, numericValue, trimmedName]);
20
77
  const pathData = calculateSegmentPath({
21
78
  canvasHeight,
22
79
  canvasWidth,
@@ -1,6 +1,7 @@
1
1
  import type { ReactElement, ReactNode } from 'react';
2
2
  import type { PathProps } from '../../components/path/path.types';
3
3
  import type { CanvasConfig } from '../../types/canvas.type';
4
+ import type { ChartError, ChartErrorCollection, ErrorType } from '../../types/errors.type';
4
5
  interface Group {
5
6
  name: string;
6
7
  value: number;
@@ -34,6 +35,7 @@ export interface PieChartProps {
34
35
  onBlur?: (event: React.FocusEvent<SVGElement>) => void;
35
36
  onKeyDown?: (event: React.KeyboardEvent<SVGSVGElement>) => void;
36
37
  onKeyUp?: (event: React.KeyboardEvent<SVGSVGElement>) => void;
38
+ onErrors?: (errors: ChartErrorCollection) => void;
37
39
  }
38
40
  export interface PieChartContextType {
39
41
  foreignObject?: {
@@ -47,6 +49,8 @@ export interface PieChartContextType {
47
49
  data: DataItem;
48
50
  dataTestId?: string;
49
51
  halfChart?: boolean;
52
+ error?: ChartError;
53
+ addError?: (errorType: keyof typeof ErrorType, error: Omit<ChartError, 'type'>) => void;
50
54
  }
51
55
  export type PieChartSegmentProps = PathProps & {
52
56
  total: number;
@@ -58,8 +62,11 @@ export type PieChartSegmentProps = PathProps & {
58
62
  radius?: number;
59
63
  value: number;
60
64
  color?: string;
65
+ name?: string;
61
66
  singleStroke: boolean;
62
67
  halfChart?: boolean;
68
+ dataKey?: string;
69
+ index?: number;
63
70
  };
64
71
  export {};
65
72
  //# sourceMappingURL=pieChart.type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pieChart.type.d.ts","sourceRoot":"","sources":["../../../../src/charts/pieChart/pieChart.type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pieChart.type.d.ts","sourceRoot":"","sources":["../../../../src/charts/pieChart/pieChart.type.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pieChartStructure.d.ts","sourceRoot":"","sources":["../../../../src/charts/pieChart/pieChartStructure.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAA8B,MAAM,OAAO,CAAC;AAS5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,aAAa,CAkE/C,CAAC"}
1
+ {"version":3,"file":"pieChartStructure.d.ts","sourceRoot":"","sources":["../../../../src/charts/pieChart/pieChartStructure.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAA8B,MAAM,OAAO,CAAC;AAY5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,aAAa,CA8E/C,CAAC"}
@@ -3,6 +3,8 @@ import { 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';
7
+ import { getDataFingerprint } from '../../utils/getDataFingerprint/getDataFingerprint';
6
8
  import { parseStringToNumberPx } from '../../utils/parseStringToNumberPx.ts/parseStringToNumberPx';
7
9
  import { buildPieContextValue } from './context/buildPieContextValue';
8
10
  import { PieChartContext } from './context/pieChartContext';
@@ -36,7 +38,7 @@ import { PieChartContext } from './context/pieChartContext';
36
38
  * @param {ChartData[]} props.data - The data for the pie chart.
37
39
  * @returns {ReactElement} The rendered pie chart component.
38
40
  */
39
- export const PieChartStructure = ({ ariaHidden, ariaLabel, canvasConfig = DefaultCanvasConfig, caption, children, classNames, data, dataTestId = 'pie-chart', halfChart, height = '100%', radius = '50%', role, tabIndex, width = '100%', ...props }) => {
41
+ export const PieChartStructure = ({ ariaHidden, ariaLabel, canvasConfig = DefaultCanvasConfig, caption, children, classNames, data, dataTestId = 'pie-chart', halfChart, height = '100%', onErrors, radius = '50%', role, tabIndex, width = '100%', ...props }) => {
40
42
  // Destructure the canvas configuration to obtain width, height, and extra space.
41
43
  const { extraSpace: canvasExtraSpace, height: canvasHeight, width: canvasWidth } = canvasConfig;
42
44
  const parsedCanvasWidth = parseStringToNumberPx(canvasWidth);
@@ -46,14 +48,22 @@ export const PieChartStructure = ({ ariaHidden, ariaLabel, canvasConfig = Defaul
46
48
  : undefined;
47
49
  // Build the viewBox string based on canvas dimensions and extra space.
48
50
  const viewBox = buildViewBox(parsedCanvasWidth, parsedCanvasHeight, parsedCanvasExtraSpace);
51
+ const errorAccumulator = useMemo(() => createErrorAccumulator(onErrors), [onErrors]);
52
+ // Create a fingerprint of the data to avoid unnecessary contextValue updates
53
+ const dataFingerprint = getDataFingerprint(data);
49
54
  const contextValue = useMemo(() => {
55
+ // Clear previous errors before building new context
56
+ errorAccumulator.clearErrors();
50
57
  return buildPieContextValue({
58
+ addError: (errorType, error) => {
59
+ errorAccumulator.addError(errorType, error);
60
+ },
51
61
  canvasHeight: parsedCanvasHeight,
52
62
  canvasWidth: parsedCanvasWidth,
53
63
  children,
54
64
  halfChart,
55
65
  });
56
- }, [canvasHeight, canvasWidth, halfChart]);
66
+ }, [canvasHeight, canvasWidth, halfChart, dataFingerprint, errorAccumulator]);
57
67
  return (_jsx(SvgContainer, { ariaHidden: ariaHidden, ariaLabel: ariaLabel, caption: caption, className: classNames, dataTestId: dataTestId, height: height, radius: radius, role: role, tabIndex: tabIndex, viewBox: viewBox, width: width, ...props, children: _jsx(PieChartContext.Provider, { value: {
58
68
  ...contextValue,
59
69
  canvasHeight: parsedCanvasHeight,
@@ -11,6 +11,9 @@ export declare const ErrorType: {
11
11
  readonly LINE_CHART_SEPARATOR_ERROR: "LINE_CHART_SEPARATOR_ERROR";
12
12
  readonly LINE_CHART_X_AXIS_ERROR: "LINE_CHART_X_AXIS_ERROR";
13
13
  readonly LINE_CHART_Y_AXIS_ERROR: "LINE_CHART_Y_AXIS_ERROR";
14
+ readonly PIE_CHART_CONTEXT_ERROR: "PIE_CHART_CONTEXT_ERROR";
15
+ readonly PIE_CHART_PATH_ERROR: "PIE_CHART_PATH_ERROR";
16
+ readonly PIE_CHART_SEGMENT_ERROR: "PIE_CHART_SEGMENT_ERROR";
14
17
  };
15
18
  export interface ChartError {
16
19
  error?: Error;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.type.d.ts","sourceRoot":"","sources":["../../../src/types/errors.type.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;CAgBZ,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,MAAM,OAAO,SAAS,CAAC;CAC9B;AACD,MAAM,MAAM,oBAAoB,GAAG;KAChC,IAAI,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE;CACjF,CAAC;AAGF,eAAO,MAAM,gBAAgB,GAAI,OAAO,UAAU,GAAG,UAAU,EAAE,KAAG,UAAU,EAE7E,CAAC"}
1
+ {"version":3,"file":"errors.type.d.ts","sourceRoot":"","sources":["../../../src/types/errors.type.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;CAoBZ,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,MAAM,OAAO,SAAS,CAAC;CAC9B;AACD,MAAM,MAAM,oBAAoB,GAAG;KAChC,IAAI,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE;CACjF,CAAC;AAGF,eAAO,MAAM,gBAAgB,GAAI,OAAO,UAAU,GAAG,UAAU,EAAE,KAAG,UAAU,EAE7E,CAAC"}
@@ -14,6 +14,10 @@ export const ErrorType = {
14
14
  LINE_CHART_SEPARATOR_ERROR: 'LINE_CHART_SEPARATOR_ERROR',
15
15
  LINE_CHART_X_AXIS_ERROR: 'LINE_CHART_X_AXIS_ERROR',
16
16
  LINE_CHART_Y_AXIS_ERROR: 'LINE_CHART_Y_AXIS_ERROR',
17
+ // Pie Chart Error categories
18
+ PIE_CHART_CONTEXT_ERROR: 'PIE_CHART_CONTEXT_ERROR',
19
+ PIE_CHART_PATH_ERROR: 'PIE_CHART_PATH_ERROR',
20
+ PIE_CHART_SEGMENT_ERROR: 'PIE_CHART_SEGMENT_ERROR',
17
21
  };
18
22
  // Utility for array conversion
19
23
  export const normalizeToArray = (error) => {
@@ -1,4 +1,14 @@
1
1
  export declare const BuildError: {
2
+ readonly PIE_CHART_EMPTY_DATA: "PIE_CHART_EMPTY_DATA";
3
+ readonly PIE_CHART_INNER_RADIUS_OUT_OF_RANGE: "PIE_CHART_INNER_RADIUS_OUT_OF_RANGE";
4
+ readonly PIE_CHART_INVALID_CANVAS_DIMENSIONS: "PIE_CHART_INVALID_CANVAS_DIMENSIONS";
5
+ readonly PIE_CHART_INVALID_DATA_KEY: "PIE_CHART_INVALID_DATA_KEY";
6
+ readonly PIE_CHART_INVALID_INNER_RADIUS: "PIE_CHART_INVALID_INNER_RADIUS";
7
+ readonly PIE_CHART_INVALID_RADIUS: "PIE_CHART_INVALID_RADIUS";
8
+ readonly PIE_CHART_INVALID_SEGMENT_VALUE: "PIE_CHART_INVALID_SEGMENT_VALUE";
9
+ readonly PIE_CHART_INVALID_TOTAL: "PIE_CHART_INVALID_TOTAL";
10
+ readonly PIE_CHART_MISSING_SEGMENT_NAME: "PIE_CHART_MISSING_SEGMENT_NAME";
11
+ readonly PIE_CHART_NEGATIVE_SEGMENT_VALUE: "PIE_CHART_NEGATIVE_SEGMENT_VALUE";
2
12
  readonly LINE_CHART_INVALID_CANVAS: "LINE_CHART_INVALID_CANVAS";
3
13
  readonly LINE_CHART_NO_DATA: "LINE_CHART_NO_DATA";
4
14
  readonly LINE_CHART_PATH_ALL_VALUES_NULL: "LINE_CHART_PATH_ALL_VALUES_NULL";
@@ -66,4 +76,5 @@ export declare const buildSeparatorXOutOfRangeError: (value: number, min: number
66
76
  */
67
77
  export declare const buildSeparatorYOutOfRangeError: (value: number, min: number, max: number) => Error;
68
78
  export { buildBarValueError, buildBarNegativeValueError, buildBarDataKeyNotFoundError, buildBarDistributionError, } from './charts/buildBarChartErrors';
79
+ export { buildSegmentValueError, buildSegmentNegativeValueError, buildPieDataKeyNotFoundError, buildEmptyDataArrayError, buildInvalidTotalError, buildInvalidGroupError, buildInvalidRadiusError, buildInvalidInnerRadiusError, buildInnerRadiusOutOfRangeError, } from './charts/buildPieChartErrors';
69
80
  //# sourceMappingURL=buildErrors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildErrors.d.ts","sourceRoot":"","sources":["../../../../src/utils/buildErrors/buildErrors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIb,CAAC;AAIX,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,EAAE,KAAK,CAIpF,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,CAAC,OAAO,UAAU,EAAE,MAAM,OAAO,UAAU,CAAC,KAAG,KAC5D,CAAC;AAEtB;;GAEG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,MAAM,KAAG,KACJ,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,0BAA0B,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,KAGxE,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,6BAA6B,GAAI,OAAO,MAAM,GAAG,MAAM,KAAG,KACO,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,6BAA6B,GAAI,OAAO,MAAM,GAAG,MAAM,KAAG,KACO,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,8BAA8B,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,KACT,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,8BAA8B,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,KACT,CAAC;AAGjF,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"buildErrors.d.ts","sourceRoot":"","sources":["../../../../src/utils/buildErrors/buildErrors.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKb,CAAC;AAIX,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,EAAE,KAAK,CAKpF,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,CAAC,OAAO,UAAU,EAAE,MAAM,OAAO,UAAU,CAAC,KAAG,KAC5D,CAAC;AAEtB;;GAEG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,MAAM,KAAG,KACJ,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,0BAA0B,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,KAGxE,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,6BAA6B,GAAI,OAAO,MAAM,GAAG,MAAM,KAAG,KACO,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,6BAA6B,GAAI,OAAO,MAAM,GAAG,MAAM,KAAG,KACO,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,8BAA8B,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,KACT,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,8BAA8B,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,KACT,CAAC;AAGjF,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,8BAA8B,CAAC"}
@@ -1,14 +1,17 @@
1
1
  import { BarChartErrors, BarChartErrorsRecord } from './constants/errors/barChartErrors';
2
2
  import { LineChartErrors, LineChartErrorsRecord } from './constants/errors/lineChartErrors';
3
+ import { PieChartErrors, PieChartErrorsRecord } from './constants/errors/pieChartErrors';
3
4
  export const BuildError = {
4
5
  INVALID_X_TICK: 'INVALID_X_TICK',
5
6
  ...BarChartErrors,
6
7
  ...LineChartErrors,
8
+ ...PieChartErrors,
7
9
  };
8
10
  const INVALID_X_TICK_ERROR = '[getXTicks] Invalid X tick values calculated';
9
11
  export const ErrorsRecord = {
10
12
  ...BarChartErrorsRecord,
11
13
  ...LineChartErrorsRecord,
14
+ ...PieChartErrorsRecord,
12
15
  INVALID_X_TICK: new Error(INVALID_X_TICK_ERROR),
13
16
  };
14
17
  export const buildError = (error) => ErrorsRecord[error];
@@ -38,3 +41,5 @@ export const buildSeparatorXOutOfRangeError = (value, min, max) => new Error(`xB
38
41
  export const buildSeparatorYOutOfRangeError = (value, min, max) => new Error(`yBreakAxis value ${value} is outside data range (${min} - ${max})`);
39
42
  // Re-export bar chart error builders
40
43
  export { buildBarValueError, buildBarNegativeValueError, buildBarDataKeyNotFoundError, buildBarDistributionError, } from './charts/buildBarChartErrors';
44
+ // Re-export pie chart error builders
45
+ export { buildSegmentValueError, buildSegmentNegativeValueError, buildPieDataKeyNotFoundError, buildEmptyDataArrayError, buildInvalidTotalError, buildInvalidGroupError, buildInvalidRadiusError, buildInvalidInnerRadiusError, buildInnerRadiusOutOfRangeError, } from './charts/buildPieChartErrors';
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Creates a dynamic error for when a segment value is not numeric
3
+ */
4
+ export declare const buildSegmentValueError: (value: unknown, groupName: string) => Error;
5
+ /**
6
+ * Creates a dynamic error for when a segment value is negative
7
+ */
8
+ export declare const buildSegmentNegativeValueError: (value: number, groupName: string) => Error;
9
+ /**
10
+ * Creates a dynamic error for when a dataKey is not found in the dataset
11
+ */
12
+ export declare const buildPieDataKeyNotFoundError: (dataKey: string) => Error;
13
+ /**
14
+ * Creates a dynamic error for when the data array is empty
15
+ */
16
+ export declare const buildEmptyDataArrayError: (dataKey: string) => Error;
17
+ /**
18
+ * Creates a dynamic error for when total value is zero or invalid
19
+ */
20
+ export declare const buildInvalidTotalError: (dataKey: string, total: number) => Error;
21
+ /**
22
+ * Creates a dynamic error for when a group is missing required properties
23
+ */
24
+ export declare const buildInvalidGroupError: (dataKey: string, index: number, missingProp: string) => Error;
25
+ /**
26
+ * Creates a dynamic error for invalid radius value
27
+ */
28
+ export declare const buildInvalidRadiusError: (radius: unknown) => Error;
29
+ /**
30
+ * Creates a dynamic error for invalid innerRadius value
31
+ */
32
+ export declare const buildInvalidInnerRadiusError: (innerRadius: unknown) => Error;
33
+ /**
34
+ * Creates a dynamic error for when innerRadius is greater than or equal to radius
35
+ */
36
+ export declare const buildInnerRadiusOutOfRangeError: (innerRadius: number, radius: number) => Error;
37
+ //# sourceMappingURL=buildPieChartErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildPieChartErrors.d.ts","sourceRoot":"","sources":["../../../../../src/utils/buildErrors/charts/buildPieChartErrors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,EAAE,WAAW,MAAM,KAAG,KACc,CAAC;AAE1F;;GAEG;AACH,eAAO,MAAM,8BAA8B,GAAI,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,KACM,CAAC;AAEzF;;GAEG;AACH,eAAO,MAAM,4BAA4B,GAAI,SAAS,MAAM,KAAG,KACE,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,wBAAwB,GAAI,SAAS,MAAM,KAAG,KACJ,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,KACG,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,MAAM,EACf,OAAO,MAAM,EACb,aAAa,MAAM,KAClB,KAGA,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,OAAO,KAAG,KACkB,CAAC;AAE7E;;GAEG;AACH,eAAO,MAAM,4BAA4B,GAAI,aAAa,OAAO,KAAG,KAC0B,CAAC;AAE/F;;GAEG;AACH,eAAO,MAAM,+BAA+B,GAAI,aAAa,MAAM,EAAE,QAAQ,MAAM,KAAG,KAGnF,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Creates a dynamic error for when a segment value is not numeric
3
+ */
4
+ export const buildSegmentValueError = (value, groupName) => new Error(`Invalid segment value for "${groupName}": "${value}" is not a valid number`);
5
+ /**
6
+ * Creates a dynamic error for when a segment value is negative
7
+ */
8
+ export const buildSegmentNegativeValueError = (value, groupName) => new Error(`Negative segment value for "${groupName}": ${value} (values must be >= 0)`);
9
+ /**
10
+ * Creates a dynamic error for when a dataKey is not found in the dataset
11
+ */
12
+ export const buildPieDataKeyNotFoundError = (dataKey) => new Error(`DataKey "${dataKey}" not found in PieChart dataset`);
13
+ /**
14
+ * Creates a dynamic error for when the data array is empty
15
+ */
16
+ export const buildEmptyDataArrayError = (dataKey) => new Error(`Data array for key "${dataKey}" is empty`);
17
+ /**
18
+ * Creates a dynamic error for when total value is zero or invalid
19
+ */
20
+ export const buildInvalidTotalError = (dataKey, total) => new Error(`Invalid total value for "${dataKey}": ${total} (must be > 0)`);
21
+ /**
22
+ * Creates a dynamic error for when a group is missing required properties
23
+ */
24
+ export const buildInvalidGroupError = (dataKey, index, missingProp) => new Error(`Invalid group at index ${index} in "${dataKey}": missing required property "${missingProp}"`);
25
+ /**
26
+ * Creates a dynamic error for invalid radius value
27
+ */
28
+ export const buildInvalidRadiusError = (radius) => new Error(`Invalid radius value: "${radius}" (must be a positive number)`);
29
+ /**
30
+ * Creates a dynamic error for invalid innerRadius value
31
+ */
32
+ export const buildInvalidInnerRadiusError = (innerRadius) => new Error(`Invalid innerRadius value: "${innerRadius}" (must be a positive number or zero)`);
33
+ /**
34
+ * Creates a dynamic error for when innerRadius is greater than or equal to radius
35
+ */
36
+ export const buildInnerRadiusOutOfRangeError = (innerRadius, radius) => new Error(`innerRadius (${innerRadius}) must be less than radius (${radius}) for donut chart rendering`);
@@ -0,0 +1,13 @@
1
+ export declare const PieChartErrorMessages: {
2
+ readonly PIE_CHART_EMPTY_DATA: "PieChart data is empty or undefined";
3
+ readonly PIE_CHART_INNER_RADIUS_OUT_OF_RANGE: "Inner radius must be less than radius";
4
+ readonly PIE_CHART_INVALID_CANVAS_DIMENSIONS: "Invalid canvas dimensions for PieChart";
5
+ readonly PIE_CHART_INVALID_DATA_KEY: "Invalid or missing dataKey in PieChart data";
6
+ readonly PIE_CHART_INVALID_INNER_RADIUS: "Invalid innerRadius value";
7
+ readonly PIE_CHART_INVALID_RADIUS: "Invalid radius value";
8
+ readonly PIE_CHART_INVALID_SEGMENT_VALUE: "Invalid segment value (non-numeric)";
9
+ readonly PIE_CHART_INVALID_TOTAL: "PieChart total value is zero or invalid";
10
+ readonly PIE_CHART_MISSING_SEGMENT_NAME: "Segment is missing required name property";
11
+ readonly PIE_CHART_NEGATIVE_SEGMENT_VALUE: "Segment value cannot be negative";
12
+ };
13
+ //# sourceMappingURL=pieChartErrorMessages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pieChartErrorMessages.d.ts","sourceRoot":"","sources":["../../../../../../src/utils/buildErrors/constants/errorMessages/pieChartErrorMessages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB;;;;;;;;;;;CAmBxB,CAAC"}
@@ -0,0 +1,20 @@
1
+ export const PieChartErrorMessages = {
2
+ // Data Validation Errors
3
+ PIE_CHART_EMPTY_DATA: 'PieChart data is empty or undefined',
4
+ // Radius Errors
5
+ PIE_CHART_INNER_RADIUS_OUT_OF_RANGE: 'Inner radius must be less than radius',
6
+ // Canvas & Context Errors
7
+ PIE_CHART_INVALID_CANVAS_DIMENSIONS: 'Invalid canvas dimensions for PieChart',
8
+ // Data Validation Errors
9
+ PIE_CHART_INVALID_DATA_KEY: 'Invalid or missing dataKey in PieChart data',
10
+ // Radius Errors
11
+ PIE_CHART_INVALID_INNER_RADIUS: 'Invalid innerRadius value',
12
+ PIE_CHART_INVALID_RADIUS: 'Invalid radius value',
13
+ // Segment Errors
14
+ PIE_CHART_INVALID_SEGMENT_VALUE: 'Invalid segment value (non-numeric)',
15
+ // Data Validation Errors
16
+ PIE_CHART_INVALID_TOTAL: 'PieChart total value is zero or invalid',
17
+ // Segment Errors
18
+ PIE_CHART_MISSING_SEGMENT_NAME: 'Segment is missing required name property',
19
+ PIE_CHART_NEGATIVE_SEGMENT_VALUE: 'Segment value cannot be negative',
20
+ };
@@ -0,0 +1,14 @@
1
+ export declare const PieChartErrors: {
2
+ readonly PIE_CHART_EMPTY_DATA: "PIE_CHART_EMPTY_DATA";
3
+ readonly PIE_CHART_INNER_RADIUS_OUT_OF_RANGE: "PIE_CHART_INNER_RADIUS_OUT_OF_RANGE";
4
+ readonly PIE_CHART_INVALID_CANVAS_DIMENSIONS: "PIE_CHART_INVALID_CANVAS_DIMENSIONS";
5
+ readonly PIE_CHART_INVALID_DATA_KEY: "PIE_CHART_INVALID_DATA_KEY";
6
+ readonly PIE_CHART_INVALID_INNER_RADIUS: "PIE_CHART_INVALID_INNER_RADIUS";
7
+ readonly PIE_CHART_INVALID_RADIUS: "PIE_CHART_INVALID_RADIUS";
8
+ readonly PIE_CHART_INVALID_SEGMENT_VALUE: "PIE_CHART_INVALID_SEGMENT_VALUE";
9
+ readonly PIE_CHART_INVALID_TOTAL: "PIE_CHART_INVALID_TOTAL";
10
+ readonly PIE_CHART_MISSING_SEGMENT_NAME: "PIE_CHART_MISSING_SEGMENT_NAME";
11
+ readonly PIE_CHART_NEGATIVE_SEGMENT_VALUE: "PIE_CHART_NEGATIVE_SEGMENT_VALUE";
12
+ };
13
+ export declare const PieChartErrorsRecord: Record<"PIE_CHART_EMPTY_DATA" | "PIE_CHART_INNER_RADIUS_OUT_OF_RANGE" | "PIE_CHART_INVALID_CANVAS_DIMENSIONS" | "PIE_CHART_INVALID_DATA_KEY" | "PIE_CHART_INVALID_INNER_RADIUS" | "PIE_CHART_INVALID_RADIUS" | "PIE_CHART_INVALID_SEGMENT_VALUE" | "PIE_CHART_INVALID_TOTAL" | "PIE_CHART_MISSING_SEGMENT_NAME" | "PIE_CHART_NEGATIVE_SEGMENT_VALUE", Error>;
14
+ //# sourceMappingURL=pieChartErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pieChartErrors.d.ts","sourceRoot":"","sources":["../../../../../../src/utils/buildErrors/constants/errors/pieChartErrors.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc;;;;;;;;;;;CAmBjB,CAAC;AAEX,eAAO,MAAM,oBAAoB,8VAMhC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { PieChartErrorMessages } from '../errorMessages/pieChartErrorMessages';
2
+ export const PieChartErrors = {
3
+ // Data Validation Errors
4
+ PIE_CHART_EMPTY_DATA: 'PIE_CHART_EMPTY_DATA',
5
+ // Radius Errors
6
+ PIE_CHART_INNER_RADIUS_OUT_OF_RANGE: 'PIE_CHART_INNER_RADIUS_OUT_OF_RANGE',
7
+ // Canvas & Context Errors
8
+ PIE_CHART_INVALID_CANVAS_DIMENSIONS: 'PIE_CHART_INVALID_CANVAS_DIMENSIONS',
9
+ // Data Validation Errors
10
+ PIE_CHART_INVALID_DATA_KEY: 'PIE_CHART_INVALID_DATA_KEY',
11
+ // Radius Errors
12
+ PIE_CHART_INVALID_INNER_RADIUS: 'PIE_CHART_INVALID_INNER_RADIUS',
13
+ PIE_CHART_INVALID_RADIUS: 'PIE_CHART_INVALID_RADIUS',
14
+ // Segment Errors
15
+ PIE_CHART_INVALID_SEGMENT_VALUE: 'PIE_CHART_INVALID_SEGMENT_VALUE',
16
+ // Data Validation Errors
17
+ PIE_CHART_INVALID_TOTAL: 'PIE_CHART_INVALID_TOTAL',
18
+ // Segment Errors
19
+ PIE_CHART_MISSING_SEGMENT_NAME: 'PIE_CHART_MISSING_SEGMENT_NAME',
20
+ PIE_CHART_NEGATIVE_SEGMENT_VALUE: 'PIE_CHART_NEGATIVE_SEGMENT_VALUE',
21
+ };
22
+ export const PieChartErrorsRecord = Object.entries(PieChartErrorMessages).reduce((acc, [key, message]) => {
23
+ acc[key] = new Error(message);
24
+ return acc;
25
+ }, {});