canonrs-server 0.1.0

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

use leptos::prelude::*;
use canonrs_core::primitives::{
    CommandPrimitive, CommandInputPrimitive, CommandListPrimitive,
    CommandEmptyPrimitive, CommandGroupPrimitive, CommandGroupHeadingPrimitive,
    CommandItemPrimitive, CommandSeparatorPrimitive,
};
use canonrs_core::meta::SelectionState;

#[component]
pub fn Command(
    children: Children,
    #[prop(into, default = String::new())] class: String,
    #[prop(default = canonrs_core::meta::VisibilityState::Closed)] state: canonrs_core::meta::VisibilityState,
) -> impl IntoView {
    view! {
        <CommandPrimitive class=class state=state>
            {children()}
        </CommandPrimitive>
    }
}

#[component]
pub fn CommandInput(
    #[prop(into, default = String::new())] placeholder: String,
    #[prop(into, default = String::new())] class: String,
) -> impl IntoView {
    view! {
        <CommandInputPrimitive placeholder=placeholder class=class />
    }
}

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

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

#[component]
pub fn CommandGroup(
    children: Children,
    #[prop(optional, into)] heading: Option<String>,
    #[prop(into, default = String::new())] class: String,
) -> impl IntoView {
    view! {
        <CommandGroupPrimitive class=class>
            {heading.map(|h: String| view! {
                <CommandGroupHeadingPrimitive>{h}</CommandGroupHeadingPrimitive>
            })}
            {children()}
        </CommandGroupPrimitive>
    }
}

#[component]
pub fn CommandItem(
    children: Children,
    #[prop(optional, into)] value: Option<String>,
    #[prop(default = SelectionState::Unselected)] selected: SelectionState,
    #[prop(into, default = String::new())] class: String,
) -> impl IntoView {
    view! {
        <CommandItemPrimitive value=value.unwrap_or_default() selected=selected class=class>
            {children()}
        </CommandItemPrimitive>
    }
}

#[component]
pub fn CommandSeparator(
    #[prop(into, default = String::new())] class: String,
) -> impl IntoView {
    view! {
        <CommandSeparatorPrimitive class=class />
    }
}