import React from "react"; import { ExclamationTriangleIcon } from "@heroicons/react/24/solid"; import { ArrowPathIcon, ArrowRightIcon } from "@heroicons/react/16/solid"; import { motion, AnimatePresence } from "framer-motion"; import { LuPlay } from "react-icons/lu"; import { BsMouseFill } from "react-icons/bs"; import { m } from "@localizations/messages.js"; import { Button, LinkButton } from "@components/Button"; import LoadingSpinner from "@components/LoadingSpinner"; import Card, { GridCard } from "@components/Card"; interface OverlayContentProps { readonly children: React.ReactNode; } function OverlayContent({ children }: OverlayContentProps) { return (
{children}
); } interface LoadingOverlayProps { readonly show: boolean; } export function LoadingVideoOverlay({ show }: LoadingOverlayProps) { return ( {show && (

{m.video_overlay_loading_stream()}

)}
); } interface LoadingConnectionOverlayProps { readonly show: boolean; readonly text: string; } export function LoadingConnectionOverlay({ show, text }: LoadingConnectionOverlayProps) { return ( {show && (

{text}

)}
); } interface ConnectionErrorOverlayProps { readonly show: boolean; readonly setupPeerConnection: () => Promise; } export function ConnectionFailedOverlay({ show, setupPeerConnection, }: ConnectionErrorOverlayProps) { return ( {show && (

{m.video_overlay_connection_issue_title()}

  • {m.video_overlay_conn_verify_power()}
  • {m.video_overlay_conn_check_cables()}
  • {m.video_overlay_conn_ensure_network()}
  • {m.video_overlay_conn_restart()}
)}
); } interface PeerConnectionDisconnectedOverlay { readonly show: boolean; } export function PeerConnectionDisconnectedOverlay({ show, }: PeerConnectionDisconnectedOverlay) { return ( {show && (

{m.video_overlay_connection_issue_title()}

  • {m.video_overlay_conn_verify_power()}
  • {m.video_overlay_conn_check_cables()}
  • {m.video_overlay_conn_ensure_network()}
  • {m.video_overlay_conn_restart()}

{m.video_overlay_retrying_connection()}

)}
); } interface HDMIErrorOverlayProps { readonly show: boolean; readonly hdmiState: string; } export function HDMIErrorOverlay({ show, hdmiState }: HDMIErrorOverlayProps) { const isNoSignal = hdmiState === "no_signal"; const isOtherError = hdmiState === "no_lock" || hdmiState === "out_of_range"; return ( <> {show && isNoSignal && (

{m.video_overlay_no_hdmi_signal()}

  • {m.video_overlay_no_hdmi_ensure_cable()}
  • {m.video_overlay_no_hdmi_ensure_power()}
  • {m.video_overlay_no_hdmi_adapter_compat()}
)}
{show && isOtherError && (

{m.video_overlay_hdmi_error_title()}

  • {m.video_overlay_hdmi_loose_faulty()}
  • {m.video_overlay_hdmi_incompatible_resolution()}
  • {m.video_overlay_hdmi_source_issue()}
)}
); } interface NoAutoplayPermissionsOverlayProps { readonly show: boolean; readonly onPlayClick: () => void; } export function NoAutoplayPermissionsOverlay({ show, onPlayClick, }: NoAutoplayPermissionsOverlayProps) { return ( {show && (

{m.video_overlay_autoplay_permissions_required()}

{m.video_overlay_enable_autoplay_settings()}
)}
); } interface PointerLockBarProps { readonly show: boolean; } export function PointerLockBar({ show }: PointerLockBarProps) { return ( {show ? (
{m.video_overlay_pointerlock_click_to_enable()}
) : null}
); }