@mui/x-charts 7.6.0 → 7.6.2

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 (199) hide show
  1. package/BarChart/BarChart.d.ts +1 -1
  2. package/BarChart/BarChart.js +2 -2
  3. package/BarChart/BarPlot.js +2 -2
  4. package/BarChart/formatter.js +2 -2
  5. package/BarChart/getColor.d.ts +1 -1
  6. package/BarChart/getColor.js +4 -4
  7. package/BarChart/plugin.d.ts +2 -0
  8. package/BarChart/plugin.js +17 -0
  9. package/CHANGELOG.md +91 -0
  10. package/ChartContainer/ChartContainer.d.ts +14 -2
  11. package/ChartContainer/ChartContainer.js +13 -2
  12. package/ChartContainer/defaultPlugins.d.ts +2 -0
  13. package/ChartContainer/defaultPlugins.js +11 -0
  14. package/ChartContainer/usePluginsMerge.d.ts +10 -0
  15. package/ChartContainer/usePluginsMerge.js +39 -0
  16. package/ChartsLegend/ChartsLegend.js +2 -2
  17. package/ChartsLegend/utils.js +4 -1
  18. package/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +4 -4
  19. package/ChartsTooltip/ChartsAxisTooltipContent.js +4 -4
  20. package/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  21. package/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -1
  22. package/ChartsTooltip/utils.d.ts +1 -7
  23. package/ChartsTooltip/utils.js +2 -10
  24. package/ChartsVoronoiHandler/ChartsVoronoiHandler.js +2 -2
  25. package/ChartsXAxis/ChartsXAxis.js +17 -19
  26. package/ChartsYAxis/ChartsYAxis.js +17 -19
  27. package/LineChart/AreaPlot.js +2 -2
  28. package/LineChart/LineChart.d.ts +1 -1
  29. package/LineChart/LineChart.js +2 -2
  30. package/LineChart/LineHighlightPlot.js +2 -2
  31. package/LineChart/LinePlot.js +2 -2
  32. package/LineChart/MarkPlot.js +2 -2
  33. package/LineChart/formatter.js +2 -2
  34. package/LineChart/getColor.d.ts +1 -1
  35. package/LineChart/getColor.js +2 -2
  36. package/LineChart/plugin.d.ts +2 -0
  37. package/LineChart/plugin.js +17 -0
  38. package/PieChart/PieChart.d.ts +1 -1
  39. package/PieChart/PieChart.js +2 -2
  40. package/PieChart/PiePlot.js +2 -2
  41. package/PieChart/plugin.d.ts +2 -0
  42. package/PieChart/plugin.js +14 -0
  43. package/ResponsiveChartContainer/ResponsiveChartContainer.js +7 -2
  44. package/ScatterChart/ScatterChart.d.ts +1 -1
  45. package/ScatterChart/ScatterChart.js +2 -2
  46. package/ScatterChart/ScatterPlot.js +2 -2
  47. package/ScatterChart/formatter.js +2 -3
  48. package/ScatterChart/getColor.d.ts +1 -1
  49. package/ScatterChart/getColor.js +2 -2
  50. package/ScatterChart/plugin.d.ts +2 -0
  51. package/ScatterChart/plugin.js +17 -0
  52. package/SparkLineChart/SparkLineChart.d.ts +3 -3
  53. package/SparkLineChart/SparkLineChart.js +1 -1
  54. package/context/CartesianContextProvider.d.ts +13 -10
  55. package/context/CartesianContextProvider.js +2 -2
  56. package/context/DrawingProvider.d.ts +3 -1
  57. package/context/DrawingProvider.js +9 -2
  58. package/context/HighlightedProvider/HighlightedContext.d.ts +2 -1
  59. package/context/HighlightedProvider/HighlightedContext.js +8 -5
  60. package/context/HighlightedProvider/HighlightedProvider.js +15 -12
  61. package/context/HighlightedProvider/useHighlighted.js +6 -3
  62. package/context/HighlightedProvider/useItemHighlighted.js +2 -8
  63. package/context/SeriesContextProvider.d.ts +16 -5
  64. package/context/SeriesContextProvider.js +14 -17
  65. package/context/context.types.d.ts +4 -0
  66. package/context/context.types.js +5 -0
  67. package/esm/BarChart/BarChart.js +2 -2
  68. package/esm/BarChart/BarPlot.js +2 -2
  69. package/esm/BarChart/formatter.js +1 -1
  70. package/esm/BarChart/getColor.js +4 -4
  71. package/esm/BarChart/plugin.js +10 -0
  72. package/esm/ChartContainer/ChartContainer.js +13 -2
  73. package/esm/ChartContainer/defaultPlugins.js +5 -0
  74. package/esm/ChartContainer/usePluginsMerge.js +31 -0
  75. package/esm/ChartsLegend/ChartsLegend.js +2 -2
  76. package/esm/ChartsLegend/utils.js +4 -1
  77. package/esm/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +4 -4
  78. package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +3 -3
  79. package/esm/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  80. package/esm/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -1
  81. package/esm/ChartsTooltip/utils.js +2 -8
  82. package/esm/ChartsVoronoiHandler/ChartsVoronoiHandler.js +2 -2
  83. package/esm/ChartsXAxis/ChartsXAxis.js +17 -19
  84. package/esm/ChartsYAxis/ChartsYAxis.js +17 -19
  85. package/esm/LineChart/AreaPlot.js +2 -2
  86. package/esm/LineChart/LineChart.js +2 -2
  87. package/esm/LineChart/LineHighlightPlot.js +2 -2
  88. package/esm/LineChart/LinePlot.js +2 -2
  89. package/esm/LineChart/MarkPlot.js +2 -2
  90. package/esm/LineChart/formatter.js +1 -1
  91. package/esm/LineChart/getColor.js +2 -2
  92. package/esm/LineChart/plugin.js +10 -0
  93. package/esm/PieChart/PieChart.js +2 -2
  94. package/esm/PieChart/PiePlot.js +2 -2
  95. package/esm/PieChart/plugin.js +7 -0
  96. package/esm/ResponsiveChartContainer/ResponsiveChartContainer.js +7 -2
  97. package/esm/ScatterChart/ScatterChart.js +2 -2
  98. package/esm/ScatterChart/ScatterPlot.js +2 -2
  99. package/esm/ScatterChart/formatter.js +1 -1
  100. package/esm/ScatterChart/getColor.js +2 -2
  101. package/esm/ScatterChart/plugin.js +10 -0
  102. package/esm/SparkLineChart/SparkLineChart.js +1 -1
  103. package/esm/context/CartesianContextProvider.js +2 -2
  104. package/esm/context/DrawingProvider.js +9 -2
  105. package/esm/context/HighlightedProvider/HighlightedContext.js +8 -5
  106. package/esm/context/HighlightedProvider/HighlightedProvider.js +15 -12
  107. package/esm/context/HighlightedProvider/useHighlighted.js +6 -3
  108. package/esm/context/HighlightedProvider/useItemHighlighted.js +2 -6
  109. package/esm/context/SeriesContextProvider.js +14 -17
  110. package/esm/context/context.types.js +1 -0
  111. package/esm/hooks/useInteractionItemProps.js +2 -2
  112. package/esm/hooks/useSeries.js +6 -3
  113. package/esm/hooks/useSvgRef.js +6 -3
  114. package/esm/internals/configInit.js +20 -0
  115. package/esm/internals/defaultizeValueFormatter.js +2 -3
  116. package/esm/internals/index.js +1 -0
  117. package/esm/internals/isCartesian.js +7 -0
  118. package/esm/models/index.js +1 -0
  119. package/esm/models/plugin.js +1 -0
  120. package/esm/models/seriesType/index.js +6 -0
  121. package/hooks/useInteractionItemProps.js +1 -1
  122. package/hooks/useSeries.d.ts +6 -11
  123. package/hooks/useSeries.js +6 -3
  124. package/hooks/useSvgRef.js +6 -3
  125. package/hooks/useTicks.d.ts +4 -2
  126. package/index.js +1 -1
  127. package/internals/configInit.d.ts +9 -0
  128. package/internals/configInit.js +26 -0
  129. package/internals/defaultizeValueFormatter.d.ts +1 -2
  130. package/internals/defaultizeValueFormatter.js +2 -3
  131. package/internals/index.d.ts +1 -0
  132. package/internals/index.js +16 -0
  133. package/internals/isCartesian.d.ts +7 -0
  134. package/internals/isCartesian.js +14 -0
  135. package/internals/package.json +6 -0
  136. package/models/axis.d.ts +3 -3
  137. package/models/index.d.ts +1 -0
  138. package/models/index.js +11 -0
  139. package/models/plugin.d.ts +16 -0
  140. package/models/plugin.js +5 -0
  141. package/models/seriesType/config.d.ts +30 -5
  142. package/models/seriesType/index.d.ts +8 -11
  143. package/models/seriesType/index.js +6 -0
  144. package/modern/BarChart/BarChart.js +2 -2
  145. package/modern/BarChart/BarPlot.js +2 -2
  146. package/modern/BarChart/formatter.js +1 -1
  147. package/modern/BarChart/getColor.js +4 -4
  148. package/modern/BarChart/plugin.js +10 -0
  149. package/modern/ChartContainer/ChartContainer.js +13 -2
  150. package/modern/ChartContainer/defaultPlugins.js +5 -0
  151. package/modern/ChartContainer/usePluginsMerge.js +31 -0
  152. package/modern/ChartsLegend/ChartsLegend.js +2 -2
  153. package/modern/ChartsLegend/utils.js +4 -1
  154. package/modern/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +4 -4
  155. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +3 -3
  156. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  157. package/modern/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -1
  158. package/modern/ChartsTooltip/utils.js +2 -8
  159. package/modern/ChartsVoronoiHandler/ChartsVoronoiHandler.js +2 -2
  160. package/modern/ChartsXAxis/ChartsXAxis.js +17 -19
  161. package/modern/ChartsYAxis/ChartsYAxis.js +17 -19
  162. package/modern/LineChart/AreaPlot.js +2 -2
  163. package/modern/LineChart/LineChart.js +2 -2
  164. package/modern/LineChart/LineHighlightPlot.js +2 -2
  165. package/modern/LineChart/LinePlot.js +2 -2
  166. package/modern/LineChart/MarkPlot.js +2 -2
  167. package/modern/LineChart/formatter.js +1 -1
  168. package/modern/LineChart/getColor.js +2 -2
  169. package/modern/LineChart/plugin.js +10 -0
  170. package/modern/PieChart/PieChart.js +2 -2
  171. package/modern/PieChart/PiePlot.js +2 -2
  172. package/modern/PieChart/plugin.js +7 -0
  173. package/modern/ResponsiveChartContainer/ResponsiveChartContainer.js +7 -2
  174. package/modern/ScatterChart/ScatterChart.js +2 -2
  175. package/modern/ScatterChart/ScatterPlot.js +2 -2
  176. package/modern/ScatterChart/formatter.js +1 -1
  177. package/modern/ScatterChart/getColor.js +2 -2
  178. package/modern/ScatterChart/plugin.js +10 -0
  179. package/modern/SparkLineChart/SparkLineChart.js +1 -1
  180. package/modern/context/CartesianContextProvider.js +2 -2
  181. package/modern/context/DrawingProvider.js +9 -2
  182. package/modern/context/HighlightedProvider/HighlightedContext.js +8 -5
  183. package/modern/context/HighlightedProvider/HighlightedProvider.js +15 -12
  184. package/modern/context/HighlightedProvider/useHighlighted.js +6 -3
  185. package/modern/context/HighlightedProvider/useItemHighlighted.js +2 -6
  186. package/modern/context/SeriesContextProvider.js +14 -17
  187. package/modern/context/context.types.js +1 -0
  188. package/modern/hooks/useInteractionItemProps.js +2 -2
  189. package/modern/hooks/useSeries.js +6 -3
  190. package/modern/hooks/useSvgRef.js +6 -3
  191. package/modern/index.js +1 -1
  192. package/modern/internals/configInit.js +20 -0
  193. package/modern/internals/defaultizeValueFormatter.js +2 -3
  194. package/modern/internals/index.js +1 -0
  195. package/modern/internals/isCartesian.js +7 -0
  196. package/modern/models/index.js +1 -0
  197. package/modern/models/plugin.js +1 -0
  198. package/modern/models/seriesType/index.js +6 -0
  199. package/package.json +1 -1
@@ -99,6 +99,11 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
99
99
  * @param {HighlightItemData | null} highlightedItem The newly highlighted item.
100
100
  */
101
101
  onHighlightChange: PropTypes.func,
102
+ /**
103
+ * An array of plugins defining how to preprocess data.
104
+ * If not provided, the container supports line, bar, scatter and pie charts.
105
+ */
106
+ plugins: PropTypes.arrayOf(PropTypes.object),
102
107
  /**
103
108
  * The array of series to display.
104
109
  * Each type of series has its own specificity.
@@ -152,7 +157,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
152
157
  labelStyle: PropTypes.object,
153
158
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
154
159
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
155
- position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
160
+ position: PropTypes.oneOf(['bottom', 'top']),
156
161
  reverse: PropTypes.bool,
157
162
  scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
158
163
  slotProps: PropTypes.object,
@@ -205,7 +210,7 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
205
210
  labelStyle: PropTypes.object,
206
211
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
207
212
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
208
- position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
213
+ position: PropTypes.oneOf(['left', 'right']),
209
214
  reverse: PropTypes.bool,
210
215
  scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
211
216
  slotProps: PropTypes.object,
@@ -302,7 +302,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
302
302
  labelStyle: PropTypes.object,
303
303
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
304
304
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
305
- position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
305
+ position: PropTypes.oneOf(['bottom', 'top']),
306
306
  reverse: PropTypes.bool,
307
307
  scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
308
308
  slotProps: PropTypes.object,
@@ -355,7 +355,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
355
355
  labelStyle: PropTypes.object,
356
356
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
357
357
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
358
- position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
358
+ position: PropTypes.oneOf(['left', 'right']),
359
359
  reverse: PropTypes.bool,
360
360
  scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
361
361
  slotProps: PropTypes.object,
@@ -2,10 +2,10 @@ import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import { Scatter } from './Scatter';
5
- import { SeriesContext } from '../context/SeriesContextProvider';
6
5
  import { CartesianContext } from '../context/CartesianContextProvider';
7
6
  import getColor from './getColor';
8
7
  import { ZAxisContext } from '../context/ZAxisContextProvider';
8
+ import { useScatterSeries } from '../hooks/useSeries';
9
9
  import { jsx as _jsx } from "react/jsx-runtime";
10
10
  /**
11
11
  * Demos:
@@ -23,7 +23,7 @@ function ScatterPlot(props) {
23
23
  slotProps,
24
24
  onItemClick
25
25
  } = props;
26
- const seriesData = React.useContext(SeriesContext).scatter;
26
+ const seriesData = useScatterSeries();
27
27
  const axisData = React.useContext(CartesianContext);
28
28
  const {
29
29
  zAxis,
@@ -1,4 +1,4 @@
1
- import defaultizeValueFormatter from '../internals/defaultizeValueFormatter';
1
+ import { defaultizeValueFormatter } from '../internals/defaultizeValueFormatter';
2
2
  const formatter = ({
3
3
  series,
4
4
  seriesOrder
@@ -1,7 +1,7 @@
1
1
  export default function getColor(series, xAxis, yAxis, zAxis) {
2
2
  const zColorScale = zAxis?.colorScale;
3
- const yColorScale = yAxis.colorScale;
4
- const xColorScale = xAxis.colorScale;
3
+ const yColorScale = yAxis?.colorScale;
4
+ const xColorScale = xAxis?.colorScale;
5
5
  if (zColorScale) {
6
6
  return dataIndex => {
7
7
  if (zAxis?.data?.[dataIndex] !== undefined) {
@@ -0,0 +1,10 @@
1
+ import { getExtremumX, getExtremumY } from './extremums';
2
+ import formatter from './formatter';
3
+ import getColor from './getColor';
4
+ export const plugin = {
5
+ seriesType: 'scatter',
6
+ seriesFormatter: formatter,
7
+ colorProcessor: getColor,
8
+ xExtremumGetter: getExtremumX,
9
+ yExtremumGetter: getExtremumY
10
+ };
@@ -265,7 +265,7 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
265
265
  labelStyle: PropTypes.object,
266
266
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
267
267
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
268
- position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
268
+ position: PropTypes.oneOf(['bottom', 'top']),
269
269
  reverse: PropTypes.bool,
270
270
  scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
271
271
  slotProps: PropTypes.object,
@@ -6,11 +6,11 @@ import { getExtremumX as getScatterExtremumX, getExtremumY as getScatterExtremum
6
6
  import { getExtremumX as getLineExtremumX, getExtremumY as getLineExtremumY } from '../LineChart/extremums';
7
7
  import { isBandScaleConfig, isPointScaleConfig } from '../models/axis';
8
8
  import { getScale } from '../internals/getScale';
9
- import { SeriesContext } from './SeriesContextProvider';
10
9
  import { DEFAULT_X_AXIS_KEY, DEFAULT_Y_AXIS_KEY } from '../constants';
11
10
  import { getTickNumber } from '../hooks/useTicks';
12
11
  import { useDrawingArea } from '../hooks/useDrawingArea';
13
12
  import { getColorScale, getOrdinalColorScale } from '../internals/colorScale';
13
+ import { useSeries } from '../hooks/useSeries';
14
14
  import { jsx as _jsx } from "react/jsx-runtime";
15
15
  const DEFAULT_CATEGORY_GAP_RATIO = 0.2;
16
16
  const DEFAULT_BAR_GAP_RATIO = 0.1;
@@ -42,7 +42,7 @@ function CartesianContextProvider(props) {
42
42
  dataset,
43
43
  children
44
44
  } = props;
45
- const formattedSeries = React.useContext(SeriesContext);
45
+ const formattedSeries = useSeries();
46
46
  const drawingArea = useDrawingArea();
47
47
  const xAxis = React.useMemo(() => inXAxis?.map(axisConfig => {
48
48
  const dataKey = axisConfig.dataKey;
@@ -20,7 +20,10 @@ if (process.env.NODE_ENV !== 'production') {
20
20
  DrawingContext.displayName = 'DrawingContext';
21
21
  }
22
22
  export const SvgContext = /*#__PURE__*/React.createContext({
23
- current: null
23
+ isInitialized: false,
24
+ data: {
25
+ current: null
26
+ }
24
27
  });
25
28
  if (process.env.NODE_ENV !== 'production') {
26
29
  SvgContext.displayName = 'SvgContext';
@@ -38,8 +41,12 @@ export function DrawingProvider(props) {
38
41
  const value = React.useMemo(() => _extends({
39
42
  chartId: chartId ?? ''
40
43
  }, drawingArea), [chartId, drawingArea]);
44
+ const refValue = React.useMemo(() => ({
45
+ isInitialized: true,
46
+ data: svgRef
47
+ }), [svgRef]);
41
48
  return /*#__PURE__*/_jsx(SvgContext.Provider, {
42
- value: svgRef,
49
+ value: refValue,
43
50
  children: /*#__PURE__*/_jsx(DrawingContext.Provider, {
44
51
  value: value,
45
52
  children: children
@@ -18,11 +18,14 @@ import * as React from 'react';
18
18
  */
19
19
 
20
20
  export const HighlightedContext = /*#__PURE__*/React.createContext({
21
- highlightedItem: null,
22
- setHighlighted: () => {},
23
- clearHighlighted: () => {},
24
- isHighlighted: () => false,
25
- isFaded: () => false
21
+ isInitialized: false,
22
+ data: {
23
+ highlightedItem: null,
24
+ setHighlighted: () => {},
25
+ clearHighlighted: () => {},
26
+ isHighlighted: () => false,
27
+ isFaded: () => false
28
+ }
26
29
  });
27
30
  if (process.env.NODE_ENV !== 'production') {
28
31
  HighlightedContext.displayName = 'HighlightedContext';
@@ -47,18 +47,21 @@ function HighlightedProvider({
47
47
  const highlightScope = highlightedItem && highlightedItem.seriesId ? seriesById.get(highlightedItem.seriesId) ?? undefined : undefined;
48
48
  const providerValue = React.useMemo(() => {
49
49
  return {
50
- highlightScope,
51
- highlightedItem,
52
- setHighlighted: itemData => {
53
- setHighlightedItem(itemData);
54
- onHighlightChange?.(itemData);
55
- },
56
- clearHighlighted: () => {
57
- setHighlightedItem(null);
58
- onHighlightChange?.(null);
59
- },
60
- isHighlighted: createIsHighlighted(highlightScope, highlightedItem),
61
- isFaded: createIsFaded(highlightScope, highlightedItem)
50
+ isInitialized: true,
51
+ data: {
52
+ highlightScope,
53
+ highlightedItem,
54
+ setHighlighted: itemData => {
55
+ setHighlightedItem(itemData);
56
+ onHighlightChange?.(itemData);
57
+ },
58
+ clearHighlighted: () => {
59
+ setHighlightedItem(null);
60
+ onHighlightChange?.(null);
61
+ },
62
+ isHighlighted: createIsHighlighted(highlightScope, highlightedItem),
63
+ isFaded: createIsFaded(highlightScope, highlightedItem)
64
+ }
62
65
  };
63
66
  }, [highlightedItem, highlightScope, setHighlightedItem, onHighlightChange]);
64
67
  return /*#__PURE__*/_jsx(HighlightedContext.Provider, {
@@ -9,9 +9,12 @@ import { HighlightedContext } from './HighlightedContext';
9
9
  * @returns {HighlightedState} the state of the chart
10
10
  */
11
11
  export function useHighlighted() {
12
- const highlighted = React.useContext(HighlightedContext);
13
- if (highlighted === undefined) {
12
+ const {
13
+ isInitialized,
14
+ data
15
+ } = React.useContext(HighlightedContext);
16
+ if (!isInitialized) {
14
17
  throw new Error(['MUI X: Could not find the highlighted ref context.', 'It looks like you rendered your component outside of a ChartsContainer parent component.'].join('\n'));
15
18
  }
16
- return highlighted;
19
+ return data;
17
20
  }
@@ -1,5 +1,4 @@
1
- import * as React from 'react';
2
- import { HighlightedContext } from './HighlightedContext';
1
+ import { useHighlighted } from './useHighlighted';
3
2
  /**
4
3
  * A hook to check the highlighted state of the item.
5
4
  * This function already calculates that an item is not faded if it is highlighted.
@@ -10,10 +9,7 @@ import { HighlightedContext } from './HighlightedContext';
10
9
  * @returns {ItemHighlightedState} the state of the item
11
10
  */
12
11
  export function useItemHighlighted(item) {
13
- const highlighted = React.useContext(HighlightedContext);
14
- if (highlighted === undefined) {
15
- throw new Error(['MUI X: Could not find the highlighted ref context.', 'It looks like you rendered your component outside of a ChartsContainer parent component.'].join('\n'));
16
- }
12
+ const highlighted = useHighlighted();
17
13
  if (!item) {
18
14
  return {
19
15
  isHighlighted: false,
@@ -1,24 +1,16 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
3
  import { useTheme } from '@mui/material/styles';
4
- import barSeriesFormatter from '../BarChart/formatter';
5
- import scatterSeriesFormatter from '../ScatterChart/formatter';
6
- import lineSeriesFormatter from '../LineChart/formatter';
7
- import pieSeriesFormatter from '../PieChart/formatter';
8
4
  import { defaultizeColor } from '../internals/defaultizeColor';
9
5
  import { blueberryTwilightPalette } from '../colorPalettes';
10
6
  import { jsx as _jsx } from "react/jsx-runtime";
11
- export const SeriesContext = /*#__PURE__*/React.createContext({});
7
+ export const SeriesContext = /*#__PURE__*/React.createContext({
8
+ isInitialized: false,
9
+ data: {}
10
+ });
12
11
  if (process.env.NODE_ENV !== 'production') {
13
12
  SeriesContext.displayName = 'SeriesContext';
14
13
  }
15
- const seriesTypeFormatter = {
16
- bar: barSeriesFormatter,
17
- scatter: scatterSeriesFormatter,
18
- line: lineSeriesFormatter,
19
- pie: pieSeriesFormatter
20
- };
21
-
22
14
  /**
23
15
  * This methods is the interface between what the developer is providing and what components receives
24
16
  * To simplify the components behaviors, it groups series by type, such that LinePlots props are not updated if some line data are modified
@@ -27,7 +19,7 @@ const seriesTypeFormatter = {
27
19
  * @param colors The color palette used to defaultize series colors
28
20
  * @returns An object structuring all the series by type.
29
21
  */
30
- const formatSeries = (series, colors, dataset) => {
22
+ const preprocessSeries = (series, colors, seriesFormatters, dataset) => {
31
23
  // Group series by type
32
24
  const seriesGroups = {};
33
25
  series.forEach((seriesData, seriesIndex) => {
@@ -51,9 +43,10 @@ const formatSeries = (series, colors, dataset) => {
51
43
  });
52
44
  const formattedSeries = {};
53
45
  // Apply formatter on a type group
54
- Object.keys(seriesTypeFormatter).forEach(type => {
55
- if (seriesGroups[type] !== undefined) {
56
- formattedSeries[type] = seriesTypeFormatter[type]?.(seriesGroups[type], dataset) ?? seriesGroups[type];
46
+ Object.keys(seriesFormatters).forEach(type => {
47
+ const group = seriesGroups[type];
48
+ if (group !== undefined) {
49
+ formattedSeries[type] = seriesFormatters[type]?.(group, dataset) ?? seriesGroups[type];
57
50
  }
58
51
  });
59
52
  return formattedSeries;
@@ -63,10 +56,14 @@ function SeriesContextProvider(props) {
63
56
  series,
64
57
  dataset,
65
58
  colors = blueberryTwilightPalette,
59
+ seriesFormatters,
66
60
  children
67
61
  } = props;
68
62
  const theme = useTheme();
69
- const formattedSeries = React.useMemo(() => formatSeries(series, typeof colors === 'function' ? colors(theme.palette.mode) : colors, dataset), [series, colors, theme.palette.mode, dataset]);
63
+ const formattedSeries = React.useMemo(() => ({
64
+ isInitialized: true,
65
+ data: preprocessSeries(series, typeof colors === 'function' ? colors(theme.palette.mode) : colors, seriesFormatters, dataset)
66
+ }), [series, colors, theme.palette.mode, seriesFormatters, dataset]);
70
67
  return /*#__PURE__*/_jsx(SeriesContext.Provider, {
71
68
  value: formattedSeries,
72
69
  children: children
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { InteractionContext } from '../context/InteractionProvider';
3
- import { HighlightedContext } from '../context';
3
+ import { useHighlighted } from '../context';
4
4
  export const useInteractionItemProps = skip => {
5
5
  const {
6
6
  dispatch: dispatchInteraction
@@ -8,7 +8,7 @@ export const useInteractionItemProps = skip => {
8
8
  const {
9
9
  setHighlighted,
10
10
  clearHighlighted
11
- } = React.useContext(HighlightedContext);
11
+ } = useHighlighted();
12
12
  if (skip) {
13
13
  return () => ({});
14
14
  }
@@ -8,11 +8,14 @@ import { SeriesContext } from '../context/SeriesContextProvider';
8
8
  * @returns FormattedSeries series
9
9
  */
10
10
  export function useSeries() {
11
- const series = React.useContext(SeriesContext);
12
- if (series === undefined) {
11
+ const {
12
+ isInitialized,
13
+ data
14
+ } = React.useContext(SeriesContext);
15
+ if (!isInitialized) {
13
16
  throw new Error(['MUI X: Could not find the series ref context.', 'It looks like you rendered your component outside of a ChartsContainer parent component.'].join('\n'));
14
17
  }
15
- return series;
18
+ return data;
16
19
  }
17
20
 
18
21
  /**
@@ -1,9 +1,12 @@
1
1
  import * as React from 'react';
2
2
  import { SvgContext } from '../context/DrawingProvider';
3
3
  export function useSvgRef() {
4
- const svgRef = React.useContext(SvgContext);
5
- if (svgRef === undefined) {
4
+ const {
5
+ isInitialized,
6
+ data
7
+ } = React.useContext(SvgContext);
8
+ if (!isInitialized) {
6
9
  throw new Error(['MUI X: Could not find the svg ref context.', 'It looks like you rendered your component outside of a ChartsContainer parent component.'].join('\n'));
7
10
  }
8
- return svgRef;
11
+ return data;
9
12
  }
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts v7.6.0
2
+ * @mui/x-charts v7.6.2
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -0,0 +1,20 @@
1
+ let instance;
2
+ class CartesianSeriesTypes {
3
+ constructor() {
4
+ this.types = new Set();
5
+ if (instance) {
6
+ throw new Error('You can only create one instance!');
7
+ }
8
+ instance = this.types;
9
+ }
10
+ addType(value) {
11
+ this.types.add(value);
12
+ }
13
+ getTypes() {
14
+ return this.types;
15
+ }
16
+ }
17
+ export const cartesianSeriesTypes = new CartesianSeriesTypes();
18
+ cartesianSeriesTypes.addType('bar');
19
+ cartesianSeriesTypes.addType('line');
20
+ cartesianSeriesTypes.addType('scatter');
@@ -1,5 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- function defaultizeValueFormatter(series, defaultValueFormatter) {
2
+ export function defaultizeValueFormatter(series, defaultValueFormatter) {
3
3
  const defaultizedSeries = {};
4
4
  Object.keys(series).forEach(seriesId => {
5
5
  defaultizedSeries[seriesId] = _extends({}, series[seriesId], {
@@ -7,5 +7,4 @@ function defaultizeValueFormatter(series, defaultValueFormatter) {
7
7
  });
8
8
  });
9
9
  return defaultizedSeries;
10
- }
11
- export default defaultizeValueFormatter;
10
+ }
@@ -0,0 +1 @@
1
+ export * from './configInit';
@@ -0,0 +1,7 @@
1
+ import { cartesianSeriesTypes } from './configInit';
2
+ export function isCartesianSeriesType(seriesType) {
3
+ return cartesianSeriesTypes.getTypes().has(seriesType);
4
+ }
5
+ export function isCartesianSeries(series) {
6
+ return isCartesianSeriesType(series.type);
7
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './seriesType';
2
2
  export * from './layout';
3
3
  export * from './stacking';
4
+ export * from './plugin';
4
5
  export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1,7 +1,13 @@
1
+ // Series definition
2
+
3
+ // item identifier
4
+
1
5
  export * from './line';
2
6
  export * from './bar';
3
7
  export * from './scatter';
4
8
  export * from './pie';
9
+ // Helpers
10
+
5
11
  export function isDefaultizedBarSeries(series) {
6
12
  return series.type === 'bar';
7
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-charts",
3
- "version": "7.6.0",
3
+ "version": "7.6.2",
4
4
  "description": "The community edition of the Charts components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./index.js",