leptos-components 0.2.9

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

#[derive(Default, Debug, PartialEq)]
pub enum Variant {
    #[default]
    Normal,
    Resource,
}

#[component]
pub fn Card(
    children: Children,
    #[prop(into, optional, default = Variant::Normal)] variant: Variant,
    #[prop(into, optional)] class: String,
    #[prop(into, optional, default = false)] clickable: bool,
    #[prop(into, optional, default = false)] disabled: bool,
) -> impl IntoView {
    let mut class = crate::tw!(
        concat!(BASE_CLASS, "-card"),
        clickable.then_some(concat!(BASE_CLASS, "-card--clickable")),
        disabled.then_some(concat!("disabled ", BASE_CLASS, "-card--disabled")),
        class
    );

    if variant == Variant::Resource {
        class = format!("{}-card--resource relative", BASE_CLASS);

        return view! {
            <div class={class}>
                <svg viewBox="0 0 334 444" fill="none" xmlns="http://www.w3.org/2000/svg" class="drop-shadow-resource-card">
                    <path d="M267.221 2C275.589 2 283.519 5.74306 288.838 12.2038L325.617 56.8794C329.744 61.892 332 68.1829 332 74.6756V414C332 429.464 319.464 442 304 442H30C14.536 442 2 429.464 2 414V30C2 14.536 14.536 2 30 2H267.221Z" fill="#3D3D3D" stroke="black" stroke-width="2"/>
                </svg>
                <div class="rustlanges-card--resource-body">
                {children()}
                </div>
            </div>
        }.into_any();
    }

    view! {
        <div class={class}>
            {children()}
        </div>
    }
    .into_any()
}