From 88e88957ded6f7183676b6b6b63a0042fcafe9ee Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Thu, 16 Jul 2026 01:16:43 -0700 Subject: [PATCH] fix(core): ignore synthetic mousemove events without coordinates in side menu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A mousemove created via `new Event("mousemove")` (e.g. dispatched by a browser extension) is a plain Event with no `clientX`/`clientY`. The side menu's document-level listener stored the resulting `undefined` coordinates, and `document.elementsFromPoint()` then threw "TypeError: The provided double value is non-finite" in `getBlockFromCoords` — including on read-only editors, since the `isEditable` check only runs after the coordinate lookup. Ignore mousemove events whose coordinates are not finite numbers. --- packages/core/src/extensions/SideMenu/SideMenu.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/core/src/extensions/SideMenu/SideMenu.ts b/packages/core/src/extensions/SideMenu/SideMenu.ts index 76d1983476..e5572c004c 100644 --- a/packages/core/src/extensions/SideMenu/SideMenu.ts +++ b/packages/core/src/extensions/SideMenu/SideMenu.ts @@ -600,6 +600,14 @@ export class SideMenuView< return; } + // Synthetic mousemove events created via `new Event("mousemove")` (e.g. + // dispatched by browser extensions) have no `clientX`/`clientY`, which + // would make `elementsFromPoint` throw on the resulting non-finite + // coordinates. + if (!Number.isFinite(event.clientX) || !Number.isFinite(event.clientY)) { + return; + } + this.mousePos = { x: event.clientX, y: event.clientY }; // We want the full area of the editor to check if the cursor is hovering