{#snippet voiceRow(v: import('$lib/types').Voice)}
{audioStore.errorMsg || 'Failed to load audio.'}
{/if}{m.reader_play_narration()}
{m.reader_voice_applies_next()} {#if voices.length > 0} { e.preventDefault(); fetch('/api/audio/voice-samples', { method: 'POST' }).catch(() => {}); }} >{m.reader_generate_samples()} {/if}
{m.reader_voice_applies_next()} {#if voices.length > 0} { e.preventDefault(); fetch('/api/audio/voice-samples', { method: 'POST' }).catch(() => {}); }} >{m.reader_generate_samples()} {/if}
{m.reader_generating_narration()}
{Math.round(audioStore.progress)}%
{m.reader_now_playing({ title: audioStore.chapterTitle || `Ch.${audioStore.chapter}` })}
No chapters match "{chapterSearch}"
{/if}