Skip to main content

impulse_thaw/tag/
tag_group.rs

1use super::TagSize;
2use leptos::{context::Provider, prelude::*};
3use thaw_utils::{class_list, mount_style, ArcOneCallback};
4
5#[component]
6pub fn TagGroup(
7    #[prop(optional, into)] class: MaybeProp<String>,
8    /// Size of the tag.
9    #[prop(optional, into)]
10    size: Signal<TagSize>,
11    /// Callback for when a tag is dismissed.
12    #[prop(optional, into)]
13    on_dismiss: Option<ArcOneCallback<String>>,
14    /// A Tag can be dismissible.
15    #[prop(optional, into)]
16    dismissible: Signal<bool>,
17    children: Children,
18) -> impl IntoView {
19    mount_style("tag-group", include_str!("./tag-group.css"));
20
21    view! {
22        <div class=class_list!["thaw-tag-group", class]>
23            <Provider value=TagGroupInjection {
24                size,
25                on_dismiss,
26                dismissible,
27            }>{children()}</Provider>
28        </div>
29    }
30}
31
32#[derive(Clone)]
33pub(crate) struct TagGroupInjection {
34    pub size: Signal<TagSize>,
35    pub on_dismiss: Option<ArcOneCallback<String>>,
36    pub dismissible: Signal<bool>,
37}
38
39impl TagGroupInjection {
40    pub fn use_context() -> Option<Self> {
41        use_context()
42    }
43}