import React from 'react'; import { Icon, IconButton, Icons, Line, Text, Tooltip, TooltipProvider } from 'folds'; import { useAtom } from 'jotai'; import * as css from './styles.css'; import { callChatAtom } from '../../state/callEmbed'; import { AsyncStatus, useAsyncCallback } from '../../hooks/useAsyncCallback'; export function ControlDivider() { return ( ); } type MicrophoneButtonProps = { enabled: boolean; onToggle: () => Promise; }; export function MicrophoneButton({ enabled, onToggle }: MicrophoneButtonProps) { const [micState, toggleMic] = useAsyncCallback(onToggle); const loading = micState.status === AsyncStatus.Loading; return ( {enabled ? 'Turn Off Microphone' : 'Turn On Microphone'} } > {(anchorRef) => ( )} ); } type SoundButtonProps = { enabled: boolean; onToggle: () => void; }; export function SoundButton({ enabled, onToggle }: SoundButtonProps) { return ( {enabled ? 'Deafen' : 'Undeafen'} } > {(anchorRef) => ( onToggle()} aria-label={enabled ? 'Undeafen' : 'Deafen'} outlined > )} ); } type VideoButtonProps = { enabled: boolean; onToggle: () => Promise; disabled?: boolean; }; export function VideoButton({ enabled, onToggle, disabled }: VideoButtonProps) { const [videoState, toggleVideo] = useAsyncCallback(onToggle); const loading = videoState.status === AsyncStatus.Loading; return ( {disabled ? 'Camera disabled in settings' : enabled ? 'Stop Camera' : 'Start Camera'} } > {(anchorRef) => ( )} ); } type ScreenShareButtonProps = { enabled: boolean; onToggle: () => void; }; export function ScreenShareButton({ enabled, onToggle }: ScreenShareButtonProps) { return ( {enabled ? 'Stop Screenshare' : 'Start Screenshare'} } > {(anchorRef) => ( onToggle()} aria-label={enabled ? 'Stop Screenshare' : 'Start Screenshare'} outlined > )} ); } const FullscreenIcon = () => ( ); const ExitFullscreenIcon = () => ( ); type FullscreenButtonProps = { isFullscreen: boolean; onToggle: () => void; }; export function FullscreenButton({ isFullscreen, onToggle }: FullscreenButtonProps) { return ( {isFullscreen ? 'Exit Fullscreen' : 'Fullscreen'} } > {(anchorRef) => ( {isFullscreen ? : } )} ); } type ScreenshareAudioButtonProps = { muted: boolean; onToggle: () => void; }; export function ScreenshareAudioButton({ muted, onToggle }: ScreenshareAudioButtonProps) { return ( {muted ? 'Unmute Screenshare Audio' : 'Mute Screenshare Audio'} } > {(anchorRef) => ( )} ); } export function ChatButton() { const [chat, setChat] = useAtom(callChatAtom); return ( {chat ? 'Close Chat' : 'Open Chat'} } > {(anchorRef) => ( setChat(!chat)} aria-label={chat ? 'Close Chat' : 'Open Chat'} aria-pressed={chat} outlined > )} ); }