leptos_bootstrap/v5/
input.rs

1use leptos::prelude::*;
2use std::fmt;
3
4#[component]
5pub fn FloatingLabel<'a>(
6    #[prop(optional, into)] label: &'a str,
7    #[prop(optional, into)] class: &'a str,
8    children: Children,
9) -> impl IntoView {
10    let class = format!("form-floating {}", class);
11    view! {
12        <div class=class>
13            {children()}
14            <label>{label}</label>
15        </div>
16    }
17}
18
19pub enum InputKind {
20    Text,
21    Email,
22    DateTimeLocal,
23    DateTime,
24    Number,
25    Password,
26}
27
28impl fmt::Display for InputKind {
29    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30        let s = match self {
31            Self::Text => "text",
32            Self::Email => "email",
33            Self::DateTimeLocal => "datetime-local",
34            Self::DateTime => "datetime",
35            Self::Number => "number",
36            Self::Password => "password",
37        };
38        write!(f, "{}", s)
39    }
40}
41
42#[component]
43pub fn Input<'a>(
44    value: RwSignal<String>,
45    #[prop(default = InputKind::Text)] kind: InputKind,
46    #[prop(optional, into)] placeholder: &'a str,
47    #[prop(optional, into)] class: &'a str,
48) -> impl IntoView {
49    let class = format!("form-control {}", class);
50    view! {
51        <input type=kind.to_string() class=class placeholder=placeholder bind:value=value />
52    }
53}