import * as React from "react"; import CreateScreen, { StorageDestoryer } from "./util"; const DELAY = 250; type ScreenProps = { progress: number; title?: string; description?: string; fullscreen?: boolean; }; /** * Executes Screen. * @param props Parameter props. * @returns unknown. */ export default function Screen(props: ScreenProps) { const [displayProgress, setDisplayProgress] = React.useState(0); const displayProgressRef = React.useRef(0); React.useEffect(() => { displayProgressRef.current = displayProgress; }, [displayProgress]); React.useEffect(() => { const target = props.progress; const start = displayProgressRef.current; const delta = target - start; if (delta === 0) { return; } const duration = DELAY; const startTime = performance.now(); let frameId = 0; /** * Executes animate. * @param now Parameter now. * @returns unknown. */ function animate(now: number) { const elapsed = now - startTime; const t = Math.min(elapsed / duration, 1); const eased = 1 - Math.pow(1 - t, 3); setDisplayProgress(start + delta * eased); if (t < 1) { frameId = requestAnimationFrame(animate); } } frameId = requestAnimationFrame(animate); return () => { cancelAnimationFrame(frameId); }; }, [props.progress]); return (

{props.title ?? "Loading"}

{props.description ? (

{props.description}

) : (
)}
); }