Skip to main content

lepticons_animate/
easing.rs

1use std::fmt;
2
3/// CSS transition timing function for stroke draw-in animation.
4///
5/// # Example
6///
7/// ```rust,ignore
8/// use lepticons_animate::{DrawIcon, Easing};
9/// use lepticons::LucideGlyph;
10///
11/// <DrawIcon glyph=LucideGlyph::Check easing=Easing::EaseOut />
12/// ```
13#[derive(Default, Clone, Copy, Debug, PartialEq, Eq, Hash)]
14pub enum Easing {
15    /// Constant speed (`linear`).
16    Linear,
17    /// Browser default curve (`ease`).
18    Ease,
19    /// Starts slow, accelerates (`ease-in`).
20    EaseIn,
21    /// Starts fast, decelerates (`ease-out`).
22    EaseOut,
23    /// Slow start and end, fast middle (`ease-in-out`).
24    #[default]
25    EaseInOut,
26}
27
28impl fmt::Display for Easing {
29    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30        f.write_str(self.as_css())
31    }
32}
33
34impl Easing {
35    /// Returns the CSS `transition-timing-function` value.
36    pub const fn as_css(&self) -> &'static str {
37        match self {
38            Easing::Linear => "linear",
39            Easing::Ease => "ease",
40            Easing::EaseIn => "ease-in",
41            Easing::EaseOut => "ease-out",
42            Easing::EaseInOut => "ease-in-out",
43        }
44    }
45}