@mui/x-charts 7.22.2 → 8.0.0-alpha.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 (189) hide show
  1. package/BarChart/BarChart.d.ts +7 -7
  2. package/BarChart/BarChart.js +7 -29
  3. package/BarChart/BarElement.d.ts +1 -1
  4. package/BarChart/BarLabel/BarLabelItem.d.ts +1 -1
  5. package/BarChart/BarPlot.js +12 -4
  6. package/BarChart/extremums.js +3 -3
  7. package/BarChart/useBarChartProps.d.ts +2 -2
  8. package/BarChart/useBarChartProps.js +3 -4
  9. package/CHANGELOG.md +142 -155
  10. package/ChartContainer/ChartContainer.d.ts +16 -33
  11. package/ChartContainer/ChartContainer.js +22 -41
  12. package/{ResponsiveChartContainer → ChartContainer}/ResizableContainer.d.ts +2 -2
  13. package/{ResponsiveChartContainer → ChartContainer}/useChartContainerDimensions.d.ts +1 -1
  14. package/{ResponsiveChartContainer → ChartContainer}/useChartContainerDimensions.js +6 -4
  15. package/ChartContainer/useChartContainerProps.d.ts +11 -94
  16. package/ChartContainer/useChartContainerProps.js +42 -58
  17. package/ChartsLegend/ChartsLegend.js +0 -3
  18. package/ChartsLegend/DefaultChartsLegend.d.ts +0 -5
  19. package/ChartsLegend/DefaultChartsLegend.js +1 -12
  20. package/ChartsLegend/LegendPerItem.d.ts +1 -1
  21. package/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +2 -2
  22. package/ChartsOverlay/ChartsOverlay.d.ts +1 -1
  23. package/ChartsTooltip/ChartsAxisTooltipContent.js +3 -3
  24. package/ChartsTooltip/ChartsItemTooltipContent.js +3 -3
  25. package/ChartsTooltip/ChartsTooltip.js +45 -6
  26. package/ChartsTooltip/useAxisTooltip.js +3 -3
  27. package/ChartsTooltip/useItemTooltip.js +3 -3
  28. package/ChartsTooltip/utils.d.ts +5 -13
  29. package/ChartsTooltip/utils.js +45 -42
  30. package/ChartsVoronoiHandler/ChartsVoronoiHandler.js +3 -5
  31. package/Gauge/GaugeContainer.js +1 -1
  32. package/LineChart/AreaElement.d.ts +1 -1
  33. package/LineChart/AreaPlot.js +2 -6
  34. package/LineChart/LineChart.d.ts +7 -7
  35. package/LineChart/LineChart.js +7 -29
  36. package/LineChart/LineElement.d.ts +1 -1
  37. package/LineChart/LineHighlightPlot.d.ts +1 -1
  38. package/LineChart/LineHighlightPlot.js +2 -6
  39. package/LineChart/LinePlot.js +2 -6
  40. package/LineChart/MarkPlot.js +2 -6
  41. package/LineChart/extremums.js +10 -6
  42. package/LineChart/useLineChartProps.d.ts +2 -2
  43. package/LineChart/useLineChartProps.js +3 -4
  44. package/PieChart/PieArc.d.ts +0 -5
  45. package/PieChart/PieArc.js +1 -10
  46. package/PieChart/PieArcPlot.js +0 -5
  47. package/PieChart/PieChart.d.ts +9 -32
  48. package/PieChart/PieChart.js +17 -102
  49. package/README.md +2 -2
  50. package/ScatterChart/ScatterChart.d.ts +7 -7
  51. package/ScatterChart/ScatterChart.js +7 -29
  52. package/ScatterChart/ScatterPlot.js +3 -6
  53. package/ScatterChart/extremums.js +6 -6
  54. package/ScatterChart/useScatterChartProps.d.ts +2 -2
  55. package/ScatterChart/useScatterChartProps.js +3 -4
  56. package/SparkLineChart/SparkLineChart.d.ts +4 -4
  57. package/SparkLineChart/SparkLineChart.js +2 -2
  58. package/context/CartesianProvider/defaultizeAxis.d.ts +1 -1
  59. package/context/ChartDataProvider/ChartDataProvider.d.ts +41 -0
  60. package/{ResponsiveChartContainer/ResponsiveChartContainer.js → context/ChartDataProvider/ChartDataProvider.js} +46 -27
  61. package/context/ChartDataProvider/index.d.ts +1 -0
  62. package/context/ChartDataProvider/index.js +1 -0
  63. package/context/ChartDataProvider/useChartDataProviderProps.d.ts +97 -0
  64. package/context/ChartDataProvider/useChartDataProviderProps.js +86 -0
  65. package/{ChartContainer → context/ChartDataProvider}/useDefaultizeAxis.d.ts +12 -12
  66. package/{ChartContainer → context/ChartDataProvider}/useDefaultizeAxis.js +1 -1
  67. package/context/HighlightedProvider/HighlightedContext.d.ts +0 -8
  68. package/context/HighlightedProvider/HighlightedProvider.js +1 -16
  69. package/context/PluginProvider/ExtremumGetter.types.d.ts +2 -2
  70. package/context/ZAxisContextProvider.d.ts +1 -1
  71. package/index.d.ts +1 -2
  72. package/index.js +2 -3
  73. package/internals/defaultizeColor.d.ts +1 -8
  74. package/internals/getSymbol.js +19 -3
  75. package/internals/index.d.ts +5 -5
  76. package/internals/index.js +5 -5
  77. package/internals/useStringInterpolator.js +1 -0
  78. package/models/seriesType/bar.d.ts +1 -1
  79. package/models/seriesType/common.d.ts +0 -10
  80. package/models/seriesType/config.d.ts +1 -1
  81. package/models/seriesType/line.d.ts +1 -1
  82. package/models/seriesType/pie.d.ts +1 -1
  83. package/models/seriesType/scatter.d.ts +1 -6
  84. package/modern/BarChart/BarChart.js +7 -29
  85. package/modern/BarChart/BarPlot.js +12 -4
  86. package/modern/BarChart/extremums.js +3 -3
  87. package/modern/BarChart/useBarChartProps.js +3 -4
  88. package/modern/ChartContainer/ChartContainer.js +22 -41
  89. package/modern/{ResponsiveChartContainer → ChartContainer}/useChartContainerDimensions.js +6 -4
  90. package/modern/ChartContainer/useChartContainerProps.js +42 -58
  91. package/modern/ChartsLegend/ChartsLegend.js +0 -3
  92. package/modern/ChartsLegend/DefaultChartsLegend.js +1 -12
  93. package/modern/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +2 -2
  94. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +3 -3
  95. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +3 -3
  96. package/modern/ChartsTooltip/ChartsTooltip.js +45 -6
  97. package/modern/ChartsTooltip/useAxisTooltip.js +3 -3
  98. package/modern/ChartsTooltip/useItemTooltip.js +3 -3
  99. package/modern/ChartsTooltip/utils.js +45 -42
  100. package/modern/ChartsVoronoiHandler/ChartsVoronoiHandler.js +3 -5
  101. package/modern/Gauge/GaugeContainer.js +1 -1
  102. package/modern/LineChart/AreaPlot.js +2 -6
  103. package/modern/LineChart/LineChart.js +7 -29
  104. package/modern/LineChart/LineHighlightPlot.js +2 -6
  105. package/modern/LineChart/LinePlot.js +2 -6
  106. package/modern/LineChart/MarkPlot.js +2 -6
  107. package/modern/LineChart/extremums.js +10 -6
  108. package/modern/LineChart/useLineChartProps.js +3 -4
  109. package/modern/PieChart/PieArc.js +1 -10
  110. package/modern/PieChart/PieArcPlot.js +0 -5
  111. package/modern/PieChart/PieChart.js +17 -102
  112. package/modern/ScatterChart/ScatterChart.js +7 -29
  113. package/modern/ScatterChart/ScatterPlot.js +3 -6
  114. package/modern/ScatterChart/extremums.js +6 -6
  115. package/modern/ScatterChart/useScatterChartProps.js +3 -4
  116. package/modern/SparkLineChart/SparkLineChart.js +2 -2
  117. package/modern/{ResponsiveChartContainer/ResponsiveChartContainer.js → context/ChartDataProvider/ChartDataProvider.js} +46 -27
  118. package/modern/context/ChartDataProvider/index.js +1 -0
  119. package/modern/context/ChartDataProvider/useChartDataProviderProps.js +86 -0
  120. package/modern/{ChartContainer → context/ChartDataProvider}/useDefaultizeAxis.js +1 -1
  121. package/modern/context/HighlightedProvider/HighlightedProvider.js +1 -16
  122. package/modern/index.js +2 -3
  123. package/modern/internals/getSymbol.js +19 -3
  124. package/modern/internals/index.js +5 -5
  125. package/modern/internals/useStringInterpolator.js +1 -0
  126. package/node/BarChart/BarChart.js +7 -29
  127. package/node/BarChart/BarPlot.js +11 -3
  128. package/node/BarChart/extremums.js +3 -3
  129. package/node/BarChart/useBarChartProps.js +3 -4
  130. package/node/ChartContainer/ChartContainer.js +21 -40
  131. package/node/{ResponsiveChartContainer → ChartContainer}/useChartContainerDimensions.js +6 -4
  132. package/node/ChartContainer/useChartContainerProps.js +42 -59
  133. package/node/ChartsLegend/ChartsLegend.js +0 -3
  134. package/node/ChartsLegend/DefaultChartsLegend.js +1 -12
  135. package/node/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +2 -2
  136. package/node/ChartsTooltip/ChartsAxisTooltipContent.js +3 -3
  137. package/node/ChartsTooltip/ChartsItemTooltipContent.js +3 -3
  138. package/node/ChartsTooltip/ChartsTooltip.js +44 -5
  139. package/node/ChartsTooltip/useAxisTooltip.js +3 -3
  140. package/node/ChartsTooltip/useItemTooltip.js +3 -3
  141. package/node/ChartsTooltip/utils.js +46 -44
  142. package/node/ChartsVoronoiHandler/ChartsVoronoiHandler.js +3 -5
  143. package/node/Gauge/GaugeContainer.js +1 -1
  144. package/node/LineChart/AreaPlot.js +2 -6
  145. package/node/LineChart/LineChart.js +7 -29
  146. package/node/LineChart/LineHighlightPlot.js +2 -6
  147. package/node/LineChart/LinePlot.js +2 -6
  148. package/node/LineChart/MarkPlot.js +2 -6
  149. package/node/LineChart/extremums.js +10 -6
  150. package/node/LineChart/useLineChartProps.js +3 -4
  151. package/node/PieChart/PieArc.js +1 -10
  152. package/node/PieChart/PieArcPlot.js +0 -5
  153. package/node/PieChart/PieChart.js +17 -102
  154. package/node/ScatterChart/ScatterChart.js +7 -29
  155. package/node/ScatterChart/ScatterPlot.js +3 -6
  156. package/node/ScatterChart/extremums.js +6 -6
  157. package/node/ScatterChart/useScatterChartProps.js +3 -4
  158. package/node/SparkLineChart/SparkLineChart.js +2 -2
  159. package/node/{ResponsiveChartContainer/ResponsiveChartContainer.js → context/ChartDataProvider/ChartDataProvider.js} +45 -26
  160. package/node/context/ChartDataProvider/index.js +16 -0
  161. package/node/context/ChartDataProvider/useChartDataProviderProps.js +94 -0
  162. package/node/{ChartContainer → context/ChartDataProvider}/useDefaultizeAxis.js +1 -1
  163. package/node/context/HighlightedProvider/HighlightedProvider.js +1 -16
  164. package/node/index.js +5 -16
  165. package/node/internals/getSymbol.js +19 -3
  166. package/node/internals/index.js +37 -29
  167. package/node/internals/useStringInterpolator.js +2 -0
  168. package/package.json +4 -4
  169. package/ResponsiveChartContainer/ResponsiveChartContainer.d.ts +0 -24
  170. package/ResponsiveChartContainer/index.d.ts +0 -1
  171. package/ResponsiveChartContainer/index.js +0 -1
  172. package/ResponsiveChartContainer/package.json +0 -6
  173. package/ResponsiveChartContainer/useResponsiveChartContainerProps.d.ts +0 -19
  174. package/ResponsiveChartContainer/useResponsiveChartContainerProps.js +0 -70
  175. package/internals/SlotComponentPropsFromProps.d.ts +0 -1
  176. package/internals/SlotComponentPropsFromProps.js +0 -1
  177. package/models/helpers.d.ts +0 -3
  178. package/models/helpers.js +0 -1
  179. package/modern/ResponsiveChartContainer/index.js +0 -1
  180. package/modern/ResponsiveChartContainer/useResponsiveChartContainerProps.js +0 -70
  181. package/modern/internals/SlotComponentPropsFromProps.js +0 -1
  182. package/modern/models/helpers.js +0 -1
  183. package/node/ResponsiveChartContainer/index.js +0 -16
  184. package/node/ResponsiveChartContainer/useResponsiveChartContainerProps.js +0 -77
  185. package/node/internals/SlotComponentPropsFromProps.js +0 -5
  186. package/node/models/helpers.js +0 -5
  187. /package/{ResponsiveChartContainer → ChartContainer}/ResizableContainer.js +0 -0
  188. /package/modern/{ResponsiveChartContainer → ChartContainer}/ResizableContainer.js +0 -0
  189. /package/node/{ResponsiveChartContainer → ChartContainer}/ResizableContainer.js +0 -0
@@ -1,42 +1,8 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
1
  import * as React from 'react';
3
2
  import { useSvgRef } from "../hooks/index.js";
4
- export function generateVirtualElement(mousePosition) {
5
- if (mousePosition === null) {
6
- return {
7
- getBoundingClientRect: () => ({
8
- width: 0,
9
- height: 0,
10
- x: 0,
11
- y: 0,
12
- top: 0,
13
- right: 0,
14
- bottom: 0,
15
- left: 0,
16
- toJSON: () => ''
17
- })
18
- };
19
- }
20
- const {
21
- x,
22
- y
23
- } = mousePosition;
24
- const boundingBox = {
25
- width: 0,
26
- height: 0,
27
- x,
28
- y,
29
- top: y,
30
- right: x,
31
- bottom: y,
32
- left: x
33
- };
34
- return {
35
- getBoundingClientRect: () => _extends({}, boundingBox, {
36
- toJSON: () => JSON.stringify(boundingBox)
37
- })
38
- };
39
- }
3
+ /**
4
+ * @deprecated We recommend using vanilla JS to let popper track mouse position.
5
+ */
40
6
  export function useMouseTracker() {
41
7
  const svgRef = useSvgRef();
42
8
 
@@ -47,6 +13,7 @@ export function useMouseTracker() {
47
13
  if (element === null) {
48
14
  return () => {};
49
15
  }
16
+ const controller = new AbortController();
50
17
  const handleOut = event => {
51
18
  if (event.pointerType !== 'mouse') {
52
19
  setMousePosition(null);
@@ -60,16 +27,52 @@ export function useMouseTracker() {
60
27
  pointerType: event.pointerType
61
28
  });
62
29
  };
63
- element.addEventListener('pointerdown', handleMove);
64
- element.addEventListener('pointermove', handleMove);
30
+ element.addEventListener('pointerdown', handleMove, {
31
+ signal: controller.signal
32
+ });
33
+ element.addEventListener('pointermove', handleMove, {
34
+ signal: controller.signal
35
+ });
36
+ element.addEventListener('pointerup', handleOut, {
37
+ signal: controller.signal
38
+ });
39
+ return () => {
40
+ // Calling `.abort()` removes ALL event listeners
41
+ // For more info, see https://kettanaito.com/blog/dont-sleep-on-abort-controller
42
+ controller.abort();
43
+ };
44
+ }, [svgRef]);
45
+ return mousePosition;
46
+ }
47
+ export function usePointerType() {
48
+ const svgRef = useSvgRef();
49
+
50
+ // Use a ref to avoid rerendering on every mousemove event.
51
+ const [pointerType, setPointerType] = React.useState(null);
52
+ React.useEffect(() => {
53
+ const element = svgRef.current;
54
+ if (element === null) {
55
+ return () => {};
56
+ }
57
+ const handleOut = event => {
58
+ if (event.pointerType !== 'mouse') {
59
+ setPointerType(null);
60
+ }
61
+ };
62
+ const handleEnter = event => {
63
+ setPointerType({
64
+ height: event.height,
65
+ pointerType: event.pointerType
66
+ });
67
+ };
68
+ element.addEventListener('pointerenter', handleEnter);
65
69
  element.addEventListener('pointerup', handleOut);
66
70
  return () => {
67
- element.removeEventListener('pointerdown', handleMove);
68
- element.removeEventListener('pointermove', handleMove);
71
+ element.removeEventListener('pointerenter', handleEnter);
69
72
  element.removeEventListener('pointerup', handleOut);
70
73
  };
71
74
  }, [svgRef]);
72
- return mousePosition;
75
+ return pointerType;
73
76
  }
74
77
  export function getTooltipHasData(trigger, displayedData) {
75
78
  if (trigger === 'item') {
@@ -66,12 +66,10 @@ function ChartsVoronoiHandler(props) {
66
66
  const {
67
67
  data,
68
68
  xAxisId,
69
- yAxisId,
70
- xAxisKey,
71
- yAxisKey
69
+ yAxisId
72
70
  } = series[seriesId];
73
- const xScale = xAxis[xAxisId ?? xAxisKey ?? defaultXAxisId].scale;
74
- const yScale = yAxis[yAxisId ?? yAxisKey ?? defaultYAxisId].scale;
71
+ const xScale = xAxis[xAxisId ?? defaultXAxisId].scale;
72
+ const yScale = yAxis[yAxisId ?? defaultYAxisId].scale;
75
73
  const getXPosition = getValueToPositionMapper(xScale);
76
74
  const getYPosition = getValueToPositionMapper(yScale);
77
75
  const seriesPoints = data.flatMap(({
@@ -7,7 +7,7 @@ import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import { styled } from '@mui/material/styles';
9
9
  import useForkRef from '@mui/utils/useForkRef';
10
- import { useChartContainerDimensions } from "../ResponsiveChartContainer/useChartContainerDimensions.js";
10
+ import { useChartContainerDimensions } from "../ChartContainer/useChartContainerDimensions.js";
11
11
  import { ChartsSurface } from "../ChartsSurface/index.js";
12
12
  import { DrawingProvider } from "../context/DrawingProvider.js";
13
13
  import { GaugeProvider } from "./GaugeProvider.js";
@@ -42,17 +42,13 @@ const useAggregatedData = () => {
42
42
  return [...groupIds].reverse() // Revert stacked area for a more pleasant animation
43
43
  .map(seriesId => {
44
44
  const {
45
- xAxisId: xAxisIdProp,
46
- yAxisId: yAxisIdProp,
47
- xAxisKey = defaultXAxisId,
48
- yAxisKey = defaultYAxisId,
45
+ xAxisId = defaultXAxisId,
46
+ yAxisId = defaultYAxisId,
49
47
  stackedData,
50
48
  data,
51
49
  connectNulls,
52
50
  baseline
53
51
  } = series[seriesId];
54
- const xAxisId = xAxisIdProp ?? xAxisKey;
55
- const yAxisId = yAxisIdProp ?? yAxisKey;
56
52
  const xScale = getValueToPositionMapper(xAxis[xAxisId].scale);
57
53
  const yScale = yAxis[yAxisId].scale;
58
54
  const xData = xAxis[xAxisId].data;
@@ -6,7 +6,7 @@ import PropTypes from 'prop-types';
6
6
  import { useThemeProps } from '@mui/material/styles';
7
7
  import { AreaPlot } from "./AreaPlot.js";
8
8
  import { LinePlot } from "./LinePlot.js";
9
- import { ResponsiveChartContainer } from "../ResponsiveChartContainer/index.js";
9
+ import { ChartContainer } from "../ChartContainer/index.js";
10
10
  import { MarkPlot } from "./MarkPlot.js";
11
11
  import { ChartsAxis } from "../ChartsAxis/ChartsAxis.js";
12
12
  import { ChartsTooltip } from "../ChartsTooltip/index.js";
@@ -51,7 +51,7 @@ const LineChart = /*#__PURE__*/React.forwardRef(function LineChart(inProps, ref)
51
51
  tooltipProps,
52
52
  children
53
53
  } = useLineChartProps(props);
54
- return /*#__PURE__*/_jsxs(ResponsiveChartContainer, _extends({
54
+ return /*#__PURE__*/_jsxs(ChartContainer, _extends({
55
55
  ref: ref
56
56
  }, chartContainerProps, {
57
57
  children: [props.onAxisClick && /*#__PURE__*/_jsx(ChartsOnAxisClickHandler, _extends({}, axisClickHandlerProps)), /*#__PURE__*/_jsx(ChartsGrid, _extends({}, gridProps)), /*#__PURE__*/_jsxs("g", _extends({}, clipPathGroupProps, {
@@ -59,7 +59,7 @@ const LineChart = /*#__PURE__*/React.forwardRef(function LineChart(inProps, ref)
59
59
  })), /*#__PURE__*/_jsx(ChartsAxis, _extends({}, chartsAxisProps)), /*#__PURE__*/_jsx("g", {
60
60
  "data-drawing-container": true,
61
61
  children: /*#__PURE__*/_jsx(MarkPlot, _extends({}, markPlotProps))
62
- }), /*#__PURE__*/_jsx(LineHighlightPlot, _extends({}, lineHighlightPlotProps)), /*#__PURE__*/_jsx(ChartsLegend, _extends({}, legendProps)), !props.loading && /*#__PURE__*/_jsx(ChartsTooltip, _extends({}, tooltipProps)), /*#__PURE__*/_jsx(ChartsClipPath, _extends({}, clipPathProps)), children]
62
+ }), /*#__PURE__*/_jsx(LineHighlightPlot, _extends({}, lineHighlightPlotProps)), !props.hideLegend && /*#__PURE__*/_jsx(ChartsLegend, _extends({}, legendProps)), !props.loading && /*#__PURE__*/_jsx(ChartsTooltip, _extends({}, tooltipProps)), /*#__PURE__*/_jsx(ChartsClipPath, _extends({}, clipPathProps)), children]
63
63
  }));
64
64
  });
65
65
  process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
@@ -119,6 +119,10 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
119
119
  * The height of the chart in px. If not defined, it takes the height of the parent element.
120
120
  */
121
121
  height: PropTypes.number,
122
+ /**
123
+ * If `true`, the legend is not rendered.
124
+ */
125
+ hideLegend: PropTypes.bool,
122
126
  /**
123
127
  * The item currently highlighted. Turns highlighting into a controlled prop.
124
128
  */
@@ -132,32 +136,6 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
132
136
  * @default yAxisIds[0] The id of the first provided axis
133
137
  */
134
138
  leftAxis: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
135
- /**
136
- * @deprecated Consider using `slotProps.legend` instead.
137
- */
138
- legend: PropTypes.shape({
139
- classes: PropTypes.object,
140
- direction: PropTypes.oneOf(['column', 'row']),
141
- hidden: PropTypes.bool,
142
- itemGap: PropTypes.number,
143
- itemMarkHeight: PropTypes.number,
144
- itemMarkWidth: PropTypes.number,
145
- labelStyle: PropTypes.object,
146
- markGap: PropTypes.number,
147
- onItemClick: PropTypes.func,
148
- padding: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
149
- bottom: PropTypes.number,
150
- left: PropTypes.number,
151
- right: PropTypes.number,
152
- top: PropTypes.number
153
- })]),
154
- position: PropTypes.shape({
155
- horizontal: PropTypes.oneOf(['left', 'middle', 'right']).isRequired,
156
- vertical: PropTypes.oneOf(['bottom', 'middle', 'top']).isRequired
157
- }),
158
- slotProps: PropTypes.object,
159
- slots: PropTypes.object
160
- }),
161
139
  /**
162
140
  * If `true`, a loading overlay is displayed.
163
141
  * @default false
@@ -62,16 +62,12 @@ function LineHighlightPlot(props) {
62
62
  }) => {
63
63
  return groupIds.flatMap(seriesId => {
64
64
  const {
65
- xAxisId: xAxisIdProp,
66
- yAxisId: yAxisIdProp,
67
- xAxisKey = defaultXAxisId,
68
- yAxisKey = defaultYAxisId,
65
+ xAxisId = defaultXAxisId,
66
+ yAxisId = defaultYAxisId,
69
67
  stackedData,
70
68
  data,
71
69
  disableHighlight
72
70
  } = series[seriesId];
73
- const xAxisId = xAxisIdProp ?? xAxisKey;
74
- const yAxisId = yAxisIdProp ?? yAxisKey;
75
71
  if (disableHighlight || data[highlightedIndex] == null) {
76
72
  return null;
77
73
  }
@@ -41,16 +41,12 @@ const useAggregatedData = () => {
41
41
  }) => {
42
42
  return groupIds.flatMap(seriesId => {
43
43
  const {
44
- xAxisId: xAxisIdProp,
45
- yAxisId: yAxisIdProp,
46
- xAxisKey = defaultXAxisId,
47
- yAxisKey = defaultYAxisId,
44
+ xAxisId = defaultXAxisId,
45
+ yAxisId = defaultYAxisId,
48
46
  stackedData,
49
47
  data,
50
48
  connectNulls
51
49
  } = series[seriesId];
52
- const xAxisId = xAxisIdProp ?? xAxisKey;
53
- const yAxisId = yAxisIdProp ?? yAxisKey;
54
50
  const xScale = getValueToPositionMapper(xAxis[xAxisId].scale);
55
51
  const yScale = yAxis[yAxisId].scale;
56
52
  const xData = xAxis[xAxisId].data;
@@ -63,10 +63,8 @@ function MarkPlot(props) {
63
63
  }) => {
64
64
  return groupIds.map(seriesId => {
65
65
  const {
66
- xAxisId: xAxisIdProp,
67
- yAxisId: yAxisIdProp,
68
- xAxisKey = defaultXAxisId,
69
- yAxisKey = defaultYAxisId,
66
+ xAxisId = defaultXAxisId,
67
+ yAxisId = defaultYAxisId,
70
68
  stackedData,
71
69
  data,
72
70
  showMark = true
@@ -74,8 +72,6 @@ function MarkPlot(props) {
74
72
  if (showMark === false) {
75
73
  return null;
76
74
  }
77
- const xAxisId = xAxisIdProp ?? xAxisKey;
78
- const yAxisId = yAxisIdProp ?? yAxisKey;
79
75
  const xScale = getValueToPositionMapper(xAxis[xAxisId].scale);
80
76
  const yScale = yAxis[yAxisId].scale;
81
77
  const xData = xAxis[xAxisId].data;
@@ -6,8 +6,11 @@ export const getExtremumX = params => {
6
6
  const maxX = Math.max(...(axis.data ?? []));
7
7
  return [minX, maxX];
8
8
  };
9
- function getSeriesExtremums(getValues, stackedData, filter) {
9
+ function getSeriesExtremums(getValues, data, stackedData, filter) {
10
10
  return stackedData.reduce((seriesAcc, stackedValue, index) => {
11
+ if (data[index] === null) {
12
+ return seriesAcc;
13
+ }
11
14
  const [base, value] = getValues(stackedValue);
12
15
  if (filter && (!filter({
13
16
  y: base,
@@ -29,24 +32,25 @@ export const getExtremumY = params => {
29
32
  getFilters
30
33
  } = params;
31
34
  return Object.keys(series).filter(seriesId => {
32
- const yAxisId = series[seriesId].yAxisId ?? series[seriesId].yAxisKey;
35
+ const yAxisId = series[seriesId].yAxisId;
33
36
  return yAxisId === axis.id || isDefaultAxis && yAxisId === undefined;
34
37
  }).reduce((acc, seriesId) => {
35
38
  const {
36
39
  area,
37
- stackedData
40
+ stackedData,
41
+ data
38
42
  } = series[seriesId];
39
43
  const isArea = area !== undefined;
40
44
  const filter = getFilters?.({
41
45
  currentAxisId: axis.id,
42
46
  isDefaultAxis,
43
- seriesXAxisId: series[seriesId].xAxisId ?? series[seriesId].xAxisKey,
44
- seriesYAxisId: series[seriesId].yAxisId ?? series[seriesId].yAxisKey
47
+ seriesXAxisId: series[seriesId].xAxisId,
48
+ seriesYAxisId: series[seriesId].yAxisId
45
49
  });
46
50
 
47
51
  // Since this series is not used to display an area, we do not consider the base (the d[0]).
48
52
  const getValues = isArea && axis.scaleType !== 'log' && typeof series[seriesId].baseline !== 'string' ? d => d : d => [d[1], d[1]];
49
- const seriesExtremums = getSeriesExtremums(getValues, stackedData, filter);
53
+ const seriesExtremums = getSeriesExtremums(getValues, data, stackedData, filter);
50
54
  const [seriesMin, seriesMax] = seriesExtremums;
51
55
  return [Math.min(seriesMin, acc[0]), Math.max(seriesMax, acc[1])];
52
56
  }, [Infinity, -Infinity]);
@@ -2,7 +2,7 @@
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
- const _excluded = ["xAxis", "yAxis", "series", "width", "height", "margin", "colors", "dataset", "sx", "tooltip", "onAxisClick", "onAreaClick", "onLineClick", "onMarkClick", "axisHighlight", "disableLineItemHighlight", "legend", "grid", "topAxis", "leftAxis", "rightAxis", "bottomAxis", "children", "slots", "slotProps", "skipAnimation", "loading", "highlightedItem", "onHighlightChange", "className", "experimentalMarkRendering"];
5
+ const _excluded = ["xAxis", "yAxis", "series", "width", "height", "margin", "colors", "dataset", "sx", "tooltip", "onAxisClick", "onAreaClick", "onLineClick", "onMarkClick", "axisHighlight", "disableLineItemHighlight", "hideLegend", "grid", "topAxis", "leftAxis", "rightAxis", "bottomAxis", "children", "slots", "slotProps", "skipAnimation", "loading", "highlightedItem", "onHighlightChange", "className", "experimentalMarkRendering"];
6
6
  import useId from '@mui/utils/useId';
7
7
  import { DEFAULT_X_AXIS_KEY } from "../constants/index.js";
8
8
  /**
@@ -30,7 +30,6 @@ export const useLineChartProps = props => {
30
30
  onMarkClick,
31
31
  axisHighlight,
32
32
  disableLineItemHighlight,
33
- legend,
34
33
  grid,
35
34
  topAxis,
36
35
  leftAxis,
@@ -124,10 +123,10 @@ export const useLineChartProps = props => {
124
123
  slots,
125
124
  slotProps
126
125
  };
127
- const legendProps = _extends({}, legend, {
126
+ const legendProps = {
128
127
  slots,
129
128
  slotProps
130
- });
129
+ };
131
130
  const tooltipProps = _extends({}, tooltip, {
132
131
  slots,
133
132
  slotProps
@@ -2,7 +2,7 @@
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
- const _excluded = ["classes", "color", "cornerRadius", "dataIndex", "endAngle", "id", "innerRadius", "isFaded", "isHighlighted", "onClick", "outerRadius", "paddingAngle", "startAngle", "highlightScope"];
5
+ const _excluded = ["classes", "color", "cornerRadius", "dataIndex", "endAngle", "id", "innerRadius", "isFaded", "isHighlighted", "onClick", "outerRadius", "paddingAngle", "startAngle"];
6
6
  import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import { arc as d3Arc } from '@mui/x-charts-vendor/d3-shape';
@@ -93,15 +93,6 @@ process.env.NODE_ENV !== "production" ? PieArc.propTypes = {
93
93
  // ----------------------------------------------------------------------
94
94
  classes: PropTypes.object,
95
95
  dataIndex: PropTypes.number.isRequired,
96
- /**
97
- * @deprecated Use the `isFaded` or `isHighlighted` props instead.
98
- */
99
- highlightScope: PropTypes.shape({
100
- fade: PropTypes.oneOf(['global', 'none', 'series']),
101
- faded: PropTypes.oneOf(['global', 'none', 'series']),
102
- highlight: PropTypes.oneOf(['item', 'none', 'series']),
103
- highlighted: PropTypes.oneOf(['item', 'none', 'series'])
104
- }),
105
96
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
106
97
  isFaded: PropTypes.bool.isRequired,
107
98
  isHighlighted: PropTypes.bool.isRequired
@@ -10,7 +10,6 @@ import { useTransition } from '@react-spring/web';
10
10
  import { PieArc } from "./PieArc.js";
11
11
  import { defaultTransitionConfig } from "./dataTransform/transition.js";
12
12
  import { useTransformData } from "./dataTransform/useTransformData.js";
13
- import { useHighlighted } from "../context/index.js";
14
13
  import { jsx as _jsx } from "react/jsx-runtime";
15
14
  function PieArcPlot(props) {
16
15
  const {
@@ -43,9 +42,6 @@ function PieArcPlot(props) {
43
42
  const transition = useTransition(transformedData, _extends({}, defaultTransitionConfig, {
44
43
  immediate: skipAnimation
45
44
  }));
46
- const {
47
- highlightScope
48
- } = useHighlighted();
49
45
  if (data.length === 0) {
50
46
  return null;
51
47
  }
@@ -72,7 +68,6 @@ function PieArcPlot(props) {
72
68
  id: id,
73
69
  color: item.color,
74
70
  dataIndex: index,
75
- highlightScope: highlightScope,
76
71
  isFaded: item.isFaded,
77
72
  isHighlighted: item.isHighlighted,
78
73
  onClick: onItemClick && (event => {
@@ -2,17 +2,14 @@
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
- const _excluded = ["xAxis", "yAxis", "series", "width", "height", "margin", "colors", "sx", "tooltip", "axisHighlight", "skipAnimation", "legend", "topAxis", "leftAxis", "rightAxis", "bottomAxis", "children", "slots", "slotProps", "onItemClick", "loading", "highlightedItem", "onHighlightChange", "className"];
5
+ const _excluded = ["xAxis", "yAxis", "series", "width", "height", "margin", "colors", "sx", "tooltip", "skipAnimation", "hideLegend", "children", "slots", "slotProps", "onItemClick", "loading", "highlightedItem", "onHighlightChange", "className"];
6
6
  import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import { useRtl } from '@mui/system/RtlProvider';
9
9
  import { useThemeProps } from '@mui/material/styles';
10
- import { ResponsiveChartContainer } from "../ResponsiveChartContainer/index.js";
11
- import { ChartsAxis } from "../ChartsAxis/ChartsAxis.js";
12
- import { DEFAULT_X_AXIS_KEY } from "../constants/index.js";
10
+ import { ChartContainer } from "../ChartContainer/index.js";
13
11
  import { ChartsTooltip } from "../ChartsTooltip/index.js";
14
12
  import { ChartsLegend } from "../ChartsLegend/index.js";
15
- import { ChartsAxisHighlight } from "../ChartsAxisHighlight/index.js";
16
13
  import { PiePlot } from "./PiePlot.js";
17
14
  import { ChartsOverlay } from "../ChartsOverlay/index.js";
18
15
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -45,8 +42,6 @@ const PieChart = /*#__PURE__*/React.forwardRef(function PieChart(inProps, ref) {
45
42
  name: 'MuiPieChart'
46
43
  });
47
44
  const {
48
- xAxis,
49
- yAxis,
50
45
  series,
51
46
  width,
52
47
  height,
@@ -56,16 +51,8 @@ const PieChart = /*#__PURE__*/React.forwardRef(function PieChart(inProps, ref) {
56
51
  tooltip = {
57
52
  trigger: 'item'
58
53
  },
59
- axisHighlight = {
60
- x: 'none',
61
- y: 'none'
62
- },
63
54
  skipAnimation,
64
- legend: legendProps,
65
- topAxis = null,
66
- leftAxis = null,
67
- rightAxis = null,
68
- bottomAxis = null,
55
+ hideLegend,
69
56
  children,
70
57
  slots,
71
58
  slotProps,
@@ -78,14 +65,7 @@ const PieChart = /*#__PURE__*/React.forwardRef(function PieChart(inProps, ref) {
78
65
  other = _objectWithoutPropertiesLoose(props, _excluded);
79
66
  const isRtl = useRtl();
80
67
  const margin = _extends({}, isRtl ? defaultRTLMargin : defaultMargin, marginProps);
81
- const legend = _extends({
82
- direction: 'column',
83
- position: {
84
- vertical: 'middle',
85
- horizontal: isRtl ? 'left' : 'right'
86
- }
87
- }, legendProps);
88
- return /*#__PURE__*/_jsxs(ResponsiveChartContainer, _extends({}, other, {
68
+ return /*#__PURE__*/_jsxs(ChartContainer, _extends({}, other, {
89
69
  ref: ref,
90
70
  series: series.map(s => _extends({
91
71
  type: 'pie'
@@ -93,27 +73,14 @@ const PieChart = /*#__PURE__*/React.forwardRef(function PieChart(inProps, ref) {
93
73
  width: width,
94
74
  height: height,
95
75
  margin: margin,
96
- xAxis: xAxis ?? [{
97
- id: DEFAULT_X_AXIS_KEY,
98
- scaleType: 'point',
99
- data: [...new Array(Math.max(...series.map(s => s.data.length)))].map((_, index) => index)
100
- }],
101
- yAxis: yAxis,
102
76
  colors: colors,
103
77
  sx: sx,
104
- disableAxisListener: tooltip?.trigger !== 'axis' && axisHighlight?.x === 'none' && axisHighlight?.y === 'none',
78
+ disableAxisListener: true,
105
79
  highlightedItem: highlightedItem,
106
80
  onHighlightChange: onHighlightChange,
107
81
  className: className,
108
82
  skipAnimation: skipAnimation,
109
- children: [/*#__PURE__*/_jsx(ChartsAxis, {
110
- topAxis: topAxis,
111
- leftAxis: leftAxis,
112
- rightAxis: rightAxis,
113
- bottomAxis: bottomAxis,
114
- slots: slots,
115
- slotProps: slotProps
116
- }), /*#__PURE__*/_jsx(PiePlot, {
83
+ children: [/*#__PURE__*/_jsx(PiePlot, {
117
84
  slots: slots,
118
85
  slotProps: slotProps,
119
86
  onItemClick: onItemClick
@@ -121,10 +88,15 @@ const PieChart = /*#__PURE__*/React.forwardRef(function PieChart(inProps, ref) {
121
88
  loading: loading,
122
89
  slots: slots,
123
90
  slotProps: slotProps
124
- }), /*#__PURE__*/_jsx(ChartsLegend, _extends({}, legend, {
91
+ }), !hideLegend && /*#__PURE__*/_jsx(ChartsLegend, {
92
+ direction: "column",
93
+ position: {
94
+ vertical: 'middle',
95
+ horizontal: isRtl ? 'left' : 'right'
96
+ },
125
97
  slots: slots,
126
98
  slotProps: slotProps
127
- })), /*#__PURE__*/_jsx(ChartsAxisHighlight, _extends({}, axisHighlight)), !loading && /*#__PURE__*/_jsx(ChartsTooltip, _extends({}, tooltip, {
99
+ }), !loading && /*#__PURE__*/_jsx(ChartsTooltip, _extends({}, tooltip, {
128
100
  slots: slots,
129
101
  slotProps: slotProps
130
102
  })), children]
@@ -135,21 +107,6 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
135
107
  // | These PropTypes are generated from the TypeScript type definitions |
136
108
  // | To update them edit the TypeScript types and run "pnpm proptypes" |
137
109
  // ----------------------------------------------------------------------
138
- /**
139
- * The configuration of axes highlight.
140
- * @see See {@link https://mui.com/x/react-charts/highlighting highlighting docs} for more details.
141
- * @default { x: 'none', y: 'none' }
142
- */
143
- axisHighlight: PropTypes.shape({
144
- x: PropTypes.oneOf(['band', 'line', 'none']),
145
- y: PropTypes.oneOf(['band', 'line', 'none'])
146
- }),
147
- /**
148
- * Indicate which axis to display the bottom of the charts.
149
- * Can be a string (the id of the axis) or an object `ChartsXAxisProps`.
150
- * @default null
151
- */
152
- bottomAxis: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
153
110
  children: PropTypes.node,
154
111
  className: PropTypes.string,
155
112
  /**
@@ -172,6 +129,10 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
172
129
  * The height of the chart in px. If not defined, it takes the height of the parent element.
173
130
  */
174
131
  height: PropTypes.number,
132
+ /**
133
+ * If `true`, the legend is not rendered.
134
+ */
135
+ hideLegend: PropTypes.bool,
175
136
  /**
176
137
  * The item currently highlighted. Turns highlighting into a controlled prop.
177
138
  */
@@ -179,40 +140,6 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
179
140
  dataIndex: PropTypes.number,
180
141
  seriesId: PropTypes.oneOfType([PropTypes.number, PropTypes.string])
181
142
  }),
182
- /**
183
- * Indicate which axis to display the left of the charts.
184
- * Can be a string (the id of the axis) or an object `ChartsYAxisProps`.
185
- * @default null
186
- */
187
- leftAxis: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
188
- /**
189
- * The props of the legend.
190
- * @default { direction: 'column', position: { vertical: 'middle', horizontal: 'right' } }
191
- * @deprecated Consider using `slotProps.legend` instead.
192
- */
193
- legend: PropTypes.shape({
194
- classes: PropTypes.object,
195
- direction: PropTypes.oneOf(['column', 'row']),
196
- hidden: PropTypes.bool,
197
- itemGap: PropTypes.number,
198
- itemMarkHeight: PropTypes.number,
199
- itemMarkWidth: PropTypes.number,
200
- labelStyle: PropTypes.object,
201
- markGap: PropTypes.number,
202
- onItemClick: PropTypes.func,
203
- padding: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
204
- bottom: PropTypes.number,
205
- left: PropTypes.number,
206
- right: PropTypes.number,
207
- top: PropTypes.number
208
- })]),
209
- position: PropTypes.shape({
210
- horizontal: PropTypes.oneOf(['left', 'middle', 'right']).isRequired,
211
- vertical: PropTypes.oneOf(['bottom', 'middle', 'top']).isRequired
212
- }),
213
- slotProps: PropTypes.object,
214
- slots: PropTypes.object
215
- }),
216
143
  /**
217
144
  * If `true`, a loading overlay is displayed.
218
145
  * @default false
@@ -250,12 +177,6 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
250
177
  * @default false
251
178
  */
252
179
  resolveSizeBeforeRender: PropTypes.bool,
253
- /**
254
- * Indicate which axis to display the right of the charts.
255
- * Can be a string (the id of the axis) or an object `ChartsYAxisProps`.
256
- * @default null
257
- */
258
- rightAxis: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
259
180
  /**
260
181
  * The series to display in the pie chart.
261
182
  * An array of [[PieSeriesType]] objects.
@@ -291,12 +212,6 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
291
212
  slots: PropTypes.object,
292
213
  trigger: PropTypes.oneOf(['axis', 'item', 'none'])
293
214
  }),
294
- /**
295
- * Indicate which axis to display the top of the charts.
296
- * Can be a string (the id of the axis) or an object `ChartsXAxisProps`.
297
- * @default null
298
- */
299
- topAxis: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
300
215
  viewBox: PropTypes.shape({
301
216
  height: PropTypes.number,
302
217
  width: PropTypes.number,