diff --git a/frontend/src/components/widgets/inputs/NumberInput.svelte b/frontend/src/components/widgets/inputs/NumberInput.svelte index 82a48a497d..d88c7ae235 100644 --- a/frontend/src/components/widgets/inputs/NumberInput.svelte +++ b/frontend/src/components/widgets/inputs/NumberInput.svelte @@ -325,7 +325,15 @@ if (alreadyActedGuard) return; alreadyActedGuard = true; isDragging = true; - beginDrag(e); + + // We begin dragging if the target supports pointer lock. + // We need to request pointer lock as immediately as possible for Safari compatibility. + const target = e.target || undefined; + if (target instanceof HTMLElement) { + target.requestPointerLock(); + beginDrag(); + } + removeEventListener("pointermove", onMove); }; // If it's a mouseup, we'll begin editing the text field. @@ -340,13 +348,7 @@ addEventListener("pointerup", onUp); } - function beginDrag(e: PointerEvent) { - // Get the click target - const target = e.target || undefined; - if (!(target instanceof HTMLElement)) return; - - // Enter dragging state - target.requestPointerLock(); + function beginDrag() { initialValueBeforeDragging = value; cumulativeDragDelta = 0;