@mui/x-charts 7.4.0 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/BarChart/BarChart.js +11 -10
  2. package/BarChart/BarElement.d.ts +10 -5
  3. package/BarChart/BarElement.js +3 -2
  4. package/BarChart/legend.js +13 -6
  5. package/CHANGELOG.md +93 -0
  6. package/ChartContainer/ChartContainer.js +10 -10
  7. package/ChartsOverlay/ChartsLoadingOverlay.js +3 -3
  8. package/ChartsOverlay/ChartsNoDataOverlay.js +2 -2
  9. package/ChartsOverlay/ChartsOverlay.d.ts +9 -0
  10. package/ChartsTooltip/DefaultChartsAxisTooltipContent.js +4 -2
  11. package/ChartsTooltip/DefaultChartsItemTooltipContent.js +7 -3
  12. package/ChartsTooltip/utils.js +13 -8
  13. package/ChartsXAxis/ChartsXAxis.js +1 -2
  14. package/ChartsYAxis/ChartsYAxis.js +2 -2
  15. package/LineChart/AreaElement.d.ts +1 -1
  16. package/LineChart/AreaElement.js +3 -3
  17. package/LineChart/AreaPlot.js +3 -2
  18. package/LineChart/LineChart.js +11 -10
  19. package/LineChart/LineElement.d.ts +1 -1
  20. package/LineChart/LineElement.js +3 -3
  21. package/LineChart/LineHighlightElement.d.ts +1 -1
  22. package/LineChart/MarkElement.d.ts +1 -1
  23. package/LineChart/legend.js +13 -6
  24. package/PieChart/PieArc.d.ts +1 -1
  25. package/PieChart/PieArcLabel.d.ts +1 -1
  26. package/PieChart/PieArcLabel.js +3 -1
  27. package/PieChart/PieArcLabelPlot.js +14 -5
  28. package/PieChart/PieArcPlot.js +1 -1
  29. package/PieChart/PieChart.js +11 -10
  30. package/PieChart/formatter.js +4 -1
  31. package/PieChart/legend.js +15 -5
  32. package/ResponsiveChartContainer/ResponsiveChartContainer.js +10 -10
  33. package/ScatterChart/ScatterChart.js +16 -15
  34. package/ScatterChart/legend.js +13 -6
  35. package/SparkLineChart/SparkLineChart.js +5 -5
  36. package/context/ZAxisContextProvider.js +5 -5
  37. package/esm/BarChart/BarChart.js +11 -10
  38. package/esm/BarChart/BarElement.js +3 -2
  39. package/esm/BarChart/legend.js +13 -6
  40. package/esm/ChartContainer/ChartContainer.js +10 -10
  41. package/esm/ChartsOverlay/ChartsLoadingOverlay.js +3 -3
  42. package/esm/ChartsOverlay/ChartsNoDataOverlay.js +2 -2
  43. package/esm/ChartsTooltip/DefaultChartsAxisTooltipContent.js +4 -2
  44. package/esm/ChartsTooltip/DefaultChartsItemTooltipContent.js +7 -3
  45. package/esm/ChartsTooltip/utils.js +13 -8
  46. package/esm/ChartsXAxis/ChartsXAxis.js +1 -2
  47. package/esm/ChartsYAxis/ChartsYAxis.js +2 -2
  48. package/esm/LineChart/AreaElement.js +3 -3
  49. package/esm/LineChart/AreaPlot.js +3 -2
  50. package/esm/LineChart/LineChart.js +11 -10
  51. package/esm/LineChart/LineElement.js +3 -3
  52. package/esm/LineChart/legend.js +13 -6
  53. package/esm/PieChart/PieArcLabel.js +3 -1
  54. package/esm/PieChart/PieArcLabelPlot.js +14 -5
  55. package/esm/PieChart/PieArcPlot.js +1 -1
  56. package/esm/PieChart/PieChart.js +11 -10
  57. package/esm/PieChart/formatter.js +4 -1
  58. package/esm/PieChart/legend.js +15 -5
  59. package/esm/ResponsiveChartContainer/ResponsiveChartContainer.js +10 -10
  60. package/esm/ScatterChart/ScatterChart.js +16 -15
  61. package/esm/ScatterChart/legend.js +13 -6
  62. package/esm/SparkLineChart/SparkLineChart.js +5 -5
  63. package/esm/context/ZAxisContextProvider.js +5 -5
  64. package/esm/hooks/useAxisEvents.js +12 -7
  65. package/esm/internals/getLabel.js +3 -0
  66. package/hooks/useAxisEvents.js +12 -7
  67. package/index.js +1 -1
  68. package/internals/defaultizeColor.d.ts +7 -5
  69. package/internals/getLabel.d.ts +1 -0
  70. package/internals/getLabel.js +9 -0
  71. package/internals/utils.d.ts +1 -1
  72. package/models/seriesType/bar.d.ts +4 -1
  73. package/models/seriesType/line.d.ts +4 -1
  74. package/models/seriesType/pie.d.ts +9 -4
  75. package/models/seriesType/scatter.d.ts +4 -1
  76. package/modern/BarChart/BarChart.js +11 -10
  77. package/modern/BarChart/BarElement.js +3 -2
  78. package/modern/BarChart/legend.js +13 -6
  79. package/modern/ChartContainer/ChartContainer.js +10 -10
  80. package/modern/ChartsOverlay/ChartsLoadingOverlay.js +3 -3
  81. package/modern/ChartsOverlay/ChartsNoDataOverlay.js +2 -2
  82. package/modern/ChartsTooltip/DefaultChartsAxisTooltipContent.js +4 -2
  83. package/modern/ChartsTooltip/DefaultChartsItemTooltipContent.js +7 -3
  84. package/modern/ChartsTooltip/utils.js +13 -8
  85. package/modern/ChartsXAxis/ChartsXAxis.js +1 -2
  86. package/modern/ChartsYAxis/ChartsYAxis.js +2 -2
  87. package/modern/LineChart/AreaElement.js +3 -3
  88. package/modern/LineChart/AreaPlot.js +3 -2
  89. package/modern/LineChart/LineChart.js +11 -10
  90. package/modern/LineChart/LineElement.js +3 -3
  91. package/modern/LineChart/legend.js +13 -6
  92. package/modern/PieChart/PieArcLabel.js +3 -1
  93. package/modern/PieChart/PieArcLabelPlot.js +14 -5
  94. package/modern/PieChart/PieArcPlot.js +1 -1
  95. package/modern/PieChart/PieChart.js +11 -10
  96. package/modern/PieChart/formatter.js +4 -1
  97. package/modern/PieChart/legend.js +15 -5
  98. package/modern/ResponsiveChartContainer/ResponsiveChartContainer.js +10 -10
  99. package/modern/ScatterChart/ScatterChart.js +16 -15
  100. package/modern/ScatterChart/legend.js +13 -6
  101. package/modern/SparkLineChart/SparkLineChart.js +5 -5
  102. package/modern/context/ZAxisContextProvider.js +5 -5
  103. package/modern/hooks/useAxisEvents.js +12 -7
  104. package/modern/index.js +1 -1
  105. package/modern/internals/getLabel.js +3 -0
  106. package/package.json +2 -2
@@ -205,6 +205,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
205
205
  }),
206
206
  /**
207
207
  * If `true`, a loading overlay is displayed.
208
+ * @default false
208
209
  */
209
210
  loading: PropTypes.bool,
210
211
  /**
@@ -304,6 +305,11 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
304
305
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
305
306
  classes: PropTypes.object,
306
307
  colorMap: PropTypes.oneOfType([PropTypes.shape({
308
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
309
+ type: PropTypes.oneOf(['ordinal']).isRequired,
310
+ unknownColor: PropTypes.string,
311
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
312
+ }), PropTypes.shape({
307
313
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
308
314
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
309
315
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -312,11 +318,6 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
312
318
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
313
319
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
314
320
  type: PropTypes.oneOf(['piecewise']).isRequired
315
- }), PropTypes.shape({
316
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
317
- type: PropTypes.oneOf(['ordinal']).isRequired,
318
- unknownColor: PropTypes.string,
319
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
320
321
  })]),
321
322
  data: PropTypes.array,
322
323
  dataKey: PropTypes.string,
@@ -357,6 +358,11 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
357
358
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
358
359
  classes: PropTypes.object,
359
360
  colorMap: PropTypes.oneOfType([PropTypes.shape({
361
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
362
+ type: PropTypes.oneOf(['ordinal']).isRequired,
363
+ unknownColor: PropTypes.string,
364
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
365
+ }), PropTypes.shape({
360
366
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
361
367
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
362
368
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -365,11 +371,6 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
365
371
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
366
372
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
367
373
  type: PropTypes.oneOf(['piecewise']).isRequired
368
- }), PropTypes.shape({
369
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
370
- type: PropTypes.oneOf(['ordinal']).isRequired,
371
- unknownColor: PropTypes.string,
372
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
373
374
  })]),
374
375
  data: PropTypes.array,
375
376
  dataKey: PropTypes.string,
@@ -74,17 +74,17 @@ function LineElement(props) {
74
74
  const lineProps = useSlotProps({
75
75
  elementType: Line,
76
76
  externalSlotProps: slotProps?.line,
77
- additionalProps: _extends({}, other, getInteractionItemProps({
77
+ additionalProps: _extends({}, getInteractionItemProps({
78
78
  type: 'line',
79
79
  seriesId: id
80
80
  }), {
81
- className: classes.root,
82
81
  onClick,
83
82
  cursor: onClick ? 'pointer' : 'unset'
84
83
  }),
84
+ className: classes.root,
85
85
  ownerState
86
86
  });
87
- return /*#__PURE__*/_jsx(Line, _extends({}, lineProps));
87
+ return /*#__PURE__*/_jsx(Line, _extends({}, other, lineProps));
88
88
  }
89
89
  process.env.NODE_ENV !== "production" ? LineElement.propTypes = {
90
90
  // ----------------------------- Warning --------------------------------
@@ -1,13 +1,20 @@
1
+ import { getLabel } from '../internals/getLabel';
1
2
  const legendGetter = params => {
2
3
  const {
3
4
  seriesOrder,
4
5
  series
5
6
  } = params;
6
- const data = seriesOrder.map(seriesId => ({
7
- color: series[seriesId].color,
8
- label: series[seriesId].label,
9
- id: seriesId
10
- }));
11
- return data.filter(item => item.label !== undefined);
7
+ return seriesOrder.reduce((acc, seriesId) => {
8
+ const formattedLabel = getLabel(series[seriesId].label, 'legend');
9
+ if (formattedLabel === undefined) {
10
+ return acc;
11
+ }
12
+ acc.push({
13
+ color: series[seriesId].color,
14
+ label: formattedLabel,
15
+ id: seriesId
16
+ });
17
+ return acc;
18
+ }, []);
12
19
  };
13
20
  export default legendGetter;
@@ -35,7 +35,8 @@ const PieArcLabelRoot = styled(animated.text, {
35
35
  }) => ({
36
36
  fill: (theme.vars || theme).palette.text.primary,
37
37
  textAnchor: 'middle',
38
- dominantBaseline: 'middle'
38
+ dominantBaseline: 'middle',
39
+ pointerEvents: 'none'
39
40
  }));
40
41
  /**
41
42
  * Helper to compute label position.
@@ -97,6 +98,7 @@ process.env.NODE_ENV !== "production" ? PieArcLabel.propTypes = {
97
98
  // | To update them edit the TypeScript types and run "yarn proptypes" |
98
99
  // ----------------------------------------------------------------------
99
100
  classes: PropTypes.object,
101
+ color: PropTypes.string.isRequired,
100
102
  formattedArcLabel: PropTypes.string,
101
103
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
102
104
  isFaded: PropTypes.bool.isRequired,
@@ -1,5 +1,5 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
3
  const _excluded = ["arcLabel", "arcLabelMinAngle", "arcLabelRadius", "cornerRadius", "data", "faded", "highlighted", "highlightScope", "id", "innerRadius", "outerRadius", "paddingAngle", "skipAnimation", "slotProps", "slots"],
4
4
  _excluded2 = ["startAngle", "endAngle", "paddingAngle", "innerRadius", "outerRadius", "arcLabelRadius", "cornerRadius"];
5
5
  import * as React from 'react';
@@ -8,6 +8,7 @@ import { useTransition } from '@react-spring/web';
8
8
  import { defaultLabelTransitionConfig } from './dataTransform/transition';
9
9
  import { useTransformData } from './dataTransform/useTransformData';
10
10
  import { PieArcLabel } from './PieArcLabel';
11
+ import { getLabel } from '../internals/getLabel';
11
12
  import { jsx as _jsx } from "react/jsx-runtime";
12
13
  const RATIO = 180 / Math.PI;
13
14
  function getItemLabel(arcLabel, arcLabelMinAngle, item) {
@@ -18,10 +19,18 @@ function getItemLabel(arcLabel, arcLabelMinAngle, item) {
18
19
  if (angle < arcLabelMinAngle) {
19
20
  return null;
20
21
  }
21
- if (typeof arcLabel === 'string') {
22
- return item[arcLabel]?.toString();
22
+ switch (arcLabel) {
23
+ case 'label':
24
+ return getLabel(item.label, 'arc');
25
+ case 'value':
26
+ return item.value?.toString();
27
+ case 'formattedValue':
28
+ return item.formattedValue;
29
+ default:
30
+ return arcLabel(_extends({}, item, {
31
+ label: getLabel(item.label, 'arc')
32
+ }));
23
33
  }
24
- return arcLabel(item);
25
34
  }
26
35
  function PieArcLabelPlot(props) {
27
36
  const {
@@ -123,7 +132,7 @@ process.env.NODE_ENV !== "production" ? PieArcLabelPlot.propTypes = {
123
132
  formattedValue: PropTypes.string.isRequired,
124
133
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
125
134
  index: PropTypes.number.isRequired,
126
- label: PropTypes.string,
135
+ label: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
127
136
  padAngle: PropTypes.number.isRequired,
128
137
  startAngle: PropTypes.number.isRequired,
129
138
  value: PropTypes.number.isRequired
@@ -103,7 +103,7 @@ process.env.NODE_ENV !== "production" ? PieArcPlot.propTypes = {
103
103
  formattedValue: PropTypes.string.isRequired,
104
104
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
105
105
  index: PropTypes.number.isRequired,
106
- label: PropTypes.string,
106
+ label: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
107
107
  padAngle: PropTypes.number.isRequired,
108
108
  startAngle: PropTypes.number.isRequired,
109
109
  value: PropTypes.number.isRequired
@@ -179,6 +179,7 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
179
179
  }),
180
180
  /**
181
181
  * If `true`, a loading overlay is displayed.
182
+ * @default false
182
183
  */
183
184
  loading: PropTypes.bool,
184
185
  /**
@@ -263,6 +264,11 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
263
264
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
264
265
  classes: PropTypes.object,
265
266
  colorMap: PropTypes.oneOfType([PropTypes.shape({
267
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
268
+ type: PropTypes.oneOf(['ordinal']).isRequired,
269
+ unknownColor: PropTypes.string,
270
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
271
+ }), PropTypes.shape({
266
272
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
267
273
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
268
274
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -271,11 +277,6 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
271
277
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
272
278
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
273
279
  type: PropTypes.oneOf(['piecewise']).isRequired
274
- }), PropTypes.shape({
275
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
276
- type: PropTypes.oneOf(['ordinal']).isRequired,
277
- unknownColor: PropTypes.string,
278
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
279
280
  })]),
280
281
  data: PropTypes.array,
281
282
  dataKey: PropTypes.string,
@@ -316,6 +317,11 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
316
317
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
317
318
  classes: PropTypes.object,
318
319
  colorMap: PropTypes.oneOfType([PropTypes.shape({
320
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
321
+ type: PropTypes.oneOf(['ordinal']).isRequired,
322
+ unknownColor: PropTypes.string,
323
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
324
+ }), PropTypes.shape({
319
325
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
320
326
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
321
327
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -324,11 +330,6 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
324
330
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
325
331
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
326
332
  type: PropTypes.oneOf(['piecewise']).isRequired
327
- }), PropTypes.shape({
328
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
329
- type: PropTypes.oneOf(['ordinal']).isRequired,
330
- unknownColor: PropTypes.string,
331
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
332
333
  })]),
333
334
  data: PropTypes.array,
334
335
  dataKey: PropTypes.string,
@@ -1,5 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import { pie as d3Pie } from 'd3-shape';
3
+ import { getLabel } from '../internals/getLabel';
3
4
  const getSortingComparator = (comparator = 'none') => {
4
5
  if (typeof comparator === 'function') {
5
6
  return comparator;
@@ -29,7 +30,9 @@ const formatter = params => {
29
30
  data: series[seriesId].data.map((item, index) => _extends({}, item, {
30
31
  id: item.id ?? `auto-generated-pie-id-${seriesId}-${index}`
31
32
  }, arcs[index])).map((item, index) => _extends({}, item, {
32
- formattedValue: series[seriesId].valueFormatter?.(item, {
33
+ formattedValue: series[seriesId].valueFormatter?.(_extends({}, item, {
34
+ label: getLabel(item.label, 'arc')
35
+ }), {
33
36
  dataIndex: index
34
37
  }) ?? item.value.toLocaleString()
35
38
  }))
@@ -1,12 +1,22 @@
1
+ import { getLabel } from '../internals/getLabel';
1
2
  const legendGetter = params => {
2
3
  const {
3
4
  seriesOrder,
4
5
  series
5
6
  } = params;
6
- return seriesOrder.flatMap(seriesId => series[seriesId].data.map(item => ({
7
- color: item.color,
8
- label: item.label,
9
- id: item.id
10
- })).filter(item => item.label !== undefined));
7
+ return seriesOrder.reduce((acc, seriesId) => {
8
+ series[seriesId].data.forEach(item => {
9
+ const formattedLabel = getLabel(item.label, 'legend');
10
+ if (formattedLabel === undefined) {
11
+ return;
12
+ }
13
+ acc.push({
14
+ color: item.color,
15
+ label: formattedLabel,
16
+ id: item.id
17
+ });
18
+ });
19
+ return acc;
20
+ }, []);
11
21
  };
12
22
  export default legendGetter;
@@ -113,6 +113,11 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
113
113
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
114
114
  classes: PropTypes.object,
115
115
  colorMap: PropTypes.oneOfType([PropTypes.shape({
116
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
117
+ type: PropTypes.oneOf(['ordinal']).isRequired,
118
+ unknownColor: PropTypes.string,
119
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
120
+ }), PropTypes.shape({
116
121
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
117
122
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
118
123
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -121,11 +126,6 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
121
126
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
122
127
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
123
128
  type: PropTypes.oneOf(['piecewise']).isRequired
124
- }), PropTypes.shape({
125
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
126
- type: PropTypes.oneOf(['ordinal']).isRequired,
127
- unknownColor: PropTypes.string,
128
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
129
129
  })]),
130
130
  data: PropTypes.array,
131
131
  dataKey: PropTypes.string,
@@ -166,6 +166,11 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
166
166
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
167
167
  classes: PropTypes.object,
168
168
  colorMap: PropTypes.oneOfType([PropTypes.shape({
169
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
170
+ type: PropTypes.oneOf(['ordinal']).isRequired,
171
+ unknownColor: PropTypes.string,
172
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
173
+ }), PropTypes.shape({
169
174
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
170
175
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
171
176
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -174,11 +179,6 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
174
179
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
175
180
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
176
181
  type: PropTypes.oneOf(['piecewise']).isRequired
177
- }), PropTypes.shape({
178
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
179
- type: PropTypes.oneOf(['ordinal']).isRequired,
180
- unknownColor: PropTypes.string,
181
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
182
182
  })]),
183
183
  data: PropTypes.array,
184
184
  dataKey: PropTypes.string,
@@ -172,6 +172,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
172
172
  }),
173
173
  /**
174
174
  * If `true`, a loading overlay is displayed.
175
+ * @default false
175
176
  */
176
177
  loading: PropTypes.bool,
177
178
  /**
@@ -258,6 +259,11 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
258
259
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
259
260
  classes: PropTypes.object,
260
261
  colorMap: PropTypes.oneOfType([PropTypes.shape({
262
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
263
+ type: PropTypes.oneOf(['ordinal']).isRequired,
264
+ unknownColor: PropTypes.string,
265
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
266
+ }), PropTypes.shape({
261
267
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
262
268
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
263
269
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -266,11 +272,6 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
266
272
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
267
273
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
268
274
  type: PropTypes.oneOf(['piecewise']).isRequired
269
- }), PropTypes.shape({
270
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
271
- type: PropTypes.oneOf(['ordinal']).isRequired,
272
- unknownColor: PropTypes.string,
273
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
274
275
  })]),
275
276
  data: PropTypes.array,
276
277
  dataKey: PropTypes.string,
@@ -311,6 +312,11 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
311
312
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
312
313
  classes: PropTypes.object,
313
314
  colorMap: PropTypes.oneOfType([PropTypes.shape({
315
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
316
+ type: PropTypes.oneOf(['ordinal']).isRequired,
317
+ unknownColor: PropTypes.string,
318
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
319
+ }), PropTypes.shape({
314
320
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
315
321
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
316
322
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -319,11 +325,6 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
319
325
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
320
326
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
321
327
  type: PropTypes.oneOf(['piecewise']).isRequired
322
- }), PropTypes.shape({
323
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
324
- type: PropTypes.oneOf(['ordinal']).isRequired,
325
- unknownColor: PropTypes.string,
326
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
327
328
  })]),
328
329
  data: PropTypes.array,
329
330
  dataKey: PropTypes.string,
@@ -360,6 +361,11 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
360
361
  */
361
362
  zAxis: PropTypes.arrayOf(PropTypes.shape({
362
363
  colorMap: PropTypes.oneOfType([PropTypes.shape({
364
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
365
+ type: PropTypes.oneOf(['ordinal']).isRequired,
366
+ unknownColor: PropTypes.string,
367
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
368
+ }), PropTypes.shape({
363
369
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
364
370
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
365
371
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -368,11 +374,6 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
368
374
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
369
375
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
370
376
  type: PropTypes.oneOf(['piecewise']).isRequired
371
- }), PropTypes.shape({
372
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
373
- type: PropTypes.oneOf(['ordinal']).isRequired,
374
- unknownColor: PropTypes.string,
375
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
376
377
  })]),
377
378
  data: PropTypes.array,
378
379
  dataKey: PropTypes.string,
@@ -1,13 +1,20 @@
1
+ import { getLabel } from '../internals/getLabel';
1
2
  const legendGetter = params => {
2
3
  const {
3
4
  seriesOrder,
4
5
  series
5
6
  } = params;
6
- const data = seriesOrder.map(seriesId => ({
7
- color: series[seriesId].color,
8
- label: series[seriesId].label,
9
- id: seriesId
10
- }));
11
- return data.filter(item => item.label !== undefined);
7
+ return seriesOrder.reduce((acc, seriesId) => {
8
+ const formattedLabel = getLabel(series[seriesId].label, 'legend');
9
+ if (formattedLabel === undefined) {
10
+ return acc;
11
+ }
12
+ acc.push({
13
+ color: series[seriesId].color,
14
+ label: formattedLabel,
15
+ id: seriesId
16
+ });
17
+ return acc;
18
+ }, []);
12
19
  };
13
20
  export default legendGetter;
@@ -226,6 +226,11 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
226
226
  axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
227
227
  classes: PropTypes.object,
228
228
  colorMap: PropTypes.oneOfType([PropTypes.shape({
229
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
230
+ type: PropTypes.oneOf(['ordinal']).isRequired,
231
+ unknownColor: PropTypes.string,
232
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
233
+ }), PropTypes.shape({
229
234
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
230
235
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
231
236
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -234,11 +239,6 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
234
239
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
235
240
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
236
241
  type: PropTypes.oneOf(['piecewise']).isRequired
237
- }), PropTypes.shape({
238
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
239
- type: PropTypes.oneOf(['ordinal']).isRequired,
240
- unknownColor: PropTypes.string,
241
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
242
242
  })]),
243
243
  data: PropTypes.array,
244
244
  dataKey: PropTypes.string,
@@ -67,6 +67,11 @@ process.env.NODE_ENV !== "production" ? ZAxisContextProvider.propTypes = {
67
67
  */
68
68
  zAxis: PropTypes.arrayOf(PropTypes.shape({
69
69
  colorMap: PropTypes.oneOfType([PropTypes.shape({
70
+ colors: PropTypes.arrayOf(PropTypes.string).isRequired,
71
+ type: PropTypes.oneOf(['ordinal']).isRequired,
72
+ unknownColor: PropTypes.string,
73
+ values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
74
+ }), PropTypes.shape({
70
75
  color: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string.isRequired), PropTypes.func]).isRequired,
71
76
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
72
77
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
@@ -75,11 +80,6 @@ process.env.NODE_ENV !== "production" ? ZAxisContextProvider.propTypes = {
75
80
  colors: PropTypes.arrayOf(PropTypes.string).isRequired,
76
81
  thresholds: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]).isRequired).isRequired,
77
82
  type: PropTypes.oneOf(['piecewise']).isRequired
78
- }), PropTypes.shape({
79
- colors: PropTypes.arrayOf(PropTypes.string).isRequired,
80
- type: PropTypes.oneOf(['ordinal']).isRequired,
81
- unknownColor: PropTypes.string,
82
- values: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number, PropTypes.string]).isRequired)
83
83
  })]),
84
84
  data: PropTypes.array,
85
85
  dataKey: PropTypes.string,
@@ -90,7 +90,7 @@ export const useAxisEvents = disableAxisListener => {
90
90
  value: axisData[dataIndex]
91
91
  };
92
92
  };
93
- const handleMouseOut = () => {
93
+ const handleOut = () => {
94
94
  mousePosition.current = {
95
95
  x: -1,
96
96
  y: -1
@@ -99,8 +99,9 @@ export const useAxisEvents = disableAxisListener => {
99
99
  type: 'exitChart'
100
100
  });
101
101
  };
102
- const handleMouseMove = event => {
103
- const svgPoint = getSVGPoint(svgRef.current, event);
102
+ const handleMove = event => {
103
+ const target = 'targetTouches' in event ? event.targetTouches[0] : event;
104
+ const svgPoint = getSVGPoint(svgRef.current, target);
104
105
  mousePosition.current = {
105
106
  x: svgPoint.x,
106
107
  y: svgPoint.y
@@ -123,11 +124,15 @@ export const useAxisEvents = disableAxisListener => {
123
124
  }
124
125
  });
125
126
  };
126
- element.addEventListener('mouseout', handleMouseOut);
127
- element.addEventListener('mousemove', handleMouseMove);
127
+ element.addEventListener('mouseout', handleOut);
128
+ element.addEventListener('mousemove', handleMove);
129
+ element.addEventListener('touchend', handleOut);
130
+ element.addEventListener('touchmove', handleMove);
128
131
  return () => {
129
- element.removeEventListener('mouseout', handleMouseOut);
130
- element.removeEventListener('mousemove', handleMouseMove);
132
+ element.removeEventListener('mouseout', handleOut);
133
+ element.removeEventListener('mousemove', handleMove);
134
+ element.removeEventListener('touchend', handleOut);
135
+ element.removeEventListener('touchmove', handleMove);
131
136
  };
132
137
  }, [svgRef, dispatch, left, width, top, height, usedYAxis, yAxis, usedXAxis, xAxis, disableAxisListener]);
133
138
  };
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts v7.4.0
2
+ * @mui/x-charts v7.5.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -0,0 +1,3 @@
1
+ export function getLabel(value, location) {
2
+ return typeof value === 'function' ? value(location) : value;
3
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-charts",
3
- "version": "7.4.0",
3
+ "version": "7.5.0",
4
4
  "description": "The community edition of the Charts components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./index.js",
@@ -29,7 +29,7 @@
29
29
  "directory": "packages/x-charts"
30
30
  },
31
31
  "dependencies": {
32
- "@babel/runtime": "^7.24.0",
32
+ "@babel/runtime": "^7.24.5",
33
33
  "@mui/base": "^5.0.0-beta.40",
34
34
  "@mui/system": "^5.15.14",
35
35
  "@mui/utils": "^5.15.14",