()
| 1264 | canvas.addEventListener('pointerup', onPointerUp, { passive: true }); |
| 1265 | |
| 1266 | const dispose = (): void => { |
| 1267 | if (disposed) return; |
| 1268 | disposed = true; |
| 1269 | |
| 1270 | try { |
| 1271 | // Requirement: dispose order: cancel RAF, coordinator.dispose(), gpuContext.destroy(), remove canvas. |
| 1272 | cancelPendingFrame(); |
| 1273 | disposeDataZoomUi(); |
| 1274 | unbindCoordinatorInteractionXChange(); |
| 1275 | coordinator?.dispose(); |
| 1276 | coordinator = null; |
| 1277 | coordinatorTargetFormat = null; |
| 1278 | gpuContext?.destroy(); |
| 1279 | } finally { |
| 1280 | tapCandidate = null; |
| 1281 | suppressNextLostPointerCaptureId = null; |
| 1282 | hovered = null; |
| 1283 | interactionScalesCache = null; |
| 1284 | |
| 1285 | canvas.removeEventListener('pointermove', onPointerMove); |
| 1286 | canvas.removeEventListener('pointerleave', onPointerLeave); |
| 1287 | canvas.removeEventListener('pointercancel', onPointerCancel); |
| 1288 | canvas.removeEventListener('lostpointercapture', onLostPointerCapture); |
| 1289 | canvas.removeEventListener('pointerdown', onPointerDown); |
| 1290 | canvas.removeEventListener('pointerup', onPointerUp); |
| 1291 | |
| 1292 | listeners.click.clear(); |
| 1293 | listeners.mouseover.clear(); |
| 1294 | listeners.mouseout.clear(); |
| 1295 | listeners.crosshairMove.clear(); |
| 1296 | |
| 1297 | gpuContext = null; |
| 1298 | canvas.remove(); |
| 1299 | } |
| 1300 | }; |
| 1301 | |
| 1302 | const instance: ChartGPUInstance = { |
| 1303 | get options() { |
no test coverage detected