canonrs-server 0.1.0

CanonRS server-side rendering support
//! @canon-level: strict
//! Menu Island — Canon Rule #340 (zero-logic boundary)

use leptos::prelude::*;
use super::menu_ui::{
    Menu as MenuUi,
    MenuItem as MenuItemUi
};
use canonrs_core::meta::{DisabledState, SelectionState};

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

#[component]
pub fn MenuItem(
    children: Children,
    #[prop(into, default = String::new())] value: String,
    #[prop(default = false)] selected: bool,
    #[prop(default = false)] disabled: bool,
    #[prop(into, default = String::new())] class: String,
) -> impl IntoView {
    let selected_state = if selected { SelectionState::Selected } else { SelectionState::Unselected };
    let disabled_state = if disabled { DisabledState::Disabled } else { DisabledState::Enabled };
    let _ = value; // stored in data-rs-value by primitive
    view! { <MenuItemUi selected=selected_state disabled=disabled_state class=class>{children()}</MenuItemUi> }
}