// ─── ActiveSpeakers.tsx — Live voice speaker list island ──────────────────── // Self-contained: reads from useVoiceStore, renders speaker entries with // animated speaking-indicator bars. // ───────────────────────────────────────────────────────────────────────────── import { useVoiceStore } from "../stores/voice-store.js"; export default function ActiveSpeakers() { const activeSpeakers = useVoiceStore((state) => state.activeSpeakers); if (activeSpeakers.length === 0) { return (
🎙

No active speakers

); } return (
{activeSpeakers.map((speaker) => { const key = speaker.userId ?? speaker.id ?? `speaker-${speaker.username}`; return (
{speaker.username}
{speaker.speaking && (
{[0, 1, 2, 3].map((i) => (
))}
)}
); })}
); }