"use client";
import * as React from "react";
import { motion, HTMLMotionProps } from "motion/react";
import { cn } from "@/lib/utils";
export interface TextFadeInProps
extends Omit<HTMLMotionProps<"p">, "children"> {
children: string;
duration?: number;
delay?: number;
by?: "character" | "word";
staggerDelay?: number;
}
export function TextFadeIn({
children,
className,
duration = 0.5,
delay = 0,
by = "word",
staggerDelay = 0.03,
...props
}: TextFadeInProps) {
const units = by === "word" ? children.split(" ") : children.split("");
return (
<motion.p className={cn(className)} {...props}>
{units.map((unit, index) => (
<motion.span
key={index}
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{
duration,
delay: delay + index * staggerDelay,
}}
style={{ display: "inline-block" }}
>
{unit}
{by === "word" && index < units.length - 1 && "\u00A0"}
</motion.span>
))}
</motion.p>
);
}