import { AnimatePresence, motion } from "motion/react"; import { useState } from "react"; import HandRaisedOffFilledIcon from "../icons/HandRaisedOffFilledIcon"; import HandRaisedFilledIcon from "../icons/HandRaisedFilledIcon"; import MicrophoneFilledIcon from "../icons/MicrophoneFilledIcon"; import VideoOffFilledIcon from "../icons/VideoOffFilledIcon"; import MicrophoneOffIcon from "../icons/MicrophoneOffIcon"; import VideoFilledIcon from "../icons/VideoFilledIcon"; import ControlButton from "./ControlButton"; import Admin from "../indicators/Admin"; import clsx from "clsx"; interface UserCameraControlsProps { isMuted: boolean; isVideoOff: boolean; isControlDisabled: boolean; onMute: () => void; onVideoOff: () => void; onCanControl: () => void; } interface UserCameraProps extends UserCameraControlsProps { isAdmin?: boolean; name?: string; mediaStream?: string; isSpeaking?: boolean; } export default function UserCamera({ isMuted, isVideoOff, isControlDisabled, onMute, onVideoOff, onCanControl, isSpeaking = false, isAdmin = false, name = "Гость", mediaStream = "", }: UserCameraProps) { const [isHover, setIsHover] = useState(false); return ( setIsHover(true)} onMouseLeave={() => setIsHover(false)} animate={{ width: isHover ? "10.833vw" : "6.944vw", border: isSpeaking ? "0.139vw solid #7B60F3" : "0.139vw solid #FFFFFF4D", }} className={clsx( "aspect-square group rounded-[1.667vw] bg-yellow-500 relative flex-shrink-0 transition-all duration-300 pointer-events-auto hover:w-[10.833vw]w-[6.944vw] shadow-[0_4px_40px_0_rgba(15,16,17,0.1),0_2px_2px_0_rgba(0,0,0,0.06)]", isAdmin && "order-3" )} > {isAdmin && }
{name}
); } function UserCameraControls({ isMuted, isVideoOff, isControlDisabled, isHover, onMute, onVideoOff, onCanControl, }: UserCameraControlsProps & { isHover: boolean }) { return (
{isHover ? ( : } size={"small"} enabled={!isMuted} onClick={onMute} /> : } size={"small"} enabled={!isVideoOff} onClick={onVideoOff} /> ) : ( ) } size={"small"} enabled={!isControlDisabled} onClick={onCanControl} /> ) : (
)}
); }