@mui/x-charts 7.0.0-beta.0 → 7.0.0-beta.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 (258) hide show
  1. package/BarChart/BarChart.d.ts +2 -1
  2. package/BarChart/BarChart.js +33 -12
  3. package/BarChart/BarElement.d.ts +20 -13
  4. package/BarChart/BarElement.js +7 -3
  5. package/BarChart/BarPlot.d.ts +11 -6
  6. package/BarChart/BarPlot.js +28 -15
  7. package/BarChart/formatter.js +1 -1
  8. package/CHANGELOG.md +406 -1
  9. package/ChartContainer/ChartContainer.js +6 -4
  10. package/ChartsAxis/ChartsAxis.js +4 -4
  11. package/ChartsLegend/ChartsLegend.d.ts +5 -54
  12. package/ChartsLegend/ChartsLegend.js +2 -307
  13. package/ChartsLegend/DefaultChartsLegend.d.ts +60 -0
  14. package/ChartsLegend/DefaultChartsLegend.js +294 -0
  15. package/ChartsLegend/index.d.ts +1 -0
  16. package/ChartsLegend/index.js +11 -0
  17. package/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.d.ts +20 -0
  18. package/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +83 -0
  19. package/ChartsOnAxisClickHandler/index.d.ts +1 -0
  20. package/ChartsOnAxisClickHandler/index.js +16 -0
  21. package/ChartsOnAxisClickHandler/package.json +6 -0
  22. package/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
  23. package/ChartsReferenceLine/ChartsXReferenceLine.js +1 -1
  24. package/ChartsReferenceLine/ChartsYReferenceLine.js +1 -1
  25. package/ChartsReferenceLine/common.d.ts +2 -1
  26. package/ChartsTooltip/ChartsAxisTooltipContent.js +6 -5
  27. package/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  28. package/ChartsTooltip/DefaultChartsAxisTooltipContent.js +7 -5
  29. package/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
  30. package/ChartsTooltip/utils.d.ts +4 -1
  31. package/ChartsTooltip/utils.js +15 -0
  32. package/ChartsVoronoiHandler/ChartsVoronoiHandler.d.ts +7 -0
  33. package/ChartsVoronoiHandler/ChartsVoronoiHandler.js +92 -44
  34. package/ChartsXAxis/ChartsXAxis.js +13 -9
  35. package/ChartsYAxis/ChartsYAxis.js +1 -1
  36. package/LineChart/AnimatedArea.d.ts +1361 -0
  37. package/LineChart/AnimatedArea.js +111 -0
  38. package/LineChart/AnimatedLine.d.ts +1361 -0
  39. package/LineChart/AnimatedLine.js +113 -0
  40. package/LineChart/AreaElement.d.ts +19 -18
  41. package/LineChart/AreaElement.js +17 -34
  42. package/LineChart/AreaPlot.d.ts +12 -7
  43. package/LineChart/AreaPlot.js +91 -58
  44. package/LineChart/LineChart.d.ts +13 -4
  45. package/LineChart/LineChart.js +45 -14
  46. package/LineChart/LineElement.d.ts +19 -18
  47. package/LineChart/LineElement.js +16 -36
  48. package/LineChart/LineHighlightElement.d.ts +3 -2
  49. package/LineChart/LineHighlightElement.js +5 -3
  50. package/LineChart/LinePlot.d.ts +12 -7
  51. package/LineChart/LinePlot.js +89 -56
  52. package/LineChart/MarkElement.d.ts +8 -4
  53. package/LineChart/MarkElement.js +27 -13
  54. package/LineChart/MarkPlot.d.ts +8 -1
  55. package/LineChart/MarkPlot.js +80 -51
  56. package/LineChart/formatter.js +1 -1
  57. package/LineChart/index.d.ts +2 -0
  58. package/LineChart/index.js +22 -0
  59. package/PieChart/PieArc.d.ts +3 -2
  60. package/PieChart/PieArc.js +1 -0
  61. package/PieChart/PieArcLabel.d.ts +3 -2
  62. package/PieChart/PieArcLabel.js +1 -0
  63. package/PieChart/PieArcLabelPlot.d.ts +1 -1
  64. package/PieChart/PieArcLabelPlot.js +2 -2
  65. package/PieChart/PieArcPlot.d.ts +2 -2
  66. package/PieChart/PieArcPlot.js +7 -7
  67. package/PieChart/PieChart.d.ts +1 -1
  68. package/PieChart/PieChart.js +14 -12
  69. package/PieChart/PiePlot.d.ts +1 -1
  70. package/PieChart/PiePlot.js +4 -4
  71. package/ResponsiveChartContainer/ResponsiveChartContainer.js +6 -4
  72. package/ScatterChart/Scatter.d.ts +7 -1
  73. package/ScatterChart/Scatter.js +17 -3
  74. package/ScatterChart/ScatterChart.d.ts +8 -2
  75. package/ScatterChart/ScatterChart.js +21 -10
  76. package/ScatterChart/ScatterPlot.d.ts +1 -1
  77. package/ScatterChart/ScatterPlot.js +10 -2
  78. package/SparkLineChart/SparkLineChart.d.ts +1 -1
  79. package/SparkLineChart/SparkLineChart.js +7 -4
  80. package/context/CartesianContextProvider.js +8 -6
  81. package/context/DrawingProvider.d.ts +6 -1
  82. package/context/DrawingProvider.js +9 -2
  83. package/context/InteractionProvider.d.ts +3 -3
  84. package/esm/BarChart/BarChart.js +33 -12
  85. package/esm/BarChart/BarElement.js +7 -3
  86. package/esm/BarChart/BarPlot.js +27 -15
  87. package/esm/BarChart/formatter.js +1 -1
  88. package/esm/ChartContainer/ChartContainer.js +6 -4
  89. package/esm/ChartsAxis/ChartsAxis.js +4 -4
  90. package/esm/ChartsLegend/ChartsLegend.js +2 -307
  91. package/esm/ChartsLegend/DefaultChartsLegend.js +286 -0
  92. package/esm/ChartsLegend/index.js +1 -0
  93. package/esm/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +77 -0
  94. package/esm/ChartsOnAxisClickHandler/index.js +1 -0
  95. package/esm/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
  96. package/esm/ChartsReferenceLine/ChartsXReferenceLine.js +1 -1
  97. package/esm/ChartsReferenceLine/ChartsYReferenceLine.js +1 -1
  98. package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +6 -5
  99. package/esm/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  100. package/esm/ChartsTooltip/DefaultChartsAxisTooltipContent.js +8 -5
  101. package/esm/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
  102. package/esm/ChartsTooltip/utils.js +12 -0
  103. package/esm/ChartsVoronoiHandler/ChartsVoronoiHandler.js +92 -44
  104. package/esm/ChartsXAxis/ChartsXAxis.js +13 -9
  105. package/esm/ChartsYAxis/ChartsYAxis.js +1 -1
  106. package/esm/LineChart/AnimatedArea.js +103 -0
  107. package/esm/LineChart/AnimatedLine.js +105 -0
  108. package/esm/LineChart/AreaElement.js +16 -33
  109. package/esm/LineChart/AreaPlot.js +92 -59
  110. package/esm/LineChart/LineChart.js +45 -14
  111. package/esm/LineChart/LineElement.js +16 -35
  112. package/esm/LineChart/LineHighlightElement.js +5 -3
  113. package/esm/LineChart/LinePlot.js +90 -57
  114. package/esm/LineChart/MarkElement.js +27 -13
  115. package/esm/LineChart/MarkPlot.js +80 -51
  116. package/esm/LineChart/formatter.js +1 -1
  117. package/esm/LineChart/index.js +2 -0
  118. package/esm/PieChart/PieArc.js +1 -0
  119. package/esm/PieChart/PieArcLabel.js +1 -0
  120. package/esm/PieChart/PieArcLabelPlot.js +2 -2
  121. package/esm/PieChart/PieArcPlot.js +7 -7
  122. package/esm/PieChart/PieChart.js +14 -12
  123. package/esm/PieChart/PiePlot.js +4 -4
  124. package/esm/ResponsiveChartContainer/ResponsiveChartContainer.js +6 -4
  125. package/esm/ScatterChart/Scatter.js +17 -3
  126. package/esm/ScatterChart/ScatterChart.js +21 -10
  127. package/esm/ScatterChart/ScatterPlot.js +10 -2
  128. package/esm/SparkLineChart/SparkLineChart.js +7 -4
  129. package/esm/context/CartesianContextProvider.js +8 -6
  130. package/esm/context/DrawingProvider.js +9 -2
  131. package/esm/hooks/useDrawingArea.js +7 -3
  132. package/esm/index.js +1 -0
  133. package/esm/internals/geometry.js +1 -1
  134. package/esm/internals/useAnimatedPath.js +29 -0
  135. package/esm/internals/utils.js +7 -0
  136. package/hooks/useDrawingArea.d.ts +2 -0
  137. package/hooks/useDrawingArea.js +7 -3
  138. package/index.d.ts +1 -0
  139. package/index.js +12 -1
  140. package/internals/defaultizeColor.d.ts +16 -16
  141. package/internals/defaultizeValueFormatter.d.ts +4 -7
  142. package/internals/geometry.js +1 -1
  143. package/internals/stackSeries.d.ts +4 -7
  144. package/internals/useAnimatedPath.d.ts +1 -0
  145. package/internals/useAnimatedPath.js +38 -0
  146. package/internals/utils.d.ts +4 -0
  147. package/internals/utils.js +8 -0
  148. package/legacy/BarChart/BarChart.js +33 -12
  149. package/legacy/BarChart/BarElement.js +6 -2
  150. package/legacy/BarChart/BarPlot.js +28 -14
  151. package/legacy/BarChart/formatter.js +1 -1
  152. package/legacy/ChartContainer/ChartContainer.js +6 -4
  153. package/legacy/ChartsAxis/ChartsAxis.js +4 -4
  154. package/legacy/ChartsLegend/ChartsLegend.js +2 -323
  155. package/legacy/ChartsLegend/DefaultChartsLegend.js +302 -0
  156. package/legacy/ChartsLegend/index.js +1 -0
  157. package/legacy/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +75 -0
  158. package/legacy/ChartsOnAxisClickHandler/index.js +1 -0
  159. package/legacy/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
  160. package/legacy/ChartsReferenceLine/ChartsXReferenceLine.js +1 -1
  161. package/legacy/ChartsReferenceLine/ChartsYReferenceLine.js +1 -1
  162. package/legacy/ChartsTooltip/ChartsAxisTooltipContent.js +6 -7
  163. package/legacy/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  164. package/legacy/ChartsTooltip/DefaultChartsAxisTooltipContent.js +8 -5
  165. package/legacy/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
  166. package/legacy/ChartsTooltip/utils.js +12 -0
  167. package/legacy/ChartsVoronoiHandler/ChartsVoronoiHandler.js +88 -44
  168. package/legacy/ChartsXAxis/ChartsXAxis.js +12 -8
  169. package/legacy/ChartsYAxis/ChartsYAxis.js +1 -1
  170. package/legacy/LineChart/AnimatedArea.js +102 -0
  171. package/legacy/LineChart/AnimatedLine.js +104 -0
  172. package/legacy/LineChart/AreaElement.js +15 -35
  173. package/legacy/LineChart/AreaPlot.js +102 -66
  174. package/legacy/LineChart/LineChart.js +45 -14
  175. package/legacy/LineChart/LineElement.js +15 -37
  176. package/legacy/LineChart/LineHighlightElement.js +5 -3
  177. package/legacy/LineChart/LinePlot.js +97 -63
  178. package/legacy/LineChart/MarkElement.js +30 -12
  179. package/legacy/LineChart/MarkPlot.js +83 -53
  180. package/legacy/LineChart/formatter.js +1 -1
  181. package/legacy/LineChart/index.js +2 -0
  182. package/legacy/PieChart/PieArc.js +1 -0
  183. package/legacy/PieChart/PieArcLabel.js +1 -0
  184. package/legacy/PieChart/PieArcLabelPlot.js +2 -2
  185. package/legacy/PieChart/PieArcPlot.js +7 -7
  186. package/legacy/PieChart/PieChart.js +14 -12
  187. package/legacy/PieChart/PiePlot.js +4 -4
  188. package/legacy/ResponsiveChartContainer/ResponsiveChartContainer.js +6 -4
  189. package/legacy/ScatterChart/Scatter.js +19 -3
  190. package/legacy/ScatterChart/ScatterChart.js +21 -10
  191. package/legacy/ScatterChart/ScatterPlot.js +10 -2
  192. package/legacy/SparkLineChart/SparkLineChart.js +8 -5
  193. package/legacy/context/CartesianContextProvider.js +8 -6
  194. package/legacy/context/DrawingProvider.js +11 -2
  195. package/legacy/hooks/useDrawingArea.js +7 -3
  196. package/legacy/index.js +2 -1
  197. package/legacy/internals/geometry.js +1 -1
  198. package/legacy/internals/useAnimatedPath.js +32 -0
  199. package/legacy/internals/utils.js +7 -0
  200. package/models/axis.d.ts +7 -2
  201. package/models/seriesType/common.d.ts +2 -1
  202. package/models/seriesType/config.d.ts +7 -12
  203. package/models/seriesType/line.d.ts +2 -2
  204. package/models/seriesType/pie.d.ts +7 -3
  205. package/models/seriesType/scatter.d.ts +5 -2
  206. package/modern/BarChart/BarChart.js +33 -12
  207. package/modern/BarChart/BarElement.js +7 -3
  208. package/modern/BarChart/BarPlot.js +27 -15
  209. package/modern/BarChart/formatter.js +1 -1
  210. package/modern/ChartContainer/ChartContainer.js +6 -4
  211. package/modern/ChartsAxis/ChartsAxis.js +4 -4
  212. package/modern/ChartsLegend/ChartsLegend.js +2 -307
  213. package/modern/ChartsLegend/DefaultChartsLegend.js +286 -0
  214. package/modern/ChartsLegend/index.js +1 -0
  215. package/modern/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +75 -0
  216. package/modern/ChartsOnAxisClickHandler/index.js +1 -0
  217. package/modern/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
  218. package/modern/ChartsReferenceLine/ChartsXReferenceLine.js +1 -1
  219. package/modern/ChartsReferenceLine/ChartsYReferenceLine.js +1 -1
  220. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +6 -5
  221. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  222. package/modern/ChartsTooltip/DefaultChartsAxisTooltipContent.js +7 -5
  223. package/modern/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
  224. package/modern/ChartsTooltip/utils.js +12 -0
  225. package/modern/ChartsVoronoiHandler/ChartsVoronoiHandler.js +92 -44
  226. package/modern/ChartsXAxis/ChartsXAxis.js +13 -9
  227. package/modern/ChartsYAxis/ChartsYAxis.js +1 -1
  228. package/modern/LineChart/AnimatedArea.js +103 -0
  229. package/modern/LineChart/AnimatedLine.js +105 -0
  230. package/modern/LineChart/AreaElement.js +16 -33
  231. package/modern/LineChart/AreaPlot.js +91 -58
  232. package/modern/LineChart/LineChart.js +45 -14
  233. package/modern/LineChart/LineElement.js +16 -35
  234. package/modern/LineChart/LineHighlightElement.js +5 -3
  235. package/modern/LineChart/LinePlot.js +89 -56
  236. package/modern/LineChart/MarkElement.js +27 -13
  237. package/modern/LineChart/MarkPlot.js +80 -51
  238. package/modern/LineChart/formatter.js +1 -1
  239. package/modern/LineChart/index.js +2 -0
  240. package/modern/PieChart/PieArc.js +1 -0
  241. package/modern/PieChart/PieArcLabel.js +1 -0
  242. package/modern/PieChart/PieArcLabelPlot.js +2 -2
  243. package/modern/PieChart/PieArcPlot.js +7 -7
  244. package/modern/PieChart/PieChart.js +14 -12
  245. package/modern/PieChart/PiePlot.js +4 -4
  246. package/modern/ResponsiveChartContainer/ResponsiveChartContainer.js +6 -4
  247. package/modern/ScatterChart/Scatter.js +17 -3
  248. package/modern/ScatterChart/ScatterChart.js +21 -10
  249. package/modern/ScatterChart/ScatterPlot.js +10 -2
  250. package/modern/SparkLineChart/SparkLineChart.js +7 -4
  251. package/modern/context/CartesianContextProvider.js +8 -6
  252. package/modern/context/DrawingProvider.js +9 -2
  253. package/modern/hooks/useDrawingArea.js +7 -3
  254. package/modern/index.js +2 -1
  255. package/modern/internals/geometry.js +1 -1
  256. package/modern/internals/useAnimatedPath.js +29 -0
  257. package/modern/internals/utils.js +7 -0
  258. package/package.json +6 -5
@@ -1,16 +1,15 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["id", "classes", "color", "highlightScope", "slots", "slotProps"];
3
+ const _excluded = ["id", "classes", "color", "highlightScope", "slots", "slotProps", "onClick"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import composeClasses from '@mui/utils/composeClasses';
7
7
  import { useSlotProps } from '@mui/base/utils';
8
8
  import generateUtilityClass from '@mui/utils/generateUtilityClass';
9
- import { styled } from '@mui/material/styles';
10
9
  import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
11
- import { color as d3Color } from 'd3-color';
12
10
  import { getIsFaded, getIsHighlighted, useInteractionItemProps } from '../hooks/useInteractionItemProps';
13
11
  import { InteractionContext } from '../context/InteractionProvider';
12
+ import { AnimatedArea } from './AnimatedArea';
14
13
  import { jsx as _jsx } from "react/jsx-runtime";
15
14
  export function getAreaElementUtilityClass(slot) {
16
15
  return generateUtilityClass('MuiAreaElement', slot);
@@ -28,33 +27,6 @@ const useUtilityClasses = ownerState => {
28
27
  };
29
28
  return composeClasses(slots, getAreaElementUtilityClass, classes);
30
29
  };
31
- export const AreaElementPath = styled('path', {
32
- name: 'MuiAreaElement',
33
- slot: 'Root',
34
- overridesResolver: (_, styles) => styles.root
35
- })(({
36
- ownerState
37
- }) => ({
38
- stroke: 'none',
39
- fill: ownerState.isHighlighted ? d3Color(ownerState.color).brighter(1).formatHex() : d3Color(ownerState.color).brighter(0.5).formatHex(),
40
- transition: 'opacity 0.2s ease-in, fill 0.2s ease-in',
41
- opacity: ownerState.isFaded ? 0.3 : 1
42
- }));
43
- AreaElementPath.propTypes = {
44
- // ----------------------------- Warning --------------------------------
45
- // | These PropTypes are generated from the TypeScript type definitions |
46
- // | To update them edit the TypeScript types and run "yarn proptypes" |
47
- // ----------------------------------------------------------------------
48
- as: PropTypes.elementType,
49
- ownerState: PropTypes.shape({
50
- classes: PropTypes.object,
51
- color: PropTypes.string.isRequired,
52
- id: PropTypes.string.isRequired,
53
- isFaded: PropTypes.bool.isRequired,
54
- isHighlighted: PropTypes.bool.isRequired
55
- }).isRequired,
56
- sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
57
- };
58
30
  /**
59
31
  * Demos:
60
32
  *
@@ -73,7 +45,8 @@ function AreaElement(props) {
73
45
  color,
74
46
  highlightScope,
75
47
  slots,
76
- slotProps
48
+ slotProps,
49
+ onClick
77
50
  } = props,
78
51
  other = _objectWithoutPropertiesLoose(props, _excluded);
79
52
  const getInteractionItemProps = useInteractionItemProps(highlightScope);
@@ -96,7 +69,7 @@ function AreaElement(props) {
96
69
  isHighlighted
97
70
  };
98
71
  const classes = useUtilityClasses(ownerState);
99
- const Area = (_slots$area = slots == null ? void 0 : slots.area) != null ? _slots$area : AreaElementPath;
72
+ const Area = (_slots$area = slots == null ? void 0 : slots.area) != null ? _slots$area : AnimatedArea;
100
73
  const areaProps = useSlotProps({
101
74
  elementType: Area,
102
75
  externalSlotProps: slotProps == null ? void 0 : slotProps.area,
@@ -104,7 +77,9 @@ function AreaElement(props) {
104
77
  type: 'line',
105
78
  seriesId: id
106
79
  }), {
107
- className: classes.root
80
+ className: classes.root,
81
+ onClick,
82
+ cursor: onClick ? 'pointer' : 'unset'
108
83
  }),
109
84
  ownerState
110
85
  });
@@ -116,10 +91,18 @@ process.env.NODE_ENV !== "production" ? AreaElement.propTypes = {
116
91
  // | To update them edit the TypeScript types and run "yarn proptypes" |
117
92
  // ----------------------------------------------------------------------
118
93
  classes: PropTypes.object,
94
+ color: PropTypes.string.isRequired,
95
+ d: PropTypes.string.isRequired,
119
96
  highlightScope: PropTypes.shape({
120
97
  faded: PropTypes.oneOf(['global', 'none', 'series']),
121
98
  highlighted: PropTypes.oneOf(['item', 'none', 'series'])
122
99
  }),
100
+ id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
101
+ /**
102
+ * If `true`, animations are skipped.
103
+ * @default false
104
+ */
105
+ skipAnimation: PropTypes.bool,
123
106
  /**
124
107
  * The props used for each component slot.
125
108
  * @default {}
@@ -1,6 +1,6 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["slots", "slotProps"];
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ const _excluded = ["slots", "slotProps", "onItemClick", "skipAnimation"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import { area as d3Area } from 'd3-shape';
@@ -11,27 +11,11 @@ import { getValueToPositionMapper } from '../hooks/useScale';
11
11
  import getCurveFactory from '../internals/getCurve';
12
12
  import { DEFAULT_X_AXIS_KEY } from '../constants';
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
- /**
15
- * Demos:
16
- *
17
- * - [Lines](https://mui.com/x/react-charts/lines/)
18
- * - [Areas demonstration](https://mui.com/x/react-charts/areas-demo/)
19
- * - [Stacking](https://mui.com/x/react-charts/stacking/)
20
- *
21
- * API:
22
- *
23
- * - [AreaPlot API](https://mui.com/x/api/charts/area-plot/)
24
- */
25
- function AreaPlot(props) {
26
- const {
27
- slots,
28
- slotProps
29
- } = props,
30
- other = _objectWithoutPropertiesLoose(props, _excluded);
14
+ const useAggregatedData = () => {
31
15
  const seriesData = React.useContext(SeriesContext).line;
32
16
  const axisData = React.useContext(CartesianContext);
33
17
  if (seriesData === undefined) {
34
- return null;
18
+ return [];
35
19
  }
36
20
  const {
37
21
  series,
@@ -45,47 +29,85 @@ function AreaPlot(props) {
45
29
  } = axisData;
46
30
  const defaultXAxisId = xAxisIds[0];
47
31
  const defaultYAxisId = yAxisIds[0];
48
- return /*#__PURE__*/_jsx("g", _extends({}, other, {
49
- children: stackingGroups.flatMap(({
50
- ids: groupIds
51
- }) => {
52
- return groupIds.flatMap(seriesId => {
53
- var _xData$map;
54
- const {
55
- xAxisKey = defaultXAxisId,
56
- yAxisKey = defaultYAxisId,
57
- stackedData,
58
- data,
59
- connectNulls
60
- } = series[seriesId];
61
- const xScale = getValueToPositionMapper(xAxis[xAxisKey].scale);
62
- const yScale = yAxis[yAxisKey].scale;
63
- const xData = xAxis[xAxisKey].data;
64
- if (process.env.NODE_ENV !== 'production') {
65
- if (xData === undefined) {
66
- throw new Error(`MUI X Charts: ${xAxisKey === DEFAULT_X_AXIS_KEY ? 'The first `xAxis`' : `The x-axis with id "${xAxisKey}"`} should have data property to be able to display a line plot.`);
67
- }
68
- if (xData.length < stackedData.length) {
69
- throw new Error(`MUI X Charts: The data length of the x axis (${xData.length} items) is lower than the length of series (${stackedData.length} items).`);
70
- }
32
+ return stackingGroups.flatMap(({
33
+ ids: groupIds
34
+ }) => {
35
+ return groupIds.flatMap(seriesId => {
36
+ var _xData$map;
37
+ const {
38
+ xAxisKey = defaultXAxisId,
39
+ yAxisKey = defaultYAxisId,
40
+ stackedData,
41
+ data,
42
+ connectNulls
43
+ } = series[seriesId];
44
+ const xScale = getValueToPositionMapper(xAxis[xAxisKey].scale);
45
+ const yScale = yAxis[yAxisKey].scale;
46
+ const xData = xAxis[xAxisKey].data;
47
+ if (process.env.NODE_ENV !== 'production') {
48
+ if (xData === undefined) {
49
+ throw new Error(`MUI X Charts: ${xAxisKey === DEFAULT_X_AXIS_KEY ? 'The first `xAxis`' : `The x-axis with id "${xAxisKey}"`} should have data property to be able to display a line plot.`);
71
50
  }
72
- const areaPath = d3Area().x(d => xScale(d.x)).defined((_, i) => connectNulls || data[i] != null).y0(d => d.y && yScale(d.y[0])).y1(d => d.y && yScale(d.y[1]));
73
- const curve = getCurveFactory(series[seriesId].curve);
74
- const formattedData = (_xData$map = xData == null ? void 0 : xData.map((x, index) => ({
75
- x,
76
- y: stackedData[index]
77
- }))) != null ? _xData$map : [];
78
- const d3Data = connectNulls ? formattedData.filter((_, i) => data[i] != null) : formattedData;
79
- return !!series[seriesId].area && /*#__PURE__*/_jsx(AreaElement, {
80
- id: seriesId,
81
- d: areaPath.curve(curve)(d3Data) || undefined,
82
- color: series[seriesId].color,
83
- highlightScope: series[seriesId].highlightScope,
84
- slots: slots,
85
- slotProps: slotProps
86
- }, seriesId);
51
+ if (xData.length < stackedData.length) {
52
+ throw new Error(`MUI X Charts: The data length of the x axis (${xData.length} items) is lower than the length of series (${stackedData.length} items).`);
53
+ }
54
+ }
55
+ const areaPath = d3Area().x(d => xScale(d.x)).defined((_, i) => connectNulls || data[i] != null).y0(d => d.y && yScale(d.y[0])).y1(d => d.y && yScale(d.y[1]));
56
+ const curve = getCurveFactory(series[seriesId].curve);
57
+ const formattedData = (_xData$map = xData == null ? void 0 : xData.map((x, index) => ({
58
+ x,
59
+ y: stackedData[index]
60
+ }))) != null ? _xData$map : [];
61
+ const d3Data = connectNulls ? formattedData.filter((_, i) => data[i] != null) : formattedData;
62
+ const d = areaPath.curve(curve)(d3Data) || '';
63
+ return _extends({}, series[seriesId], {
64
+ d,
65
+ seriesId
87
66
  });
88
- })
67
+ });
68
+ });
69
+ };
70
+
71
+ /**
72
+ * Demos:
73
+ *
74
+ * - [Lines](https://mui.com/x/react-charts/lines/)
75
+ * - [Areas demonstration](https://mui.com/x/react-charts/areas-demo/)
76
+ * - [Stacking](https://mui.com/x/react-charts/stacking/)
77
+ *
78
+ * API:
79
+ *
80
+ * - [AreaPlot API](https://mui.com/x/api/charts/area-plot/)
81
+ */
82
+ function AreaPlot(props) {
83
+ const {
84
+ slots,
85
+ slotProps,
86
+ onItemClick,
87
+ skipAnimation
88
+ } = props,
89
+ other = _objectWithoutPropertiesLoose(props, _excluded);
90
+ const completedData = useAggregatedData();
91
+ return /*#__PURE__*/_jsx("g", _extends({}, other, {
92
+ children: completedData.reverse().map(({
93
+ d,
94
+ seriesId,
95
+ color,
96
+ highlightScope,
97
+ area
98
+ }) => !!area && /*#__PURE__*/_jsx(AreaElement, {
99
+ id: seriesId,
100
+ d: d,
101
+ color: color,
102
+ highlightScope: highlightScope,
103
+ slots: slots,
104
+ slotProps: slotProps,
105
+ onClick: onItemClick && (event => onItemClick(event, {
106
+ type: 'line',
107
+ seriesId
108
+ })),
109
+ skipAnimation: skipAnimation
110
+ }, seriesId))
89
111
  }));
90
112
  }
91
113
  process.env.NODE_ENV !== "production" ? AreaPlot.propTypes = {
@@ -93,6 +115,17 @@ process.env.NODE_ENV !== "production" ? AreaPlot.propTypes = {
93
115
  // | These PropTypes are generated from the TypeScript type definitions |
94
116
  // | To update them edit the TypeScript types and run "yarn proptypes" |
95
117
  // ----------------------------------------------------------------------
118
+ /**
119
+ * Callback fired when a line area item is clicked.
120
+ * @param {React.MouseEvent<SVGPathElement, MouseEvent>} event The event source of the callback.
121
+ * @param {LineItemIdentifier} lineItemIdentifier The line item identifier.
122
+ */
123
+ onItemClick: PropTypes.func,
124
+ /**
125
+ * If `true`, animations are skipped.
126
+ * @default false
127
+ */
128
+ skipAnimation: PropTypes.bool,
96
129
  /**
97
130
  * The props used for each component slot.
98
131
  * @default {}
@@ -13,6 +13,7 @@ import { ChartsLegend } from '../ChartsLegend';
13
13
  import { ChartsAxisHighlight } from '../ChartsAxisHighlight';
14
14
  import { ChartsClipPath } from '../ChartsClipPath';
15
15
  import { LineHighlightPlot } from './LineHighlightPlot';
16
+ import { ChartsOnAxisClickHandler } from '../ChartsOnAxisClickHandler';
16
17
  import { jsx as _jsx } from "react/jsx-runtime";
17
18
  import { jsxs as _jsxs } from "react/jsx-runtime";
18
19
  /**
@@ -37,6 +38,10 @@ const LineChart = /*#__PURE__*/React.forwardRef(function LineChart(props, ref) {
37
38
  dataset,
38
39
  sx,
39
40
  tooltip,
41
+ onAxisClick,
42
+ onAreaClick,
43
+ onLineClick,
44
+ onMarkClick,
40
45
  axisHighlight = {
41
46
  x: 'line'
42
47
  },
@@ -48,7 +53,8 @@ const LineChart = /*#__PURE__*/React.forwardRef(function LineChart(props, ref) {
48
53
  bottomAxis,
49
54
  children,
50
55
  slots,
51
- slotProps
56
+ slotProps,
57
+ skipAnimation
52
58
  } = props;
53
59
  const id = useId();
54
60
  const clipPathId = `${id}-clip-path`;
@@ -75,15 +81,21 @@ const LineChart = /*#__PURE__*/React.forwardRef(function LineChart(props, ref) {
75
81
  colors: colors,
76
82
  dataset: dataset,
77
83
  sx: sx,
78
- disableAxisListener: (tooltip == null ? void 0 : tooltip.trigger) !== 'axis' && (axisHighlight == null ? void 0 : axisHighlight.x) === 'none' && (axisHighlight == null ? void 0 : axisHighlight.y) === 'none',
79
- children: [/*#__PURE__*/_jsxs("g", {
84
+ disableAxisListener: (tooltip == null ? void 0 : tooltip.trigger) !== 'axis' && (axisHighlight == null ? void 0 : axisHighlight.x) === 'none' && (axisHighlight == null ? void 0 : axisHighlight.y) === 'none' && !onAxisClick,
85
+ children: [onAxisClick && /*#__PURE__*/_jsx(ChartsOnAxisClickHandler, {
86
+ onAxisClick: onAxisClick
87
+ }), /*#__PURE__*/_jsxs("g", {
80
88
  clipPath: `url(#${clipPathId})`,
81
89
  children: [/*#__PURE__*/_jsx(AreaPlot, {
82
90
  slots: slots,
83
- slotProps: slotProps
91
+ slotProps: slotProps,
92
+ onItemClick: onAreaClick,
93
+ skipAnimation: skipAnimation
84
94
  }), /*#__PURE__*/_jsx(LinePlot, {
85
95
  slots: slots,
86
- slotProps: slotProps
96
+ slotProps: slotProps,
97
+ onItemClick: onLineClick,
98
+ skipAnimation: skipAnimation
87
99
  })]
88
100
  }), /*#__PURE__*/_jsx(ChartsAxis, {
89
101
  topAxis: topAxis,
@@ -94,7 +106,9 @@ const LineChart = /*#__PURE__*/React.forwardRef(function LineChart(props, ref) {
94
106
  slotProps: slotProps
95
107
  }), /*#__PURE__*/_jsx(ChartsAxisHighlight, _extends({}, axisHighlight)), /*#__PURE__*/_jsx(MarkPlot, {
96
108
  slots: slots,
97
- slotProps: slotProps
109
+ slotProps: slotProps,
110
+ onItemClick: onMarkClick,
111
+ skipAnimation: skipAnimation
98
112
  }), /*#__PURE__*/_jsx(LineHighlightPlot, {
99
113
  slots: slots,
100
114
  slotProps: slotProps
@@ -132,7 +146,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
132
146
  * @default xAxisIds[0] The id of the first provided axis
133
147
  */
134
148
  bottomAxis: PropTypes.oneOfType([PropTypes.shape({
135
- axisId: PropTypes.string,
149
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
136
150
  classes: PropTypes.object,
137
151
  disableLine: PropTypes.bool,
138
152
  disableTicks: PropTypes.bool,
@@ -186,7 +200,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
186
200
  * @default yAxisIds[0] The id of the first provided axis
187
201
  */
188
202
  leftAxis: PropTypes.oneOfType([PropTypes.shape({
189
- axisId: PropTypes.string,
203
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
190
204
  classes: PropTypes.object,
191
205
  disableLine: PropTypes.bool,
192
206
  disableTicks: PropTypes.bool,
@@ -233,13 +247,23 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
233
247
  right: PropTypes.number,
234
248
  top: PropTypes.number
235
249
  }),
250
+ onAreaClick: PropTypes.func,
251
+ /**
252
+ * The function called for onClick events.
253
+ * The second argument contains information about all line/bar elements at the current mouse position.
254
+ * @param {MouseEvent} event The mouse event recorded on the `<svg/>` element.
255
+ * @param {null | AxisData} data The data about the clicked axis and items associated with it.
256
+ */
257
+ onAxisClick: PropTypes.func,
258
+ onLineClick: PropTypes.func,
259
+ onMarkClick: PropTypes.func,
236
260
  /**
237
261
  * Indicate which axis to display the right of the charts.
238
262
  * Can be a string (the id of the axis) or an object `ChartsYAxisProps`.
239
263
  * @default null
240
264
  */
241
265
  rightAxis: PropTypes.oneOfType([PropTypes.shape({
242
- axisId: PropTypes.string,
266
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
243
267
  classes: PropTypes.object,
244
268
  disableLine: PropTypes.bool,
245
269
  disableTicks: PropTypes.bool,
@@ -261,6 +285,11 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
261
285
  tickSize: PropTypes.number
262
286
  }), PropTypes.string]),
263
287
  series: PropTypes.arrayOf(PropTypes.object).isRequired,
288
+ /**
289
+ * If `true`, animations are skipped.
290
+ * @default false
291
+ */
292
+ skipAnimation: PropTypes.bool,
264
293
  /**
265
294
  * The props used for each component slot.
266
295
  * @default {}
@@ -287,7 +316,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
287
316
  * @default null
288
317
  */
289
318
  topAxis: PropTypes.oneOfType([PropTypes.shape({
290
- axisId: PropTypes.string,
319
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
291
320
  classes: PropTypes.object,
292
321
  disableLine: PropTypes.bool,
293
322
  disableTicks: PropTypes.bool,
@@ -324,7 +353,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
324
353
  * If not provided, a default axis config is used with id set to `DEFAULT_X_AXIS_KEY`.
325
354
  */
326
355
  xAxis: PropTypes.arrayOf(PropTypes.shape({
327
- axisId: PropTypes.string,
356
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
328
357
  classes: PropTypes.object,
329
358
  data: PropTypes.array,
330
359
  dataKey: PropTypes.string,
@@ -332,13 +361,14 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
332
361
  disableTicks: PropTypes.bool,
333
362
  fill: PropTypes.string,
334
363
  hideTooltip: PropTypes.bool,
335
- id: PropTypes.string,
364
+ id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
336
365
  label: PropTypes.string,
337
366
  labelFontSize: PropTypes.number,
338
367
  labelStyle: PropTypes.object,
339
368
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
340
369
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
341
370
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
371
+ reverse: PropTypes.bool,
342
372
  scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
343
373
  slotProps: PropTypes.object,
344
374
  slots: PropTypes.object,
@@ -358,7 +388,7 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
358
388
  * If not provided, a default axis config is used with id set to `DEFAULT_Y_AXIS_KEY`.
359
389
  */
360
390
  yAxis: PropTypes.arrayOf(PropTypes.shape({
361
- axisId: PropTypes.string,
391
+ axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
362
392
  classes: PropTypes.object,
363
393
  data: PropTypes.array,
364
394
  dataKey: PropTypes.string,
@@ -366,13 +396,14 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
366
396
  disableTicks: PropTypes.bool,
367
397
  fill: PropTypes.string,
368
398
  hideTooltip: PropTypes.bool,
369
- id: PropTypes.string,
399
+ id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
370
400
  label: PropTypes.string,
371
401
  labelFontSize: PropTypes.number,
372
402
  labelStyle: PropTypes.object,
373
403
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
374
404
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
375
405
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
406
+ reverse: PropTypes.bool,
376
407
  scaleType: PropTypes.oneOf(['band', 'linear', 'log', 'point', 'pow', 'sqrt', 'time', 'utc']),
377
408
  slotProps: PropTypes.object,
378
409
  slots: PropTypes.object,
@@ -1,16 +1,15 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["id", "classes", "color", "highlightScope", "slots", "slotProps"];
3
+ const _excluded = ["id", "classes", "color", "highlightScope", "slots", "slotProps", "onClick"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
- import { color as d3Color } from 'd3-color';
7
6
  import composeClasses from '@mui/utils/composeClasses';
8
7
  import { useSlotProps } from '@mui/base/utils';
9
8
  import generateUtilityClass from '@mui/utils/generateUtilityClass';
10
- import { styled } from '@mui/material/styles';
11
9
  import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
12
10
  import { InteractionContext } from '../context/InteractionProvider';
13
11
  import { getIsFaded, getIsHighlighted, useInteractionItemProps } from '../hooks/useInteractionItemProps';
12
+ import { AnimatedLine } from './AnimatedLine';
14
13
  import { jsx as _jsx } from "react/jsx-runtime";
15
14
  export function getLineElementUtilityClass(slot) {
16
15
  return generateUtilityClass('MuiLineElement', slot);
@@ -28,35 +27,6 @@ const useUtilityClasses = ownerState => {
28
27
  };
29
28
  return composeClasses(slots, getLineElementUtilityClass, classes);
30
29
  };
31
- export const LineElementPath = styled('path', {
32
- name: 'MuiLineElement',
33
- slot: 'Root',
34
- overridesResolver: (_, styles) => styles.root
35
- })(({
36
- ownerState
37
- }) => ({
38
- strokeWidth: 2,
39
- strokeLinejoin: 'round',
40
- fill: 'none',
41
- stroke: ownerState.isHighlighted ? d3Color(ownerState.color).brighter(0.5).formatHex() : ownerState.color,
42
- transition: 'opacity 0.2s ease-in, stroke 0.2s ease-in',
43
- opacity: ownerState.isFaded ? 0.3 : 1
44
- }));
45
- LineElementPath.propTypes = {
46
- // ----------------------------- Warning --------------------------------
47
- // | These PropTypes are generated from the TypeScript type definitions |
48
- // | To update them edit the TypeScript types and run "yarn proptypes" |
49
- // ----------------------------------------------------------------------
50
- as: PropTypes.elementType,
51
- ownerState: PropTypes.shape({
52
- classes: PropTypes.object,
53
- color: PropTypes.string.isRequired,
54
- id: PropTypes.string.isRequired,
55
- isFaded: PropTypes.bool.isRequired,
56
- isHighlighted: PropTypes.bool.isRequired
57
- }).isRequired,
58
- sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
59
- };
60
30
  /**
61
31
  * Demos:
62
32
  *
@@ -75,7 +45,8 @@ function LineElement(props) {
75
45
  color,
76
46
  highlightScope,
77
47
  slots,
78
- slotProps
48
+ slotProps,
49
+ onClick
79
50
  } = props,
80
51
  other = _objectWithoutPropertiesLoose(props, _excluded);
81
52
  const getInteractionItemProps = useInteractionItemProps(highlightScope);
@@ -98,7 +69,7 @@ function LineElement(props) {
98
69
  isHighlighted
99
70
  };
100
71
  const classes = useUtilityClasses(ownerState);
101
- const Line = (_slots$line = slots == null ? void 0 : slots.line) != null ? _slots$line : LineElementPath;
72
+ const Line = (_slots$line = slots == null ? void 0 : slots.line) != null ? _slots$line : AnimatedLine;
102
73
  const lineProps = useSlotProps({
103
74
  elementType: Line,
104
75
  externalSlotProps: slotProps == null ? void 0 : slotProps.line,
@@ -106,7 +77,9 @@ function LineElement(props) {
106
77
  type: 'line',
107
78
  seriesId: id
108
79
  }), {
109
- className: classes.root
80
+ className: classes.root,
81
+ onClick,
82
+ cursor: onClick ? 'pointer' : 'unset'
110
83
  }),
111
84
  ownerState
112
85
  });
@@ -118,10 +91,18 @@ process.env.NODE_ENV !== "production" ? LineElement.propTypes = {
118
91
  // | To update them edit the TypeScript types and run "yarn proptypes" |
119
92
  // ----------------------------------------------------------------------
120
93
  classes: PropTypes.object,
94
+ color: PropTypes.string.isRequired,
95
+ d: PropTypes.string.isRequired,
121
96
  highlightScope: PropTypes.shape({
122
97
  faded: PropTypes.oneOf(['global', 'none', 'series']),
123
98
  highlighted: PropTypes.oneOf(['item', 'none', 'series'])
124
99
  }),
100
+ id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
101
+ /**
102
+ * If `true`, animations are skipped.
103
+ * @default false
104
+ */
105
+ skipAnimation: PropTypes.bool,
125
106
  /**
126
107
  * The props used for each component slot.
127
108
  * @default {}
@@ -60,19 +60,21 @@ function LineHighlightElement(props) {
60
60
  y
61
61
  };
62
62
  const classes = useUtilityClasses(ownerState);
63
- return /*#__PURE__*/_jsx(HighlightElement, _extends({}, other, {
63
+ return /*#__PURE__*/_jsx(HighlightElement, _extends({
64
+ pointerEvents: "none",
64
65
  ownerState: ownerState,
65
66
  className: classes.root,
66
67
  cx: 0,
67
68
  cy: 0,
68
69
  r: other.r === undefined ? 5 : other.r
69
- }));
70
+ }, other));
70
71
  }
71
72
  process.env.NODE_ENV !== "production" ? LineHighlightElement.propTypes = {
72
73
  // ----------------------------- Warning --------------------------------
73
74
  // | These PropTypes are generated from the TypeScript type definitions |
74
75
  // | To update them edit the TypeScript types and run "yarn proptypes" |
75
76
  // ----------------------------------------------------------------------
76
- classes: PropTypes.object
77
+ classes: PropTypes.object,
78
+ id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired
77
79
  } : void 0;
78
80
  export { LineHighlightElement };