textiler_core/hooks/
use_sx.rs1use 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}