canonrs-server 0.1.0

CanonRS server-side rendering support
use leptos::prelude::*;
use canonrs_core::infra::uid::generate;
use canonrs_core::primitives::layout::stack::{StackPrimitive as Stack, StackDirection, StackGap};

#[component]
pub fn FormFieldBlock(
    #[prop(optional)] label: Option<ChildrenFn>,
    #[prop(optional)] input: Option<ChildrenFn>,
    #[prop(optional)] hint: Option<ChildrenFn>,
    #[prop(optional)] error: Option<ChildrenFn>,
    #[prop(into, default = String::new())] class: String,
) -> impl IntoView {
    let uid   = generate("bl");
    let label = StoredValue::new(label);
    let input = StoredValue::new(input);
    let hint  = StoredValue::new(hint);
    let error = StoredValue::new(error);
    view! {
        <div data-rs-form-field="" data-rs-uid=uid role="group" class=class>
            <Stack direction=StackDirection::Vertical gap=StackGap::Xs>
                {move || label.get_value().map(|l| view! { <div data-rs-region="label">{l()}</div> })}
                {move || input.get_value().map(|i| view! { <div data-rs-region="input">{i()}</div> })}
                {move || hint.get_value().map(|h| view! { <div data-rs-region="hint">{h()}</div> })}
                {move || error.get_value().map(|e| view! { <div data-rs-region="error" role="alert">{e()}</div> })}
            </Stack>
        </div>
    }
}