diff --git a/src/app/components/SpeechBanner.svelte b/src/app/components/SpeechBanner.svelte
index b32c0324..43a9c0b2 100644
--- a/src/app/components/SpeechBanner.svelte
+++ b/src/app/components/SpeechBanner.svelte
@@ -9,7 +9,7 @@
import Banner from "@app/components/Banner.svelte"
import {speech, stopSpeech} from "@app/speech"
- let audio: HTMLAudioElement
+ let audio: HTMLAudioElement | undefined = $state()
let playing = $state(false)
let currentTime = $state(0)
let duration = $state(0)
@@ -18,12 +18,7 @@
// length rather than rendering a range with no end.
const scrubbable = $derived(Number.isFinite(duration) ? duration : 0)
- const toggle = () => (playing ? audio.pause() : audio.play())
-
- const scrub = (event: Event & {currentTarget: HTMLInputElement}) => {
- audio.currentTime = Number(event.currentTarget.value)
- currentTime = audio.currentTime
- }
+ const toggle = () => (playing ? audio?.pause() : audio?.play())
const display = (seconds: number) => {
const whole = Math.floor(seconds)
@@ -37,13 +32,13 @@
{#if $speech.src}
+ onended={() => (playing = false)}>
+ bind:value={currentTime} />
{display(currentTime)} / {display(scrubbable)}
{/if}