diff --git a/services/frontend-leptos/frontend/src/features/live/components/active_speakers.rs b/services/frontend-leptos/frontend/src/features/live/components/active_speakers.rs new file mode 100644 index 0000000..5738c08 --- /dev/null +++ b/services/frontend-leptos/frontend/src/features/live/components/active_speakers.rs @@ -0,0 +1,80 @@ +use leptos::prelude::*; +use shared_types::voice::ActiveSpeaker; + +/// ActiveSpeakers component for Leptos +/// Displays a real-time list of speaking users with avatar and status indicator +#[component] +pub fn ActiveSpeakers( + #[prop(optional)] speakers: RwSignal>, + #[prop(optional)] class: &'static str, +) -> impl IntoView { + let empty_state = move || speakers.get().is_empty(); + + view! { +
+ + +
+
+ {speaker.avatar.as_ref().map(|avatar_url| { + let url = avatar_url.clone(); + view! { + + } + })} +
+
+
+ {speaker.username.clone()} +
+
+ + + {move || if speaker.speaking { "Speaking" } else { "Silent" }} + +
+
+
+
+
+ } + } + > +
+
+
+ "🎤" +
+

+ "No active speakers" +

+
+
+ + + } +} diff --git a/services/frontend-leptos/frontend/src/features/live/components/mod.rs b/services/frontend-leptos/frontend/src/features/live/components/mod.rs index 9f1039a..63159fc 100644 --- a/services/frontend-leptos/frontend/src/features/live/components/mod.rs +++ b/services/frontend-leptos/frontend/src/features/live/components/mod.rs @@ -1 +1,5 @@ -// Empty for now - components will be added in future phases +pub mod voice_connection_card; +pub mod active_speakers; + +pub use voice_connection_card::VoiceConnectionCard; +pub use active_speakers::ActiveSpeakers;