@mui/x-charts 6.0.0-alpha.8 → 6.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BarChart/BarChart.d.ts +19 -5
- package/BarChart/BarChart.js +52 -13
- package/BarChart/BarElement.d.ts +1319 -4
- package/BarChart/BarElement.js +10 -10
- package/BarChart/BarPlot.d.ts +17 -1
- package/BarChart/BarPlot.js +152 -66
- package/BarChart/formatter.js +2 -3
- package/BarChart/legend.js +1 -2
- package/CHANGELOG.md +786 -48
- package/ChartContainer/index.js +7 -5
- package/ChartsAxis/ChartsAxis.d.ts +9 -0
- package/ChartsAxis/ChartsAxis.js +28 -2
- package/ChartsAxis/axisClasses.d.ts +1 -1
- package/ChartsAxis/axisClasses.js +1 -2
- package/ChartsAxisHighlight/ChartsAxisHighlight.d.ts +21 -0
- package/ChartsAxisHighlight/ChartsAxisHighlight.js +61 -22
- package/ChartsClipPath/ChartsClipPath.d.ts +5 -0
- package/ChartsClipPath/ChartsClipPath.js +7 -2
- package/ChartsLegend/ChartsLegend.d.ts +44 -24
- package/ChartsLegend/ChartsLegend.js +192 -150
- package/ChartsLegend/chartsLegendClasses.js +1 -2
- package/ChartsLegend/utils.d.ts +1 -6
- package/ChartsSurface.d.ts +1 -1
- package/ChartsSurface.js +9 -18
- package/ChartsTooltip/ChartsAxisTooltipContent.d.ts +1 -0
- package/ChartsTooltip/ChartsAxisTooltipContent.js +46 -32
- package/ChartsTooltip/ChartsItemTooltipContent.d.ts +3 -2
- package/ChartsTooltip/ChartsItemTooltipContent.js +18 -9
- package/ChartsTooltip/ChartsTooltip.d.ts +32 -0
- package/ChartsTooltip/ChartsTooltip.js +62 -18
- package/ChartsTooltip/ChartsTooltipTable.d.ts +3 -10
- package/ChartsTooltip/ChartsTooltipTable.js +22 -20
- package/ChartsTooltip/tooltipClasses.js +1 -2
- package/ChartsTooltip/utils.js +2 -2
- package/ChartsXAxis/ChartsXAxis.d.ts +9 -0
- package/ChartsXAxis/ChartsXAxis.js +161 -40
- package/ChartsYAxis/ChartsYAxis.d.ts +9 -0
- package/ChartsYAxis/ChartsYAxis.js +86 -33
- package/LineChart/AreaElement.d.ts +12 -2
- package/LineChart/AreaElement.js +14 -6
- package/LineChart/AreaPlot.d.ts +11 -0
- package/LineChart/AreaPlot.js +27 -8
- package/LineChart/LineChart.d.ts +21 -3
- package/LineChart/LineChart.js +61 -14
- package/LineChart/LineElement.d.ts +12 -2
- package/LineChart/LineElement.js +14 -6
- package/LineChart/LineHighlightElement.d.ts +31 -0
- package/LineChart/LineHighlightElement.js +88 -0
- package/LineChart/LineHighlightPlot.d.ts +35 -0
- package/LineChart/LineHighlightPlot.js +110 -0
- package/LineChart/LinePlot.d.ts +10 -0
- package/LineChart/LinePlot.js +25 -12
- package/LineChart/MarkElement.d.ts +11 -1
- package/LineChart/MarkElement.js +15 -9
- package/LineChart/MarkPlot.d.ts +10 -0
- package/LineChart/MarkPlot.js +62 -15
- package/LineChart/formatter.js +5 -5
- package/LineChart/index.d.ts +2 -0
- package/LineChart/index.js +20 -0
- package/LineChart/legend.js +1 -2
- package/PieChart/PieArc.d.ts +12 -14
- package/PieChart/PieArc.js +28 -60
- package/PieChart/PieArcLabel.d.ts +9 -10
- package/PieChart/PieArcLabel.js +46 -38
- package/PieChart/PieArcLabelPlot.d.ts +28 -0
- package/PieChart/PieArcLabelPlot.js +99 -0
- package/PieChart/PieArcPlot.d.ts +35 -0
- package/PieChart/PieArcPlot.js +92 -0
- package/PieChart/PieChart.d.ts +19 -5
- package/PieChart/PieChart.js +61 -14
- package/PieChart/PiePlot.d.ts +15 -9
- package/PieChart/PiePlot.js +77 -55
- package/PieChart/dataTransform/transition.d.ts +4 -0
- package/PieChart/dataTransform/transition.js +136 -0
- package/PieChart/dataTransform/useTransformData.d.ts +15 -0
- package/PieChart/dataTransform/useTransformData.js +67 -0
- package/PieChart/formatter.js +1 -2
- package/PieChart/legend.js +1 -2
- package/README.md +8 -14
- package/ResponsiveChartContainer/index.js +7 -8
- package/ScatterChart/Scatter.d.ts +10 -0
- package/ScatterChart/Scatter.js +12 -2
- package/ScatterChart/ScatterChart.d.ts +16 -3
- package/ScatterChart/ScatterChart.js +43 -12
- package/ScatterChart/ScatterPlot.d.ts +10 -0
- package/ScatterChart/ScatterPlot.js +12 -2
- package/ScatterChart/formatter.js +1 -2
- package/ScatterChart/legend.js +1 -2
- package/SparkLineChart/SparkLineChart.d.ts +13 -3
- package/SparkLineChart/SparkLineChart.js +34 -18
- package/colorPalettes/colorPalettes.js +6 -12
- package/constants.js +5 -8
- package/context/CartesianContextProvider.d.ts +5 -0
- package/context/CartesianContextProvider.js +31 -16
- package/context/DrawingProvider.d.ts +7 -0
- package/context/DrawingProvider.js +12 -6
- package/context/HighlightProvider.js +3 -4
- package/context/InteractionProvider.js +3 -4
- package/context/SeriesContextProvider.js +3 -4
- package/esm/BarChart/BarChart.js +49 -9
- package/esm/BarChart/BarElement.js +7 -4
- package/esm/BarChart/BarPlot.js +152 -67
- package/esm/BarChart/formatter.js +1 -1
- package/esm/ChartContainer/index.js +3 -0
- package/esm/ChartsAxis/ChartsAxis.js +26 -0
- package/esm/ChartsAxisHighlight/ChartsAxisHighlight.js +57 -20
- package/esm/ChartsClipPath/ChartsClipPath.js +5 -0
- package/esm/ChartsLegend/ChartsLegend.js +188 -142
- package/esm/ChartsSurface.js +4 -12
- package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +44 -30
- package/esm/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
- package/esm/ChartsTooltip/ChartsTooltip.js +59 -14
- package/esm/ChartsTooltip/ChartsTooltipTable.js +17 -10
- package/esm/ChartsXAxis/ChartsXAxis.js +158 -37
- package/esm/ChartsYAxis/ChartsYAxis.js +83 -30
- package/esm/LineChart/AreaElement.js +10 -0
- package/esm/LineChart/AreaPlot.js +26 -6
- package/esm/LineChart/LineChart.js +58 -10
- package/esm/LineChart/LineElement.js +10 -0
- package/esm/LineChart/LineHighlightElement.js +78 -0
- package/esm/LineChart/LineHighlightPlot.js +103 -0
- package/esm/LineChart/LinePlot.js +25 -14
- package/esm/LineChart/MarkElement.js +12 -5
- package/esm/LineChart/MarkPlot.js +60 -13
- package/esm/LineChart/formatter.js +7 -3
- package/esm/LineChart/index.js +3 -1
- package/esm/PieChart/PieArc.js +26 -58
- package/esm/PieChart/PieArcLabel.js +43 -34
- package/esm/PieChart/PieArcLabelPlot.js +92 -0
- package/esm/PieChart/PieArcPlot.js +84 -0
- package/esm/PieChart/PieChart.js +59 -12
- package/esm/PieChart/PiePlot.js +76 -57
- package/esm/PieChart/dataTransform/transition.js +130 -0
- package/esm/PieChart/dataTransform/useTransformData.js +59 -0
- package/esm/ResponsiveChartContainer/index.js +3 -3
- package/esm/ScatterChart/Scatter.js +10 -0
- package/esm/ScatterChart/ScatterChart.js +40 -8
- package/esm/ScatterChart/ScatterPlot.js +10 -0
- package/esm/SparkLineChart/SparkLineChart.js +32 -15
- package/esm/constants.js +1 -1
- package/esm/context/CartesianContextProvider.js +30 -14
- package/esm/context/DrawingProvider.js +8 -0
- package/esm/hooks/useChartDimensions.js +2 -0
- package/esm/hooks/useMounted.js +16 -0
- package/esm/hooks/useReducedMotion.js +27 -0
- package/esm/hooks/useTicks.js +15 -9
- package/esm/internals/components/AxisSharedComponents.js +15 -70
- package/esm/internals/components/ChartsText.js +77 -0
- package/esm/internals/domUtils.js +113 -0
- package/esm/internals/geometry.js +36 -0
- package/hooks/useAxisEvents.js +2 -2
- package/hooks/useChartDimensions.d.ts +2 -0
- package/hooks/useChartDimensions.js +5 -4
- package/hooks/useDrawingArea.js +2 -2
- package/hooks/useInteractionItemProps.js +2 -2
- package/hooks/useMounted.d.ts +1 -0
- package/hooks/useMounted.js +25 -0
- package/hooks/useReducedMotion.d.ts +8 -0
- package/hooks/useReducedMotion.js +33 -0
- package/hooks/useScale.d.ts +2 -2
- package/hooks/useScale.js +2 -2
- package/hooks/useTicks.d.ts +19 -11
- package/hooks/useTicks.js +19 -14
- package/index.js +1 -1
- package/internals/components/AxisSharedComponents.d.ts +0 -4
- package/internals/components/AxisSharedComponents.js +18 -78
- package/internals/components/ChartsText.d.ts +35 -0
- package/internals/components/ChartsText.js +87 -0
- package/internals/defaultizeColor.d.ts +8 -1
- package/internals/defaultizeValueFormatter.js +1 -2
- package/internals/domUtils.d.ts +13 -0
- package/internals/domUtils.js +122 -0
- package/internals/geometry.d.ts +9 -0
- package/internals/geometry.js +42 -0
- package/internals/stackSeries.js +2 -4
- package/legacy/BarChart/BarChart.js +49 -9
- package/legacy/BarChart/BarElement.js +6 -3
- package/legacy/BarChart/BarPlot.js +151 -63
- package/legacy/BarChart/formatter.js +1 -1
- package/legacy/ChartContainer/index.js +3 -0
- package/legacy/ChartsAxis/ChartsAxis.js +26 -0
- package/legacy/ChartsAxisHighlight/ChartsAxisHighlight.js +60 -20
- package/legacy/ChartsClipPath/ChartsClipPath.js +5 -0
- package/legacy/ChartsLegend/ChartsLegend.js +203 -140
- package/legacy/ChartsSurface.js +3 -12
- package/legacy/ChartsTooltip/ChartsAxisTooltipContent.js +22 -10
- package/legacy/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
- package/legacy/ChartsTooltip/ChartsTooltip.js +62 -14
- package/legacy/ChartsTooltip/ChartsTooltipTable.js +34 -26
- package/legacy/ChartsXAxis/ChartsXAxis.js +162 -39
- package/legacy/ChartsYAxis/ChartsYAxis.js +83 -30
- package/legacy/LineChart/AreaElement.js +10 -0
- package/legacy/LineChart/AreaPlot.js +31 -7
- package/legacy/LineChart/LineChart.js +58 -10
- package/legacy/LineChart/LineElement.js +10 -0
- package/legacy/LineChart/LineHighlightElement.js +77 -0
- package/legacy/LineChart/LineHighlightPlot.js +96 -0
- package/legacy/LineChart/LinePlot.js +29 -12
- package/legacy/LineChart/MarkElement.js +12 -5
- package/legacy/LineChart/MarkPlot.js +50 -5
- package/legacy/LineChart/formatter.js +7 -3
- package/legacy/LineChart/index.js +3 -1
- package/legacy/PieChart/PieArc.js +30 -62
- package/legacy/PieChart/PieArcLabel.js +48 -34
- package/legacy/PieChart/PieArcLabelPlot.js +93 -0
- package/legacy/PieChart/PieArcPlot.js +84 -0
- package/legacy/PieChart/PieChart.js +59 -12
- package/legacy/PieChart/PiePlot.js +76 -59
- package/legacy/PieChart/dataTransform/transition.js +142 -0
- package/legacy/PieChart/dataTransform/useTransformData.js +60 -0
- package/legacy/ResponsiveChartContainer/index.js +3 -3
- package/legacy/ScatterChart/Scatter.js +10 -0
- package/legacy/ScatterChart/ScatterChart.js +40 -8
- package/legacy/ScatterChart/ScatterPlot.js +10 -0
- package/legacy/SparkLineChart/SparkLineChart.js +32 -13
- package/legacy/constants.js +1 -1
- package/legacy/context/CartesianContextProvider.js +30 -14
- package/legacy/context/DrawingProvider.js +8 -0
- package/legacy/hooks/useChartDimensions.js +2 -0
- package/legacy/hooks/useMounted.js +21 -0
- package/legacy/hooks/useReducedMotion.js +27 -0
- package/legacy/hooks/useTicks.js +16 -9
- package/legacy/index.js +1 -1
- package/legacy/internals/components/AxisSharedComponents.js +11 -65
- package/legacy/internals/components/ChartsText.js +79 -0
- package/legacy/internals/domUtils.js +121 -0
- package/legacy/internals/geometry.js +37 -0
- package/models/axis.d.ts +27 -9
- package/models/layout.d.ts +7 -6
- package/models/seriesType/line.d.ts +39 -1
- package/models/seriesType/pie.d.ts +5 -1
- package/modern/BarChart/BarChart.js +49 -9
- package/modern/BarChart/BarElement.js +7 -4
- package/modern/BarChart/BarPlot.js +149 -65
- package/modern/BarChart/formatter.js +1 -1
- package/modern/ChartContainer/index.js +3 -0
- package/modern/ChartsAxis/ChartsAxis.js +26 -0
- package/modern/ChartsAxisHighlight/ChartsAxisHighlight.js +57 -20
- package/modern/ChartsClipPath/ChartsClipPath.js +5 -0
- package/modern/ChartsLegend/ChartsLegend.js +188 -142
- package/modern/ChartsSurface.js +4 -12
- package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +44 -30
- package/modern/ChartsTooltip/ChartsItemTooltipContent.js +15 -7
- package/modern/ChartsTooltip/ChartsTooltip.js +58 -14
- package/modern/ChartsTooltip/ChartsTooltipTable.js +17 -10
- package/modern/ChartsXAxis/ChartsXAxis.js +158 -37
- package/modern/ChartsYAxis/ChartsYAxis.js +83 -30
- package/modern/LineChart/AreaElement.js +10 -0
- package/modern/LineChart/AreaPlot.js +25 -6
- package/modern/LineChart/LineChart.js +58 -10
- package/modern/LineChart/LineElement.js +10 -0
- package/modern/LineChart/LineHighlightElement.js +78 -0
- package/modern/LineChart/LineHighlightPlot.js +102 -0
- package/modern/LineChart/LinePlot.js +23 -10
- package/modern/LineChart/MarkElement.js +12 -5
- package/modern/LineChart/MarkPlot.js +60 -13
- package/modern/LineChart/formatter.js +4 -3
- package/modern/LineChart/index.js +3 -1
- package/modern/PieChart/PieArc.js +26 -57
- package/modern/PieChart/PieArcLabel.js +43 -34
- package/modern/PieChart/PieArcLabelPlot.js +90 -0
- package/modern/PieChart/PieArcPlot.js +83 -0
- package/modern/PieChart/PieChart.js +59 -12
- package/modern/PieChart/PiePlot.js +76 -55
- package/modern/PieChart/dataTransform/transition.js +130 -0
- package/modern/PieChart/dataTransform/useTransformData.js +58 -0
- package/modern/ResponsiveChartContainer/index.js +3 -3
- package/modern/ScatterChart/Scatter.js +10 -0
- package/modern/ScatterChart/ScatterChart.js +40 -8
- package/modern/ScatterChart/ScatterPlot.js +10 -0
- package/modern/SparkLineChart/SparkLineChart.js +32 -15
- package/modern/constants.js +1 -1
- package/modern/context/CartesianContextProvider.js +29 -13
- package/modern/context/DrawingProvider.js +8 -0
- package/modern/hooks/useChartDimensions.js +2 -0
- package/modern/hooks/useMounted.js +16 -0
- package/modern/hooks/useReducedMotion.js +27 -0
- package/modern/hooks/useTicks.js +15 -9
- package/modern/index.js +1 -1
- package/modern/internals/components/AxisSharedComponents.js +15 -70
- package/modern/internals/components/ChartsText.js +77 -0
- package/modern/internals/domUtils.js +113 -0
- package/modern/internals/geometry.js +36 -0
- package/package.json +9 -6
- package/themeAugmentation/components.d.ts +1 -0
- package/themeAugmentation/overrides.d.ts +2 -0
|
@@ -10,9 +10,10 @@ 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 {
|
|
13
|
+
import { getTickNumber } from '../hooks/useTicks';
|
|
14
14
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
|
-
const DEFAULT_CATEGORY_GAP_RATIO = 0.
|
|
15
|
+
const DEFAULT_CATEGORY_GAP_RATIO = 0.2;
|
|
16
|
+
const DEFAULT_BAR_GAP_RATIO = 0.1;
|
|
16
17
|
|
|
17
18
|
// TODO: those might be better placed in a distinct file
|
|
18
19
|
const xExtremumGetters = {
|
|
@@ -31,6 +32,12 @@ export const CartesianContext = /*#__PURE__*/React.createContext({
|
|
|
31
32
|
xAxisIds: [],
|
|
32
33
|
yAxisIds: []
|
|
33
34
|
});
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* API:
|
|
38
|
+
*
|
|
39
|
+
* - [CartesianContextProvider API](https://mui.com/x/api/charts/cartesian-context-provider/)
|
|
40
|
+
*/
|
|
34
41
|
function CartesianContextProvider({
|
|
35
42
|
xAxis: inXAxis,
|
|
36
43
|
yAxis: inYAxis,
|
|
@@ -102,18 +109,19 @@ function CartesianContextProvider({
|
|
|
102
109
|
const range = [drawingArea.left, drawingArea.left + drawingArea.width];
|
|
103
110
|
if (isBandScaleConfig(axis)) {
|
|
104
111
|
const categoryGapRatio = axis.categoryGapRatio ?? DEFAULT_CATEGORY_GAP_RATIO;
|
|
112
|
+
const barGapRatio = axis.barGapRatio ?? DEFAULT_BAR_GAP_RATIO;
|
|
105
113
|
completedXAxis[axis.id] = _extends({
|
|
106
114
|
categoryGapRatio,
|
|
107
|
-
barGapRatio
|
|
115
|
+
barGapRatio
|
|
108
116
|
}, axis, {
|
|
109
117
|
scale: scaleBand(axis.data, range).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
|
|
110
|
-
|
|
118
|
+
tickNumber: axis.data.length
|
|
111
119
|
});
|
|
112
120
|
}
|
|
113
121
|
if (isPointScaleConfig(axis)) {
|
|
114
122
|
completedXAxis[axis.id] = _extends({}, axis, {
|
|
115
123
|
scale: scalePoint(axis.data, range),
|
|
116
|
-
|
|
124
|
+
tickNumber: axis.data.length
|
|
117
125
|
});
|
|
118
126
|
}
|
|
119
127
|
if (axis.scaleType === 'band' || axis.scaleType === 'point') {
|
|
@@ -122,17 +130,17 @@ function CartesianContextProvider({
|
|
|
122
130
|
}
|
|
123
131
|
const scaleType = axis.scaleType ?? 'linear';
|
|
124
132
|
const extremums = [axis.min ?? minData, axis.max ?? maxData];
|
|
125
|
-
const
|
|
133
|
+
const tickNumber = getTickNumber(_extends({}, axis, {
|
|
126
134
|
range,
|
|
127
135
|
domain: extremums
|
|
128
136
|
}));
|
|
129
|
-
const niceScale = getScale(scaleType, extremums, range).nice(
|
|
137
|
+
const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
|
|
130
138
|
const niceDomain = niceScale.domain();
|
|
131
139
|
const domain = [axis.min ?? niceDomain[0], axis.max ?? niceDomain[1]];
|
|
132
140
|
completedXAxis[axis.id] = _extends({}, axis, {
|
|
133
141
|
scaleType,
|
|
134
142
|
scale: niceScale.domain(domain),
|
|
135
|
-
|
|
143
|
+
tickNumber
|
|
136
144
|
});
|
|
137
145
|
});
|
|
138
146
|
const allYAxis = [...(yAxis?.map((axis, index) => _extends({
|
|
@@ -155,13 +163,13 @@ function CartesianContextProvider({
|
|
|
155
163
|
barGapRatio: 0
|
|
156
164
|
}, axis, {
|
|
157
165
|
scale: scaleBand(axis.data, [range[1], range[0]]).paddingInner(categoryGapRatio).paddingOuter(categoryGapRatio / 2),
|
|
158
|
-
|
|
166
|
+
tickNumber: axis.data.length
|
|
159
167
|
});
|
|
160
168
|
}
|
|
161
169
|
if (isPointScaleConfig(axis)) {
|
|
162
170
|
completedYAxis[axis.id] = _extends({}, axis, {
|
|
163
171
|
scale: scalePoint(axis.data, [range[1], range[0]]),
|
|
164
|
-
|
|
172
|
+
tickNumber: axis.data.length
|
|
165
173
|
});
|
|
166
174
|
}
|
|
167
175
|
if (axis.scaleType === 'band' || axis.scaleType === 'point') {
|
|
@@ -170,17 +178,17 @@ function CartesianContextProvider({
|
|
|
170
178
|
}
|
|
171
179
|
const scaleType = axis.scaleType ?? 'linear';
|
|
172
180
|
const extremums = [axis.min ?? minData, axis.max ?? maxData];
|
|
173
|
-
const
|
|
181
|
+
const tickNumber = getTickNumber(_extends({}, axis, {
|
|
174
182
|
range,
|
|
175
183
|
domain: extremums
|
|
176
184
|
}));
|
|
177
|
-
const niceScale = getScale(scaleType, extremums, range).nice(
|
|
185
|
+
const niceScale = getScale(scaleType, extremums, range).nice(tickNumber);
|
|
178
186
|
const niceDomain = niceScale.domain();
|
|
179
187
|
const domain = [axis.min ?? niceDomain[0], axis.max ?? niceDomain[1]];
|
|
180
188
|
completedYAxis[axis.id] = _extends({}, axis, {
|
|
181
189
|
scaleType,
|
|
182
190
|
scale: niceScale.domain(domain),
|
|
183
|
-
|
|
191
|
+
tickNumber
|
|
184
192
|
});
|
|
185
193
|
});
|
|
186
194
|
return {
|
|
@@ -220,6 +228,7 @@ process.env.NODE_ENV !== "production" ? CartesianContextProvider.propTypes = {
|
|
|
220
228
|
id: PropTypes.string,
|
|
221
229
|
label: PropTypes.string,
|
|
222
230
|
labelFontSize: PropTypes.number,
|
|
231
|
+
labelStyle: PropTypes.object,
|
|
223
232
|
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
|
|
224
233
|
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
|
|
225
234
|
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
|
|
@@ -228,6 +237,9 @@ process.env.NODE_ENV !== "production" ? CartesianContextProvider.propTypes = {
|
|
|
228
237
|
slots: PropTypes.object,
|
|
229
238
|
stroke: PropTypes.string,
|
|
230
239
|
tickFontSize: PropTypes.number,
|
|
240
|
+
tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
|
|
241
|
+
tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
|
|
242
|
+
tickLabelStyle: PropTypes.object,
|
|
231
243
|
tickMaxStep: PropTypes.number,
|
|
232
244
|
tickMinStep: PropTypes.number,
|
|
233
245
|
tickNumber: PropTypes.number,
|
|
@@ -246,6 +258,7 @@ process.env.NODE_ENV !== "production" ? CartesianContextProvider.propTypes = {
|
|
|
246
258
|
id: PropTypes.string,
|
|
247
259
|
label: PropTypes.string,
|
|
248
260
|
labelFontSize: PropTypes.number,
|
|
261
|
+
labelStyle: PropTypes.object,
|
|
249
262
|
max: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
|
|
250
263
|
min: PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.number]),
|
|
251
264
|
position: PropTypes.oneOf(['bottom', 'left', 'right', 'top']),
|
|
@@ -254,6 +267,9 @@ process.env.NODE_ENV !== "production" ? CartesianContextProvider.propTypes = {
|
|
|
254
267
|
slots: PropTypes.object,
|
|
255
268
|
stroke: PropTypes.string,
|
|
256
269
|
tickFontSize: PropTypes.number,
|
|
270
|
+
tickInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.array, PropTypes.func]),
|
|
271
|
+
tickLabelInterval: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.func]),
|
|
272
|
+
tickLabelStyle: PropTypes.object,
|
|
257
273
|
tickMaxStep: PropTypes.number,
|
|
258
274
|
tickMinStep: PropTypes.number,
|
|
259
275
|
tickNumber: PropTypes.number,
|
|
@@ -9,12 +9,20 @@ 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
|
});
|
|
15
17
|
export const SVGContext = /*#__PURE__*/React.createContext({
|
|
16
18
|
current: null
|
|
17
19
|
});
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* API:
|
|
23
|
+
*
|
|
24
|
+
* - [DrawingProvider API](https://mui.com/x/api/charts/drawing-provider/)
|
|
25
|
+
*/
|
|
18
26
|
function DrawingProvider({
|
|
19
27
|
width,
|
|
20
28
|
height,
|
|
@@ -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
|
+
};
|
package/modern/hooks/useTicks.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { isBandScale } from '../internals/isBandScale';
|
|
3
|
-
export function
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
41
|
-
|
|
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
|
-
|
|
47
|
-
|
|
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
|
-
}, [
|
|
57
|
+
}, [tickNumber, scale, valueFormatter, tickInterval]);
|
|
52
58
|
}
|
|
53
59
|
export default useTicks;
|
package/modern/index.js
CHANGED
|
@@ -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.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
|
-
|
|
62
|
-
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
overridesResolver: (props, styles) => styles.label
|
|
77
|
-
})(({
|
|
78
|
-
theme
|
|
79
|
-
}) => _extends({}, theme.typography.body1, {
|
|
80
|
-
fill: 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,77 @@
|
|
|
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
|
+
dominantBaseline: dominantBaseline // Propagated to fix Safari issue: https://github.com/mui/mui-x/issues/10808
|
|
73
|
+
,
|
|
74
|
+
children: line.text
|
|
75
|
+
}, index))
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
@@ -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
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const ANGLE_APPROX = 5; // Angle (in deg) for which we approximate the rectangle as perfectly horizontal/vertical
|
|
2
|
+
|
|
3
|
+
let warnedOnce = false;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Return the minimal translation along the x-axis to avoid overflow of a rectangle of a given width, height, and rotation.
|
|
7
|
+
* This assumes that all rectangles have the same height and angle between -90 and 90.
|
|
8
|
+
* Otherwise it would be problematic because you need the height/width of the next rectangle to do the correct computation.
|
|
9
|
+
* @param width the side along the x axis.
|
|
10
|
+
* @param height the side along the y axis.
|
|
11
|
+
* @param angle the rotation in degrees.
|
|
12
|
+
*/
|
|
13
|
+
export function getMinXTranslation(width, height, angle = 0) {
|
|
14
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
15
|
+
if (!warnedOnce && angle > 90 && angle < -90) {
|
|
16
|
+
warnedOnce = true;
|
|
17
|
+
console.warn([`MUI X: It seems you applied an angle larger than 90° or smaller than -90° to an axis text.`, `This could cause some text overlapping.`, `If you encounter a use case where it's needed, please open an issue.`].join('\n'));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const standardAngle = Math.min(Math.abs(angle) % 180, Math.abs(Math.abs(angle) % 180 - 180) % 180); // Map from R to [0, 90]
|
|
21
|
+
|
|
22
|
+
if (standardAngle < ANGLE_APPROX) {
|
|
23
|
+
// It's nearly horizontal
|
|
24
|
+
return width;
|
|
25
|
+
}
|
|
26
|
+
if (standardAngle > 90 - ANGLE_APPROX) {
|
|
27
|
+
// It's nearly vertical
|
|
28
|
+
return height;
|
|
29
|
+
}
|
|
30
|
+
const radAngle = standardAngle * Math.PI / 180;
|
|
31
|
+
const angleSwich = Math.atan2(height, width);
|
|
32
|
+
if (radAngle < angleSwich) {
|
|
33
|
+
return width / Math.cos(radAngle);
|
|
34
|
+
}
|
|
35
|
+
return height / Math.sin(radAngle);
|
|
36
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-charts",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.18.0",
|
|
4
4
|
"description": "The community edition of the charts components (MUI X).",
|
|
5
5
|
"author": "MUI Team",
|
|
6
6
|
"main": "./index.js",
|
|
@@ -27,7 +27,10 @@
|
|
|
27
27
|
"directory": "packages/x-charts"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@babel/runtime": "^7.
|
|
30
|
+
"@babel/runtime": "^7.23.2",
|
|
31
|
+
"@mui/base": "^5.0.0-beta.22",
|
|
32
|
+
"@react-spring/rafz": "^9.7.3",
|
|
33
|
+
"@react-spring/web": "^9.7.3",
|
|
31
34
|
"clsx": "^2.0.0",
|
|
32
35
|
"d3-color": "^3.1.0",
|
|
33
36
|
"d3-scale": "^4.0.2",
|
|
@@ -53,13 +56,13 @@
|
|
|
53
56
|
"exports": {
|
|
54
57
|
".": {
|
|
55
58
|
"types": "./index.d.ts",
|
|
56
|
-
"
|
|
57
|
-
"
|
|
59
|
+
"import": "./esm/index.js",
|
|
60
|
+
"default": "./esm/index.js"
|
|
58
61
|
},
|
|
59
62
|
"./*": {
|
|
60
63
|
"types": "./*/index.d.ts",
|
|
61
|
-
"
|
|
62
|
-
"
|
|
64
|
+
"import": "./esm/*/index.js",
|
|
65
|
+
"default": "./esm/*/index.js"
|
|
63
66
|
}
|
|
64
67
|
},
|
|
65
68
|
"setupFiles": [
|
|
@@ -13,6 +13,7 @@ export interface ChartsComponents {
|
|
|
13
13
|
};
|
|
14
14
|
MuiChartsAxisHighlight?: {
|
|
15
15
|
defaultProps?: ComponentsProps['MuiChartsAxisHighlight'];
|
|
16
|
+
styleOverrides?: ComponentsOverrides['MuiChartsAxisHighlight'];
|
|
16
17
|
};
|
|
17
18
|
MuiChartsClipPath?: {
|
|
18
19
|
defaultProps?: ComponentsProps['MuiChartsClipPath'];
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { BarElementClassKey } from '../BarChart/BarElement';
|
|
2
2
|
import { ChartsAxisClassKey } from '../ChartsAxis';
|
|
3
|
+
import { ChartsAxisHighlightClassKey } from '../ChartsAxisHighlight';
|
|
3
4
|
import { ChartsLegendClassKey } from '../ChartsLegend';
|
|
4
5
|
import { AreaElementClassKey, LineElementClassKey, MarkElementClassKey } from '../LineChart';
|
|
5
6
|
|
|
6
7
|
// prettier-ignore
|
|
7
8
|
export interface PickersComponentNameToClassKey {
|
|
8
9
|
MuiChartsAxis: ChartsAxisClassKey;
|
|
10
|
+
MuiChartsAxisHighlight: ChartsAxisHighlightClassKey;
|
|
9
11
|
MuiChartsLegend: ChartsLegendClassKey;
|
|
10
12
|
|
|
11
13
|
// BarChart components
|