diff --git a/frontend/src/components/layout/statusbar.rs b/frontend/src/components/layout/statusbar.rs index 3856410..d2c9971 100644 --- a/frontend/src/components/layout/statusbar.rs +++ b/frontend/src/components/layout/statusbar.rs @@ -109,172 +109,80 @@ pub fn StatusBar() -> impl IntoView { }); }; - // Signal-based dropdown state: 0=none, 1=download, 2=upload, 3=theme - let (active_dropdown, set_active_dropdown) = create_signal(0u8); + // Signal-based dropdown state: 0=none, 1=download, 2=upload, 3=theme + let (active_dropdown, set_active_dropdown) = create_signal(0u8); - // Toggle a specific dropdown - let toggle = move |id: u8| { - let current = active_dropdown.get_untracked(); - if current == id { + // Toggle a specific dropdown + let toggle = move |id: u8| { + let current = active_dropdown.get_untracked(); + if current == id { + set_active_dropdown.set(0); + } else { + set_active_dropdown.set(id); + } + }; + + // Close all dropdowns + let close_all = move || { set_active_dropdown.set(0); - } else { - set_active_dropdown.set(id); - } - }; + }; - // Close all dropdowns - let close_all = move || { - set_active_dropdown.set(0); - }; - - view! { - // Transparent overlay to close dropdowns when clicking outside - -
-
- -
- - // --- DOWNLOAD SPEED DROPDOWN --- -
+ view! { + // Transparent overlay to close dropdowns when clicking outside +
- - - - {move || format_speed(stats.get().down_rate)} - 0 } fallback=|| ()> - - {move || format!("(Limit: {})", format_speed(stats.get().down_limit.unwrap_or(0)))} - - -
+ class="fixed inset-0 z-[98] cursor-default" + on:pointerdown=move |_| close_all() + >
+ - -
+
- // --- UPLOAD SPEED DROPDOWN --- -
-
- - - - {move || format_speed(stats.get().up_rate)} - 0 } fallback=|| ()> - - {move || format!("(Limit: {})", format_speed(stats.get().up_limit.unwrap_or(0)))} - - -
- - -
- -
+ // --- DOWNLOAD SPEED DROPDOWN ---
- + + {move || format_speed(stats.get().down_rate)} + 0 } fallback=|| ()> + + {move || format!("(Limit: {})", format_speed(stats.get().down_limit.unwrap_or(0)))} + +
+ // --- UPLOAD SPEED DROPDOWN --- +
+
+ + + + {move || format_speed(stats.get().up_rate)} + 0 } fallback=|| ()> + + {move || format!("(Limit: {})", format_speed(stats.get().up_limit.unwrap_or(0)))} + + +
+ + +
+ +
+
+
+ + + +
+ + +
-
- // Transparent overlay to close sort dropdown - -
-
+
+ // Transparent overlay to close sort dropdown + +
+
-
- "Torrents" +
+ "Torrents" -
-
- - - - "Sort" -
-
+ }).collect::>() + } + +
+
-
- {move || filtered_torrents().into_iter().map(|t| { +
{move || filtered_torrents().into_iter().map(|t| { let progress_class = if t.percent_complete >= 100.0 { "progress-success" } else { "progress-primary" }; let status_str = format!("{:?}", t.status); let status_badge_class = match t.status {