@mui/x-charts 6.0.0-alpha.14 → 6.0.0-alpha.16

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 (199) hide show
  1. package/BarChart/BarChart.d.ts +16 -2
  2. package/BarChart/BarChart.js +49 -11
  3. package/BarChart/BarElement.d.ts +1318 -3
  4. package/BarChart/BarElement.js +10 -8
  5. package/BarChart/BarPlot.d.ts +17 -1
  6. package/BarChart/BarPlot.js +152 -66
  7. package/CHANGELOG.md +169 -0
  8. package/ChartContainer/index.js +5 -2
  9. package/ChartsAxis/ChartsAxis.js +18 -2
  10. package/ChartsAxis/axisClasses.d.ts +1 -1
  11. package/ChartsAxisHighlight/ChartsAxisHighlight.js +2 -2
  12. package/ChartsClipPath/ChartsClipPath.js +2 -2
  13. package/ChartsLegend/ChartsLegend.d.ts +44 -24
  14. package/ChartsLegend/ChartsLegend.js +191 -145
  15. package/ChartsLegend/utils.d.ts +1 -6
  16. package/ChartsSurface.js +5 -13
  17. package/ChartsTooltip/ChartsAxisTooltipContent.js +2 -2
  18. package/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
  19. package/ChartsTooltip/ChartsTooltip.js +2 -2
  20. package/ChartsTooltip/utils.js +2 -2
  21. package/ChartsXAxis/ChartsXAxis.js +151 -40
  22. package/ChartsYAxis/ChartsYAxis.js +76 -33
  23. package/LineChart/AreaElement.d.ts +10 -0
  24. package/LineChart/AreaElement.js +12 -2
  25. package/LineChart/AreaPlot.d.ts +11 -0
  26. package/LineChart/AreaPlot.js +13 -2
  27. package/LineChart/LineChart.d.ts +13 -0
  28. package/LineChart/LineChart.js +40 -10
  29. package/LineChart/LineElement.d.ts +10 -0
  30. package/LineChart/LineElement.js +12 -2
  31. package/LineChart/LineHighlightElement.d.ts +10 -0
  32. package/LineChart/LineHighlightElement.js +12 -2
  33. package/LineChart/LineHighlightPlot.d.ts +10 -0
  34. package/LineChart/LineHighlightPlot.js +12 -2
  35. package/LineChart/LinePlot.d.ts +10 -0
  36. package/LineChart/LinePlot.js +12 -2
  37. package/LineChart/MarkElement.d.ts +10 -0
  38. package/LineChart/MarkElement.js +12 -2
  39. package/LineChart/MarkPlot.d.ts +10 -0
  40. package/LineChart/MarkPlot.js +12 -2
  41. package/PieChart/PieArc.js +2 -2
  42. package/PieChart/PieArcLabel.js +2 -2
  43. package/PieChart/PieChart.d.ts +13 -0
  44. package/PieChart/PieChart.js +41 -10
  45. package/PieChart/PiePlot.d.ts +10 -0
  46. package/PieChart/PiePlot.js +12 -2
  47. package/ResponsiveChartContainer/index.js +4 -4
  48. package/ScatterChart/Scatter.d.ts +10 -0
  49. package/ScatterChart/Scatter.js +12 -2
  50. package/ScatterChart/ScatterChart.d.ts +13 -0
  51. package/ScatterChart/ScatterChart.js +40 -10
  52. package/ScatterChart/ScatterPlot.d.ts +10 -0
  53. package/ScatterChart/ScatterPlot.js +12 -2
  54. package/SparkLineChart/SparkLineChart.d.ts +9 -0
  55. package/SparkLineChart/SparkLineChart.js +16 -2
  56. package/constants.js +1 -1
  57. package/context/CartesianContextProvider.js +20 -12
  58. package/context/DrawingProvider.d.ts +2 -0
  59. package/context/DrawingProvider.js +4 -2
  60. package/context/HighlightProvider.js +2 -2
  61. package/context/InteractionProvider.js +2 -2
  62. package/context/SeriesContextProvider.js +2 -2
  63. package/esm/BarChart/BarChart.js +47 -9
  64. package/esm/BarChart/BarElement.js +7 -4
  65. package/esm/BarChart/BarPlot.js +152 -67
  66. package/esm/ChartContainer/index.js +3 -0
  67. package/esm/ChartsAxis/ChartsAxis.js +16 -0
  68. package/esm/ChartsLegend/ChartsLegend.js +188 -142
  69. package/esm/ChartsSurface.js +3 -11
  70. package/esm/ChartsXAxis/ChartsXAxis.js +148 -37
  71. package/esm/ChartsYAxis/ChartsYAxis.js +73 -30
  72. package/esm/LineChart/AreaElement.js +10 -0
  73. package/esm/LineChart/AreaPlot.js +11 -0
  74. package/esm/LineChart/LineChart.js +38 -8
  75. package/esm/LineChart/LineElement.js +10 -0
  76. package/esm/LineChart/LineHighlightElement.js +10 -0
  77. package/esm/LineChart/LineHighlightPlot.js +10 -0
  78. package/esm/LineChart/LinePlot.js +10 -0
  79. package/esm/LineChart/MarkElement.js +10 -0
  80. package/esm/LineChart/MarkPlot.js +10 -0
  81. package/esm/PieChart/PieChart.js +39 -8
  82. package/esm/PieChart/PiePlot.js +10 -0
  83. package/esm/ResponsiveChartContainer/index.js +2 -2
  84. package/esm/ScatterChart/Scatter.js +10 -0
  85. package/esm/ScatterChart/ScatterChart.js +38 -8
  86. package/esm/ScatterChart/ScatterPlot.js +10 -0
  87. package/esm/SparkLineChart/SparkLineChart.js +14 -0
  88. package/esm/constants.js +1 -1
  89. package/esm/context/CartesianContextProvider.js +19 -11
  90. package/esm/context/DrawingProvider.js +2 -0
  91. package/esm/hooks/useChartDimensions.js +2 -0
  92. package/esm/hooks/useMounted.js +16 -0
  93. package/esm/hooks/useReducedMotion.js +27 -0
  94. package/esm/hooks/useTicks.js +15 -9
  95. package/esm/internals/components/AxisSharedComponents.js +15 -70
  96. package/esm/internals/components/ChartsText.js +75 -0
  97. package/esm/internals/domUtils.js +113 -0
  98. package/esm/internals/geometry.js +36 -0
  99. package/hooks/useAxisEvents.js +2 -2
  100. package/hooks/useChartDimensions.d.ts +2 -0
  101. package/hooks/useChartDimensions.js +4 -2
  102. package/hooks/useDrawingArea.js +2 -2
  103. package/hooks/useInteractionItemProps.js +2 -2
  104. package/hooks/useMounted.d.ts +1 -0
  105. package/hooks/useMounted.js +25 -0
  106. package/hooks/useReducedMotion.d.ts +8 -0
  107. package/hooks/useReducedMotion.js +33 -0
  108. package/hooks/useScale.d.ts +2 -2
  109. package/hooks/useScale.js +2 -2
  110. package/hooks/useTicks.d.ts +19 -11
  111. package/hooks/useTicks.js +18 -12
  112. package/index.js +1 -1
  113. package/internals/components/AxisSharedComponents.d.ts +0 -4
  114. package/internals/components/AxisSharedComponents.js +16 -71
  115. package/internals/components/ChartsText.d.ts +35 -0
  116. package/internals/components/ChartsText.js +85 -0
  117. package/internals/defaultizeColor.d.ts +1 -1
  118. package/internals/domUtils.d.ts +13 -0
  119. package/internals/domUtils.js +122 -0
  120. package/internals/geometry.d.ts +9 -0
  121. package/internals/geometry.js +42 -0
  122. package/legacy/BarChart/BarChart.js +47 -9
  123. package/legacy/BarChart/BarElement.js +6 -3
  124. package/legacy/BarChart/BarPlot.js +151 -63
  125. package/legacy/ChartContainer/index.js +3 -0
  126. package/legacy/ChartsAxis/ChartsAxis.js +16 -0
  127. package/legacy/ChartsLegend/ChartsLegend.js +203 -140
  128. package/legacy/ChartsSurface.js +2 -11
  129. package/legacy/ChartsXAxis/ChartsXAxis.js +152 -39
  130. package/legacy/ChartsYAxis/ChartsYAxis.js +73 -30
  131. package/legacy/LineChart/AreaElement.js +10 -0
  132. package/legacy/LineChart/AreaPlot.js +11 -0
  133. package/legacy/LineChart/LineChart.js +38 -8
  134. package/legacy/LineChart/LineElement.js +10 -0
  135. package/legacy/LineChart/LineHighlightElement.js +10 -0
  136. package/legacy/LineChart/LineHighlightPlot.js +10 -0
  137. package/legacy/LineChart/LinePlot.js +10 -0
  138. package/legacy/LineChart/MarkElement.js +10 -0
  139. package/legacy/LineChart/MarkPlot.js +10 -0
  140. package/legacy/PieChart/PieChart.js +39 -8
  141. package/legacy/PieChart/PiePlot.js +10 -0
  142. package/legacy/ResponsiveChartContainer/index.js +2 -2
  143. package/legacy/ScatterChart/Scatter.js +10 -0
  144. package/legacy/ScatterChart/ScatterChart.js +38 -8
  145. package/legacy/ScatterChart/ScatterPlot.js +10 -0
  146. package/legacy/SparkLineChart/SparkLineChart.js +14 -0
  147. package/legacy/constants.js +1 -1
  148. package/legacy/context/CartesianContextProvider.js +19 -11
  149. package/legacy/context/DrawingProvider.js +2 -0
  150. package/legacy/hooks/useChartDimensions.js +2 -0
  151. package/legacy/hooks/useMounted.js +21 -0
  152. package/legacy/hooks/useReducedMotion.js +27 -0
  153. package/legacy/hooks/useTicks.js +16 -9
  154. package/legacy/index.js +1 -1
  155. package/legacy/internals/components/AxisSharedComponents.js +9 -63
  156. package/legacy/internals/components/ChartsText.js +77 -0
  157. package/legacy/internals/domUtils.js +121 -0
  158. package/legacy/internals/geometry.js +37 -0
  159. package/models/axis.d.ts +25 -7
  160. package/models/layout.d.ts +7 -6
  161. package/models/seriesType/line.d.ts +2 -2
  162. package/modern/BarChart/BarChart.js +47 -9
  163. package/modern/BarChart/BarElement.js +7 -4
  164. package/modern/BarChart/BarPlot.js +149 -65
  165. package/modern/ChartContainer/index.js +3 -0
  166. package/modern/ChartsAxis/ChartsAxis.js +16 -0
  167. package/modern/ChartsLegend/ChartsLegend.js +188 -142
  168. package/modern/ChartsSurface.js +3 -11
  169. package/modern/ChartsXAxis/ChartsXAxis.js +148 -37
  170. package/modern/ChartsYAxis/ChartsYAxis.js +73 -30
  171. package/modern/LineChart/AreaElement.js +10 -0
  172. package/modern/LineChart/AreaPlot.js +11 -0
  173. package/modern/LineChart/LineChart.js +38 -8
  174. package/modern/LineChart/LineElement.js +10 -0
  175. package/modern/LineChart/LineHighlightElement.js +10 -0
  176. package/modern/LineChart/LineHighlightPlot.js +10 -0
  177. package/modern/LineChart/LinePlot.js +10 -0
  178. package/modern/LineChart/MarkElement.js +10 -0
  179. package/modern/LineChart/MarkPlot.js +10 -0
  180. package/modern/PieChart/PieChart.js +39 -8
  181. package/modern/PieChart/PiePlot.js +10 -0
  182. package/modern/ResponsiveChartContainer/index.js +2 -2
  183. package/modern/ScatterChart/Scatter.js +10 -0
  184. package/modern/ScatterChart/ScatterChart.js +38 -8
  185. package/modern/ScatterChart/ScatterPlot.js +10 -0
  186. package/modern/SparkLineChart/SparkLineChart.js +14 -0
  187. package/modern/constants.js +1 -1
  188. package/modern/context/CartesianContextProvider.js +19 -11
  189. package/modern/context/DrawingProvider.js +2 -0
  190. package/modern/hooks/useChartDimensions.js +2 -0
  191. package/modern/hooks/useMounted.js +16 -0
  192. package/modern/hooks/useReducedMotion.js +27 -0
  193. package/modern/hooks/useTicks.js +15 -9
  194. package/modern/index.js +1 -1
  195. package/modern/internals/components/AxisSharedComponents.js +15 -70
  196. package/modern/internals/components/ChartsText.js +75 -0
  197. package/modern/internals/domUtils.js +113 -0
  198. package/modern/internals/geometry.js +36 -0
  199. package/package.json +5 -3
@@ -9,6 +9,16 @@ import { ChartsLegend } from '../ChartsLegend';
9
9
  import { ChartsAxisHighlight } from '../ChartsAxisHighlight';
10
10
  import { jsx as _jsx } from "react/jsx-runtime";
11
11
  import { jsxs as _jsxs } from "react/jsx-runtime";
12
+ /**
13
+ * Demos:
14
+ *
15
+ * - [Scatter](https://mui.com/x/react-charts/scatter/)
16
+ * - [Scatter demonstration](https://mui.com/x/react-charts/scatter-demo/)
17
+ *
18
+ * API:
19
+ *
20
+ * - [ScatterChart API](https://mui.com/x/api/charts/scatter-chart/)
21
+ */
12
22
  const ScatterChart = /*#__PURE__*/React.forwardRef(function ScatterChart(props, ref) {
13
23
  const {
14
24
  xAxis,
@@ -85,11 +95,15 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
85
95
  fill: PropTypes.string,
86
96
  label: PropTypes.string,
87
97
  labelFontSize: PropTypes.number,
98
+ labelStyle: PropTypes.object,
88
99
  position: PropTypes.oneOf(['bottom', 'top']),
89
100
  slotProps: PropTypes.object,
90
101
  slots: PropTypes.object,
91
102
  stroke: PropTypes.string,
92
103
  tickFontSize: PropTypes.number,
104
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
105
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
106
+ tickLabelStyle: PropTypes.object,
93
107
  tickMaxStep: PropTypes.number,
94
108
  tickMinStep: PropTypes.number,
95
109
  tickNumber: PropTypes.number,
@@ -118,33 +132,33 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
118
132
  fill: PropTypes.string,
119
133
  label: PropTypes.string,
120
134
  labelFontSize: PropTypes.number,
135
+ labelStyle: PropTypes.object,
121
136
  position: PropTypes.oneOf(['left', 'right']),
122
137
  slotProps: PropTypes.object,
123
138
  slots: PropTypes.object,
124
139
  stroke: PropTypes.string,
125
140
  tickFontSize: PropTypes.number,
141
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
142
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
143
+ tickLabelStyle: PropTypes.object,
126
144
  tickMaxStep: PropTypes.number,
127
145
  tickMinStep: PropTypes.number,
128
146
  tickNumber: PropTypes.number,
129
147
  tickSize: PropTypes.number
130
148
  }), PropTypes.string]),
149
+ /**
150
+ * @deprecated Consider using `slotProps.legend` instead.
151
+ */
131
152
  legend: PropTypes.shape({
132
153
  classes: PropTypes.object,
133
154
  direction: PropTypes.oneOf(['column', 'row']),
134
155
  hidden: PropTypes.bool,
135
- itemWidth: PropTypes.number,
136
- markSize: PropTypes.number,
137
- offset: PropTypes.shape({
138
- x: PropTypes.number,
139
- y: PropTypes.number
140
- }),
141
156
  position: PropTypes.shape({
142
157
  horizontal: PropTypes.oneOf(['left', 'middle', 'right']).isRequired,
143
158
  vertical: PropTypes.oneOf(['bottom', 'middle', 'top']).isRequired
144
159
  }),
145
160
  slotProps: PropTypes.object,
146
- slots: PropTypes.object,
147
- spacing: PropTypes.number
161
+ slots: PropTypes.object
148
162
  }),
149
163
  margin: PropTypes.shape({
150
164
  bottom: PropTypes.number,
@@ -165,11 +179,15 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
165
179
  fill: PropTypes.string,
166
180
  label: PropTypes.string,
167
181
  labelFontSize: PropTypes.number,
182
+ labelStyle: PropTypes.object,
168
183
  position: PropTypes.oneOf(['left', 'right']),
169
184
  slotProps: PropTypes.object,
170
185
  slots: PropTypes.object,
171
186
  stroke: PropTypes.string,
172
187
  tickFontSize: PropTypes.number,
188
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
189
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
190
+ tickLabelStyle: PropTypes.object,
173
191
  tickMaxStep: PropTypes.number,
174
192
  tickMinStep: PropTypes.number,
175
193
  tickNumber: PropTypes.number,
@@ -227,11 +245,15 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
227
245
  fill: PropTypes.string,
228
246
  label: PropTypes.string,
229
247
  labelFontSize: PropTypes.number,
248
+ labelStyle: PropTypes.object,
230
249
  position: PropTypes.oneOf(['bottom', 'top']),
231
250
  slotProps: PropTypes.object,
232
251
  slots: PropTypes.object,
233
252
  stroke: PropTypes.string,
234
253
  tickFontSize: PropTypes.number,
254
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
255
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
256
+ tickLabelStyle: PropTypes.object,
235
257
  tickMaxStep: PropTypes.number,
236
258
  tickMinStep: PropTypes.number,
237
259
  tickNumber: PropTypes.number,
@@ -256,6 +278,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
256
278
  id: PropTypes.string,
257
279
  label: PropTypes.string,
258
280
  labelFontSize: PropTypes.number,
281
+ labelStyle: PropTypes.object,
259
282
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
260
283
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
261
284
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -264,6 +287,9 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
264
287
  slots: PropTypes.object,
265
288
  stroke: PropTypes.string,
266
289
  tickFontSize: PropTypes.number,
290
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
291
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
292
+ tickLabelStyle: PropTypes.object,
267
293
  tickMaxStep: PropTypes.number,
268
294
  tickMinStep: PropTypes.number,
269
295
  tickNumber: PropTypes.number,
@@ -282,6 +308,7 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
282
308
  id: PropTypes.string,
283
309
  label: PropTypes.string,
284
310
  labelFontSize: PropTypes.number,
311
+ labelStyle: PropTypes.object,
285
312
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
286
313
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
287
314
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -290,6 +317,9 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
290
317
  slots: PropTypes.object,
291
318
  stroke: PropTypes.string,
292
319
  tickFontSize: PropTypes.number,
320
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
321
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
322
+ tickLabelStyle: PropTypes.object,
293
323
  tickMaxStep: PropTypes.number,
294
324
  tickMinStep: PropTypes.number,
295
325
  tickNumber: PropTypes.number,
@@ -5,6 +5,16 @@ import { Scatter } from './Scatter';
5
5
  import { SeriesContext } from '../context/SeriesContextProvider';
6
6
  import { CartesianContext } from '../context/CartesianContextProvider';
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
8
+ /**
9
+ * Demos:
10
+ *
11
+ * - [Scatter](https://mui.com/x/react-charts/scatter/)
12
+ * - [Scatter demonstration](https://mui.com/x/react-charts/scatter-demo/)
13
+ *
14
+ * API:
15
+ *
16
+ * - [ScatterPlot API](https://mui.com/x/api/charts/scatter-plot/)
17
+ */
8
18
  function ScatterPlot(props) {
9
19
  const {
10
20
  slots,
@@ -15,6 +15,16 @@ const SPARKLINE_DEFAULT_MARGIN = {
15
15
  left: 5,
16
16
  right: 5
17
17
  };
18
+
19
+ /**
20
+ * Demos:
21
+ *
22
+ * - [SparkLine](https://mui.com/x/react-charts/sparkline/)
23
+ *
24
+ * API:
25
+ *
26
+ * - [SparkLineChart API](https://mui.com/x/api/charts/spark-line-chart/)
27
+ */
18
28
  const SparkLineChart = /*#__PURE__*/React.forwardRef(function SparkLineChart(props, ref) {
19
29
  const {
20
30
  xAxis,
@@ -195,6 +205,7 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
195
205
  id: PropTypes.string,
196
206
  label: PropTypes.string,
197
207
  labelFontSize: PropTypes.number,
208
+ labelStyle: PropTypes.object,
198
209
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
199
210
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
200
211
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -203,6 +214,9 @@ process.env.NODE_ENV !== "production" ? SparkLineChart.propTypes = {
203
214
  slots: PropTypes.object,
204
215
  stroke: PropTypes.string,
205
216
  tickFontSize: PropTypes.number,
217
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
218
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
219
+ tickLabelStyle: PropTypes.object,
206
220
  tickMaxStep: PropTypes.number,
207
221
  tickMinStep: PropTypes.number,
208
222
  tickNumber: PropTypes.number,
@@ -1,7 +1,7 @@
1
1
  export const DEFAULT_X_AXIS_KEY = 'DEFAULT_X_AXIS_KEY';
2
2
  export const DEFAULT_Y_AXIS_KEY = 'DEFAULT_Y_AXIS_KEY';
3
3
  export const DEFAULT_MARGINS = {
4
- top: 100,
4
+ top: 50,
5
5
  bottom: 50,
6
6
  left: 50,
7
7
  right: 50
@@ -10,7 +10,7 @@ import { getScale } from '../internals/getScale';
10
10
  import { DrawingContext } from './DrawingProvider';
11
11
  import { SeriesContext } from './SeriesContextProvider';
12
12
  import { DEFAULT_X_AXIS_KEY, DEFAULT_Y_AXIS_KEY } from '../constants';
13
- import { getTicksNumber } from '../hooks/useTicks';
13
+ import { getTickNumber } from '../hooks/useTicks';
14
14
  import { jsx as _jsx } from "react/jsx-runtime";
15
15
  const DEFAULT_CATEGORY_GAP_RATIO = 0.2;
16
16
  const DEFAULT_BAR_GAP_RATIO = 0.1;
@@ -109,13 +109,13 @@ function CartesianContextProvider({
109
109
  barGapRatio
110
110
  }, axis, {
111
111
  scale: scaleBand(axis.data, range).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
112
- ticksNumber: axis.data.length
112
+ tickNumber: axis.data.length
113
113
  });
114
114
  }
115
115
  if (isPointScaleConfig(axis)) {
116
116
  completedXAxis[axis.id] = _extends({}, axis, {
117
117
  scale: scalePoint(axis.data, range),
118
- ticksNumber: axis.data.length
118
+ tickNumber: axis.data.length
119
119
  });
120
120
  }
121
121
  if (axis.scaleType === 'band' || axis.scaleType === 'point') {
@@ -124,17 +124,17 @@ function CartesianContextProvider({
124
124
  }
125
125
  const scaleType = axis.scaleType ?? 'linear';
126
126
  const extremums = [axis.min ?? minData, axis.max ?? maxData];
127
- const ticksNumber = getTicksNumber(_extends({}, axis, {
127
+ const tickNumber = getTickNumber(_extends({}, axis, {
128
128
  range,
129
129
  domain: extremums
130
130
  }));
131
- const niceScale = getScale(scaleType, extremums, range).nice(ticksNumber);
131
+ const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
132
132
  const niceDomain = niceScale.domain();
133
133
  const domain = [axis.min ?? niceDomain[0], axis.max ?? niceDomain[1]];
134
134
  completedXAxis[axis.id] = _extends({}, axis, {
135
135
  scaleType,
136
136
  scale: niceScale.domain(domain),
137
- ticksNumber
137
+ tickNumber
138
138
  });
139
139
  });
140
140
  const allYAxis = [...(yAxis?.map((axis, index) => _extends({
@@ -157,13 +157,13 @@ function CartesianContextProvider({
157
157
  barGapRatio: 0
158
158
  }, axis, {
159
159
  scale: scaleBand(axis.data, [range[1], range[0]]).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
160
- ticksNumber: axis.data.length
160
+ tickNumber: axis.data.length
161
161
  });
162
162
  }
163
163
  if (isPointScaleConfig(axis)) {
164
164
  completedYAxis[axis.id] = _extends({}, axis, {
165
165
  scale: scalePoint(axis.data, [range[1], range[0]]),
166
- ticksNumber: axis.data.length
166
+ tickNumber: axis.data.length
167
167
  });
168
168
  }
169
169
  if (axis.scaleType === 'band' || axis.scaleType === 'point') {
@@ -172,17 +172,17 @@ function CartesianContextProvider({
172
172
  }
173
173
  const scaleType = axis.scaleType ?? 'linear';
174
174
  const extremums = [axis.min ?? minData, axis.max ?? maxData];
175
- const ticksNumber = getTicksNumber(_extends({}, axis, {
175
+ const tickNumber = getTickNumber(_extends({}, axis, {
176
176
  range,
177
177
  domain: extremums
178
178
  }));
179
- const niceScale = getScale(scaleType, extremums, range).nice(ticksNumber);
179
+ const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
180
180
  const niceDomain = niceScale.domain();
181
181
  const domain = [axis.min ?? niceDomain[0], axis.max ?? niceDomain[1]];
182
182
  completedYAxis[axis.id] = _extends({}, axis, {
183
183
  scaleType,
184
184
  scale: niceScale.domain(domain),
185
- ticksNumber
185
+ tickNumber
186
186
  });
187
187
  });
188
188
  return {
@@ -222,6 +222,7 @@ process.env.NODE_ENV !== "production" ? CartesianContextProvider.propTypes = {
222
222
  id: PropTypes.string,
223
223
  label: PropTypes.string,
224
224
  labelFontSize: PropTypes.number,
225
+ labelStyle: PropTypes.object,
225
226
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
226
227
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
227
228
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -230,6 +231,9 @@ process.env.NODE_ENV !== "production" ? CartesianContextProvider.propTypes = {
230
231
  slots: PropTypes.object,
231
232
  stroke: PropTypes.string,
232
233
  tickFontSize: PropTypes.number,
234
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
235
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
236
+ tickLabelStyle: PropTypes.object,
233
237
  tickMaxStep: PropTypes.number,
234
238
  tickMinStep: PropTypes.number,
235
239
  tickNumber: PropTypes.number,
@@ -248,6 +252,7 @@ process.env.NODE_ENV !== "production" ? CartesianContextProvider.propTypes = {
248
252
  id: PropTypes.string,
249
253
  label: PropTypes.string,
250
254
  labelFontSize: PropTypes.number,
255
+ labelStyle: PropTypes.object,
251
256
  max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
252
257
  min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
253
258
  position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
@@ -256,6 +261,9 @@ process.env.NODE_ENV !== "production" ? CartesianContextProvider.propTypes = {
256
261
  slots: PropTypes.object,
257
262
  stroke: PropTypes.string,
258
263
  tickFontSize: PropTypes.number,
264
+ tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
265
+ tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
266
+ tickLabelStyle: PropTypes.object,
259
267
  tickMaxStep: PropTypes.number,
260
268
  tickMinStep: PropTypes.number,
261
269
  tickNumber: PropTypes.number,
@@ -9,6 +9,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
9
9
  export const DrawingContext = /*#__PURE__*/React.createContext({
10
10
  top: 0,
11
11
  left: 0,
12
+ bottom: 0,
13
+ right: 0,
12
14
  height: 300,
13
15
  width: 400
14
16
  });
@@ -6,6 +6,8 @@ const useChartDimensions = (width, height, margin) => {
6
6
  const drawingArea = React.useMemo(() => ({
7
7
  left: defaultizedMargin.left,
8
8
  top: defaultizedMargin.top,
9
+ right: defaultizedMargin.right,
10
+ bottom: defaultizedMargin.bottom,
9
11
  width: Math.max(0, width - defaultizedMargin.left - defaultizedMargin.right),
10
12
  height: Math.max(0, height - defaultizedMargin.top - defaultizedMargin.bottom)
11
13
  }), [width, height, defaultizedMargin.top, defaultizedMargin.bottom, defaultizedMargin.left, defaultizedMargin.right]);
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
3
+ export function useMounted(defer = false) {
4
+ const [mountedState, setMountedState] = React.useState(false);
5
+ useEnhancedEffect(() => {
6
+ if (!defer) {
7
+ setMountedState(true);
8
+ }
9
+ }, [defer]);
10
+ React.useEffect(() => {
11
+ if (defer) {
12
+ setMountedState(true);
13
+ }
14
+ }, [defer]);
15
+ return mountedState;
16
+ }
@@ -0,0 +1,27 @@
1
+ import { useIsomorphicLayoutEffect, Globals } from '@react-spring/web';
2
+
3
+ /**
4
+ * Returns `boolean` or `null`, used to automatically
5
+ * set skipAnimations to the value of the user's
6
+ * `prefers-reduced-motion` query.
7
+ *
8
+ * The return value, post-effect, is the value of their prefered setting
9
+ */
10
+ export const useReducedMotion = () => {
11
+ // Taken from: https://github.com/pmndrs/react-spring/blob/02ec877bbfab0df46da0e4a47d5f68d3e731206a/packages/shared/src/hooks/useReducedMotion.ts#L13
12
+
13
+ useIsomorphicLayoutEffect(() => {
14
+ const mql = window.matchMedia('(prefers-reduced-motion)');
15
+ const handleMediaChange = e => {
16
+ Globals.assign({
17
+ // Modification such the react-spring implementation such that this hook can remove animation but never activate animation.
18
+ skipAnimation: e.matches || undefined
19
+ });
20
+ };
21
+ handleMediaChange(mql);
22
+ mql.addEventListener('change', handleMediaChange);
23
+ return () => {
24
+ mql.removeEventListener('change', handleMediaChange);
25
+ };
26
+ }, []);
27
+ };
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { isBandScale } from '../internals/isBandScale';
3
- export function getTicksNumber(params) {
3
+ export function getTickNumber(params) {
4
4
  const {
5
5
  tickMaxStep,
6
6
  tickMinStep,
@@ -16,8 +16,9 @@ export function getTicksNumber(params) {
16
16
  function useTicks(options) {
17
17
  const {
18
18
  scale,
19
- ticksNumber,
20
- valueFormatter
19
+ tickNumber,
20
+ valueFormatter,
21
+ tickInterval
21
22
  } = options;
22
23
  return React.useMemo(() => {
23
24
  // band scale
@@ -26,7 +27,8 @@ function useTicks(options) {
26
27
  if (scale.bandwidth() > 0) {
27
28
  // scale type = 'band'
28
29
  return [...domain.map(value => ({
29
- formattedValue: valueFormatter?.(value) ?? value,
30
+ value,
31
+ formattedValue: valueFormatter?.(value) ?? `${value}`,
30
32
  offset: scale(value) - (scale.step() - scale.bandwidth()) / 2,
31
33
  labelOffset: scale.step() / 2
32
34
  })), {
@@ -37,17 +39,21 @@ function useTicks(options) {
37
39
  }
38
40
 
39
41
  // scale type = 'point'
40
- return domain.map(value => ({
41
- formattedValue: valueFormatter?.(value) ?? value,
42
+ const filteredDomain = typeof tickInterval === 'function' && domain.filter(tickInterval) || typeof tickInterval === 'object' && tickInterval || domain;
43
+ return filteredDomain.map(value => ({
44
+ value,
45
+ formattedValue: valueFormatter?.(value) ?? `${value}`,
42
46
  offset: scale(value),
43
47
  labelOffset: 0
44
48
  }));
45
49
  }
46
- return scale.ticks(ticksNumber).map(value => ({
47
- formattedValue: valueFormatter?.(value) ?? scale.tickFormat(ticksNumber)(value),
50
+ const ticks = typeof tickInterval === 'object' ? tickInterval : scale.ticks(tickNumber);
51
+ return ticks.map(value => ({
52
+ value,
53
+ formattedValue: valueFormatter?.(value) ?? scale.tickFormat(tickNumber)(value),
48
54
  offset: scale(value),
49
55
  labelOffset: 0
50
56
  }));
51
- }, [ticksNumber, scale, valueFormatter]);
57
+ }, [tickNumber, scale, valueFormatter, tickInterval]);
52
58
  }
53
59
  export default useTicks;
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-charts v6.0.0-alpha.14
2
+ * @mui/x-charts v6.0.0-alpha.16
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -5,77 +5,22 @@ export const AxisRoot = styled('g', {
5
5
  name: 'MuiChartsAxis',
6
6
  slot: 'Root',
7
7
  overridesResolver: (props, styles) => styles.root
8
- })({
9
- [`&.${axisClasses.directionY}`]: {
10
- [`.${axisClasses.tickLabel}`]: {
11
- dominantBaseline: 'middle'
12
- },
13
- [`.${axisClasses.label}`]: {
14
- dominantBaseline: 'auto',
15
- textAnchor: 'middle'
16
- }
17
- },
18
- [`&.${axisClasses.left}`]: {
19
- [`.${axisClasses.tickLabel}`]: {
20
- dominantBaseline: 'central',
21
- textAnchor: 'end'
22
- }
23
- },
24
- [`&.${axisClasses.right}`]: {
25
- [`.${axisClasses.tickLabel}`]: {
26
- dominantBaseline: 'central',
27
- textAnchor: 'start'
28
- }
29
- },
30
- [`&.${axisClasses.bottom}`]: {
31
- [`.${axisClasses.tickLabel}, .${axisClasses.label}`]: {
32
- dominantBaseline: 'hanging',
33
- textAnchor: 'middle'
34
- }
35
- },
36
- [`&.${axisClasses.top}`]: {
37
- [`.${axisClasses.tickLabel}, .${axisClasses.label}`]: {
38
- dominantBaseline: 'baseline',
39
- textAnchor: 'middle'
40
- }
41
- }
42
- });
43
- export const ChartsLine = styled('line', {
44
- name: 'MuiChartsAxis',
45
- slot: 'Line',
46
- overridesResolver: (props, styles) => styles.line
47
- })(({
48
- theme
49
- }) => ({
50
- stroke: (theme.vars || theme).palette.text.primary,
51
- shapeRendering: 'crispEdges',
52
- strokeWidth: 1
53
- }));
54
- export const ChartsTick = styled('line', {
55
- name: 'MuiChartsAxis',
56
- slot: 'Tick',
57
- overridesResolver: (props, styles) => styles.tick
58
8
  })(({
59
9
  theme
60
10
  }) => ({
61
- stroke: (theme.vars || theme).palette.text.primary,
62
- shapeRendering: 'crispEdges'
63
- }));
64
- export const ChartsTickLabel = styled('text', {
65
- name: 'MuiChartsAxis',
66
- slot: 'TickLabel',
67
- overridesResolver: (props, styles) => styles.tickLabel
68
- })(({
69
- theme
70
- }) => _extends({}, theme.typography.caption, {
71
- fill: (theme.vars || theme).palette.text.primary
72
- }));
73
- export const ChartsLabel = styled('text', {
74
- name: 'MuiChartsAxis',
75
- slot: 'Label',
76
- overridesResolver: (props, styles) => styles.label
77
- })(({
78
- theme
79
- }) => _extends({}, theme.typography.body1, {
80
- fill: (theme.vars || theme).palette.text.primary
11
+ [`& .${axisClasses.tickLabel}`]: _extends({}, theme.typography.caption, {
12
+ fill: (theme.vars || theme).palette.text.primary
13
+ }),
14
+ [`& .${axisClasses.label}`]: _extends({}, theme.typography.body1, {
15
+ fill: (theme.vars || theme).palette.text.primary
16
+ }),
17
+ [`& .${axisClasses.line}`]: {
18
+ stroke: (theme.vars || theme).palette.text.primary,
19
+ shapeRendering: 'crispEdges',
20
+ strokeWidth: 1
21
+ },
22
+ [`& .${axisClasses.tick}`]: {
23
+ stroke: (theme.vars || theme).palette.text.primary,
24
+ shapeRendering: 'crispEdges'
25
+ }
81
26
  }));
@@ -0,0 +1,75 @@
1
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ const _excluded = ["x", "y", "style", "text", "ownerState"],
4
+ _excluded2 = ["angle", "textAnchor", "dominantBaseline"];
5
+ import * as React from 'react';
6
+ import { getStringSize } from '../domUtils';
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ export function getWordsByLines({
9
+ style,
10
+ needsComputation,
11
+ text
12
+ }) {
13
+ return text.split('\n').map(subText => _extends({
14
+ text: subText
15
+ }, needsComputation ? getStringSize(subText, style) : {
16
+ width: 0,
17
+ height: 0
18
+ }));
19
+ }
20
+ export function ChartsText(props) {
21
+ const {
22
+ x,
23
+ y,
24
+ style: styleProps,
25
+ text
26
+ } = props,
27
+ textProps = _objectWithoutPropertiesLoose(props, _excluded);
28
+ const _ref = styleProps ?? {},
29
+ {
30
+ angle,
31
+ textAnchor,
32
+ dominantBaseline
33
+ } = _ref,
34
+ style = _objectWithoutPropertiesLoose(_ref, _excluded2);
35
+ const wordsByLines = React.useMemo(() => getWordsByLines({
36
+ style,
37
+ needsComputation: text.includes('\n'),
38
+ text
39
+ }), [style, text]);
40
+ let startDy;
41
+ switch (dominantBaseline) {
42
+ case 'hanging':
43
+ startDy = 0;
44
+ break;
45
+ case 'central':
46
+ startDy = (wordsByLines.length - 1) / 2 * -wordsByLines[0].height;
47
+ break;
48
+ default:
49
+ startDy = (wordsByLines.length - 1) * -wordsByLines[0].height;
50
+ break;
51
+ }
52
+ const transforms = [];
53
+ // if (scaleToFit) {
54
+ // const lineWidth = wordsByLines[0].width;
55
+ // transforms.push(`scale(${(isNumber(width as number) ? (width as number) / lineWidth : 1) / lineWidth})`);
56
+ // }
57
+ if (angle) {
58
+ transforms.push(`rotate(${angle}, ${x}, ${y})`);
59
+ }
60
+ if (transforms.length) {
61
+ textProps.transform = transforms.join(' ');
62
+ }
63
+ return /*#__PURE__*/_jsx("text", _extends({}, textProps, {
64
+ x: x,
65
+ y: y,
66
+ textAnchor: textAnchor,
67
+ dominantBaseline: dominantBaseline,
68
+ style: style,
69
+ children: wordsByLines.map((line, index) => /*#__PURE__*/_jsx("tspan", {
70
+ x: x,
71
+ dy: `${index === 0 ? startDy : wordsByLines[0].height}px`,
72
+ children: line.text
73
+ }, index))
74
+ }));
75
+ }