textiler_core/hooks/
use_sx.rs

1use stylist::Style;
2use yew::{hook, use_memo};
3
4use crate::hooks::{use_mode, use_style_manager, use_theme};
5use crate::theme::sx::{Sx, SxRef};
6use crate::theme::Theme;
7
8#[hook]
9pub fn use_sx<Source>(source: Source) -> SxRef
10where
11    Source: Into<Sx>,
12{
13    let ctx = use_theme();
14    let (mode, ..) = use_mode();
15    let manager = use_style_manager();
16
17    let sx = source.into();
18    let css = use_memo((sx, ctx, mode), |(sx, ctx, mode)| {
19        let theme: &Theme = &*ctx;
20        debug!(
21            "creating css fron sx:{sx:#?} using theme {} with mode {mode:?}",
22            theme.prefix
23        );
24        sx.clone().to_css(mode, theme)
25    });
26
27    let style = Style::new_with_manager((*css).clone(), &*manager).expect("could not create style");
28    SxRef::new(style)
29}