import { useEffect, useRef, useState } from "react"; import { AnimatePresence, motion, useScroll, useTransform } from "motion/react"; import ImageOrVideo from "@/components/ui/ImageOrVideo"; import AutoFillText from "@/components/ui/AutoFillText"; import { useButtonClick } from "@/hooks/useButtonClick"; const StaggerText = ({ text }: { text: string }) => ( {[...text].map((char, index) => ( {char} ))} ); type HeroVideoExpandProps = { title: string; primaryButton: { text: string; href: string }; secondaryButton: { text: string; href: string }; onComplete?: () => void; } & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }); const HeroVideoExpand = ({ title, videoSrc, imageSrc, primaryButton, secondaryButton, onComplete, }: HeroVideoExpandProps) => { const [showLoader, setShowLoader] = useState(true); const [expanded, setExpanded] = useState(false); const handlePrimaryClick = useButtonClick(primaryButton.href); const handleSecondaryClick = useButtonClick(secondaryButton.href); const sectionRef = useRef(null); const { scrollYProgress } = useScroll({ target: sectionRef, offset: ["start start", "end start"], }); const videoY = useTransform(scrollYProgress, [0, 1], ["0px", "150px"]); const videoScale = useTransform(scrollYProgress, [0, 1], [1, 1.1]); useEffect(() => { const expandTimer = setTimeout(() => setExpanded(true), 600); const hideTimer = setTimeout(() => { setShowLoader(false); onComplete?.(); }, 1500); return () => { clearTimeout(expandTimer); clearTimeout(hideTimer); }; }, []); return ( <> {showLoader && ( )}
{title}
); }; export default HeroVideoExpand;