mod grid_form;
use crate::controls::{
button::ButtonData, checkbox::CheckboxData, heading::HeadingData, hidden::HiddenData,
output::OutputData, radio_buttons::RadioButtonsData, select::SelectData, slider::SliderData,
spacer::SpacerData, stepper::StepperData, submit::SubmitData, text_area::TextAreaData,
text_input::TextInputData, ControlRenderData, ValidationState,
};
pub use grid_form::{GFStyleAttr, GridFormStyle};
use leptos::{
prelude::{AnyView, Signal},
reactive::wrappers::write::SignalSetter,
};
pub trait FormStyle: Send + Sync + 'static {
type StylingAttributes: Send + Sync + Clone;
fn form_frame(&self, form: ControlRenderData<Self, AnyView>) -> AnyView;
fn custom_component(&self, style: &[Self::StylingAttributes], inner: AnyView) -> AnyView;
fn group(&self, group: ControlRenderData<Self, AnyView>) -> AnyView;
fn spacer(&self, control: ControlRenderData<Self, SpacerData>) -> AnyView;
fn heading(
&self,
control: ControlRenderData<Self, HeadingData>,
value_getter: Option<Signal<String>>,
) -> AnyView;
fn submit(
&self,
control: ControlRenderData<Self, SubmitData>,
value_getter: Option<Signal<String>>,
) -> AnyView;
fn button(
&self,
control: ControlRenderData<Self, ButtonData>,
value_getter: Option<Signal<String>>,
) -> AnyView;
fn output(
&self,
control: ControlRenderData<Self, OutputData>,
value_getter: Option<Signal<String>>,
) -> AnyView;
fn hidden(
&self,
control: ControlRenderData<Self, HiddenData>,
value_getter: Option<Signal<String>>,
) -> AnyView;
fn text_input(
&self,
control: ControlRenderData<Self, TextInputData>,
value_getter: Signal<String>,
value_setter: SignalSetter<String>,
validation_state: Signal<ValidationState>,
) -> AnyView;
fn text_area(
&self,
control: ControlRenderData<Self, TextAreaData>,
value_getter: Signal<String>,
value_setter: SignalSetter<String>,
validation_state: Signal<ValidationState>,
) -> AnyView;
fn radio_buttons(
&self,
control: ControlRenderData<Self, RadioButtonsData>,
value_getter: Signal<String>,
value_setter: SignalSetter<String>,
validation_state: Signal<ValidationState>,
) -> AnyView;
fn select(
&self,
control: ControlRenderData<Self, SelectData>,
value_getter: Signal<String>,
value_setter: SignalSetter<String>,
validation_state: Signal<ValidationState>,
) -> AnyView;
fn checkbox(
&self,
control: ControlRenderData<Self, CheckboxData>,
value_getter: Signal<bool>,
value_setter: SignalSetter<bool>,
) -> AnyView;
fn stepper(
&self,
control: ControlRenderData<Self, StepperData>,
value_getter: Signal<String>,
value_setter: SignalSetter<String>,
validation_state: Signal<ValidationState>,
) -> AnyView;
fn slider(
&self,
control: ControlRenderData<Self, SliderData>,
value_getter: Signal<String>,
value_setter: SignalSetter<String>,
validation_state: Signal<ValidationState>,
) -> AnyView;
}