@mui/x-charts 7.22.2 → 8.0.0-alpha.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 +7 -7
- package/BarChart/BarChart.js +7 -29
- package/BarChart/BarElement.d.ts +1 -1
- package/BarChart/BarLabel/BarLabelItem.d.ts +1 -1
- package/BarChart/BarPlot.js +12 -4
- package/BarChart/extremums.js +3 -3
- package/BarChart/useBarChartProps.d.ts +2 -2
- package/BarChart/useBarChartProps.js +3 -4
- package/CHANGELOG.md +142 -155
- package/ChartContainer/ChartContainer.d.ts +16 -33
- package/ChartContainer/ChartContainer.js +22 -41
- package/{ResponsiveChartContainer → ChartContainer}/ResizableContainer.d.ts +2 -2
- package/{ResponsiveChartContainer → ChartContainer}/useChartContainerDimensions.d.ts +1 -1
- package/{ResponsiveChartContainer → ChartContainer}/useChartContainerDimensions.js +6 -4
- package/ChartContainer/useChartContainerProps.d.ts +11 -94
- package/ChartContainer/useChartContainerProps.js +42 -58
- package/ChartsLegend/ChartsLegend.js +0 -3
- package/ChartsLegend/DefaultChartsLegend.d.ts +0 -5
- package/ChartsLegend/DefaultChartsLegend.js +1 -12
- package/ChartsLegend/LegendPerItem.d.ts +1 -1
- package/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +2 -2
- package/ChartsOverlay/ChartsOverlay.d.ts +1 -1
- package/ChartsTooltip/ChartsAxisTooltipContent.js +3 -3
- package/ChartsTooltip/ChartsItemTooltipContent.js +3 -3
- package/ChartsTooltip/ChartsTooltip.js +45 -6
- package/ChartsTooltip/useAxisTooltip.js +3 -3
- package/ChartsTooltip/useItemTooltip.js +3 -3
- package/ChartsTooltip/utils.d.ts +5 -13
- package/ChartsTooltip/utils.js +45 -42
- package/ChartsVoronoiHandler/ChartsVoronoiHandler.js +3 -5
- package/Gauge/GaugeContainer.js +1 -1
- package/LineChart/AreaElement.d.ts +1 -1
- package/LineChart/AreaPlot.js +2 -6
- package/LineChart/LineChart.d.ts +7 -7
- package/LineChart/LineChart.js +7 -29
- package/LineChart/LineElement.d.ts +1 -1
- package/LineChart/LineHighlightPlot.d.ts +1 -1
- package/LineChart/LineHighlightPlot.js +2 -6
- package/LineChart/LinePlot.js +2 -6
- package/LineChart/MarkPlot.js +2 -6
- package/LineChart/extremums.js +10 -6
- package/LineChart/useLineChartProps.d.ts +2 -2
- package/LineChart/useLineChartProps.js +3 -4
- package/PieChart/PieArc.d.ts +0 -5
- package/PieChart/PieArc.js +1 -10
- package/PieChart/PieArcPlot.js +0 -5
- package/PieChart/PieChart.d.ts +9 -32
- package/PieChart/PieChart.js +17 -102
- package/README.md +2 -2
- package/ScatterChart/ScatterChart.d.ts +7 -7
- package/ScatterChart/ScatterChart.js +7 -29
- package/ScatterChart/ScatterPlot.js +3 -6
- package/ScatterChart/extremums.js +6 -6
- package/ScatterChart/useScatterChartProps.d.ts +2 -2
- package/ScatterChart/useScatterChartProps.js +3 -4
- package/SparkLineChart/SparkLineChart.d.ts +4 -4
- package/SparkLineChart/SparkLineChart.js +2 -2
- package/context/CartesianProvider/defaultizeAxis.d.ts +1 -1
- package/context/ChartDataProvider/ChartDataProvider.d.ts +41 -0
- package/{ResponsiveChartContainer/ResponsiveChartContainer.js → context/ChartDataProvider/ChartDataProvider.js} +46 -27
- package/context/ChartDataProvider/index.d.ts +1 -0
- package/context/ChartDataProvider/index.js +1 -0
- package/context/ChartDataProvider/useChartDataProviderProps.d.ts +97 -0
- package/context/ChartDataProvider/useChartDataProviderProps.js +86 -0
- package/{ChartContainer → context/ChartDataProvider}/useDefaultizeAxis.d.ts +12 -12
- package/{ChartContainer → context/ChartDataProvider}/useDefaultizeAxis.js +1 -1
- package/context/HighlightedProvider/HighlightedContext.d.ts +0 -8
- package/context/HighlightedProvider/HighlightedProvider.js +1 -16
- package/context/PluginProvider/ExtremumGetter.types.d.ts +2 -2
- package/context/ZAxisContextProvider.d.ts +1 -1
- package/index.d.ts +1 -2
- package/index.js +2 -3
- package/internals/defaultizeColor.d.ts +1 -8
- package/internals/getSymbol.js +19 -3
- package/internals/index.d.ts +5 -5
- package/internals/index.js +5 -5
- package/internals/useStringInterpolator.js +1 -0
- package/models/seriesType/bar.d.ts +1 -1
- package/models/seriesType/common.d.ts +0 -10
- package/models/seriesType/config.d.ts +1 -1
- package/models/seriesType/line.d.ts +1 -1
- package/models/seriesType/pie.d.ts +1 -1
- package/models/seriesType/scatter.d.ts +1 -6
- package/modern/BarChart/BarChart.js +7 -29
- package/modern/BarChart/BarPlot.js +12 -4
- package/modern/BarChart/extremums.js +3 -3
- package/modern/BarChart/useBarChartProps.js +3 -4
- package/modern/ChartContainer/ChartContainer.js +22 -41
- package/modern/{ResponsiveChartContainer → ChartContainer}/useChartContainerDimensions.js +6 -4
- package/modern/ChartContainer/useChartContainerProps.js +42 -58
- package/modern/ChartsLegend/ChartsLegend.js +0 -3
- package/modern/ChartsLegend/DefaultChartsLegend.js +1 -12
- package/modern/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +2 -2
- package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +3 -3
- package/modern/ChartsTooltip/ChartsItemTooltipContent.js +3 -3
- package/modern/ChartsTooltip/ChartsTooltip.js +45 -6
- package/modern/ChartsTooltip/useAxisTooltip.js +3 -3
- package/modern/ChartsTooltip/useItemTooltip.js +3 -3
- package/modern/ChartsTooltip/utils.js +45 -42
- package/modern/ChartsVoronoiHandler/ChartsVoronoiHandler.js +3 -5
- package/modern/Gauge/GaugeContainer.js +1 -1
- package/modern/LineChart/AreaPlot.js +2 -6
- package/modern/LineChart/LineChart.js +7 -29
- package/modern/LineChart/LineHighlightPlot.js +2 -6
- package/modern/LineChart/LinePlot.js +2 -6
- package/modern/LineChart/MarkPlot.js +2 -6
- package/modern/LineChart/extremums.js +10 -6
- package/modern/LineChart/useLineChartProps.js +3 -4
- package/modern/PieChart/PieArc.js +1 -10
- package/modern/PieChart/PieArcPlot.js +0 -5
- package/modern/PieChart/PieChart.js +17 -102
- package/modern/ScatterChart/ScatterChart.js +7 -29
- package/modern/ScatterChart/ScatterPlot.js +3 -6
- package/modern/ScatterChart/extremums.js +6 -6
- package/modern/ScatterChart/useScatterChartProps.js +3 -4
- package/modern/SparkLineChart/SparkLineChart.js +2 -2
- package/modern/{ResponsiveChartContainer/ResponsiveChartContainer.js → context/ChartDataProvider/ChartDataProvider.js} +46 -27
- package/modern/context/ChartDataProvider/index.js +1 -0
- package/modern/context/ChartDataProvider/useChartDataProviderProps.js +86 -0
- package/modern/{ChartContainer → context/ChartDataProvider}/useDefaultizeAxis.js +1 -1
- package/modern/context/HighlightedProvider/HighlightedProvider.js +1 -16
- package/modern/index.js +2 -3
- package/modern/internals/getSymbol.js +19 -3
- package/modern/internals/index.js +5 -5
- package/modern/internals/useStringInterpolator.js +1 -0
- package/node/BarChart/BarChart.js +7 -29
- package/node/BarChart/BarPlot.js +11 -3
- package/node/BarChart/extremums.js +3 -3
- package/node/BarChart/useBarChartProps.js +3 -4
- package/node/ChartContainer/ChartContainer.js +21 -40
- package/node/{ResponsiveChartContainer → ChartContainer}/useChartContainerDimensions.js +6 -4
- package/node/ChartContainer/useChartContainerProps.js +42 -59
- package/node/ChartsLegend/ChartsLegend.js +0 -3
- package/node/ChartsLegend/DefaultChartsLegend.js +1 -12
- package/node/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +2 -2
- package/node/ChartsTooltip/ChartsAxisTooltipContent.js +3 -3
- package/node/ChartsTooltip/ChartsItemTooltipContent.js +3 -3
- package/node/ChartsTooltip/ChartsTooltip.js +44 -5
- package/node/ChartsTooltip/useAxisTooltip.js +3 -3
- package/node/ChartsTooltip/useItemTooltip.js +3 -3
- package/node/ChartsTooltip/utils.js +46 -44
- package/node/ChartsVoronoiHandler/ChartsVoronoiHandler.js +3 -5
- package/node/Gauge/GaugeContainer.js +1 -1
- package/node/LineChart/AreaPlot.js +2 -6
- package/node/LineChart/LineChart.js +7 -29
- package/node/LineChart/LineHighlightPlot.js +2 -6
- package/node/LineChart/LinePlot.js +2 -6
- package/node/LineChart/MarkPlot.js +2 -6
- package/node/LineChart/extremums.js +10 -6
- package/node/LineChart/useLineChartProps.js +3 -4
- package/node/PieChart/PieArc.js +1 -10
- package/node/PieChart/PieArcPlot.js +0 -5
- package/node/PieChart/PieChart.js +17 -102
- package/node/ScatterChart/ScatterChart.js +7 -29
- package/node/ScatterChart/ScatterPlot.js +3 -6
- package/node/ScatterChart/extremums.js +6 -6
- package/node/ScatterChart/useScatterChartProps.js +3 -4
- package/node/SparkLineChart/SparkLineChart.js +2 -2
- package/node/{ResponsiveChartContainer/ResponsiveChartContainer.js → context/ChartDataProvider/ChartDataProvider.js} +45 -26
- package/node/context/ChartDataProvider/index.js +16 -0
- package/node/context/ChartDataProvider/useChartDataProviderProps.js +94 -0
- package/node/{ChartContainer → context/ChartDataProvider}/useDefaultizeAxis.js +1 -1
- package/node/context/HighlightedProvider/HighlightedProvider.js +1 -16
- package/node/index.js +5 -16
- package/node/internals/getSymbol.js +19 -3
- package/node/internals/index.js +37 -29
- package/node/internals/useStringInterpolator.js +2 -0
- package/package.json +4 -4
- package/ResponsiveChartContainer/ResponsiveChartContainer.d.ts +0 -24
- package/ResponsiveChartContainer/index.d.ts +0 -1
- package/ResponsiveChartContainer/index.js +0 -1
- package/ResponsiveChartContainer/package.json +0 -6
- package/ResponsiveChartContainer/useResponsiveChartContainerProps.d.ts +0 -19
- package/ResponsiveChartContainer/useResponsiveChartContainerProps.js +0 -70
- package/internals/SlotComponentPropsFromProps.d.ts +0 -1
- package/internals/SlotComponentPropsFromProps.js +0 -1
- package/models/helpers.d.ts +0 -3
- package/models/helpers.js +0 -1
- package/modern/ResponsiveChartContainer/index.js +0 -1
- package/modern/ResponsiveChartContainer/useResponsiveChartContainerProps.js +0 -70
- package/modern/internals/SlotComponentPropsFromProps.js +0 -1
- package/modern/models/helpers.js +0 -1
- package/node/ResponsiveChartContainer/index.js +0 -16
- package/node/ResponsiveChartContainer/useResponsiveChartContainerProps.js +0 -77
- package/node/internals/SlotComponentPropsFromProps.js +0 -5
- package/node/models/helpers.js +0 -5
- /package/{ResponsiveChartContainer → ChartContainer}/ResizableContainer.js +0 -0
- /package/modern/{ResponsiveChartContainer → ChartContainer}/ResizableContainer.js +0 -0
- /package/node/{ResponsiveChartContainer → ChartContainer}/ResizableContainer.js +0 -0
|
@@ -10,7 +10,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
10
10
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
11
|
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
|
12
12
|
var _constants = require("../constants");
|
|
13
|
-
const _excluded = ["xAxis", "yAxis", "series", "width", "height", "margin", "colors", "dataset", "sx", "tooltip", "onAxisClick", "axisHighlight", "
|
|
13
|
+
const _excluded = ["xAxis", "yAxis", "series", "width", "height", "margin", "colors", "dataset", "sx", "tooltip", "onAxisClick", "axisHighlight", "grid", "topAxis", "leftAxis", "rightAxis", "bottomAxis", "children", "slots", "slotProps", "skipAnimation", "loading", "layout", "onItemClick", "highlightedItem", "onHighlightChange", "borderRadius", "barLabel", "className", "hideLegend"];
|
|
14
14
|
/**
|
|
15
15
|
* A helper function that extracts BarChartProps from the input props
|
|
16
16
|
* and returns an object with props for the children components of BarChart.
|
|
@@ -32,7 +32,6 @@ const useBarChartProps = props => {
|
|
|
32
32
|
tooltip,
|
|
33
33
|
onAxisClick,
|
|
34
34
|
axisHighlight,
|
|
35
|
-
legend,
|
|
36
35
|
grid,
|
|
37
36
|
topAxis,
|
|
38
37
|
leftAxis,
|
|
@@ -123,10 +122,10 @@ const useBarChartProps = props => {
|
|
|
123
122
|
} : {
|
|
124
123
|
x: 'band'
|
|
125
124
|
}, axisHighlight);
|
|
126
|
-
const legendProps =
|
|
125
|
+
const legendProps = {
|
|
127
126
|
slots,
|
|
128
127
|
slotProps
|
|
129
|
-
}
|
|
128
|
+
};
|
|
130
129
|
const tooltipProps = (0, _extends2.default)({}, tooltip, {
|
|
131
130
|
slots,
|
|
132
131
|
slotProps
|
|
@@ -10,47 +10,18 @@ exports.ChartContainer = void 0;
|
|
|
10
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
11
|
var React = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var _InteractionProvider = require("../context/InteractionProvider");
|
|
16
|
-
var _ChartsSurface = require("../ChartsSurface");
|
|
17
|
-
var _CartesianProvider = require("../context/CartesianProvider");
|
|
18
|
-
var _ChartsAxesGradients = require("../internals/components/ChartsAxesGradients");
|
|
19
|
-
var _context = require("../context");
|
|
20
|
-
var _PluginProvider = require("../context/PluginProvider");
|
|
13
|
+
var _ChartDataProvider = require("../context/ChartDataProvider");
|
|
14
|
+
var _ResizableContainer = require("./ResizableContainer");
|
|
21
15
|
var _useChartContainerProps = require("./useChartContainerProps");
|
|
22
|
-
var _AnimationProvider = require("../context/AnimationProvider");
|
|
23
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
24
17
|
const ChartContainer = exports.ChartContainer = /*#__PURE__*/React.forwardRef(function ChartContainer(props, ref) {
|
|
25
18
|
const {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
cartesianProviderProps,
|
|
30
|
-
zAxisContextProps,
|
|
31
|
-
highlightedProviderProps,
|
|
32
|
-
chartsSurfaceProps,
|
|
33
|
-
pluginProviderProps,
|
|
34
|
-
animationProviderProps
|
|
19
|
+
hasIntrinsicSize,
|
|
20
|
+
chartDataProviderProps,
|
|
21
|
+
resizableChartContainerProps
|
|
35
22
|
} = (0, _useChartContainerProps.useChartContainerProps)(props, ref);
|
|
36
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
37
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
38
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SeriesProvider.SeriesProvider, (0, _extends2.default)({}, seriesProviderProps, {
|
|
39
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CartesianProvider.CartesianProvider, (0, _extends2.default)({}, cartesianProviderProps, {
|
|
40
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.ZAxisContextProvider, (0, _extends2.default)({}, zAxisContextProps, {
|
|
41
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_InteractionProvider.InteractionProvider, {
|
|
42
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.HighlightedProvider, (0, _extends2.default)({}, highlightedProviderProps, {
|
|
43
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ChartsSurface.ChartsSurface, (0, _extends2.default)({}, chartsSurfaceProps, {
|
|
44
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsAxesGradients.ChartsAxesGradients, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_AnimationProvider.AnimationProvider, (0, _extends2.default)({}, animationProviderProps, {
|
|
45
|
-
children: children
|
|
46
|
-
}))]
|
|
47
|
-
}))
|
|
48
|
-
}))
|
|
49
|
-
})
|
|
50
|
-
}))
|
|
51
|
-
}))
|
|
52
|
-
}))
|
|
53
|
-
}))
|
|
23
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ResizableContainer.ResizableContainer, (0, _extends2.default)({}, resizableChartContainerProps, {
|
|
24
|
+
children: hasIntrinsicSize ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartDataProvider.ChartDataProvider, (0, _extends2.default)({}, chartDataProviderProps)) : null
|
|
54
25
|
}));
|
|
55
26
|
});
|
|
56
27
|
process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
|
|
@@ -77,9 +48,9 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
|
|
|
77
48
|
*/
|
|
78
49
|
disableAxisListener: _propTypes.default.bool,
|
|
79
50
|
/**
|
|
80
|
-
* The height of the chart in px.
|
|
51
|
+
* The height of the chart in px. If not defined, it takes the height of the parent element.
|
|
81
52
|
*/
|
|
82
|
-
height: _propTypes.default.number
|
|
53
|
+
height: _propTypes.default.number,
|
|
83
54
|
/**
|
|
84
55
|
* The item currently highlighted. Turns highlighting into a controlled prop.
|
|
85
56
|
*/
|
|
@@ -110,6 +81,16 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
|
|
|
110
81
|
* If not provided, the container supports line, bar, scatter and pie charts.
|
|
111
82
|
*/
|
|
112
83
|
plugins: _propTypes.default.arrayOf(_propTypes.default.object),
|
|
84
|
+
/**
|
|
85
|
+
* The chart will try to wait for the parent container to resolve its size
|
|
86
|
+
* before it renders for the first time.
|
|
87
|
+
*
|
|
88
|
+
* This can be useful in some scenarios where the chart appear to grow after
|
|
89
|
+
* the first render, like when used inside a grid.
|
|
90
|
+
*
|
|
91
|
+
* @default false
|
|
92
|
+
*/
|
|
93
|
+
resolveSizeBeforeRender: _propTypes.default.bool,
|
|
113
94
|
/**
|
|
114
95
|
* The array of series to display.
|
|
115
96
|
* Each type of series has its own specificity.
|
|
@@ -130,9 +111,9 @@ process.env.NODE_ENV !== "production" ? ChartContainer.propTypes = {
|
|
|
130
111
|
y: _propTypes.default.number
|
|
131
112
|
}),
|
|
132
113
|
/**
|
|
133
|
-
* The width of the chart in px.
|
|
114
|
+
* The width of the chart in px. If not defined, it takes the width of the parent element.
|
|
134
115
|
*/
|
|
135
|
-
width: _propTypes.default.number
|
|
116
|
+
width: _propTypes.default.number,
|
|
136
117
|
/**
|
|
137
118
|
* The configuration of the x-axes.
|
|
138
119
|
* If not provided, a default axis config is used.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
'use client';
|
|
3
3
|
|
|
4
|
+
/* eslint-disable react-compiler/react-compiler */
|
|
4
5
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
6
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
7
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -11,6 +12,7 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
11
12
|
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
12
13
|
var _ownerWindow = _interopRequireDefault(require("@mui/utils/ownerWindow"));
|
|
13
14
|
const useChartContainerDimensions = (inWidth, inHeight, resolveSizeBeforeRender) => {
|
|
15
|
+
const hasInSize = inWidth !== undefined && inHeight !== undefined;
|
|
14
16
|
const stateRef = React.useRef({
|
|
15
17
|
displayError: false,
|
|
16
18
|
initialCompute: true,
|
|
@@ -47,7 +49,7 @@ const useChartContainerDimensions = (inWidth, inHeight, resolveSizeBeforeRender)
|
|
|
47
49
|
// https://github.com/mui/mui-x/issues/13477#issuecomment-2336634785
|
|
48
50
|
(0, _useEnhancedEffect.default)(() => {
|
|
49
51
|
// computeRun is used to avoid infinite loops.
|
|
50
|
-
if (!resolveSizeBeforeRender || !stateRef.current.initialCompute || stateRef.current.computeRun > 20) {
|
|
52
|
+
if (hasInSize || !resolveSizeBeforeRender || !stateRef.current.initialCompute || stateRef.current.computeRun > 20) {
|
|
51
53
|
return;
|
|
52
54
|
}
|
|
53
55
|
const computedSize = computeSize();
|
|
@@ -56,9 +58,9 @@ const useChartContainerDimensions = (inWidth, inHeight, resolveSizeBeforeRender)
|
|
|
56
58
|
} else if (stateRef.current.initialCompute) {
|
|
57
59
|
stateRef.current.initialCompute = false;
|
|
58
60
|
}
|
|
59
|
-
}, [width, height, computeSize, resolveSizeBeforeRender]);
|
|
61
|
+
}, [width, height, computeSize, resolveSizeBeforeRender, hasInSize]);
|
|
60
62
|
(0, _useEnhancedEffect.default)(() => {
|
|
61
|
-
if (
|
|
63
|
+
if (hasInSize) {
|
|
62
64
|
return () => {};
|
|
63
65
|
}
|
|
64
66
|
computeSize();
|
|
@@ -84,7 +86,7 @@ const useChartContainerDimensions = (inWidth, inHeight, resolveSizeBeforeRender)
|
|
|
84
86
|
observer.unobserve(elementToObserve);
|
|
85
87
|
}
|
|
86
88
|
};
|
|
87
|
-
}, [computeSize,
|
|
89
|
+
}, [computeSize, hasInSize]);
|
|
88
90
|
if (process.env.NODE_ENV !== 'production') {
|
|
89
91
|
if (stateRef.current.displayError && inWidth === undefined && width === 0) {
|
|
90
92
|
console.error(`MUI X: ChartContainer does not have \`width\` prop, and its container has no \`width\` defined.`);
|
|
@@ -2,93 +2,76 @@
|
|
|
2
2
|
'use client';
|
|
3
3
|
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
5
|
Object.defineProperty(exports, "__esModule", {
|
|
7
6
|
value: true
|
|
8
7
|
});
|
|
9
8
|
exports.useChartContainerProps = void 0;
|
|
10
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
10
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
var _useDefaultizeAxis = require("./useDefaultizeAxis");
|
|
15
|
-
const _excluded = ["width", "height", "series", "margin", "xAxis", "yAxis", "zAxis", "colors", "dataset", "sx", "title", "desc", "disableAxisListener", "highlightedItem", "onHighlightChange", "plugins", "children", "skipAnimation"];
|
|
11
|
+
var _useChartContainerDimensions = require("./useChartContainerDimensions");
|
|
12
|
+
const _excluded = ["width", "height", "resolveSizeBeforeRender", "margin", "children", "series", "colors", "dataset", "desc", "disableAxisListener", "highlightedItem", "onHighlightChange", "plugins", "sx", "title", "viewBox", "xAxis", "yAxis", "zAxis", "skipAnimation"];
|
|
16
13
|
const useChartContainerProps = (props, ref) => {
|
|
17
14
|
const {
|
|
18
15
|
width,
|
|
19
16
|
height,
|
|
20
|
-
|
|
17
|
+
resolveSizeBeforeRender,
|
|
21
18
|
margin,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
zAxis,
|
|
19
|
+
children,
|
|
20
|
+
series,
|
|
25
21
|
colors,
|
|
26
22
|
dataset,
|
|
27
|
-
sx,
|
|
28
|
-
title,
|
|
29
23
|
desc,
|
|
30
24
|
disableAxisListener,
|
|
31
25
|
highlightedItem,
|
|
32
26
|
onHighlightChange,
|
|
33
27
|
plugins,
|
|
34
|
-
|
|
28
|
+
sx,
|
|
29
|
+
title,
|
|
30
|
+
viewBox,
|
|
31
|
+
xAxis,
|
|
32
|
+
yAxis,
|
|
33
|
+
zAxis,
|
|
35
34
|
skipAnimation
|
|
36
35
|
} = props,
|
|
37
36
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
const {
|
|
38
|
+
containerRef,
|
|
39
|
+
width: dWidth,
|
|
40
|
+
height: dHeight
|
|
41
|
+
} = (0, _useChartContainerDimensions.useChartContainerDimensions)(width, height, resolveSizeBeforeRender);
|
|
42
|
+
const resizableChartContainerProps = (0, _extends2.default)({}, other, {
|
|
43
|
+
ownerState: {
|
|
44
|
+
width,
|
|
45
|
+
height
|
|
46
|
+
},
|
|
47
|
+
ref: containerRef
|
|
48
|
+
});
|
|
49
|
+
const chartDataProviderProps = {
|
|
44
50
|
margin,
|
|
45
|
-
|
|
46
|
-
};
|
|
47
|
-
const animationProviderProps = {
|
|
48
|
-
skipAnimation
|
|
49
|
-
};
|
|
50
|
-
const pluginProviderProps = {
|
|
51
|
-
plugins
|
|
52
|
-
};
|
|
53
|
-
const seriesProviderProps = {
|
|
51
|
+
children,
|
|
54
52
|
series,
|
|
55
53
|
colors,
|
|
56
|
-
dataset
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
xAxis: defaultizedXAxis,
|
|
60
|
-
yAxis: defaultizedYAxis,
|
|
61
|
-
dataset
|
|
62
|
-
};
|
|
63
|
-
const zAxisContextProps = {
|
|
64
|
-
zAxis,
|
|
65
|
-
dataset
|
|
66
|
-
};
|
|
67
|
-
const highlightedProviderProps = {
|
|
54
|
+
dataset,
|
|
55
|
+
desc,
|
|
56
|
+
disableAxisListener,
|
|
68
57
|
highlightedItem,
|
|
69
|
-
onHighlightChange
|
|
70
|
-
|
|
71
|
-
const chartsSurfaceProps = (0, _extends2.default)({}, other, {
|
|
72
|
-
width,
|
|
73
|
-
height,
|
|
74
|
-
ref: chartSurfaceRef,
|
|
58
|
+
onHighlightChange,
|
|
59
|
+
plugins,
|
|
75
60
|
sx,
|
|
76
61
|
title,
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
62
|
+
viewBox,
|
|
63
|
+
xAxis,
|
|
64
|
+
yAxis,
|
|
65
|
+
zAxis,
|
|
66
|
+
skipAnimation,
|
|
67
|
+
width: dWidth,
|
|
68
|
+
height: dHeight,
|
|
69
|
+
ref
|
|
70
|
+
};
|
|
80
71
|
return {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
cartesianProviderProps,
|
|
85
|
-
zAxisContextProps,
|
|
86
|
-
highlightedProviderProps,
|
|
87
|
-
chartsSurfaceProps,
|
|
88
|
-
pluginProviderProps,
|
|
89
|
-
animationProviderProps,
|
|
90
|
-
xAxis: defaultizedXAxis,
|
|
91
|
-
yAxis: defaultizedYAxis
|
|
72
|
+
hasIntrinsicSize: Boolean(dWidth && dHeight),
|
|
73
|
+
chartDataProviderProps,
|
|
74
|
+
resizableChartContainerProps
|
|
92
75
|
};
|
|
93
76
|
};
|
|
94
77
|
exports.useChartContainerProps = useChartContainerProps;
|
|
@@ -17,7 +17,6 @@ var _styles = require("@mui/material/styles");
|
|
|
17
17
|
var _utils = require("./utils");
|
|
18
18
|
var _chartsLegendClasses = require("./chartsLegendClasses");
|
|
19
19
|
var _DefaultChartsLegend = require("./DefaultChartsLegend");
|
|
20
|
-
var _hooks = require("../hooks");
|
|
21
20
|
var _useSeries = require("../hooks/useSeries");
|
|
22
21
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
22
|
const _excluded = ["slots", "slotProps"];
|
|
@@ -57,7 +56,6 @@ function ChartsLegend(inProps) {
|
|
|
57
56
|
const classes = useUtilityClasses((0, _extends2.default)({}, defaultizedProps, {
|
|
58
57
|
theme
|
|
59
58
|
}));
|
|
60
|
-
const drawingArea = (0, _hooks.useDrawingArea)();
|
|
61
59
|
const series = (0, _useSeries.useSeries)();
|
|
62
60
|
const seriesToDisplay = (0, _utils.getSeriesToDisplay)(series);
|
|
63
61
|
const ChartLegendRender = slots?.legend ?? _DefaultChartsLegend.DefaultChartsLegend;
|
|
@@ -66,7 +64,6 @@ function ChartsLegend(inProps) {
|
|
|
66
64
|
externalSlotProps: slotProps?.legend,
|
|
67
65
|
additionalProps: (0, _extends2.default)({}, other, {
|
|
68
66
|
classes,
|
|
69
|
-
drawingArea,
|
|
70
67
|
series,
|
|
71
68
|
seriesToDisplay
|
|
72
69
|
}),
|
|
@@ -13,7 +13,7 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
13
13
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
14
14
|
var _LegendPerItem = require("./LegendPerItem");
|
|
15
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
|
-
const _excluded = ["
|
|
16
|
+
const _excluded = ["seriesToDisplay", "hidden", "onItemClick"];
|
|
17
17
|
const seriesContextBuilder = context => ({
|
|
18
18
|
type: 'series',
|
|
19
19
|
color: context.color,
|
|
@@ -50,17 +50,6 @@ process.env.NODE_ENV !== "production" ? DefaultChartsLegend.propTypes = {
|
|
|
50
50
|
* The default depends on the chart.
|
|
51
51
|
*/
|
|
52
52
|
direction: _propTypes.default.oneOf(['column', 'row']).isRequired,
|
|
53
|
-
/**
|
|
54
|
-
* @deprecated Use the `useDrawingArea` hook instead.
|
|
55
|
-
*/
|
|
56
|
-
drawingArea: _propTypes.default.shape({
|
|
57
|
-
bottom: _propTypes.default.number.isRequired,
|
|
58
|
-
height: _propTypes.default.number.isRequired,
|
|
59
|
-
left: _propTypes.default.number.isRequired,
|
|
60
|
-
right: _propTypes.default.number.isRequired,
|
|
61
|
-
top: _propTypes.default.number.isRequired,
|
|
62
|
-
width: _propTypes.default.number.isRequired
|
|
63
|
-
}).isRequired,
|
|
64
53
|
/**
|
|
65
54
|
* Set to true to hide the legend.
|
|
66
55
|
* @default false
|
|
@@ -46,8 +46,8 @@ function ChartsOnAxisClickHandler(props) {
|
|
|
46
46
|
Object.keys(series).filter(seriesType => ['bar', 'line'].includes(seriesType)).forEach(seriesType => {
|
|
47
47
|
series[seriesType]?.seriesOrder.forEach(seriesId => {
|
|
48
48
|
const seriesItem = series[seriesType].series[seriesId];
|
|
49
|
-
const providedXAxisId = seriesItem.xAxisId
|
|
50
|
-
const providedYAxisId = seriesItem.yAxisId
|
|
49
|
+
const providedXAxisId = seriesItem.xAxisId;
|
|
50
|
+
const providedYAxisId = seriesItem.yAxisId;
|
|
51
51
|
const axisKey = isXaxis ? providedXAxisId : providedYAxisId;
|
|
52
52
|
if (axisKey === undefined || axisKey === USED_AXIS_ID) {
|
|
53
53
|
seriesValues[seriesId] = seriesItem.data[dataIndex];
|
|
@@ -48,14 +48,14 @@ function ChartsAxisTooltipContent(props) {
|
|
|
48
48
|
Object.keys(series).filter(_isCartesian.isCartesianSeriesType).forEach(seriesType => {
|
|
49
49
|
series[seriesType].seriesOrder.forEach(seriesId => {
|
|
50
50
|
const item = series[seriesType].series[seriesId];
|
|
51
|
-
const providedXAxisId = item.xAxisId
|
|
52
|
-
const providedYAxisId = item.yAxisId
|
|
51
|
+
const providedXAxisId = item.xAxisId;
|
|
52
|
+
const providedYAxisId = item.yAxisId;
|
|
53
53
|
const axisKey = isXaxis ? providedXAxisId : providedYAxisId;
|
|
54
54
|
if (axisKey === undefined || axisKey === USED_AXIS_ID) {
|
|
55
55
|
const seriesToAdd = series[seriesType].series[seriesId];
|
|
56
56
|
const xAxisId = providedXAxisId ?? xAxisIds[0];
|
|
57
57
|
const yAxisId = providedYAxisId ?? yAxisIds[0];
|
|
58
|
-
const zAxisId = seriesToAdd.zAxisId ??
|
|
58
|
+
const zAxisId = seriesToAdd.zAxisId ?? zAxisIds[0];
|
|
59
59
|
const getColor = colorProcessors[seriesType]?.(seriesToAdd, xAxis[xAxisId], yAxis[yAxisId], zAxisId && zAxis[zAxisId]) ?? (() => '');
|
|
60
60
|
rep.push((0, _extends2.default)({}, seriesToAdd, {
|
|
61
61
|
getColor
|
|
@@ -38,9 +38,9 @@ function ChartsItemTooltipContent(props) {
|
|
|
38
38
|
zAxisIds
|
|
39
39
|
} = React.useContext(_ZAxisContextProvider.ZAxisContext);
|
|
40
40
|
const colorProcessors = (0, _useColorProcessor.useColorProcessor)();
|
|
41
|
-
const xAxisId = series.xAxisId ??
|
|
42
|
-
const yAxisId = series.yAxisId ??
|
|
43
|
-
const zAxisId = series.zAxisId ??
|
|
41
|
+
const xAxisId = series.xAxisId ?? xAxisIds[0];
|
|
42
|
+
const yAxisId = series.yAxisId ?? yAxisIds[0];
|
|
43
|
+
const zAxisId = series.zAxisId ?? zAxisIds[0];
|
|
44
44
|
const getColor = colorProcessors[series.type]?.(series, xAxisId && xAxis[xAxisId], yAxisId && yAxis[yAxisId], zAxisId && zAxis[zAxisId]) ?? (() => '');
|
|
45
45
|
const Content = content ?? _DefaultChartsItemTooltipContent.DefaultChartsItemTooltipContent;
|
|
46
46
|
const chartTooltipContentProps = (0, _useSlotProps.default)({
|
|
@@ -11,11 +11,13 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
11
11
|
var React = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
13
|
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
|
14
|
+
var _useLazyRef = _interopRequireDefault(require("@mui/utils/useLazyRef"));
|
|
14
15
|
var _styles = require("@mui/material/styles");
|
|
15
16
|
var _Popper = _interopRequireDefault(require("@mui/material/Popper"));
|
|
16
17
|
var _NoSsr = _interopRequireDefault(require("@mui/material/NoSsr"));
|
|
17
18
|
var _useSlotProps = _interopRequireDefault(require("@mui/utils/useSlotProps"));
|
|
18
19
|
var _InteractionProvider = require("../context/InteractionProvider");
|
|
20
|
+
var _useSvgRef = require("../hooks/useSvgRef");
|
|
19
21
|
var _utils = require("./utils");
|
|
20
22
|
var _ChartsItemTooltipContent = require("./ChartsItemTooltipContent");
|
|
21
23
|
var _ChartsAxisTooltipContent = require("./ChartsAxisTooltipContent");
|
|
@@ -70,14 +72,20 @@ function ChartsTooltip(inProps) {
|
|
|
70
72
|
slots,
|
|
71
73
|
slotProps
|
|
72
74
|
} = props;
|
|
73
|
-
const
|
|
75
|
+
const svgRef = (0, _useSvgRef.useSvgRef)();
|
|
76
|
+
const pointerType = (0, _utils.usePointerType)();
|
|
77
|
+
const popperRef = React.useRef(null);
|
|
78
|
+
const positionRef = (0, _useLazyRef.default)(() => ({
|
|
79
|
+
x: 0,
|
|
80
|
+
y: 0
|
|
81
|
+
}));
|
|
74
82
|
const {
|
|
75
83
|
item,
|
|
76
84
|
axis
|
|
77
85
|
} = React.useContext(_InteractionProvider.InteractionContext);
|
|
78
86
|
const displayedData = trigger === 'item' ? item : axis;
|
|
79
87
|
const tooltipHasData = (0, _utils.getTooltipHasData)(trigger, displayedData);
|
|
80
|
-
const popperOpen =
|
|
88
|
+
const popperOpen = pointerType !== null && tooltipHasData;
|
|
81
89
|
const classes = useUtilityClasses({
|
|
82
90
|
classes: props.classes
|
|
83
91
|
});
|
|
@@ -87,17 +95,48 @@ function ChartsTooltip(inProps) {
|
|
|
87
95
|
externalSlotProps: slotProps?.popper,
|
|
88
96
|
additionalProps: {
|
|
89
97
|
open: popperOpen,
|
|
90
|
-
placement:
|
|
91
|
-
|
|
98
|
+
placement: pointerType?.pointerType === 'mouse' ? 'right-start' : 'top',
|
|
99
|
+
popperRef,
|
|
100
|
+
anchorEl: {
|
|
101
|
+
getBoundingClientRect: () => ({
|
|
102
|
+
x: positionRef.current.x,
|
|
103
|
+
y: positionRef.current.y,
|
|
104
|
+
top: positionRef.current.y,
|
|
105
|
+
left: positionRef.current.x,
|
|
106
|
+
right: positionRef.current.x,
|
|
107
|
+
bottom: positionRef.current.y,
|
|
108
|
+
width: 0,
|
|
109
|
+
height: 0,
|
|
110
|
+
toJSON: () => ''
|
|
111
|
+
})
|
|
112
|
+
},
|
|
92
113
|
modifiers: [{
|
|
93
114
|
name: 'offset',
|
|
94
115
|
options: {
|
|
95
|
-
offset: [0,
|
|
116
|
+
offset: [0, pointerType?.pointerType === 'touch' ? 40 - pointerType.height : 0]
|
|
96
117
|
}
|
|
97
118
|
}]
|
|
98
119
|
},
|
|
99
120
|
ownerState: {}
|
|
100
121
|
});
|
|
122
|
+
React.useEffect(() => {
|
|
123
|
+
const element = svgRef.current;
|
|
124
|
+
if (element === null) {
|
|
125
|
+
return () => {};
|
|
126
|
+
}
|
|
127
|
+
const handleMove = event => {
|
|
128
|
+
// eslint-disable-next-line react-compiler/react-compiler
|
|
129
|
+
positionRef.current = {
|
|
130
|
+
x: event.clientX,
|
|
131
|
+
y: event.clientY
|
|
132
|
+
};
|
|
133
|
+
popperRef.current?.update();
|
|
134
|
+
};
|
|
135
|
+
element.addEventListener('pointermove', handleMove);
|
|
136
|
+
return () => {
|
|
137
|
+
element.removeEventListener('pointermove', handleMove);
|
|
138
|
+
};
|
|
139
|
+
}, [svgRef, positionRef]);
|
|
101
140
|
if (trigger === 'none') {
|
|
102
141
|
return null;
|
|
103
142
|
}
|
|
@@ -51,15 +51,15 @@ function useAxisTooltip() {
|
|
|
51
51
|
}
|
|
52
52
|
return seriesOfType.seriesOrder.map(seriesId => {
|
|
53
53
|
const seriesToAdd = seriesOfType.series[seriesId];
|
|
54
|
-
const providedXAxisId = seriesToAdd.xAxisId
|
|
55
|
-
const providedYAxisId = seriesToAdd.yAxisId
|
|
54
|
+
const providedXAxisId = seriesToAdd.xAxisId;
|
|
55
|
+
const providedYAxisId = seriesToAdd.yAxisId;
|
|
56
56
|
const axisKey = isXaxis ? providedXAxisId : providedYAxisId;
|
|
57
57
|
|
|
58
58
|
// Test if the series uses the default axis
|
|
59
59
|
if (axisKey === undefined || axisKey === USED_AXIS_ID) {
|
|
60
60
|
const xAxisId = providedXAxisId ?? xAxisIds[0];
|
|
61
61
|
const yAxisId = providedYAxisId ?? yAxisIds[0];
|
|
62
|
-
const zAxisId = seriesToAdd.zAxisId ??
|
|
62
|
+
const zAxisId = seriesToAdd.zAxisId ?? zAxisIds[0];
|
|
63
63
|
const color = colorProcessors[seriesType]?.(seriesToAdd, xAxis[xAxisId], yAxis[yAxisId], zAxisId && zAxis[zAxisId])(dataIndex) ?? '';
|
|
64
64
|
const value = seriesToAdd.data[dataIndex] ?? null;
|
|
65
65
|
const formattedValue = seriesToAdd.valueFormatter(value, {
|
|
@@ -31,9 +31,9 @@ function useItemTooltip() {
|
|
|
31
31
|
zAxisIds
|
|
32
32
|
} = React.useContext(_ZAxisContextProvider.ZAxisContext);
|
|
33
33
|
const colorProcessors = (0, _useColorProcessor.useColorProcessor)();
|
|
34
|
-
const xAxisId = series.xAxisId ??
|
|
35
|
-
const yAxisId = series.yAxisId ??
|
|
36
|
-
const zAxisId = series.zAxisId ??
|
|
34
|
+
const xAxisId = series.xAxisId ?? xAxisIds[0];
|
|
35
|
+
const yAxisId = series.yAxisId ?? yAxisIds[0];
|
|
36
|
+
const zAxisId = series.zAxisId ?? zAxisIds[0];
|
|
37
37
|
if (!item || item.dataIndex === undefined) {
|
|
38
38
|
return null;
|
|
39
39
|
}
|
|
@@ -1,53 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.generateVirtualElement = generateVirtualElement;
|
|
9
7
|
exports.getTooltipHasData = getTooltipHasData;
|
|
10
8
|
exports.useMouseTracker = useMouseTracker;
|
|
9
|
+
exports.usePointerType = usePointerType;
|
|
11
10
|
exports.utcFormatter = utcFormatter;
|
|
12
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
11
|
var React = _interopRequireWildcard(require("react"));
|
|
14
12
|
var _hooks = require("../hooks");
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
getBoundingClientRect: () => ({
|
|
19
|
-
width: 0,
|
|
20
|
-
height: 0,
|
|
21
|
-
x: 0,
|
|
22
|
-
y: 0,
|
|
23
|
-
top: 0,
|
|
24
|
-
right: 0,
|
|
25
|
-
bottom: 0,
|
|
26
|
-
left: 0,
|
|
27
|
-
toJSON: () => ''
|
|
28
|
-
})
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
const {
|
|
32
|
-
x,
|
|
33
|
-
y
|
|
34
|
-
} = mousePosition;
|
|
35
|
-
const boundingBox = {
|
|
36
|
-
width: 0,
|
|
37
|
-
height: 0,
|
|
38
|
-
x,
|
|
39
|
-
y,
|
|
40
|
-
top: y,
|
|
41
|
-
right: x,
|
|
42
|
-
bottom: y,
|
|
43
|
-
left: x
|
|
44
|
-
};
|
|
45
|
-
return {
|
|
46
|
-
getBoundingClientRect: () => (0, _extends2.default)({}, boundingBox, {
|
|
47
|
-
toJSON: () => JSON.stringify(boundingBox)
|
|
48
|
-
})
|
|
49
|
-
};
|
|
50
|
-
}
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated We recommend using vanilla JS to let popper track mouse position.
|
|
15
|
+
*/
|
|
51
16
|
function useMouseTracker() {
|
|
52
17
|
const svgRef = (0, _hooks.useSvgRef)();
|
|
53
18
|
|
|
@@ -58,6 +23,7 @@ function useMouseTracker() {
|
|
|
58
23
|
if (element === null) {
|
|
59
24
|
return () => {};
|
|
60
25
|
}
|
|
26
|
+
const controller = new AbortController();
|
|
61
27
|
const handleOut = event => {
|
|
62
28
|
if (event.pointerType !== 'mouse') {
|
|
63
29
|
setMousePosition(null);
|
|
@@ -71,16 +37,52 @@ function useMouseTracker() {
|
|
|
71
37
|
pointerType: event.pointerType
|
|
72
38
|
});
|
|
73
39
|
};
|
|
74
|
-
element.addEventListener('pointerdown', handleMove
|
|
75
|
-
|
|
40
|
+
element.addEventListener('pointerdown', handleMove, {
|
|
41
|
+
signal: controller.signal
|
|
42
|
+
});
|
|
43
|
+
element.addEventListener('pointermove', handleMove, {
|
|
44
|
+
signal: controller.signal
|
|
45
|
+
});
|
|
46
|
+
element.addEventListener('pointerup', handleOut, {
|
|
47
|
+
signal: controller.signal
|
|
48
|
+
});
|
|
49
|
+
return () => {
|
|
50
|
+
// Calling `.abort()` removes ALL event listeners
|
|
51
|
+
// For more info, see https://kettanaito.com/blog/dont-sleep-on-abort-controller
|
|
52
|
+
controller.abort();
|
|
53
|
+
};
|
|
54
|
+
}, [svgRef]);
|
|
55
|
+
return mousePosition;
|
|
56
|
+
}
|
|
57
|
+
function usePointerType() {
|
|
58
|
+
const svgRef = (0, _hooks.useSvgRef)();
|
|
59
|
+
|
|
60
|
+
// Use a ref to avoid rerendering on every mousemove event.
|
|
61
|
+
const [pointerType, setPointerType] = React.useState(null);
|
|
62
|
+
React.useEffect(() => {
|
|
63
|
+
const element = svgRef.current;
|
|
64
|
+
if (element === null) {
|
|
65
|
+
return () => {};
|
|
66
|
+
}
|
|
67
|
+
const handleOut = event => {
|
|
68
|
+
if (event.pointerType !== 'mouse') {
|
|
69
|
+
setPointerType(null);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const handleEnter = event => {
|
|
73
|
+
setPointerType({
|
|
74
|
+
height: event.height,
|
|
75
|
+
pointerType: event.pointerType
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
element.addEventListener('pointerenter', handleEnter);
|
|
76
79
|
element.addEventListener('pointerup', handleOut);
|
|
77
80
|
return () => {
|
|
78
|
-
element.removeEventListener('
|
|
79
|
-
element.removeEventListener('pointermove', handleMove);
|
|
81
|
+
element.removeEventListener('pointerenter', handleEnter);
|
|
80
82
|
element.removeEventListener('pointerup', handleOut);
|
|
81
83
|
};
|
|
82
84
|
}, [svgRef]);
|
|
83
|
-
return
|
|
85
|
+
return pointerType;
|
|
84
86
|
}
|
|
85
87
|
function getTooltipHasData(trigger, displayedData) {
|
|
86
88
|
if (trigger === 'item') {
|