use teksilo_tokens::{ColorTokens, LayoutTokens, MotionTokens, ShapeTokens, TypographyTokens};
use crate::styles::{ComponentStyleSlots, Theme, ThemeAppearance, ThemeExtensions, ThemeId};
pub fn light() -> Theme {
Theme {
id: ThemeId::new("intui.light"),
appearance: ThemeAppearance::Light,
colors: ColorTokens::light_default(),
layout: LayoutTokens::default(),
typography: TypographyTokens::default(),
shape: ShapeTokens::light_default(),
motion: MotionTokens::default(),
style_slots: ComponentStyleSlots::default(),
extensions: ThemeExtensions::new(),
}
}
pub fn dark() -> Theme {
Theme {
id: ThemeId::new("intui.dark"),
appearance: ThemeAppearance::Dark,
colors: ColorTokens::dark_default(),
layout: LayoutTokens::default(),
typography: TypographyTokens::default(),
shape: ShapeTokens::dark_default(),
motion: MotionTokens::default(),
style_slots: ComponentStyleSlots::default(),
extensions: ThemeExtensions::new(),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn light_reports_light_appearance() {
assert_eq!(light().appearance, ThemeAppearance::Light);
assert!(light().appearance.is_light());
assert!(!light().is_dark());
}
#[test]
fn dark_reports_dark_appearance() {
assert_eq!(dark().appearance, ThemeAppearance::Dark);
assert!(dark().appearance.is_dark());
assert!(dark().is_dark());
}
#[test]
fn light_and_dark_have_distinct_surfaces() {
assert_ne!(light().colors.surface_main, dark().colors.surface_main);
}
#[test]
fn dark_shadows_are_stronger_than_light() {
let l = light();
let d = dark();
assert!(d.shape.shadow_lg.color.a() > l.shape.shadow_lg.color.a());
}
}