@mui/x-charts 7.8.0 → 7.10.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 (101) hide show
  1. package/BarChart/BarChart.d.ts +3 -3
  2. package/BarChart/useBarChartProps.d.ts +1 -1
  3. package/CHANGELOG.md +140 -0
  4. package/ChartContainer/ChartContainer.js +3 -1
  5. package/ChartsAxisHighlight/ChartsAxisHighlight.js +1 -1
  6. package/ChartsSurface.js +5 -1
  7. package/ChartsTooltip/ChartsAxisTooltipContent.d.ts +3 -3
  8. package/ChartsTooltip/ChartsAxisTooltipContent.js +4 -39
  9. package/ChartsTooltip/ChartsItemTooltipContent.d.ts +7 -6
  10. package/ChartsTooltip/ChartsItemTooltipContent.js +4 -27
  11. package/ChartsTooltip/ChartsTooltip.d.ts +10 -9
  12. package/ChartsTooltip/ChartsTooltip.js +8 -2
  13. package/ChartsTooltip/ChartsTooltipTable.d.ts +15 -0
  14. package/ChartsTooltip/ChartsTooltipTable.js +19 -0
  15. package/ChartsTooltip/index.d.ts +1 -0
  16. package/ChartsTooltip/index.js +11 -0
  17. package/ChartsTooltip/utils.d.ts +7 -6
  18. package/ChartsTooltip/utils.js +24 -30
  19. package/ChartsVoronoiHandler/ChartsVoronoiHandler.js +5 -5
  20. package/ChartsXAxis/ChartsXAxis.js +7 -5
  21. package/LineChart/AreaPlot.js +7 -1
  22. package/LineChart/LineChart.d.ts +3 -3
  23. package/LineChart/MarkPlot.js +6 -2
  24. package/LineChart/extremums.js +1 -1
  25. package/LineChart/useLineChartProps.d.ts +1 -1
  26. package/PieChart/PieChart.d.ts +3 -3
  27. package/ResponsiveChartContainer/ResponsiveChartContainer.js +3 -1
  28. package/ScatterChart/Scatter.js +7 -5
  29. package/ScatterChart/ScatterChart.d.ts +3 -3
  30. package/ScatterChart/ScatterChart.js +3 -1
  31. package/ScatterChart/useScatterChartProps.d.ts +1 -1
  32. package/SparkLineChart/SparkLineChart.d.ts +3 -3
  33. package/context/CartesianProvider/computeValue.d.ts +2 -2
  34. package/context/CartesianProvider/computeValue.js +21 -5
  35. package/context/ZAxisContextProvider.js +7 -2
  36. package/esm/ChartContainer/ChartContainer.js +3 -1
  37. package/esm/ChartsAxisHighlight/ChartsAxisHighlight.js +1 -1
  38. package/esm/ChartsSurface.js +5 -1
  39. package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +3 -38
  40. package/esm/ChartsTooltip/ChartsItemTooltipContent.js +3 -26
  41. package/esm/ChartsTooltip/ChartsTooltip.js +8 -2
  42. package/esm/ChartsTooltip/ChartsTooltipTable.js +20 -0
  43. package/esm/ChartsTooltip/index.js +2 -1
  44. package/esm/ChartsTooltip/utils.js +23 -30
  45. package/esm/ChartsVoronoiHandler/ChartsVoronoiHandler.js +5 -5
  46. package/esm/ChartsXAxis/ChartsXAxis.js +7 -5
  47. package/esm/LineChart/AreaPlot.js +7 -1
  48. package/esm/LineChart/MarkPlot.js +6 -2
  49. package/esm/LineChart/extremums.js +1 -1
  50. package/esm/ResponsiveChartContainer/ResponsiveChartContainer.js +3 -1
  51. package/esm/ScatterChart/Scatter.js +7 -5
  52. package/esm/ScatterChart/ScatterChart.js +3 -1
  53. package/esm/context/CartesianProvider/computeValue.js +21 -5
  54. package/esm/context/ZAxisContextProvider.js +7 -2
  55. package/esm/hooks/index.js +1 -0
  56. package/esm/hooks/useAxis.js +17 -0
  57. package/esm/hooks/useAxisEvents.js +20 -9
  58. package/esm/hooks/useInteractionItemProps.js +11 -4
  59. package/esm/hooks/useScale.js +6 -13
  60. package/esm/internals/index.js +2 -0
  61. package/hooks/index.d.ts +1 -0
  62. package/hooks/index.js +12 -0
  63. package/hooks/useAxis.d.ts +2 -0
  64. package/hooks/useAxis.js +24 -0
  65. package/hooks/useAxisEvents.js +20 -9
  66. package/hooks/useInteractionItemProps.d.ts +4 -2
  67. package/hooks/useInteractionItemProps.js +11 -4
  68. package/hooks/useScale.js +5 -13
  69. package/index.js +1 -1
  70. package/internals/index.d.ts +2 -0
  71. package/internals/index.js +20 -0
  72. package/models/colorMapping.d.ts +1 -1
  73. package/models/z-axis.d.ts +8 -0
  74. package/modern/ChartContainer/ChartContainer.js +3 -1
  75. package/modern/ChartsAxisHighlight/ChartsAxisHighlight.js +1 -1
  76. package/modern/ChartsSurface.js +5 -1
  77. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +3 -38
  78. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +3 -26
  79. package/modern/ChartsTooltip/ChartsTooltip.js +8 -2
  80. package/modern/ChartsTooltip/ChartsTooltipTable.js +20 -0
  81. package/modern/ChartsTooltip/index.js +2 -1
  82. package/modern/ChartsTooltip/utils.js +23 -30
  83. package/modern/ChartsVoronoiHandler/ChartsVoronoiHandler.js +5 -5
  84. package/modern/ChartsXAxis/ChartsXAxis.js +7 -5
  85. package/modern/LineChart/AreaPlot.js +7 -1
  86. package/modern/LineChart/MarkPlot.js +6 -2
  87. package/modern/LineChart/extremums.js +1 -1
  88. package/modern/ResponsiveChartContainer/ResponsiveChartContainer.js +3 -1
  89. package/modern/ScatterChart/Scatter.js +7 -5
  90. package/modern/ScatterChart/ScatterChart.js +3 -1
  91. package/modern/context/CartesianProvider/computeValue.js +21 -5
  92. package/modern/context/ZAxisContextProvider.js +7 -2
  93. package/modern/hooks/index.js +1 -0
  94. package/modern/hooks/useAxis.js +17 -0
  95. package/modern/hooks/useAxisEvents.js +20 -9
  96. package/modern/hooks/useInteractionItemProps.js +11 -4
  97. package/modern/hooks/useScale.js +6 -13
  98. package/modern/index.js +1 -1
  99. package/modern/internals/index.js +2 -0
  100. package/package.json +3 -3
  101. package/themeAugmentation/props.d.ts +2 -1
@@ -5,6 +5,7 @@ import { getValueToPositionMapper } from '../hooks/useScale';
5
5
  import { useInteractionItemProps } from '../hooks/useInteractionItemProps';
6
6
  import { InteractionContext } from '../context/InteractionProvider';
7
7
  import { useHighlighted } from '../context';
8
+ import { useDrawingArea } from '../hooks/useDrawingArea';
8
9
  import { jsx as _jsx } from "react/jsx-runtime";
9
10
  /**
10
11
  * Demos:
@@ -26,6 +27,10 @@ function Scatter(props) {
26
27
  markerSize,
27
28
  onItemClick
28
29
  } = props;
30
+ const {
31
+ left,
32
+ width
33
+ } = useDrawingArea();
29
34
  const {
30
35
  useVoronoiInteraction
31
36
  } = React.useContext(InteractionContext);
@@ -38,10 +43,7 @@ function Scatter(props) {
38
43
  const cleanData = React.useMemo(() => {
39
44
  const getXPosition = getValueToPositionMapper(xScale);
40
45
  const getYPosition = getValueToPositionMapper(yScale);
41
- const xRange = xScale.range();
42
46
  const yRange = yScale.range();
43
- const minXRange = Math.min(...xRange);
44
- const maxXRange = Math.max(...xRange);
45
47
  const minYRange = Math.min(...yRange);
46
48
  const maxYRange = Math.max(...yRange);
47
49
  const temp = [];
@@ -49,7 +51,7 @@ function Scatter(props) {
49
51
  const scatterPoint = series.data[i];
50
52
  const x = getXPosition(scatterPoint.x);
51
53
  const y = getYPosition(scatterPoint.y);
52
- const isInRange = x >= minXRange && x <= maxXRange && y >= minYRange && y <= maxYRange;
54
+ const isInRange = x >= left && x <= left + width && y >= minYRange && y <= maxYRange;
53
55
  const pointCtx = {
54
56
  type: 'scatter',
55
57
  seriesId: series.id,
@@ -74,7 +76,7 @@ function Scatter(props) {
74
76
  }
75
77
  }
76
78
  return temp;
77
- }, [xScale, yScale, series.data, series.id, getInteractionItemProps, color, colorGetter, isFaded, isHighlighted]);
79
+ }, [xScale, yScale, left, width, series.data, series.id, isHighlighted, isFaded, getInteractionItemProps, colorGetter, color]);
78
80
  return /*#__PURE__*/_jsx("g", {
79
81
  children: cleanData.map(dataPoint => /*#__PURE__*/_jsx("circle", _extends({
80
82
  cx: 0,
@@ -339,7 +339,9 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
339
339
  })]),
340
340
  data: PropTypes.array,
341
341
  dataKey: PropTypes.string,
342
- id: PropTypes.string
342
+ id: PropTypes.string,
343
+ max: PropTypes.number,
344
+ min: PropTypes.number
343
345
  }))
344
346
  } : void 0;
345
347
  export { ScatterChart };
@@ -10,6 +10,16 @@ const getRange = (drawingArea, axisName, isReverse) => {
10
10
  const range = axisName === 'x' ? [drawingArea.left, drawingArea.left + drawingArea.width] : [drawingArea.top + drawingArea.height, drawingArea.top];
11
11
  return isReverse ? range.reverse() : range;
12
12
  };
13
+ const zoomedScaleRange = (scaleRange, zoomRange) => {
14
+ const rangeGap = scaleRange[1] - scaleRange[0];
15
+ const zoomGap = zoomRange[1] - zoomRange[0];
16
+
17
+ // If current zoom show the scale between p1 and p2 percents
18
+ // The range should be extended by adding [0, p1] and [p2, 100] segments
19
+ const min = scaleRange[0] - zoomRange[0] * rangeGap / zoomGap;
20
+ const max = scaleRange[1] + (100 - zoomRange[1]) * rangeGap / zoomGap;
21
+ return [min, max];
22
+ };
13
23
  const isDateData = data => data?.[0] instanceof Date;
14
24
  function createDateFormatter(axis, range) {
15
25
  const timeScale = scaleTime(axis.data, range);
@@ -19,7 +29,7 @@ function createDateFormatter(axis, range) {
19
29
  }
20
30
  const DEFAULT_CATEGORY_GAP_RATIO = 0.2;
21
31
  const DEFAULT_BAR_GAP_RATIO = 0.1;
22
- export function computeValue(drawingArea, formattedSeries, inAxis, extremumGetters, axisName) {
32
+ export function computeValue(drawingArea, formattedSeries, inAxis, extremumGetters, axisName, zoomRange = [0, 100]) {
23
33
  const DEFAULT_AXIS_KEY = axisName === 'x' ? DEFAULT_X_AXIS_KEY : DEFAULT_Y_AXIS_KEY;
24
34
  const allAxis = [...(inAxis?.map((axis, index) => _extends({
25
35
  id: `defaultized-${axisName}-axis-${index}`
@@ -39,11 +49,12 @@ export function computeValue(drawingArea, formattedSeries, inAxis, extremumGette
39
49
  const barGapRatio = axis.barGapRatio ?? DEFAULT_BAR_GAP_RATIO;
40
50
  // Reverse range because ordinal scales are presented from top to bottom on y-axis
41
51
  const scaleRange = axisName === 'x' ? range : [range[1], range[0]];
52
+ const zoomedRange = zoomedScaleRange(scaleRange, zoomRange);
42
53
  completeAxis[axis.id] = _extends({
43
54
  categoryGapRatio,
44
55
  barGapRatio
45
56
  }, axis, {
46
- scale: scaleBand(axis.data, scaleRange).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
57
+ scale: scaleBand(axis.data, zoomedRange).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
47
58
  tickNumber: axis.data.length,
48
59
  colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
49
60
  values: axis.data
@@ -56,8 +67,9 @@ export function computeValue(drawingArea, formattedSeries, inAxis, extremumGette
56
67
  }
57
68
  if (isPointScaleConfig(axis)) {
58
69
  const scaleRange = axisName === 'x' ? range : [...range].reverse();
70
+ const zoomedRange = zoomedScaleRange(scaleRange, zoomRange);
59
71
  completeAxis[axis.id] = _extends({}, axis, {
60
- scale: scalePoint(axis.data, scaleRange),
72
+ scale: scalePoint(axis.data, zoomedRange),
61
73
  tickNumber: axis.data.length,
62
74
  colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' ? getOrdinalColorScale(_extends({
63
75
  values: axis.data
@@ -74,11 +86,15 @@ export function computeValue(drawingArea, formattedSeries, inAxis, extremumGette
74
86
  }
75
87
  const scaleType = axis.scaleType ?? 'linear';
76
88
  const extremums = [axis.min ?? minData, axis.max ?? maxData];
77
- const tickNumber = getTickNumber(_extends({}, axis, {
89
+ const rawTickNumber = getTickNumber(_extends({}, axis, {
78
90
  range,
79
91
  domain: extremums
80
92
  }));
81
- const scale = getScale(scaleType, extremums, range).nice(tickNumber);
93
+ const tickNumber = rawTickNumber / ((zoomRange[1] - zoomRange[0]) / 100);
94
+ const zoomedRange = zoomedScaleRange(range, zoomRange);
95
+
96
+ // TODO: move nice to prop? Disable when there is zoom?
97
+ const scale = getScale(scaleType, extremums, zoomedRange).nice(rawTickNumber);
82
98
  const [minDomain, maxDomain] = scale.domain();
83
99
  const domain = [axis.min ?? minDomain, axis.max ?? maxDomain];
84
100
  completeAxis[axis.id] = _extends({}, axis, {
@@ -37,7 +37,10 @@ function ZAxisContextProvider(props) {
37
37
  completedZAxis[axis.id] = _extends({}, axis, {
38
38
  colorScale: axis.colorMap && (axis.colorMap.type === 'ordinal' && axis.data ? getOrdinalColorScale(_extends({
39
39
  values: axis.data
40
- }, axis.colorMap)) : getColorScale(axis.colorMap))
40
+ }, axis.colorMap)) : getColorScale(axis.colorMap.type === 'continuous' ? _extends({
41
+ min: axis.min,
42
+ max: axis.max
43
+ }, axis.colorMap) : axis.colorMap))
41
44
  });
42
45
  });
43
46
  return {
@@ -83,7 +86,9 @@ process.env.NODE_ENV !== "production" ? ZAxisContextProvider.propTypes = {
83
86
  })]),
84
87
  data: PropTypes.array,
85
88
  dataKey: PropTypes.string,
86
- id: PropTypes.string
89
+ id: PropTypes.string,
90
+ max: PropTypes.number,
91
+ min: PropTypes.number
87
92
  }))
88
93
  } : void 0;
89
94
  export { ZAxisContextProvider };
@@ -1,6 +1,7 @@
1
1
  export * from './useDrawingArea';
2
2
  export * from './useChartId';
3
3
  export * from './useScale';
4
+ export * from './useAxis';
4
5
  export * from './useColorScale';
5
6
  export * from './useSvgRef';
6
7
  export { useSeries as unstable_useSeries, usePieSeries as unstable_usePieSeries, useLineSeries as unstable_useLineSeries, useBarSeries as unstable_useBarSeries, useScatterSeries as unstable_useScatterSeries } from './useSeries';
@@ -0,0 +1,17 @@
1
+ import { useCartesianContext } from '../context/CartesianProvider';
2
+ export function useXAxis(identifier) {
3
+ const {
4
+ xAxis,
5
+ xAxisIds
6
+ } = useCartesianContext();
7
+ const id = typeof identifier === 'string' ? identifier : xAxisIds[identifier ?? 0];
8
+ return xAxis[id];
9
+ }
10
+ export function useYAxis(identifier) {
11
+ const {
12
+ yAxis,
13
+ yAxisIds
14
+ } = useCartesianContext();
15
+ const id = typeof identifier === 'string' ? identifier : yAxisIds[identifier ?? 0];
16
+ return yAxis[id];
17
+ }
@@ -98,7 +98,7 @@ export const useAxisEvents = disableAxisListener => {
98
98
  };
99
99
  const handleMove = event => {
100
100
  const target = 'targetTouches' in event ? event.targetTouches[0] : event;
101
- const svgPoint = getSVGPoint(svgRef.current, target);
101
+ const svgPoint = getSVGPoint(element, target);
102
102
  mousePosition.current = {
103
103
  x: svgPoint.x,
104
104
  y: svgPoint.y
@@ -121,15 +121,26 @@ export const useAxisEvents = disableAxisListener => {
121
121
  }
122
122
  });
123
123
  };
124
- element.addEventListener('mouseout', handleOut);
125
- element.addEventListener('mousemove', handleMove);
126
- element.addEventListener('touchend', handleOut);
127
- element.addEventListener('touchmove', handleMove);
124
+ const handleDown = event => {
125
+ const target = event.currentTarget;
126
+ if (!target) {
127
+ return;
128
+ }
129
+ if (target.hasPointerCapture(event.pointerId)) {
130
+ target.releasePointerCapture(event.pointerId);
131
+ }
132
+ };
133
+ element.addEventListener('pointerdown', handleDown);
134
+ element.addEventListener('pointermove', handleMove);
135
+ element.addEventListener('pointerout', handleOut);
136
+ element.addEventListener('pointercancel', handleOut);
137
+ element.addEventListener('pointerleave', handleOut);
128
138
  return () => {
129
- element.removeEventListener('mouseout', handleOut);
130
- element.removeEventListener('mousemove', handleMove);
131
- element.removeEventListener('touchend', handleOut);
132
- element.removeEventListener('touchmove', handleMove);
139
+ element.removeEventListener('pointerdown', handleDown);
140
+ element.removeEventListener('pointermove', handleMove);
141
+ element.removeEventListener('pointerout', handleOut);
142
+ element.removeEventListener('pointercancel', handleOut);
143
+ element.removeEventListener('pointerleave', handleOut);
133
144
  };
134
145
  }, [svgRef, dispatch, left, width, top, height, usedYAxis, yAxis, usedXAxis, xAxis, disableAxisListener]);
135
146
  };
@@ -13,7 +13,12 @@ export const useInteractionItemProps = skip => {
13
13
  return () => ({});
14
14
  }
15
15
  const getInteractionItemProps = data => {
16
- const onMouseEnter = () => {
16
+ const onPointerDown = event => {
17
+ if (event.currentTarget.hasPointerCapture(event.pointerId)) {
18
+ event.currentTarget.releasePointerCapture(event.pointerId);
19
+ }
20
+ };
21
+ const onPointerEnter = () => {
17
22
  dispatchInteraction({
18
23
  type: 'enterItem',
19
24
  data
@@ -23,7 +28,8 @@ export const useInteractionItemProps = skip => {
23
28
  dataIndex: data.dataIndex
24
29
  });
25
30
  };
26
- const onMouseLeave = () => {
31
+ const onPointerLeave = event => {
32
+ event.currentTarget.releasePointerCapture(event.pointerId);
27
33
  dispatchInteraction({
28
34
  type: 'leaveItem',
29
35
  data
@@ -31,8 +37,9 @@ export const useInteractionItemProps = skip => {
31
37
  clearHighlighted();
32
38
  };
33
39
  return {
34
- onMouseEnter,
35
- onMouseLeave
40
+ onPointerEnter,
41
+ onPointerLeave,
42
+ onPointerDown
36
43
  };
37
44
  };
38
45
  return getInteractionItemProps;
@@ -1,5 +1,6 @@
1
- import { useCartesianContext } from '../context/CartesianProvider';
2
1
  import { isBandScale } from '../internals/isBandScale';
2
+ import { useXAxis, useYAxis } from './useAxis';
3
+
3
4
  /**
4
5
  * For a given scale return a function that map value to their position.
5
6
  * Useful when dealing with specific scale such as band.
@@ -13,18 +14,10 @@ export function getValueToPositionMapper(scale) {
13
14
  return value => scale(value);
14
15
  }
15
16
  export function useXScale(identifier) {
16
- const {
17
- xAxis,
18
- xAxisIds
19
- } = useCartesianContext();
20
- const id = typeof identifier === 'string' ? identifier : xAxisIds[identifier ?? 0];
21
- return xAxis[id].scale;
17
+ const axis = useXAxis(identifier);
18
+ return axis.scale;
22
19
  }
23
20
  export function useYScale(identifier) {
24
- const {
25
- yAxis,
26
- yAxisIds
27
- } = useCartesianContext();
28
- const id = typeof identifier === 'string' ? identifier : yAxisIds[identifier ?? 0];
29
- return yAxis[id].scale;
21
+ const axis = useYAxis(identifier);
22
+ return axis.scale;
30
23
  }
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts v7.8.0
2
+ * @mui/x-charts v7.10.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -6,6 +6,7 @@ export * from '../ResponsiveChartContainer/ResizableContainer';
6
6
  // hooks
7
7
  export { useReducedMotion } from '../hooks/useReducedMotion';
8
8
  export { useSeries } from '../hooks/useSeries';
9
+ export { useInteractionItemProps } from '../hooks/useInteractionItemProps';
9
10
  export { useDrawingArea } from '../hooks/useDrawingArea';
10
11
  export { useChartContainerHooks } from '../ChartContainer/useChartContainerHooks';
11
12
  export { useScatterChartProps } from '../ScatterChart/useScatterChartProps';
@@ -15,6 +16,7 @@ export { useBarChartProps } from '../BarChart/useBarChartProps';
15
16
  // utils
16
17
  export * from './defaultizeValueFormatter';
17
18
  export * from './configInit';
19
+ export * from './getLabel';
18
20
  export * from './getSVGPoint';
19
21
 
20
22
  // contexts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-charts",
3
- "version": "7.8.0",
3
+ "version": "7.10.0",
4
4
  "description": "The community edition of the Charts components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./index.js",
@@ -31,8 +31,8 @@
31
31
  "dependencies": {
32
32
  "@babel/runtime": "^7.24.7",
33
33
  "@mui/base": "^5.0.0-beta.40",
34
- "@mui/system": "^5.15.20",
35
- "@mui/utils": "^5.15.20",
34
+ "@mui/system": "^5.16.0",
35
+ "@mui/utils": "^5.16.0",
36
36
  "@react-spring/rafz": "^9.7.3",
37
37
  "@react-spring/web": "^9.7.3",
38
38
  "clsx": "^2.1.1",
@@ -13,6 +13,7 @@ import { LineChartProps } from '../LineChart/LineChart';
13
13
  import { ScatterProps } from '../ScatterChart/Scatter';
14
14
  import { ScatterChartProps } from '../ScatterChart/ScatterChart';
15
15
  import { ChartsXAxisProps, ChartsYAxisProps } from '../models/axis';
16
+ import { ChartSeriesType } from '../models/seriesType/config';
16
17
 
17
18
  export interface ChartsComponentsPropsList {
18
19
  MuiChartsAxis: ChartsAxisProps;
@@ -22,7 +23,7 @@ export interface ChartsComponentsPropsList {
22
23
  MuiChartsClipPath: ChartsClipPathProps;
23
24
  MuiChartsGrid: ChartsGridProps;
24
25
  MuiChartsLegend: ChartsLegendProps;
25
- MuiChartsTooltip: ChartsTooltipProps;
26
+ MuiChartsTooltip: ChartsTooltipProps<ChartSeriesType>;
26
27
  MuiChartsSurface: ChartsSurfaceProps;
27
28
 
28
29
  // BarChart components