canonrs-server 0.1.0

CanonRS server-side rendering support
use leptos::prelude::*;

#[derive(Clone, Copy)]
pub struct SidebarContext {
    pub open: RwSignal<bool>,
    pub collapsed: RwSignal<bool>,
}

impl SidebarContext {
    pub fn toggle_collapsed(&self) {
        self.collapsed.set(!self.collapsed.get());
    }
    
    pub fn toggle_open(&self) {
        self.open.set(!self.open.get());
    }
}

#[component]
pub fn SidebarProvider(
    #[prop(default = true)] initial_open: bool,
    #[prop(default = false)] initial_collapsed: bool,
    children: Children,
) -> impl IntoView {
    let open = RwSignal::new(initial_open);
    let collapsed = RwSignal::new(initial_collapsed);
    
    provide_context(SidebarContext { open, collapsed });
    
    view! { {children()} }
}

pub fn use_sidebar() -> SidebarContext {
    expect_context::<SidebarContext>()
}