use super::*;
impl EuvSliderHelpers {
pub fn percent(value: f64, min: f64, max: f64) -> f64 {
if max <= min {
return 0.0;
}
let ratio: f64 = (value - min) / (max - min);
let clamped: f64 = ratio.clamp(0.0, 1.0);
clamped * PERCENT_SCALE
}
pub fn on_slider_input(signal: Signal<f64>, min: f64, max: f64) -> Option<Rc<dyn Fn(Event)>> {
Some(Rc::new(move |event: Event| {
let raw: Option<f64> = event.target().and_then(|target: EventTarget| {
if let Ok(input) = target.dyn_into::<HtmlInputElement>() {
return input.value().parse::<f64>().ok();
}
None
});
if let Some(parsed) = raw {
signal.set(parsed.clamp(min, max));
}
}))
}
}