@mui/x-charts-pro 7.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/BarChartPro/BarChartPro.d.ts +18 -0
- package/BarChartPro/BarChartPro.js +417 -0
- package/BarChartPro/index.d.ts +1 -0
- package/BarChartPro/index.js +1 -0
- package/BarChartPro/package.json +6 -0
- package/CHANGELOG.md +4404 -0
- package/ChartContainerPro/ChartContainerPro.d.ts +7 -0
- package/ChartContainerPro/ChartContainerPro.js +282 -0
- package/ChartContainerPro/index.d.ts +1 -0
- package/ChartContainerPro/index.js +1 -0
- package/ChartContainerPro/package.json +6 -0
- package/ChartContainerPro/useChartContainerProProps.d.ts +15 -0
- package/ChartContainerPro/useChartContainerProProps.js +39 -0
- package/Heatmap/DefaultHeatmapTooltip.d.ts +7 -0
- package/Heatmap/DefaultHeatmapTooltip.js +97 -0
- package/Heatmap/Heatmap.d.ts +49 -0
- package/Heatmap/Heatmap.js +387 -0
- package/Heatmap/HeatmapItem.d.ts +49 -0
- package/Heatmap/HeatmapItem.js +106 -0
- package/Heatmap/HeatmapPlot.d.ts +9 -0
- package/Heatmap/HeatmapPlot.js +57 -0
- package/Heatmap/extremums.d.ts +2 -0
- package/Heatmap/extremums.js +8 -0
- package/Heatmap/formatter.d.ts +3 -0
- package/Heatmap/formatter.js +20 -0
- package/Heatmap/getColor.d.ts +3 -0
- package/Heatmap/getColor.js +15 -0
- package/Heatmap/heatmapClasses.d.ts +11 -0
- package/Heatmap/heatmapClasses.js +13 -0
- package/Heatmap/index.d.ts +4 -0
- package/Heatmap/index.js +4 -0
- package/Heatmap/package.json +6 -0
- package/Heatmap/plugin.d.ts +2 -0
- package/Heatmap/plugin.js +10 -0
- package/LICENSE +11 -0
- package/LineChartPro/LineChartPro.d.ts +17 -0
- package/LineChartPro/LineChartPro.js +473 -0
- package/LineChartPro/index.d.ts +1 -0
- package/LineChartPro/index.js +1 -0
- package/LineChartPro/package.json +6 -0
- package/README.md +26 -0
- package/ResponsiveChartContainerPro/ResponsiveChartContainerPro.d.ts +7 -0
- package/ResponsiveChartContainerPro/ResponsiveChartContainerPro.js +259 -0
- package/ResponsiveChartContainerPro/index.d.ts +1 -0
- package/ResponsiveChartContainerPro/index.js +1 -0
- package/ResponsiveChartContainerPro/package.json +6 -0
- package/ResponsiveChartContainerPro/useResponsiveChartContainerProProps.d.ts +41 -0
- package/ResponsiveChartContainerPro/useResponsiveChartContainerProProps.js +25 -0
- package/ScatterChartPro/ScatterChartPro.d.ts +17 -0
- package/ScatterChartPro/ScatterChartPro.js +388 -0
- package/ScatterChartPro/index.d.ts +1 -0
- package/ScatterChartPro/index.js +1 -0
- package/ScatterChartPro/package.json +6 -0
- package/context/CartesianProviderPro/CartesianProviderPro.d.ts +6 -0
- package/context/CartesianProviderPro/CartesianProviderPro.js +54 -0
- package/context/CartesianProviderPro/index.d.ts +1 -0
- package/context/CartesianProviderPro/index.js +1 -0
- package/context/ZoomProvider/Zoom.types.d.ts +134 -0
- package/context/ZoomProvider/Zoom.types.js +1 -0
- package/context/ZoomProvider/ZoomContext.d.ts +4 -0
- package/context/ZoomProvider/ZoomContext.js +16 -0
- package/context/ZoomProvider/ZoomProvider.d.ts +3 -0
- package/context/ZoomProvider/ZoomProvider.js +53 -0
- package/context/ZoomProvider/ZoomSetup.d.ts +9 -0
- package/context/ZoomProvider/ZoomSetup.js +16 -0
- package/context/ZoomProvider/defaultizeZoom.d.ts +2 -0
- package/context/ZoomProvider/defaultizeZoom.js +31 -0
- package/context/ZoomProvider/index.d.ts +3 -0
- package/context/ZoomProvider/index.js +3 -0
- package/context/ZoomProvider/initializeZoomData.d.ts +6 -0
- package/context/ZoomProvider/initializeZoomData.js +13 -0
- package/context/ZoomProvider/useSetupPan.d.ts +1 -0
- package/context/ZoomProvider/useSetupPan.js +104 -0
- package/context/ZoomProvider/useSetupZoom.d.ts +1 -0
- package/context/ZoomProvider/useSetupZoom.js +272 -0
- package/context/ZoomProvider/useZoom.d.ts +7 -0
- package/context/ZoomProvider/useZoom.js +17 -0
- package/context/index.d.ts +3 -0
- package/context/index.js +5 -0
- package/context/package.json +6 -0
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +1 -0
- package/hooks/package.json +6 -0
- package/hooks/useSeries.d.ts +11 -0
- package/hooks/useSeries.js +14 -0
- package/index.d.ts +31 -0
- package/index.js +45 -0
- package/internals/utils/releaseInfo.d.ts +1 -0
- package/internals/utils/releaseInfo.js +13 -0
- package/models/index.d.ts +1 -0
- package/models/index.js +1 -0
- package/models/package.json +6 -0
- package/models/seriesType/heatmap.d.ts +28 -0
- package/models/seriesType/heatmap.js +1 -0
- package/models/seriesType/index.d.ts +1 -0
- package/models/seriesType/index.js +1 -0
- package/modern/BarChartPro/BarChartPro.js +417 -0
- package/modern/BarChartPro/index.js +1 -0
- package/modern/ChartContainerPro/ChartContainerPro.js +282 -0
- package/modern/ChartContainerPro/index.js +1 -0
- package/modern/ChartContainerPro/useChartContainerProProps.js +39 -0
- package/modern/Heatmap/DefaultHeatmapTooltip.js +97 -0
- package/modern/Heatmap/Heatmap.js +387 -0
- package/modern/Heatmap/HeatmapItem.js +106 -0
- package/modern/Heatmap/HeatmapPlot.js +57 -0
- package/modern/Heatmap/extremums.js +8 -0
- package/modern/Heatmap/formatter.js +20 -0
- package/modern/Heatmap/getColor.js +15 -0
- package/modern/Heatmap/heatmapClasses.js +13 -0
- package/modern/Heatmap/index.js +4 -0
- package/modern/Heatmap/plugin.js +10 -0
- package/modern/LineChartPro/LineChartPro.js +473 -0
- package/modern/LineChartPro/index.js +1 -0
- package/modern/ResponsiveChartContainerPro/ResponsiveChartContainerPro.js +259 -0
- package/modern/ResponsiveChartContainerPro/index.js +1 -0
- package/modern/ResponsiveChartContainerPro/useResponsiveChartContainerProProps.js +25 -0
- package/modern/ScatterChartPro/ScatterChartPro.js +388 -0
- package/modern/ScatterChartPro/index.js +1 -0
- package/modern/context/CartesianProviderPro/CartesianProviderPro.js +54 -0
- package/modern/context/CartesianProviderPro/index.js +1 -0
- package/modern/context/ZoomProvider/Zoom.types.js +1 -0
- package/modern/context/ZoomProvider/ZoomContext.js +16 -0
- package/modern/context/ZoomProvider/ZoomProvider.js +53 -0
- package/modern/context/ZoomProvider/ZoomSetup.js +16 -0
- package/modern/context/ZoomProvider/defaultizeZoom.js +31 -0
- package/modern/context/ZoomProvider/index.js +3 -0
- package/modern/context/ZoomProvider/initializeZoomData.js +13 -0
- package/modern/context/ZoomProvider/useSetupPan.js +104 -0
- package/modern/context/ZoomProvider/useSetupZoom.js +272 -0
- package/modern/context/ZoomProvider/useZoom.js +17 -0
- package/modern/context/index.js +5 -0
- package/modern/hooks/index.js +1 -0
- package/modern/hooks/useSeries.js +14 -0
- package/modern/index.js +45 -0
- package/modern/internals/utils/releaseInfo.js +13 -0
- package/modern/models/index.js +1 -0
- package/modern/models/seriesType/heatmap.js +1 -0
- package/modern/models/seriesType/index.js +1 -0
- package/modern/typeOverloads/index.js +1 -0
- package/modern/typeOverloads/modules.js +1 -0
- package/node/BarChartPro/BarChartPro.js +425 -0
- package/node/BarChartPro/index.js +16 -0
- package/node/ChartContainerPro/ChartContainerPro.js +290 -0
- package/node/ChartContainerPro/index.js +16 -0
- package/node/ChartContainerPro/useChartContainerProProps.js +47 -0
- package/node/Heatmap/DefaultHeatmapTooltip.js +105 -0
- package/node/Heatmap/Heatmap.js +395 -0
- package/node/Heatmap/HeatmapItem.js +114 -0
- package/node/Heatmap/HeatmapPlot.js +65 -0
- package/node/Heatmap/extremums.js +15 -0
- package/node/Heatmap/formatter.js +27 -0
- package/node/Heatmap/getColor.js +21 -0
- package/node/Heatmap/heatmapClasses.js +21 -0
- package/node/Heatmap/index.js +47 -0
- package/node/Heatmap/plugin.js +17 -0
- package/node/LineChartPro/LineChartPro.js +481 -0
- package/node/LineChartPro/index.js +16 -0
- package/node/ResponsiveChartContainerPro/ResponsiveChartContainerPro.js +267 -0
- package/node/ResponsiveChartContainerPro/index.js +16 -0
- package/node/ResponsiveChartContainerPro/useResponsiveChartContainerProProps.js +33 -0
- package/node/ScatterChartPro/ScatterChartPro.js +396 -0
- package/node/ScatterChartPro/index.js +16 -0
- package/node/context/CartesianProviderPro/CartesianProviderPro.js +61 -0
- package/node/context/CartesianProviderPro/index.js +16 -0
- package/node/context/ZoomProvider/Zoom.types.js +5 -0
- package/node/context/ZoomProvider/ZoomContext.js +24 -0
- package/node/context/ZoomProvider/ZoomProvider.js +62 -0
- package/node/context/ZoomProvider/ZoomSetup.js +20 -0
- package/node/context/ZoomProvider/defaultizeZoom.js +39 -0
- package/node/context/ZoomProvider/index.js +38 -0
- package/node/context/ZoomProvider/initializeZoomData.js +20 -0
- package/node/context/ZoomProvider/useSetupPan.js +114 -0
- package/node/context/ZoomProvider/useSetupZoom.js +281 -0
- package/node/context/ZoomProvider/useZoom.js +25 -0
- package/node/context/index.js +27 -0
- package/node/hooks/index.js +12 -0
- package/node/hooks/useSeries.js +21 -0
- package/node/index.js +354 -0
- package/node/internals/utils/releaseInfo.js +20 -0
- package/node/models/index.js +16 -0
- package/node/models/seriesType/heatmap.js +5 -0
- package/node/models/seriesType/index.js +16 -0
- package/node/typeOverloads/index.js +6 -0
- package/node/typeOverloads/modules.js +5 -0
- package/package.json +64 -0
- package/typeOverloads/index.d.ts +1 -0
- package/typeOverloads/index.js +1 -0
- package/typeOverloads/modules.d.ts +17 -0
- package/typeOverloads/modules.js +1 -0
- package/typeOverloads/package.json +6 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _ZoomContext = require("./ZoomContext");
|
|
7
|
+
Object.keys(_ZoomContext).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _ZoomContext[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _ZoomContext[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _ZoomProvider = require("./ZoomProvider");
|
|
18
|
+
Object.keys(_ZoomProvider).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _ZoomProvider[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _ZoomProvider[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
var _Zoom = require("./Zoom.types");
|
|
29
|
+
Object.keys(_Zoom).forEach(function (key) {
|
|
30
|
+
if (key === "default" || key === "__esModule") return;
|
|
31
|
+
if (key in exports && exports[key] === _Zoom[key]) return;
|
|
32
|
+
Object.defineProperty(exports, key, {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return _Zoom[key];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.initializeZoomData = void 0;
|
|
7
|
+
// This function is used to initialize the zoom data when it is not provided by the user.
|
|
8
|
+
// It is helpful to avoid the need to provide the possibly auto-generated id for each axis.
|
|
9
|
+
const initializeZoomData = options => {
|
|
10
|
+
return Object.values(options).map(({
|
|
11
|
+
axisId,
|
|
12
|
+
minStart: start,
|
|
13
|
+
maxEnd: end
|
|
14
|
+
}) => ({
|
|
15
|
+
axisId,
|
|
16
|
+
start,
|
|
17
|
+
end
|
|
18
|
+
}));
|
|
19
|
+
};
|
|
20
|
+
exports.initializeZoomData = initializeZoomData;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useSetupPan = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _hooks = require("@mui/x-charts/hooks");
|
|
11
|
+
var _internals = require("@mui/x-charts/internals");
|
|
12
|
+
var _useZoom = require("./useZoom");
|
|
13
|
+
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); }
|
|
14
|
+
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 && {}.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; }
|
|
15
|
+
const useSetupPan = () => {
|
|
16
|
+
const {
|
|
17
|
+
zoomData,
|
|
18
|
+
setZoomData,
|
|
19
|
+
setIsInteracting,
|
|
20
|
+
isPanEnabled,
|
|
21
|
+
options
|
|
22
|
+
} = (0, _useZoom.useZoom)();
|
|
23
|
+
const drawingArea = (0, _hooks.useDrawingArea)();
|
|
24
|
+
const svgRef = (0, _hooks.useSvgRef)();
|
|
25
|
+
const isDraggingRef = React.useRef(false);
|
|
26
|
+
const touchStartRef = React.useRef(null);
|
|
27
|
+
const eventCacheRef = React.useRef([]);
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
const element = svgRef.current;
|
|
30
|
+
if (element === null || !isPanEnabled) {
|
|
31
|
+
return () => {};
|
|
32
|
+
}
|
|
33
|
+
const handlePan = event => {
|
|
34
|
+
if (element === null || !isDraggingRef.current || eventCacheRef.current.length > 1) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (touchStartRef.current == null) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const point = (0, _internals.getSVGPoint)(element, event);
|
|
41
|
+
const movementX = point.x - touchStartRef.current.x;
|
|
42
|
+
const movementY = (point.y - touchStartRef.current.y) * -1;
|
|
43
|
+
const newZoomData = touchStartRef.current.zoomData.map(zoom => {
|
|
44
|
+
const option = options[zoom.axisId];
|
|
45
|
+
if (!option || !option.panning) {
|
|
46
|
+
return zoom;
|
|
47
|
+
}
|
|
48
|
+
const min = zoom.start;
|
|
49
|
+
const max = zoom.end;
|
|
50
|
+
const span = max - min;
|
|
51
|
+
const MIN_PERCENT = option.minStart;
|
|
52
|
+
const MAX_PERCENT = option.maxEnd;
|
|
53
|
+
const movement = option.axisDirection === 'x' ? movementX : movementY;
|
|
54
|
+
const dimension = option.axisDirection === 'x' ? drawingArea.width : drawingArea.height;
|
|
55
|
+
let newMinPercent = min - movement / dimension * span;
|
|
56
|
+
let newMaxPercent = max - movement / dimension * span;
|
|
57
|
+
if (newMinPercent < MIN_PERCENT) {
|
|
58
|
+
newMinPercent = MIN_PERCENT;
|
|
59
|
+
newMaxPercent = newMinPercent + span;
|
|
60
|
+
}
|
|
61
|
+
if (newMaxPercent > MAX_PERCENT) {
|
|
62
|
+
newMaxPercent = MAX_PERCENT;
|
|
63
|
+
newMinPercent = newMaxPercent - span;
|
|
64
|
+
}
|
|
65
|
+
if (newMinPercent < MIN_PERCENT || newMaxPercent > MAX_PERCENT || span < option.minSpan || span > option.maxSpan) {
|
|
66
|
+
return zoom;
|
|
67
|
+
}
|
|
68
|
+
return (0, _extends2.default)({}, zoom, {
|
|
69
|
+
start: newMinPercent,
|
|
70
|
+
end: newMaxPercent
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
setZoomData(newZoomData);
|
|
74
|
+
};
|
|
75
|
+
const handleDown = event => {
|
|
76
|
+
eventCacheRef.current.push(event);
|
|
77
|
+
const point = (0, _internals.getSVGPoint)(element, event);
|
|
78
|
+
if (!drawingArea.isPointInside(point)) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// If there is only one pointer, prevent selecting text
|
|
83
|
+
if (eventCacheRef.current.length === 1) {
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
}
|
|
86
|
+
isDraggingRef.current = true;
|
|
87
|
+
setIsInteracting(true);
|
|
88
|
+
touchStartRef.current = {
|
|
89
|
+
x: point.x,
|
|
90
|
+
y: point.y,
|
|
91
|
+
zoomData
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
const handleUp = event => {
|
|
95
|
+
eventCacheRef.current.splice(eventCacheRef.current.findIndex(e => e.pointerId === event.pointerId), 1);
|
|
96
|
+
setIsInteracting(false);
|
|
97
|
+
isDraggingRef.current = false;
|
|
98
|
+
touchStartRef.current = null;
|
|
99
|
+
};
|
|
100
|
+
element.addEventListener('pointerdown', handleDown);
|
|
101
|
+
document.addEventListener('pointermove', handlePan);
|
|
102
|
+
document.addEventListener('pointerup', handleUp);
|
|
103
|
+
document.addEventListener('pointercancel', handleUp);
|
|
104
|
+
document.addEventListener('pointerleave', handleUp);
|
|
105
|
+
return () => {
|
|
106
|
+
element.removeEventListener('pointerdown', handleDown);
|
|
107
|
+
document.removeEventListener('pointermove', handlePan);
|
|
108
|
+
document.removeEventListener('pointerup', handleUp);
|
|
109
|
+
document.removeEventListener('pointercancel', handleUp);
|
|
110
|
+
document.removeEventListener('pointerleave', handleUp);
|
|
111
|
+
};
|
|
112
|
+
}, [drawingArea, svgRef, isDraggingRef, setIsInteracting, zoomData, setZoomData, isPanEnabled, options]);
|
|
113
|
+
};
|
|
114
|
+
exports.useSetupPan = useSetupPan;
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSetupZoom = void 0;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _hooks = require("@mui/x-charts/hooks");
|
|
9
|
+
var _internals = require("@mui/x-charts/internals");
|
|
10
|
+
var _useZoom = require("./useZoom");
|
|
11
|
+
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); }
|
|
12
|
+
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 && {}.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; }
|
|
13
|
+
/**
|
|
14
|
+
* Helper to get the range (in percents of a reference range) corresponding to a given scale.
|
|
15
|
+
* @param centerRatio {number} The ratio of the point that should not move between the previous and next range.
|
|
16
|
+
* @param scaleRatio {number} The target scale ratio.
|
|
17
|
+
* @returns The range to display.
|
|
18
|
+
*/
|
|
19
|
+
const zoomAtPoint = (centerRatio, scaleRatio, currentZoomData, options) => {
|
|
20
|
+
const MIN_RANGE = options.minStart;
|
|
21
|
+
const MAX_RANGE = options.maxEnd;
|
|
22
|
+
const MIN_ALLOWED_SPAN = options.minSpan;
|
|
23
|
+
const minRange = currentZoomData.start;
|
|
24
|
+
const maxRange = currentZoomData.end;
|
|
25
|
+
const point = minRange + centerRatio * (maxRange - minRange);
|
|
26
|
+
let newMinRange = (minRange + point * (scaleRatio - 1)) / scaleRatio;
|
|
27
|
+
let newMaxRange = (maxRange + point * (scaleRatio - 1)) / scaleRatio;
|
|
28
|
+
let minSpillover = 0;
|
|
29
|
+
let maxSpillover = 0;
|
|
30
|
+
if (newMinRange < MIN_RANGE) {
|
|
31
|
+
minSpillover = Math.abs(newMinRange);
|
|
32
|
+
newMinRange = MIN_RANGE;
|
|
33
|
+
}
|
|
34
|
+
if (newMaxRange > MAX_RANGE) {
|
|
35
|
+
maxSpillover = Math.abs(newMaxRange - MAX_RANGE);
|
|
36
|
+
newMaxRange = MAX_RANGE;
|
|
37
|
+
}
|
|
38
|
+
if (minSpillover > 0 && maxSpillover > 0) {
|
|
39
|
+
return [MIN_RANGE, MAX_RANGE];
|
|
40
|
+
}
|
|
41
|
+
newMaxRange += minSpillover;
|
|
42
|
+
newMinRange -= maxSpillover;
|
|
43
|
+
newMinRange = Math.min(MAX_RANGE - MIN_ALLOWED_SPAN, Math.max(MIN_RANGE, newMinRange));
|
|
44
|
+
newMaxRange = Math.max(MIN_ALLOWED_SPAN, Math.min(MAX_RANGE, newMaxRange));
|
|
45
|
+
return [newMinRange, newMaxRange];
|
|
46
|
+
};
|
|
47
|
+
const useSetupZoom = () => {
|
|
48
|
+
const {
|
|
49
|
+
setZoomData,
|
|
50
|
+
isZoomEnabled,
|
|
51
|
+
options,
|
|
52
|
+
setIsInteracting
|
|
53
|
+
} = (0, _useZoom.useZoom)();
|
|
54
|
+
const drawingArea = (0, _hooks.useDrawingArea)();
|
|
55
|
+
const svgRef = (0, _hooks.useSvgRef)();
|
|
56
|
+
const eventCacheRef = React.useRef([]);
|
|
57
|
+
const eventPrevDiff = React.useRef(0);
|
|
58
|
+
const interactionTimeoutRef = React.useRef(undefined);
|
|
59
|
+
React.useEffect(() => {
|
|
60
|
+
const element = svgRef.current;
|
|
61
|
+
if (element === null || !isZoomEnabled) {
|
|
62
|
+
return () => {};
|
|
63
|
+
}
|
|
64
|
+
const wheelHandler = event => {
|
|
65
|
+
if (element === null) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const point = (0, _internals.getSVGPoint)(element, event);
|
|
69
|
+
if (!drawingArea.isPointInside(point)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
event.preventDefault();
|
|
73
|
+
if (interactionTimeoutRef.current) {
|
|
74
|
+
clearTimeout(interactionTimeoutRef.current);
|
|
75
|
+
}
|
|
76
|
+
setIsInteracting(true);
|
|
77
|
+
// Debounce transition to `isInteractive=false`.
|
|
78
|
+
// Useful because wheel events don't have an "end" event.
|
|
79
|
+
interactionTimeoutRef.current = window.setTimeout(() => {
|
|
80
|
+
setIsInteracting(false);
|
|
81
|
+
}, 166);
|
|
82
|
+
setZoomData(prevZoomData => {
|
|
83
|
+
return prevZoomData.map(zoom => {
|
|
84
|
+
const option = options[zoom.axisId];
|
|
85
|
+
if (!option) {
|
|
86
|
+
return zoom;
|
|
87
|
+
}
|
|
88
|
+
const centerRatio = option.axisDirection === 'x' ? getHorizontalCenterRatio(point, drawingArea) : getVerticalCenterRatio(point, drawingArea);
|
|
89
|
+
const {
|
|
90
|
+
scaleRatio,
|
|
91
|
+
isZoomIn
|
|
92
|
+
} = getWheelScaleRatio(event, option.step);
|
|
93
|
+
const [newMinRange, newMaxRange] = zoomAtPoint(centerRatio, scaleRatio, zoom, option);
|
|
94
|
+
if (!isSpanValid(newMinRange, newMaxRange, isZoomIn, option)) {
|
|
95
|
+
return zoom;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
axisId: zoom.axisId,
|
|
99
|
+
start: newMinRange,
|
|
100
|
+
end: newMaxRange
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
function pointerDownHandler(event) {
|
|
106
|
+
eventCacheRef.current.push(event);
|
|
107
|
+
setIsInteracting(true);
|
|
108
|
+
}
|
|
109
|
+
function pointerMoveHandler(event) {
|
|
110
|
+
if (element === null) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const index = eventCacheRef.current.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);
|
|
114
|
+
eventCacheRef.current[index] = event;
|
|
115
|
+
|
|
116
|
+
// Not a pinch gesture
|
|
117
|
+
if (eventCacheRef.current.length !== 2) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const firstEvent = eventCacheRef.current[0];
|
|
121
|
+
const curDiff = getDiff(eventCacheRef.current);
|
|
122
|
+
setZoomData(prevZoomData => {
|
|
123
|
+
const newZoomData = prevZoomData.map(zoom => {
|
|
124
|
+
const option = options[zoom.axisId];
|
|
125
|
+
if (!option) {
|
|
126
|
+
return zoom;
|
|
127
|
+
}
|
|
128
|
+
const {
|
|
129
|
+
scaleRatio,
|
|
130
|
+
isZoomIn
|
|
131
|
+
} = getPinchScaleRatio(curDiff, eventPrevDiff.current, option.step);
|
|
132
|
+
|
|
133
|
+
// If the scale ratio is 0, it means the pinch gesture is not valid.
|
|
134
|
+
if (scaleRatio === 0) {
|
|
135
|
+
return zoom;
|
|
136
|
+
}
|
|
137
|
+
const point = (0, _internals.getSVGPoint)(element, firstEvent);
|
|
138
|
+
const centerRatio = option.axisDirection === 'x' ? getHorizontalCenterRatio(point, drawingArea) : getVerticalCenterRatio(point, drawingArea);
|
|
139
|
+
const [newMinRange, newMaxRange] = zoomAtPoint(centerRatio, scaleRatio, zoom, option);
|
|
140
|
+
if (!isSpanValid(newMinRange, newMaxRange, isZoomIn, option)) {
|
|
141
|
+
return zoom;
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
axisId: zoom.axisId,
|
|
145
|
+
start: newMinRange,
|
|
146
|
+
end: newMaxRange
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
eventPrevDiff.current = curDiff;
|
|
150
|
+
return newZoomData;
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
function pointerUpHandler(event) {
|
|
154
|
+
eventCacheRef.current.splice(eventCacheRef.current.findIndex(e => e.pointerId === event.pointerId), 1);
|
|
155
|
+
if (eventCacheRef.current.length < 2) {
|
|
156
|
+
eventPrevDiff.current = 0;
|
|
157
|
+
}
|
|
158
|
+
if (event.type === 'pointerup' || event.type === 'pointercancel') {
|
|
159
|
+
setIsInteracting(false);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
element.addEventListener('wheel', wheelHandler);
|
|
163
|
+
element.addEventListener('pointerdown', pointerDownHandler);
|
|
164
|
+
element.addEventListener('pointermove', pointerMoveHandler);
|
|
165
|
+
element.addEventListener('pointerup', pointerUpHandler);
|
|
166
|
+
element.addEventListener('pointercancel', pointerUpHandler);
|
|
167
|
+
element.addEventListener('pointerout', pointerUpHandler);
|
|
168
|
+
element.addEventListener('pointerleave', pointerUpHandler);
|
|
169
|
+
|
|
170
|
+
// Prevent zooming the entire page on touch devices
|
|
171
|
+
element.addEventListener('touchstart', preventDefault);
|
|
172
|
+
element.addEventListener('touchmove', preventDefault);
|
|
173
|
+
return () => {
|
|
174
|
+
element.removeEventListener('wheel', wheelHandler);
|
|
175
|
+
element.removeEventListener('pointerdown', pointerDownHandler);
|
|
176
|
+
element.removeEventListener('pointermove', pointerMoveHandler);
|
|
177
|
+
element.removeEventListener('pointerup', pointerUpHandler);
|
|
178
|
+
element.removeEventListener('pointercancel', pointerUpHandler);
|
|
179
|
+
element.removeEventListener('pointerout', pointerUpHandler);
|
|
180
|
+
element.removeEventListener('pointerleave', pointerUpHandler);
|
|
181
|
+
element.removeEventListener('touchstart', preventDefault);
|
|
182
|
+
element.removeEventListener('touchmove', preventDefault);
|
|
183
|
+
if (interactionTimeoutRef.current) {
|
|
184
|
+
clearTimeout(interactionTimeoutRef.current);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
}, [svgRef, setZoomData, drawingArea, isZoomEnabled, options, setIsInteracting]);
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Checks if the new span is valid.
|
|
192
|
+
*/
|
|
193
|
+
exports.useSetupZoom = useSetupZoom;
|
|
194
|
+
function isSpanValid(minRange, maxRange, isZoomIn, option) {
|
|
195
|
+
const newSpanPercent = maxRange - minRange;
|
|
196
|
+
if (isZoomIn && newSpanPercent < option.minSpan || !isZoomIn && newSpanPercent > option.maxSpan) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
if (minRange < option.minStart || maxRange > option.maxEnd) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
function getMultiplier(event) {
|
|
205
|
+
const ctrlMultiplier = event.ctrlKey ? 3 : 1;
|
|
206
|
+
|
|
207
|
+
// DeltaMode: 0 is pixel, 1 is line, 2 is page
|
|
208
|
+
// This is defined by the browser.
|
|
209
|
+
if (event.deltaMode === 1) {
|
|
210
|
+
return 1 * ctrlMultiplier;
|
|
211
|
+
}
|
|
212
|
+
if (event.deltaMode) {
|
|
213
|
+
return 10 * ctrlMultiplier;
|
|
214
|
+
}
|
|
215
|
+
return 0.2 * ctrlMultiplier;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Get the scale ratio and if it's a zoom in or out from a wheel event.
|
|
220
|
+
*/
|
|
221
|
+
function getWheelScaleRatio(event, step) {
|
|
222
|
+
const deltaY = -event.deltaY;
|
|
223
|
+
const multiplier = getMultiplier(event);
|
|
224
|
+
const scaledStep = step * multiplier * deltaY / 1000;
|
|
225
|
+
// Clamp the scale ratio between 0.1 and 1.9 so that the zoom is not too big or too small.
|
|
226
|
+
const scaleRatio = Math.min(Math.max(1 + scaledStep, 0.1), 1.9);
|
|
227
|
+
const isZoomIn = deltaY > 0;
|
|
228
|
+
return {
|
|
229
|
+
scaleRatio,
|
|
230
|
+
isZoomIn
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Get the scale ratio and if it's a zoom in or out from a pinch gesture.
|
|
236
|
+
*/
|
|
237
|
+
function getPinchScaleRatio(curDiff, prevDiff, step) {
|
|
238
|
+
const scaledStep = step / 1000;
|
|
239
|
+
let scaleRatio = 0;
|
|
240
|
+
let isZoomIn = false;
|
|
241
|
+
const hasMoved = prevDiff > 0;
|
|
242
|
+
if (hasMoved && curDiff > prevDiff) {
|
|
243
|
+
// The distance between the two pointers has increased
|
|
244
|
+
scaleRatio = 1 + scaledStep;
|
|
245
|
+
isZoomIn = true;
|
|
246
|
+
}
|
|
247
|
+
if (hasMoved && curDiff < prevDiff) {
|
|
248
|
+
// The distance between the two pointers has decreased
|
|
249
|
+
scaleRatio = 1 - scaledStep;
|
|
250
|
+
isZoomIn = false;
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
scaleRatio,
|
|
254
|
+
isZoomIn
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function getDiff(eventCache) {
|
|
258
|
+
const [firstEvent, secondEvent] = eventCache;
|
|
259
|
+
return Math.hypot(firstEvent.pageX - secondEvent.pageX, firstEvent.pageY - secondEvent.pageY);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Get the ratio of the point in the horizontal center of the area.
|
|
264
|
+
*/
|
|
265
|
+
function getHorizontalCenterRatio(point, area) {
|
|
266
|
+
const {
|
|
267
|
+
left,
|
|
268
|
+
width
|
|
269
|
+
} = area;
|
|
270
|
+
return (point.x - left) / width;
|
|
271
|
+
}
|
|
272
|
+
function preventDefault(event) {
|
|
273
|
+
event.preventDefault();
|
|
274
|
+
}
|
|
275
|
+
function getVerticalCenterRatio(point, area) {
|
|
276
|
+
const {
|
|
277
|
+
top,
|
|
278
|
+
height
|
|
279
|
+
} = area;
|
|
280
|
+
return (point.y - top) / height * -1 + 1;
|
|
281
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useZoom = useZoom;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _ZoomContext = require("./ZoomContext");
|
|
9
|
+
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); }
|
|
10
|
+
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 && {}.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; }
|
|
11
|
+
/**
|
|
12
|
+
* Get access to the zoom state.
|
|
13
|
+
*
|
|
14
|
+
* @returns {ZoomState} The zoom state.
|
|
15
|
+
*/
|
|
16
|
+
function useZoom() {
|
|
17
|
+
const {
|
|
18
|
+
data,
|
|
19
|
+
isInitialized
|
|
20
|
+
} = React.useContext(_ZoomContext.ZoomContext);
|
|
21
|
+
if (!isInitialized) {
|
|
22
|
+
throw new Error(['MUI X: Could not find the zoom context.', 'It looks like you rendered your component outside of a ChartsContainer parent component.'].join('\n'));
|
|
23
|
+
}
|
|
24
|
+
return data;
|
|
25
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _useZoom = require("./ZoomProvider/useZoom");
|
|
7
|
+
Object.keys(_useZoom).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _useZoom[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _useZoom[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _ZoomSetup = require("./ZoomProvider/ZoomSetup");
|
|
18
|
+
Object.keys(_ZoomSetup).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _ZoomSetup[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _ZoomSetup[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "unstable_useHeatmapSeries", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useSeries.useHeatmapSeries;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _useSeries = require("./useSeries");
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useHeatmapSeries = useHeatmapSeries;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _internals = require("@mui/x-charts/internals");
|
|
9
|
+
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); }
|
|
10
|
+
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 && {}.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; }
|
|
11
|
+
/**
|
|
12
|
+
* Get access to the internal state of heatmap series.
|
|
13
|
+
* The returned object contains:
|
|
14
|
+
* - series: a mapping from ids to series attributes.
|
|
15
|
+
* - seriesOrder: the array of series ids.
|
|
16
|
+
* @returns { series: Record<SeriesId, DefaultizedHeatmapSeriesType>; seriesOrder: SeriesId[]; } | undefined heatmapSeries
|
|
17
|
+
*/
|
|
18
|
+
function useHeatmapSeries() {
|
|
19
|
+
const series = (0, _internals.useSeries)();
|
|
20
|
+
return React.useMemo(() => series.heatmap, [series.heatmap]);
|
|
21
|
+
}
|