use freya_core::prelude::{
State,
provide_context,
try_consume_context,
use_consume,
use_hook,
};
use crate::theming::{
component_themes::Theme,
themes::LIGHT_THEME,
};
pub fn use_init_theme(theme_cb: impl FnOnce() -> Theme) -> State<Theme> {
use_hook(|| {
let state = State::create(theme_cb());
provide_context(state);
state
})
}
pub fn use_init_default_theme() -> State<Theme> {
use_init_theme(|| LIGHT_THEME)
}
pub fn use_theme() -> State<Theme> {
use_consume::<State<Theme>>()
}
pub fn get_theme_or_default() -> Theme {
try_consume_context::<State<Theme>>()
.map(|theme| theme.read().to_owned())
.unwrap_or_default()
}
#[derive(Clone, Copy, PartialEq, Debug, Default)]
pub enum SurfaceThemeIndicator {
#[default]
Primary,
Opposite,
}
pub fn use_init_surface_theme_indicator(theme: impl FnOnce() -> SurfaceThemeIndicator) {
use_hook(|| provide_context(theme()))
}
pub fn use_surface_theme_indicator() -> SurfaceThemeIndicator {
use_hook(|| try_consume_context().unwrap_or_default())
}