canonrs-server 0.1.0

CanonRS server-side rendering support
#![allow(unreachable_pub, dead_code)]

use leptos::prelude::*;
use canonrs_core::primitives::{
    CardPrimitive, CardVariant,
    CardHeaderPrimitive,
    CardTitlePrimitive,
    CardDescriptionPrimitive,
    CardContentPrimitive,
    CardFooterPrimitive,
};

#[component]
pub fn Card(
    children: Children,
    #[prop(into, default = String::new())] variant: String,
    #[prop(default = String::new())] class: String,
) -> impl IntoView {
    let base_class = format!("card {}", class);

    view! {
        <CardPrimitive
            variant=match variant.as_str() {
                "outlined" => CardVariant::Outlined,
                "elevated" => CardVariant::Elevated,
                "ghost"    => CardVariant::Ghost,
                _          => CardVariant::Default,
            }
            class={base_class}
        >
            {children()}
        </CardPrimitive>
    }
}

#[component]
pub fn CardHeader(
    children: Children,
    #[prop(default = String::new())] class: String,
) -> impl IntoView {
    view! {
        <CardHeaderPrimitive
            class={class}
        >
            {children()}
        </CardHeaderPrimitive>
    }
}

#[component]
pub fn CardTitle(
    children: Children,
    #[prop(default = String::new())] class: String,
) -> impl IntoView {
    view! {
        <CardTitlePrimitive
            class={class}
        >
            {children()}
        </CardTitlePrimitive>
    }
}

#[component]
pub fn CardDescription(
    children: Children,
    #[prop(default = String::new())] class: String,
) -> impl IntoView {
    view! {
        <CardDescriptionPrimitive
            class={class}
        >
            {children()}
        </CardDescriptionPrimitive>
    }
}

#[component]
pub fn CardContent(
    children: Children,
    #[prop(default = String::new())] class: String,
) -> impl IntoView {
    view! {
        <CardContentPrimitive
            class={class}
        >
            {children()}
        </CardContentPrimitive>
    }
}

#[component]
pub fn CardFooter(
    children: Children,
    #[prop(default = String::new())] class: String,
) -> impl IntoView {
    view! {
        <CardFooterPrimitive
            class={class}
        >
            {children()}
        </CardFooterPrimitive>
    }
}