synpad 0.1.0

A full-featured Matrix chat client built with Dioxus
use dioxus::prelude::*;

/// Modal/dialog container component.
#[component]
pub fn Modal(
    children: Element,
    title: Option<String>,
    on_close: EventHandler<()>,
    #[props(default = false)] wide: bool,
) -> Element {
    let dialog_class = if wide {
        "modal__dialog modal__dialog--wide"
    } else {
        "modal__dialog"
    };

    rsx! {
        div {
            class: "modal",
            div {
                class: "modal__backdrop",
                onclick: move |_| on_close.call(()),
            }
            div {
                class: "{dialog_class}",
                if let Some(ref t) = title {
                    div {
                        class: "modal__header",
                        h3 { class: "modal__title", "{t}" }
                        button {
                            class: "modal__close",
                            onclick: move |_| on_close.call(()),
                            ""
                        }
                    }
                }
                div {
                    class: "modal__body",
                    {children}
                }
            }
        }
    }
}