use leptos::prelude::*;
use crate::v5::{ButtonKind, ButtonSize};
#[component]
pub fn DropDown<'a>(
#[prop(optional, into)] label: &'a str,
#[prop(default = ButtonKind::Primary)] kind: ButtonKind,
#[prop(optional, into)] class: &'a str,
children: Children,
) -> impl IntoView {
let dropdown_class = format!("dropdown {}", class);
let btn_class = format!("btn dropdown-toggle {}", kind);
view! {
<div class=dropdown_class>
<button class=btn_class type="button" data-bs-toggle="dropdown" aria-expanded="false">
{label}
</button>
<ul class="dropdown-menu">
{children()}
</ul>
</div>
}
}
#[component]
pub fn DropDownItem<'a>(
#[prop(default = "#", into)] href: &'a str,
#[prop(optional, into)] class: &'a str,
children: Children,
) -> impl IntoView {
let class = format!("dropdown-item {}", class);
view! {
<li>
<a class=class href=href>{children()}</a>
</li>
}
}
#[component]
pub fn DropDownDivider() -> impl IntoView {
view! {
<li><hr class="dropdown-divider" /></li>
}
}
#[component]
pub fn SplitButton<'a>(
#[prop(optional, into)] label: &'a str,
#[prop(default = ButtonKind::Primary)] kind: ButtonKind,
#[prop(default = ButtonSize::Normal)] size: ButtonSize,
#[prop(optional, into)] class: &'a str,
children: Children,
) -> impl IntoView {
let btn_class = format!("btn {} {}", size, class);
let dropdown_class = format!(
"btn dropdown-toggle dropdown-toggle-split {} {}",
kind, size
);
view! {
<div class="btn-group">
<button type="button" class=btn_class>{label}</button>
<button type="button" class=dropdown_class data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
{children()}
</ul>
</div>
}
}