1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use crate::{use_spring_ref, UseSpringRef};
use dioxus::prelude::*;
use interpolation::Lerp;

/// Hook to create an animated signal from an initial value.
pub fn use_spring_signal<V>(from: V) -> (Signal<V>, UseSpringRef<V>)
where
    V: PartialEq + Lerp<Scalar = f32> + Clone + 'static,
{
    let from_clone = from.clone();
    let mut output = use_signal(move || from_clone);

    let spring_ref = use_spring_ref(from, move |value| {
        output.set(value)
    });

    (output, spring_ref)
}