From 5f5edccaf327727662db027b9fc4cdf86365e20b Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Sat, 24 May 2025 12:03:57 +0100 Subject: feat: modal --- assets/icons/close24.svg | 4 +++ assets/style.scss | 26 +++++++------- src/lib.rs | 90 +++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 99 insertions(+), 21 deletions(-) create mode 100644 assets/icons/close24.svg diff --git a/assets/icons/close24.svg b/assets/icons/close24.svg new file mode 100644 index 0000000..d7e82ba --- /dev/null +++ b/assets/icons/close24.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/style.scss b/assets/style.scss index 245e5c7..f781976 100644 --- a/assets/style.scss +++ b/assets/style.scss @@ -155,11 +155,11 @@ p { flex-direction: column; } -.chats-list>*, .roster-list>* { +.chats-list>*, .roster-list>*, .settings .header { padding: 8px 16px; } -.chats-list .header, .roster-list .header { +.chats-list .header, .roster-list .header, .settings .header { margin-top: 0.4rem; border-bottom: 2px solid black; display: flex; @@ -589,20 +589,21 @@ p { } .modal { - position: relative; - z-index: 150; -} - -.modal-background { - background-color: rgba(0, 0, 0, 0.1); -} - -.modal-content { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; + z-index: 150; + display: flex; + justify-content: center; + align-items: center; + background-color: rgba(0, 0, 0, 0.4); +} + +.settings { + width: 75vw; + height: 75vh; } .modal .overlay { @@ -672,7 +673,8 @@ hr { } .new-chat:hover, .new-chat.open, -.add-contact:hover, .add-contact.open { +.add-contact:hover, .add-contact.open, +.close:hover { background: #00000060; } diff --git a/src/lib.rs b/src/lib.rs index 570d2f6..92c764d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -20,7 +20,7 @@ use futures::stream::StreamExt; use indexmap::IndexMap; use jid::JID; use leptos::{ - ev::{Event, KeyboardEvent, SubmitEvent}, + ev::{Event, KeyboardEvent, MouseEvent, SubmitEvent}, html::{self, Div, Input, Pre, Textarea}, prelude::*, tachys::{dom::document, reactive_graph::bind::GetValue}, @@ -633,6 +633,8 @@ fn Macaw( let open_chats = Store::new(OpenChatsPanel::default()); provide_context(open_chats); + let show_settings = RwSignal::new(None::); + provide_context(show_settings); let user_presences = Store::new(UserPresences::new()); provide_context(user_presences); @@ -740,6 +742,11 @@ fn Macaw( // + {move || if let Some(_) = *show_settings.read() { + view! { }.into_any() + } else { + view! {}.into_any() + }} } } @@ -902,7 +909,7 @@ pub fn PersonalStatus() -> impl IntoView { if open { view! { - + }.into_any() } else { @@ -915,7 +922,8 @@ pub fn PersonalStatus() -> impl IntoView { } #[component] -pub fn PersonalStatusMenu(user: Store) -> impl IntoView { +pub fn PersonalStatusMenu(user: Store, set_open: WriteSignal) -> impl IntoView { + let show_settings: RwSignal> = use_context().unwrap(); let user_presences: Store = use_context().expect("no user presence store"); let client = use_context::().expect("client not in context"); @@ -1019,10 +1027,16 @@ pub fn PersonalStatusMenu(user: Store) -> impl IntoView {
-