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}