use leptos::prelude::*;
#[component]
pub(crate) fn EscapeBackdrop(open: RwSignal<bool>, children: Children) -> impl IntoView {
window_event_listener(leptos::ev::keydown, move |e| {
if e.key() == "Escape" {
open.set(false);
}
});
let close = move |_| open.set(false);
view! {
<>
<div class="fixed inset-0 z-40 bg-black/60 animate-fade-in" on:click=close />
{children()}
</>
}
}
#[component]
pub(crate) fn OverlayTitle(children: Children) -> impl IntoView {
view! { <h2 class="text-lg font-semibold text-foreground">{children()}</h2> }
}
#[component]
pub(crate) fn OverlayDescription(children: Children) -> impl IntoView {
view! { <p class="text-sm text-muted-foreground mt-1">{children()}</p> }
}
#[component]
pub(crate) fn OverlayFooter(children: Children) -> impl IntoView {
view! { <div class="flex justify-end gap-2 mt-4">{children()}</div> }
}