@mui/x-charts 7.0.0-beta.1 → 7.0.0-beta.3
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 +21 -5
- package/BarChart/BarChart.js +37 -13
- package/BarChart/BarElement.d.ts +20 -13
- package/BarChart/BarElement.js +1 -0
- package/BarChart/BarPlot.d.ts +3 -5
- package/BarChart/BarPlot.js +9 -10
- package/CHANGELOG.md +223 -1
- package/ChartContainer/ChartContainer.js +6 -4
- package/ChartsAxis/ChartsAxis.js +4 -4
- package/ChartsGrid/ChartsGrid.d.ts +30 -0
- package/ChartsGrid/ChartsGrid.js +128 -0
- package/ChartsGrid/chartsGridClasses.d.ts +13 -0
- package/ChartsGrid/chartsGridClasses.js +14 -0
- package/ChartsGrid/index.d.ts +2 -0
- package/ChartsGrid/index.js +27 -0
- package/ChartsGrid/package.json +6 -0
- package/ChartsLegend/ChartsLegend.d.ts +5 -54
- package/ChartsLegend/ChartsLegend.js +2 -307
- package/ChartsLegend/DefaultChartsLegend.d.ts +60 -0
- package/ChartsLegend/DefaultChartsLegend.js +294 -0
- package/ChartsLegend/index.d.ts +1 -0
- package/ChartsLegend/index.js +11 -0
- package/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
- package/ChartsReferenceLine/common.d.ts +2 -1
- package/ChartsSurface.js +6 -4
- package/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
- package/ChartsTooltip/DefaultChartsAxisTooltipContent.js +1 -1
- package/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
- package/ChartsTooltip/utils.d.ts +1 -0
- package/ChartsTooltip/utils.js +7 -0
- package/ChartsXAxis/ChartsXAxis.js +15 -11
- package/ChartsYAxis/ChartsYAxis.js +3 -3
- package/Gauge/Gauge.d.ts +13 -0
- package/Gauge/Gauge.js +156 -0
- package/Gauge/GaugeContainer.d.ts +19 -0
- package/Gauge/GaugeContainer.js +216 -0
- package/Gauge/GaugeProvider.d.ts +117 -0
- package/Gauge/GaugeProvider.js +96 -0
- package/Gauge/GaugeReferenceArc.d.ts +2 -0
- package/Gauge/GaugeReferenceArc.js +44 -0
- package/Gauge/GaugeValueArc.d.ts +2 -0
- package/Gauge/GaugeValueArc.js +51 -0
- package/Gauge/GaugeValueText.d.ts +15 -0
- package/Gauge/GaugeValueText.js +77 -0
- package/Gauge/gaugeClasses.d.ts +14 -0
- package/Gauge/gaugeClasses.js +15 -0
- package/Gauge/index.d.ts +7 -0
- package/Gauge/index.js +87 -0
- package/Gauge/package.json +6 -0
- package/Gauge/utils.d.ts +19 -0
- package/Gauge/utils.js +75 -0
- package/LineChart/AnimatedArea.js +1 -1
- package/LineChart/AnimatedLine.js +1 -1
- package/LineChart/AreaElement.d.ts +2 -1
- package/LineChart/AreaElement.js +1 -1
- package/LineChart/LineChart.d.ts +24 -5
- package/LineChart/LineChart.js +41 -13
- package/LineChart/LineElement.d.ts +2 -1
- package/LineChart/LineElement.js +1 -1
- package/LineChart/LineHighlightElement.d.ts +3 -2
- package/LineChart/LineHighlightElement.js +2 -1
- package/LineChart/MarkElement.d.ts +3 -2
- package/LineChart/MarkElement.js +1 -0
- package/PieChart/PieArc.d.ts +7 -6
- package/PieChart/PieArc.js +10 -9
- package/PieChart/PieArcLabel.d.ts +3 -2
- package/PieChart/PieArcLabel.js +1 -0
- package/PieChart/PieArcLabelPlot.js +14 -14
- package/PieChart/PieArcPlot.js +1 -1
- package/PieChart/PieChart.d.ts +22 -0
- package/PieChart/PieChart.js +32 -8
- package/ResponsiveChartContainer/ResponsiveChartContainer.js +8 -70
- package/ResponsiveChartContainer/useChartContainerDimensions.d.ts +2 -0
- package/ResponsiveChartContainer/useChartContainerDimensions.js +76 -0
- package/ScatterChart/ScatterChart.d.ts +18 -0
- package/ScatterChart/ScatterChart.js +35 -8
- package/SparkLineChart/SparkLineChart.d.ts +1 -1
- package/SparkLineChart/SparkLineChart.js +5 -4
- package/context/CartesianContextProvider.js +8 -6
- package/esm/BarChart/BarChart.js +37 -13
- package/esm/BarChart/BarElement.js +1 -0
- package/esm/BarChart/BarPlot.js +8 -10
- package/esm/ChartContainer/ChartContainer.js +6 -4
- package/esm/ChartsAxis/ChartsAxis.js +4 -4
- package/esm/ChartsGrid/ChartsGrid.js +121 -0
- package/esm/ChartsGrid/chartsGridClasses.js +6 -0
- package/esm/ChartsGrid/index.js +2 -0
- package/esm/ChartsLegend/ChartsLegend.js +2 -307
- package/esm/ChartsLegend/DefaultChartsLegend.js +286 -0
- package/esm/ChartsLegend/index.js +1 -0
- package/esm/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
- package/esm/ChartsSurface.js +6 -4
- package/esm/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
- package/esm/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -2
- package/esm/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
- package/esm/ChartsTooltip/utils.js +6 -0
- package/esm/ChartsXAxis/ChartsXAxis.js +14 -10
- package/esm/ChartsYAxis/ChartsYAxis.js +2 -2
- package/esm/Gauge/Gauge.js +149 -0
- package/esm/Gauge/GaugeContainer.js +211 -0
- package/esm/Gauge/GaugeProvider.js +85 -0
- package/esm/Gauge/GaugeReferenceArc.js +35 -0
- package/esm/Gauge/GaugeValueArc.js +42 -0
- package/esm/Gauge/GaugeValueText.js +69 -0
- package/esm/Gauge/gaugeClasses.js +7 -0
- package/esm/Gauge/index.js +7 -0
- package/esm/Gauge/utils.js +68 -0
- package/esm/LineChart/AnimatedArea.js +1 -1
- package/esm/LineChart/AnimatedLine.js +1 -1
- package/esm/LineChart/AreaElement.js +1 -1
- package/esm/LineChart/LineChart.js +41 -13
- package/esm/LineChart/LineElement.js +1 -1
- package/esm/LineChart/LineHighlightElement.js +2 -1
- package/esm/LineChart/MarkElement.js +1 -0
- package/esm/PieChart/PieArc.js +10 -9
- package/esm/PieChart/PieArcLabel.js +1 -0
- package/esm/PieChart/PieArcLabelPlot.js +14 -14
- package/esm/PieChart/PieArcPlot.js +1 -1
- package/esm/PieChart/PieChart.js +32 -8
- package/esm/ResponsiveChartContainer/ResponsiveChartContainer.js +8 -70
- package/esm/ResponsiveChartContainer/useChartContainerDimensions.js +66 -0
- package/esm/ScatterChart/ScatterChart.js +35 -8
- package/esm/SparkLineChart/SparkLineChart.js +5 -4
- package/esm/context/CartesianContextProvider.js +8 -6
- package/esm/hooks/useTicks.js +2 -3
- package/esm/index.js +2 -0
- package/hooks/useTicks.d.ts +1 -2
- package/hooks/useTicks.js +2 -3
- package/index.d.ts +2 -0
- package/index.js +23 -1
- package/internals/defaultizeColor.d.ts +16 -16
- package/internals/defaultizeValueFormatter.d.ts +4 -7
- package/internals/stackSeries.d.ts +4 -7
- package/legacy/BarChart/BarChart.js +37 -13
- package/legacy/BarChart/BarElement.js +1 -0
- package/legacy/BarChart/BarPlot.js +10 -10
- package/legacy/ChartContainer/ChartContainer.js +6 -4
- package/legacy/ChartsAxis/ChartsAxis.js +4 -4
- package/legacy/ChartsGrid/ChartsGrid.js +119 -0
- package/legacy/ChartsGrid/chartsGridClasses.js +6 -0
- package/legacy/ChartsGrid/index.js +2 -0
- package/legacy/ChartsLegend/ChartsLegend.js +2 -323
- package/legacy/ChartsLegend/DefaultChartsLegend.js +302 -0
- package/legacy/ChartsLegend/index.js +1 -0
- package/legacy/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
- package/legacy/ChartsSurface.js +5 -3
- package/legacy/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
- package/legacy/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -2
- package/legacy/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
- package/legacy/ChartsTooltip/utils.js +6 -0
- package/legacy/ChartsXAxis/ChartsXAxis.js +13 -9
- package/legacy/ChartsYAxis/ChartsYAxis.js +2 -2
- package/legacy/Gauge/Gauge.js +146 -0
- package/legacy/Gauge/GaugeContainer.js +215 -0
- package/legacy/Gauge/GaugeProvider.js +87 -0
- package/legacy/Gauge/GaugeReferenceArc.js +37 -0
- package/legacy/Gauge/GaugeValueArc.js +44 -0
- package/legacy/Gauge/GaugeValueText.js +66 -0
- package/legacy/Gauge/gaugeClasses.js +7 -0
- package/legacy/Gauge/index.js +7 -0
- package/legacy/Gauge/utils.js +84 -0
- package/legacy/LineChart/AnimatedArea.js +1 -1
- package/legacy/LineChart/AnimatedLine.js +1 -1
- package/legacy/LineChart/AreaElement.js +1 -1
- package/legacy/LineChart/LineChart.js +41 -13
- package/legacy/LineChart/LineElement.js +1 -1
- package/legacy/LineChart/LineHighlightElement.js +2 -1
- package/legacy/LineChart/MarkElement.js +1 -0
- package/legacy/PieChart/PieArc.js +11 -10
- package/legacy/PieChart/PieArcLabel.js +1 -0
- package/legacy/PieChart/PieArcLabelPlot.js +15 -15
- package/legacy/PieChart/PieArcPlot.js +1 -1
- package/legacy/PieChart/PieChart.js +32 -8
- package/legacy/ResponsiveChartContainer/ResponsiveChartContainer.js +13 -81
- package/legacy/ResponsiveChartContainer/useChartContainerDimensions.js +73 -0
- package/legacy/ScatterChart/ScatterChart.js +35 -8
- package/legacy/SparkLineChart/SparkLineChart.js +6 -5
- package/legacy/context/CartesianContextProvider.js +8 -6
- package/legacy/hooks/useTicks.js +2 -3
- package/legacy/index.js +3 -1
- package/models/axis.d.ts +7 -2
- package/models/seriesType/common.d.ts +2 -1
- package/models/seriesType/config.d.ts +7 -12
- package/models/seriesType/line.d.ts +2 -2
- package/models/seriesType/pie.d.ts +7 -3
- package/models/seriesType/scatter.d.ts +5 -2
- package/modern/BarChart/BarChart.js +37 -13
- package/modern/BarChart/BarElement.js +1 -0
- package/modern/BarChart/BarPlot.js +8 -10
- package/modern/ChartContainer/ChartContainer.js +6 -4
- package/modern/ChartsAxis/ChartsAxis.js +4 -4
- package/modern/ChartsGrid/ChartsGrid.js +121 -0
- package/modern/ChartsGrid/chartsGridClasses.js +6 -0
- package/modern/ChartsGrid/index.js +2 -0
- package/modern/ChartsLegend/ChartsLegend.js +2 -307
- package/modern/ChartsLegend/DefaultChartsLegend.js +286 -0
- package/modern/ChartsLegend/index.js +1 -0
- package/modern/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
- package/modern/ChartsSurface.js +6 -4
- package/modern/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
- package/modern/ChartsTooltip/DefaultChartsAxisTooltipContent.js +2 -2
- package/modern/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
- package/modern/ChartsTooltip/utils.js +6 -0
- package/modern/ChartsXAxis/ChartsXAxis.js +14 -10
- package/modern/ChartsYAxis/ChartsYAxis.js +2 -2
- package/modern/Gauge/Gauge.js +149 -0
- package/modern/Gauge/GaugeContainer.js +208 -0
- package/modern/Gauge/GaugeProvider.js +85 -0
- package/modern/Gauge/GaugeReferenceArc.js +35 -0
- package/modern/Gauge/GaugeValueArc.js +42 -0
- package/modern/Gauge/GaugeValueText.js +69 -0
- package/modern/Gauge/gaugeClasses.js +7 -0
- package/modern/Gauge/index.js +7 -0
- package/modern/Gauge/utils.js +68 -0
- package/modern/LineChart/AnimatedArea.js +1 -1
- package/modern/LineChart/AnimatedLine.js +1 -1
- package/modern/LineChart/AreaElement.js +1 -1
- package/modern/LineChart/LineChart.js +41 -13
- package/modern/LineChart/LineElement.js +1 -1
- package/modern/LineChart/LineHighlightElement.js +2 -1
- package/modern/LineChart/MarkElement.js +1 -0
- package/modern/PieChart/PieArc.js +10 -9
- package/modern/PieChart/PieArcLabel.js +1 -0
- package/modern/PieChart/PieArcLabelPlot.js +14 -14
- package/modern/PieChart/PieArcPlot.js +1 -1
- package/modern/PieChart/PieChart.js +32 -8
- package/modern/ResponsiveChartContainer/ResponsiveChartContainer.js +8 -70
- package/modern/ResponsiveChartContainer/useChartContainerDimensions.js +66 -0
- package/modern/ScatterChart/ScatterChart.js +35 -8
- package/modern/SparkLineChart/SparkLineChart.js +5 -4
- package/modern/context/CartesianContextProvider.js +8 -6
- package/modern/hooks/useTicks.js +2 -3
- package/modern/index.js +3 -1
- package/package.json +4 -4
|
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
|
|
|
3
3
|
import clsx from 'clsx';
|
|
4
4
|
import Typography from '@mui/material/Typography';
|
|
5
5
|
import { ChartsTooltipCell, ChartsTooltipPaper, ChartsTooltipTable, ChartsTooltipMark, ChartsTooltipRow } from './ChartsTooltipTable';
|
|
6
|
-
import { isCartesianSeries } from './utils';
|
|
6
|
+
import { isCartesianSeries, utcFormatter } from './utils';
|
|
7
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
8
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
9
|
function DefaultChartsAxisTooltipContent(props) {
|
|
@@ -18,7 +18,7 @@ function DefaultChartsAxisTooltipContent(props) {
|
|
|
18
18
|
if (dataIndex == null) {
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
|
-
const axisFormatter = axis.valueFormatter ?? (v => v.toLocaleString());
|
|
21
|
+
const axisFormatter = axis.valueFormatter ?? (v => axis.scaleType === 'utc' ? utcFormatter(v) : v.toLocaleString());
|
|
22
22
|
return /*#__PURE__*/_jsx(ChartsTooltipPaper, {
|
|
23
23
|
sx: sx,
|
|
24
24
|
className: classes.root,
|
|
@@ -68,7 +68,7 @@ process.env.NODE_ENV !== "production" ? DefaultChartsItemTooltipContent.propType
|
|
|
68
68
|
*/
|
|
69
69
|
itemData: PropTypes.shape({
|
|
70
70
|
dataIndex: PropTypes.number,
|
|
71
|
-
seriesId: PropTypes.string.isRequired,
|
|
71
|
+
seriesId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
|
|
72
72
|
type: PropTypes.oneOf(['bar', 'line', 'pie', 'scatter']).isRequired
|
|
73
73
|
}).isRequired,
|
|
74
74
|
/**
|
|
@@ -84,4 +84,10 @@ export function isCartesianSeriesType(seriesType) {
|
|
|
84
84
|
}
|
|
85
85
|
export function isCartesianSeries(series) {
|
|
86
86
|
return isCartesianSeriesType(series.type);
|
|
87
|
+
}
|
|
88
|
+
export function utcFormatter(v) {
|
|
89
|
+
if (v instanceof Date) {
|
|
90
|
+
return v.toUTCString();
|
|
91
|
+
}
|
|
92
|
+
return v.toLocaleString();
|
|
87
93
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
2
2
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
3
|
-
const _excluded = ["scale", "tickNumber"];
|
|
3
|
+
const _excluded = ["scale", "tickNumber", "reverse"];
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import { useSlotProps } from '@mui/base/utils';
|
|
@@ -8,7 +8,7 @@ import { unstable_composeClasses as composeClasses } from '@mui/utils';
|
|
|
8
8
|
import { useThemeProps, useTheme } from '@mui/material/styles';
|
|
9
9
|
import { CartesianContext } from '../context/CartesianContextProvider';
|
|
10
10
|
import { DrawingContext } from '../context/DrawingProvider';
|
|
11
|
-
import useTicks from '../hooks/useTicks';
|
|
11
|
+
import { useTicks } from '../hooks/useTicks';
|
|
12
12
|
import { getAxisUtilityClass } from '../ChartsAxis/axisClasses';
|
|
13
13
|
import { AxisRoot } from '../internals/components/AxisSharedComponents';
|
|
14
14
|
import { ChartsText } from '../ChartsText';
|
|
@@ -35,6 +35,7 @@ const useUtilityClasses = ownerState => {
|
|
|
35
35
|
function addLabelDimension(xTicks, {
|
|
36
36
|
tickLabelStyle: style,
|
|
37
37
|
tickLabelInterval,
|
|
38
|
+
reverse,
|
|
38
39
|
isMounted
|
|
39
40
|
}) {
|
|
40
41
|
const withDimension = xTicks.map(tick => {
|
|
@@ -61,8 +62,9 @@ function addLabelDimension(xTicks, {
|
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
// Filter label to avoid overlap
|
|
64
|
-
let
|
|
65
|
-
let
|
|
65
|
+
let currentTextLimit = 0;
|
|
66
|
+
let previouseTextLimit = 0;
|
|
67
|
+
const direction = reverse ? -1 : 1;
|
|
66
68
|
return withDimension.map((item, labelIndex) => {
|
|
67
69
|
const {
|
|
68
70
|
width,
|
|
@@ -74,15 +76,15 @@ function addLabelDimension(xTicks, {
|
|
|
74
76
|
const textPosition = offset + labelOffset;
|
|
75
77
|
const gapRatio = 1.2; // Ratio applied to the minimal distance to add some margin.
|
|
76
78
|
|
|
77
|
-
|
|
78
|
-
if (labelIndex > 0 &&
|
|
79
|
+
currentTextLimit = textPosition - direction * (gapRatio * distance) / 2;
|
|
80
|
+
if (labelIndex > 0 && direction * currentTextLimit < direction * previouseTextLimit) {
|
|
79
81
|
// Except for the first label, we skip all label that overlap with the last accepted.
|
|
80
|
-
// Notice that the early return prevents `
|
|
82
|
+
// Notice that the early return prevents `previouseTextLimit` from being updated.
|
|
81
83
|
return _extends({}, item, {
|
|
82
84
|
skipLabel: true
|
|
83
85
|
});
|
|
84
86
|
}
|
|
85
|
-
|
|
87
|
+
previouseTextLimit = textPosition + direction * (gapRatio * distance) / 2;
|
|
86
88
|
return item;
|
|
87
89
|
});
|
|
88
90
|
}
|
|
@@ -116,7 +118,8 @@ function ChartsXAxis(inProps) {
|
|
|
116
118
|
xAxis: {
|
|
117
119
|
[_ref]: {
|
|
118
120
|
scale: xScale,
|
|
119
|
-
tickNumber
|
|
121
|
+
tickNumber,
|
|
122
|
+
reverse
|
|
120
123
|
}
|
|
121
124
|
}
|
|
122
125
|
} = _React$useContext,
|
|
@@ -178,6 +181,7 @@ function ChartsXAxis(inProps) {
|
|
|
178
181
|
const xTicksWithDimension = addLabelDimension(xTicks, {
|
|
179
182
|
tickLabelStyle: axisTickLabelProps.style,
|
|
180
183
|
tickLabelInterval,
|
|
184
|
+
reverse,
|
|
181
185
|
isMounted
|
|
182
186
|
});
|
|
183
187
|
const labelRefPoint = {
|
|
@@ -241,7 +245,7 @@ process.env.NODE_ENV !== "production" ? ChartsXAxis.propTypes = {
|
|
|
241
245
|
* The id of the axis to render.
|
|
242
246
|
* If undefined, it will be the first defined axis.
|
|
243
247
|
*/
|
|
244
|
-
axisId: PropTypes.string,
|
|
248
|
+
axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
245
249
|
/**
|
|
246
250
|
* Override or extend the styles applied to the component.
|
|
247
251
|
*/
|
|
@@ -8,7 +8,7 @@ import { unstable_composeClasses as composeClasses } from '@mui/utils';
|
|
|
8
8
|
import { useThemeProps, useTheme } from '@mui/material/styles';
|
|
9
9
|
import { CartesianContext } from '../context/CartesianContextProvider';
|
|
10
10
|
import { DrawingContext } from '../context/DrawingProvider';
|
|
11
|
-
import useTicks from '../hooks/useTicks';
|
|
11
|
+
import { useTicks } from '../hooks/useTicks';
|
|
12
12
|
import { AxisRoot } from '../internals/components/AxisSharedComponents';
|
|
13
13
|
import { ChartsText } from '../ChartsText';
|
|
14
14
|
import { getAxisUtilityClass } from '../ChartsAxis/axisClasses';
|
|
@@ -175,7 +175,7 @@ process.env.NODE_ENV !== "production" ? ChartsYAxis.propTypes = {
|
|
|
175
175
|
* The id of the axis to render.
|
|
176
176
|
* If undefined, it will be the first defined axis.
|
|
177
177
|
*/
|
|
178
|
-
axisId: PropTypes.string,
|
|
178
|
+
axisId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
179
179
|
/**
|
|
180
180
|
* Override or extend the styles applied to the component.
|
|
181
181
|
*/
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
const _excluded = ["text", "children", "classes"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import composeClasses from '@mui/utils/composeClasses';
|
|
7
|
+
import { GaugeContainer } from './GaugeContainer';
|
|
8
|
+
import { GaugeValueArc } from './GaugeValueArc';
|
|
9
|
+
import { GaugeReferenceArc } from './GaugeReferenceArc';
|
|
10
|
+
import { getGaugeUtilityClass } from './gaugeClasses';
|
|
11
|
+
import { GaugeValueText } from './GaugeValueText';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
|
+
const useUtilityClasses = props => {
|
|
15
|
+
const {
|
|
16
|
+
classes
|
|
17
|
+
} = props;
|
|
18
|
+
const slots = {
|
|
19
|
+
root: ['root'],
|
|
20
|
+
valueArc: ['valueArc'],
|
|
21
|
+
referenceArc: ['referenceArc'],
|
|
22
|
+
valueText: ['valueText']
|
|
23
|
+
};
|
|
24
|
+
return composeClasses(slots, getGaugeUtilityClass, classes);
|
|
25
|
+
};
|
|
26
|
+
function Gauge(props) {
|
|
27
|
+
const {
|
|
28
|
+
text,
|
|
29
|
+
children
|
|
30
|
+
} = props,
|
|
31
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
32
|
+
const classes = useUtilityClasses(props);
|
|
33
|
+
return /*#__PURE__*/_jsxs(GaugeContainer, _extends({}, other, {
|
|
34
|
+
className: classes.root,
|
|
35
|
+
children: [/*#__PURE__*/_jsx(GaugeReferenceArc, {
|
|
36
|
+
className: classes.referenceArc
|
|
37
|
+
}), /*#__PURE__*/_jsx(GaugeValueArc, {
|
|
38
|
+
className: classes.valueArc
|
|
39
|
+
}), /*#__PURE__*/_jsx(GaugeValueText, {
|
|
40
|
+
className: classes.valueText,
|
|
41
|
+
text: text
|
|
42
|
+
}), children]
|
|
43
|
+
}));
|
|
44
|
+
}
|
|
45
|
+
process.env.NODE_ENV !== "production" ? Gauge.propTypes = {
|
|
46
|
+
// ----------------------------- Warning --------------------------------
|
|
47
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
48
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
49
|
+
// ----------------------------------------------------------------------
|
|
50
|
+
children: PropTypes.node,
|
|
51
|
+
classes: PropTypes.object,
|
|
52
|
+
className: PropTypes.string,
|
|
53
|
+
/**
|
|
54
|
+
* The radius applied to arc corners (similar to border radius).
|
|
55
|
+
* Set it to '50%' to get rounded arc.
|
|
56
|
+
* @default 0
|
|
57
|
+
*/
|
|
58
|
+
cornerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
59
|
+
/**
|
|
60
|
+
* The x coordinate of the arc center.
|
|
61
|
+
* Can be a number (in px) or a string with a percentage such as '50%'.
|
|
62
|
+
* The '100%' is the width the drawing area.
|
|
63
|
+
*/
|
|
64
|
+
cx: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
65
|
+
/**
|
|
66
|
+
* The y coordinate of the arc center.
|
|
67
|
+
* Can be a number (in px) or a string with a percentage such as '50%'.
|
|
68
|
+
* The '100%' is the height the drawing area.
|
|
69
|
+
*/
|
|
70
|
+
cy: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
71
|
+
desc: PropTypes.string,
|
|
72
|
+
/**
|
|
73
|
+
* If `true`, the charts will not listen to the mouse move event.
|
|
74
|
+
* It might break interactive features, but will improve performance.
|
|
75
|
+
* @default false
|
|
76
|
+
*/
|
|
77
|
+
disableAxisListener: PropTypes.bool,
|
|
78
|
+
/**
|
|
79
|
+
* The end angle (deg).
|
|
80
|
+
* @default 360
|
|
81
|
+
*/
|
|
82
|
+
endAngle: PropTypes.number,
|
|
83
|
+
/**
|
|
84
|
+
* The height of the chart in px. If not defined, it takes the height of the parent element.
|
|
85
|
+
* @default undefined
|
|
86
|
+
*/
|
|
87
|
+
height: PropTypes.number,
|
|
88
|
+
/**
|
|
89
|
+
* The radius between circle center and the begining of the arc.
|
|
90
|
+
* Can be a number (in px) or a string with a percentage such as '50%'.
|
|
91
|
+
* The '100%' is the maximal radius that fit into the drawing area.
|
|
92
|
+
* @default '80%'
|
|
93
|
+
*/
|
|
94
|
+
innerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
95
|
+
/**
|
|
96
|
+
* The margin between the SVG and the drawing area.
|
|
97
|
+
* It's used for leaving some space for extra information such as the x- and y-axis or legend.
|
|
98
|
+
* Accepts an object with the optional properties: `top`, `bottom`, `left`, and `right`.
|
|
99
|
+
* @default object Depends on the charts type.
|
|
100
|
+
*/
|
|
101
|
+
margin: PropTypes.shape({
|
|
102
|
+
bottom: PropTypes.number,
|
|
103
|
+
left: PropTypes.number,
|
|
104
|
+
right: PropTypes.number,
|
|
105
|
+
top: PropTypes.number
|
|
106
|
+
}),
|
|
107
|
+
/**
|
|
108
|
+
* The radius between circle center and the end of the arc.
|
|
109
|
+
* Can be a number (in px) or a string with a percentage such as '50%'.
|
|
110
|
+
* The '100%' is the maximal radius that fit into the drawing area.
|
|
111
|
+
* @default '100%'
|
|
112
|
+
*/
|
|
113
|
+
outerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
114
|
+
/**
|
|
115
|
+
* The start angle (deg).
|
|
116
|
+
* @default 0
|
|
117
|
+
*/
|
|
118
|
+
startAngle: PropTypes.number,
|
|
119
|
+
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
120
|
+
text: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
|
|
121
|
+
title: PropTypes.string,
|
|
122
|
+
/**
|
|
123
|
+
* The value of the gauge.
|
|
124
|
+
* Set to `null` to not display a value.
|
|
125
|
+
*/
|
|
126
|
+
value: PropTypes.number,
|
|
127
|
+
/**
|
|
128
|
+
* The maximal value of the gauge.
|
|
129
|
+
* @default 100
|
|
130
|
+
*/
|
|
131
|
+
valueMax: PropTypes.number,
|
|
132
|
+
/**
|
|
133
|
+
* The minimal value of the gauge.
|
|
134
|
+
* @default 0
|
|
135
|
+
*/
|
|
136
|
+
valueMin: PropTypes.number,
|
|
137
|
+
viewBox: PropTypes.shape({
|
|
138
|
+
height: PropTypes.number,
|
|
139
|
+
width: PropTypes.number,
|
|
140
|
+
x: PropTypes.number,
|
|
141
|
+
y: PropTypes.number
|
|
142
|
+
}),
|
|
143
|
+
/**
|
|
144
|
+
* The width of the chart in px. If not defined, it takes the width of the parent element.
|
|
145
|
+
* @default undefined
|
|
146
|
+
*/
|
|
147
|
+
width: PropTypes.number
|
|
148
|
+
} : void 0;
|
|
149
|
+
export { Gauge };
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
const _excluded = ["width", "height", "margin", "title", "desc", "value", "valueMin", "valueMax", "startAngle", "endAngle", "outerRadius", "innerRadius", "cornerRadius", "cx", "cy", "children"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import useForkRef from '@mui/utils/useForkRef';
|
|
7
|
+
import { styled } from '@mui/material/styles';
|
|
8
|
+
import { useChartContainerDimensions } from '../ResponsiveChartContainer/useChartContainerDimensions';
|
|
9
|
+
import { ChartsSurface } from '../ChartsSurface';
|
|
10
|
+
import { DrawingProvider } from '../context/DrawingProvider';
|
|
11
|
+
import { GaugeProvider } from './GaugeProvider';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
const ResizableContainer = styled('div', {
|
|
14
|
+
name: 'MuiGauge',
|
|
15
|
+
slot: 'Container'
|
|
16
|
+
})(({
|
|
17
|
+
ownerState,
|
|
18
|
+
theme
|
|
19
|
+
}) => ({
|
|
20
|
+
width: ownerState.width ?? '100%',
|
|
21
|
+
height: ownerState.height ?? '100%',
|
|
22
|
+
display: 'flex',
|
|
23
|
+
position: 'relative',
|
|
24
|
+
flexGrow: 1,
|
|
25
|
+
flexDirection: 'column',
|
|
26
|
+
alignItems: 'center',
|
|
27
|
+
justifyContent: 'center',
|
|
28
|
+
overflow: 'hidden',
|
|
29
|
+
'&>svg': {
|
|
30
|
+
width: '100%',
|
|
31
|
+
height: '100%'
|
|
32
|
+
},
|
|
33
|
+
'& text': {
|
|
34
|
+
fill: (theme.vars || theme).palette.text.primary
|
|
35
|
+
}
|
|
36
|
+
}));
|
|
37
|
+
const GaugeContainer = /*#__PURE__*/React.forwardRef(function GaugeContainer(props, ref) {
|
|
38
|
+
const {
|
|
39
|
+
width: inWidth,
|
|
40
|
+
height: inHeight,
|
|
41
|
+
margin,
|
|
42
|
+
title,
|
|
43
|
+
desc,
|
|
44
|
+
value,
|
|
45
|
+
valueMin = 0,
|
|
46
|
+
valueMax = 100,
|
|
47
|
+
startAngle,
|
|
48
|
+
endAngle,
|
|
49
|
+
outerRadius,
|
|
50
|
+
innerRadius,
|
|
51
|
+
cornerRadius,
|
|
52
|
+
cx,
|
|
53
|
+
cy,
|
|
54
|
+
children
|
|
55
|
+
} = props,
|
|
56
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
57
|
+
const [containerRef, width, height] = useChartContainerDimensions(inWidth, inHeight);
|
|
58
|
+
const svgRef = React.useRef(null);
|
|
59
|
+
const handleRef = useForkRef(ref, svgRef);
|
|
60
|
+
return /*#__PURE__*/_jsx(ResizableContainer, _extends({
|
|
61
|
+
ref: containerRef,
|
|
62
|
+
ownerState: {
|
|
63
|
+
width: inWidth,
|
|
64
|
+
height: inHeight
|
|
65
|
+
},
|
|
66
|
+
role: "meter",
|
|
67
|
+
"aria-valuenow": value === null ? undefined : value,
|
|
68
|
+
"aria-valuemin": valueMin,
|
|
69
|
+
"aria-valuemax": valueMax
|
|
70
|
+
}, other, {
|
|
71
|
+
children: width && height ? /*#__PURE__*/_jsx(DrawingProvider, {
|
|
72
|
+
width: width,
|
|
73
|
+
height: height,
|
|
74
|
+
margin: _extends({
|
|
75
|
+
left: 10,
|
|
76
|
+
right: 10,
|
|
77
|
+
top: 10,
|
|
78
|
+
bottom: 10
|
|
79
|
+
}, margin),
|
|
80
|
+
svgRef: svgRef,
|
|
81
|
+
children: /*#__PURE__*/_jsx(GaugeProvider, {
|
|
82
|
+
value: value,
|
|
83
|
+
valueMin: valueMin,
|
|
84
|
+
valueMax: valueMax,
|
|
85
|
+
startAngle: startAngle,
|
|
86
|
+
endAngle: endAngle,
|
|
87
|
+
outerRadius: outerRadius,
|
|
88
|
+
innerRadius: innerRadius,
|
|
89
|
+
cornerRadius: cornerRadius,
|
|
90
|
+
cx: cx,
|
|
91
|
+
cy: cy,
|
|
92
|
+
children: /*#__PURE__*/_jsx(ChartsSurface, {
|
|
93
|
+
width: width,
|
|
94
|
+
height: height,
|
|
95
|
+
ref: handleRef,
|
|
96
|
+
title: title,
|
|
97
|
+
desc: desc,
|
|
98
|
+
disableAxisListener: true,
|
|
99
|
+
"aria-hidden": "true",
|
|
100
|
+
children: children
|
|
101
|
+
})
|
|
102
|
+
})
|
|
103
|
+
}) : null
|
|
104
|
+
}));
|
|
105
|
+
});
|
|
106
|
+
process.env.NODE_ENV !== "production" ? GaugeContainer.propTypes = {
|
|
107
|
+
// ----------------------------- Warning --------------------------------
|
|
108
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
109
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
110
|
+
// ----------------------------------------------------------------------
|
|
111
|
+
children: PropTypes.node,
|
|
112
|
+
className: PropTypes.string,
|
|
113
|
+
/**
|
|
114
|
+
* The radius applied to arc corners (similar to border radius).
|
|
115
|
+
* Set it to '50%' to get rounded arc.
|
|
116
|
+
* @default 0
|
|
117
|
+
*/
|
|
118
|
+
cornerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
119
|
+
/**
|
|
120
|
+
* The x coordinate of the arc center.
|
|
121
|
+
* Can be a number (in px) or a string with a percentage such as '50%'.
|
|
122
|
+
* The '100%' is the width the drawing area.
|
|
123
|
+
*/
|
|
124
|
+
cx: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
125
|
+
/**
|
|
126
|
+
* The y coordinate of the arc center.
|
|
127
|
+
* Can be a number (in px) or a string with a percentage such as '50%'.
|
|
128
|
+
* The '100%' is the height the drawing area.
|
|
129
|
+
*/
|
|
130
|
+
cy: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
131
|
+
desc: PropTypes.string,
|
|
132
|
+
/**
|
|
133
|
+
* If `true`, the charts will not listen to the mouse move event.
|
|
134
|
+
* It might break interactive features, but will improve performance.
|
|
135
|
+
* @default false
|
|
136
|
+
*/
|
|
137
|
+
disableAxisListener: PropTypes.bool,
|
|
138
|
+
/**
|
|
139
|
+
* The end angle (deg).
|
|
140
|
+
* @default 360
|
|
141
|
+
*/
|
|
142
|
+
endAngle: PropTypes.number,
|
|
143
|
+
/**
|
|
144
|
+
* The height of the chart in px. If not defined, it takes the height of the parent element.
|
|
145
|
+
* @default undefined
|
|
146
|
+
*/
|
|
147
|
+
height: PropTypes.number,
|
|
148
|
+
/**
|
|
149
|
+
* The radius between circle center and the begining of the arc.
|
|
150
|
+
* Can be a number (in px) or a string with a percentage such as '50%'.
|
|
151
|
+
* The '100%' is the maximal radius that fit into the drawing area.
|
|
152
|
+
* @default '80%'
|
|
153
|
+
*/
|
|
154
|
+
innerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
155
|
+
/**
|
|
156
|
+
* The margin between the SVG and the drawing area.
|
|
157
|
+
* It's used for leaving some space for extra information such as the x- and y-axis or legend.
|
|
158
|
+
* Accepts an object with the optional properties: `top`, `bottom`, `left`, and `right`.
|
|
159
|
+
* @default object Depends on the charts type.
|
|
160
|
+
*/
|
|
161
|
+
margin: PropTypes.shape({
|
|
162
|
+
bottom: PropTypes.number,
|
|
163
|
+
left: PropTypes.number,
|
|
164
|
+
right: PropTypes.number,
|
|
165
|
+
top: PropTypes.number
|
|
166
|
+
}),
|
|
167
|
+
/**
|
|
168
|
+
* The radius between circle center and the end of the arc.
|
|
169
|
+
* Can be a number (in px) or a string with a percentage such as '50%'.
|
|
170
|
+
* The '100%' is the maximal radius that fit into the drawing area.
|
|
171
|
+
* @default '100%'
|
|
172
|
+
*/
|
|
173
|
+
outerRadius: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
174
|
+
/**
|
|
175
|
+
* The start angle (deg).
|
|
176
|
+
* @default 0
|
|
177
|
+
*/
|
|
178
|
+
startAngle: PropTypes.number,
|
|
179
|
+
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
180
|
+
title: PropTypes.string,
|
|
181
|
+
/**
|
|
182
|
+
* The value of the gauge.
|
|
183
|
+
* Set to `null` to not display a value.
|
|
184
|
+
*/
|
|
185
|
+
value: PropTypes.number,
|
|
186
|
+
/**
|
|
187
|
+
* The maximal value of the gauge.
|
|
188
|
+
* @default 100
|
|
189
|
+
*/
|
|
190
|
+
valueMax: PropTypes.number,
|
|
191
|
+
/**
|
|
192
|
+
* The minimal value of the gauge.
|
|
193
|
+
* @default 0
|
|
194
|
+
*/
|
|
195
|
+
valueMin: PropTypes.number,
|
|
196
|
+
viewBox: PropTypes.shape({
|
|
197
|
+
height: PropTypes.number,
|
|
198
|
+
width: PropTypes.number,
|
|
199
|
+
x: PropTypes.number,
|
|
200
|
+
y: PropTypes.number
|
|
201
|
+
}),
|
|
202
|
+
/**
|
|
203
|
+
* The width of the chart in px. If not defined, it takes the width of the parent element.
|
|
204
|
+
* @default undefined
|
|
205
|
+
*/
|
|
206
|
+
width: PropTypes.number
|
|
207
|
+
} : void 0;
|
|
208
|
+
export { GaugeContainer };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// @ignore - do not document.
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { DrawingContext } from '../context/DrawingProvider';
|
|
4
|
+
import { getPercentageValue } from '../internals/utils';
|
|
5
|
+
import { getArcRatios, getAvailableRadius } from './utils';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export const GaugeContext = /*#__PURE__*/React.createContext({
|
|
8
|
+
value: null,
|
|
9
|
+
valueMin: 0,
|
|
10
|
+
valueMax: 0,
|
|
11
|
+
startAngle: 0,
|
|
12
|
+
endAngle: 0,
|
|
13
|
+
innerRadius: 0,
|
|
14
|
+
outerRadius: 0,
|
|
15
|
+
cornerRadius: 0,
|
|
16
|
+
cx: 0,
|
|
17
|
+
cy: 0,
|
|
18
|
+
maxRadius: 0,
|
|
19
|
+
valueAngle: null
|
|
20
|
+
});
|
|
21
|
+
export function GaugeProvider(props) {
|
|
22
|
+
const {
|
|
23
|
+
value = null,
|
|
24
|
+
valueMin = 0,
|
|
25
|
+
valueMax = 100,
|
|
26
|
+
startAngle = 0,
|
|
27
|
+
endAngle = 360,
|
|
28
|
+
outerRadius: outerRadiusParam,
|
|
29
|
+
innerRadius: innerRadiusParam,
|
|
30
|
+
cornerRadius: cornerRadiusParam,
|
|
31
|
+
cx: cxParam,
|
|
32
|
+
cy: cyParam,
|
|
33
|
+
children
|
|
34
|
+
} = props;
|
|
35
|
+
const {
|
|
36
|
+
width,
|
|
37
|
+
height,
|
|
38
|
+
top,
|
|
39
|
+
left
|
|
40
|
+
} = React.useContext(DrawingContext);
|
|
41
|
+
const ratios = getArcRatios(startAngle, endAngle);
|
|
42
|
+
const innerCx = cxParam ? getPercentageValue(cxParam, width) : ratios.cx * width;
|
|
43
|
+
const innerCy = cyParam ? getPercentageValue(cyParam, height) : ratios.cy * height;
|
|
44
|
+
let cx = left + innerCx;
|
|
45
|
+
let cy = top + innerCy;
|
|
46
|
+
const maxRadius = getAvailableRadius(innerCx, innerCy, width, height, ratios);
|
|
47
|
+
|
|
48
|
+
// If the center is not defined, after computation of the available radius, udpate the center to use the remaining space.
|
|
49
|
+
if (cxParam === undefined) {
|
|
50
|
+
const usedWidth = maxRadius * (ratios.maxX - ratios.minX);
|
|
51
|
+
cx = left + (width - usedWidth) / 2 + ratios.cx * usedWidth;
|
|
52
|
+
}
|
|
53
|
+
if (cyParam === undefined) {
|
|
54
|
+
const usedHeight = maxRadius * (ratios.maxY - ratios.minY);
|
|
55
|
+
cy = top + (height - usedHeight) / 2 + ratios.cy * usedHeight;
|
|
56
|
+
}
|
|
57
|
+
const outerRadius = getPercentageValue(outerRadiusParam ?? maxRadius, maxRadius);
|
|
58
|
+
const innerRadius = getPercentageValue(innerRadiusParam ?? '80%', maxRadius);
|
|
59
|
+
const cornerRadius = getPercentageValue(cornerRadiusParam ?? 0, outerRadius - innerRadius);
|
|
60
|
+
const contextValue = React.useMemo(() => {
|
|
61
|
+
const startAngleRad = Math.PI * startAngle / 180;
|
|
62
|
+
const endAngleRad = Math.PI * endAngle / 180;
|
|
63
|
+
return {
|
|
64
|
+
value,
|
|
65
|
+
valueMin,
|
|
66
|
+
valueMax,
|
|
67
|
+
startAngle: startAngleRad,
|
|
68
|
+
endAngle: endAngleRad,
|
|
69
|
+
outerRadius,
|
|
70
|
+
innerRadius,
|
|
71
|
+
cornerRadius,
|
|
72
|
+
cx,
|
|
73
|
+
cy,
|
|
74
|
+
maxRadius,
|
|
75
|
+
valueAngle: value === null ? null : startAngleRad + (endAngleRad - startAngleRad) * (value - valueMin) / (valueMax - valueMin)
|
|
76
|
+
};
|
|
77
|
+
}, [value, valueMin, valueMax, startAngle, endAngle, outerRadius, innerRadius, cornerRadius, cx, cy, maxRadius]);
|
|
78
|
+
return /*#__PURE__*/_jsx(GaugeContext.Provider, {
|
|
79
|
+
value: contextValue,
|
|
80
|
+
children: children
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export function useGaugeState() {
|
|
84
|
+
return React.useContext(GaugeContext);
|
|
85
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { arc as d3Arc } from 'd3-shape';
|
|
4
|
+
import { styled } from '@mui/material/styles';
|
|
5
|
+
import { useGaugeState } from './GaugeProvider';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
const StyledPath = styled('path', {
|
|
8
|
+
name: 'MuiGauge',
|
|
9
|
+
slot: 'ReferenceArc',
|
|
10
|
+
overridesResolver: (props, styles) => styles.referenceArc
|
|
11
|
+
})(({
|
|
12
|
+
theme
|
|
13
|
+
}) => ({
|
|
14
|
+
fill: (theme.vars || theme).palette.divider
|
|
15
|
+
}));
|
|
16
|
+
export function GaugeReferenceArc(props) {
|
|
17
|
+
const {
|
|
18
|
+
startAngle,
|
|
19
|
+
endAngle,
|
|
20
|
+
outerRadius,
|
|
21
|
+
innerRadius,
|
|
22
|
+
cornerRadius,
|
|
23
|
+
cx,
|
|
24
|
+
cy
|
|
25
|
+
} = useGaugeState();
|
|
26
|
+
return /*#__PURE__*/_jsx(StyledPath, _extends({
|
|
27
|
+
transform: `translate(${cx}, ${cy})`,
|
|
28
|
+
d: d3Arc().cornerRadius(cornerRadius)({
|
|
29
|
+
startAngle,
|
|
30
|
+
endAngle,
|
|
31
|
+
innerRadius,
|
|
32
|
+
outerRadius
|
|
33
|
+
})
|
|
34
|
+
}, props));
|
|
35
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { arc as d3Arc } from 'd3-shape';
|
|
4
|
+
import { styled } from '@mui/material/styles';
|
|
5
|
+
import { useGaugeState } from './GaugeProvider';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
const StyledPath = styled('path', {
|
|
8
|
+
name: 'MuiGauge',
|
|
9
|
+
slot: 'ReferenceArc',
|
|
10
|
+
overridesResolver: (props, styles) => styles.referenceArc
|
|
11
|
+
})(({
|
|
12
|
+
theme
|
|
13
|
+
}) => ({
|
|
14
|
+
fill: (theme.vars || theme).palette.primary.main
|
|
15
|
+
}));
|
|
16
|
+
export function GaugeValueArc(props) {
|
|
17
|
+
const {
|
|
18
|
+
value,
|
|
19
|
+
valueMin,
|
|
20
|
+
valueMax,
|
|
21
|
+
startAngle,
|
|
22
|
+
endAngle,
|
|
23
|
+
outerRadius,
|
|
24
|
+
innerRadius,
|
|
25
|
+
cornerRadius,
|
|
26
|
+
cx,
|
|
27
|
+
cy
|
|
28
|
+
} = useGaugeState();
|
|
29
|
+
if (value === null) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const valueAngle = startAngle + (value - valueMin) / (valueMax - valueMin) * (endAngle - startAngle);
|
|
33
|
+
return /*#__PURE__*/_jsx(StyledPath, _extends({
|
|
34
|
+
transform: `translate(${cx}, ${cy})`,
|
|
35
|
+
d: d3Arc().cornerRadius(cornerRadius)({
|
|
36
|
+
startAngle,
|
|
37
|
+
endAngle: valueAngle,
|
|
38
|
+
innerRadius,
|
|
39
|
+
outerRadius
|
|
40
|
+
})
|
|
41
|
+
}, props));
|
|
42
|
+
}
|