diff --git a/apps/desktop/src/components/CallControls.tsx b/apps/desktop/src/components/CallControls.tsx index 5139eec..034ed56 100644 --- a/apps/desktop/src/components/CallControls.tsx +++ b/apps/desktop/src/components/CallControls.tsx @@ -1,6 +1,8 @@ import { useTranslation } from 'react-i18next'; import { + HeadphonesIcon, + HeadphonesOffIcon, MicIcon, MicOffIcon, MonitorShareIcon, @@ -14,9 +16,11 @@ interface Props { muted: boolean; sharing: boolean; video: boolean; + deafened: boolean; onToggleMute: () => void; onToggleShare: () => void; onToggleVideo?: () => void; + onToggleDeafen: () => void; onHangup: () => void; onOpenParticipants?: () => void; /** Compact variant used inside the docked call (36px buttons). */ @@ -31,9 +35,11 @@ export function CallControls({ muted, sharing, video, + deafened, onToggleMute, onToggleShare, onToggleVideo, + onToggleDeafen, onHangup, onOpenParticipants, compact = false, @@ -59,6 +65,24 @@ export function CallControls({ > {muted ? : } + + {deafened ? ( + + ) : ( + + )} + {onToggleVideo && ( void; @@ -56,6 +65,7 @@ export function CallParticipantTile(props: ParticipantTileProps) { displayName, me, muted, + deafened, speaking, sharing, video, @@ -95,6 +105,15 @@ export function CallParticipantTile(props: ParticipantTileProps) { )} + {/* Speaking indicator visible regardless of content type (video or + audio). z-10 ensures it sits above the video element. */} + {speaking && ( +