southernmonsarysupply/components/page-hero-motion.tsx

77 lines
1.5 KiB
TypeScript

"use client";
import { motion } from "framer-motion";
import type { ReactNode } from "react";
const smoothEase = [0.16, 1, 0.3, 1] as const;
const fadeUp = (delay = 0) => ({
initial: { opacity: 0, y: 28 },
animate: { opacity: 1, y: 0 },
transition: { duration: 0.6, ease: smoothEase, delay },
});
export function PageHeroMotion({ children }: { children: ReactNode }) {
return <>{children}</>;
}
export function FadeUp({
children,
delay = 0,
className = "",
}: {
children: ReactNode;
delay?: number;
className?: string;
}) {
return (
<motion.div className={className} {...fadeUp(delay)}>
{children}
</motion.div>
);
}
export function FadeIn({
children,
delay = 0,
className = "",
}: {
children: ReactNode;
delay?: number;
className?: string;
}) {
return (
<motion.div
className={className}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.8, ease: "easeOut", delay }}
>
{children}
</motion.div>
);
}
export function SlideIn({
children,
delay = 0,
direction = "left",
className = "",
}: {
children: ReactNode;
delay?: number;
direction?: "left" | "right";
className?: string;
}) {
return (
<motion.div
className={className}
initial={{ opacity: 0, x: direction === "left" ? -40 : 40 }}
animate={{ opacity: 1, x: 0 }}
transition={{ duration: 0.65, ease: smoothEase, delay }}
>
{children}
</motion.div>
);
}