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

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 (83) hide show
  1. package/BarChart/BarChart.d.ts +3 -0
  2. package/BarChart/BarChart.js +4 -8
  3. package/CHANGELOG.md +104 -0
  4. package/ChartsLegend/ChartsLegend.d.ts +43 -24
  5. package/ChartsLegend/ChartsLegend.js +185 -143
  6. package/ChartsLegend/utils.d.ts +1 -6
  7. package/ChartsSurface.js +3 -11
  8. package/ChartsXAxis/ChartsXAxis.js +48 -25
  9. package/ChartsYAxis/ChartsYAxis.js +47 -26
  10. package/LineChart/LineChart.d.ts +3 -0
  11. package/LineChart/LineChart.js +4 -8
  12. package/PieChart/PieChart.d.ts +3 -0
  13. package/PieChart/PieChart.js +4 -8
  14. package/ScatterChart/ScatterChart.d.ts +3 -0
  15. package/ScatterChart/ScatterChart.js +4 -8
  16. package/constants.js +1 -1
  17. package/context/CartesianContextProvider.js +10 -10
  18. package/context/DrawingProvider.d.ts +2 -0
  19. package/context/DrawingProvider.js +2 -0
  20. package/esm/BarChart/BarChart.js +4 -8
  21. package/esm/ChartsLegend/ChartsLegend.js +184 -142
  22. package/esm/ChartsSurface.js +3 -11
  23. package/esm/ChartsXAxis/ChartsXAxis.js +47 -24
  24. package/esm/ChartsYAxis/ChartsYAxis.js +46 -25
  25. package/esm/LineChart/LineChart.js +4 -8
  26. package/esm/PieChart/PieChart.js +4 -8
  27. package/esm/ScatterChart/ScatterChart.js +4 -8
  28. package/esm/constants.js +1 -1
  29. package/esm/context/CartesianContextProvider.js +11 -11
  30. package/esm/context/DrawingProvider.js +2 -0
  31. package/esm/hooks/useChartDimensions.js +2 -0
  32. package/esm/hooks/useTicks.js +5 -5
  33. package/esm/internals/components/AxisSharedComponents.js +15 -70
  34. package/esm/internals/components/ChartsText.js +71 -0
  35. package/esm/internals/domUtils.js +113 -0
  36. package/hooks/useChartDimensions.d.ts +2 -0
  37. package/hooks/useChartDimensions.js +2 -0
  38. package/hooks/useTicks.d.ts +2 -3
  39. package/hooks/useTicks.js +6 -6
  40. package/index.js +1 -1
  41. package/internals/components/AxisSharedComponents.d.ts +0 -4
  42. package/internals/components/AxisSharedComponents.js +16 -71
  43. package/internals/components/ChartsText.d.ts +32 -0
  44. package/internals/components/ChartsText.js +81 -0
  45. package/internals/domUtils.d.ts +14 -0
  46. package/internals/domUtils.js +122 -0
  47. package/legacy/BarChart/BarChart.js +4 -8
  48. package/legacy/ChartsLegend/ChartsLegend.js +196 -140
  49. package/legacy/ChartsSurface.js +2 -11
  50. package/legacy/ChartsXAxis/ChartsXAxis.js +47 -24
  51. package/legacy/ChartsYAxis/ChartsYAxis.js +46 -25
  52. package/legacy/LineChart/LineChart.js +4 -8
  53. package/legacy/PieChart/PieChart.js +4 -8
  54. package/legacy/ScatterChart/ScatterChart.js +4 -8
  55. package/legacy/constants.js +1 -1
  56. package/legacy/context/CartesianContextProvider.js +11 -11
  57. package/legacy/context/DrawingProvider.js +2 -0
  58. package/legacy/hooks/useChartDimensions.js +2 -0
  59. package/legacy/hooks/useTicks.js +5 -5
  60. package/legacy/index.js +1 -1
  61. package/legacy/internals/components/AxisSharedComponents.js +9 -63
  62. package/legacy/internals/components/ChartsText.js +77 -0
  63. package/legacy/internals/domUtils.js +121 -0
  64. package/models/axis.d.ts +6 -5
  65. package/models/layout.d.ts +7 -6
  66. package/modern/BarChart/BarChart.js +4 -8
  67. package/modern/ChartsLegend/ChartsLegend.js +184 -142
  68. package/modern/ChartsSurface.js +3 -11
  69. package/modern/ChartsXAxis/ChartsXAxis.js +47 -24
  70. package/modern/ChartsYAxis/ChartsYAxis.js +46 -25
  71. package/modern/LineChart/LineChart.js +4 -8
  72. package/modern/PieChart/PieChart.js +4 -8
  73. package/modern/ScatterChart/ScatterChart.js +4 -8
  74. package/modern/constants.js +1 -1
  75. package/modern/context/CartesianContextProvider.js +11 -11
  76. package/modern/context/DrawingProvider.js +2 -0
  77. package/modern/hooks/useChartDimensions.js +2 -0
  78. package/modern/hooks/useTicks.js +5 -5
  79. package/modern/index.js +1 -1
  80. package/modern/internals/components/AxisSharedComponents.js +15 -70
  81. package/modern/internals/components/ChartsText.js +71 -0
  82. package/modern/internals/domUtils.js +113 -0
  83. package/package.json +1 -1
@@ -148,23 +148,19 @@ process.env.NODE_ENV !== "production" ? PieChart.propTypes = {
148
148
  tickNumber: PropTypes.number,
149
149
  tickSize: PropTypes.number
150
150
  }), PropTypes.string]),
151
+ /**
152
+ * @deprecated Consider using `slotProps.legend` instead.
153
+ */
151
154
  legend: PropTypes.shape({
152
155
  classes: PropTypes.object,
153
156
  direction: PropTypes.oneOf(['column', 'row']),
154
157
  hidden: PropTypes.bool,
155
- itemWidth: PropTypes.number,
156
- markSize: PropTypes.number,
157
- offset: PropTypes.shape({
158
- x: PropTypes.number,
159
- y: PropTypes.number
160
- }),
161
158
  position: PropTypes.shape({
162
159
  horizontal: PropTypes.oneOf(['left', 'middle', 'right']).isRequired,
163
160
  vertical: PropTypes.oneOf(['bottom', 'middle', 'top']).isRequired
164
161
  }),
165
162
  slotProps: PropTypes.object,
166
- slots: PropTypes.object,
167
- spacing: PropTypes.number
163
+ slots: PropTypes.object
168
164
  }),
169
165
  margin: PropTypes.shape({
170
166
  bottom: PropTypes.number,
@@ -128,23 +128,19 @@ process.env.NODE_ENV !== "production" ? ScatterChart.propTypes = {
128
128
  tickNumber: PropTypes.number,
129
129
  tickSize: PropTypes.number
130
130
  }), PropTypes.string]),
131
+ /**
132
+ * @deprecated Consider using `slotProps.legend` instead.
133
+ */
131
134
  legend: PropTypes.shape({
132
135
  classes: PropTypes.object,
133
136
  direction: PropTypes.oneOf(['column', 'row']),
134
137
  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
138
  position: PropTypes.shape({
142
139
  horizontal: PropTypes.oneOf(['left', 'middle', 'right']).isRequired,
143
140
  vertical: PropTypes.oneOf(['bottom', 'middle', 'top']).isRequired
144
141
  }),
145
142
  slotProps: PropTypes.object,
146
- slots: PropTypes.object,
147
- spacing: PropTypes.number
143
+ slots: PropTypes.object
148
144
  }),
149
145
  margin: PropTypes.shape({
150
146
  bottom: PropTypes.number,
package/esm/constants.js CHANGED
@@ -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;
@@ -113,13 +113,13 @@ function CartesianContextProvider({
113
113
  barGapRatio
114
114
  }, axis, {
115
115
  scale: scaleBand(axis.data, range).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
116
- ticksNumber: axis.data.length
116
+ tickNumber: axis.data.length
117
117
  });
118
118
  }
119
119
  if (isPointScaleConfig(axis)) {
120
120
  completedXAxis[axis.id] = _extends({}, axis, {
121
121
  scale: scalePoint(axis.data, range),
122
- ticksNumber: axis.data.length
122
+ tickNumber: axis.data.length
123
123
  });
124
124
  }
125
125
  if (axis.scaleType === 'band' || axis.scaleType === 'point') {
@@ -128,17 +128,17 @@ function CartesianContextProvider({
128
128
  }
129
129
  const scaleType = (_axis$scaleType = axis.scaleType) != null ? _axis$scaleType : 'linear';
130
130
  const extremums = [(_axis$min = axis.min) != null ? _axis$min : minData, (_axis$max = axis.max) != null ? _axis$max : maxData];
131
- const ticksNumber = getTicksNumber(_extends({}, axis, {
131
+ const tickNumber = getTickNumber(_extends({}, axis, {
132
132
  range,
133
133
  domain: extremums
134
134
  }));
135
- const niceScale = getScale(scaleType, extremums, range).nice(ticksNumber);
135
+ const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
136
136
  const niceDomain = niceScale.domain();
137
137
  const domain = [(_axis$min2 = axis.min) != null ? _axis$min2 : niceDomain[0], (_axis$max2 = axis.max) != null ? _axis$max2 : niceDomain[1]];
138
138
  completedXAxis[axis.id] = _extends({}, axis, {
139
139
  scaleType,
140
140
  scale: niceScale.domain(domain),
141
- ticksNumber
141
+ tickNumber
142
142
  });
143
143
  });
144
144
  const allYAxis = [...((_yAxis$map = yAxis == null ? void 0 : yAxis.map((axis, index) => _extends({
@@ -163,13 +163,13 @@ function CartesianContextProvider({
163
163
  barGapRatio: 0
164
164
  }, axis, {
165
165
  scale: scaleBand(axis.data, [range[1], range[0]]).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
166
- ticksNumber: axis.data.length
166
+ tickNumber: axis.data.length
167
167
  });
168
168
  }
169
169
  if (isPointScaleConfig(axis)) {
170
170
  completedYAxis[axis.id] = _extends({}, axis, {
171
171
  scale: scalePoint(axis.data, [range[1], range[0]]),
172
- ticksNumber: axis.data.length
172
+ tickNumber: axis.data.length
173
173
  });
174
174
  }
175
175
  if (axis.scaleType === 'band' || axis.scaleType === 'point') {
@@ -178,17 +178,17 @@ function CartesianContextProvider({
178
178
  }
179
179
  const scaleType = (_axis$scaleType2 = axis.scaleType) != null ? _axis$scaleType2 : 'linear';
180
180
  const extremums = [(_axis$min3 = axis.min) != null ? _axis$min3 : minData, (_axis$max3 = axis.max) != null ? _axis$max3 : maxData];
181
- const ticksNumber = getTicksNumber(_extends({}, axis, {
181
+ const tickNumber = getTickNumber(_extends({}, axis, {
182
182
  range,
183
183
  domain: extremums
184
184
  }));
185
- const niceScale = getScale(scaleType, extremums, range).nice(ticksNumber);
185
+ const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
186
186
  const niceDomain = niceScale.domain();
187
187
  const domain = [(_axis$min4 = axis.min) != null ? _axis$min4 : niceDomain[0], (_axis$max4 = axis.max) != null ? _axis$max4 : niceDomain[1]];
188
188
  completedYAxis[axis.id] = _extends({}, axis, {
189
189
  scaleType,
190
190
  scale: niceScale.domain(domain),
191
- ticksNumber
191
+ tickNumber
192
192
  });
193
193
  });
194
194
  return {
@@ -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]);
@@ -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,7 +16,7 @@ export function getTicksNumber(params) {
16
16
  function useTicks(options) {
17
17
  const {
18
18
  scale,
19
- ticksNumber,
19
+ tickNumber,
20
20
  valueFormatter
21
21
  } = options;
22
22
  return React.useMemo(() => {
@@ -49,14 +49,14 @@ function useTicks(options) {
49
49
  };
50
50
  });
51
51
  }
52
- return scale.ticks(ticksNumber).map(value => {
52
+ return scale.ticks(tickNumber).map(value => {
53
53
  var _valueFormatter3;
54
54
  return {
55
- formattedValue: (_valueFormatter3 = valueFormatter == null ? void 0 : valueFormatter(value)) != null ? _valueFormatter3 : scale.tickFormat(ticksNumber)(value),
55
+ formattedValue: (_valueFormatter3 = valueFormatter == null ? void 0 : valueFormatter(value)) != null ? _valueFormatter3 : scale.tickFormat(tickNumber)(value),
56
56
  offset: scale(value),
57
57
  labelOffset: 0
58
58
  };
59
59
  });
60
- }, [ticksNumber, scale, valueFormatter]);
60
+ }, [tickNumber, scale, valueFormatter]);
61
61
  }
62
62
  export default useTicks;
@@ -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,71 @@
1
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ const _excluded = ["x", "y", "textAnchor", "dominantBaseline", "style", "text", "ownerState"];
4
+ import * as React from 'react';
5
+ import { getStringSize } from '../domUtils';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export function getWordsByLines({
8
+ style,
9
+ needsComputation,
10
+ text
11
+ }) {
12
+ return text.split('\n').map(subText => _extends({
13
+ text: subText
14
+ }, needsComputation ? getStringSize(subText, style) : {
15
+ width: 0,
16
+ height: 0
17
+ }));
18
+ }
19
+ export function ChartsText(props) {
20
+ const {
21
+ x,
22
+ y,
23
+ textAnchor = 'start',
24
+ dominantBaseline = 'central',
25
+ style,
26
+ text
27
+ } = props,
28
+ textProps = _objectWithoutPropertiesLoose(props, _excluded);
29
+ const wordsByLines = React.useMemo(() => getWordsByLines({
30
+ style,
31
+ needsComputation: text.includes('\n'),
32
+ text
33
+ }), [style, text]);
34
+ let startDy;
35
+ switch (dominantBaseline) {
36
+ case 'hanging':
37
+ startDy = 0;
38
+ break;
39
+ case 'central':
40
+ startDy = (wordsByLines.length - 1) / 2 * -wordsByLines[0].height;
41
+ break;
42
+ default:
43
+ startDy = (wordsByLines.length - 1) * -wordsByLines[0].height;
44
+ break;
45
+ }
46
+
47
+ // const transforms = [];
48
+ // if (scaleToFit) {
49
+ // const lineWidth = wordsByLines[0].width;
50
+ // transforms.push(`scale(${(isNumber(width as number) ? (width as number) / lineWidth : 1) / lineWidth})`);
51
+ // }
52
+ // if (angle) {
53
+ // transforms.push(`rotate(${angle}, ${x}, ${y})`);
54
+ // }
55
+ // if (transforms.length) {
56
+ // textProps.transform = transforms.join(' ');
57
+ // }
58
+
59
+ return /*#__PURE__*/_jsx("text", _extends({}, textProps, {
60
+ x: x,
61
+ y: y,
62
+ textAnchor: textAnchor,
63
+ dominantBaseline: dominantBaseline,
64
+ style: style,
65
+ children: wordsByLines.map((line, index) => /*#__PURE__*/_jsx("tspan", {
66
+ x: x,
67
+ dy: `${index === 0 ? startDy : wordsByLines[0].height}px`,
68
+ children: line.text
69
+ }, index))
70
+ }));
71
+ }
@@ -0,0 +1,113 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ // DOM utils taken from
3
+ // https://github.com/recharts/recharts/blob/master/src/util/DOMUtils.ts
4
+
5
+ const isSsr = () => !(typeof window !== 'undefined' && window.document && window.setTimeout);
6
+ const stringCache = {
7
+ widthCache: {},
8
+ cacheCount: 0
9
+ };
10
+ const MAX_CACHE_NUM = 2000;
11
+ const SPAN_STYLE = {
12
+ position: 'absolute',
13
+ top: '-20000px',
14
+ left: 0,
15
+ padding: 0,
16
+ margin: 0,
17
+ border: 'none',
18
+ whiteSpace: 'pre'
19
+ };
20
+ const STYLE_LIST = ['minWidth', 'maxWidth', 'width', 'minHeight', 'maxHeight', 'height', 'top', 'left', 'fontSize', 'padding', 'margin', 'paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom', 'marginLeft', 'marginRight', 'marginTop', 'marginBottom'];
21
+ const MEASUREMENT_SPAN_ID = 'mui_measurement_span';
22
+
23
+ /**
24
+ *
25
+ * @param name CSS property name
26
+ * @param value
27
+ * @returns add 'px' for distance properties
28
+ */
29
+ function autoCompleteStyle(name, value) {
30
+ if (STYLE_LIST.indexOf(name) >= 0 && value === +value) {
31
+ return `${value}px`;
32
+ }
33
+ return value;
34
+ }
35
+
36
+ /**
37
+ *
38
+ * @param text camelcase css property
39
+ * @returns css property
40
+ */
41
+ function camelToMiddleLine(text) {
42
+ const strs = text.split('');
43
+ const formatStrs = strs.reduce((result, entry) => {
44
+ if (entry === entry.toUpperCase()) {
45
+ return [...result, '-', entry.toLowerCase()];
46
+ }
47
+ return [...result, entry];
48
+ }, []);
49
+ return formatStrs.join('');
50
+ }
51
+
52
+ /**
53
+ *
54
+ * @param style React style object
55
+ * @returns CSS styling string
56
+ */
57
+ export const getStyleString = style => Object.keys(style).sort().reduce((result, s) => `${result}${camelToMiddleLine(s)}:${autoCompleteStyle(s, style[s])};`, '');
58
+
59
+ /**
60
+ *
61
+ * @param text The string to estimate
62
+ * @param style The style applied
63
+ * @returns width and height of the text
64
+ */
65
+ export const getStringSize = (text, style = {}) => {
66
+ if (text === undefined || text === null || isSsr()) {
67
+ return {
68
+ width: 0,
69
+ height: 0
70
+ };
71
+ }
72
+ const str = `${text}`;
73
+ const styleString = getStyleString(style);
74
+ const cacheKey = `${str}-${styleString}`;
75
+ if (stringCache.widthCache[cacheKey]) {
76
+ return stringCache.widthCache[cacheKey];
77
+ }
78
+ try {
79
+ let measurementSpan = document.getElementById(MEASUREMENT_SPAN_ID);
80
+ if (measurementSpan === null) {
81
+ measurementSpan = document.createElement('span');
82
+ measurementSpan.setAttribute('id', MEASUREMENT_SPAN_ID);
83
+ measurementSpan.setAttribute('aria-hidden', 'true');
84
+ document.body.appendChild(measurementSpan);
85
+ }
86
+ // Need to use CSS Object Model (CSSOM) to be able to comply with Content Security Policy (CSP)
87
+ // https://en.wikipedia.org/wiki/Content_Security_Policy
88
+ const measurementSpanStyle = _extends({}, SPAN_STYLE, style);
89
+ Object.keys(measurementSpanStyle).map(styleKey => {
90
+ measurementSpan.style[camelToMiddleLine(styleKey)] = autoCompleteStyle(styleKey, measurementSpanStyle[styleKey]);
91
+ return styleKey;
92
+ });
93
+ measurementSpan.textContent = str;
94
+ const rect = measurementSpan.getBoundingClientRect();
95
+ const result = {
96
+ width: rect.width,
97
+ height: rect.height
98
+ };
99
+ stringCache.widthCache[cacheKey] = result;
100
+ if (stringCache.cacheCount + 1 > MAX_CACHE_NUM) {
101
+ stringCache.cacheCount = 0;
102
+ stringCache.widthCache = {};
103
+ } else {
104
+ stringCache.cacheCount += 1;
105
+ }
106
+ return result;
107
+ } catch (e) {
108
+ return {
109
+ width: 0,
110
+ height: 0
111
+ };
112
+ }
113
+ };
@@ -2,6 +2,8 @@ import { LayoutConfig } from '../models/layout';
2
2
  declare const useChartDimensions: (width: number, height: number, margin: LayoutConfig['margin']) => {
3
3
  left: number;
4
4
  top: number;
5
+ right: number;
6
+ bottom: number;
5
7
  width: number;
6
8
  height: number;
7
9
  };
@@ -15,6 +15,8 @@ const useChartDimensions = (width, height, margin) => {
15
15
  const drawingArea = React.useMemo(() => ({
16
16
  left: defaultizedMargin.left,
17
17
  top: defaultizedMargin.top,
18
+ right: defaultizedMargin.right,
19
+ bottom: defaultizedMargin.bottom,
18
20
  width: Math.max(0, width - defaultizedMargin.left - defaultizedMargin.right),
19
21
  height: Math.max(0, height - defaultizedMargin.top - defaultizedMargin.bottom)
20
22
  }), [width, height, defaultizedMargin.top, defaultizedMargin.bottom, defaultizedMargin.left, defaultizedMargin.right]);
@@ -18,15 +18,14 @@ export interface TickParams {
18
18
  */
19
19
  tickNumber?: number;
20
20
  }
21
- export declare function getTicksNumber(params: TickParams & {
21
+ export declare function getTickNumber(params: TickParams & {
22
22
  range: any[];
23
23
  domain: any[];
24
24
  }): number;
25
25
  declare function useTicks(options: {
26
26
  scale: D3Scale;
27
- ticksNumber?: number;
28
27
  valueFormatter?: (value: any) => string;
29
- }): {
28
+ } & Pick<TickParams, 'tickNumber'>): {
30
29
  formattedValue: any;
31
30
  offset: number;
32
31
  labelOffset: number;
package/hooks/useTicks.js CHANGED
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- exports.getTicksNumber = getTicksNumber;
7
+ exports.getTickNumber = getTickNumber;
8
8
  var React = _interopRequireWildcard(require("react"));
9
9
  var _isBandScale = require("../internals/isBandScale");
10
10
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
11
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
- function getTicksNumber(params) {
12
+ function getTickNumber(params) {
13
13
  const {
14
14
  tickMaxStep,
15
15
  tickMinStep,
@@ -25,7 +25,7 @@ function getTicksNumber(params) {
25
25
  function useTicks(options) {
26
26
  const {
27
27
  scale,
28
- ticksNumber,
28
+ tickNumber,
29
29
  valueFormatter
30
30
  } = options;
31
31
  return React.useMemo(() => {
@@ -52,11 +52,11 @@ function useTicks(options) {
52
52
  labelOffset: 0
53
53
  }));
54
54
  }
55
- return scale.ticks(ticksNumber).map(value => ({
56
- formattedValue: valueFormatter?.(value) ?? scale.tickFormat(ticksNumber)(value),
55
+ return scale.ticks(tickNumber).map(value => ({
56
+ formattedValue: valueFormatter?.(value) ?? scale.tickFormat(tickNumber)(value),
57
57
  offset: scale(value),
58
58
  labelOffset: 0
59
59
  }));
60
- }, [ticksNumber, scale, valueFormatter]);
60
+ }, [tickNumber, scale, valueFormatter]);
61
61
  }
62
62
  var _default = exports.default = useTicks;
package/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.15
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -1,6 +1,2 @@
1
1
  /// <reference types="react" />
2
2
  export declare const AxisRoot: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<import("react").SVGProps<SVGGElement>, keyof import("react").SVGProps<SVGGElement>>, {}>;
3
- export declare const ChartsLine: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<import("react").SVGLineElementAttributes<SVGLineElement>, keyof import("react").SVGLineElementAttributes<SVGLineElement>>, {}>;
4
- export declare const ChartsTick: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<import("react").SVGLineElementAttributes<SVGLineElement>, keyof import("react").SVGLineElementAttributes<SVGLineElement>>, {}>;
5
- export declare const ChartsTickLabel: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<import("react").SVGTextElementAttributes<SVGTextElement>, keyof import("react").SVGTextElementAttributes<SVGTextElement>>, {}>;
6
- export declare const ChartsLabel: import("@emotion/styled").StyledComponent<import("@mui/system").MUIStyledCommonProps<import("@mui/material/styles").Theme>, Pick<import("react").SVGTextElementAttributes<SVGTextElement>, keyof import("react").SVGTextElementAttributes<SVGTextElement>>, {}>;