@mui/x-charts 7.0.0-beta.0 → 7.0.0-beta.2
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 +2 -1
- package/BarChart/BarChart.js +33 -12
- package/BarChart/BarElement.d.ts +20 -13
- package/BarChart/BarElement.js +7 -3
- package/BarChart/BarPlot.d.ts +11 -6
- package/BarChart/BarPlot.js +28 -15
- package/BarChart/formatter.js +1 -1
- package/CHANGELOG.md +406 -1
- package/ChartContainer/ChartContainer.js +6 -4
- package/ChartsAxis/ChartsAxis.js +4 -4
- 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/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.d.ts +20 -0
- package/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +83 -0
- package/ChartsOnAxisClickHandler/index.d.ts +1 -0
- package/ChartsOnAxisClickHandler/index.js +16 -0
- package/ChartsOnAxisClickHandler/package.json +6 -0
- package/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
- package/ChartsReferenceLine/ChartsXReferenceLine.js +1 -1
- package/ChartsReferenceLine/ChartsYReferenceLine.js +1 -1
- package/ChartsReferenceLine/common.d.ts +2 -1
- package/ChartsTooltip/ChartsAxisTooltipContent.js +6 -5
- package/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
- package/ChartsTooltip/DefaultChartsAxisTooltipContent.js +7 -5
- package/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
- package/ChartsTooltip/utils.d.ts +4 -1
- package/ChartsTooltip/utils.js +15 -0
- package/ChartsVoronoiHandler/ChartsVoronoiHandler.d.ts +7 -0
- package/ChartsVoronoiHandler/ChartsVoronoiHandler.js +92 -44
- package/ChartsXAxis/ChartsXAxis.js +13 -9
- package/ChartsYAxis/ChartsYAxis.js +1 -1
- package/LineChart/AnimatedArea.d.ts +1361 -0
- package/LineChart/AnimatedArea.js +111 -0
- package/LineChart/AnimatedLine.d.ts +1361 -0
- package/LineChart/AnimatedLine.js +113 -0
- package/LineChart/AreaElement.d.ts +19 -18
- package/LineChart/AreaElement.js +17 -34
- package/LineChart/AreaPlot.d.ts +12 -7
- package/LineChart/AreaPlot.js +91 -58
- package/LineChart/LineChart.d.ts +13 -4
- package/LineChart/LineChart.js +45 -14
- package/LineChart/LineElement.d.ts +19 -18
- package/LineChart/LineElement.js +16 -36
- package/LineChart/LineHighlightElement.d.ts +3 -2
- package/LineChart/LineHighlightElement.js +5 -3
- package/LineChart/LinePlot.d.ts +12 -7
- package/LineChart/LinePlot.js +89 -56
- package/LineChart/MarkElement.d.ts +8 -4
- package/LineChart/MarkElement.js +27 -13
- package/LineChart/MarkPlot.d.ts +8 -1
- package/LineChart/MarkPlot.js +80 -51
- package/LineChart/formatter.js +1 -1
- package/LineChart/index.d.ts +2 -0
- package/LineChart/index.js +22 -0
- package/PieChart/PieArc.d.ts +3 -2
- package/PieChart/PieArc.js +1 -0
- package/PieChart/PieArcLabel.d.ts +3 -2
- package/PieChart/PieArcLabel.js +1 -0
- package/PieChart/PieArcLabelPlot.d.ts +1 -1
- package/PieChart/PieArcLabelPlot.js +2 -2
- package/PieChart/PieArcPlot.d.ts +2 -2
- package/PieChart/PieArcPlot.js +7 -7
- package/PieChart/PieChart.d.ts +1 -1
- package/PieChart/PieChart.js +14 -12
- package/PieChart/PiePlot.d.ts +1 -1
- package/PieChart/PiePlot.js +4 -4
- package/ResponsiveChartContainer/ResponsiveChartContainer.js +6 -4
- package/ScatterChart/Scatter.d.ts +7 -1
- package/ScatterChart/Scatter.js +17 -3
- package/ScatterChart/ScatterChart.d.ts +8 -2
- package/ScatterChart/ScatterChart.js +21 -10
- package/ScatterChart/ScatterPlot.d.ts +1 -1
- package/ScatterChart/ScatterPlot.js +10 -2
- package/SparkLineChart/SparkLineChart.d.ts +1 -1
- package/SparkLineChart/SparkLineChart.js +7 -4
- package/context/CartesianContextProvider.js +8 -6
- package/context/DrawingProvider.d.ts +6 -1
- package/context/DrawingProvider.js +9 -2
- package/context/InteractionProvider.d.ts +3 -3
- package/esm/BarChart/BarChart.js +33 -12
- package/esm/BarChart/BarElement.js +7 -3
- package/esm/BarChart/BarPlot.js +27 -15
- package/esm/BarChart/formatter.js +1 -1
- package/esm/ChartContainer/ChartContainer.js +6 -4
- package/esm/ChartsAxis/ChartsAxis.js +4 -4
- package/esm/ChartsLegend/ChartsLegend.js +2 -307
- package/esm/ChartsLegend/DefaultChartsLegend.js +286 -0
- package/esm/ChartsLegend/index.js +1 -0
- package/esm/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +77 -0
- package/esm/ChartsOnAxisClickHandler/index.js +1 -0
- package/esm/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
- package/esm/ChartsReferenceLine/ChartsXReferenceLine.js +1 -1
- package/esm/ChartsReferenceLine/ChartsYReferenceLine.js +1 -1
- package/esm/ChartsTooltip/ChartsAxisTooltipContent.js +6 -5
- package/esm/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
- package/esm/ChartsTooltip/DefaultChartsAxisTooltipContent.js +8 -5
- package/esm/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
- package/esm/ChartsTooltip/utils.js +12 -0
- package/esm/ChartsVoronoiHandler/ChartsVoronoiHandler.js +92 -44
- package/esm/ChartsXAxis/ChartsXAxis.js +13 -9
- package/esm/ChartsYAxis/ChartsYAxis.js +1 -1
- package/esm/LineChart/AnimatedArea.js +103 -0
- package/esm/LineChart/AnimatedLine.js +105 -0
- package/esm/LineChart/AreaElement.js +16 -33
- package/esm/LineChart/AreaPlot.js +92 -59
- package/esm/LineChart/LineChart.js +45 -14
- package/esm/LineChart/LineElement.js +16 -35
- package/esm/LineChart/LineHighlightElement.js +5 -3
- package/esm/LineChart/LinePlot.js +90 -57
- package/esm/LineChart/MarkElement.js +27 -13
- package/esm/LineChart/MarkPlot.js +80 -51
- package/esm/LineChart/formatter.js +1 -1
- package/esm/LineChart/index.js +2 -0
- package/esm/PieChart/PieArc.js +1 -0
- package/esm/PieChart/PieArcLabel.js +1 -0
- package/esm/PieChart/PieArcLabelPlot.js +2 -2
- package/esm/PieChart/PieArcPlot.js +7 -7
- package/esm/PieChart/PieChart.js +14 -12
- package/esm/PieChart/PiePlot.js +4 -4
- package/esm/ResponsiveChartContainer/ResponsiveChartContainer.js +6 -4
- package/esm/ScatterChart/Scatter.js +17 -3
- package/esm/ScatterChart/ScatterChart.js +21 -10
- package/esm/ScatterChart/ScatterPlot.js +10 -2
- package/esm/SparkLineChart/SparkLineChart.js +7 -4
- package/esm/context/CartesianContextProvider.js +8 -6
- package/esm/context/DrawingProvider.js +9 -2
- package/esm/hooks/useDrawingArea.js +7 -3
- package/esm/index.js +1 -0
- package/esm/internals/geometry.js +1 -1
- package/esm/internals/useAnimatedPath.js +29 -0
- package/esm/internals/utils.js +7 -0
- package/hooks/useDrawingArea.d.ts +2 -0
- package/hooks/useDrawingArea.js +7 -3
- package/index.d.ts +1 -0
- package/index.js +12 -1
- package/internals/defaultizeColor.d.ts +16 -16
- package/internals/defaultizeValueFormatter.d.ts +4 -7
- package/internals/geometry.js +1 -1
- package/internals/stackSeries.d.ts +4 -7
- package/internals/useAnimatedPath.d.ts +1 -0
- package/internals/useAnimatedPath.js +38 -0
- package/internals/utils.d.ts +4 -0
- package/internals/utils.js +8 -0
- package/legacy/BarChart/BarChart.js +33 -12
- package/legacy/BarChart/BarElement.js +6 -2
- package/legacy/BarChart/BarPlot.js +28 -14
- package/legacy/BarChart/formatter.js +1 -1
- package/legacy/ChartContainer/ChartContainer.js +6 -4
- package/legacy/ChartsAxis/ChartsAxis.js +4 -4
- package/legacy/ChartsLegend/ChartsLegend.js +2 -323
- package/legacy/ChartsLegend/DefaultChartsLegend.js +302 -0
- package/legacy/ChartsLegend/index.js +1 -0
- package/legacy/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +75 -0
- package/legacy/ChartsOnAxisClickHandler/index.js +1 -0
- package/legacy/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
- package/legacy/ChartsReferenceLine/ChartsXReferenceLine.js +1 -1
- package/legacy/ChartsReferenceLine/ChartsYReferenceLine.js +1 -1
- package/legacy/ChartsTooltip/ChartsAxisTooltipContent.js +6 -7
- package/legacy/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
- package/legacy/ChartsTooltip/DefaultChartsAxisTooltipContent.js +8 -5
- package/legacy/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
- package/legacy/ChartsTooltip/utils.js +12 -0
- package/legacy/ChartsVoronoiHandler/ChartsVoronoiHandler.js +88 -44
- package/legacy/ChartsXAxis/ChartsXAxis.js +12 -8
- package/legacy/ChartsYAxis/ChartsYAxis.js +1 -1
- package/legacy/LineChart/AnimatedArea.js +102 -0
- package/legacy/LineChart/AnimatedLine.js +104 -0
- package/legacy/LineChart/AreaElement.js +15 -35
- package/legacy/LineChart/AreaPlot.js +102 -66
- package/legacy/LineChart/LineChart.js +45 -14
- package/legacy/LineChart/LineElement.js +15 -37
- package/legacy/LineChart/LineHighlightElement.js +5 -3
- package/legacy/LineChart/LinePlot.js +97 -63
- package/legacy/LineChart/MarkElement.js +30 -12
- package/legacy/LineChart/MarkPlot.js +83 -53
- package/legacy/LineChart/formatter.js +1 -1
- package/legacy/LineChart/index.js +2 -0
- package/legacy/PieChart/PieArc.js +1 -0
- package/legacy/PieChart/PieArcLabel.js +1 -0
- package/legacy/PieChart/PieArcLabelPlot.js +2 -2
- package/legacy/PieChart/PieArcPlot.js +7 -7
- package/legacy/PieChart/PieChart.js +14 -12
- package/legacy/PieChart/PiePlot.js +4 -4
- package/legacy/ResponsiveChartContainer/ResponsiveChartContainer.js +6 -4
- package/legacy/ScatterChart/Scatter.js +19 -3
- package/legacy/ScatterChart/ScatterChart.js +21 -10
- package/legacy/ScatterChart/ScatterPlot.js +10 -2
- package/legacy/SparkLineChart/SparkLineChart.js +8 -5
- package/legacy/context/CartesianContextProvider.js +8 -6
- package/legacy/context/DrawingProvider.js +11 -2
- package/legacy/hooks/useDrawingArea.js +7 -3
- package/legacy/index.js +2 -1
- package/legacy/internals/geometry.js +1 -1
- package/legacy/internals/useAnimatedPath.js +32 -0
- package/legacy/internals/utils.js +7 -0
- 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 +33 -12
- package/modern/BarChart/BarElement.js +7 -3
- package/modern/BarChart/BarPlot.js +27 -15
- package/modern/BarChart/formatter.js +1 -1
- package/modern/ChartContainer/ChartContainer.js +6 -4
- package/modern/ChartsAxis/ChartsAxis.js +4 -4
- package/modern/ChartsLegend/ChartsLegend.js +2 -307
- package/modern/ChartsLegend/DefaultChartsLegend.js +286 -0
- package/modern/ChartsLegend/index.js +1 -0
- package/modern/ChartsOnAxisClickHandler/ChartsOnAxisClickHandler.js +75 -0
- package/modern/ChartsOnAxisClickHandler/index.js +1 -0
- package/modern/ChartsReferenceLine/ChartsReferenceLine.js +2 -2
- package/modern/ChartsReferenceLine/ChartsXReferenceLine.js +1 -1
- package/modern/ChartsReferenceLine/ChartsYReferenceLine.js +1 -1
- package/modern/ChartsTooltip/ChartsAxisTooltipContent.js +6 -5
- package/modern/ChartsTooltip/ChartsItemTooltipContent.js +2 -2
- package/modern/ChartsTooltip/DefaultChartsAxisTooltipContent.js +7 -5
- package/modern/ChartsTooltip/DefaultChartsItemTooltipContent.js +1 -1
- package/modern/ChartsTooltip/utils.js +12 -0
- package/modern/ChartsVoronoiHandler/ChartsVoronoiHandler.js +92 -44
- package/modern/ChartsXAxis/ChartsXAxis.js +13 -9
- package/modern/ChartsYAxis/ChartsYAxis.js +1 -1
- package/modern/LineChart/AnimatedArea.js +103 -0
- package/modern/LineChart/AnimatedLine.js +105 -0
- package/modern/LineChart/AreaElement.js +16 -33
- package/modern/LineChart/AreaPlot.js +91 -58
- package/modern/LineChart/LineChart.js +45 -14
- package/modern/LineChart/LineElement.js +16 -35
- package/modern/LineChart/LineHighlightElement.js +5 -3
- package/modern/LineChart/LinePlot.js +89 -56
- package/modern/LineChart/MarkElement.js +27 -13
- package/modern/LineChart/MarkPlot.js +80 -51
- package/modern/LineChart/formatter.js +1 -1
- package/modern/LineChart/index.js +2 -0
- package/modern/PieChart/PieArc.js +1 -0
- package/modern/PieChart/PieArcLabel.js +1 -0
- package/modern/PieChart/PieArcLabelPlot.js +2 -2
- package/modern/PieChart/PieArcPlot.js +7 -7
- package/modern/PieChart/PieChart.js +14 -12
- package/modern/PieChart/PiePlot.js +4 -4
- package/modern/ResponsiveChartContainer/ResponsiveChartContainer.js +6 -4
- package/modern/ScatterChart/Scatter.js +17 -3
- package/modern/ScatterChart/ScatterChart.js +21 -10
- package/modern/ScatterChart/ScatterPlot.js +10 -2
- package/modern/SparkLineChart/SparkLineChart.js +7 -4
- package/modern/context/CartesianContextProvider.js +8 -6
- package/modern/context/DrawingProvider.js +9 -2
- package/modern/hooks/useDrawingArea.js +7 -3
- package/modern/index.js +2 -1
- package/modern/internals/geometry.js +1 -1
- package/modern/internals/useAnimatedPath.js +29 -0
- package/modern/internals/utils.js +7 -0
- package/package.json +6 -5
package/ChartsLegend/index.d.ts
CHANGED
package/ChartsLegend/index.js
CHANGED
|
@@ -14,6 +14,17 @@ Object.keys(_ChartsLegend).forEach(function (key) {
|
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
|
+
var _DefaultChartsLegend = require("./DefaultChartsLegend");
|
|
18
|
+
Object.keys(_DefaultChartsLegend).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _DefaultChartsLegend[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _DefaultChartsLegend[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
17
28
|
var _chartsLegendClasses = require("./chartsLegendClasses");
|
|
18
29
|
Object.keys(_chartsLegendClasses).forEach(function (key) {
|
|
19
30
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
type AxisData = {
|
|
3
|
+
dataIndex: number;
|
|
4
|
+
axisValue?: number | Date | string;
|
|
5
|
+
seriesValues: Record<string, number | null | undefined>;
|
|
6
|
+
};
|
|
7
|
+
export interface ChartsOnAxisClickHandlerProps {
|
|
8
|
+
/**
|
|
9
|
+
* The function called for onClick events.
|
|
10
|
+
* The second argument contains information about all line/bar elements at the current mouse position.
|
|
11
|
+
* @param {MouseEvent} event The mouse event recorded on the `<svg/>` element.
|
|
12
|
+
* @param {null | AxisData} data The data about the clicked axis and items associated with it.
|
|
13
|
+
*/
|
|
14
|
+
onAxisClick?: (event: MouseEvent, data: null | AxisData) => void;
|
|
15
|
+
}
|
|
16
|
+
declare function ChartsOnAxisClickHandler(props: ChartsOnAxisClickHandlerProps): React.JSX.Element;
|
|
17
|
+
declare namespace ChartsOnAxisClickHandler {
|
|
18
|
+
var propTypes: any;
|
|
19
|
+
}
|
|
20
|
+
export { ChartsOnAxisClickHandler };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.ChartsOnAxisClickHandler = ChartsOnAxisClickHandler;
|
|
8
|
+
var React = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
|
+
var _DrawingProvider = require("../context/DrawingProvider");
|
|
11
|
+
var _InteractionProvider = require("../context/InteractionProvider");
|
|
12
|
+
var _CartesianContextProvider = require("../context/CartesianContextProvider");
|
|
13
|
+
var _SeriesContextProvider = require("../context/SeriesContextProvider");
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
function ChartsOnAxisClickHandler(props) {
|
|
18
|
+
const {
|
|
19
|
+
onAxisClick
|
|
20
|
+
} = props;
|
|
21
|
+
const svgRef = React.useContext(_DrawingProvider.SVGContext);
|
|
22
|
+
const series = React.useContext(_SeriesContextProvider.SeriesContext);
|
|
23
|
+
const {
|
|
24
|
+
axis
|
|
25
|
+
} = React.useContext(_InteractionProvider.InteractionContext);
|
|
26
|
+
const {
|
|
27
|
+
xAxisIds,
|
|
28
|
+
xAxis,
|
|
29
|
+
yAxisIds,
|
|
30
|
+
yAxis
|
|
31
|
+
} = React.useContext(_CartesianContextProvider.CartesianContext);
|
|
32
|
+
React.useEffect(() => {
|
|
33
|
+
const element = svgRef.current;
|
|
34
|
+
if (element === null || !onAxisClick) {
|
|
35
|
+
return () => {};
|
|
36
|
+
}
|
|
37
|
+
const handleMouseClick = event => {
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
const isXaxis = (axis.x && axis.x.index) !== undefined;
|
|
40
|
+
const USED_AXIS_ID = isXaxis ? xAxisIds[0] : yAxisIds[0];
|
|
41
|
+
const dataIndex = isXaxis ? axis.x && axis.x.index : axis.y && axis.y.index;
|
|
42
|
+
if (dataIndex == null) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const seriesValues = {};
|
|
46
|
+
Object.keys(series).filter(seriesType => ['bar', 'line'].includes(seriesType)).forEach(seriesType => {
|
|
47
|
+
series[seriesType]?.seriesOrder.forEach(seriesId => {
|
|
48
|
+
const seriesItem = series[seriesType].series[seriesId];
|
|
49
|
+
const axisKey = isXaxis ? seriesItem.xAxisKey : seriesItem.yAxisKey;
|
|
50
|
+
if (axisKey === undefined || axisKey === USED_AXIS_ID) {
|
|
51
|
+
seriesValues[seriesId] = seriesItem.data[dataIndex];
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
const axisValue = (isXaxis ? xAxis : yAxis)[USED_AXIS_ID].data?.[dataIndex];
|
|
56
|
+
onAxisClick(event, {
|
|
57
|
+
dataIndex,
|
|
58
|
+
axisValue,
|
|
59
|
+
seriesValues
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
element.addEventListener('click', handleMouseClick);
|
|
63
|
+
return () => {
|
|
64
|
+
element.removeEventListener('click', handleMouseClick);
|
|
65
|
+
};
|
|
66
|
+
}, [axis.x, axis.y, onAxisClick, series, svgRef, xAxis, xAxisIds, yAxis, yAxisIds]);
|
|
67
|
+
|
|
68
|
+
// eslint-disable-next-line react/jsx-no-useless-fragment
|
|
69
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(React.Fragment, {});
|
|
70
|
+
}
|
|
71
|
+
process.env.NODE_ENV !== "production" ? ChartsOnAxisClickHandler.propTypes = {
|
|
72
|
+
// ----------------------------- Warning --------------------------------
|
|
73
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
74
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
75
|
+
// ----------------------------------------------------------------------
|
|
76
|
+
/**
|
|
77
|
+
* The function called for onClick events.
|
|
78
|
+
* The second argument contains information about all line/bar elements at the current mouse position.
|
|
79
|
+
* @param {MouseEvent} event The mouse event recorded on the `<svg/>` element.
|
|
80
|
+
* @param {null | AxisData} data The data about the clicked axis and items associated with it.
|
|
81
|
+
*/
|
|
82
|
+
onAxisClick: _propTypes.default.func
|
|
83
|
+
} : void 0;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ChartsOnAxisClickHandler';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _ChartsOnAxisClickHandler = require("./ChartsOnAxisClickHandler");
|
|
7
|
+
Object.keys(_ChartsOnAxisClickHandler).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _ChartsOnAxisClickHandler[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _ChartsOnAxisClickHandler[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -19,7 +19,7 @@ function ChartsReferenceLine(props) {
|
|
|
19
19
|
y
|
|
20
20
|
} = props;
|
|
21
21
|
if (x !== undefined && y !== undefined) {
|
|
22
|
-
throw new Error('MUI X Charts: The ChartsReferenceLine
|
|
22
|
+
throw new Error('MUI X Charts: The ChartsReferenceLine cannot have both `x` and `y` props set.');
|
|
23
23
|
}
|
|
24
24
|
if (x === undefined && y === undefined) {
|
|
25
25
|
throw new Error('MUI X Charts: The ChartsReferenceLine should have a value in `x` or `y` prop.');
|
|
@@ -38,7 +38,7 @@ process.env.NODE_ENV !== "production" ? ChartsReferenceLine.propTypes = {
|
|
|
38
38
|
* The id of the axis used for the reference value.
|
|
39
39
|
* @default The `id` of the first defined axis.
|
|
40
40
|
*/
|
|
41
|
-
axisId: _propTypes.default.string,
|
|
41
|
+
axisId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
|
|
42
42
|
/**
|
|
43
43
|
* Override or extend the styles applied to the component.
|
|
44
44
|
*/
|
|
@@ -78,7 +78,7 @@ function ChartsXReferenceLine(props) {
|
|
|
78
78
|
if (process.env.NODE_ENV !== 'production') {
|
|
79
79
|
if (!warnedOnce) {
|
|
80
80
|
warnedOnce = true;
|
|
81
|
-
console.error(`MUI X: the value ${x} does not exist in the data of x axis with id ${axisId}.`);
|
|
81
|
+
console.error(`MUI X Charts: the value ${x} does not exist in the data of x axis with id ${axisId}.`);
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
return null;
|
|
@@ -78,7 +78,7 @@ function ChartsYReferenceLine(props) {
|
|
|
78
78
|
if (process.env.NODE_ENV !== 'production') {
|
|
79
79
|
if (!warnedOnce) {
|
|
80
80
|
warnedOnce = true;
|
|
81
|
-
console.error(`MUI X: the value ${y} does not exist in the data of y axis with id ${axisId}.`);
|
|
81
|
+
console.error(`MUI X Charts: the value ${y} does not exist in the data of y axis with id ${axisId}.`);
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
return null;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { ChartsReferenceLineClasses } from './chartsReferenceLineClasses';
|
|
3
3
|
import { ChartsTextStyle } from '../ChartsText';
|
|
4
|
+
import { AxisId } from '../models/axis';
|
|
4
5
|
export type CommonChartsReferenceLineProps = {
|
|
5
6
|
/**
|
|
6
7
|
* The alignment if the label is in the chart drawing area.
|
|
@@ -24,7 +25,7 @@ export type CommonChartsReferenceLineProps = {
|
|
|
24
25
|
* The id of the axis used for the reference value.
|
|
25
26
|
* @default The `id` of the first defined axis.
|
|
26
27
|
*/
|
|
27
|
-
axisId?:
|
|
28
|
+
axisId?: AxisId;
|
|
28
29
|
/**
|
|
29
30
|
* The style applied to the label.
|
|
30
31
|
*/
|
|
@@ -12,6 +12,7 @@ var _utils = require("@mui/base/utils");
|
|
|
12
12
|
var _SeriesContextProvider = require("../context/SeriesContextProvider");
|
|
13
13
|
var _CartesianContextProvider = require("../context/CartesianContextProvider");
|
|
14
14
|
var _DefaultChartsAxisTooltipContent = require("./DefaultChartsAxisTooltipContent");
|
|
15
|
+
var _utils2 = require("./utils");
|
|
15
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
17
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
17
18
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -36,7 +37,7 @@ function ChartsAxisTooltipContent(props) {
|
|
|
36
37
|
const USED_AXIS_ID = isXaxis ? xAxisIds[0] : yAxisIds[0];
|
|
37
38
|
const relevantSeries = React.useMemo(() => {
|
|
38
39
|
const rep = [];
|
|
39
|
-
Object.keys(series).filter(
|
|
40
|
+
Object.keys(series).filter(_utils2.isCartesianSeriesType).forEach(seriesType => {
|
|
40
41
|
series[seriesType].seriesOrder.forEach(seriesId => {
|
|
41
42
|
const item = series[seriesType].series[seriesId];
|
|
42
43
|
const axisKey = isXaxis ? item.xAxisKey : item.yAxisKey;
|
|
@@ -75,11 +76,11 @@ process.env.NODE_ENV !== "production" ? ChartsAxisTooltipContent.propTypes = {
|
|
|
75
76
|
axisData: _propTypes.default.shape({
|
|
76
77
|
x: _propTypes.default.shape({
|
|
77
78
|
index: _propTypes.default.number,
|
|
78
|
-
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired
|
|
79
|
+
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired
|
|
79
80
|
}),
|
|
80
81
|
y: _propTypes.default.shape({
|
|
81
82
|
index: _propTypes.default.number,
|
|
82
|
-
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired
|
|
83
|
+
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired
|
|
83
84
|
})
|
|
84
85
|
}).isRequired,
|
|
85
86
|
classes: _propTypes.default.object.isRequired,
|
|
@@ -89,11 +90,11 @@ process.env.NODE_ENV !== "production" ? ChartsAxisTooltipContent.propTypes = {
|
|
|
89
90
|
axisData: _propTypes.default.shape({
|
|
90
91
|
x: _propTypes.default.shape({
|
|
91
92
|
index: _propTypes.default.number,
|
|
92
|
-
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired
|
|
93
|
+
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired
|
|
93
94
|
}),
|
|
94
95
|
y: _propTypes.default.shape({
|
|
95
96
|
index: _propTypes.default.number,
|
|
96
|
-
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired
|
|
97
|
+
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired
|
|
97
98
|
})
|
|
98
99
|
}),
|
|
99
100
|
axisValue: _propTypes.default.any,
|
|
@@ -48,7 +48,7 @@ process.env.NODE_ENV !== "production" ? ChartsItemTooltipContent.propTypes = {
|
|
|
48
48
|
classes: _propTypes.default.object,
|
|
49
49
|
itemData: _propTypes.default.shape({
|
|
50
50
|
dataIndex: _propTypes.default.number,
|
|
51
|
-
seriesId: _propTypes.default.string.isRequired,
|
|
51
|
+
seriesId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
|
|
52
52
|
type: _propTypes.default.oneOf(['bar', 'line', 'pie', 'scatter']).isRequired
|
|
53
53
|
}),
|
|
54
54
|
series: _propTypes.default.object,
|
|
@@ -56,7 +56,7 @@ process.env.NODE_ENV !== "production" ? ChartsItemTooltipContent.propTypes = {
|
|
|
56
56
|
}),
|
|
57
57
|
itemData: _propTypes.default.shape({
|
|
58
58
|
dataIndex: _propTypes.default.number,
|
|
59
|
-
seriesId: _propTypes.default.string.isRequired,
|
|
59
|
+
seriesId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
|
|
60
60
|
type: _propTypes.default.oneOf(['bar', 'line', 'pie', 'scatter']).isRequired
|
|
61
61
|
}).isRequired,
|
|
62
62
|
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object])
|
|
@@ -10,6 +10,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
10
10
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
11
11
|
var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
|
|
12
12
|
var _ChartsTooltipTable = require("./ChartsTooltipTable");
|
|
13
|
+
var _utils = require("./utils");
|
|
13
14
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
15
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
16
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -25,7 +26,7 @@ function DefaultChartsAxisTooltipContent(props) {
|
|
|
25
26
|
if (dataIndex == null) {
|
|
26
27
|
return null;
|
|
27
28
|
}
|
|
28
|
-
const axisFormatter = axis.valueFormatter ?? (v => v.toLocaleString());
|
|
29
|
+
const axisFormatter = axis.valueFormatter ?? (v => axis.scaleType === 'utc' ? (0, _utils.utcFormatter)(v) : v.toLocaleString());
|
|
29
30
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsTooltipTable.ChartsTooltipPaper, {
|
|
30
31
|
sx: sx,
|
|
31
32
|
className: classes.root,
|
|
@@ -41,14 +42,15 @@ function DefaultChartsAxisTooltipContent(props) {
|
|
|
41
42
|
})
|
|
42
43
|
})
|
|
43
44
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("tbody", {
|
|
44
|
-
children: series.map(({
|
|
45
|
+
children: series.filter(_utils.isCartesianSeries).map(({
|
|
45
46
|
color,
|
|
46
47
|
id,
|
|
47
48
|
label,
|
|
48
49
|
valueFormatter,
|
|
49
50
|
data
|
|
50
51
|
}) => {
|
|
51
|
-
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
const formattedValue = valueFormatter(data[dataIndex] ?? null);
|
|
52
54
|
if (formattedValue == null) {
|
|
53
55
|
return null;
|
|
54
56
|
}
|
|
@@ -95,11 +97,11 @@ process.env.NODE_ENV !== "production" ? DefaultChartsAxisTooltipContent.propType
|
|
|
95
97
|
axisData: _propTypes.default.shape({
|
|
96
98
|
x: _propTypes.default.shape({
|
|
97
99
|
index: _propTypes.default.number,
|
|
98
|
-
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired
|
|
100
|
+
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired
|
|
99
101
|
}),
|
|
100
102
|
y: _propTypes.default.shape({
|
|
101
103
|
index: _propTypes.default.number,
|
|
102
|
-
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number]).isRequired
|
|
104
|
+
value: _propTypes.default.oneOfType([_propTypes.default.instanceOf(Date), _propTypes.default.number, _propTypes.default.string]).isRequired
|
|
103
105
|
})
|
|
104
106
|
}).isRequired,
|
|
105
107
|
/**
|
|
@@ -76,7 +76,7 @@ process.env.NODE_ENV !== "production" ? DefaultChartsItemTooltipContent.propType
|
|
|
76
76
|
*/
|
|
77
77
|
itemData: _propTypes.default.shape({
|
|
78
78
|
dataIndex: _propTypes.default.number,
|
|
79
|
-
seriesId: _propTypes.default.string.isRequired,
|
|
79
|
+
seriesId: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
|
|
80
80
|
type: _propTypes.default.oneOf(['bar', 'line', 'pie', 'scatter']).isRequired
|
|
81
81
|
}).isRequired,
|
|
82
82
|
/**
|
package/ChartsTooltip/utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AxisInteractionData, ItemInteractionData } from '../context/InteractionProvider';
|
|
2
|
-
import { ChartSeriesType } from '../models/seriesType/config';
|
|
2
|
+
import { CartesianChartSeriesType, ChartSeriesDefaultized, ChartSeriesType } from '../models/seriesType/config';
|
|
3
3
|
export declare function generateVirtualElement(mousePosition: {
|
|
4
4
|
x: number;
|
|
5
5
|
y: number;
|
|
@@ -22,3 +22,6 @@ export declare function useMouseTracker(): {
|
|
|
22
22
|
} | null;
|
|
23
23
|
export type TriggerOptions = 'item' | 'axis' | 'none';
|
|
24
24
|
export declare function getTooltipHasData(trigger: TriggerOptions, displayedData: null | AxisInteractionData | ItemInteractionData<ChartSeriesType>): boolean;
|
|
25
|
+
export declare function isCartesianSeriesType(seriesType: string): seriesType is CartesianChartSeriesType;
|
|
26
|
+
export declare function isCartesianSeries(series: ChartSeriesDefaultized<ChartSeriesType>): series is ChartSeriesDefaultized<CartesianChartSeriesType>;
|
|
27
|
+
export declare function utcFormatter(v: string | number | Date): string;
|
package/ChartsTooltip/utils.js
CHANGED
|
@@ -5,7 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.generateVirtualElement = generateVirtualElement;
|
|
7
7
|
exports.getTooltipHasData = getTooltipHasData;
|
|
8
|
+
exports.isCartesianSeries = isCartesianSeries;
|
|
9
|
+
exports.isCartesianSeriesType = isCartesianSeriesType;
|
|
8
10
|
exports.useMouseTracker = useMouseTracker;
|
|
11
|
+
exports.utcFormatter = utcFormatter;
|
|
9
12
|
var React = _interopRequireWildcard(require("react"));
|
|
10
13
|
var _DrawingProvider = require("../context/DrawingProvider");
|
|
11
14
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
@@ -88,4 +91,16 @@ function getTooltipHasData(trigger, displayedData) {
|
|
|
88
91
|
const hasAxisXData = displayedData.x !== null;
|
|
89
92
|
const hasAxisYData = displayedData.y !== null;
|
|
90
93
|
return hasAxisXData || hasAxisYData;
|
|
94
|
+
}
|
|
95
|
+
function isCartesianSeriesType(seriesType) {
|
|
96
|
+
return ['bar', 'line', 'scatter'].includes(seriesType);
|
|
97
|
+
}
|
|
98
|
+
function isCartesianSeries(series) {
|
|
99
|
+
return isCartesianSeriesType(series.type);
|
|
100
|
+
}
|
|
101
|
+
function utcFormatter(v) {
|
|
102
|
+
if (v instanceof Date) {
|
|
103
|
+
return v.toUTCString();
|
|
104
|
+
}
|
|
105
|
+
return v.toLocaleString();
|
|
91
106
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { ScatterItemIdentifier } from '../models';
|
|
2
3
|
export type ChartsVoronoiHandlerProps = {
|
|
3
4
|
/**
|
|
4
5
|
* Defines the maximal distance between a scatter point and the pointer that triggers the interaction.
|
|
@@ -6,6 +7,12 @@ export type ChartsVoronoiHandlerProps = {
|
|
|
6
7
|
* @default undefined
|
|
7
8
|
*/
|
|
8
9
|
voronoiMaxRadius?: number | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Callback fired when clicking on a scatter item.
|
|
12
|
+
* @param {MouseEvent} event Mouse event catched at the svg level
|
|
13
|
+
* @param {ScatterItemIdentifier} scatterItemIdentifier Identify whihc item got clicked
|
|
14
|
+
*/
|
|
15
|
+
onItemClick?: (event: MouseEvent, scatterItemIdentifier: ScatterItemIdentifier) => void;
|
|
9
16
|
};
|
|
10
17
|
declare function ChartsVoronoiHandler(props: ChartsVoronoiHandlerProps): React.JSX.Element;
|
|
11
18
|
declare namespace ChartsVoronoiHandler {
|
|
@@ -20,7 +20,8 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
|
|
|
20
20
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
21
21
|
function ChartsVoronoiHandler(props) {
|
|
22
22
|
const {
|
|
23
|
-
voronoiMaxRadius
|
|
23
|
+
voronoiMaxRadius,
|
|
24
|
+
onItemClick
|
|
24
25
|
} = props;
|
|
25
26
|
const svgRef = React.useContext(_DrawingProvider.SVGContext);
|
|
26
27
|
const {
|
|
@@ -58,6 +59,8 @@ function ChartsVoronoiHandler(props) {
|
|
|
58
59
|
};
|
|
59
60
|
}, [dispatch]);
|
|
60
61
|
(0, _useEnhancedEffect.default)(() => {
|
|
62
|
+
// This effect generate and store the Delaunay object that's used to map coordinate to closest point.
|
|
63
|
+
|
|
61
64
|
if (seriesOrder === undefined || series === undefined) {
|
|
62
65
|
// If there is no scatter chart series
|
|
63
66
|
return;
|
|
@@ -91,80 +94,125 @@ function ChartsVoronoiHandler(props) {
|
|
|
91
94
|
if (element === null) {
|
|
92
95
|
return undefined;
|
|
93
96
|
}
|
|
94
|
-
const handleMouseOut = () => {
|
|
95
|
-
dispatch({
|
|
96
|
-
type: 'exitChart'
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
97
|
|
|
100
98
|
// TODO: A perf optimisation of voronoi could be to use the last point as the intial point for the next search.
|
|
101
|
-
|
|
99
|
+
function getClosestPoint(event) {
|
|
102
100
|
// Get mouse coordinate in global SVG space
|
|
103
101
|
const svgPoint = (0, _utils.getSVGPoint)(svgRef.current, event);
|
|
104
102
|
const outsideX = svgPoint.x < left || svgPoint.x > left + width;
|
|
105
103
|
const outsideY = svgPoint.y < top || svgPoint.y > top + height;
|
|
106
104
|
if (outsideX || outsideY) {
|
|
107
|
-
|
|
108
|
-
type: 'exitChart'
|
|
109
|
-
});
|
|
110
|
-
return;
|
|
105
|
+
return 'outside-chart';
|
|
111
106
|
}
|
|
112
107
|
if (!voronoiRef.current.delauney) {
|
|
113
|
-
return;
|
|
108
|
+
return 'no-point-found';
|
|
114
109
|
}
|
|
115
110
|
const closestPointIndex = voronoiRef.current.delauney?.find(svgPoint.x, svgPoint.y);
|
|
116
|
-
if (closestPointIndex
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return
|
|
122
|
-
});
|
|
123
|
-
if (seriesId === undefined) {
|
|
124
|
-
return;
|
|
111
|
+
if (closestPointIndex === undefined) {
|
|
112
|
+
return 'no-point-found';
|
|
113
|
+
}
|
|
114
|
+
const seriesId = Object.keys(voronoiRef.current).find(id => {
|
|
115
|
+
if (id === 'delauney') {
|
|
116
|
+
return false;
|
|
125
117
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
118
|
+
return 2 * closestPointIndex >= voronoiRef.current[id].startIndex && 2 * closestPointIndex < voronoiRef.current[id].endIndex;
|
|
119
|
+
});
|
|
120
|
+
if (seriesId === undefined) {
|
|
121
|
+
return 'no-point-found';
|
|
122
|
+
}
|
|
123
|
+
const dataIndex = (2 * closestPointIndex - voronoiRef.current[seriesId].startIndex) / 2;
|
|
124
|
+
if (voronoiMaxRadius !== undefined) {
|
|
125
|
+
const pointX = voronoiRef.current.delauney.points[2 * closestPointIndex];
|
|
126
|
+
const pointY = voronoiRef.current.delauney.points[2 * closestPointIndex + 1];
|
|
127
|
+
const dist2 = (pointX - svgPoint.x) ** 2 + (pointY - svgPoint.y) ** 2;
|
|
128
|
+
if (dist2 > voronoiMaxRadius ** 2) {
|
|
129
|
+
// The closest point is too far to be considered.
|
|
130
|
+
return 'outside-voronoi-max-radius';
|
|
143
131
|
}
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
seriesId,
|
|
135
|
+
dataIndex
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
const handleMouseOut = () => {
|
|
139
|
+
dispatch({
|
|
140
|
+
type: 'exitChart'
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
const handleMouseMove = event => {
|
|
144
|
+
const closestPoint = getClosestPoint(event);
|
|
145
|
+
if (closestPoint === 'outside-chart') {
|
|
146
|
+
dispatch({
|
|
147
|
+
type: 'exitChart'
|
|
148
|
+
});
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (closestPoint === 'outside-voronoi-max-radius' || closestPoint === 'no-point-found') {
|
|
144
152
|
dispatch({
|
|
145
|
-
type: '
|
|
153
|
+
type: 'leaveItem',
|
|
146
154
|
data: {
|
|
147
|
-
type: 'scatter'
|
|
148
|
-
seriesId,
|
|
149
|
-
dataIndex
|
|
155
|
+
type: 'scatter'
|
|
150
156
|
}
|
|
151
157
|
});
|
|
158
|
+
return;
|
|
152
159
|
}
|
|
160
|
+
const {
|
|
161
|
+
seriesId,
|
|
162
|
+
dataIndex
|
|
163
|
+
} = closestPoint;
|
|
164
|
+
dispatch({
|
|
165
|
+
type: 'enterItem',
|
|
166
|
+
data: {
|
|
167
|
+
type: 'scatter',
|
|
168
|
+
seriesId,
|
|
169
|
+
dataIndex
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
const handleMouseClick = event => {
|
|
174
|
+
if (!onItemClick) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const closestPoint = getClosestPoint(event);
|
|
178
|
+
if (typeof closestPoint === 'string') {
|
|
179
|
+
// No point fond for any reason
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const {
|
|
183
|
+
seriesId,
|
|
184
|
+
dataIndex
|
|
185
|
+
} = closestPoint;
|
|
186
|
+
onItemClick(event, {
|
|
187
|
+
type: 'scatter',
|
|
188
|
+
seriesId,
|
|
189
|
+
dataIndex
|
|
190
|
+
});
|
|
153
191
|
};
|
|
154
192
|
element.addEventListener('mouseout', handleMouseOut);
|
|
155
193
|
element.addEventListener('mousemove', handleMouseMove);
|
|
194
|
+
element.addEventListener('click', handleMouseClick);
|
|
156
195
|
return () => {
|
|
157
196
|
element.removeEventListener('mouseout', handleMouseOut);
|
|
158
197
|
element.removeEventListener('mousemove', handleMouseMove);
|
|
198
|
+
element.removeEventListener('click', handleMouseClick);
|
|
159
199
|
};
|
|
160
|
-
}, [svgRef, dispatch, left, width, top, height, yAxis, xAxis, voronoiMaxRadius]);
|
|
161
|
-
|
|
200
|
+
}, [svgRef, dispatch, left, width, top, height, yAxis, xAxis, voronoiMaxRadius, onItemClick]);
|
|
201
|
+
|
|
202
|
+
// eslint-disable-next-line react/jsx-no-useless-fragment
|
|
203
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(React.Fragment, {});
|
|
162
204
|
}
|
|
163
205
|
process.env.NODE_ENV !== "production" ? ChartsVoronoiHandler.propTypes = {
|
|
164
206
|
// ----------------------------- Warning --------------------------------
|
|
165
207
|
// | These PropTypes are generated from the TypeScript type definitions |
|
|
166
208
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
167
209
|
// ----------------------------------------------------------------------
|
|
210
|
+
/**
|
|
211
|
+
* Callback fired when clicking on a scatter item.
|
|
212
|
+
* @param {MouseEvent} event Mouse event catched at the svg level
|
|
213
|
+
* @param {ScatterItemIdentifier} scatterItemIdentifier Identify whihc item got clicked
|
|
214
|
+
*/
|
|
215
|
+
onItemClick: _propTypes.default.func,
|
|
168
216
|
/**
|
|
169
217
|
* Defines the maximal distance between a scatter point and the pointer that triggers the interaction.
|
|
170
218
|
* If `undefined`, the radius is assumed to be infinite.
|