Context
Brief §5.5.9: a waveform-accurate seek bar. The ingest pipeline already computes downsampled peak tiers per track — this issue is the rendering and interaction layer that upgrades the standard seek bar in the expanded now-playing view.
Scope
- Peak data client path: fetch the appropriate downsample tier for the rendered width (cached, tiny — a few KB), including for offline-downloaded tracks (peaks bundled with downloads).
- Renderer: canvas waveform in brand-gradient fill — played portion vs remaining, buffered-ranges overlay, hover/touch scrub preview with time tooltip; crisp at all DPRs; falls back to the standard slider when peaks are missing (embed-type or legacy tracks).
- Interaction: pointer + keyboard seek (same slider semantics/ARIA as the standard bar — it is the same component contract, §7.4), long-track zoom (audiobook-length assets), no segment fetches until seek commit (cost rule from player-ui).
- Integration: swaps into the expanded view slot; mini-player keeps the compact bar.
Acceptance criteria
Technical notes
Keep the renderer stateless over (peaks, duration, position, buffered) — the same component draws playlist-row micro-waveforms later if wanted.
Dependencies
Depends on #22, #27, #42 (bundled peaks).
Context
Brief §5.5.9: a waveform-accurate seek bar. The ingest pipeline already computes downsampled peak tiers per track — this issue is the rendering and interaction layer that upgrades the standard seek bar in the expanded now-playing view.
Scope
Acceptance criteria
Technical notes
Keep the renderer stateless over (peaks, duration, position, buffered) — the same component draws playlist-row micro-waveforms later if wanted.
Dependencies
Depends on #22, #27, #42 (bundled peaks).