"use client"; import { animate, motion, useMotionValue, useTransform } from "framer-motion"; import { Special_Elite } from "next/font/google"; import React, { useEffect } from "react"; const special_elite = Special_Elite({ weight: "400", subsets: ["latin"] }); type props = { children: string; styles: string; duration: number; delay: number; }; const FramerTextAnimate = ({ children, styles, duration, delay }: props) => { const count = useMotionValue(0); const baseText = children as string; const rounded = useTransform(count, (latest) => Math.round(latest)); const displayText = useTransform(rounded, (latest) => baseText.slice(0, latest) ); useEffect(() => { // Delay the animation start const delayTimeout = setTimeout(() => { const controls = animate(count, baseText.length, { duration: duration, ease: "easeInOut", }); return () => controls.stop(); }, delay * 1000); // Clear the timeout on unmount to prevent memory leaks return () => clearTimeout(delayTimeout); }, []); return ( <> {displayText} ); }; export default FramerTextAnimate;