@mui/x-charts 6.0.0-alpha.1 → 6.0.0-alpha.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 (117) hide show
  1. package/BarChart/BarChart.js +1 -0
  2. package/BarChart/legend.d.ts +3 -0
  3. package/BarChart/legend.js +20 -0
  4. package/CHANGELOG.md +62 -0
  5. package/ChartsLegend/ChartsLegend.d.ts +5 -1
  6. package/ChartsLegend/ChartsLegend.js +5 -1
  7. package/ChartsLegend/utils.d.ts +1 -1
  8. package/ChartsLegend/utils.js +12 -1
  9. package/ChartsTooltip/ChartsAxisTooltipContent.js +1 -1
  10. package/ChartsTooltip/ChartsItemTooltipContent.js +11 -2
  11. package/LineChart/LineChart.js +1 -0
  12. package/LineChart/legend.d.ts +3 -0
  13. package/LineChart/legend.js +20 -0
  14. package/PieChart/PieArc.d.ts +36 -0
  15. package/PieChart/PieArc.js +128 -0
  16. package/PieChart/PieArcLabel.d.ts +36 -0
  17. package/PieChart/PieArcLabel.js +113 -0
  18. package/PieChart/PieChart.d.ts +20 -0
  19. package/PieChart/PieChart.js +292 -0
  20. package/PieChart/PiePlot.d.ts +2 -0
  21. package/PieChart/PiePlot.js +98 -0
  22. package/PieChart/formatter.d.ts +3 -0
  23. package/PieChart/formatter.js +49 -0
  24. package/PieChart/index.d.ts +4 -0
  25. package/PieChart/index.js +47 -0
  26. package/PieChart/legend.d.ts +3 -0
  27. package/PieChart/legend.js +19 -0
  28. package/PieChart/package.json +6 -0
  29. package/README.md +2 -2
  30. package/ResponsiveChartContainer/index.js +14 -3
  31. package/ScatterChart/Scatter.js +1 -1
  32. package/ScatterChart/ScatterChart.js +1 -0
  33. package/ScatterChart/legend.d.ts +3 -0
  34. package/ScatterChart/legend.js +20 -0
  35. package/context/SeriesContextProvider.js +11 -1
  36. package/esm/BarChart/BarChart.js +1 -0
  37. package/esm/BarChart/legend.js +13 -0
  38. package/esm/ChartsLegend/ChartsLegend.js +5 -1
  39. package/esm/ChartsLegend/utils.js +11 -1
  40. package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +1 -1
  41. package/esm/ChartsTooltip/ChartsItemTooltipContent.js +11 -3
  42. package/esm/LineChart/LineChart.js +1 -0
  43. package/esm/LineChart/legend.js +13 -0
  44. package/esm/PieChart/PieArc.js +117 -0
  45. package/esm/PieChart/PieArcLabel.js +101 -0
  46. package/esm/PieChart/PieChart.js +285 -0
  47. package/esm/PieChart/PiePlot.js +92 -0
  48. package/esm/PieChart/formatter.js +48 -0
  49. package/esm/PieChart/index.js +4 -0
  50. package/esm/PieChart/legend.js +12 -0
  51. package/esm/ResponsiveChartContainer/index.js +14 -3
  52. package/esm/ScatterChart/Scatter.js +1 -1
  53. package/esm/ScatterChart/ScatterChart.js +1 -0
  54. package/esm/ScatterChart/legend.js +13 -0
  55. package/esm/context/SeriesContextProvider.js +11 -1
  56. package/esm/index.js +1 -0
  57. package/esm/internals/defaultizeColor.js +7 -0
  58. package/esm/models/seriesType/index.js +1 -8
  59. package/index.d.ts +1 -0
  60. package/index.js +12 -1
  61. package/internals/defaultizeColor.d.ts +35 -0
  62. package/internals/defaultizeColor.js +7 -0
  63. package/legacy/BarChart/BarChart.js +1 -0
  64. package/legacy/BarChart/legend.js +15 -0
  65. package/legacy/ChartsLegend/ChartsLegend.js +5 -1
  66. package/legacy/ChartsLegend/utils.js +12 -6
  67. package/legacy/ChartsTooltip/ChartsAxisTooltipContent.js +3 -1
  68. package/legacy/ChartsTooltip/ChartsItemTooltipContent.js +10 -3
  69. package/legacy/LineChart/LineChart.js +1 -0
  70. package/legacy/LineChart/legend.js +15 -0
  71. package/legacy/PieChart/PieArc.js +118 -0
  72. package/legacy/PieChart/PieArcLabel.js +101 -0
  73. package/legacy/PieChart/PieChart.js +297 -0
  74. package/legacy/PieChart/PiePlot.js +89 -0
  75. package/legacy/PieChart/formatter.js +55 -0
  76. package/legacy/PieChart/index.js +4 -0
  77. package/legacy/PieChart/legend.js +16 -0
  78. package/legacy/ResponsiveChartContainer/index.js +12 -3
  79. package/legacy/ScatterChart/Scatter.js +1 -1
  80. package/legacy/ScatterChart/ScatterChart.js +1 -0
  81. package/legacy/ScatterChart/legend.js +15 -0
  82. package/legacy/context/SeriesContextProvider.js +11 -1
  83. package/legacy/index.js +2 -1
  84. package/legacy/internals/defaultizeColor.js +9 -0
  85. package/legacy/models/seriesType/index.js +1 -8
  86. package/models/seriesType/bar.d.ts +1 -1
  87. package/models/seriesType/common.d.ts +1 -1
  88. package/models/seriesType/config.d.ts +29 -2
  89. package/models/seriesType/index.d.ts +7 -3
  90. package/models/seriesType/index.js +11 -0
  91. package/models/seriesType/line.d.ts +1 -1
  92. package/models/seriesType/pie.d.ts +103 -3
  93. package/models/seriesType/scatter.d.ts +1 -1
  94. package/modern/BarChart/BarChart.js +1 -0
  95. package/modern/BarChart/legend.js +13 -0
  96. package/modern/ChartsLegend/ChartsLegend.js +5 -1
  97. package/modern/ChartsLegend/utils.js +11 -1
  98. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +1 -1
  99. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +11 -2
  100. package/modern/LineChart/LineChart.js +1 -0
  101. package/modern/LineChart/legend.js +13 -0
  102. package/modern/PieChart/PieArc.js +116 -0
  103. package/modern/PieChart/PieArcLabel.js +101 -0
  104. package/modern/PieChart/PieChart.js +285 -0
  105. package/modern/PieChart/PiePlot.js +91 -0
  106. package/modern/PieChart/formatter.js +41 -0
  107. package/modern/PieChart/index.js +4 -0
  108. package/modern/PieChart/legend.js +12 -0
  109. package/modern/ResponsiveChartContainer/index.js +14 -3
  110. package/modern/ScatterChart/Scatter.js +1 -1
  111. package/modern/ScatterChart/ScatterChart.js +1 -0
  112. package/modern/ScatterChart/legend.js +13 -0
  113. package/modern/context/SeriesContextProvider.js +11 -1
  114. package/modern/index.js +2 -1
  115. package/modern/internals/defaultizeColor.js +7 -0
  116. package/modern/models/seriesType/index.js +1 -8
  117. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import { SeriesContext } from '../context/SeriesContextProvider';
4
+ import PieArc from './PieArc';
5
+ import PieArcLabel from './PieArcLabel';
6
+ import { DrawingContext } from '../context/DrawingProvider';
7
+ import { createElement as _createElement } from "react";
8
+ import { jsxs as _jsxs } from "react/jsx-runtime";
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ const RATIO = 180 / Math.PI;
11
+ function getItemLabel(arcLabel, arcLabelMinAngle, item) {
12
+ if (!arcLabel) {
13
+ return null;
14
+ }
15
+ const angle = (item.endAngle - item.startAngle) * RATIO;
16
+ if (angle < arcLabelMinAngle) {
17
+ return null;
18
+ }
19
+ if (typeof arcLabel === 'string') {
20
+ var _item$arcLabel;
21
+ return (_item$arcLabel = item[arcLabel]) == null ? void 0 : _item$arcLabel.toString();
22
+ }
23
+ return arcLabel(item);
24
+ }
25
+ export function PiePlot() {
26
+ const seriesData = React.useContext(SeriesContext).pie;
27
+ const {
28
+ left,
29
+ top,
30
+ width,
31
+ height
32
+ } = React.useContext(DrawingContext);
33
+ if (seriesData === undefined) {
34
+ return null;
35
+ }
36
+ const availableRadius = Math.min(width, height) / 2;
37
+ const center = {
38
+ x: left + width / 2,
39
+ y: top + height / 2
40
+ };
41
+ const {
42
+ series,
43
+ seriesOrder
44
+ } = seriesData;
45
+ return /*#__PURE__*/_jsx("g", {
46
+ children: seriesOrder.map(seriesId => {
47
+ const {
48
+ innerRadius,
49
+ outerRadius,
50
+ cornerRadius,
51
+ arcLabel,
52
+ arcLabelMinAngle = 0,
53
+ data,
54
+ cx,
55
+ cy,
56
+ highlighted,
57
+ faded
58
+ } = series[seriesId];
59
+ return /*#__PURE__*/_jsx("g", {
60
+ transform: `translate(${cx === undefined ? center.x : left + cx}, ${cy === undefined ? center.y : top + cy})`,
61
+ children: /*#__PURE__*/_jsxs("g", {
62
+ children: [data.map((item, index) => {
63
+ return /*#__PURE__*/_createElement(PieArc, _extends({}, item, {
64
+ key: item.id,
65
+ innerRadius: innerRadius,
66
+ outerRadius: outerRadius != null ? outerRadius : availableRadius,
67
+ cornerRadius: cornerRadius,
68
+ id: seriesId,
69
+ color: item.color,
70
+ dataIndex: index,
71
+ highlightScope: series[seriesId].highlightScope,
72
+ highlighted: highlighted,
73
+ faded: faded
74
+ }));
75
+ }), data.map((item, index) => {
76
+ return /*#__PURE__*/_createElement(PieArcLabel, _extends({}, item, {
77
+ key: item.id,
78
+ innerRadius: innerRadius,
79
+ outerRadius: outerRadius != null ? outerRadius : availableRadius,
80
+ cornerRadius: cornerRadius,
81
+ id: seriesId,
82
+ color: item.color,
83
+ dataIndex: index,
84
+ highlightScope: series[seriesId].highlightScope,
85
+ formattedArcLabel: getItemLabel(arcLabel, arcLabelMinAngle, item)
86
+ }));
87
+ })]
88
+ })
89
+ }, seriesId);
90
+ })
91
+ });
92
+ }
@@ -0,0 +1,48 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import { pie as d3Pie } from 'd3-shape';
3
+ const getSortingComparator = (comparator = 'none') => {
4
+ if (typeof comparator === 'function') {
5
+ return comparator;
6
+ }
7
+ switch (comparator) {
8
+ case 'none':
9
+ return null;
10
+ case 'desc':
11
+ return (a, b) => b - a;
12
+ case 'asc':
13
+ return (a, b) => a - b;
14
+ default:
15
+ return null;
16
+ }
17
+ };
18
+ const formatter = params => {
19
+ const {
20
+ seriesOrder,
21
+ series
22
+ } = params;
23
+ const defaultizedSeries = {};
24
+ seriesOrder.forEach(seriesId => {
25
+ var _series$seriesId$star, _series$seriesId$endA, _series$seriesId$padd, _series$seriesId$sort;
26
+ const arcs = d3Pie().startAngle(2 * Math.PI * ((_series$seriesId$star = series[seriesId].startAngle) != null ? _series$seriesId$star : 0) / 360).endAngle(2 * Math.PI * ((_series$seriesId$endA = series[seriesId].endAngle) != null ? _series$seriesId$endA : 360) / 360).padAngle(2 * Math.PI * ((_series$seriesId$padd = series[seriesId].paddingAngle) != null ? _series$seriesId$padd : 0) / 360).sortValues(getSortingComparator((_series$seriesId$sort = series[seriesId].sortingValues) != null ? _series$seriesId$sort : 'none'))(series[seriesId].data.map(piePoint => piePoint.value));
27
+ defaultizedSeries[seriesId] = _extends({
28
+ valueFormatter: item => item.value.toLocaleString()
29
+ }, series[seriesId], {
30
+ data: series[seriesId].data.map((item, index) => {
31
+ var _item$id;
32
+ return _extends({}, item, {
33
+ id: (_item$id = item.id) != null ? _item$id : `auto-generated-pie-id-${seriesId}-${index}`
34
+ }, arcs[index]);
35
+ }).map(item => {
36
+ var _series$seriesId$valu, _series$seriesId$valu2, _series$seriesId;
37
+ return _extends({}, item, {
38
+ formattedValue: (_series$seriesId$valu = (_series$seriesId$valu2 = (_series$seriesId = series[seriesId]).valueFormatter) == null ? void 0 : _series$seriesId$valu2.call(_series$seriesId, item)) != null ? _series$seriesId$valu : item.value.toLocaleString()
39
+ });
40
+ })
41
+ });
42
+ });
43
+ return {
44
+ seriesOrder,
45
+ series: defaultizedSeries
46
+ };
47
+ };
48
+ export default formatter;
@@ -0,0 +1,4 @@
1
+ export { PiePlot } from './PiePlot';
2
+ export { PieChart } from './PieChart';
3
+ export * from './PieArc';
4
+ export * from './PieArcLabel';
@@ -0,0 +1,12 @@
1
+ const legendGetter = params => {
2
+ const {
3
+ seriesOrder,
4
+ series
5
+ } = 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));
11
+ };
12
+ export default legendGetter;
@@ -1,4 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["width", "height"];
2
4
  import * as React from 'react';
3
5
  import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
4
6
  import ownerWindow from '@mui/utils/ownerWindow';
@@ -84,18 +86,27 @@ const ResizableContainer = styled('div', {
84
86
  flexDirection: 'column',
85
87
  alignItems: 'center',
86
88
  justifyContent: 'center',
87
- overflow: 'hidden'
89
+ overflow: 'hidden',
90
+ '&>svg': {
91
+ width: '100%',
92
+ height: '100%'
93
+ }
88
94
  };
89
95
  });
90
96
  export function ResponsiveChartContainer(props) {
91
- const [containerRef, width, height] = useChartDimensions(props.width, props.height);
97
+ const {
98
+ width: propsWidth,
99
+ height: propsHeight
100
+ } = props,
101
+ other = _objectWithoutPropertiesLoose(props, _excluded);
102
+ const [containerRef, width, height] = useChartDimensions(propsWidth, propsHeight);
92
103
  return /*#__PURE__*/_jsx(ResizableContainer, {
93
104
  ref: containerRef,
94
105
  ownerState: {
95
106
  width: props.width,
96
107
  height: props.height
97
108
  },
98
- children: /*#__PURE__*/_jsx(ChartContainer, _extends({}, props, {
109
+ children: /*#__PURE__*/_jsx(ChartContainer, _extends({}, other, {
99
110
  width: width,
100
111
  height: height
101
112
  }))
@@ -82,7 +82,7 @@ process.env.NODE_ENV !== "production" ? Scatter.propTypes = {
82
82
  color: PropTypes.string.isRequired,
83
83
  markerSize: PropTypes.number.isRequired,
84
84
  series: PropTypes.shape({
85
- color: PropTypes.string.isRequired,
85
+ color: PropTypes.string,
86
86
  data: PropTypes.arrayOf(PropTypes.shape({
87
87
  id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
88
88
  x: PropTypes.number.isRequired,
@@ -109,6 +109,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
109
109
  legend: PropTypes.shape({
110
110
  classes: PropTypes.object,
111
111
  direction: PropTypes.oneOf(['column', 'row']),
112
+ hidden: PropTypes.bool,
112
113
  itemWidth: PropTypes.number,
113
114
  markSize: PropTypes.number,
114
115
  offset: PropTypes.shape({
@@ -0,0 +1,13 @@
1
+ const legendGetter = params => {
2
+ const {
3
+ seriesOrder,
4
+ series
5
+ } = 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);
12
+ };
13
+ export default legendGetter;
@@ -4,6 +4,7 @@ import { useTheme } from '@mui/material/styles';
4
4
  import barSeriesFormatter from '../BarChart/formatter';
5
5
  import scatterSeriesFormatter from '../ScatterChart/formatter';
6
6
  import lineSeriesFormatter from '../LineChart/formatter';
7
+ import pieSeriesFormatter from '../PieChart/formatter';
7
8
  import { defaultizeColor } from '../internals/defaultizeColor';
8
9
  import { blueberryTwilightPalette } from '../colorPalettes';
9
10
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -11,8 +12,17 @@ export const SeriesContext = /*#__PURE__*/React.createContext({});
11
12
  const seriesTypeFormatter = {
12
13
  bar: barSeriesFormatter,
13
14
  scatter: scatterSeriesFormatter,
14
- line: lineSeriesFormatter
15
+ line: lineSeriesFormatter,
16
+ pie: pieSeriesFormatter
15
17
  };
18
+ /**
19
+ * This methods is the interface between what the developper is providing and what compoenents receives
20
+ * To simplify the components behaviors, it groups series by type, such that LinePlots props are not updated if soe line data are modified
21
+ * It also add defaultized values such as the ids, colors
22
+ * @param series The array of series provided by devs
23
+ * @param colors The color palette used to defaultize series colors
24
+ * @returns An object structuring all the series by type.
25
+ */
16
26
  const formatSeries = (series, colors) => {
17
27
  // Group series by type
18
28
  const seriesGroups = {};
package/esm/index.js CHANGED
@@ -10,6 +10,7 @@ export * from './ChartsTooltip';
10
10
  export * from './ChartsAxisHighlight';
11
11
  export * from './BarChart';
12
12
  export * from './LineChart';
13
+ export * from './PieChart';
13
14
  export * from './ScatterChart';
14
15
  export * from './ChartContainer';
15
16
  export * from './ResponsiveChartContainer';
@@ -1,6 +1,13 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  const DEFAULT_COLORS = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'];
3
3
  export function defaultizeColor(series, seriesIndex, colors = DEFAULT_COLORS) {
4
+ if (series.type === 'pie') {
5
+ return _extends({}, series, {
6
+ data: series.data.map((d, index) => _extends({
7
+ color: colors[index % colors.length]
8
+ }, d))
9
+ });
10
+ }
4
11
  return _extends({
5
12
  color: colors[seriesIndex % colors.length]
6
13
  }, series);
@@ -1,12 +1,5 @@
1
- // import { PieSeriesType } from './pie';
2
-
3
- // | PieSeriesType;
4
-
5
- // | PieSeriesType;
6
-
7
- // | PieSeriesType
8
-
9
1
  export * from './line';
10
2
  export * from './bar';
11
3
  export * from './scatter';
4
+ export * from './pie';
12
5
  export {};
package/index.d.ts CHANGED
@@ -10,6 +10,7 @@ export * from './ChartsTooltip';
10
10
  export * from './ChartsAxisHighlight';
11
11
  export * from './BarChart';
12
12
  export * from './LineChart';
13
+ export * from './PieChart';
13
14
  export * from './ScatterChart';
14
15
  export * from './ChartContainer';
15
16
  export * from './ResponsiveChartContainer';
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts v6.0.0-alpha.1
2
+ * @mui/x-charts v6.0.0-alpha.2
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -142,6 +142,17 @@ Object.keys(_LineChart).forEach(function (key) {
142
142
  }
143
143
  });
144
144
  });
145
+ var _PieChart = require("./PieChart");
146
+ Object.keys(_PieChart).forEach(function (key) {
147
+ if (key === "default" || key === "__esModule") return;
148
+ if (key in exports && exports[key] === _PieChart[key]) return;
149
+ Object.defineProperty(exports, key, {
150
+ enumerable: true,
151
+ get: function () {
152
+ return _PieChart[key];
153
+ }
154
+ });
155
+ });
145
156
  var _ScatterChart = require("./ScatterChart");
146
157
  Object.keys(_ScatterChart).forEach(function (key) {
147
158
  if (key === "default" || key === "__esModule") return;
@@ -1,5 +1,40 @@
1
1
  import { AllSeriesType } from '../models/seriesType';
2
2
  export declare function defaultizeColor(series: AllSeriesType, seriesIndex: number, colors?: string[]): {
3
+ data: {
4
+ color: string;
5
+ label?: string | undefined;
6
+ value: number;
7
+ id?: string | number | undefined;
8
+ }[];
9
+ type: "pie";
10
+ innerRadius?: number | undefined;
11
+ outerRadius?: number | undefined;
12
+ cornerRadius?: number | undefined;
13
+ startAngle?: number | undefined;
14
+ endAngle?: number | undefined;
15
+ paddingAngle?: number | undefined;
16
+ sortingValues?: import("../models/seriesType").ChartsPieSorting | undefined;
17
+ arcLabel?: "label" | "value" | "formattedValue" | ((item: import("../models/seriesType").DefaultizedPieValueType) => string) | undefined;
18
+ arcLabelMinAngle?: number | undefined;
19
+ cx?: number | undefined;
20
+ cy?: number | undefined;
21
+ highlighted?: {
22
+ additionalRadius?: number | undefined;
23
+ innerRadius?: number | undefined;
24
+ outerRadius?: number | undefined;
25
+ cornerRadius?: number | undefined;
26
+ } | undefined;
27
+ faded?: {
28
+ additionalRadius?: number | undefined;
29
+ innerRadius?: number | undefined;
30
+ outerRadius?: number | undefined;
31
+ cornerRadius?: number | undefined;
32
+ } | undefined;
33
+ id?: string | undefined;
34
+ color?: string | undefined;
35
+ valueFormatter?: ((value: import("../models/helpers").MakeOptional<import("../models/seriesType").PieValueType, "id">) => string) | undefined;
36
+ highlightScope?: Partial<import("..").HighlightScope> | undefined;
37
+ } | {
3
38
  type: "bar";
4
39
  data: number[];
5
40
  label?: string | undefined;
@@ -8,6 +8,13 @@ exports.defaultizeColor = defaultizeColor;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  const DEFAULT_COLORS = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'];
10
10
  function defaultizeColor(series, seriesIndex, colors = DEFAULT_COLORS) {
11
+ if (series.type === 'pie') {
12
+ return (0, _extends2.default)({}, series, {
13
+ data: series.data.map((d, index) => (0, _extends2.default)({
14
+ color: colors[index % colors.length]
15
+ }, d))
16
+ });
17
+ }
11
18
  return (0, _extends2.default)({
12
19
  color: colors[seriesIndex % colors.length]
13
20
  }, series);
@@ -128,6 +128,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
128
128
  legend: PropTypes.shape({
129
129
  classes: PropTypes.object,
130
130
  direction: PropTypes.oneOf(['column', 'row']),
131
+ hidden: PropTypes.bool,
131
132
  itemWidth: PropTypes.number,
132
133
  markSize: PropTypes.number,
133
134
  offset: PropTypes.shape({
@@ -0,0 +1,15 @@
1
+ var legendGetter = function legendGetter(params) {
2
+ var seriesOrder = params.seriesOrder,
3
+ series = params.series;
4
+ var data = seriesOrder.map(function (seriesId) {
5
+ return {
6
+ color: series[seriesId].color,
7
+ label: series[seriesId].label,
8
+ id: seriesId
9
+ };
10
+ });
11
+ return data.filter(function (item) {
12
+ return item.label !== undefined;
13
+ });
14
+ };
15
+ export default legendGetter;
@@ -143,13 +143,17 @@ export function ChartsLegend(inProps) {
143
143
  });
144
144
  var position = props.position,
145
145
  direction = props.direction,
146
- offset = props.offset;
146
+ offset = props.offset,
147
+ hidden = props.hidden;
147
148
  var theme = useTheme();
148
149
  var classes = useUtilityClasses(_extends({}, props, {
149
150
  theme: theme
150
151
  }));
151
152
  var drawingArea = React.useContext(DrawingContext);
152
153
  var series = React.useContext(SeriesContext);
154
+ if (hidden) {
155
+ return null;
156
+ }
153
157
  var seriesToDisplay = getSeriesToDisplay(series);
154
158
  return /*#__PURE__*/_jsx(ChartsLegendRoot, {
155
159
  ownerState: {
@@ -1,9 +1,15 @@
1
+ import getBarLegend from '../BarChart/legend';
2
+ import getScatterLegend from '../ScatterChart/legend';
3
+ import getLineLegend from '../LineChart/legend';
4
+ import getPieLegend from '../PieChart/legend';
5
+ var legendGetter = {
6
+ bar: getBarLegend,
7
+ scatter: getScatterLegend,
8
+ line: getLineLegend,
9
+ pie: getPieLegend
10
+ };
1
11
  export function getSeriesToDisplay(series) {
2
- return Object.values(series).flatMap(function (s) {
3
- return s.seriesOrder.map(function (seriesId) {
4
- return s.series[seriesId];
5
- });
6
- }).filter(function (s) {
7
- return s.label !== undefined;
12
+ return Object.keys(series).flatMap(function (seriesType) {
13
+ return legendGetter[seriesType](series[seriesType]);
8
14
  });
9
15
  }
@@ -80,7 +80,9 @@ export function ChartsAxisTooltipContent(props) {
80
80
  var USED_X_AXIS_ID = xAxisIds[0];
81
81
  var relevantSeries = React.useMemo(function () {
82
82
  var rep = [];
83
- Object.keys(series).forEach(function (seriesType) {
83
+ Object.keys(series).filter(function (seriesType) {
84
+ return ['bar', 'line', 'scatter'].includes(seriesType);
85
+ }).forEach(function (seriesType) {
84
86
  series[seriesType].seriesOrder.forEach(function (seriesId) {
85
87
  var axisKey = series[seriesType].series[seriesId].xAxisKey;
86
88
  if (axisKey === undefined || axisKey === USED_X_AXIS_ID) {
@@ -4,7 +4,6 @@ import { ChartsTooltipTable, ChartsTooltipCell, ChartsTooltipMark, ChartsTooltip
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
5
  import { jsxs as _jsxs } from "react/jsx-runtime";
6
6
  export function DefaultChartsItemContent(props) {
7
- var _series$label;
8
7
  var series = props.series,
9
8
  itemData = props.itemData,
10
9
  sx = props.sx,
@@ -12,8 +11,16 @@ export function DefaultChartsItemContent(props) {
12
11
  if (itemData.dataIndex === undefined) {
13
12
  return null;
14
13
  }
15
- var displayedLabel = (_series$label = series.label) != null ? _series$label : null;
16
- var color = series.color;
14
+ var _ref = series.type === 'pie' ? {
15
+ color: series.data[itemData.dataIndex].color,
16
+ displayedLabel: series.data[itemData.dataIndex].label
17
+ } : {
18
+ color: series.color,
19
+ displayedLabel: series.label
20
+ },
21
+ displayedLabel = _ref.displayedLabel,
22
+ color = _ref.color;
23
+
17
24
  // TODO: Manage to let TS understand series.data and series.valueFormatter are coherent
18
25
  // @ts-ignore
19
26
  var formattedValue = series.valueFormatter(series.data[itemData.dataIndex]);
@@ -131,6 +131,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
131
131
  legend: PropTypes.shape({
132
132
  classes: PropTypes.object,
133
133
  direction: PropTypes.oneOf(['column', 'row']),
134
+ hidden: PropTypes.bool,
134
135
  itemWidth: PropTypes.number,
135
136
  markSize: PropTypes.number,
136
137
  offset: PropTypes.shape({
@@ -0,0 +1,15 @@
1
+ var legendGetter = function legendGetter(params) {
2
+ var seriesOrder = params.seriesOrder,
3
+ series = params.series;
4
+ var data = seriesOrder.map(function (seriesId) {
5
+ return {
6
+ color: series[seriesId].color,
7
+ label: series[seriesId].label,
8
+ id: seriesId
9
+ };
10
+ });
11
+ return data.filter(function (item) {
12
+ return item.label !== undefined;
13
+ });
14
+ };
15
+ export default legendGetter;
@@ -0,0 +1,118 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
+ var _excluded = ["id", "dataIndex", "classes", "color", "highlightScope", "innerRadius", "outerRadius", "cornerRadius", "highlighted", "faded"];
4
+ import * as React from 'react';
5
+ import { arc as d3Arc } from 'd3-shape';
6
+ import PropTypes from 'prop-types';
7
+ import composeClasses from '@mui/utils/composeClasses';
8
+ import generateUtilityClass from '@mui/utils/generateUtilityClass';
9
+ import { styled } from '@mui/material/styles';
10
+ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
11
+ import { InteractionContext } from '../context/InteractionProvider';
12
+ import { getIsFaded, getIsHighlighted, useInteractionItemProps } from '../hooks/useInteractionItemProps';
13
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ export function getPieArcUtilityClass(slot) {
15
+ return generateUtilityClass('MuiPieArc', slot);
16
+ }
17
+ export var pieArcClasses = generateUtilityClasses('MuiPieArc', ['root', 'highlighted', 'faded']);
18
+ var useUtilityClasses = function useUtilityClasses(ownerState) {
19
+ var classes = ownerState.classes,
20
+ id = ownerState.id,
21
+ isFaded = ownerState.isFaded,
22
+ isHighlighted = ownerState.isHighlighted;
23
+ var slots = {
24
+ root: ['root', "series-".concat(id), isHighlighted && 'highlighted', isFaded && 'faded']
25
+ };
26
+ return composeClasses(slots, getPieArcUtilityClass, classes);
27
+ };
28
+ var PieArcRoot = styled('path', {
29
+ name: 'MuiPieArc',
30
+ slot: 'Root',
31
+ overridesResolver: function overridesResolver(_, styles) {
32
+ return styles.arc;
33
+ }
34
+ })(function (_ref) {
35
+ var ownerState = _ref.ownerState,
36
+ theme = _ref.theme;
37
+ return {
38
+ stroke: theme.palette.background.paper,
39
+ strokeWidth: 1,
40
+ strokeLinejoin: 'round',
41
+ fill: ownerState.color,
42
+ opacity: ownerState.isFaded ? 0.3 : 1
43
+ };
44
+ });
45
+ export default function PieArc(props) {
46
+ var _attibuesOverride$inn, _attibuesOverride$out, _attibuesOverride$cor;
47
+ var id = props.id,
48
+ dataIndex = props.dataIndex,
49
+ innerClasses = props.classes,
50
+ color = props.color,
51
+ highlightScope = props.highlightScope,
52
+ _props$innerRadius = props.innerRadius,
53
+ baseInnerRadius = _props$innerRadius === void 0 ? 0 : _props$innerRadius,
54
+ baseOuterRadius = props.outerRadius,
55
+ _props$cornerRadius = props.cornerRadius,
56
+ baseCornerRadius = _props$cornerRadius === void 0 ? 0 : _props$cornerRadius,
57
+ highlighted = props.highlighted,
58
+ _props$faded = props.faded,
59
+ faded = _props$faded === void 0 ? {
60
+ additionalRadius: -5
61
+ } : _props$faded,
62
+ other = _objectWithoutProperties(props, _excluded);
63
+ var getInteractionItemProps = useInteractionItemProps(highlightScope);
64
+ var _React$useContext = React.useContext(InteractionContext),
65
+ item = _React$useContext.item;
66
+ var isHighlighted = getIsHighlighted(item, {
67
+ type: 'pie',
68
+ seriesId: id,
69
+ dataIndex: dataIndex
70
+ }, highlightScope);
71
+ var isFaded = !isHighlighted && getIsFaded(item, {
72
+ type: 'pie',
73
+ seriesId: id,
74
+ dataIndex: dataIndex
75
+ }, highlightScope);
76
+ var ownerState = {
77
+ id: id,
78
+ dataIndex: dataIndex,
79
+ classes: innerClasses,
80
+ color: color,
81
+ isFaded: isFaded,
82
+ isHighlighted: isHighlighted
83
+ };
84
+ var classes = useUtilityClasses(ownerState);
85
+ var attibuesOverride = _extends({
86
+ additionalRadius: 0
87
+ }, isFaded && faded || isHighlighted && highlighted || {});
88
+ var innerRadius = Math.max(0, (_attibuesOverride$inn = attibuesOverride.innerRadius) != null ? _attibuesOverride$inn : baseInnerRadius);
89
+ var outerRadius = Math.max(0, (_attibuesOverride$out = attibuesOverride.outerRadius) != null ? _attibuesOverride$out : baseOuterRadius + attibuesOverride.additionalRadius);
90
+ var cornerRadius = (_attibuesOverride$cor = attibuesOverride.cornerRadius) != null ? _attibuesOverride$cor : baseCornerRadius;
91
+ return /*#__PURE__*/_jsx(PieArcRoot, _extends({
92
+ d: d3Arc().cornerRadius(cornerRadius)(_extends({}, other, {
93
+ innerRadius: innerRadius,
94
+ outerRadius: outerRadius
95
+ })),
96
+ ownerState: ownerState,
97
+ className: classes.root
98
+ }, getInteractionItemProps({
99
+ type: 'pie',
100
+ seriesId: id,
101
+ dataIndex: dataIndex
102
+ })));
103
+ }
104
+ process.env.NODE_ENV !== "production" ? PieArc.propTypes = {
105
+ // ----------------------------- Warning --------------------------------
106
+ // | These PropTypes are generated from the TypeScript type definitions |
107
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
108
+ // ----------------------------------------------------------------------
109
+ classes: PropTypes.object,
110
+ cornerRadius: PropTypes.number,
111
+ dataIndex: PropTypes.number.isRequired,
112
+ highlightScope: PropTypes.shape({
113
+ faded: PropTypes.oneOf(['global', 'none', 'series']),
114
+ highlighted: PropTypes.oneOf(['item', 'none', 'series'])
115
+ }),
116
+ innerRadius: PropTypes.number,
117
+ outerRadius: PropTypes.number.isRequired
118
+ } : void 0;