forked from emre/www_projectmycelium_com
- Replaced multiple hero and background images with new optimized versions - Removed unused image assets from public/images directory - Updated typography styles: - Removed italic styling from various text components - Made eyebrow text uppercase - Adjusted H1 font size from 6xl to 5xl on mobile - Redesigned HomeAurora component with new layout and background - Added Mulish as primary font family in Tailwind config - Updated text formatting and spacing
59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
"use client";
|
|
import { useState, useEffect } from "react";
|
|
import { motion, AnimatePresence } from "framer-motion";
|
|
import { cn } from "@/lib/utils";
|
|
|
|
export const LayoutTextFlip = ({
|
|
text = "Build Amazing",
|
|
words = ["Landing Pages", "Component Blocks", "Page Sections", "3D Shaders"],
|
|
duration = 1500,
|
|
}: {
|
|
text: string;
|
|
words: string[];
|
|
duration?: number;
|
|
}) => {
|
|
const [currentIndex, setCurrentIndex] = useState(0);
|
|
|
|
useEffect(() => {
|
|
const interval = setInterval(() => {
|
|
setCurrentIndex((prevIndex) => (prevIndex + 1) % words.length);
|
|
}, duration);
|
|
|
|
return () => clearInterval(interval);
|
|
}, []);
|
|
|
|
return (
|
|
<>
|
|
<motion.span
|
|
layoutId="subtext"
|
|
className="text-2xl font-bold tracking-tight drop-shadow-lg md:text-4xl"
|
|
>
|
|
{text}
|
|
</motion.span>
|
|
|
|
<motion.span
|
|
layout
|
|
className="relative w-fit overflow-hidden px-2 py-2 font-medium tracking-tight"
|
|
>
|
|
<AnimatePresence mode="popLayout">
|
|
<motion.span
|
|
key={currentIndex}
|
|
initial={{ y: -40, filter: "blur(10px)" }}
|
|
animate={{
|
|
y: 0,
|
|
filter: "blur(0px)",
|
|
}}
|
|
exit={{ y: 50, filter: "blur(10px)", opacity: 0 }}
|
|
transition={{
|
|
duration: 0.5,
|
|
}}
|
|
className={cn("inline-block whitespace-nowrap")}
|
|
>
|
|
{words[currentIndex]}
|
|
</motion.span>
|
|
</AnimatePresence>
|
|
</motion.span>
|
|
</>
|
|
);
|
|
};
|