@mui/x-charts 6.0.0-alpha.8 → 6.18.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 (286) hide show
  1. package/BarChart/BarChart.d.ts +19 -5
  2. package/BarChart/BarChart.js +52 -13
  3. package/BarChart/BarElement.d.ts +1319 -4
  4. package/BarChart/BarElement.js +10 -10
  5. package/BarChart/BarPlot.d.ts +17 -1
  6. package/BarChart/BarPlot.js +152 -66
  7. package/BarChart/formatter.js +2 -3
  8. package/BarChart/legend.js +1 -2
  9. package/CHANGELOG.md +786 -48
  10. package/ChartContainer/index.js +7 -5
  11. package/ChartsAxis/ChartsAxis.d.ts +9 -0
  12. package/ChartsAxis/ChartsAxis.js +28 -2
  13. package/ChartsAxis/axisClasses.d.ts +1 -1
  14. package/ChartsAxis/axisClasses.js +1 -2
  15. package/ChartsAxisHighlight/ChartsAxisHighlight.d.ts +21 -0
  16. package/ChartsAxisHighlight/ChartsAxisHighlight.js +61 -22
  17. package/ChartsClipPath/ChartsClipPath.d.ts +5 -0
  18. package/ChartsClipPath/ChartsClipPath.js +7 -2
  19. package/ChartsLegend/ChartsLegend.d.ts +44 -24
  20. package/ChartsLegend/ChartsLegend.js +192 -150
  21. package/ChartsLegend/chartsLegendClasses.js +1 -2
  22. package/ChartsLegend/utils.d.ts +1 -6
  23. package/ChartsSurface.d.ts +1 -1
  24. package/ChartsSurface.js +9 -18
  25. package/ChartsTooltip/ChartsAxisTooltipContent.d.ts +1 -0
  26. package/ChartsTooltip/ChartsAxisTooltipContent.js +46 -32
  27. package/ChartsTooltip/ChartsItemTooltipContent.d.ts +3 -2
  28. package/ChartsTooltip/ChartsItemTooltipContent.js +18 -9
  29. package/ChartsTooltip/ChartsTooltip.d.ts +32 -0
  30. package/ChartsTooltip/ChartsTooltip.js +62 -18
  31. package/ChartsTooltip/ChartsTooltipTable.d.ts +3 -10
  32. package/ChartsTooltip/ChartsTooltipTable.js +22 -20
  33. package/ChartsTooltip/tooltipClasses.js +1 -2
  34. package/ChartsTooltip/utils.js +2 -2
  35. package/ChartsXAxis/ChartsXAxis.d.ts +9 -0
  36. package/ChartsXAxis/ChartsXAxis.js +161 -40
  37. package/ChartsYAxis/ChartsYAxis.d.ts +9 -0
  38. package/ChartsYAxis/ChartsYAxis.js +86 -33
  39. package/LineChart/AreaElement.d.ts +12 -2
  40. package/LineChart/AreaElement.js +14 -6
  41. package/LineChart/AreaPlot.d.ts +11 -0
  42. package/LineChart/AreaPlot.js +27 -8
  43. package/LineChart/LineChart.d.ts +21 -3
  44. package/LineChart/LineChart.js +61 -14
  45. package/LineChart/LineElement.d.ts +12 -2
  46. package/LineChart/LineElement.js +14 -6
  47. package/LineChart/LineHighlightElement.d.ts +31 -0
  48. package/LineChart/LineHighlightElement.js +88 -0
  49. package/LineChart/LineHighlightPlot.d.ts +35 -0
  50. package/LineChart/LineHighlightPlot.js +110 -0
  51. package/LineChart/LinePlot.d.ts +10 -0
  52. package/LineChart/LinePlot.js +25 -12
  53. package/LineChart/MarkElement.d.ts +11 -1
  54. package/LineChart/MarkElement.js +15 -9
  55. package/LineChart/MarkPlot.d.ts +10 -0
  56. package/LineChart/MarkPlot.js +62 -15
  57. package/LineChart/formatter.js +5 -5
  58. package/LineChart/index.d.ts +2 -0
  59. package/LineChart/index.js +20 -0
  60. package/LineChart/legend.js +1 -2
  61. package/PieChart/PieArc.d.ts +12 -14
  62. package/PieChart/PieArc.js +28 -60
  63. package/PieChart/PieArcLabel.d.ts +9 -10
  64. package/PieChart/PieArcLabel.js +46 -38
  65. package/PieChart/PieArcLabelPlot.d.ts +28 -0
  66. package/PieChart/PieArcLabelPlot.js +99 -0
  67. package/PieChart/PieArcPlot.d.ts +35 -0
  68. package/PieChart/PieArcPlot.js +92 -0
  69. package/PieChart/PieChart.d.ts +19 -5
  70. package/PieChart/PieChart.js +61 -14
  71. package/PieChart/PiePlot.d.ts +15 -9
  72. package/PieChart/PiePlot.js +77 -55
  73. package/PieChart/dataTransform/transition.d.ts +4 -0
  74. package/PieChart/dataTransform/transition.js +136 -0
  75. package/PieChart/dataTransform/useTransformData.d.ts +15 -0
  76. package/PieChart/dataTransform/useTransformData.js +67 -0
  77. package/PieChart/formatter.js +1 -2
  78. package/PieChart/legend.js +1 -2
  79. package/README.md +8 -14
  80. package/ResponsiveChartContainer/index.js +7 -8
  81. package/ScatterChart/Scatter.d.ts +10 -0
  82. package/ScatterChart/Scatter.js +12 -2
  83. package/ScatterChart/ScatterChart.d.ts +16 -3
  84. package/ScatterChart/ScatterChart.js +43 -12
  85. package/ScatterChart/ScatterPlot.d.ts +10 -0
  86. package/ScatterChart/ScatterPlot.js +12 -2
  87. package/ScatterChart/formatter.js +1 -2
  88. package/ScatterChart/legend.js +1 -2
  89. package/SparkLineChart/SparkLineChart.d.ts +13 -3
  90. package/SparkLineChart/SparkLineChart.js +34 -18
  91. package/colorPalettes/colorPalettes.js +6 -12
  92. package/constants.js +5 -8
  93. package/context/CartesianContextProvider.d.ts +5 -0
  94. package/context/CartesianContextProvider.js +31 -16
  95. package/context/DrawingProvider.d.ts +7 -0
  96. package/context/DrawingProvider.js +12 -6
  97. package/context/HighlightProvider.js +3 -4
  98. package/context/InteractionProvider.js +3 -4
  99. package/context/SeriesContextProvider.js +3 -4
  100. package/esm/BarChart/BarChart.js +49 -9
  101. package/esm/BarChart/BarElement.js +7 -4
  102. package/esm/BarChart/BarPlot.js +152 -67
  103. package/esm/BarChart/formatter.js +1 -1
  104. package/esm/ChartContainer/index.js +3 -0
  105. package/esm/ChartsAxis/ChartsAxis.js +26 -0
  106. package/esm/ChartsAxisHighlight/ChartsAxisHighlight.js +57 -20
  107. package/esm/ChartsClipPath/ChartsClipPath.js +5 -0
  108. package/esm/ChartsLegend/ChartsLegend.js +188 -142
  109. package/esm/ChartsSurface.js +4 -12
  110. package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +44 -30
  111. package/esm/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
  112. package/esm/ChartsTooltip/ChartsTooltip.js +59 -14
  113. package/esm/ChartsTooltip/ChartsTooltipTable.js +17 -10
  114. package/esm/ChartsXAxis/ChartsXAxis.js +158 -37
  115. package/esm/ChartsYAxis/ChartsYAxis.js +83 -30
  116. package/esm/LineChart/AreaElement.js +10 -0
  117. package/esm/LineChart/AreaPlot.js +26 -6
  118. package/esm/LineChart/LineChart.js +58 -10
  119. package/esm/LineChart/LineElement.js +10 -0
  120. package/esm/LineChart/LineHighlightElement.js +78 -0
  121. package/esm/LineChart/LineHighlightPlot.js +103 -0
  122. package/esm/LineChart/LinePlot.js +25 -14
  123. package/esm/LineChart/MarkElement.js +12 -5
  124. package/esm/LineChart/MarkPlot.js +60 -13
  125. package/esm/LineChart/formatter.js +7 -3
  126. package/esm/LineChart/index.js +3 -1
  127. package/esm/PieChart/PieArc.js +26 -58
  128. package/esm/PieChart/PieArcLabel.js +43 -34
  129. package/esm/PieChart/PieArcLabelPlot.js +92 -0
  130. package/esm/PieChart/PieArcPlot.js +84 -0
  131. package/esm/PieChart/PieChart.js +59 -12
  132. package/esm/PieChart/PiePlot.js +76 -57
  133. package/esm/PieChart/dataTransform/transition.js +130 -0
  134. package/esm/PieChart/dataTransform/useTransformData.js +59 -0
  135. package/esm/ResponsiveChartContainer/index.js +3 -3
  136. package/esm/ScatterChart/Scatter.js +10 -0
  137. package/esm/ScatterChart/ScatterChart.js +40 -8
  138. package/esm/ScatterChart/ScatterPlot.js +10 -0
  139. package/esm/SparkLineChart/SparkLineChart.js +32 -15
  140. package/esm/constants.js +1 -1
  141. package/esm/context/CartesianContextProvider.js +30 -14
  142. package/esm/context/DrawingProvider.js +8 -0
  143. package/esm/hooks/useChartDimensions.js +2 -0
  144. package/esm/hooks/useMounted.js +16 -0
  145. package/esm/hooks/useReducedMotion.js +27 -0
  146. package/esm/hooks/useTicks.js +15 -9
  147. package/esm/internals/components/AxisSharedComponents.js +15 -70
  148. package/esm/internals/components/ChartsText.js +77 -0
  149. package/esm/internals/domUtils.js +113 -0
  150. package/esm/internals/geometry.js +36 -0
  151. package/hooks/useAxisEvents.js +2 -2
  152. package/hooks/useChartDimensions.d.ts +2 -0
  153. package/hooks/useChartDimensions.js +5 -4
  154. package/hooks/useDrawingArea.js +2 -2
  155. package/hooks/useInteractionItemProps.js +2 -2
  156. package/hooks/useMounted.d.ts +1 -0
  157. package/hooks/useMounted.js +25 -0
  158. package/hooks/useReducedMotion.d.ts +8 -0
  159. package/hooks/useReducedMotion.js +33 -0
  160. package/hooks/useScale.d.ts +2 -2
  161. package/hooks/useScale.js +2 -2
  162. package/hooks/useTicks.d.ts +19 -11
  163. package/hooks/useTicks.js +19 -14
  164. package/index.js +1 -1
  165. package/internals/components/AxisSharedComponents.d.ts +0 -4
  166. package/internals/components/AxisSharedComponents.js +18 -78
  167. package/internals/components/ChartsText.d.ts +35 -0
  168. package/internals/components/ChartsText.js +87 -0
  169. package/internals/defaultizeColor.d.ts +8 -1
  170. package/internals/defaultizeValueFormatter.js +1 -2
  171. package/internals/domUtils.d.ts +13 -0
  172. package/internals/domUtils.js +122 -0
  173. package/internals/geometry.d.ts +9 -0
  174. package/internals/geometry.js +42 -0
  175. package/internals/stackSeries.js +2 -4
  176. package/legacy/BarChart/BarChart.js +49 -9
  177. package/legacy/BarChart/BarElement.js +6 -3
  178. package/legacy/BarChart/BarPlot.js +151 -63
  179. package/legacy/BarChart/formatter.js +1 -1
  180. package/legacy/ChartContainer/index.js +3 -0
  181. package/legacy/ChartsAxis/ChartsAxis.js +26 -0
  182. package/legacy/ChartsAxisHighlight/ChartsAxisHighlight.js +60 -20
  183. package/legacy/ChartsClipPath/ChartsClipPath.js +5 -0
  184. package/legacy/ChartsLegend/ChartsLegend.js +203 -140
  185. package/legacy/ChartsSurface.js +3 -12
  186. package/legacy/ChartsTooltip/ChartsAxisTooltipContent.js +22 -10
  187. package/legacy/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
  188. package/legacy/ChartsTooltip/ChartsTooltip.js +62 -14
  189. package/legacy/ChartsTooltip/ChartsTooltipTable.js +34 -26
  190. package/legacy/ChartsXAxis/ChartsXAxis.js +162 -39
  191. package/legacy/ChartsYAxis/ChartsYAxis.js +83 -30
  192. package/legacy/LineChart/AreaElement.js +10 -0
  193. package/legacy/LineChart/AreaPlot.js +31 -7
  194. package/legacy/LineChart/LineChart.js +58 -10
  195. package/legacy/LineChart/LineElement.js +10 -0
  196. package/legacy/LineChart/LineHighlightElement.js +77 -0
  197. package/legacy/LineChart/LineHighlightPlot.js +96 -0
  198. package/legacy/LineChart/LinePlot.js +29 -12
  199. package/legacy/LineChart/MarkElement.js +12 -5
  200. package/legacy/LineChart/MarkPlot.js +50 -5
  201. package/legacy/LineChart/formatter.js +7 -3
  202. package/legacy/LineChart/index.js +3 -1
  203. package/legacy/PieChart/PieArc.js +30 -62
  204. package/legacy/PieChart/PieArcLabel.js +48 -34
  205. package/legacy/PieChart/PieArcLabelPlot.js +93 -0
  206. package/legacy/PieChart/PieArcPlot.js +84 -0
  207. package/legacy/PieChart/PieChart.js +59 -12
  208. package/legacy/PieChart/PiePlot.js +76 -59
  209. package/legacy/PieChart/dataTransform/transition.js +142 -0
  210. package/legacy/PieChart/dataTransform/useTransformData.js +60 -0
  211. package/legacy/ResponsiveChartContainer/index.js +3 -3
  212. package/legacy/ScatterChart/Scatter.js +10 -0
  213. package/legacy/ScatterChart/ScatterChart.js +40 -8
  214. package/legacy/ScatterChart/ScatterPlot.js +10 -0
  215. package/legacy/SparkLineChart/SparkLineChart.js +32 -13
  216. package/legacy/constants.js +1 -1
  217. package/legacy/context/CartesianContextProvider.js +30 -14
  218. package/legacy/context/DrawingProvider.js +8 -0
  219. package/legacy/hooks/useChartDimensions.js +2 -0
  220. package/legacy/hooks/useMounted.js +21 -0
  221. package/legacy/hooks/useReducedMotion.js +27 -0
  222. package/legacy/hooks/useTicks.js +16 -9
  223. package/legacy/index.js +1 -1
  224. package/legacy/internals/components/AxisSharedComponents.js +11 -65
  225. package/legacy/internals/components/ChartsText.js +79 -0
  226. package/legacy/internals/domUtils.js +121 -0
  227. package/legacy/internals/geometry.js +37 -0
  228. package/models/axis.d.ts +27 -9
  229. package/models/layout.d.ts +7 -6
  230. package/models/seriesType/line.d.ts +39 -1
  231. package/models/seriesType/pie.d.ts +5 -1
  232. package/modern/BarChart/BarChart.js +49 -9
  233. package/modern/BarChart/BarElement.js +7 -4
  234. package/modern/BarChart/BarPlot.js +149 -65
  235. package/modern/BarChart/formatter.js +1 -1
  236. package/modern/ChartContainer/index.js +3 -0
  237. package/modern/ChartsAxis/ChartsAxis.js +26 -0
  238. package/modern/ChartsAxisHighlight/ChartsAxisHighlight.js +57 -20
  239. package/modern/ChartsClipPath/ChartsClipPath.js +5 -0
  240. package/modern/ChartsLegend/ChartsLegend.js +188 -142
  241. package/modern/ChartsSurface.js +4 -12
  242. package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +44 -30
  243. package/modern/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
  244. package/modern/ChartsTooltip/ChartsTooltip.js +58 -14
  245. package/modern/ChartsTooltip/ChartsTooltipTable.js +17 -10
  246. package/modern/ChartsXAxis/ChartsXAxis.js +158 -37
  247. package/modern/ChartsYAxis/ChartsYAxis.js +83 -30
  248. package/modern/LineChart/AreaElement.js +10 -0
  249. package/modern/LineChart/AreaPlot.js +25 -6
  250. package/modern/LineChart/LineChart.js +58 -10
  251. package/modern/LineChart/LineElement.js +10 -0
  252. package/modern/LineChart/LineHighlightElement.js +78 -0
  253. package/modern/LineChart/LineHighlightPlot.js +102 -0
  254. package/modern/LineChart/LinePlot.js +23 -10
  255. package/modern/LineChart/MarkElement.js +12 -5
  256. package/modern/LineChart/MarkPlot.js +60 -13
  257. package/modern/LineChart/formatter.js +4 -3
  258. package/modern/LineChart/index.js +3 -1
  259. package/modern/PieChart/PieArc.js +26 -57
  260. package/modern/PieChart/PieArcLabel.js +43 -34
  261. package/modern/PieChart/PieArcLabelPlot.js +90 -0
  262. package/modern/PieChart/PieArcPlot.js +83 -0
  263. package/modern/PieChart/PieChart.js +59 -12
  264. package/modern/PieChart/PiePlot.js +76 -55
  265. package/modern/PieChart/dataTransform/transition.js +130 -0
  266. package/modern/PieChart/dataTransform/useTransformData.js +58 -0
  267. package/modern/ResponsiveChartContainer/index.js +3 -3
  268. package/modern/ScatterChart/Scatter.js +10 -0
  269. package/modern/ScatterChart/ScatterChart.js +40 -8
  270. package/modern/ScatterChart/ScatterPlot.js +10 -0
  271. package/modern/SparkLineChart/SparkLineChart.js +32 -15
  272. package/modern/constants.js +1 -1
  273. package/modern/context/CartesianContextProvider.js +29 -13
  274. package/modern/context/DrawingProvider.js +8 -0
  275. package/modern/hooks/useChartDimensions.js +2 -0
  276. package/modern/hooks/useMounted.js +16 -0
  277. package/modern/hooks/useReducedMotion.js +27 -0
  278. package/modern/hooks/useTicks.js +15 -9
  279. package/modern/index.js +1 -1
  280. package/modern/internals/components/AxisSharedComponents.js +15 -70
  281. package/modern/internals/components/ChartsText.js +77 -0
  282. package/modern/internals/domUtils.js +113 -0
  283. package/modern/internals/geometry.js +36 -0
  284. package/package.json +9 -6
  285. package/themeAugmentation/components.d.ts +1 -0
  286. package/themeAugmentation/overrides.d.ts +2 -0
@@ -0,0 +1,121 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
+ // DOM utils taken from
4
+ // https://github.com/recharts/recharts/blob/master/src/util/DOMUtils.ts
5
+
6
+ var isSsr = function isSsr() {
7
+ return !(typeof window !== 'undefined' && window.document && window.setTimeout);
8
+ };
9
+ var stringCache = {
10
+ widthCache: {},
11
+ cacheCount: 0
12
+ };
13
+ var MAX_CACHE_NUM = 2000;
14
+ var SPAN_STYLE = {
15
+ position: 'absolute',
16
+ top: '-20000px',
17
+ left: 0,
18
+ padding: 0,
19
+ margin: 0,
20
+ border: 'none',
21
+ whiteSpace: 'pre'
22
+ };
23
+ var STYLE_LIST = ['minWidth', 'maxWidth', 'width', 'minHeight', 'maxHeight', 'height', 'top', 'left', 'fontSize', 'padding', 'margin', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom'];
24
+ var MEASUREMENT_SPAN_ID = 'mui_measurement_span';
25
+
26
+ /**
27
+ *
28
+ * @param name CSS property name
29
+ * @param value
30
+ * @returns add 'px' for distance properties
31
+ */
32
+ function autoCompleteStyle(name, value) {
33
+ if (STYLE_LIST.indexOf(name) >= 0 && value === +value) {
34
+ return "".concat(value, "px");
35
+ }
36
+ return value;
37
+ }
38
+
39
+ /**
40
+ *
41
+ * @param text camelcase css property
42
+ * @returns css property
43
+ */
44
+ function camelToMiddleLine(text) {
45
+ var strs = text.split('');
46
+ var formatStrs = strs.reduce(function (result, entry) {
47
+ if (entry === entry.toUpperCase()) {
48
+ return [].concat(_toConsumableArray(result), ['-', entry.toLowerCase()]);
49
+ }
50
+ return [].concat(_toConsumableArray(result), [entry]);
51
+ }, []);
52
+ return formatStrs.join('');
53
+ }
54
+
55
+ /**
56
+ *
57
+ * @param style React style object
58
+ * @returns CSS styling string
59
+ */
60
+ export var getStyleString = function getStyleString(style) {
61
+ return Object.keys(style).sort().reduce(function (result, s) {
62
+ return "".concat(result).concat(camelToMiddleLine(s), ":").concat(autoCompleteStyle(s, style[s]), ";");
63
+ }, '');
64
+ };
65
+
66
+ /**
67
+ *
68
+ * @param text The string to estimate
69
+ * @param style The style applied
70
+ * @returns width and height of the text
71
+ */
72
+ export var getStringSize = function getStringSize(text) {
73
+ var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
74
+ if (text === undefined || text === null || isSsr()) {
75
+ return {
76
+ width: 0,
77
+ height: 0
78
+ };
79
+ }
80
+ var str = "".concat(text);
81
+ var styleString = getStyleString(style);
82
+ var cacheKey = "".concat(str, "-").concat(styleString);
83
+ if (stringCache.widthCache[cacheKey]) {
84
+ return stringCache.widthCache[cacheKey];
85
+ }
86
+ try {
87
+ var measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);
88
+ if (measurementSpan === null) {
89
+ measurementSpan = document.createElement('span');
90
+ measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);
91
+ measurementSpan.setAttribute('aria-hidden', 'true');
92
+ document.body.appendChild(measurementSpan);
93
+ }
94
+ // Need to use CSS Object Model (CSSOM) to be able to comply with Content Security Policy (CSP)
95
+ // https://en.wikipedia.org/wiki/Content_Security_Policy
96
+ var measurementSpanStyle = _extends({}, SPAN_STYLE, style);
97
+ Object.keys(measurementSpanStyle).map(function (styleKey) {
98
+ measurementSpan.style[camelToMiddleLine(styleKey)] = autoCompleteStyle(styleKey, measurementSpanStyle[styleKey]);
99
+ return styleKey;
100
+ });
101
+ measurementSpan.textContent = str;
102
+ var rect = measurementSpan.getBoundingClientRect();
103
+ var result = {
104
+ width: rect.width,
105
+ height: rect.height
106
+ };
107
+ stringCache.widthCache[cacheKey] = result;
108
+ if (stringCache.cacheCount + 1 > MAX_CACHE_NUM) {
109
+ stringCache.cacheCount = 0;
110
+ stringCache.widthCache = {};
111
+ } else {
112
+ stringCache.cacheCount += 1;
113
+ }
114
+ return result;
115
+ } catch (e) {
116
+ return {
117
+ width: 0,
118
+ height: 0
119
+ };
120
+ }
121
+ };
@@ -0,0 +1,37 @@
1
+ var ANGLE_APPROX = 5; // Angle (in deg) for which we approximate the rectangle as perfectly horizontal/vertical
2
+
3
+ var warnedOnce = false;
4
+
5
+ /**
6
+ * Return the minimal translation along the x-axis to avoid overflow of a rectangle of a given width, height, and rotation.
7
+ * This assumes that all rectangles have the same height and angle between -90 and 90.
8
+ * Otherwise it would be problematic because you need the height/width of the next rectangle to do the correct computation.
9
+ * @param width the side along the x axis.
10
+ * @param height the side along the y axis.
11
+ * @param angle the rotation in degrees.
12
+ */
13
+ export function getMinXTranslation(width, height) {
14
+ var angle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
15
+ if (process.env.NODE_ENV !== 'production') {
16
+ if (!warnedOnce && angle > 90 && angle < -90) {
17
+ warnedOnce = true;
18
+ console.warn(["MUI X: It seems you applied an angle larger than 90\xB0 or smaller than -90\xB0 to an axis text.", "This could cause some text overlapping.", "If you encounter a use case where it's needed, please open an issue."].join('\n'));
19
+ }
20
+ }
21
+ var standardAngle = Math.min(Math.abs(angle) % 180, Math.abs(Math.abs(angle) % 180 - 180) % 180); // Map from R to [0, 90]
22
+
23
+ if (standardAngle < ANGLE_APPROX) {
24
+ // It's nearly horizontal
25
+ return width;
26
+ }
27
+ if (standardAngle > 90 - ANGLE_APPROX) {
28
+ // It's nearly vertical
29
+ return height;
30
+ }
31
+ var radAngle = standardAngle * Math.PI / 180;
32
+ var angleSwich = Math.atan2(height, width);
33
+ if (radAngle < angleSwich) {
34
+ return width / Math.cos(radAngle);
35
+ }
36
+ return height / Math.sin(radAngle);
37
+ }
package/models/axis.d.ts CHANGED
@@ -2,19 +2,20 @@
2
2
  import type { ScaleBand, ScaleLogarithmic, ScalePower, ScaleTime, ScaleLinear, ScalePoint } from 'd3-scale';
3
3
  import { ChartsAxisClasses } from '../ChartsAxis/axisClasses';
4
4
  import type { TickParams } from '../hooks/useTicks';
5
- export type D3Scale = ScaleBand<any> | ScaleLogarithmic<any, any> | ScalePoint<any> | ScalePower<any, any> | ScaleTime<any, any> | ScaleLinear<any, any>;
6
- export type D3ContinuouseScale = ScaleLogarithmic<any, any> | ScalePower<any, any> | ScaleTime<any, any> | ScaleLinear<any, any>;
5
+ import { ChartsTextProps } from '../internals/components/ChartsText';
6
+ export type D3Scale = ScaleBand<any> | ScaleLogarithmic<any, number> | ScalePoint<any> | ScalePower<any, number> | ScaleTime<any, number> | ScaleLinear<any, number>;
7
+ export type D3ContinuouseScale = ScaleLogarithmic<any, number> | ScalePower<any, number> | ScaleTime<any, number> | ScaleLinear<any, number>;
7
8
  export interface ChartsAxisSlotsComponent {
8
9
  axisLine?: React.JSXElementConstructor<React.SVGAttributes<SVGPathElement>>;
9
10
  axisTick?: React.JSXElementConstructor<React.SVGAttributes<SVGPathElement>>;
10
- axisTickLabel?: React.JSXElementConstructor<React.SVGAttributes<SVGTextElement>>;
11
- axisLabel?: React.JSXElementConstructor<React.SVGAttributes<SVGTextElement>>;
11
+ axisTickLabel?: React.JSXElementConstructor<ChartsTextProps>;
12
+ axisLabel?: React.JSXElementConstructor<ChartsTextProps>;
12
13
  }
13
14
  export interface ChartsAxisSlotComponentProps {
14
15
  axisLine?: Partial<React.SVGAttributes<SVGPathElement>>;
15
16
  axisTick?: Partial<React.SVGAttributes<SVGPathElement>>;
16
- axisTickLabel?: Partial<React.SVGAttributes<SVGTextElement>>;
17
- axisLabel?: Partial<React.SVGAttributes<SVGTextElement>>;
17
+ axisTickLabel?: Partial<ChartsTextProps>;
18
+ axisLabel?: Partial<ChartsTextProps>;
18
19
  }
19
20
  export interface ChartsAxisProps extends TickParams {
20
21
  /**
@@ -39,8 +40,24 @@ export interface ChartsAxisProps extends TickParams {
39
40
  /**
40
41
  * The font size of the axis ticks text.
41
42
  * @default 12
43
+ * @deprecated Consider using `tickLabelStyle.fontSize` instead.
42
44
  */
43
45
  tickFontSize?: number;
46
+ /**
47
+ * The style applied to ticks text.
48
+ */
49
+ tickLabelStyle?: ChartsTextProps['style'];
50
+ /**
51
+ * The style applied to the axis label.
52
+ */
53
+ labelStyle?: ChartsTextProps['style'];
54
+ /**
55
+ * Defines which ticks get its label displayed. Its value can be:
56
+ * - 'auto' In such case, labels are displayed if they do not overlap with the previous one.
57
+ * - a filtering function of the form (value, index) => boolean. Warning: the index is tick index, not data ones.
58
+ * @default 'auto'
59
+ */
60
+ tickLabelInterval?: 'auto' | ((value: any, index: number) => boolean);
44
61
  /**
45
62
  * The label of the axis.
46
63
  */
@@ -48,6 +65,7 @@ export interface ChartsAxisProps extends TickParams {
48
65
  /**
49
66
  * The font size of the axis label.
50
67
  * @default 14
68
+ * @deprecated Consider using `labelStyle.fontSize` instead.
51
69
  */
52
70
  labelFontSize?: number;
53
71
  /**
@@ -96,13 +114,13 @@ interface AxisScaleConfig {
96
114
  /**
97
115
  * The ratio between the space allocated for padding between two categories and the category width.
98
116
  * 0 means no gap, and 1 no data.
99
- * @default 0.1
117
+ * @default 0.2
100
118
  */
101
119
  categoryGapRatio: number;
102
120
  /**
103
121
  * The ratio between the width of a bar, and the gap between two bars.
104
122
  * 0 means no gap, and 1 no bar.
105
- * @default 0
123
+ * @default 0.1
106
124
  */
107
125
  barGapRatio: number;
108
126
  };
@@ -151,7 +169,7 @@ export type AxisConfig<S extends ScaleName = ScaleName, V = any> = {
151
169
  hideTooltip?: boolean;
152
170
  } & Partial<ChartsXAxisProps | ChartsYAxisProps> & Partial<Omit<AxisScaleConfig[S], 'scale'>> & TickParams;
153
171
  export type AxisDefaultized<S extends ScaleName = ScaleName, V = any> = Omit<AxisConfig<S, V>, 'scaleType'> & AxisScaleConfig[S] & {
154
- ticksNumber: number;
172
+ tickNumber: number;
155
173
  };
156
174
  export declare function isBandScaleConfig(scaleConfig: AxisConfig<ScaleName>): scaleConfig is AxisConfig<'band'> & {
157
175
  scaleType: 'band';
@@ -1,10 +1,11 @@
1
+ export interface CardinalDirections<T> {
2
+ top?: T;
3
+ bottom?: T;
4
+ left?: T;
5
+ right?: T;
6
+ }
1
7
  export type LayoutConfig = {
2
8
  width: number;
3
9
  height: number;
4
- margin?: {
5
- top?: number;
6
- bottom?: number;
7
- left?: number;
8
- right?: number;
9
- };
10
+ margin?: Partial<CardinalDirections<number>>;
10
11
  };
@@ -1,12 +1,34 @@
1
1
  import { DefaultizedProps } from '../helpers';
2
2
  import { CartesianSeriesType, CommonDefaultizedProps, CommonSeriesType, StackableSeriesType } from './common';
3
3
  export type CurveType = 'catmullRom' | 'linear' | 'monotoneX' | 'monotoneY' | 'natural' | 'step' | 'stepBefore' | 'stepAfter';
4
+ export interface ShowMarkParams<AxisValue = number | Date> {
5
+ /**
6
+ * The item index.
7
+ */
8
+ index: number;
9
+ /**
10
+ * The x coordinate in the SVG.
11
+ */
12
+ x: number;
13
+ /**
14
+ * The y coordinate in the SVG.
15
+ */
16
+ y: number;
17
+ /**
18
+ * The item position value. It likely comes from the axis `data` property.
19
+ */
20
+ position: AxisValue;
21
+ /**
22
+ * The item value. It comes from the series `data` property.
23
+ */
24
+ value: number;
25
+ }
4
26
  export interface LineSeriesType extends CommonSeriesType<number>, CartesianSeriesType, StackableSeriesType {
5
27
  type: 'line';
6
28
  /**
7
29
  * Data associated to the line.
8
30
  */
9
- data?: number[];
31
+ data?: (number | null)[];
10
32
  /**
11
33
  * The key used to retrive data from the dataset.
12
34
  */
@@ -15,6 +37,22 @@ export interface LineSeriesType extends CommonSeriesType<number>, CartesianSerie
15
37
  area?: boolean;
16
38
  label?: string;
17
39
  curve?: CurveType;
40
+ /**
41
+ * Define which items of the series should display a mark.
42
+ * If can be a boolean that applies to all items.
43
+ * Or a callback that gets some item properties and returns true if the item should be displayed.
44
+ */
45
+ showMark?: boolean | ((params: ShowMarkParams) => boolean);
46
+ /**
47
+ * Do not render the line highlight item if set to `true`.
48
+ * @default false
49
+ */
50
+ disableHighlight?: boolean;
51
+ /**
52
+ * If `true`, line and area connect points separated by `null` values.
53
+ * @default false
54
+ */
55
+ connectNulls?: boolean;
18
56
  }
19
57
  /**
20
58
  * An object that allows to identify a single line.
@@ -7,7 +7,7 @@ export type PieValueType = {
7
7
  label?: string;
8
8
  color?: string;
9
9
  };
10
- export type DefaultizedPieValueType = PieValueType & D3PieArcDatum<any> & {
10
+ export type DefaultizedPieValueType = PieValueType & Omit<D3PieArcDatum<any>, 'data'> & {
11
11
  color: string;
12
12
  formattedValue: string;
13
13
  };
@@ -76,6 +76,8 @@ export interface PieSeriesType<Tdata = PieValueType> extends CommonSeriesType<Td
76
76
  innerRadius?: number;
77
77
  outerRadius?: number;
78
78
  cornerRadius?: number;
79
+ paddingAngle?: number;
80
+ color?: string;
79
81
  };
80
82
  /**
81
83
  * Override the arc attibutes when it is faded.
@@ -89,6 +91,8 @@ export interface PieSeriesType<Tdata = PieValueType> extends CommonSeriesType<Td
89
91
  innerRadius?: number;
90
92
  outerRadius?: number;
91
93
  cornerRadius?: number;
94
+ paddingAngle?: number;
95
+ color?: string;
92
96
  };
93
97
  }
94
98
  /**
@@ -12,6 +12,17 @@ import { ChartsAxisHighlight } from '../ChartsAxisHighlight';
12
12
  import { ChartsClipPath } from '../ChartsClipPath';
13
13
  import { jsx as _jsx } from "react/jsx-runtime";
14
14
  import { jsxs as _jsxs } from "react/jsx-runtime";
15
+ /**
16
+ * Demos:
17
+ *
18
+ * - [Bars](https://mui.com/x/react-charts/bars/)
19
+ * - [Bar demonstration](https://mui.com/x/react-charts/bar-demo/)
20
+ * - [Stacking](https://mui.com/x/react-charts/stacking/)
21
+ *
22
+ * API:
23
+ *
24
+ * - [BarChart API](https://mui.com/x/api/charts/bar-chart/)
25
+ */
15
26
  const BarChart = /*#__PURE__*/React.forwardRef(function BarChart(props, ref) {
16
27
  const {
17
28
  xAxis,
@@ -31,6 +42,7 @@ const BarChart = /*#__PURE__*/React.forwardRef(function BarChart(props, ref) {
31
42
  leftAxis,
32
43
  rightAxis,
33
44
  bottomAxis,
45
+ skipAnimation,
34
46
  children,
35
47
  slots,
36
48
  slotProps
@@ -73,7 +85,8 @@ const BarChart = /*#__PURE__*/React.forwardRef(function BarChart(props, ref) {
73
85
  clipPath: `url(#${clipPathId})`,
74
86
  children: /*#__PURE__*/_jsx(BarPlot, {
75
87
  slots: slots,
76
- slotProps: slotProps
88
+ slotProps: slotProps,
89
+ skipAnimation: skipAnimation
77
90
  })
78
91
  }), /*#__PURE__*/_jsx(ChartsAxis, {
79
92
  topAxis: topAxis,
@@ -115,11 +128,15 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
115
128
  fill: PropTypes.string,
116
129
  label: PropTypes.string,
117
130
  labelFontSize: PropTypes.number,
131
+ labelStyle: PropTypes.object,
118
132
  position: PropTypes.oneOf(['bottom', 'top']),
119
133
  slotProps: PropTypes.object,
120
134
  slots: PropTypes.object,
121
135
  stroke: PropTypes.string,
122
136
  tickFontSize: PropTypes.number,
137
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
138
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
139
+ tickLabelStyle: PropTypes.object,
123
140
  tickMaxStep: PropTypes.number,
124
141
  tickMinStep: PropTypes.number,
125
142
  tickNumber: PropTypes.number,
@@ -149,33 +166,33 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
149
166
  fill: PropTypes.string,
150
167
  label: PropTypes.string,
151
168
  labelFontSize: PropTypes.number,
169
+ labelStyle: PropTypes.object,
152
170
  position: PropTypes.oneOf(['left', 'right']),
153
171
  slotProps: PropTypes.object,
154
172
  slots: PropTypes.object,
155
173
  stroke: PropTypes.string,
156
174
  tickFontSize: PropTypes.number,
175
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
176
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
177
+ tickLabelStyle: PropTypes.object,
157
178
  tickMaxStep: PropTypes.number,
158
179
  tickMinStep: PropTypes.number,
159
180
  tickNumber: PropTypes.number,
160
181
  tickSize: PropTypes.number
161
182
  }), PropTypes.string]),
183
+ /**
184
+ * @deprecated Consider using `slotProps.legend` instead.
185
+ */
162
186
  legend: PropTypes.shape({
163
187
  classes: PropTypes.object,
164
188
  direction: PropTypes.oneOf(['column', 'row']),
165
189
  hidden: PropTypes.bool,
166
- itemWidth: PropTypes.number,
167
- markSize: PropTypes.number,
168
- offset: PropTypes.shape({
169
- x: PropTypes.number,
170
- y: PropTypes.number
171
- }),
172
190
  position: PropTypes.shape({
173
191
  horizontal: PropTypes.oneOf(['left', 'middle', 'right']).isRequired,
174
192
  vertical: PropTypes.oneOf(['bottom', 'middle', 'top']).isRequired
175
193
  }),
176
194
  slotProps: PropTypes.object,
177
- slots: PropTypes.object,
178
- spacing: PropTypes.number
195
+ slots: PropTypes.object
179
196
  }),
180
197
  margin: PropTypes.shape({
181
198
  bottom: PropTypes.number,
@@ -196,11 +213,15 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
196
213
  fill: PropTypes.string,
197
214
  label: PropTypes.string,
198
215
  labelFontSize: PropTypes.number,
216
+ labelStyle: PropTypes.object,
199
217
  position: PropTypes.oneOf(['left', 'right']),
200
218
  slotProps: PropTypes.object,
201
219
  slots: PropTypes.object,
202
220
  stroke: PropTypes.string,
203
221
  tickFontSize: PropTypes.number,
222
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
223
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
224
+ tickLabelStyle: PropTypes.object,
204
225
  tickMaxStep: PropTypes.number,
205
226
  tickMinStep: PropTypes.number,
206
227
  tickNumber: PropTypes.number,
@@ -225,6 +246,11 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
225
246
  xAxisKey: PropTypes.string,
226
247
  yAxisKey: PropTypes.string
227
248
  })).isRequired,
249
+ /**
250
+ * If `true`, animations are skiped.
251
+ * @default false
252
+ */
253
+ skipAnimation: PropTypes.bool,
228
254
  /**
229
255
  * The props used for each component slot.
230
256
  * @default {}
@@ -241,6 +267,8 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
241
267
  axisContent: PropTypes.elementType,
242
268
  classes: PropTypes.object,
243
269
  itemContent: PropTypes.elementType,
270
+ slotProps: PropTypes.object,
271
+ slots: PropTypes.object,
244
272
  trigger: PropTypes.oneOf(['axis', 'item', 'none'])
245
273
  }),
246
274
  /**
@@ -256,11 +284,15 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
256
284
  fill: PropTypes.string,
257
285
  label: PropTypes.string,
258
286
  labelFontSize: PropTypes.number,
287
+ labelStyle: PropTypes.object,
259
288
  position: PropTypes.oneOf(['bottom', 'top']),
260
289
  slotProps: PropTypes.object,
261
290
  slots: PropTypes.object,
262
291
  stroke: PropTypes.string,
263
292
  tickFontSize: PropTypes.number,
293
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
294
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
295
+ tickLabelStyle: PropTypes.object,
264
296
  tickMaxStep: PropTypes.number,
265
297
  tickMinStep: PropTypes.number,
266
298
  tickNumber: PropTypes.number,
@@ -285,6 +317,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
285
317
  id: PropTypes.string,
286
318
  label: PropTypes.string,
287
319
  labelFontSize: PropTypes.number,
320
+ labelStyle: PropTypes.object,
288
321
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
289
322
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
290
323
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -293,6 +326,9 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
293
326
  slots: PropTypes.object,
294
327
  stroke: PropTypes.string,
295
328
  tickFontSize: PropTypes.number,
329
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
330
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
331
+ tickLabelStyle: PropTypes.object,
296
332
  tickMaxStep: PropTypes.number,
297
333
  tickMinStep: PropTypes.number,
298
334
  tickNumber: PropTypes.number,
@@ -311,6 +347,7 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
311
347
  id: PropTypes.string,
312
348
  label: PropTypes.string,
313
349
  labelFontSize: PropTypes.number,
350
+ labelStyle: PropTypes.object,
314
351
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
315
352
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
316
353
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -319,6 +356,9 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
319
356
  slots: PropTypes.object,
320
357
  stroke: PropTypes.string,
321
358
  tickFontSize: PropTypes.number,
359
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
360
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
361
+ tickLabelStyle: PropTypes.object,
322
362
  tickMaxStep: PropTypes.number,
323
363
  tickMinStep: PropTypes.number,
324
364
  tickNumber: PropTypes.number,
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["id", "dataIndex", "classes", "color", "highlightScope", "slots", "slotProps"];
3
+ const _excluded = ["id", "dataIndex", "classes", "color", "highlightScope", "slots", "slotProps", "style"];
4
4
  import * as React from 'react';
5
5
  import composeClasses from '@mui/utils/composeClasses';
6
6
  import { useSlotProps } from '@mui/base/utils';
@@ -8,13 +8,14 @@ import generateUtilityClass from '@mui/utils/generateUtilityClass';
8
8
  import { styled } from '@mui/material/styles';
9
9
  import { color as d3Color } from 'd3-color';
10
10
  import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
11
+ import { animated } from '@react-spring/web';
11
12
  import { getIsFaded, getIsHighlighted, useInteractionItemProps } from '../hooks/useInteractionItemProps';
12
13
  import { InteractionContext } from '../context/InteractionProvider';
13
14
  import { jsx as _jsx } from "react/jsx-runtime";
14
15
  export function getBarElementUtilityClass(slot) {
15
16
  return generateUtilityClass('MuiBarElement', slot);
16
17
  }
17
- export const lineElementClasses = generateUtilityClasses('MuiBarElement', ['root']);
18
+ export const barElementClasses = generateUtilityClasses('MuiBarElement', ['root']);
18
19
  const useUtilityClasses = ownerState => {
19
20
  const {
20
21
  classes,
@@ -25,7 +26,7 @@ const useUtilityClasses = ownerState => {
25
26
  };
26
27
  return composeClasses(slots, getBarElementUtilityClass, classes);
27
28
  };
28
- export const BarElementPath = styled('rect', {
29
+ export const BarElementPath = styled(animated.rect, {
29
30
  name: 'MuiBarElement',
30
31
  slot: 'Root',
31
32
  overridesResolver: (_, styles) => styles.root
@@ -46,7 +47,8 @@ export function BarElement(props) {
46
47
  color,
47
48
  highlightScope,
48
49
  slots,
49
- slotProps
50
+ slotProps,
51
+ style
50
52
  } = props,
51
53
  other = _objectWithoutPropertiesLoose(props, _excluded);
52
54
  const getInteractionItemProps = useInteractionItemProps(highlightScope);
@@ -81,6 +83,7 @@ export function BarElement(props) {
81
83
  seriesId: id,
82
84
  dataIndex
83
85
  }), {
86
+ style,
84
87
  className: classes.root
85
88
  }),
86
89
  ownerState