use dominator::{html, Dom};
use dwind::flexbox_and_grid::*;
use dwind::sizing::*;
use dwind::typography::*;
use futures_signals::signal::{option, SignalExt};
use futures_signals_component_macro::component;
#[derive(Clone, Copy, Eq, PartialEq)]
pub enum TextSize {
Base,
Large,
ExtraLarge,
}
#[component(render_fn = heading)]
struct Heading {
#[signal]
content: Dom,
#[signal]
#[default(TextSize::ExtraLarge)]
text_size: TextSize,
}
pub fn heading(props: HeadingProps) -> Dom {
let HeadingProps {
content,
text_size: size,
apply,
} = props;
let size = size.broadcast();
html!("div", {
.apply_if(apply.is_some(), |b| b.apply(apply.unwrap()))
.dwclass!("w-auto font-semibold h-12 align-items-center flex")
.child(html!("h1", {
.dwclass_signal!("text-base", size.signal().eq(TextSize::Base))
.dwclass_signal!("text-l", size.signal().eq(TextSize::Large))
.dwclass_signal!("text-xl", size.signal().eq(TextSize::ExtraLarge))
.dwclass!("w-auto font-semibold")
.child_signal(option(content))
}))
})
}