@mui/x-charts 7.0.0-beta.5 → 7.0.0-beta.7

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 (57) hide show
  1. package/BarChart/BarChart.js +12 -0
  2. package/CHANGELOG.md +252 -50
  3. package/ChartContainer/ChartContainer.js +4 -0
  4. package/ChartsAxis/ChartsAxis.js +8 -0
  5. package/ChartsLegend/ChartsLegend.d.ts +3 -0
  6. package/ChartsLegend/ChartsLegend.js +3 -0
  7. package/ChartsLegend/DefaultChartsLegend.js +23 -27
  8. package/ChartsTooltip/ChartsTooltip.d.ts +12 -0
  9. package/ChartsTooltip/DefaultChartsAxisTooltipContent.js +3 -1
  10. package/ChartsXAxis/ChartsXAxis.js +18 -2
  11. package/ChartsYAxis/ChartsYAxis.js +18 -2
  12. package/LineChart/LineChart.js +12 -0
  13. package/PieChart/PieChart.js +29 -8
  14. package/ResponsiveChartContainer/ResponsiveChartContainer.js +4 -0
  15. package/ScatterChart/ScatterChart.js +12 -0
  16. package/SparkLineChart/SparkLineChart.js +2 -0
  17. package/esm/BarChart/BarChart.js +12 -0
  18. package/esm/ChartContainer/ChartContainer.js +4 -0
  19. package/esm/ChartsAxis/ChartsAxis.js +8 -0
  20. package/esm/ChartsLegend/ChartsLegend.js +3 -0
  21. package/esm/ChartsLegend/DefaultChartsLegend.js +23 -27
  22. package/esm/ChartsTooltip/DefaultChartsAxisTooltipContent.js +3 -1
  23. package/esm/ChartsXAxis/ChartsXAxis.js +18 -2
  24. package/esm/ChartsYAxis/ChartsYAxis.js +18 -2
  25. package/esm/LineChart/LineChart.js +12 -0
  26. package/esm/PieChart/PieChart.js +29 -8
  27. package/esm/ResponsiveChartContainer/ResponsiveChartContainer.js +4 -0
  28. package/esm/ScatterChart/ScatterChart.js +12 -0
  29. package/esm/SparkLineChart/SparkLineChart.js +2 -0
  30. package/esm/hooks/useAxisEvents.js +9 -1
  31. package/esm/hooks/useTicks.js +23 -9
  32. package/esm/internals/useIsRTL.js +5 -0
  33. package/hooks/useAxisEvents.js +9 -1
  34. package/hooks/useTicks.d.ts +15 -3
  35. package/hooks/useTicks.js +23 -9
  36. package/index.js +1 -1
  37. package/internals/useIsRTL.d.ts +1 -0
  38. package/internals/useIsRTL.js +12 -0
  39. package/models/axis.d.ts +27 -2
  40. package/modern/BarChart/BarChart.js +12 -0
  41. package/modern/ChartContainer/ChartContainer.js +4 -0
  42. package/modern/ChartsAxis/ChartsAxis.js +8 -0
  43. package/modern/ChartsLegend/ChartsLegend.js +3 -0
  44. package/modern/ChartsLegend/DefaultChartsLegend.js +23 -27
  45. package/modern/ChartsTooltip/DefaultChartsAxisTooltipContent.js +3 -1
  46. package/modern/ChartsXAxis/ChartsXAxis.js +18 -2
  47. package/modern/ChartsYAxis/ChartsYAxis.js +18 -2
  48. package/modern/LineChart/LineChart.js +12 -0
  49. package/modern/PieChart/PieChart.js +29 -8
  50. package/modern/ResponsiveChartContainer/ResponsiveChartContainer.js +4 -0
  51. package/modern/ScatterChart/ScatterChart.js +12 -0
  52. package/modern/SparkLineChart/SparkLineChart.js +2 -0
  53. package/modern/hooks/useAxisEvents.js +9 -1
  54. package/modern/hooks/useTicks.js +23 -9
  55. package/modern/index.js +1 -1
  56. package/modern/internals/useIsRTL.js +5 -0
  57. package/package.json +2 -2
@@ -156,10 +156,12 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
156
156
  tickFontSize: PropTypes.number,
157
157
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
158
158
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
159
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
159
160
  tickLabelStyle: PropTypes.object,
160
161
  tickMaxStep: PropTypes.number,
161
162
  tickMinStep: PropTypes.number,
162
163
  tickNumber: PropTypes.number,
164
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
163
165
  tickSize: PropTypes.number
164
166
  }), PropTypes.string]),
165
167
  children: PropTypes.node,
@@ -217,10 +219,12 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
217
219
  tickFontSize: PropTypes.number,
218
220
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
219
221
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
222
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
220
223
  tickLabelStyle: PropTypes.object,
221
224
  tickMaxStep: PropTypes.number,
222
225
  tickMinStep: PropTypes.number,
223
226
  tickNumber: PropTypes.number,
227
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
224
228
  tickSize: PropTypes.number
225
229
  }), PropTypes.string]),
226
230
  /**
@@ -283,10 +287,12 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
283
287
  tickFontSize: PropTypes.number,
284
288
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
285
289
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
290
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
286
291
  tickLabelStyle: PropTypes.object,
287
292
  tickMaxStep: PropTypes.number,
288
293
  tickMinStep: PropTypes.number,
289
294
  tickNumber: PropTypes.number,
295
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
290
296
  tickSize: PropTypes.number
291
297
  }), PropTypes.string]),
292
298
  /**
@@ -343,10 +349,12 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
343
349
  tickFontSize: PropTypes.number,
344
350
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
345
351
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
352
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
346
353
  tickLabelStyle: PropTypes.object,
347
354
  tickMaxStep: PropTypes.number,
348
355
  tickMinStep: PropTypes.number,
349
356
  tickNumber: PropTypes.number,
357
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
350
358
  tickSize: PropTypes.number
351
359
  }), PropTypes.string]),
352
360
  viewBox: PropTypes.shape({
@@ -387,10 +395,12 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
387
395
  tickFontSize: PropTypes.number,
388
396
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
389
397
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
398
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
390
399
  tickLabelStyle: PropTypes.object,
391
400
  tickMaxStep: PropTypes.number,
392
401
  tickMinStep: PropTypes.number,
393
402
  tickNumber: PropTypes.number,
403
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
394
404
  tickSize: PropTypes.number,
395
405
  valueFormatter: PropTypes.func
396
406
  })),
@@ -422,10 +432,12 @@ process.env.NODE_ENV !== "production" ? BarChart.propTypes = {
422
432
  tickFontSize: PropTypes.number,
423
433
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
424
434
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
435
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
425
436
  tickLabelStyle: PropTypes.object,
426
437
  tickMaxStep: PropTypes.number,
427
438
  tickMinStep: PropTypes.number,
428
439
  tickNumber: PropTypes.number,
440
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
429
441
  tickSize: PropTypes.number,
430
442
  valueFormatter: PropTypes.func
431
443
  }))
@@ -145,10 +145,12 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
145
145
  tickFontSize: PropTypes.number,
146
146
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
147
147
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
148
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
148
149
  tickLabelStyle: PropTypes.object,
149
150
  tickMaxStep: PropTypes.number,
150
151
  tickMinStep: PropTypes.number,
151
152
  tickNumber: PropTypes.number,
153
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
152
154
  tickSize: PropTypes.number,
153
155
  valueFormatter: PropTypes.func
154
156
  })),
@@ -180,10 +182,12 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
180
182
  tickFontSize: PropTypes.number,
181
183
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
182
184
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
185
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
183
186
  tickLabelStyle: PropTypes.object,
184
187
  tickMaxStep: PropTypes.number,
185
188
  tickMinStep: PropTypes.number,
186
189
  tickNumber: PropTypes.number,
190
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
187
191
  tickSize: PropTypes.number,
188
192
  valueFormatter: PropTypes.func
189
193
  }))
@@ -116,10 +116,12 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
116
116
  tickFontSize: PropTypes.number,
117
117
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
118
118
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
119
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
119
120
  tickLabelStyle: PropTypes.object,
120
121
  tickMaxStep: PropTypes.number,
121
122
  tickMinStep: PropTypes.number,
122
123
  tickNumber: PropTypes.number,
124
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
123
125
  tickSize: PropTypes.number
124
126
  }), PropTypes.string]),
125
127
  /**
@@ -143,10 +145,12 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
143
145
  tickFontSize: PropTypes.number,
144
146
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
145
147
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
148
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
146
149
  tickLabelStyle: PropTypes.object,
147
150
  tickMaxStep: PropTypes.number,
148
151
  tickMinStep: PropTypes.number,
149
152
  tickNumber: PropTypes.number,
153
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
150
154
  tickSize: PropTypes.number
151
155
  }), PropTypes.string]),
152
156
  /**
@@ -170,10 +174,12 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
170
174
  tickFontSize: PropTypes.number,
171
175
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
172
176
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
177
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
173
178
  tickLabelStyle: PropTypes.object,
174
179
  tickMaxStep: PropTypes.number,
175
180
  tickMinStep: PropTypes.number,
176
181
  tickNumber: PropTypes.number,
182
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
177
183
  tickSize: PropTypes.number
178
184
  }), PropTypes.string]),
179
185
  /**
@@ -207,10 +213,12 @@ process.env.NODE_ENV !== "production" ? ChartsAxis.propTypes = {
207
213
  tickFontSize: PropTypes.number,
208
214
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
209
215
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
216
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
210
217
  tickLabelStyle: PropTypes.object,
211
218
  tickMaxStep: PropTypes.number,
212
219
  tickMinStep: PropTypes.number,
213
220
  tickNumber: PropTypes.number,
221
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
214
222
  tickSize: PropTypes.number
215
223
  }), PropTypes.string])
216
224
  } : void 0;
@@ -86,6 +86,9 @@ process.env.NODE_ENV !== "production" ? ChartsLegend.propTypes = {
86
86
  * @default false
87
87
  */
88
88
  hidden: PropTypes.bool,
89
+ /**
90
+ * The position of the legend.
91
+ */
89
92
  position: PropTypes.shape({
90
93
  horizontal: PropTypes.oneOf(['left', 'middle', 'right']).isRequired,
91
94
  vertical: PropTypes.oneOf(['bottom', 'middle', 'top']).isRequired
@@ -50,6 +50,7 @@ function DefaultChartsLegend(props) {
50
50
  labelStyle: inLabelStyle
51
51
  } = props;
52
52
  const theme = useTheme();
53
+ const isRTL = theme.direction === 'rtl';
53
54
  const labelStyle = React.useMemo(() => _extends({}, theme.typography.subtitle1, {
54
55
  color: 'inherit',
55
56
  dominantBaseline: 'central',
@@ -80,7 +81,7 @@ function DefaultChartsLegend(props) {
80
81
  const totalHeight = drawingArea.top + drawingArea.height + drawingArea.bottom;
81
82
  const availableWidth = totalWidth - padding.left - padding.right;
82
83
  const availableHeight = totalHeight - padding.top - padding.bottom;
83
- const seriesWithPosition = React.useMemo(() => {
84
+ const [seriesWithPosition, legendWidth, legendHeight] = React.useMemo(() => {
84
85
  // Start at 0, 0. Will be modified later by padding and position.
85
86
  let x = 0;
86
87
  let y = 0;
@@ -144,40 +145,31 @@ function DefaultChartsLegend(props) {
144
145
  }
145
146
  return rep;
146
147
  });
147
-
148
- // Move the legend according to padding and position
149
- let gapX = 0;
150
- let gapY = 0;
148
+ return [seriesWithRawPosition.map(item => _extends({}, item, {
149
+ positionY: item.positionY + (direction === 'row' ? rowMaxHeight[item.rowIndex] / 2 // Get the center of the entire row
150
+ : item.outerHeight / 2) // Get the center of the item
151
+ })), totalWidthUsed, totalHeightUsed];
152
+ }, [seriesToDisplay, getItemSpace, labelStyle, direction, availableWidth, availableHeight, itemGap]);
153
+ const gapX = React.useMemo(() => {
151
154
  switch (position.horizontal) {
152
155
  case 'left':
153
- gapX = padding.left;
154
- break;
156
+ return padding.left;
155
157
  case 'right':
156
- gapX = totalWidth - padding.right - totalWidthUsed;
157
- break;
158
+ return totalWidth - padding.right - legendWidth;
158
159
  default:
159
- gapX = (totalWidth - totalWidthUsed) / 2;
160
- break;
160
+ return (totalWidth - legendWidth) / 2;
161
161
  }
162
+ }, [position.horizontal, padding.left, padding.right, totalWidth, legendWidth]);
163
+ const gapY = React.useMemo(() => {
162
164
  switch (position.vertical) {
163
165
  case 'top':
164
- gapY = padding.top;
165
- break;
166
+ return padding.top;
166
167
  case 'bottom':
167
- gapY = totalHeight - padding.bottom - totalHeightUsed;
168
- break;
168
+ return totalHeight - padding.bottom - legendHeight;
169
169
  default:
170
- gapY = (totalHeight - totalHeightUsed) / 2;
171
- break;
170
+ return (totalHeight - legendHeight) / 2;
172
171
  }
173
- return seriesWithRawPosition.map(item => _extends({}, item, {
174
- // Add the gap due to the position
175
- positionX: item.positionX + gapX,
176
- // Add the gap due to the position
177
- positionY: item.positionY + gapY + (direction === 'row' ? rowMaxHeight[item.rowIndex] / 2 // Get the center of the entire row
178
- : item.outerHeight / 2) // Get the center of the item
179
- }));
180
- }, [seriesToDisplay, position.horizontal, position.vertical, getItemSpace, labelStyle, direction, availableWidth, availableHeight, itemGap, padding.left, padding.right, padding.top, padding.bottom, totalWidth, totalHeight]);
172
+ }, [position.vertical, padding.top, padding.bottom, totalHeight, legendHeight]);
181
173
  if (hidden) {
182
174
  return null;
183
175
  }
@@ -192,9 +184,10 @@ function DefaultChartsLegend(props) {
192
184
  positionY
193
185
  }) => /*#__PURE__*/_jsxs("g", {
194
186
  className: classes.series,
195
- transform: `translate(${positionX} ${positionY})`,
187
+ transform: `translate(${gapX + (isRTL ? legendWidth - positionX : positionX)} ${gapY + positionY})`,
196
188
  children: [/*#__PURE__*/_jsx("rect", {
197
189
  className: classes.mark,
190
+ x: isRTL ? -itemMarkWidth : 0,
198
191
  y: -itemMarkHeight / 2,
199
192
  width: itemMarkWidth,
200
193
  height: itemMarkHeight,
@@ -202,7 +195,7 @@ function DefaultChartsLegend(props) {
202
195
  }), /*#__PURE__*/_jsx(ChartsText, {
203
196
  style: labelStyle,
204
197
  text: label,
205
- x: itemMarkWidth + markGap,
198
+ x: (isRTL ? -1 : 1) * (itemMarkWidth + markGap),
206
199
  y: 0
207
200
  })]
208
201
  }, id))
@@ -272,6 +265,9 @@ process.env.NODE_ENV !== "production" ? DefaultChartsLegend.propTypes = {
272
265
  right: PropTypes.number,
273
266
  top: PropTypes.number
274
267
  })]),
268
+ /**
269
+ * The position of the legend.
270
+ */
275
271
  position: PropTypes.shape({
276
272
  horizontal: PropTypes.oneOf(['left', 'middle', 'right']).isRequired,
277
273
  vertical: PropTypes.oneOf(['bottom', 'middle', 'top']).isRequired
@@ -30,7 +30,9 @@ function DefaultChartsAxisTooltipContent(props) {
30
30
  children: /*#__PURE__*/_jsx(ChartsTooltipCell, {
31
31
  colSpan: 3,
32
32
  children: /*#__PURE__*/_jsx(Typography, {
33
- children: axisFormatter(axisValue)
33
+ children: axisFormatter(axisValue, {
34
+ location: 'tooltip'
35
+ })
34
36
  })
35
37
  })
36
38
  })
@@ -141,7 +141,9 @@ function ChartsXAxis(inProps) {
141
141
  slots,
142
142
  slotProps,
143
143
  tickInterval,
144
- tickLabelInterval
144
+ tickLabelInterval,
145
+ tickPlacement,
146
+ tickLabelPlacement
145
147
  } = defaultizedProps;
146
148
  const theme = useTheme();
147
149
  const classes = useUtilityClasses(_extends({}, defaultizedProps, {
@@ -177,7 +179,9 @@ function ChartsXAxis(inProps) {
177
179
  scale: xScale,
178
180
  tickNumber,
179
181
  valueFormatter,
180
- tickInterval
182
+ tickInterval,
183
+ tickPlacement,
184
+ tickLabelPlacement
181
185
  });
182
186
  const xTicksWithDimension = addLabelDimension(xTicks, {
183
187
  tickLabelStyle: axisTickLabelProps.style,
@@ -320,6 +324,12 @@ process.env.NODE_ENV !== "production" ? ChartsXAxis.propTypes = {
320
324
  * @default 'auto'
321
325
  */
322
326
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
327
+ /**
328
+ * The placement of ticks label. Can be the middle of the band, or the tick position.
329
+ * Only used if scale is 'band'.
330
+ * @default 'middle'
331
+ */
332
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
323
333
  /**
324
334
  * The style applied to ticks text.
325
335
  */
@@ -341,6 +351,12 @@ process.env.NODE_ENV !== "production" ? ChartsXAxis.propTypes = {
341
351
  * Not supported by categorical axis (band, points).
342
352
  */
343
353
  tickNumber: PropTypes.number,
354
+ /**
355
+ * The placement of ticks in regard to the band interval.
356
+ * Only used if scale is 'band'.
357
+ * @default 'extremities'
358
+ */
359
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
344
360
  /**
345
361
  * The size of the ticks.
346
362
  * @default 6
@@ -80,7 +80,9 @@ function ChartsYAxis(inProps) {
80
80
  tickSize: tickSizeProp,
81
81
  valueFormatter,
82
82
  slots,
83
- slotProps
83
+ slotProps,
84
+ tickPlacement,
85
+ tickLabelPlacement
84
86
  } = defaultizedProps;
85
87
  const theme = useTheme();
86
88
  const classes = useUtilityClasses(_extends({}, defaultizedProps, {
@@ -96,7 +98,9 @@ function ChartsYAxis(inProps) {
96
98
  const yTicks = useTicks({
97
99
  scale: yScale,
98
100
  tickNumber,
99
- valueFormatter
101
+ valueFormatter,
102
+ tickPlacement,
103
+ tickLabelPlacement
100
104
  });
101
105
  const positionSign = position === 'right' ? 1 : -1;
102
106
  const labelRefPoint = {
@@ -250,6 +254,12 @@ process.env.NODE_ENV !== "production" ? ChartsYAxis.propTypes = {
250
254
  * @default 'auto'
251
255
  */
252
256
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
257
+ /**
258
+ * The placement of ticks label. Can be the middle of the band, or the tick position.
259
+ * Only used if scale is 'band'.
260
+ * @default 'middle'
261
+ */
262
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
253
263
  /**
254
264
  * The style applied to ticks text.
255
265
  */
@@ -271,6 +281,12 @@ process.env.NODE_ENV !== "production" ? ChartsYAxis.propTypes = {
271
281
  * Not supported by categorical axis (band, points).
272
282
  */
273
283
  tickNumber: PropTypes.number,
284
+ /**
285
+ * The placement of ticks in regard to the band interval.
286
+ * Only used if scale is 'band'.
287
+ * @default 'extremities'
288
+ */
289
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
274
290
  /**
275
291
  * The size of the ticks.
276
292
  * @default 6
@@ -163,10 +163,12 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
163
163
  tickFontSize: PropTypes.number,
164
164
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
165
165
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
166
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
166
167
  tickLabelStyle: PropTypes.object,
167
168
  tickMaxStep: PropTypes.number,
168
169
  tickMinStep: PropTypes.number,
169
170
  tickNumber: PropTypes.number,
171
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
170
172
  tickSize: PropTypes.number
171
173
  }), PropTypes.string]),
172
174
  children: PropTypes.node,
@@ -223,10 +225,12 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
223
225
  tickFontSize: PropTypes.number,
224
226
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
225
227
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
228
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
226
229
  tickLabelStyle: PropTypes.object,
227
230
  tickMaxStep: PropTypes.number,
228
231
  tickMinStep: PropTypes.number,
229
232
  tickNumber: PropTypes.number,
233
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
230
234
  tickSize: PropTypes.number
231
235
  }), PropTypes.string]),
232
236
  /**
@@ -295,10 +299,12 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
295
299
  tickFontSize: PropTypes.number,
296
300
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
297
301
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
302
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
298
303
  tickLabelStyle: PropTypes.object,
299
304
  tickMaxStep: PropTypes.number,
300
305
  tickMinStep: PropTypes.number,
301
306
  tickNumber: PropTypes.number,
307
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
302
308
  tickSize: PropTypes.number
303
309
  }), PropTypes.string]),
304
310
  /**
@@ -356,10 +362,12 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
356
362
  tickFontSize: PropTypes.number,
357
363
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
358
364
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
365
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
359
366
  tickLabelStyle: PropTypes.object,
360
367
  tickMaxStep: PropTypes.number,
361
368
  tickMinStep: PropTypes.number,
362
369
  tickNumber: PropTypes.number,
370
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
363
371
  tickSize: PropTypes.number
364
372
  }), PropTypes.string]),
365
373
  viewBox: PropTypes.shape({
@@ -400,10 +408,12 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
400
408
  tickFontSize: PropTypes.number,
401
409
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
402
410
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
411
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
403
412
  tickLabelStyle: PropTypes.object,
404
413
  tickMaxStep: PropTypes.number,
405
414
  tickMinStep: PropTypes.number,
406
415
  tickNumber: PropTypes.number,
416
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
407
417
  tickSize: PropTypes.number,
408
418
  valueFormatter: PropTypes.func
409
419
  })),
@@ -435,10 +445,12 @@ process.env.NODE_ENV !== "production" ? LineChart.propTypes = {
435
445
  tickFontSize: PropTypes.number,
436
446
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
437
447
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
448
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
438
449
  tickLabelStyle: PropTypes.object,
439
450
  tickMaxStep: PropTypes.number,
440
451
  tickMinStep: PropTypes.number,
441
452
  tickNumber: PropTypes.number,
453
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
442
454
  tickSize: PropTypes.number,
443
455
  valueFormatter: PropTypes.func
444
456
  }))
@@ -8,6 +8,7 @@ import { ChartsTooltip } from '../ChartsTooltip';
8
8
  import { ChartsLegend } from '../ChartsLegend';
9
9
  import { ChartsAxisHighlight } from '../ChartsAxisHighlight';
10
10
  import { PiePlot } from './PiePlot';
11
+ import { useIsRTL } from '../internals/useIsRTL';
11
12
  import { jsx as _jsx } from "react/jsx-runtime";
12
13
  import { jsxs as _jsxs } from "react/jsx-runtime";
13
14
  const defaultMargin = {
@@ -16,6 +17,12 @@ const defaultMargin = {
16
17
  left: 5,
17
18
  right: 100
18
19
  };
20
+ const defaultRTLMargin = {
21
+ top: 5,
22
+ bottom: 5,
23
+ left: 100,
24
+ right: 5
25
+ };
19
26
 
20
27
  /**
21
28
  * Demos:
@@ -45,13 +52,7 @@ function PieChart(props) {
45
52
  y: 'none'
46
53
  },
47
54
  skipAnimation,
48
- legend = {
49
- direction: 'column',
50
- position: {
51
- vertical: 'middle',
52
- horizontal: 'right'
53
- }
54
- },
55
+ legend: legendProps,
55
56
  topAxis = null,
56
57
  leftAxis = null,
57
58
  rightAxis = null,
@@ -61,7 +62,15 @@ function PieChart(props) {
61
62
  slotProps,
62
63
  onItemClick
63
64
  } = props;
64
- const margin = _extends({}, defaultMargin, marginProps);
65
+ const isRTL = useIsRTL();
66
+ const margin = _extends({}, isRTL ? defaultRTLMargin : defaultMargin, marginProps);
67
+ const legend = _extends({
68
+ direction: 'column',
69
+ position: {
70
+ vertical: 'middle',
71
+ horizontal: isRTL ? 'left' : 'right'
72
+ }
73
+ }, legendProps);
65
74
  return /*#__PURE__*/_jsxs(ResponsiveChartContainer, {
66
75
  series: series.map(s => _extends({
67
76
  type: 'pie'
@@ -131,10 +140,12 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
131
140
  tickFontSize: PropTypes.number,
132
141
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
133
142
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
143
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
134
144
  tickLabelStyle: PropTypes.object,
135
145
  tickMaxStep: PropTypes.number,
136
146
  tickMinStep: PropTypes.number,
137
147
  tickNumber: PropTypes.number,
148
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
138
149
  tickSize: PropTypes.number
139
150
  }), PropTypes.string]),
140
151
  children: PropTypes.node,
@@ -180,10 +191,12 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
180
191
  tickFontSize: PropTypes.number,
181
192
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
182
193
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
194
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
183
195
  tickLabelStyle: PropTypes.object,
184
196
  tickMaxStep: PropTypes.number,
185
197
  tickMinStep: PropTypes.number,
186
198
  tickNumber: PropTypes.number,
199
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
187
200
  tickSize: PropTypes.number
188
201
  }), PropTypes.string]),
189
202
  /**
@@ -239,10 +252,12 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
239
252
  tickFontSize: PropTypes.number,
240
253
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
241
254
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
255
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
242
256
  tickLabelStyle: PropTypes.object,
243
257
  tickMaxStep: PropTypes.number,
244
258
  tickMinStep: PropTypes.number,
245
259
  tickNumber: PropTypes.number,
260
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
246
261
  tickSize: PropTypes.number
247
262
  }), PropTypes.string]),
248
263
  /**
@@ -300,10 +315,12 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
300
315
  tickFontSize: PropTypes.number,
301
316
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
302
317
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
318
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
303
319
  tickLabelStyle: PropTypes.object,
304
320
  tickMaxStep: PropTypes.number,
305
321
  tickMinStep: PropTypes.number,
306
322
  tickNumber: PropTypes.number,
323
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
307
324
  tickSize: PropTypes.number
308
325
  }), PropTypes.string]),
309
326
  viewBox: PropTypes.shape({
@@ -344,10 +361,12 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
344
361
  tickFontSize: PropTypes.number,
345
362
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
346
363
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
364
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
347
365
  tickLabelStyle: PropTypes.object,
348
366
  tickMaxStep: PropTypes.number,
349
367
  tickMinStep: PropTypes.number,
350
368
  tickNumber: PropTypes.number,
369
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
351
370
  tickSize: PropTypes.number,
352
371
  valueFormatter: PropTypes.func
353
372
  })),
@@ -379,10 +398,12 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
379
398
  tickFontSize: PropTypes.number,
380
399
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
381
400
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
401
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
382
402
  tickLabelStyle: PropTypes.object,
383
403
  tickMaxStep: PropTypes.number,
384
404
  tickMinStep: PropTypes.number,
385
405
  tickNumber: PropTypes.number,
406
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
386
407
  tickSize: PropTypes.number,
387
408
  valueFormatter: PropTypes.func
388
409
  }))
@@ -135,10 +135,12 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
135
135
  tickFontSize: PropTypes.number,
136
136
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
137
137
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
138
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
138
139
  tickLabelStyle: PropTypes.object,
139
140
  tickMaxStep: PropTypes.number,
140
141
  tickMinStep: PropTypes.number,
141
142
  tickNumber: PropTypes.number,
143
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
142
144
  tickSize: PropTypes.number,
143
145
  valueFormatter: PropTypes.func
144
146
  })),
@@ -170,10 +172,12 @@ process.env.NODE_ENV !== "production" ? ResponsiveChartContainer.propTypes = {
170
172
  tickFontSize: PropTypes.number,
171
173
  tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
172
174
  tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
175
+ tickLabelPlacement: PropTypes.oneOf(['middle', 'tick']),
173
176
  tickLabelStyle: PropTypes.object,
174
177
  tickMaxStep: PropTypes.number,
175
178
  tickMinStep: PropTypes.number,
176
179
  tickNumber: PropTypes.number,
180
+ tickPlacement: PropTypes.oneOf(['end', 'extremities', 'middle', 'start']),
177
181
  tickSize: PropTypes.number,
178
182
  valueFormatter: PropTypes.func
179
183
  }))