import React, { useState } from "react"; import { motion, AnimatePresence } from "motion/react"; import { Heart, Sparkles, Gift, HeartHandshake, Eye, ArrowRight } from "lucide-react"; interface OpeningAnimationProps { gfNickname: string; bfName: string; customLetter: string; onOpenComplete: () => void; } export default function OpeningAnimation({ gfNickname, bfName, customLetter, onOpenComplete, }: OpeningAnimationProps) { const [stage, setStage] = useState<"heybaby" | "envelope" | "letter">("heybaby"); // Stabilize little floating hearts inside the view with useMemo to prevent lag/re-eval on every render. const particles = React.useMemo(() => { return Array.from({ length: 8 }, (_, i) => ({ id: i, left: `${(i * 12) + 8}%`, // evenly staggered distribution across the screen delay: i * 0.6, size: (i % 3 === 0) ? 14 : (i % 3 === 1) ? 18 : 22, duration: 12 + (i % 3) * 3, })); }, []); // Clean the letter message into paragraphs const letterParagraphs = customLetter.split("\n\n"); return (
{/* Decorative Floating Hearts Backdrop */}
{particles.map((p) => ( ❤️ ))}
{/* Stage 0: The Sweet Greeting 'hey baby...' */} {stage === "heybaby" && ( {/* Pulsating central love anchor */} {/* Title requested by client */} hey baby... It's your special day, and i built something sweet just for you setStage("envelope")} className="bg-white hover:bg-rose-50 text-rose-600 font-display font-semibold text-sm md:text-base px-8 py-4 rounded-full shadow-lg border border-rose-100 flex items-center gap-2.5 cursor-pointer animate-heartbeat" id="view-gift-button" > Tap to see my surprise )} {/* Stage 1: Closed Envelope / Pulsing Gift Card */} {stage === "envelope" && (
I prepared a letter with love!
{/* Interactive Envelope Graphic */} setStage("letter")} className="relative w-80 h-52 bg-gradient-to-br from-rose-400 to-rose-500 rounded-2xl shadow-xl hover:shadow-2xl cursor-pointer flex items-center justify-center border-t-2 border-rose-300 overflow-hidden" style={{ willChange: "transform" }} id="cute-envelope-button" > {/* Envelope flap folds and layers */}
{/* Diagonal back lines mimicking envelope flap */} {/* Glowing pulsating Wax Seal */}

Tap to open seal

Sent with absolute adoration by {bfName}

)} {/* Stage 2: Revealing the Love Letter */} {stage === "letter" && ( {/* Top golden crest */}
{/* Corner floral motifs using shapes */}
{/* Letter Header */}

Dearest {gfNickname},

{/* Letter Content Pane (Scrollable within paper) */}
{letterParagraphs.map((para, idx) => ( {para} ))} For you, with love,
— {bfName}
{/* Love Footer Navigation To Timeline */}
Take a Walk Down Memory Lane

Scroll down & explore interactive widgets next

)}
); }