Spaces:
Sleeping
Sleeping
File size: 870 Bytes
ace64e6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 'use client';
import type { ReactNode } from 'react';
import { motion, useReducedMotion } from 'framer-motion';
/**
* Entrance reveal for content below the fold. Fades + slides the child in the
* first time it scrolls into view, then stays. Respects reduced motion.
*/
export function Reveal({
children,
delay = 0,
y = 28,
once = true,
className = '',
}: {
children: ReactNode;
delay?: number;
y?: number;
once?: boolean;
className?: string;
}) {
const reduceMotion = useReducedMotion();
return (
<motion.div
className={className}
initial={reduceMotion ? { opacity: 0 } : { opacity: 0, y }}
whileInView={reduceMotion ? { opacity: 1 } : { opacity: 1, y: 0 }}
viewport={{ once, margin: '-60px' }}
transition={{ duration: 0.5, delay, ease: [0.25, 1, 0.5, 1] }}
>
{children}
</motion.div>
);
}
|