@mui/x-charts 7.0.0-alpha.9 → 7.0.0-beta.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 (62) hide show
  1. package/BarChart/BarChart.js +1 -19
  2. package/CHANGELOG.md +139 -38
  3. package/ChartContainer/ChartContainer.d.ts +12 -0
  4. package/ChartContainer/ChartContainer.js +197 -0
  5. package/ChartContainer/index.d.ts +1 -11
  6. package/ChartContainer/index.js +9 -63
  7. package/ChartsTooltip/ChartsAxisTooltipContent.js +2 -54
  8. package/ChartsTooltip/ChartsItemTooltipContent.js +1 -11
  9. package/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -54
  10. package/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -11
  11. package/LineChart/LineChart.js +1 -23
  12. package/PieChart/PieChart.js +1 -46
  13. package/README.md +2 -2
  14. package/ResponsiveChartContainer/ResponsiveChartContainer.d.ts +16 -0
  15. package/ResponsiveChartContainer/ResponsiveChartContainer.js +250 -0
  16. package/ResponsiveChartContainer/index.d.ts +1 -15
  17. package/ResponsiveChartContainer/index.js +8 -113
  18. package/ScatterChart/Scatter.js +1 -20
  19. package/ScatterChart/ScatterChart.js +1 -20
  20. package/esm/BarChart/BarChart.js +1 -19
  21. package/esm/ChartContainer/ChartContainer.js +189 -0
  22. package/esm/ChartContainer/index.js +1 -61
  23. package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +2 -54
  24. package/esm/ChartsTooltip/ChartsItemTooltipContent.js +1 -11
  25. package/esm/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -54
  26. package/esm/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -11
  27. package/esm/LineChart/LineChart.js +1 -23
  28. package/esm/PieChart/PieChart.js +1 -46
  29. package/esm/ResponsiveChartContainer/ResponsiveChartContainer.js +245 -0
  30. package/esm/ResponsiveChartContainer/index.js +1 -115
  31. package/esm/ScatterChart/Scatter.js +1 -20
  32. package/esm/ScatterChart/ScatterChart.js +1 -20
  33. package/index.js +1 -1
  34. package/legacy/BarChart/BarChart.js +1 -19
  35. package/legacy/ChartContainer/ChartContainer.js +187 -0
  36. package/legacy/ChartContainer/index.js +1 -59
  37. package/legacy/ChartsTooltip/ChartsAxisTooltipContent.js +2 -54
  38. package/legacy/ChartsTooltip/ChartsItemTooltipContent.js +1 -11
  39. package/legacy/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -54
  40. package/legacy/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -11
  41. package/legacy/LineChart/LineChart.js +1 -23
  42. package/legacy/PieChart/PieChart.js +1 -46
  43. package/legacy/ResponsiveChartContainer/ResponsiveChartContainer.js +253 -0
  44. package/legacy/ResponsiveChartContainer/index.js +1 -123
  45. package/legacy/ScatterChart/Scatter.js +1 -20
  46. package/legacy/ScatterChart/ScatterChart.js +1 -20
  47. package/legacy/index.js +1 -1
  48. package/modern/BarChart/BarChart.js +1 -19
  49. package/modern/ChartContainer/ChartContainer.js +189 -0
  50. package/modern/ChartContainer/index.js +1 -61
  51. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +2 -54
  52. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +1 -11
  53. package/modern/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -54
  54. package/modern/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -11
  55. package/modern/LineChart/LineChart.js +1 -23
  56. package/modern/PieChart/PieChart.js +1 -46
  57. package/modern/ResponsiveChartContainer/ResponsiveChartContainer.js +242 -0
  58. package/modern/ResponsiveChartContainer/index.js +1 -112
  59. package/modern/ScatterChart/Scatter.js +1 -20
  60. package/modern/ScatterChart/ScatterChart.js +1 -20
  61. package/modern/index.js +1 -1
  62. package/package.json +4 -4
@@ -1,61 +1 @@
1
- import * as React from 'react';
2
- import useForkRef from '@mui/utils/useForkRef';
3
- import { DrawingProvider } from '../context/DrawingProvider';
4
- import { SeriesContextProvider } from '../context/SeriesContextProvider';
5
- import { InteractionProvider } from '../context/InteractionProvider';
6
- import { useReducedMotion } from '../hooks/useReducedMotion';
7
- import { ChartsSurface } from '../ChartsSurface';
8
- import { CartesianContextProvider } from '../context/CartesianContextProvider';
9
- import { HighlightProvider } from '../context/HighlightProvider';
10
- import { jsx as _jsx } from "react/jsx-runtime";
11
- export const ChartContainer = /*#__PURE__*/React.forwardRef(function ChartContainer(props, ref) {
12
- const {
13
- width,
14
- height,
15
- series,
16
- margin,
17
- xAxis,
18
- yAxis,
19
- colors,
20
- dataset,
21
- sx,
22
- title,
23
- desc,
24
- disableAxisListener,
25
- children
26
- } = props;
27
- const svgRef = React.useRef(null);
28
- const handleRef = useForkRef(ref, svgRef);
29
- useReducedMotion(); // a11y reduce motion (see: https://react-spring.dev/docs/utilities/use-reduced-motion)
30
-
31
- return /*#__PURE__*/_jsx(DrawingProvider, {
32
- width: width,
33
- height: height,
34
- margin: margin,
35
- svgRef: svgRef,
36
- children: /*#__PURE__*/_jsx(SeriesContextProvider, {
37
- series: series,
38
- colors: colors,
39
- dataset: dataset,
40
- children: /*#__PURE__*/_jsx(CartesianContextProvider, {
41
- xAxis: xAxis,
42
- yAxis: yAxis,
43
- dataset: dataset,
44
- children: /*#__PURE__*/_jsx(InteractionProvider, {
45
- children: /*#__PURE__*/_jsx(HighlightProvider, {
46
- children: /*#__PURE__*/_jsx(ChartsSurface, {
47
- width: width,
48
- height: height,
49
- ref: handleRef,
50
- sx: sx,
51
- title: title,
52
- desc: desc,
53
- disableAxisListener: disableAxisListener,
54
- children: children
55
- })
56
- })
57
- })
58
- })
59
- })
60
- });
61
- });
1
+ export * from './ChartContainer';
@@ -76,37 +76,7 @@ process.env.NODE_ENV !== "production" ? ChartsAxisTooltipContent.propTypes = {
76
76
  classes: PropTypes.object.isRequired,
77
77
  content: PropTypes.elementType,
78
78
  contentProps: PropTypes.shape({
79
- axis: PropTypes.shape({
80
- axisId: PropTypes.string,
81
- classes: PropTypes.object,
82
- data: PropTypes.array,
83
- dataKey: PropTypes.string,
84
- disableLine: PropTypes.bool,
85
- disableTicks: PropTypes.bool,
86
- fill: PropTypes.string,
87
- hideTooltip: PropTypes.bool,
88
- id: PropTypes.string.isRequired,
89
- label: PropTypes.string,
90
- labelFontSize: PropTypes.number,
91
- labelStyle: PropTypes.object,
92
- max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
93
- min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
94
- position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
95
- scale: PropTypes.func.isRequired,
96
- scaleType: PropTypes.oneOf(['time']).isRequired,
97
- slotProps: PropTypes.object,
98
- slots: PropTypes.object,
99
- stroke: PropTypes.string,
100
- tickFontSize: PropTypes.number,
101
- tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
102
- tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
103
- tickLabelStyle: PropTypes.object,
104
- tickMaxStep: PropTypes.number,
105
- tickMinStep: PropTypes.number,
106
- tickNumber: PropTypes.number.isRequired,
107
- tickSize: PropTypes.number,
108
- valueFormatter: PropTypes.func
109
- }),
79
+ axis: PropTypes.object,
110
80
  axisData: PropTypes.shape({
111
81
  x: PropTypes.shape({
112
82
  index: PropTypes.number,
@@ -120,29 +90,7 @@ process.env.NODE_ENV !== "production" ? ChartsAxisTooltipContent.propTypes = {
120
90
  axisValue: PropTypes.any,
121
91
  classes: PropTypes.object,
122
92
  dataIndex: PropTypes.number,
123
- series: PropTypes.arrayOf(PropTypes.shape({
124
- area: PropTypes.bool,
125
- color: PropTypes.string.isRequired,
126
- connectNulls: PropTypes.bool,
127
- curve: PropTypes.oneOf(['catmullRom', 'linear', 'monotoneX', 'monotoneY', 'natural', 'step', 'stepAfter', 'stepBefore']),
128
- data: PropTypes.arrayOf(PropTypes.number).isRequired,
129
- dataKey: PropTypes.string,
130
- disableHighlight: PropTypes.bool,
131
- highlightScope: PropTypes.shape({
132
- faded: PropTypes.oneOf(['global', 'none', 'series']),
133
- highlighted: PropTypes.oneOf(['item', 'none', 'series'])
134
- }),
135
- id: PropTypes.string.isRequired,
136
- label: PropTypes.string,
137
- showMark: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),
138
- stack: PropTypes.string,
139
- stackOffset: PropTypes.oneOf(['diverging', 'expand', 'none', 'silhouette', 'wiggle']),
140
- stackOrder: PropTypes.oneOf(['appearance', 'ascending', 'descending', 'insideOut', 'none', 'reverse']),
141
- type: PropTypes.oneOf(['line']).isRequired,
142
- valueFormatter: PropTypes.func.isRequired,
143
- xAxisKey: PropTypes.string,
144
- yAxisKey: PropTypes.string
145
- })),
93
+ series: PropTypes.arrayOf(PropTypes.object),
146
94
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
147
95
  }),
148
96
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
@@ -42,17 +42,7 @@ process.env.NODE_ENV !== "production" ? ChartsItemTooltipContent.propTypes = {
42
42
  seriesId: PropTypes.string.isRequired,
43
43
  type: PropTypes.oneOf(['bar', 'line', 'pie', 'scatter']).isRequired
44
44
  }),
45
- series: PropTypes.shape({
46
- color: PropTypes.string,
47
- data: PropTypes.arrayOf(PropTypes.number).isRequired,
48
- highlightScope: PropTypes.shape({
49
- faded: PropTypes.oneOf(['global', 'none', 'series']),
50
- highlighted: PropTypes.oneOf(['item', 'none', 'series'])
51
- }),
52
- id: PropTypes.string.isRequired,
53
- type: PropTypes.oneOf(['bar', 'line', 'pie', 'scatter']).isRequired,
54
- valueFormatter: PropTypes.func.isRequired
55
- }),
45
+ series: PropTypes.object,
56
46
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
57
47
  }),
58
48
  itemData: PropTypes.shape({
@@ -80,37 +80,7 @@ process.env.NODE_ENV !== "production" ? DefaultChartsAxisTooltipContent.propType
80
80
  /**
81
81
  * The properties of the triggered axis.
82
82
  */
83
- axis: PropTypes.shape({
84
- axisId: PropTypes.string,
85
- classes: PropTypes.object,
86
- data: PropTypes.array,
87
- dataKey: PropTypes.string,
88
- disableLine: PropTypes.bool,
89
- disableTicks: PropTypes.bool,
90
- fill: PropTypes.string,
91
- hideTooltip: PropTypes.bool,
92
- id: PropTypes.string.isRequired,
93
- label: PropTypes.string,
94
- labelFontSize: PropTypes.number,
95
- labelStyle: PropTypes.object,
96
- max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
97
- min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
98
- position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
99
- scale: PropTypes.func.isRequired,
100
- scaleType: PropTypes.oneOf(['time']).isRequired,
101
- slotProps: PropTypes.object,
102
- slots: PropTypes.object,
103
- stroke: PropTypes.string,
104
- tickFontSize: PropTypes.number,
105
- tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
106
- tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
107
- tickLabelStyle: PropTypes.object,
108
- tickMaxStep: PropTypes.number,
109
- tickMinStep: PropTypes.number,
110
- tickNumber: PropTypes.number.isRequired,
111
- tickSize: PropTypes.number,
112
- valueFormatter: PropTypes.func
113
- }).isRequired,
83
+ axis: PropTypes.object.isRequired,
114
84
  /**
115
85
  * Data identifying the triggered axis.
116
86
  */
@@ -139,29 +109,7 @@ process.env.NODE_ENV !== "production" ? DefaultChartsAxisTooltipContent.propType
139
109
  /**
140
110
  * The series linked to the triggered axis.
141
111
  */
142
- series: PropTypes.arrayOf(PropTypes.shape({
143
- area: PropTypes.bool,
144
- color: PropTypes.string.isRequired,
145
- connectNulls: PropTypes.bool,
146
- curve: PropTypes.oneOf(['catmullRom', 'linear', 'monotoneX', 'monotoneY', 'natural', 'step', 'stepAfter', 'stepBefore']),
147
- data: PropTypes.arrayOf(PropTypes.number).isRequired,
148
- dataKey: PropTypes.string,
149
- disableHighlight: PropTypes.bool,
150
- highlightScope: PropTypes.shape({
151
- faded: PropTypes.oneOf(['global', 'none', 'series']),
152
- highlighted: PropTypes.oneOf(['item', 'none', 'series'])
153
- }),
154
- id: PropTypes.string.isRequired,
155
- label: PropTypes.string,
156
- showMark: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),
157
- stack: PropTypes.string,
158
- stackOffset: PropTypes.oneOf(['diverging', 'expand', 'none', 'silhouette', 'wiggle']),
159
- stackOrder: PropTypes.oneOf(['appearance', 'ascending', 'descending', 'insideOut', 'none', 'reverse']),
160
- type: PropTypes.oneOf(['line']).isRequired,
161
- valueFormatter: PropTypes.func.isRequired,
162
- xAxisKey: PropTypes.string,
163
- yAxisKey: PropTypes.string
164
- })).isRequired,
112
+ series: PropTypes.arrayOf(PropTypes.object).isRequired,
165
113
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
166
114
  } : void 0;
167
115
  export { DefaultChartsAxisTooltipContent };
@@ -74,17 +74,7 @@ process.env.NODE_ENV !== "production" ? DefaultChartsItemTooltipContent.propType
74
74
  /**
75
75
  * The series linked to the triggered axis.
76
76
  */
77
- series: PropTypes.shape({
78
- color: PropTypes.string,
79
- data: PropTypes.arrayOf(PropTypes.number).isRequired,
80
- highlightScope: PropTypes.shape({
81
- faded: PropTypes.oneOf(['global', 'none', 'series']),
82
- highlighted: PropTypes.oneOf(['item', 'none', 'series'])
83
- }),
84
- id: PropTypes.string.isRequired,
85
- type: PropTypes.oneOf(['bar', 'line', 'pie', 'scatter']).isRequired,
86
- valueFormatter: PropTypes.func.isRequired
87
- }).isRequired,
77
+ series: PropTypes.object.isRequired,
88
78
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
89
79
  } : void 0;
90
80
  export { DefaultChartsItemTooltipContent };
@@ -257,29 +257,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
257
257
  tickNumber: PropTypes.number,
258
258
  tickSize: PropTypes.number
259
259
  }), PropTypes.string]),
260
- series: PropTypes.arrayOf(PropTypes.shape({
261
- area: PropTypes.bool,
262
- color: PropTypes.string,
263
- connectNulls: PropTypes.bool,
264
- curve: PropTypes.oneOf(['catmullRom', 'linear', 'monotoneX', 'monotoneY', 'natural', 'step', 'stepAfter', 'stepBefore']),
265
- data: PropTypes.arrayOf(PropTypes.number),
266
- dataKey: PropTypes.string,
267
- disableHighlight: PropTypes.bool,
268
- highlightScope: PropTypes.shape({
269
- faded: PropTypes.oneOf(['global', 'none', 'series']),
270
- highlighted: PropTypes.oneOf(['item', 'none', 'series'])
271
- }),
272
- id: PropTypes.string,
273
- label: PropTypes.string,
274
- showMark: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),
275
- stack: PropTypes.string,
276
- stackOffset: PropTypes.oneOf(['diverging', 'expand', 'none', 'silhouette', 'wiggle']),
277
- stackOrder: PropTypes.oneOf(['appearance', 'ascending', 'descending', 'insideOut', 'none', 'reverse']),
278
- type: PropTypes.oneOf(['line']),
279
- valueFormatter: PropTypes.func,
280
- xAxisKey: PropTypes.string,
281
- yAxisKey: PropTypes.string
282
- })).isRequired,
260
+ series: PropTypes.arrayOf(PropTypes.object).isRequired,
283
261
  /**
284
262
  * The props used for each component slot.
285
263
  * @default {}
@@ -236,52 +236,7 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
236
236
  tickNumber: PropTypes.number,
237
237
  tickSize: PropTypes.number
238
238
  }), PropTypes.string]),
239
- series: PropTypes.arrayOf(PropTypes.shape({
240
- arcLabel: PropTypes.oneOfType([PropTypes.oneOf(['formattedValue', 'label', 'value']), PropTypes.func]),
241
- arcLabelMinAngle: PropTypes.number,
242
- arcLabelRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
243
- color: PropTypes.string,
244
- cornerRadius: PropTypes.number,
245
- cx: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
246
- cy: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
247
- data: PropTypes.arrayOf(PropTypes.shape({
248
- color: PropTypes.string,
249
- id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
250
- label: PropTypes.string,
251
- value: PropTypes.number.isRequired
252
- })).isRequired,
253
- endAngle: PropTypes.number,
254
- faded: PropTypes.shape({
255
- additionalRadius: PropTypes.number,
256
- arcLabelRadius: PropTypes.number,
257
- color: PropTypes.string,
258
- cornerRadius: PropTypes.number,
259
- innerRadius: PropTypes.number,
260
- outerRadius: PropTypes.number,
261
- paddingAngle: PropTypes.number
262
- }),
263
- highlighted: PropTypes.shape({
264
- additionalRadius: PropTypes.number,
265
- arcLabelRadius: PropTypes.number,
266
- color: PropTypes.string,
267
- cornerRadius: PropTypes.number,
268
- innerRadius: PropTypes.number,
269
- outerRadius: PropTypes.number,
270
- paddingAngle: PropTypes.number
271
- }),
272
- highlightScope: PropTypes.shape({
273
- faded: PropTypes.oneOf(['global', 'none', 'series']),
274
- highlighted: PropTypes.oneOf(['item', 'none', 'series'])
275
- }),
276
- id: PropTypes.string,
277
- innerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
278
- outerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
279
- paddingAngle: PropTypes.number,
280
- sortingValues: PropTypes.oneOfType([PropTypes.oneOf(['asc', 'desc', 'none']), PropTypes.func]),
281
- startAngle: PropTypes.number,
282
- type: PropTypes.oneOf(['pie']),
283
- valueFormatter: PropTypes.func
284
- })).isRequired,
239
+ series: PropTypes.arrayOf(PropTypes.object).isRequired,
285
240
  /**
286
241
  * If `true`, animations are skiped.
287
242
  * @default false
@@ -0,0 +1,242 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["width", "height"];
4
+ import * as React from 'react';
5
+ import PropTypes from 'prop-types';
6
+ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
7
+ import ownerWindow from '@mui/utils/ownerWindow';
8
+ import { styled } from '@mui/material/styles';
9
+ import { ChartContainer } from '../ChartContainer';
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ const useChartDimensions = (inWidth, inHeight) => {
12
+ const rootRef = React.useRef(null);
13
+ const displayError = React.useRef(false);
14
+ const [width, setWidth] = React.useState(0);
15
+ const [height, setHeight] = React.useState(0);
16
+
17
+ // Adaptation of the `computeSizeAndPublishResizeEvent` from the grid.
18
+ const computeSize = React.useCallback(() => {
19
+ const mainEl = rootRef?.current;
20
+ if (!mainEl) {
21
+ return;
22
+ }
23
+ const win = ownerWindow(mainEl);
24
+ const computedStyle = win.getComputedStyle(mainEl);
25
+ const newHeight = Math.floor(parseFloat(computedStyle.height)) || 0;
26
+ const newWidth = Math.floor(parseFloat(computedStyle.width)) || 0;
27
+ setWidth(newWidth);
28
+ setHeight(newHeight);
29
+ }, []);
30
+ React.useEffect(() => {
31
+ // Ensure the error detection occurs after the first rendering.
32
+ displayError.current = true;
33
+ }, []);
34
+ useEnhancedEffect(() => {
35
+ if (inWidth !== undefined && inHeight !== undefined) {
36
+ return () => {};
37
+ }
38
+ computeSize();
39
+ const elementToObserve = rootRef.current;
40
+ if (typeof ResizeObserver === 'undefined') {
41
+ return () => {};
42
+ }
43
+ let animationFrame;
44
+ const observer = new ResizeObserver(() => {
45
+ // See https://github.com/mui/mui-x/issues/8733
46
+ animationFrame = requestAnimationFrame(() => {
47
+ computeSize();
48
+ });
49
+ });
50
+ if (elementToObserve) {
51
+ observer.observe(elementToObserve);
52
+ }
53
+ return () => {
54
+ if (animationFrame) {
55
+ window.cancelAnimationFrame(animationFrame);
56
+ }
57
+ if (elementToObserve) {
58
+ observer.unobserve(elementToObserve);
59
+ }
60
+ };
61
+ }, [computeSize, inHeight, inWidth]);
62
+ if (process.env.NODE_ENV !== 'production') {
63
+ if (displayError.current && inWidth === undefined && width === 0) {
64
+ console.error(`MUI X Charts: ChartContainer does not have \`width\` prop, and its container has no \`width\` defined.`);
65
+ displayError.current = false;
66
+ }
67
+ if (displayError.current && inHeight === undefined && height === 0) {
68
+ console.error(`MUI X Charts: ChartContainer does not have \`height\` prop, and its container has no \`height\` defined.`);
69
+ displayError.current = false;
70
+ }
71
+ }
72
+ return [rootRef, inWidth ?? width, inHeight ?? height];
73
+ };
74
+ const ResizableContainer = styled('div', {
75
+ name: 'MuiResponsiveChart',
76
+ slot: 'Container'
77
+ })(({
78
+ ownerState
79
+ }) => ({
80
+ width: ownerState.width ?? '100%',
81
+ height: ownerState.height ?? '100%',
82
+ display: 'flex',
83
+ position: 'relative',
84
+ flexGrow: 1,
85
+ flexDirection: 'column',
86
+ alignItems: 'center',
87
+ justifyContent: 'center',
88
+ overflow: 'hidden',
89
+ '&>svg': {
90
+ width: '100%',
91
+ height: '100%'
92
+ }
93
+ }));
94
+ const ResponsiveChartContainer = /*#__PURE__*/React.forwardRef(function ResponsiveChartContainer(props, ref) {
95
+ const {
96
+ width: inWidth,
97
+ height: inHeight
98
+ } = props,
99
+ other = _objectWithoutPropertiesLoose(props, _excluded);
100
+ const [containerRef, width, height] = useChartDimensions(inWidth, inHeight);
101
+ return /*#__PURE__*/_jsx(ResizableContainer, {
102
+ ref: containerRef,
103
+ ownerState: {
104
+ width: inWidth,
105
+ height: inHeight
106
+ },
107
+ children: width && height ? /*#__PURE__*/_jsx(ChartContainer, _extends({}, other, {
108
+ width: width,
109
+ height: height,
110
+ ref: ref
111
+ })) : null
112
+ });
113
+ });
114
+ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
115
+ // ----------------------------- Warning --------------------------------
116
+ // | These PropTypes are generated from the TypeScript type definitions |
117
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
118
+ // ----------------------------------------------------------------------
119
+ children: PropTypes.node,
120
+ className: PropTypes.string,
121
+ /**
122
+ * Color palette used to colorize multiple series.
123
+ * @default blueberryTwilightPalette
124
+ */
125
+ colors: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.func]),
126
+ /**
127
+ * An array of objects that can be used to populate series and axes data using their `dataKey` property.
128
+ */
129
+ dataset: PropTypes.arrayOf(PropTypes.object),
130
+ desc: PropTypes.string,
131
+ /**
132
+ * If `true`, the charts will not listen to the mouse move event.
133
+ * It might break interactive features, but will improve performance.
134
+ * @default false
135
+ */
136
+ disableAxisListener: PropTypes.bool,
137
+ /**
138
+ * The height of the chart in px. If not defined, it takes the height of the parent element.
139
+ * @default undefined
140
+ */
141
+ height: PropTypes.number,
142
+ /**
143
+ * The margin between the SVG and the drawing area.
144
+ * It's used for leaving some space for extra information such as the x- and y-axis or legend.
145
+ * Accepts an object with the optional properties: `top`, `bottom`, `left`, and `right`.
146
+ * @default object Depends on the charts type.
147
+ */
148
+ margin: PropTypes.shape({
149
+ bottom: PropTypes.number,
150
+ left: PropTypes.number,
151
+ right: PropTypes.number,
152
+ top: PropTypes.number
153
+ }),
154
+ /**
155
+ * The array of series to display.
156
+ * Each type of series has its own specificity.
157
+ * Please refer to the appropriate docs page to learn more about it.
158
+ */
159
+ series: PropTypes.arrayOf(PropTypes.object).isRequired,
160
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
161
+ title: PropTypes.string,
162
+ viewBox: PropTypes.shape({
163
+ height: PropTypes.number,
164
+ width: PropTypes.number,
165
+ x: PropTypes.number,
166
+ y: PropTypes.number
167
+ }),
168
+ /**
169
+ * The width of the chart in px. If not defined, it takes the width of the parent element.
170
+ * @default undefined
171
+ */
172
+ width: PropTypes.number,
173
+ /**
174
+ * The configuration of the x-axes.
175
+ * If not provided, a default axis config is used with id set to `DEFAULT_X_AXIS_KEY`.
176
+ */
177
+ xAxis: PropTypes.arrayOf(PropTypes.shape({
178
+ axisId: PropTypes.string,
179
+ classes: PropTypes.object,
180
+ data: PropTypes.array,
181
+ dataKey: PropTypes.string,
182
+ disableLine: PropTypes.bool,
183
+ disableTicks: PropTypes.bool,
184
+ fill: PropTypes.string,
185
+ hideTooltip: PropTypes.bool,
186
+ id: PropTypes.string,
187
+ label: PropTypes.string,
188
+ labelFontSize: PropTypes.number,
189
+ labelStyle: PropTypes.object,
190
+ max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
191
+ min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
192
+ position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
193
+ scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
194
+ slotProps: PropTypes.object,
195
+ slots: PropTypes.object,
196
+ stroke: PropTypes.string,
197
+ tickFontSize: PropTypes.number,
198
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
199
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
200
+ tickLabelStyle: PropTypes.object,
201
+ tickMaxStep: PropTypes.number,
202
+ tickMinStep: PropTypes.number,
203
+ tickNumber: PropTypes.number,
204
+ tickSize: PropTypes.number,
205
+ valueFormatter: PropTypes.func
206
+ })),
207
+ /**
208
+ * The configuration of the y-axes.
209
+ * If not provided, a default axis config is used with id set to `DEFAULT_Y_AXIS_KEY`.
210
+ */
211
+ yAxis: PropTypes.arrayOf(PropTypes.shape({
212
+ axisId: PropTypes.string,
213
+ classes: PropTypes.object,
214
+ data: PropTypes.array,
215
+ dataKey: PropTypes.string,
216
+ disableLine: PropTypes.bool,
217
+ disableTicks: PropTypes.bool,
218
+ fill: PropTypes.string,
219
+ hideTooltip: PropTypes.bool,
220
+ id: PropTypes.string,
221
+ label: PropTypes.string,
222
+ labelFontSize: PropTypes.number,
223
+ labelStyle: PropTypes.object,
224
+ max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
225
+ min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
226
+ position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
227
+ scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
228
+ slotProps: PropTypes.object,
229
+ slots: PropTypes.object,
230
+ stroke: PropTypes.string,
231
+ tickFontSize: PropTypes.number,
232
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
233
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
234
+ tickLabelStyle: PropTypes.object,
235
+ tickMaxStep: PropTypes.number,
236
+ tickMinStep: PropTypes.number,
237
+ tickNumber: PropTypes.number,
238
+ tickSize: PropTypes.number,
239
+ valueFormatter: PropTypes.func
240
+ }))
241
+ } : void 0;
242
+ export { ResponsiveChartContainer };
@@ -1,112 +1 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["width", "height"];
4
- import * as React from 'react';
5
- import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
6
- import ownerWindow from '@mui/utils/ownerWindow';
7
- import { styled } from '@mui/material/styles';
8
- import { ChartContainer } from '../ChartContainer';
9
- import { jsx as _jsx } from "react/jsx-runtime";
10
- const useChartDimensions = (inWidth, inHeight) => {
11
- const rootRef = React.useRef(null);
12
- const displayError = React.useRef(false);
13
- const [width, setWidth] = React.useState(0);
14
- const [height, setHeight] = React.useState(0);
15
-
16
- // Adaptation of the `computeSizeAndPublishResizeEvent` from the grid.
17
- const computeSize = React.useCallback(() => {
18
- const mainEl = rootRef?.current;
19
- if (!mainEl) {
20
- return;
21
- }
22
- const win = ownerWindow(mainEl);
23
- const computedStyle = win.getComputedStyle(mainEl);
24
- const newHeight = Math.floor(parseFloat(computedStyle.height)) || 0;
25
- const newWidth = Math.floor(parseFloat(computedStyle.width)) || 0;
26
- setWidth(newWidth);
27
- setHeight(newHeight);
28
- }, []);
29
- React.useEffect(() => {
30
- // Ensure the error detection occurs after the first rendering.
31
- displayError.current = true;
32
- }, []);
33
- useEnhancedEffect(() => {
34
- if (inWidth !== undefined && inHeight !== undefined) {
35
- return () => {};
36
- }
37
- computeSize();
38
- const elementToObserve = rootRef.current;
39
- if (typeof ResizeObserver === 'undefined') {
40
- return () => {};
41
- }
42
- let animationFrame;
43
- const observer = new ResizeObserver(() => {
44
- // See https://github.com/mui/mui-x/issues/8733
45
- animationFrame = requestAnimationFrame(() => {
46
- computeSize();
47
- });
48
- });
49
- if (elementToObserve) {
50
- observer.observe(elementToObserve);
51
- }
52
- return () => {
53
- if (animationFrame) {
54
- window.cancelAnimationFrame(animationFrame);
55
- }
56
- if (elementToObserve) {
57
- observer.unobserve(elementToObserve);
58
- }
59
- };
60
- }, [computeSize, inHeight, inWidth]);
61
- if (process.env.NODE_ENV !== 'production') {
62
- if (displayError.current && inWidth === undefined && width === 0) {
63
- console.error(`MUI X Charts: ChartContainer does not have \`width\` prop, and its container has no \`width\` defined.`);
64
- displayError.current = false;
65
- }
66
- if (displayError.current && inHeight === undefined && height === 0) {
67
- console.error(`MUI X Charts: ChartContainer does not have \`height\` prop, and its container has no \`height\` defined.`);
68
- displayError.current = false;
69
- }
70
- }
71
- return [rootRef, inWidth ?? width, inHeight ?? height];
72
- };
73
- const ResizableContainer = styled('div', {
74
- name: 'MuiResponsiveChart',
75
- slot: 'Container'
76
- })(({
77
- ownerState
78
- }) => ({
79
- width: ownerState.width ?? '100%',
80
- height: ownerState.height ?? '100%',
81
- display: 'flex',
82
- position: 'relative',
83
- flexGrow: 1,
84
- flexDirection: 'column',
85
- alignItems: 'center',
86
- justifyContent: 'center',
87
- overflow: 'hidden',
88
- '&>svg': {
89
- width: '100%',
90
- height: '100%'
91
- }
92
- }));
93
- export const ResponsiveChartContainer = /*#__PURE__*/React.forwardRef(function ResponsiveChartContainer(props, ref) {
94
- const {
95
- width: inWidth,
96
- height: inHeight
97
- } = props,
98
- other = _objectWithoutPropertiesLoose(props, _excluded);
99
- const [containerRef, width, height] = useChartDimensions(inWidth, inHeight);
100
- return /*#__PURE__*/_jsx(ResizableContainer, {
101
- ref: containerRef,
102
- ownerState: {
103
- width: inWidth,
104
- height: inHeight
105
- },
106
- children: width && height ? /*#__PURE__*/_jsx(ChartContainer, _extends({}, other, {
107
- width: width,
108
- height: height,
109
- ref: ref
110
- })) : null
111
- });
112
- });
1
+ export * from './ResponsiveChartContainer';