use crate::prelude::*;
#[derive(Default)]
pub enum TextFieldVariant {
#[default]
Outlined,
Filled,
Text,
}
impl TextFieldVariant {
pub fn class_suffix(&self) -> &'static str {
match self {
TextFieldVariant::Outlined => "outlined",
TextFieldVariant::Filled => "filled",
TextFieldVariant::Text => "text",
}
}
}
#[template]
pub fn TextField(
#[field(default)] variant: TextFieldVariant,
#[field(flatten=BaseHtmlAttributes)] mut attrs: InputHtmlAttributes,
) -> impl Bundle {
attrs.push_class(format!(
"bt-c-input bt-c-input--{}",
variant.class_suffix()
));
rsx! {
<div class="bt-c-input__container">
<slot/>
<input {attrs}>
</div>
<style src="./input.css" />
}
}
#[template]
pub fn TextArea(
#[field(default)] variant: TextFieldVariant,
#[field(flatten=BaseHtmlAttributes)]
#[field(flatten=InputHtmlAttributes)]
attrs: TextAreaHtmlAttributes,
) -> impl Bundle {
let mut attrs = attrs;
attrs.push_class(format!(
"bt-c-input bt-c-input--{}",
variant.class_suffix()
));
let value = attrs.input_attrs.value.as_ref().map(|v| v.get());
rsx! {
<div class="bt-c-input__container">
<slot />
<textarea {attrs}>
{value}
</textarea>
</div>
<style src="./input.css" />
}
}