diff --git a/ui/src/lib/components/ListeningMode.svelte b/ui/src/lib/components/ListeningMode.svelte index 9155d0d..d20a754 100644 --- a/ui/src/lib/components/ListeningMode.svelte +++ b/ui/src/lib/components/ListeningMode.svelte @@ -31,6 +31,15 @@ let isDragging = $state(false); let dragStartY = 0; let dragStartTime = 0; + let overlayEl = $state(null); + + // Register ontouchmove with passive:false so e.preventDefault() works. + // Svelte 5 does not support the |nonpassive modifier, so we use $effect. + $effect(() => { + if (!overlayEl) return; + overlayEl.addEventListener('touchmove', onTouchMove, { passive: false }); + return () => overlayEl!.removeEventListener('touchmove', onTouchMove); + }); function onTouchStart(e: TouchEvent) { // Don't hijack touches that start inside a scrollable element @@ -238,6 +247,7 @@