@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
@@ -10,7 +10,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
10
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
11
  var _useId = _interopRequireDefault(require("@mui/utils/useId"));
12
12
  var _constants = require("../constants");
13
- const _excluded = ["xAxis", "yAxis", "series", "width", "height", "margin", "colors", "dataset", "sx", "tooltip", "onAxisClick", "axisHighlight", "legend", "grid", "topAxis", "leftAxis", "rightAxis", "bottomAxis", "children", "slots", "slotProps", "skipAnimation", "loading", "layout", "onItemClick", "highlightedItem", "onHighlightChange", "borderRadius", "barLabel", "className"];
13
+ const _excluded = ["xAxis", "yAxis", "series", "width", "height", "margin", "colors", "dataset", "sx", "tooltip", "onAxisClick", "axisHighlight", "grid", "topAxis", "leftAxis", "rightAxis", "bottomAxis", "children", "slots", "slotProps", "skipAnimation", "loading", "layout", "onItemClick", "highlightedItem", "onHighlightChange", "borderRadius", "barLabel", "className", "hideLegend"];
14
14
  /**
15
15
  * A helper function that extracts BarChartProps from the input props
16
16
  * and returns an object with props for the children components of BarChart.
@@ -32,7 +32,6 @@ const useBarChartProps = props => {
32
32
  tooltip,
33
33
  onAxisClick,
34
34
  axisHighlight,
35
- legend,
36
35
  grid,
37
36
  topAxis,
38
37
  leftAxis,
@@ -123,10 +122,10 @@ const useBarChartProps = props => {
123
122
  } : {
124
123
  x: 'band'
125
124
  }, axisHighlight);
126
- const legendProps = (0, _extends2.default)({}, legend, {
125
+ const legendProps = {
127
126
  slots,
128
127
  slotProps
129
- });
128
+ };
130
129
  const tooltipProps = (0, _extends2.default)({}, tooltip, {
131
130
  slots,
132
131
  slotProps
@@ -10,47 +10,18 @@ exports.ChartContainer = void 0;
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
- var _DrawingProvider = require("../context/DrawingProvider");
14
- var _SeriesProvider = require("../context/SeriesProvider");
15
- var _InteractionProvider = require("../context/InteractionProvider");
16
- var _ChartsSurface = require("../ChartsSurface");
17
- var _CartesianProvider = require("../context/CartesianProvider");
18
- var _ChartsAxesGradients = require("../internals/components/ChartsAxesGradients");
19
- var _context = require("../context");
20
- var _PluginProvider = require("../context/PluginProvider");
13
+ var _ChartDataProvider = require("../context/ChartDataProvider");
14
+ var _ResizableContainer = require("./ResizableContainer");
21
15
  var _useChartContainerProps = require("./useChartContainerProps");
22
- var _AnimationProvider = require("../context/AnimationProvider");
23
16
  var _jsxRuntime = require("react/jsx-runtime");
24
17
  const ChartContainer = exports.ChartContainer = /*#__PURE__*/React.forwardRef(function ChartContainer(props, ref) {
25
18
  const {
26
- children,
27
- drawingProviderProps,
28
- seriesProviderProps,
29
- cartesianProviderProps,
30
- zAxisContextProps,
31
- highlightedProviderProps,
32
- chartsSurfaceProps,
33
- pluginProviderProps,
34
- animationProviderProps
19
+ hasIntrinsicSize,
20
+ chartDataProviderProps,
21
+ resizableChartContainerProps
35
22
  } = (0, _useChartContainerProps.useChartContainerProps)(props, ref);
36
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_DrawingProvider.DrawingProvider, (0, _extends2.default)({}, drawingProviderProps, {
37
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_PluginProvider.PluginProvider, (0, _extends2.default)({}, pluginProviderProps, {
38
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SeriesProvider.SeriesProvider, (0, _extends2.default)({}, seriesProviderProps, {
39
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CartesianProvider.CartesianProvider, (0, _extends2.default)({}, cartesianProviderProps, {
40
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.ZAxisContextProvider, (0, _extends2.default)({}, zAxisContextProps, {
41
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_InteractionProvider.InteractionProvider, {
42
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.HighlightedProvider, (0, _extends2.default)({}, highlightedProviderProps, {
43
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ChartsSurface.ChartsSurface, (0, _extends2.default)({}, chartsSurfaceProps, {
44
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsAxesGradients.ChartsAxesGradients, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_AnimationProvider.AnimationProvider, (0, _extends2.default)({}, animationProviderProps, {
45
- children: children
46
- }))]
47
- }))
48
- }))
49
- })
50
- }))
51
- }))
52
- }))
53
- }))
23
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ResizableContainer.ResizableContainer, (0, _extends2.default)({}, resizableChartContainerProps, {
24
+ children: hasIntrinsicSize ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartDataProvider.ChartDataProvider, (0, _extends2.default)({}, chartDataProviderProps)) : null
54
25
  }));
55
26
  });
56
27
  process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
@@ -77,9 +48,9 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
77
48
  */
78
49
  disableAxisListener: _propTypes.default.bool,
79
50
  /**
80
- * The height of the chart in px.
51
+ * The height of the chart in px. If not defined, it takes the height of the parent element.
81
52
  */
82
- height: _propTypes.default.number.isRequired,
53
+ height: _propTypes.default.number,
83
54
  /**
84
55
  * The item currently highlighted. Turns highlighting into a controlled prop.
85
56
  */
@@ -110,6 +81,16 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
110
81
  * If not provided, the container supports line, bar, scatter and pie charts.
111
82
  */
112
83
  plugins: _propTypes.default.arrayOf(_propTypes.default.object),
84
+ /**
85
+ * The chart will try to wait for the parent container to resolve its size
86
+ * before it renders for the first time.
87
+ *
88
+ * This can be useful in some scenarios where the chart appear to grow after
89
+ * the first render, like when used inside a grid.
90
+ *
91
+ * @default false
92
+ */
93
+ resolveSizeBeforeRender: _propTypes.default.bool,
113
94
  /**
114
95
  * The array of series to display.
115
96
  * Each type of series has its own specificity.
@@ -130,9 +111,9 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
130
111
  y: _propTypes.default.number
131
112
  }),
132
113
  /**
133
- * The width of the chart in px.
114
+ * The width of the chart in px. If not defined, it takes the width of the parent element.
134
115
  */
135
- width: _propTypes.default.number.isRequired,
116
+ width: _propTypes.default.number,
136
117
  /**
137
118
  * The configuration of the x-axes.
138
119
  * If not provided, a default axis config is used.
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  'use client';
3
3
 
4
+ /* eslint-disable react-compiler/react-compiler */
4
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
6
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
7
  Object.defineProperty(exports, "__esModule", {
@@ -11,6 +12,7 @@ var React = _interopRequireWildcard(require("react"));
11
12
  var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
12
13
  var _ownerWindow = _interopRequireDefault(require("@mui/utils/ownerWindow"));
13
14
  const useChartContainerDimensions = (inWidth, inHeight, resolveSizeBeforeRender) => {
15
+ const hasInSize = inWidth !== undefined && inHeight !== undefined;
14
16
  const stateRef = React.useRef({
15
17
  displayError: false,
16
18
  initialCompute: true,
@@ -47,7 +49,7 @@ const useChartContainerDimensions = (inWidth, inHeight, resolveSizeBeforeRender)
47
49
  // https://github.com/mui/mui-x/issues/13477#issuecomment-2336634785
48
50
  (0, _useEnhancedEffect.default)(() => {
49
51
  // computeRun is used to avoid infinite loops.
50
- if (!resolveSizeBeforeRender || !stateRef.current.initialCompute || stateRef.current.computeRun > 20) {
52
+ if (hasInSize || !resolveSizeBeforeRender || !stateRef.current.initialCompute || stateRef.current.computeRun > 20) {
51
53
  return;
52
54
  }
53
55
  const computedSize = computeSize();
@@ -56,9 +58,9 @@ const useChartContainerDimensions = (inWidth, inHeight, resolveSizeBeforeRender)
56
58
  } else if (stateRef.current.initialCompute) {
57
59
  stateRef.current.initialCompute = false;
58
60
  }
59
- }, [width, height, computeSize, resolveSizeBeforeRender]);
61
+ }, [width, height, computeSize, resolveSizeBeforeRender, hasInSize]);
60
62
  (0, _useEnhancedEffect.default)(() => {
61
- if (inWidth !== undefined && inHeight !== undefined) {
63
+ if (hasInSize) {
62
64
  return () => {};
63
65
  }
64
66
  computeSize();
@@ -84,7 +86,7 @@ const useChartContainerDimensions = (inWidth, inHeight, resolveSizeBeforeRender)
84
86
  observer.unobserve(elementToObserve);
85
87
  }
86
88
  };
87
- }, [computeSize, inHeight, inWidth]);
89
+ }, [computeSize, hasInSize]);
88
90
  if (process.env.NODE_ENV !== 'production') {
89
91
  if (stateRef.current.displayError && inWidth === undefined && width === 0) {
90
92
  console.error(`MUI X: ChartContainer does not have \`width\` prop, and its container has no \`width\` defined.`);
@@ -2,93 +2,76 @@
2
2
  'use client';
3
3
 
4
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6
5
  Object.defineProperty(exports, "__esModule", {
7
6
  value: true
8
7
  });
9
8
  exports.useChartContainerProps = void 0;
10
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
10
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
12
- var React = _interopRequireWildcard(require("react"));
13
- var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
14
- var _useDefaultizeAxis = require("./useDefaultizeAxis");
15
- const _excluded = ["width", "height", "series", "margin", "xAxis", "yAxis", "zAxis", "colors", "dataset", "sx", "title", "desc", "disableAxisListener", "highlightedItem", "onHighlightChange", "plugins", "children", "skipAnimation"];
11
+ var _useChartContainerDimensions = require("./useChartContainerDimensions");
12
+ const _excluded = ["width", "height", "resolveSizeBeforeRender", "margin", "children", "series", "colors", "dataset", "desc", "disableAxisListener", "highlightedItem", "onHighlightChange", "plugins", "sx", "title", "viewBox", "xAxis", "yAxis", "zAxis", "skipAnimation"];
16
13
  const useChartContainerProps = (props, ref) => {
17
14
  const {
18
15
  width,
19
16
  height,
20
- series,
17
+ resolveSizeBeforeRender,
21
18
  margin,
22
- xAxis,
23
- yAxis,
24
- zAxis,
19
+ children,
20
+ series,
25
21
  colors,
26
22
  dataset,
27
- sx,
28
- title,
29
23
  desc,
30
24
  disableAxisListener,
31
25
  highlightedItem,
32
26
  onHighlightChange,
33
27
  plugins,
34
- children,
28
+ sx,
29
+ title,
30
+ viewBox,
31
+ xAxis,
32
+ yAxis,
33
+ zAxis,
35
34
  skipAnimation
36
35
  } = props,
37
36
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
38
- const svgRef = React.useRef(null);
39
- const chartSurfaceRef = (0, _useForkRef.default)(ref, svgRef);
40
- const [defaultizedXAxis, defaultizedYAxis] = (0, _useDefaultizeAxis.useDefaultizeAxis)(xAxis, yAxis, dataset);
41
- const drawingProviderProps = {
42
- width,
43
- height,
37
+ const {
38
+ containerRef,
39
+ width: dWidth,
40
+ height: dHeight
41
+ } = (0, _useChartContainerDimensions.useChartContainerDimensions)(width, height, resolveSizeBeforeRender);
42
+ const resizableChartContainerProps = (0, _extends2.default)({}, other, {
43
+ ownerState: {
44
+ width,
45
+ height
46
+ },
47
+ ref: containerRef
48
+ });
49
+ const chartDataProviderProps = {
44
50
  margin,
45
- svgRef
46
- };
47
- const animationProviderProps = {
48
- skipAnimation
49
- };
50
- const pluginProviderProps = {
51
- plugins
52
- };
53
- const seriesProviderProps = {
51
+ children,
54
52
  series,
55
53
  colors,
56
- dataset
57
- };
58
- const cartesianProviderProps = {
59
- xAxis: defaultizedXAxis,
60
- yAxis: defaultizedYAxis,
61
- dataset
62
- };
63
- const zAxisContextProps = {
64
- zAxis,
65
- dataset
66
- };
67
- const highlightedProviderProps = {
54
+ dataset,
55
+ desc,
56
+ disableAxisListener,
68
57
  highlightedItem,
69
- onHighlightChange
70
- };
71
- const chartsSurfaceProps = (0, _extends2.default)({}, other, {
72
- width,
73
- height,
74
- ref: chartSurfaceRef,
58
+ onHighlightChange,
59
+ plugins,
75
60
  sx,
76
61
  title,
77
- desc,
78
- disableAxisListener
79
- });
62
+ viewBox,
63
+ xAxis,
64
+ yAxis,
65
+ zAxis,
66
+ skipAnimation,
67
+ width: dWidth,
68
+ height: dHeight,
69
+ ref
70
+ };
80
71
  return {
81
- children,
82
- drawingProviderProps,
83
- seriesProviderProps,
84
- cartesianProviderProps,
85
- zAxisContextProps,
86
- highlightedProviderProps,
87
- chartsSurfaceProps,
88
- pluginProviderProps,
89
- animationProviderProps,
90
- xAxis: defaultizedXAxis,
91
- yAxis: defaultizedYAxis
72
+ hasIntrinsicSize: Boolean(dWidth && dHeight),
73
+ chartDataProviderProps,
74
+ resizableChartContainerProps
92
75
  };
93
76
  };
94
77
  exports.useChartContainerProps = useChartContainerProps;
@@ -17,7 +17,6 @@ var _styles = require("@mui/material/styles");
17
17
  var _utils = require("./utils");
18
18
  var _chartsLegendClasses = require("./chartsLegendClasses");
19
19
  var _DefaultChartsLegend = require("./DefaultChartsLegend");
20
- var _hooks = require("../hooks");
21
20
  var _useSeries = require("../hooks/useSeries");
22
21
  var _jsxRuntime = require("react/jsx-runtime");
23
22
  const _excluded = ["slots", "slotProps"];
@@ -57,7 +56,6 @@ function ChartsLegend(inProps) {
57
56
  const classes = useUtilityClasses((0, _extends2.default)({}, defaultizedProps, {
58
57
  theme
59
58
  }));
60
- const drawingArea = (0, _hooks.useDrawingArea)();
61
59
  const series = (0, _useSeries.useSeries)();
62
60
  const seriesToDisplay = (0, _utils.getSeriesToDisplay)(series);
63
61
  const ChartLegendRender = slots?.legend ?? _DefaultChartsLegend.DefaultChartsLegend;
@@ -66,7 +64,6 @@ function ChartsLegend(inProps) {
66
64
  externalSlotProps: slotProps?.legend,
67
65
  additionalProps: (0, _extends2.default)({}, other, {
68
66
  classes,
69
- drawingArea,
70
67
  series,
71
68
  seriesToDisplay
72
69
  }),
@@ -13,7 +13,7 @@ var React = _interopRequireWildcard(require("react"));
13
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
14
14
  var _LegendPerItem = require("./LegendPerItem");
15
15
  var _jsxRuntime = require("react/jsx-runtime");
16
- const _excluded = ["drawingArea", "seriesToDisplay", "hidden", "onItemClick"];
16
+ const _excluded = ["seriesToDisplay", "hidden", "onItemClick"];
17
17
  const seriesContextBuilder = context => ({
18
18
  type: 'series',
19
19
  color: context.color,
@@ -50,17 +50,6 @@ process.env.NODE_ENV !== "production" ? DefaultChartsLegend.propTypes = {
50
50
  * The default depends on the chart.
51
51
  */
52
52
  direction: _propTypes.default.oneOf(['column', 'row']).isRequired,
53
- /**
54
- * @deprecated Use the `useDrawingArea` hook instead.
55
- */
56
- drawingArea: _propTypes.default.shape({
57
- bottom: _propTypes.default.number.isRequired,
58
- height: _propTypes.default.number.isRequired,
59
- left: _propTypes.default.number.isRequired,
60
- right: _propTypes.default.number.isRequired,
61
- top: _propTypes.default.number.isRequired,
62
- width: _propTypes.default.number.isRequired
63
- }).isRequired,
64
53
  /**
65
54
  * Set to true to hide the legend.
66
55
  * @default false
@@ -46,8 +46,8 @@ function ChartsOnAxisClickHandler(props) {
46
46
  Object.keys(series).filter(seriesType => ['bar', 'line'].includes(seriesType)).forEach(seriesType => {
47
47
  series[seriesType]?.seriesOrder.forEach(seriesId => {
48
48
  const seriesItem = series[seriesType].series[seriesId];
49
- const providedXAxisId = seriesItem.xAxisId ?? seriesItem.xAxisKey;
50
- const providedYAxisId = seriesItem.yAxisId ?? seriesItem.yAxisKey;
49
+ const providedXAxisId = seriesItem.xAxisId;
50
+ const providedYAxisId = seriesItem.yAxisId;
51
51
  const axisKey = isXaxis ? providedXAxisId : providedYAxisId;
52
52
  if (axisKey === undefined || axisKey === USED_AXIS_ID) {
53
53
  seriesValues[seriesId] = seriesItem.data[dataIndex];
@@ -48,14 +48,14 @@ function ChartsAxisTooltipContent(props) {
48
48
  Object.keys(series).filter(_isCartesian.isCartesianSeriesType).forEach(seriesType => {
49
49
  series[seriesType].seriesOrder.forEach(seriesId => {
50
50
  const item = series[seriesType].series[seriesId];
51
- const providedXAxisId = item.xAxisId ?? item.xAxisKey;
52
- const providedYAxisId = item.yAxisId ?? item.yAxisKey;
51
+ const providedXAxisId = item.xAxisId;
52
+ const providedYAxisId = item.yAxisId;
53
53
  const axisKey = isXaxis ? providedXAxisId : providedYAxisId;
54
54
  if (axisKey === undefined || axisKey === USED_AXIS_ID) {
55
55
  const seriesToAdd = series[seriesType].series[seriesId];
56
56
  const xAxisId = providedXAxisId ?? xAxisIds[0];
57
57
  const yAxisId = providedYAxisId ?? yAxisIds[0];
58
- const zAxisId = seriesToAdd.zAxisId ?? seriesToAdd.zAxisKey ?? zAxisIds[0];
58
+ const zAxisId = seriesToAdd.zAxisId ?? zAxisIds[0];
59
59
  const getColor = colorProcessors[seriesType]?.(seriesToAdd, xAxis[xAxisId], yAxis[yAxisId], zAxisId && zAxis[zAxisId]) ?? (() => '');
60
60
  rep.push((0, _extends2.default)({}, seriesToAdd, {
61
61
  getColor
@@ -38,9 +38,9 @@ function ChartsItemTooltipContent(props) {
38
38
  zAxisIds
39
39
  } = React.useContext(_ZAxisContextProvider.ZAxisContext);
40
40
  const colorProcessors = (0, _useColorProcessor.useColorProcessor)();
41
- const xAxisId = series.xAxisId ?? series.xAxisKey ?? xAxisIds[0];
42
- const yAxisId = series.yAxisId ?? series.yAxisKey ?? yAxisIds[0];
43
- const zAxisId = series.zAxisId ?? series.zAxisKey ?? zAxisIds[0];
41
+ const xAxisId = series.xAxisId ?? xAxisIds[0];
42
+ const yAxisId = series.yAxisId ?? yAxisIds[0];
43
+ const zAxisId = series.zAxisId ?? zAxisIds[0];
44
44
  const getColor = colorProcessors[series.type]?.(series, xAxisId && xAxis[xAxisId], yAxisId && yAxis[yAxisId], zAxisId && zAxis[zAxisId]) ?? (() => '');
45
45
  const Content = content ?? _DefaultChartsItemTooltipContent.DefaultChartsItemTooltipContent;
46
46
  const chartTooltipContentProps = (0, _useSlotProps.default)({
@@ -11,11 +11,13 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
  var React = _interopRequireWildcard(require("react"));
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
14
+ var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
14
15
  var _styles = require("@mui/material/styles");
15
16
  var _Popper = _interopRequireDefault(require("@mui/material/Popper"));
16
17
  var _NoSsr = _interopRequireDefault(require("@mui/material/NoSsr"));
17
18
  var _useSlotProps = _interopRequireDefault(require("@mui/utils/useSlotProps"));
18
19
  var _InteractionProvider = require("../context/InteractionProvider");
20
+ var _useSvgRef = require("../hooks/useSvgRef");
19
21
  var _utils = require("./utils");
20
22
  var _ChartsItemTooltipContent = require("./ChartsItemTooltipContent");
21
23
  var _ChartsAxisTooltipContent = require("./ChartsAxisTooltipContent");
@@ -70,14 +72,20 @@ function ChartsTooltip(inProps) {
70
72
  slots,
71
73
  slotProps
72
74
  } = props;
73
- const mousePosition = (0, _utils.useMouseTracker)();
75
+ const svgRef = (0, _useSvgRef.useSvgRef)();
76
+ const pointerType = (0, _utils.usePointerType)();
77
+ const popperRef = React.useRef(null);
78
+ const positionRef = (0, _useLazyRef.default)(() => ({
79
+ x: 0,
80
+ y: 0
81
+ }));
74
82
  const {
75
83
  item,
76
84
  axis
77
85
  } = React.useContext(_InteractionProvider.InteractionContext);
78
86
  const displayedData = trigger === 'item' ? item : axis;
79
87
  const tooltipHasData = (0, _utils.getTooltipHasData)(trigger, displayedData);
80
- const popperOpen = mousePosition !== null && tooltipHasData;
88
+ const popperOpen = pointerType !== null && tooltipHasData;
81
89
  const classes = useUtilityClasses({
82
90
  classes: props.classes
83
91
  });
@@ -87,17 +95,48 @@ function ChartsTooltip(inProps) {
87
95
  externalSlotProps: slotProps?.popper,
88
96
  additionalProps: {
89
97
  open: popperOpen,
90
- placement: mousePosition?.pointerType === 'mouse' ? 'right-start' : 'top',
91
- anchorEl: (0, _utils.generateVirtualElement)(mousePosition),
98
+ placement: pointerType?.pointerType === 'mouse' ? 'right-start' : 'top',
99
+ popperRef,
100
+ anchorEl: {
101
+ getBoundingClientRect: () => ({
102
+ x: positionRef.current.x,
103
+ y: positionRef.current.y,
104
+ top: positionRef.current.y,
105
+ left: positionRef.current.x,
106
+ right: positionRef.current.x,
107
+ bottom: positionRef.current.y,
108
+ width: 0,
109
+ height: 0,
110
+ toJSON: () => ''
111
+ })
112
+ },
92
113
  modifiers: [{
93
114
  name: 'offset',
94
115
  options: {
95
- offset: [0, mousePosition?.pointerType === 'touch' ? 40 - mousePosition.height : 0]
116
+ offset: [0, pointerType?.pointerType === 'touch' ? 40 - pointerType.height : 0]
96
117
  }
97
118
  }]
98
119
  },
99
120
  ownerState: {}
100
121
  });
122
+ React.useEffect(() => {
123
+ const element = svgRef.current;
124
+ if (element === null) {
125
+ return () => {};
126
+ }
127
+ const handleMove = event => {
128
+ // eslint-disable-next-line react-compiler/react-compiler
129
+ positionRef.current = {
130
+ x: event.clientX,
131
+ y: event.clientY
132
+ };
133
+ popperRef.current?.update();
134
+ };
135
+ element.addEventListener('pointermove', handleMove);
136
+ return () => {
137
+ element.removeEventListener('pointermove', handleMove);
138
+ };
139
+ }, [svgRef, positionRef]);
101
140
  if (trigger === 'none') {
102
141
  return null;
103
142
  }
@@ -51,15 +51,15 @@ function useAxisTooltip() {
51
51
  }
52
52
  return seriesOfType.seriesOrder.map(seriesId => {
53
53
  const seriesToAdd = seriesOfType.series[seriesId];
54
- const providedXAxisId = seriesToAdd.xAxisId ?? seriesToAdd.xAxisKey;
55
- const providedYAxisId = seriesToAdd.yAxisId ?? seriesToAdd.yAxisKey;
54
+ const providedXAxisId = seriesToAdd.xAxisId;
55
+ const providedYAxisId = seriesToAdd.yAxisId;
56
56
  const axisKey = isXaxis ? providedXAxisId : providedYAxisId;
57
57
 
58
58
  // Test if the series uses the default axis
59
59
  if (axisKey === undefined || axisKey === USED_AXIS_ID) {
60
60
  const xAxisId = providedXAxisId ?? xAxisIds[0];
61
61
  const yAxisId = providedYAxisId ?? yAxisIds[0];
62
- const zAxisId = seriesToAdd.zAxisId ?? seriesToAdd.zAxisKey ?? zAxisIds[0];
62
+ const zAxisId = seriesToAdd.zAxisId ?? zAxisIds[0];
63
63
  const color = colorProcessors[seriesType]?.(seriesToAdd, xAxis[xAxisId], yAxis[yAxisId], zAxisId && zAxis[zAxisId])(dataIndex) ?? '';
64
64
  const value = seriesToAdd.data[dataIndex] ?? null;
65
65
  const formattedValue = seriesToAdd.valueFormatter(value, {
@@ -31,9 +31,9 @@ function useItemTooltip() {
31
31
  zAxisIds
32
32
  } = React.useContext(_ZAxisContextProvider.ZAxisContext);
33
33
  const colorProcessors = (0, _useColorProcessor.useColorProcessor)();
34
- const xAxisId = series.xAxisId ?? series.xAxisKey ?? xAxisIds[0];
35
- const yAxisId = series.yAxisId ?? series.yAxisKey ?? yAxisIds[0];
36
- const zAxisId = series.zAxisId ?? series.zAxisKey ?? zAxisIds[0];
34
+ const xAxisId = series.xAxisId ?? xAxisIds[0];
35
+ const yAxisId = series.yAxisId ?? yAxisIds[0];
36
+ const zAxisId = series.zAxisId ?? zAxisIds[0];
37
37
  if (!item || item.dataIndex === undefined) {
38
38
  return null;
39
39
  }
@@ -1,53 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- exports.generateVirtualElement = generateVirtualElement;
9
7
  exports.getTooltipHasData = getTooltipHasData;
10
8
  exports.useMouseTracker = useMouseTracker;
9
+ exports.usePointerType = usePointerType;
11
10
  exports.utcFormatter = utcFormatter;
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
11
  var React = _interopRequireWildcard(require("react"));
14
12
  var _hooks = require("../hooks");
15
- function generateVirtualElement(mousePosition) {
16
- if (mousePosition === null) {
17
- return {
18
- getBoundingClientRect: () => ({
19
- width: 0,
20
- height: 0,
21
- x: 0,
22
- y: 0,
23
- top: 0,
24
- right: 0,
25
- bottom: 0,
26
- left: 0,
27
- toJSON: () => ''
28
- })
29
- };
30
- }
31
- const {
32
- x,
33
- y
34
- } = mousePosition;
35
- const boundingBox = {
36
- width: 0,
37
- height: 0,
38
- x,
39
- y,
40
- top: y,
41
- right: x,
42
- bottom: y,
43
- left: x
44
- };
45
- return {
46
- getBoundingClientRect: () => (0, _extends2.default)({}, boundingBox, {
47
- toJSON: () => JSON.stringify(boundingBox)
48
- })
49
- };
50
- }
13
+ /**
14
+ * @deprecated We recommend using vanilla JS to let popper track mouse position.
15
+ */
51
16
  function useMouseTracker() {
52
17
  const svgRef = (0, _hooks.useSvgRef)();
53
18
 
@@ -58,6 +23,7 @@ function useMouseTracker() {
58
23
  if (element === null) {
59
24
  return () => {};
60
25
  }
26
+ const controller = new AbortController();
61
27
  const handleOut = event => {
62
28
  if (event.pointerType !== 'mouse') {
63
29
  setMousePosition(null);
@@ -71,16 +37,52 @@ function useMouseTracker() {
71
37
  pointerType: event.pointerType
72
38
  });
73
39
  };
74
- element.addEventListener('pointerdown', handleMove);
75
- element.addEventListener('pointermove', handleMove);
40
+ element.addEventListener('pointerdown', handleMove, {
41
+ signal: controller.signal
42
+ });
43
+ element.addEventListener('pointermove', handleMove, {
44
+ signal: controller.signal
45
+ });
46
+ element.addEventListener('pointerup', handleOut, {
47
+ signal: controller.signal
48
+ });
49
+ return () => {
50
+ // Calling `.abort()` removes ALL event listeners
51
+ // For more info, see https://kettanaito.com/blog/dont-sleep-on-abort-controller
52
+ controller.abort();
53
+ };
54
+ }, [svgRef]);
55
+ return mousePosition;
56
+ }
57
+ function usePointerType() {
58
+ const svgRef = (0, _hooks.useSvgRef)();
59
+
60
+ // Use a ref to avoid rerendering on every mousemove event.
61
+ const [pointerType, setPointerType] = React.useState(null);
62
+ React.useEffect(() => {
63
+ const element = svgRef.current;
64
+ if (element === null) {
65
+ return () => {};
66
+ }
67
+ const handleOut = event => {
68
+ if (event.pointerType !== 'mouse') {
69
+ setPointerType(null);
70
+ }
71
+ };
72
+ const handleEnter = event => {
73
+ setPointerType({
74
+ height: event.height,
75
+ pointerType: event.pointerType
76
+ });
77
+ };
78
+ element.addEventListener('pointerenter', handleEnter);
76
79
  element.addEventListener('pointerup', handleOut);
77
80
  return () => {
78
- element.removeEventListener('pointerdown', handleMove);
79
- element.removeEventListener('pointermove', handleMove);
81
+ element.removeEventListener('pointerenter', handleEnter);
80
82
  element.removeEventListener('pointerup', handleOut);
81
83
  };
82
84
  }, [svgRef]);
83
- return mousePosition;
85
+ return pointerType;
84
86
  }
85
87
  function getTooltipHasData(trigger, displayedData) {
86
88
  if (trigger === 'item') {