'use client'; import * as React from 'react'; import { motion, useInView, type UseInViewOptions, type Transition, } from 'motion/react'; const ENTRY_ANIMATION = { initial: { rotateX: 0 }, animate: { rotateX: 90 }, }; const EXIT_ANIMATION = { initial: { rotateX: 90 }, animate: { rotateX: 0 }, }; const formatCharacter = (char: string) => (char === ' ' ? '\u00A0' : char); type RollingTextProps = Omit, 'children'> & { transition?: Transition; inView?: boolean; inViewMargin?: UseInViewOptions['margin']; inViewOnce?: boolean; text: string; }; function RollingText({ ref, transition = { duration: 0.5, delay: 0.1, ease: 'easeOut' }, inView = false, inViewMargin = '0px', inViewOnce = true, text, ...props }: RollingTextProps) { const localRef = React.useRef(null); React.useImperativeHandle(ref, () => localRef.current!); const inViewResult = useInView(localRef, { once: inViewOnce, margin: inViewMargin, }); const isInView = !inView || inViewResult; const characters = React.useMemo(() => text.split(''), [text]); return ( {characters.map((char, idx) => ( ))} {text} ); } export { RollingText, type RollingTextProps };