Skip to main content

glassy_ui/motion/
variants.rs

1use std::collections::HashMap;
2
3use gpui::SharedString;
4
5use super::style::MotionStyle;
6
7/// Named style sets (motion.dev variants).
8///
9/// ```ignore
10/// let variants = Variants::new()
11///     .set("hidden", MotionStyle::new().opacity(0.).y(px(12.)))
12///     .set("visible", MotionStyle::new().opacity(1.).y(px(0.)))
13///     .set("exit", MotionStyle::new().opacity(0.).y(px(-12.)));
14///
15/// Motion::new().variants(variants).initial_variant("hidden").animate_variant("visible")
16/// ```
17#[derive(Clone, Default)]
18pub struct Variants {
19    map: HashMap<SharedString, MotionStyle>,
20}
21
22impl Variants {
23    pub fn new() -> Self {
24        Self::default()
25    }
26
27    pub fn set(mut self, name: impl Into<SharedString>, style: MotionStyle) -> Self {
28        self.map.insert(name.into(), style);
29        self
30    }
31
32    pub fn get(&self, name: &str) -> Option<MotionStyle> {
33        self.map.get(name).copied()
34    }
35}