orbital-theme 0.1.1

Theme provider and design tokens for Orbital
Documentation
use crate::{BrandPalette, ElevationScale};

impl Default for ThemeOptions {
    fn default() -> Self {
        Self {
            density: Density::Default,
            direction: Direction::Ltr,
            brand: None,
            elevation: ElevationScale::default(),
        }
    }
}

#[derive(Clone, Debug)]
pub struct ThemeOptions {
    pub density: Density,
    pub direction: Direction,
    pub brand: Option<BrandPalette>,
    pub elevation: ElevationScale,
}

#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum Density {
    Compact,
    #[default]
    Default,
    Spacious,
}

impl Density {
    pub fn spacing_multiplier(self) -> f32 {
        match self {
            Self::Compact => 0.875,
            Self::Default => 1.0,
            Self::Spacious => 1.125,
        }
    }

    pub fn font_size_multiplier(self) -> f32 {
        match self {
            Self::Compact => 0.9375,
            Self::Default => 1.0,
            Self::Spacious => 1.0625,
        }
    }
}

#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum Direction {
    #[default]
    Ltr,
    Rtl,
}

impl Direction {
    pub fn as_str(self) -> &'static str {
        match self {
            Self::Ltr => "ltr",
            Self::Rtl => "rtl",
        }
    }
}