leptos-components 0.2.9

RustLangES leptos components
Documentation
use components_core::{BASE_CLASS, concat};
use leptos::{ev::MouseEvent, prelude::*};

#[derive(Default, Debug, PartialEq)]
pub enum Variant {
    #[default]
    Primary,
    Secondary,
    Text,
    Icon,
}

#[component]
pub fn Button(
    #[prop(into, optional)] variant: Variant,
    #[prop(into, optional)] class: String,
    on_click: impl FnMut(MouseEvent) + 'static,
    #[prop(into, optional)] icon: Option<AnyView>,
    #[prop(into, optional)] label: Option<String>,
) -> impl IntoView {
    let var = format!(
        "{}{}",
        concat!(BASE_CLASS, "-button", "--"),
        format!("{variant:?}").to_lowercase()
    );
    let class = crate::tw!("text-button", var, concat!(BASE_CLASS, "-button"), class);

    view! {
        <button class={class} on:click=on_click>
            {(variant != Variant::Icon).then_some(label)}
            {icon.into_view()}
        </button>
    }
}