import React, { useRef, useEffect } from 'react'; import { useVoiceStore } from '../../stores/voiceStore'; interface VideoQualityPopoverProps { open: boolean; onClose: () => void; anchorRect?: DOMRect | null; } const PRESETS = [ { value: '1080p60' as const, label: '1080p 60fps', desc: '1920x1080, 12000 kbps' }, { value: '1080p' as const, label: '1080p 30fps', desc: '1920x1080, 8000 kbps' }, { value: '720p60' as const, label: '720p 60fps', desc: '1280x720, 8000 kbps' }, { value: '720p' as const, label: '720p 30fps', desc: '1280x720, 5000 kbps' }, { value: '540p' as const, label: '540p 30fps', desc: '960x540, 2000 kbps' }, { value: '360p' as const, label: '360p 30fps', desc: '640x360, 1000 kbps' }, ] as const; export function VideoQualityPopover({ open, onClose, anchorRect }: VideoQualityPopoverProps) { const popoverRef = useRef(null); const videoQuality = useVoiceStore((s) => s.videoQuality); const setVideoQuality = useVoiceStore((s) => s.setVideoQuality); const isCameraOn = useVoiceStore((s) => s.isCameraOn); useEffect(() => { if (!open) return; const handleClick = (e: MouseEvent) => { if (popoverRef.current && !popoverRef.current.contains(e.target as Node)) { onClose(); } }; document.addEventListener('mousedown', handleClick); return () => document.removeEventListener('mousedown', handleClick); }, [open, onClose]); if (!open) return null; const handleSelect = async (quality: typeof videoQuality) => { setVideoQuality(quality); onClose(); }; return (
Video Quality
{PRESETS.map((preset) => ( ))}
); }