Skip to main content

impulse_thaw/accordion/
mod.rs

1mod accordion_item;
2
3pub use accordion_item::*;
4
5use leptos::{context::Provider, prelude::*};
6use std::collections::HashSet;
7use thaw_utils::{class_list, Model};
8
9#[component]
10pub fn Accordion(
11    #[prop(optional, into)] class: MaybeProp<String>,
12    /// Controls the state of the panel.
13    #[prop(optional, into)]
14    open_items: Model<HashSet<String>>,
15    /// Indicates if Accordion support multiple Panels opened at the same time.
16    #[prop(optional)]
17    multiple: bool,
18    /// Indicates if Accordion support multiple Panels closed at the same time.
19    #[prop(optional)]
20    collapsible: bool,
21    children: Children,
22) -> impl IntoView {
23    view! {
24        <Provider value=AccordionInjection {
25            open_items,
26            collapsible,
27            multiple,
28        }>
29            <div class=class_list!["thaw-accordion", class]>{children()}</div>
30        </Provider>
31    }
32}
33
34#[derive(Clone)]
35pub(crate) struct AccordionInjection {
36    pub open_items: Model<HashSet<String>>,
37    pub multiple: bool,
38    pub collapsible: bool,
39}
40
41impl AccordionInjection {
42    pub fn expect_context() -> AccordionInjection {
43        expect_context()
44    }
45}