/* Copyright 2024 New Vector Ltd. SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ import { TrackReferenceOrPlaceholder } from "@livekit/components-core"; import { animated } from "@react-spring/web"; import { RoomMember } from "matrix-js-sdk/src/matrix"; import { ComponentProps, ReactNode, forwardRef } from "react"; import { useTranslation } from "react-i18next"; import classNames from "classnames"; import { VideoTrack } from "@livekit/components-react"; import { Text, Tooltip } from "@vector-im/compound-web"; import { ErrorIcon } from "@vector-im/compound-design-tokens/assets/web/icons"; import styles from "./MediaView.module.css"; import { Avatar } from "../Avatar"; import { RaisedHandIndicator } from "../reactions/RaisedHandIndicator"; import { showHandRaisedTimer, useSetting } from "../settings/settings"; interface Props extends ComponentProps { className?: string; style?: ComponentProps["style"]; targetWidth: number; targetHeight: number; video: TrackReferenceOrPlaceholder; videoFit: "cover" | "contain"; mirror: boolean; member: RoomMember | undefined; videoEnabled: boolean; unencryptedWarning: boolean; nameTagLeadingIcon?: ReactNode; displayName: string; primaryButton?: ReactNode; raisedHandTime?: Date; raisedHandOnClick?: () => void; } export const MediaView = forwardRef( ( { className, style, targetWidth, targetHeight, video, videoFit, mirror, member, videoEnabled, unencryptedWarning, nameTagLeadingIcon, displayName, primaryButton, raisedHandTime, raisedHandOnClick, ...props }, ref, ) => { const { t } = useTranslation(); const [handRaiseTimerVisible] = useSetting(showHandRaisedTimer); const avatarSize = Math.round(Math.min(targetWidth, targetHeight) / 2); return (
{video.publication !== undefined && ( )}
{nameTagLeadingIcon} {displayName} {unencryptedWarning && ( )}
{primaryButton}
); }, ); MediaView.displayName = "MediaView";