llimphi-widget-timeline — barra de progreso/scrub clickeable.
Pattern análogo a llimphi-widget-slider/-progress: el widget no
mantiene estado. El caller guarda la posición actual en su Model,
le pasa la fracción de avance (0.0..=1.0 = posición/duración) y un
handler Fn(f32) -> Option<Msg> que recibe la fracción donde el
usuario clickeó (scrub absoluto, estilo VLC). El widget no sabe de
tiempo ni de duración: sólo pinta el avance y reporta dónde se clickeó
como fracción del ancho de la barra (on_click_at). Quien mapea esa
fracción a un seek concreto es la app.
[ ██████████▏░░░░░░░░░░░░ ]
recorrido playhead resto
Uso típico (reproductor):
let frac = pos.as_secs_f64() / dur.as_secs_f64();
timeline_view(frac as f32, &TimelinePalette::default(), |f| {
Some(Msg::Command(MediaCommand::SeekTo { fraction: f }))
})