@mui/x-charts-premium 9.0.1 → 9.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BarChartPremium/BarChartPremium.js +20 -1
- package/BarChartPremium/BarChartPremium.mjs +20 -1
- package/BarChartPremium/RangeBar/seriesConfig/getSeriesWithDefaultValues.d.mts +1 -0
- package/BarChartPremium/RangeBar/seriesConfig/getSeriesWithDefaultValues.d.ts +1 -0
- package/BarChartPremium/RangeBar/seriesConfig/seriesProcessor.js +16 -8
- package/BarChartPremium/RangeBar/seriesConfig/seriesProcessor.mjs +16 -8
- package/CHANGELOG.md +257 -0
- package/CandlestickChart/CandlestickChart.js +18 -0
- package/CandlestickChart/CandlestickChart.mjs +18 -0
- package/CandlestickChart/CandlestickPlot.js +27 -31
- package/CandlestickChart/CandlestickPlot.mjs +27 -31
- package/CandlestickChart/CandlestickWebGLProgram.js +0 -3
- package/CandlestickChart/CandlestickWebGLProgram.mjs +0 -3
- package/CandlestickChart/seriesConfig/getSeriesWithDefaultValues.d.mts +1 -0
- package/CandlestickChart/seriesConfig/getSeriesWithDefaultValues.d.ts +1 -0
- package/CandlestickChart/seriesConfig/seriesProcessor.js +21 -13
- package/CandlestickChart/seriesConfig/seriesProcessor.mjs +21 -13
- package/ChartsDataProviderPremium/ChartsDataProviderPremium.js +2 -2
- package/ChartsDataProviderPremium/ChartsDataProviderPremium.mjs +2 -2
- package/ChartsRadialDataProvider/index.d.mts +1 -0
- package/ChartsRadialDataProvider/index.d.ts +1 -0
- package/ChartsRadialDataProvider/index.js +16 -0
- package/ChartsRadialDataProvider/index.mjs +2 -0
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.d.mts +35 -0
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.d.ts +35 -0
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.js +126 -0
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.mjs +120 -0
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.plugins.d.mts +5 -0
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.plugins.d.ts +5 -0
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.plugins.js +9 -0
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.plugins.mjs +3 -0
- package/ChartsRadialDataProviderPremium/index.d.mts +3 -0
- package/ChartsRadialDataProviderPremium/index.d.ts +3 -0
- package/ChartsRadialDataProviderPremium/index.js +20 -0
- package/ChartsRadialDataProviderPremium/index.mjs +3 -0
- package/ChartsRadialDataProviderPremium/useChartsRadialDataProviderPremiumProps.d.mts +10 -0
- package/ChartsRadialDataProviderPremium/useChartsRadialDataProviderPremiumProps.d.ts +10 -0
- package/ChartsRadialDataProviderPremium/useChartsRadialDataProviderPremiumProps.js +25 -0
- package/ChartsRadialDataProviderPremium/useChartsRadialDataProviderPremiumProps.mjs +19 -0
- package/ChartsRadialGrid/index.d.mts +1 -0
- package/ChartsRadialGrid/index.d.ts +1 -0
- package/ChartsRadialGrid/index.js +16 -0
- package/ChartsRadialGrid/index.mjs +2 -0
- package/ChartsRadiusAxis/index.d.mts +1 -0
- package/ChartsRadiusAxis/index.d.ts +1 -0
- package/ChartsRadiusAxis/index.js +16 -0
- package/ChartsRadiusAxis/index.mjs +2 -0
- package/ChartsRotationAxis/index.d.mts +1 -0
- package/ChartsRotationAxis/index.d.ts +1 -0
- package/ChartsRotationAxis/index.js +16 -0
- package/ChartsRotationAxis/index.mjs +2 -0
- package/ChartsWebGLLayer/ChartsWebGLContext.d.mts +5 -0
- package/ChartsWebGLLayer/ChartsWebGLContext.d.ts +5 -0
- package/ChartsWebGLLayer/ChartsWebGLContext.js +31 -0
- package/ChartsWebGLLayer/ChartsWebGLContext.mjs +23 -0
- package/ChartsWebGLLayer/ChartsWebGLLayer.d.mts +0 -1
- package/ChartsWebGLLayer/ChartsWebGLLayer.d.ts +0 -1
- package/ChartsWebGLLayer/ChartsWebGLLayer.js +63 -12
- package/ChartsWebGLLayer/ChartsWebGLLayer.mjs +62 -10
- package/ChartsWebGLLayer/ChartsWebGLLayer.types.d.mts +26 -0
- package/ChartsWebGLLayer/ChartsWebGLLayer.types.d.ts +26 -0
- package/ChartsWebGLLayer/ChartsWebGLLayer.types.js +5 -0
- package/ChartsWebGLLayer/ChartsWebGLLayer.types.mjs +1 -0
- package/ChartsWebGLLayer/ChartsWebGLOrderContext.d.mts +6 -0
- package/ChartsWebGLLayer/ChartsWebGLOrderContext.d.ts +6 -0
- package/ChartsWebGLLayer/ChartsWebGLOrderContext.js +15 -0
- package/ChartsWebGLLayer/ChartsWebGLOrderContext.mjs +10 -0
- package/HeatmapPremium/HeatmapPlotPremium.js +2 -2
- package/HeatmapPremium/HeatmapPlotPremium.mjs +2 -2
- package/HeatmapPremium/HeatmapPremium.js +4 -1
- package/HeatmapPremium/HeatmapPremium.mjs +4 -1
- package/HeatmapPremium/webgl/HeatmapWebGLPlot.js +26 -33
- package/HeatmapPremium/webgl/HeatmapWebGLPlot.mjs +26 -33
- package/RadialBarChart/seriesConfig/axisTooltipGetter.d.mts +2 -0
- package/RadialBarChart/seriesConfig/axisTooltipGetter.d.ts +2 -0
- package/RadialBarChart/seriesConfig/axisTooltipGetter.js +13 -0
- package/RadialBarChart/seriesConfig/axisTooltipGetter.mjs +6 -0
- package/RadialBarChart/seriesConfig/descriptionGetter.d.mts +3 -0
- package/RadialBarChart/seriesConfig/descriptionGetter.d.ts +3 -0
- package/RadialBarChart/seriesConfig/descriptionGetter.js +34 -0
- package/RadialBarChart/seriesConfig/descriptionGetter.mjs +28 -0
- package/RadialBarChart/seriesConfig/extremums.d.mts +3 -0
- package/RadialBarChart/seriesConfig/extremums.d.ts +3 -0
- package/RadialBarChart/seriesConfig/extremums.js +44 -0
- package/RadialBarChart/seriesConfig/extremums.mjs +36 -0
- package/RadialBarChart/seriesConfig/getColor.d.mts +3 -0
- package/RadialBarChart/seriesConfig/getColor.d.ts +3 -0
- package/RadialBarChart/seriesConfig/getColor.js +61 -0
- package/RadialBarChart/seriesConfig/getColor.mjs +55 -0
- package/RadialBarChart/seriesConfig/getSeriesWithDefaultValues.d.mts +3 -0
- package/RadialBarChart/seriesConfig/getSeriesWithDefaultValues.d.ts +3 -0
- package/RadialBarChart/seriesConfig/getSeriesWithDefaultValues.js +16 -0
- package/RadialBarChart/seriesConfig/getSeriesWithDefaultValues.mjs +9 -0
- package/RadialBarChart/seriesConfig/index.d.mts +2 -0
- package/RadialBarChart/seriesConfig/index.d.ts +2 -0
- package/RadialBarChart/seriesConfig/index.js +37 -0
- package/RadialBarChart/seriesConfig/index.mjs +30 -0
- package/RadialBarChart/seriesConfig/keyboardFocusHandler.d.mts +3 -0
- package/RadialBarChart/seriesConfig/keyboardFocusHandler.d.ts +3 -0
- package/RadialBarChart/seriesConfig/keyboardFocusHandler.js +9 -0
- package/RadialBarChart/seriesConfig/keyboardFocusHandler.mjs +3 -0
- package/RadialBarChart/seriesConfig/legend.d.mts +3 -0
- package/RadialBarChart/seriesConfig/legend.d.ts +3 -0
- package/RadialBarChart/seriesConfig/legend.js +9 -0
- package/RadialBarChart/seriesConfig/legend.mjs +3 -0
- package/RadialBarChart/seriesConfig/seriesProcessor.d.mts +3 -0
- package/RadialBarChart/seriesConfig/seriesProcessor.d.ts +3 -0
- package/RadialBarChart/seriesConfig/seriesProcessor.js +137 -0
- package/RadialBarChart/seriesConfig/seriesProcessor.mjs +130 -0
- package/RadialBarChart/seriesConfig/tooltip.d.mts +3 -0
- package/RadialBarChart/seriesConfig/tooltip.d.ts +3 -0
- package/RadialBarChart/seriesConfig/tooltip.js +34 -0
- package/RadialBarChart/seriesConfig/tooltip.mjs +28 -0
- package/RadialBarChart/seriesConfig/tooltipPosition.d.mts +3 -0
- package/RadialBarChart/seriesConfig/tooltipPosition.d.ts +3 -0
- package/RadialBarChart/seriesConfig/tooltipPosition.js +11 -0
- package/RadialBarChart/seriesConfig/tooltipPosition.mjs +5 -0
- package/RadialLineChart/RadialArea.d.mts +12 -0
- package/RadialLineChart/RadialArea.d.ts +12 -0
- package/RadialLineChart/RadialArea.js +33 -0
- package/RadialLineChart/RadialArea.mjs +26 -0
- package/RadialLineChart/RadialAreaPlot.d.mts +5 -0
- package/RadialLineChart/RadialAreaPlot.d.ts +5 -0
- package/RadialLineChart/RadialAreaPlot.js +51 -0
- package/RadialLineChart/RadialAreaPlot.mjs +45 -0
- package/RadialLineChart/RadialLine.d.mts +12 -0
- package/RadialLineChart/RadialLine.d.ts +12 -0
- package/RadialLineChart/RadialLine.js +33 -0
- package/RadialLineChart/RadialLine.mjs +26 -0
- package/RadialLineChart/RadialLineChart.d.mts +62 -0
- package/RadialLineChart/RadialLineChart.d.ts +62 -0
- package/RadialLineChart/RadialLineChart.js +967 -0
- package/RadialLineChart/RadialLineChart.mjs +960 -0
- package/RadialLineChart/RadialLineChart.plugins.d.mts +4 -0
- package/RadialLineChart/RadialLineChart.plugins.d.ts +4 -0
- package/RadialLineChart/RadialLineChart.plugins.js +9 -0
- package/RadialLineChart/RadialLineChart.plugins.mjs +3 -0
- package/RadialLineChart/RadialLinePlot.d.mts +5 -0
- package/RadialLineChart/RadialLinePlot.d.ts +5 -0
- package/RadialLineChart/RadialLinePlot.js +50 -0
- package/RadialLineChart/RadialLinePlot.mjs +44 -0
- package/RadialLineChart/RadialMarkPlot.d.mts +5 -0
- package/RadialLineChart/RadialMarkPlot.d.ts +5 -0
- package/RadialLineChart/RadialMarkPlot.js +48 -0
- package/RadialLineChart/RadialMarkPlot.mjs +42 -0
- package/RadialLineChart/index.d.mts +4 -0
- package/RadialLineChart/index.d.ts +4 -0
- package/RadialLineChart/index.js +49 -0
- package/RadialLineChart/index.mjs +4 -0
- package/RadialLineChart/radialLineClasses.d.mts +25 -0
- package/RadialLineChart/radialLineClasses.d.ts +25 -0
- package/RadialLineChart/radialLineClasses.js +30 -0
- package/RadialLineChart/radialLineClasses.mjs +21 -0
- package/RadialLineChart/seriesConfig/axisTooltipGetter.d.mts +2 -0
- package/RadialLineChart/seriesConfig/axisTooltipGetter.d.ts +2 -0
- package/RadialLineChart/seriesConfig/axisTooltipGetter.js +13 -0
- package/RadialLineChart/seriesConfig/axisTooltipGetter.mjs +6 -0
- package/RadialLineChart/seriesConfig/descriptionGetter.d.mts +3 -0
- package/RadialLineChart/seriesConfig/descriptionGetter.d.ts +3 -0
- package/RadialLineChart/seriesConfig/descriptionGetter.js +39 -0
- package/RadialLineChart/seriesConfig/descriptionGetter.mjs +33 -0
- package/RadialLineChart/seriesConfig/extremums.d.mts +3 -0
- package/RadialLineChart/seriesConfig/extremums.d.ts +3 -0
- package/RadialLineChart/seriesConfig/extremums.js +48 -0
- package/RadialLineChart/seriesConfig/extremums.mjs +40 -0
- package/RadialLineChart/seriesConfig/getColor.d.mts +3 -0
- package/RadialLineChart/seriesConfig/getColor.d.ts +3 -0
- package/RadialLineChart/seriesConfig/getColor.js +61 -0
- package/RadialLineChart/seriesConfig/getColor.mjs +55 -0
- package/RadialLineChart/seriesConfig/getSeriesWithDefaultValues.d.mts +3 -0
- package/RadialLineChart/seriesConfig/getSeriesWithDefaultValues.d.ts +3 -0
- package/RadialLineChart/seriesConfig/getSeriesWithDefaultValues.js +13 -0
- package/RadialLineChart/seriesConfig/getSeriesWithDefaultValues.mjs +6 -0
- package/RadialLineChart/seriesConfig/index.d.mts +2 -0
- package/RadialLineChart/seriesConfig/index.d.ts +2 -0
- package/RadialLineChart/seriesConfig/index.js +37 -0
- package/RadialLineChart/seriesConfig/index.mjs +30 -0
- package/RadialLineChart/seriesConfig/keyboardFocusHandler.d.mts +3 -0
- package/RadialLineChart/seriesConfig/keyboardFocusHandler.d.ts +3 -0
- package/RadialLineChart/seriesConfig/keyboardFocusHandler.js +9 -0
- package/RadialLineChart/seriesConfig/keyboardFocusHandler.mjs +3 -0
- package/RadialLineChart/seriesConfig/legend.d.mts +3 -0
- package/RadialLineChart/seriesConfig/legend.d.ts +3 -0
- package/RadialLineChart/seriesConfig/legend.js +29 -0
- package/RadialLineChart/seriesConfig/legend.mjs +23 -0
- package/RadialLineChart/seriesConfig/seriesProcessor.d.mts +3 -0
- package/RadialLineChart/seriesConfig/seriesProcessor.d.ts +3 -0
- package/RadialLineChart/seriesConfig/seriesProcessor.js +142 -0
- package/RadialLineChart/seriesConfig/seriesProcessor.mjs +135 -0
- package/RadialLineChart/seriesConfig/tooltip.d.mts +3 -0
- package/RadialLineChart/seriesConfig/tooltip.d.ts +3 -0
- package/RadialLineChart/seriesConfig/tooltip.js +32 -0
- package/RadialLineChart/seriesConfig/tooltip.mjs +26 -0
- package/RadialLineChart/seriesConfig/tooltipPosition.d.mts +3 -0
- package/RadialLineChart/seriesConfig/tooltipPosition.d.ts +3 -0
- package/RadialLineChart/seriesConfig/tooltipPosition.js +11 -0
- package/RadialLineChart/seriesConfig/tooltipPosition.mjs +5 -0
- package/RadialLineChart/useRadialLineChartProps.d.mts +28 -0
- package/RadialLineChart/useRadialLineChartProps.d.ts +28 -0
- package/RadialLineChart/useRadialLineChartProps.js +99 -0
- package/RadialLineChart/useRadialLineChartProps.mjs +92 -0
- package/RadialLineChart/useRadialLinePlotData.d.mts +19 -0
- package/RadialLineChart/useRadialLinePlotData.d.ts +19 -0
- package/RadialLineChart/useRadialLinePlotData.js +79 -0
- package/RadialLineChart/useRadialLinePlotData.mjs +72 -0
- package/hooks/useRadialLineSeries.d.mts +34 -0
- package/hooks/useRadialLineSeries.d.ts +34 -0
- package/hooks/useRadialLineSeries.js +45 -0
- package/hooks/useRadialLineSeries.mjs +40 -0
- package/index.d.mts +7 -1
- package/index.d.ts +7 -1
- package/index.js +69 -1
- package/index.mjs +8 -2
- package/models/seriesType/index.d.mts +3 -1
- package/models/seriesType/index.d.ts +3 -1
- package/models/seriesType/index.js +22 -0
- package/models/seriesType/index.mjs +3 -1
- package/models/seriesType/ohlc.d.mts +7 -1
- package/models/seriesType/ohlc.d.ts +7 -1
- package/models/seriesType/radialBar.d.mts +23 -0
- package/models/seriesType/radialBar.d.ts +23 -0
- package/models/seriesType/radialBar.js +5 -0
- package/models/seriesType/radialBar.mjs +1 -0
- package/models/seriesType/radialLine.d.mts +26 -0
- package/models/seriesType/radialLine.d.ts +26 -0
- package/models/seriesType/radialLine.js +5 -0
- package/models/seriesType/radialLine.mjs +1 -0
- package/models/seriesType/rangeBar.d.mts +7 -1
- package/models/seriesType/rangeBar.d.ts +7 -1
- package/package.json +90 -6
- package/typeOverloads/modules.d.mts +48 -2
- package/typeOverloads/modules.d.ts +48 -2
- package/utils/webgl/useWebGLResizeObserver.d.mts +3 -2
- package/utils/webgl/useWebGLResizeObserver.d.ts +3 -2
- package/utils/webgl/useWebGLResizeObserver.js +3 -4
- package/utils/webgl/useWebGLResizeObserver.mjs +3 -4
- package/HeatmapPremium/webgl/HeatmapWebGLRenderer.d.mts +0 -4
- package/HeatmapPremium/webgl/HeatmapWebGLRenderer.d.ts +0 -4
- package/HeatmapPremium/webgl/HeatmapWebGLRenderer.js +0 -21
- package/HeatmapPremium/webgl/HeatmapWebGLRenderer.mjs +0 -15
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
export declare function useWebGLContext(): WebGL2RenderingContext | null;
|
|
3
2
|
export declare const ChartsWebGLLayer: React.ForwardRefExoticComponent<Omit<React.PropsWithChildren<React.DetailedHTMLProps<React.CanvasHTMLAttributes<HTMLCanvasElement>, HTMLCanvasElement>>, "ref"> & React.RefAttributes<HTMLCanvasElement>>;
|
|
@@ -7,32 +7,75 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
value: true
|
|
8
8
|
});
|
|
9
9
|
exports.ChartsWebGLLayer = void 0;
|
|
10
|
-
exports.useWebGLContext = useWebGLContext;
|
|
11
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
12
11
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
13
12
|
var React = _interopRequireWildcard(require("react"));
|
|
14
13
|
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
15
14
|
var _internals = require("@mui/x-charts/internals");
|
|
16
15
|
var _hooks = require("@mui/x-charts/hooks");
|
|
16
|
+
var _useWebGLResizeObserver = require("../utils/webgl/useWebGLResizeObserver");
|
|
17
|
+
var _ChartsWebGLContext = require("./ChartsWebGLContext");
|
|
18
|
+
var _ChartsWebGLOrderContext = require("./ChartsWebGLOrderContext");
|
|
17
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
20
|
const _excluded = ["children"],
|
|
19
21
|
_excluded2 = ["children"];
|
|
20
|
-
const ChartsWebGLContext = /*#__PURE__*/React.createContext(null);
|
|
21
|
-
if (process.env.NODE_ENV !== "production") ChartsWebGLContext.displayName = "ChartsWebGLContext";
|
|
22
|
-
function useWebGLContext() {
|
|
23
|
-
return React.useContext(ChartsWebGLContext);
|
|
24
|
-
}
|
|
25
22
|
const ChartsWebGLLayer = exports.ChartsWebGLLayer = /*#__PURE__*/React.forwardRef(function WebGLProvider(_ref, ref) {
|
|
26
23
|
let {
|
|
27
24
|
children
|
|
28
25
|
} = _ref,
|
|
29
26
|
props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
|
|
30
27
|
const canvasRef = React.useRef(null);
|
|
31
|
-
const [
|
|
28
|
+
const [glContext, setGlContext] = React.useState(null);
|
|
32
29
|
const handleRef = (0, _useForkRef.default)(canvasRef, ref);
|
|
33
30
|
const chartRoot = (0, _hooks.useChartRootRef)().current;
|
|
34
31
|
const drawingArea = (0, _hooks.useDrawingArea)();
|
|
35
32
|
const [, rerender] = React.useReducer(s => s + 1, 0);
|
|
33
|
+
const drawEntriesRef = React.useRef([]);
|
|
34
|
+
const renderScheduledRef = React.useRef(false);
|
|
35
|
+
const renderAll = React.useCallback(() => {
|
|
36
|
+
if (!glContext) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
renderScheduledRef.current = false;
|
|
40
|
+
glContext.clearColor(0, 0, 0, 0.0);
|
|
41
|
+
glContext.clear(glContext.COLOR_BUFFER_BIT);
|
|
42
|
+
// Sort by order so z-order matches children's position in ChartsWebGLLayer,
|
|
43
|
+
// stable across remount.
|
|
44
|
+
const sorted = [...drawEntriesRef.current].sort((a, b) => a.order - b.order);
|
|
45
|
+
for (const {
|
|
46
|
+
drawRef
|
|
47
|
+
} of sorted) {
|
|
48
|
+
drawRef.current?.();
|
|
49
|
+
}
|
|
50
|
+
}, [glContext]);
|
|
51
|
+
const registerDraw = React.useCallback((drawRef, order) => {
|
|
52
|
+
const entry = {
|
|
53
|
+
drawRef,
|
|
54
|
+
order
|
|
55
|
+
};
|
|
56
|
+
drawEntriesRef.current.push(entry);
|
|
57
|
+
return () => {
|
|
58
|
+
const idx = drawEntriesRef.current.indexOf(entry);
|
|
59
|
+
if (idx >= 0) {
|
|
60
|
+
drawEntriesRef.current.splice(idx, 1);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}, []);
|
|
64
|
+
const requestRender = React.useCallback(() => {
|
|
65
|
+
renderScheduledRef.current = true;
|
|
66
|
+
// Trigger a re-render so the flush effect runs, even if only a child's state changed
|
|
67
|
+
rerender();
|
|
68
|
+
}, []);
|
|
69
|
+
|
|
70
|
+
// Centralized resize handling — render all plots on canvas resize
|
|
71
|
+
(0, _useWebGLResizeObserver.useWebGLResizeObserver)(glContext, renderAll);
|
|
72
|
+
|
|
73
|
+
// Flush scheduled renders after all children's effects have run
|
|
74
|
+
React.useEffect(() => {
|
|
75
|
+
if (renderScheduledRef.current) {
|
|
76
|
+
renderAll();
|
|
77
|
+
}
|
|
78
|
+
});
|
|
36
79
|
React.useEffect(() => {
|
|
37
80
|
/* The chart root isn't available on first render because the ref is only set after mounting the root component. */
|
|
38
81
|
if (!chartRoot) {
|
|
@@ -48,7 +91,7 @@ const ChartsWebGLLayer = exports.ChartsWebGLLayer = /*#__PURE__*/React.forwardRe
|
|
|
48
91
|
// Must prevent default otherwise the context won't be marked as restorable
|
|
49
92
|
// https://registry.khronos.org/webgl/extensions/WEBGL_lose_context/
|
|
50
93
|
event.preventDefault();
|
|
51
|
-
|
|
94
|
+
setGlContext(null);
|
|
52
95
|
};
|
|
53
96
|
const initializeContext = () => {
|
|
54
97
|
const ctx = canvas.getContext('webgl2', {
|
|
@@ -60,7 +103,7 @@ const ChartsWebGLLayer = exports.ChartsWebGLLayer = /*#__PURE__*/React.forwardRe
|
|
|
60
103
|
if (!ctx) {
|
|
61
104
|
return;
|
|
62
105
|
}
|
|
63
|
-
|
|
106
|
+
setGlContext(ctx);
|
|
64
107
|
};
|
|
65
108
|
canvas.addEventListener('webglcontextlost', handleContextLost);
|
|
66
109
|
canvas.addEventListener('webglcontextrestored', initializeContext);
|
|
@@ -70,11 +113,16 @@ const ChartsWebGLLayer = exports.ChartsWebGLLayer = /*#__PURE__*/React.forwardRe
|
|
|
70
113
|
canvas.removeEventListener('webglcontextrestored', initializeContext);
|
|
71
114
|
};
|
|
72
115
|
}, [chartRoot]);
|
|
116
|
+
const contextValue = React.useMemo(() => glContext ? {
|
|
117
|
+
gl: glContext,
|
|
118
|
+
registerDraw,
|
|
119
|
+
requestRender
|
|
120
|
+
} : null, [glContext, registerDraw, requestRender]);
|
|
73
121
|
if (!chartRoot) {
|
|
74
122
|
return null;
|
|
75
123
|
}
|
|
76
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(ChartsWebGLContext.Provider, {
|
|
77
|
-
value:
|
|
124
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_ChartsWebGLContext.ChartsWebGLContext.Provider, {
|
|
125
|
+
value: contextValue,
|
|
78
126
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(CanvasPositioner, {
|
|
79
127
|
"aria-hidden": "true",
|
|
80
128
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("canvas", (0, _extends2.default)({
|
|
@@ -88,7 +136,10 @@ const ChartsWebGLLayer = exports.ChartsWebGLLayer = /*#__PURE__*/React.forwardRe
|
|
|
88
136
|
height: drawingArea.height
|
|
89
137
|
}
|
|
90
138
|
}))
|
|
91
|
-
}), children
|
|
139
|
+
}), React.Children.map(children, (child, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChartsWebGLOrderContext.ChartsWebGLOrderContext.Provider, {
|
|
140
|
+
value: index,
|
|
141
|
+
children: child
|
|
142
|
+
}))]
|
|
92
143
|
});
|
|
93
144
|
});
|
|
94
145
|
if (process.env.NODE_ENV !== "production") ChartsWebGLLayer.displayName = "ChartsWebGLLayer";
|
|
@@ -8,23 +8,67 @@ import * as React from 'react';
|
|
|
8
8
|
import useForkRef from '@mui/utils/useForkRef';
|
|
9
9
|
import { selectorChartSvgHeight, selectorChartSvgWidth, useStore } from '@mui/x-charts/internals';
|
|
10
10
|
import { useDrawingArea, useChartRootRef } from '@mui/x-charts/hooks';
|
|
11
|
+
import { useWebGLResizeObserver } from "../utils/webgl/useWebGLResizeObserver.mjs";
|
|
12
|
+
import { ChartsWebGLContext } from "./ChartsWebGLContext.mjs";
|
|
13
|
+
import { ChartsWebGLOrderContext } from "./ChartsWebGLOrderContext.mjs";
|
|
11
14
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
-
const ChartsWebGLContext = /*#__PURE__*/React.createContext(null);
|
|
13
|
-
if (process.env.NODE_ENV !== "production") ChartsWebGLContext.displayName = "ChartsWebGLContext";
|
|
14
|
-
export function useWebGLContext() {
|
|
15
|
-
return React.useContext(ChartsWebGLContext);
|
|
16
|
-
}
|
|
17
15
|
export const ChartsWebGLLayer = /*#__PURE__*/React.forwardRef(function WebGLProvider(_ref, ref) {
|
|
18
16
|
let {
|
|
19
17
|
children
|
|
20
18
|
} = _ref,
|
|
21
19
|
props = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
22
20
|
const canvasRef = React.useRef(null);
|
|
23
|
-
const [
|
|
21
|
+
const [glContext, setGlContext] = React.useState(null);
|
|
24
22
|
const handleRef = useForkRef(canvasRef, ref);
|
|
25
23
|
const chartRoot = useChartRootRef().current;
|
|
26
24
|
const drawingArea = useDrawingArea();
|
|
27
25
|
const [, rerender] = React.useReducer(s => s + 1, 0);
|
|
26
|
+
const drawEntriesRef = React.useRef([]);
|
|
27
|
+
const renderScheduledRef = React.useRef(false);
|
|
28
|
+
const renderAll = React.useCallback(() => {
|
|
29
|
+
if (!glContext) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
renderScheduledRef.current = false;
|
|
33
|
+
glContext.clearColor(0, 0, 0, 0.0);
|
|
34
|
+
glContext.clear(glContext.COLOR_BUFFER_BIT);
|
|
35
|
+
// Sort by order so z-order matches children's position in ChartsWebGLLayer,
|
|
36
|
+
// stable across remount.
|
|
37
|
+
const sorted = [...drawEntriesRef.current].sort((a, b) => a.order - b.order);
|
|
38
|
+
for (const {
|
|
39
|
+
drawRef
|
|
40
|
+
} of sorted) {
|
|
41
|
+
drawRef.current?.();
|
|
42
|
+
}
|
|
43
|
+
}, [glContext]);
|
|
44
|
+
const registerDraw = React.useCallback((drawRef, order) => {
|
|
45
|
+
const entry = {
|
|
46
|
+
drawRef,
|
|
47
|
+
order
|
|
48
|
+
};
|
|
49
|
+
drawEntriesRef.current.push(entry);
|
|
50
|
+
return () => {
|
|
51
|
+
const idx = drawEntriesRef.current.indexOf(entry);
|
|
52
|
+
if (idx >= 0) {
|
|
53
|
+
drawEntriesRef.current.splice(idx, 1);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}, []);
|
|
57
|
+
const requestRender = React.useCallback(() => {
|
|
58
|
+
renderScheduledRef.current = true;
|
|
59
|
+
// Trigger a re-render so the flush effect runs, even if only a child's state changed
|
|
60
|
+
rerender();
|
|
61
|
+
}, []);
|
|
62
|
+
|
|
63
|
+
// Centralized resize handling — render all plots on canvas resize
|
|
64
|
+
useWebGLResizeObserver(glContext, renderAll);
|
|
65
|
+
|
|
66
|
+
// Flush scheduled renders after all children's effects have run
|
|
67
|
+
React.useEffect(() => {
|
|
68
|
+
if (renderScheduledRef.current) {
|
|
69
|
+
renderAll();
|
|
70
|
+
}
|
|
71
|
+
});
|
|
28
72
|
React.useEffect(() => {
|
|
29
73
|
/* The chart root isn't available on first render because the ref is only set after mounting the root component. */
|
|
30
74
|
if (!chartRoot) {
|
|
@@ -40,7 +84,7 @@ export const ChartsWebGLLayer = /*#__PURE__*/React.forwardRef(function WebGLProv
|
|
|
40
84
|
// Must prevent default otherwise the context won't be marked as restorable
|
|
41
85
|
// https://registry.khronos.org/webgl/extensions/WEBGL_lose_context/
|
|
42
86
|
event.preventDefault();
|
|
43
|
-
|
|
87
|
+
setGlContext(null);
|
|
44
88
|
};
|
|
45
89
|
const initializeContext = () => {
|
|
46
90
|
const ctx = canvas.getContext('webgl2', {
|
|
@@ -52,7 +96,7 @@ export const ChartsWebGLLayer = /*#__PURE__*/React.forwardRef(function WebGLProv
|
|
|
52
96
|
if (!ctx) {
|
|
53
97
|
return;
|
|
54
98
|
}
|
|
55
|
-
|
|
99
|
+
setGlContext(ctx);
|
|
56
100
|
};
|
|
57
101
|
canvas.addEventListener('webglcontextlost', handleContextLost);
|
|
58
102
|
canvas.addEventListener('webglcontextrestored', initializeContext);
|
|
@@ -62,11 +106,16 @@ export const ChartsWebGLLayer = /*#__PURE__*/React.forwardRef(function WebGLProv
|
|
|
62
106
|
canvas.removeEventListener('webglcontextrestored', initializeContext);
|
|
63
107
|
};
|
|
64
108
|
}, [chartRoot]);
|
|
109
|
+
const contextValue = React.useMemo(() => glContext ? {
|
|
110
|
+
gl: glContext,
|
|
111
|
+
registerDraw,
|
|
112
|
+
requestRender
|
|
113
|
+
} : null, [glContext, registerDraw, requestRender]);
|
|
65
114
|
if (!chartRoot) {
|
|
66
115
|
return null;
|
|
67
116
|
}
|
|
68
117
|
return /*#__PURE__*/_jsxs(ChartsWebGLContext.Provider, {
|
|
69
|
-
value:
|
|
118
|
+
value: contextValue,
|
|
70
119
|
children: [/*#__PURE__*/_jsx(CanvasPositioner, {
|
|
71
120
|
"aria-hidden": "true",
|
|
72
121
|
children: /*#__PURE__*/_jsx("canvas", _extends({
|
|
@@ -80,7 +129,10 @@ export const ChartsWebGLLayer = /*#__PURE__*/React.forwardRef(function WebGLProv
|
|
|
80
129
|
height: drawingArea.height
|
|
81
130
|
}
|
|
82
131
|
}))
|
|
83
|
-
}), children
|
|
132
|
+
}), React.Children.map(children, (child, index) => /*#__PURE__*/_jsx(ChartsWebGLOrderContext.Provider, {
|
|
133
|
+
value: index,
|
|
134
|
+
children: child
|
|
135
|
+
}))]
|
|
84
136
|
});
|
|
85
137
|
});
|
|
86
138
|
if (process.env.NODE_ENV !== "production") ChartsWebGLLayer.displayName = "ChartsWebGLLayer";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
export type DrawEntry = {
|
|
3
|
+
drawRef: React.RefObject<(() => void) | null>;
|
|
4
|
+
order: number;
|
|
5
|
+
};
|
|
6
|
+
export interface ChartsWebGLContextValue {
|
|
7
|
+
gl: WebGL2RenderingContext;
|
|
8
|
+
/**
|
|
9
|
+
* Register a draw callback ref. Returns an unregister function.
|
|
10
|
+
* Callbacks are sorted by the provided `order` number so z-order follows the children's position
|
|
11
|
+
* in `ChartsWebGLLayer`, stable across unmount/remount (e.g. toggled via series visibility).
|
|
12
|
+
* @param {React.RefObject} drawRef A ref object whose current property is a draw callback function. The callback will be called with the WebGL context already set to this layer's canvas. Set to null to temporarily disable drawing without unregistering.
|
|
13
|
+
* @param {number} order Z-order index. Lower values draw first (behind higher values).
|
|
14
|
+
* @returns {Function} Unregister function to remove the draw callback from the layer.
|
|
15
|
+
*/
|
|
16
|
+
registerDraw: (drawRef: React.RefObject<(() => void) | null>, order: number) => () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Request a render frame. The layer will clear once, then call all registered draw callbacks in order.
|
|
19
|
+
*/
|
|
20
|
+
requestRender: () => void;
|
|
21
|
+
}
|
|
22
|
+
export interface UseWebGLLayerValue {
|
|
23
|
+
gl: WebGL2RenderingContext;
|
|
24
|
+
registerDraw: (drawRef: React.RefObject<(() => void) | null>) => () => void;
|
|
25
|
+
requestRender: () => void;
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
export type DrawEntry = {
|
|
3
|
+
drawRef: React.RefObject<(() => void) | null>;
|
|
4
|
+
order: number;
|
|
5
|
+
};
|
|
6
|
+
export interface ChartsWebGLContextValue {
|
|
7
|
+
gl: WebGL2RenderingContext;
|
|
8
|
+
/**
|
|
9
|
+
* Register a draw callback ref. Returns an unregister function.
|
|
10
|
+
* Callbacks are sorted by the provided `order` number so z-order follows the children's position
|
|
11
|
+
* in `ChartsWebGLLayer`, stable across unmount/remount (e.g. toggled via series visibility).
|
|
12
|
+
* @param {React.RefObject} drawRef A ref object whose current property is a draw callback function. The callback will be called with the WebGL context already set to this layer's canvas. Set to null to temporarily disable drawing without unregistering.
|
|
13
|
+
* @param {number} order Z-order index. Lower values draw first (behind higher values).
|
|
14
|
+
* @returns {Function} Unregister function to remove the draw callback from the layer.
|
|
15
|
+
*/
|
|
16
|
+
registerDraw: (drawRef: React.RefObject<(() => void) | null>, order: number) => () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Request a render frame. The layer will clear once, then call all registered draw callbacks in order.
|
|
19
|
+
*/
|
|
20
|
+
requestRender: () => void;
|
|
21
|
+
}
|
|
22
|
+
export interface UseWebGLLayerValue {
|
|
23
|
+
gl: WebGL2RenderingContext;
|
|
24
|
+
registerDraw: (drawRef: React.RefObject<(() => void) | null>) => () => void;
|
|
25
|
+
requestRender: () => void;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Provides the z-order index for a plot based on its position in `ChartsWebGLLayer`'s children.
|
|
4
|
+
* `useWebGLLayer` reads this and auto-binds it to `registerDraw` so consumers don't pass it manually.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ChartsWebGLOrderContext: React.Context<number>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Provides the z-order index for a plot based on its position in `ChartsWebGLLayer`'s children.
|
|
4
|
+
* `useWebGLLayer` reads this and auto-binds it to `registerDraw` so consumers don't pass it manually.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ChartsWebGLOrderContext: React.Context<number>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.ChartsWebGLOrderContext = void 0;
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
/**
|
|
11
|
+
* Provides the z-order index for a plot based on its position in `ChartsWebGLLayer`'s children.
|
|
12
|
+
* `useWebGLLayer` reads this and auto-binds it to `registerDraw` so consumers don't pass it manually.
|
|
13
|
+
*/
|
|
14
|
+
const ChartsWebGLOrderContext = exports.ChartsWebGLOrderContext = /*#__PURE__*/React.createContext(0);
|
|
15
|
+
if (process.env.NODE_ENV !== "production") ChartsWebGLOrderContext.displayName = "ChartsWebGLOrderContext";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Provides the z-order index for a plot based on its position in `ChartsWebGLLayer`'s children.
|
|
7
|
+
* `useWebGLLayer` reads this and auto-binds it to `registerDraw` so consumers don't pass it manually.
|
|
8
|
+
*/
|
|
9
|
+
export const ChartsWebGLOrderContext = /*#__PURE__*/React.createContext(0);
|
|
10
|
+
if (process.env.NODE_ENV !== "production") ChartsWebGLOrderContext.displayName = "ChartsWebGLOrderContext";
|
|
@@ -9,7 +9,7 @@ exports.HeatmapPlotPremium = HeatmapPlotPremium;
|
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
11
|
var _internals = require("@mui/x-charts-pro/internals");
|
|
12
|
-
var
|
|
12
|
+
var _HeatmapWebGLPlot = require("./webgl/HeatmapWebGLPlot");
|
|
13
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
14
|
const _excluded = ["renderer", "borderRadius"];
|
|
15
15
|
function HeatmapPlotPremium(_ref) {
|
|
@@ -19,7 +19,7 @@ function HeatmapPlotPremium(_ref) {
|
|
|
19
19
|
} = _ref,
|
|
20
20
|
props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
|
|
21
21
|
if (renderer === 'webgl') {
|
|
22
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
22
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_HeatmapWebGLPlot.HeatmapWebGLPlot, {
|
|
23
23
|
borderRadius: borderRadius
|
|
24
24
|
});
|
|
25
25
|
}
|
|
@@ -4,7 +4,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
4
4
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
5
5
|
const _excluded = ["renderer", "borderRadius"];
|
|
6
6
|
import { HeatmapSVGPlot } from '@mui/x-charts-pro/internals';
|
|
7
|
-
import {
|
|
7
|
+
import { HeatmapWebGLPlot } from "./webgl/HeatmapWebGLPlot.mjs";
|
|
8
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
9
|
export function HeatmapPlotPremium(_ref) {
|
|
10
10
|
let {
|
|
@@ -13,7 +13,7 @@ export function HeatmapPlotPremium(_ref) {
|
|
|
13
13
|
} = _ref,
|
|
14
14
|
props = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
15
15
|
if (renderer === 'webgl') {
|
|
16
|
-
return /*#__PURE__*/_jsx(
|
|
16
|
+
return /*#__PURE__*/_jsx(HeatmapWebGLPlot, {
|
|
17
17
|
borderRadius: borderRadius
|
|
18
18
|
});
|
|
19
19
|
}
|
|
@@ -345,6 +345,7 @@ process.env.NODE_ENV !== "production" ? HeatmapPremium.propTypes = {
|
|
|
345
345
|
tickSize: _propTypes.default.number,
|
|
346
346
|
tickSpacing: _propTypes.default.number,
|
|
347
347
|
valueFormatter: _propTypes.default.func,
|
|
348
|
+
valueGetter: _propTypes.default.func,
|
|
348
349
|
zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
|
|
349
350
|
filterMode: _propTypes.default.oneOf(['discard', 'keep']),
|
|
350
351
|
maxEnd: _propTypes.default.number,
|
|
@@ -425,6 +426,7 @@ process.env.NODE_ENV !== "production" ? HeatmapPremium.propTypes = {
|
|
|
425
426
|
tickSize: _propTypes.default.number,
|
|
426
427
|
tickSpacing: _propTypes.default.number,
|
|
427
428
|
valueFormatter: _propTypes.default.func,
|
|
429
|
+
valueGetter: _propTypes.default.func,
|
|
428
430
|
width: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
|
|
429
431
|
zoom: _propTypes.default.oneOfType([_propTypes.default.shape({
|
|
430
432
|
filterMode: _propTypes.default.oneOf(['discard', 'keep']),
|
|
@@ -465,7 +467,8 @@ process.env.NODE_ENV !== "production" ? HeatmapPremium.propTypes = {
|
|
|
465
467
|
dataKey: _propTypes.default.string,
|
|
466
468
|
id: _propTypes.default.string,
|
|
467
469
|
max: _propTypes.default.number,
|
|
468
|
-
min: _propTypes.default.number
|
|
470
|
+
min: _propTypes.default.number,
|
|
471
|
+
valueGetter: _propTypes.default.func
|
|
469
472
|
})),
|
|
470
473
|
/**
|
|
471
474
|
* The list of zoom data related to each axis.
|
|
@@ -338,6 +338,7 @@ process.env.NODE_ENV !== "production" ? HeatmapPremium.propTypes = {
|
|
|
338
338
|
tickSize: PropTypes.number,
|
|
339
339
|
tickSpacing: PropTypes.number,
|
|
340
340
|
valueFormatter: PropTypes.func,
|
|
341
|
+
valueGetter: PropTypes.func,
|
|
341
342
|
zoom: PropTypes.oneOfType([PropTypes.shape({
|
|
342
343
|
filterMode: PropTypes.oneOf(['discard', 'keep']),
|
|
343
344
|
maxEnd: PropTypes.number,
|
|
@@ -418,6 +419,7 @@ process.env.NODE_ENV !== "production" ? HeatmapPremium.propTypes = {
|
|
|
418
419
|
tickSize: PropTypes.number,
|
|
419
420
|
tickSpacing: PropTypes.number,
|
|
420
421
|
valueFormatter: PropTypes.func,
|
|
422
|
+
valueGetter: PropTypes.func,
|
|
421
423
|
width: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number]),
|
|
422
424
|
zoom: PropTypes.oneOfType([PropTypes.shape({
|
|
423
425
|
filterMode: PropTypes.oneOf(['discard', 'keep']),
|
|
@@ -458,7 +460,8 @@ process.env.NODE_ENV !== "production" ? HeatmapPremium.propTypes = {
|
|
|
458
460
|
dataKey: PropTypes.string,
|
|
459
461
|
id: PropTypes.string,
|
|
460
462
|
max: PropTypes.number,
|
|
461
|
-
min: PropTypes.number
|
|
463
|
+
min: PropTypes.number,
|
|
464
|
+
valueGetter: PropTypes.func
|
|
462
465
|
})),
|
|
463
466
|
/**
|
|
464
467
|
* The list of zoom data related to each axis.
|
|
@@ -10,24 +10,25 @@ exports.HeatmapWebGLPlot = HeatmapWebGLPlot;
|
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _hooks = require("@mui/x-charts/hooks");
|
|
12
12
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
13
|
-
var
|
|
13
|
+
var _ChartsWebGLContext = require("../../ChartsWebGLLayer/ChartsWebGLContext");
|
|
14
14
|
var _hooks2 = require("../../hooks");
|
|
15
15
|
var _shaders = require("./shaders");
|
|
16
|
-
var _useWebGLResizeObserver = require("../../utils/webgl/useWebGLResizeObserver");
|
|
17
16
|
var _utils = require("../../utils/webgl/utils");
|
|
18
17
|
var _useHeatmapPlotData = require("./useHeatmapPlotData");
|
|
19
18
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
20
19
|
function HeatmapWebGLPlot({
|
|
21
20
|
borderRadius
|
|
22
21
|
}) {
|
|
23
|
-
const
|
|
22
|
+
const layer = (0, _ChartsWebGLContext.useWebGLLayer)();
|
|
24
23
|
const series = (0, _hooks2.useHeatmapSeriesContext)();
|
|
25
24
|
const seriesToDisplay = series?.series[series.seriesOrder[0]];
|
|
26
|
-
if (!
|
|
25
|
+
if (!layer || !seriesToDisplay) {
|
|
27
26
|
return null;
|
|
28
27
|
}
|
|
29
28
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(HeatmapWebGLPlotImpl, {
|
|
30
|
-
gl: gl,
|
|
29
|
+
gl: layer.gl,
|
|
30
|
+
registerDraw: layer.registerDraw,
|
|
31
|
+
requestRender: layer.requestRender,
|
|
31
32
|
borderRadius: borderRadius ?? 0,
|
|
32
33
|
series: seriesToDisplay
|
|
33
34
|
});
|
|
@@ -35,6 +36,8 @@ function HeatmapWebGLPlot({
|
|
|
35
36
|
function HeatmapWebGLPlotImpl(props) {
|
|
36
37
|
const {
|
|
37
38
|
gl,
|
|
39
|
+
registerDraw,
|
|
40
|
+
requestRender,
|
|
38
41
|
borderRadius,
|
|
39
42
|
series
|
|
40
43
|
} = props;
|
|
@@ -49,21 +52,16 @@ function HeatmapWebGLPlotImpl(props) {
|
|
|
49
52
|
});
|
|
50
53
|
const [quadBuffer] = React.useState(() => (0, _utils.uploadQuadBuffer)(gl));
|
|
51
54
|
const dataLength = series.data.length;
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
renderScheduledRef.current = true;
|
|
63
|
-
}, []);
|
|
64
|
-
|
|
65
|
-
// On resize render directly to avoid a frame where the canvas is blank
|
|
66
|
-
(0, _useWebGLResizeObserver.useWebGLResizeObserver)(render);
|
|
55
|
+
const drawRef = React.useRef(null);
|
|
56
|
+
React.useEffect(() => {
|
|
57
|
+
drawRef.current = () => {
|
|
58
|
+
gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, dataLength);
|
|
59
|
+
};
|
|
60
|
+
}, [gl, dataLength]);
|
|
61
|
+
React.useEffect(() => {
|
|
62
|
+
const unregister = registerDraw(drawRef);
|
|
63
|
+
return unregister;
|
|
64
|
+
}, [registerDraw]);
|
|
67
65
|
React.useEffect(() => {
|
|
68
66
|
/* Enable blending for transparency
|
|
69
67
|
* These are global to the WebGL context and need to be set only once */
|
|
@@ -160,26 +158,21 @@ function HeatmapWebGLPlotImpl(props) {
|
|
|
160
158
|
} else {
|
|
161
159
|
setupBorderRadiusUniform();
|
|
162
160
|
}
|
|
163
|
-
|
|
164
|
-
}, [gl, program,
|
|
161
|
+
requestRender();
|
|
162
|
+
}, [gl, program, requestRender, seriesBorderRadius, setupBorderRadiusUniform,
|
|
165
163
|
// We use the event callback versions here because we only want this effect to trigger when the border radius changes
|
|
166
164
|
setupAttributesEvent, setupUniformsEvent, vertexShader]);
|
|
167
165
|
React.useEffect(() => {
|
|
168
166
|
setupResolutionUniform();
|
|
169
|
-
|
|
170
|
-
}, [setupResolutionUniform,
|
|
167
|
+
requestRender();
|
|
168
|
+
}, [setupResolutionUniform, requestRender]);
|
|
171
169
|
React.useEffect(() => {
|
|
172
170
|
setupRectDimensionsUniform();
|
|
173
|
-
|
|
174
|
-
}, [setupRectDimensionsUniform,
|
|
171
|
+
requestRender();
|
|
172
|
+
}, [setupRectDimensionsUniform, requestRender]);
|
|
175
173
|
React.useEffect(() => {
|
|
176
174
|
setupAttributes();
|
|
177
|
-
|
|
178
|
-
}, [
|
|
179
|
-
React.useEffect(() => {
|
|
180
|
-
if (renderScheduledRef.current) {
|
|
181
|
-
render();
|
|
182
|
-
}
|
|
183
|
-
});
|
|
175
|
+
requestRender();
|
|
176
|
+
}, [requestRender, setupAttributes]);
|
|
184
177
|
return null;
|
|
185
178
|
}
|