import { WavesIcon } from "@phosphor-icons/react"; import { useEffect, useState } from "react"; import candle from "../../assets/envelope/candle.png"; import stamp from "../../assets/envelope/stamp.png"; import waxSeal from "../../assets/envelope/waxSeal.png"; export interface EnvelopeRevealProps { recipient?: string; date?: string; onRevealComplete: () => void; ignite: boolean; isFlip?: boolean; isInteractive?: boolean; openFlap?: boolean; } export function EnvelopeReveal({ recipient, date, onRevealComplete, ignite, isFlip, isInteractive = true, openFlap = false, }: EnvelopeRevealProps) { const [revealLetter, setRevealLetter] = useState(false); const [isFlipped, setIsFlipped] = useState(!!isFlip); const [isFlapOpen, setIsFlapOpen] = useState(!!openFlap); useEffect(() => { setIsFlipped(!!isFlip); }, [isFlip]); const [burn, setBurn] = useState<{ width: number; height: number }>({ width: 0, height: 0, }); useEffect(() => { setIsFlapOpen(openFlap); }, [openFlap]); useEffect(() => { if (!ignite) { setBurn({ width: 0, height: 0 }); return; } const burnInterval = setInterval(() => { setBurn((prev) => ({ width: prev.width + 4, height: prev.height + 6 })); }, 100); return () => clearInterval(burnInterval); }, [ignite]); const handleClick = () => { if (revealLetter) return; setRevealLetter(true); setTimeout(() => { onRevealComplete(); }, 2500); }; return ( <>
setIsFlapOpen((prev) => !prev)} disabled={!isInteractive} />
Seal setIsFlapOpen((prev) => !prev)} onKeyDown={() => setIsFlapOpen((prev) => !prev)} />
{ignite && ( <>
candle
)} ); }