use crate::{class::Class, format_class};
use dioxus::prelude::*;
use std::borrow::Cow;
pub fn FormFieldContainer<'a>(cx: Scope<'a, FormFieldContainerProps<'a>>) -> Element {
let class = format_class!(cx, "field is-horizontal");
let field_label_class = format_class!(cx, field_label_class, "field-label");
let field_body_class = format_class!(cx, field_body_class, "field-body");
let label_class = format_class!(cx, label_class, "label");
render! {
div {
class: "{class}",
div {
class: "{field_label_class}",
label {
class: "{label_class}",
"{cx.props.label}"
}
}
div {
class: "{field_body_class}",
&cx.props.children
}
}
}
}
#[derive(Props)]
pub struct FormFieldContainerProps<'a> {
#[props(into)]
pub class: Option<Class<'a>>,
#[props(into)]
pub field_label_class: Option<Class<'a>>,
#[props(into)]
pub field_body_class: Option<Class<'a>>,
#[props(into)]
pub label_class: Option<Class<'a>>,
#[props(into)]
pub label: Cow<'a, str>,
children: Element<'a>,
}
pub fn FormField<'a>(cx: Scope<'a, FormFieldProps<'a>>) -> Element {
let class = format_class!(cx, "field");
let control_class = format_class!(cx, control_class, "control");
render! {
div {
class: "{class}",
div {
class: "{control_class}",
&cx.props.children
}
}
}
}
#[derive(Props)]
pub struct FormFieldProps<'a> {
#[props(into)]
pub class: Option<Class<'a>>,
#[props(into)]
pub control_class: Option<Class<'a>>,
children: Element<'a>,
}
pub fn FormGroup<'a>(cx: Scope<'a, FormGroupProps<'a>>) -> Element {
let class = format_class!(cx, "field is-grouped");
render! {
div {
class: "{class}",
&cx.props.children
}
}
}
#[derive(Props)]
pub struct FormGroupProps<'a> {
#[props(into)]
pub class: Option<Class<'a>>,
#[props(into)]
pub control_class: Option<Class<'a>>,
children: Element<'a>,
}