leptos_bootstrap/v5/
input.rs1use 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}