mod color;
mod size;
use yew::{classes, function_component, html, AttrValue, Callback, Classes, Html, Properties};
use crate::styles::color::Color;
use crate::styles::input_type::InputType;
use crate::styles::size::Size;
#[derive(Debug, Clone, PartialEq, Properties)]
pub struct Props {
#[prop_or_default]
pub aria_described_by: AttrValue,
#[prop_or_default]
pub auto_complete: AttrValue,
#[prop_or(false)]
pub auto_focus: bool,
#[prop_or_default]
pub classes: Classes,
#[prop_or_default]
pub color: Color,
#[prop_or_default]
pub default_value: AttrValue,
#[prop_or(false)]
pub disabled: bool,
#[prop_or(false)]
pub disable_injecting_global_styles: bool,
#[prop_or_default]
pub end_adornment: Option<Html>,
#[prop_or(false)]
pub error: bool,
#[prop_or(false)]
pub full_width: bool,
#[prop_or_default]
pub id: AttrValue,
#[prop_or(true)]
pub dense_margin: bool,
#[prop_or_default]
pub hidden_label: bool,
#[prop_or_default]
pub max_rows: Option<i32>,
#[prop_or_default]
pub min_rows: Option<i32>,
#[prop_or(false)]
pub multiline: bool,
#[prop_or_default]
pub name: AttrValue,
#[prop_or_default]
pub on_blur: Option<Callback<()>>,
#[prop_or_default]
pub on_change: Option<Callback<AttrValue>>,
#[prop_or_default]
pub on_focus: Option<Callback<()>>,
#[prop_or_default]
pub placeholder: AttrValue,
#[prop_or(false)]
pub read_only: bool,
#[prop_or(false)]
pub required: bool,
pub rows: Option<i32>,
#[prop_or(Size::Medium)]
pub size: Size,
pub start_adornment: Option<Html>,
#[prop_or_default]
pub style: AttrValue,
#[prop_or_default]
pub input_type: InputType,
#[prop_or_default]
pub value: AttrValue,
}
#[function_component(InputBase)]
pub fn input_base(props: &Props) -> Html {
let form_control = false;
let focused = false;
let root_cls = classes!(
"ZuInputBase-root",
color::css_class(props.color),
if props.disabled {
"ZuInputBase-disabled"
} else {
""
},
if props.error { "ZuInputBase-error" } else { "" },
if props.full_width {
"ZuInputBase-fullWidth"
} else {
""
},
if focused { "ZuInputBase-focused" } else { "" },
if form_control {
"ZuInputBase-formControl"
} else {
""
},
size::css_class(props.size),
if props.multiline {
"ZuInputBase-multiline"
} else {
""
},
if props.start_adornment.is_some() {
"ZuInputBase-adornedStart"
} else {
""
},
if props.end_adornment.is_some() {
"ZuInputBase-adornedEnd"
} else {
""
},
if props.hidden_label {
"ZuInputBase-hiddenLabel"
} else {
""
},
if props.read_only {
"ZuInputBase-readOnly"
} else {
""
}
);
let input_cls = classes!(
"ZuInputBase-input",
if props.disabled {
"ZuInputBase-disabled"
} else {
""
},
if props.input_type == InputType::Search {
"ZuInputBase-inputTypeSearch"
} else {
""
},
if props.multiline {
"ZuInputBase-inputMultiline"
} else {
""
},
size::input_css_class(props.size),
if props.hidden_label {
"ZuInputBase-inputHiddenLabel"
} else {
""
},
if props.start_adornment.is_some() {
"ZuInputBase-inputAdornedStart"
} else {
""
},
if props.end_adornment.is_some() {
"ZuInputBase-inputAdornedEnd"
} else {
""
},
if props.read_only {
"ZuInputBase-readOnly"
} else {
""
},
);
html! {
<div
class={root_cls}>
<input class={input_cls} />
</div>
}
}