From 51d1f4ed777e71240039a41554915b375daf2285 Mon Sep 17 00:00:00 2001 From: SANTHSIM22 Date: Sun, 27 Oct 2024 13:14:59 +0530 Subject: [PATCH] feat: hero-page --- src/app/page.tsx | 10 +- src/components/common/About.tsx | 10 +- src/components/widget/hero.tsx | 177 ++++++++++++++++++++++++++++++ src/components/widget/landing.tsx | 48 ++++++++ 4 files changed, 237 insertions(+), 8 deletions(-) create mode 100644 src/components/widget/hero.tsx create mode 100644 src/components/widget/landing.tsx diff --git a/src/app/page.tsx b/src/app/page.tsx index 90c8fe9..bbb268d 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -8,15 +8,19 @@ import About from "@/components/common/About"; import Team from "@/components/common/Team-Section"; import { CtaSection } from "@/components/common/cta-section"; import Performers from "@/components/widget/performers"; +import HeroHighlight from "@/components/widget/hero"; +import Landing_page from "@/components/widget/landing"; export default function Home() { return ( - <> + <> + {/* */}
-
+ {/*
+ >
*/}
diff --git a/src/components/common/About.tsx b/src/components/common/About.tsx index 926a25d..e9d63be 100644 --- a/src/components/common/About.tsx +++ b/src/components/common/About.tsx @@ -2,16 +2,16 @@ import { motion } from "framer-motion"; const AboutSection: React.FC = () => { return ( -
+
{/* Background decorative layers */}
- - */} + {/* { initial={{ scale: 0 }} animate={{ scale: 1 }} transition={{ duration: 1.5, ease: "easeOut", delay: 0.3 }} - /> + /> */}
{/* About content */} diff --git a/src/components/widget/hero.tsx b/src/components/widget/hero.tsx new file mode 100644 index 0000000..34b60af --- /dev/null +++ b/src/components/widget/hero.tsx @@ -0,0 +1,177 @@ +'use client' + +import { tedxsjecAssetsPrefix } from "@/lib/utils" +import { useState, useEffect, useRef } from "react" +import Image from "next/image" +import { Button } from "@/components/ui/button" +import { motion, useScroll, useTransform, AnimatePresence } from "framer-motion" +import { ArrowRight, Calendar, MapPin } from "lucide-react" + +type TimeLeft = { + days: number + hours: number + minutes: number + seconds: number +} + +const StaticShadow = ({ children }: { children: React.ReactNode }) => { + return ( + + {children} + + ) +} + +const FlipCard = ({ value, label }: { value: number; label: string }) => { + return ( + +
+ + + {value.toString().padStart(2, '0')} + + +
+ {label} +
+ ) +} + +export default function HeroHighlight() { + const [isLoaded, setIsLoaded] = useState(false) + const [timeLeft, setTimeLeft] = useState({ days: 0, hours: 0, minutes: 0, seconds: 0 }) + const svgRef = useRef(null) + const targetDate = new Date('2024-12-14') + + const { scrollYProgress } = useScroll() + const pathLength = useTransform(scrollYProgress, [0, 0.8], [0, 1]) + + useEffect(() => { + setIsLoaded(true) + + const intervalId = setInterval(() => { + const now = new Date() + const difference = targetDate.getTime() - now.getTime() + + if (difference > 0) { + setTimeLeft({ + days: Math.floor(difference / (1000 * 60 * 60 * 24)), + hours: Math.floor((difference / (1000 * 60 * 60)) % 24), + minutes: Math.floor((difference / 1000 / 60) % 60), + seconds: Math.floor((difference / 1000) % 60) + }) + } else { + clearInterval(intervalId) + setTimeLeft({ days: 0, hours: 0, minutes: 0, seconds: 0 }) + } + }, 1000) + + return () => clearInterval(intervalId) + }, [targetDate]) + + const timeUnits: (keyof TimeLeft)[] = ['days', 'hours', 'minutes', 'seconds'] + + return ( +
+ + + + +
+ +

+ Ideas Worth Spreading +

+

+ Join us for an inspiring TEDx event featuring thought-provoking talks, innovative ideas, and transformative experiences. +

+
+ +
+
+
+ +

Date: September 15, 2023

+
+
+ +

Venue: Grand Convention Center

+
+
+
+
+ + TEDx Event Logo + + + Life - Explore What's Worth Living + +
+
+ +

Event Starts In

+
+ {timeUnits.map((unit) => ( + + ))} +
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/widget/landing.tsx b/src/components/widget/landing.tsx new file mode 100644 index 0000000..42a4e4e --- /dev/null +++ b/src/components/widget/landing.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import Image from 'next/image'; +import { tedxsjecAssetsPrefix } from '@/lib/utils'; +import { useGSAP } from '@gsap/react'; +import gsap from 'gsap'; +const Landing_page = () => { + + useGSAP(() => { + const t2 = gsap.timeline({ + onComplete: () => { + // Hide the menu or set pointer-events to none after the animation completes + gsap.set(".menu-g", { zIndex: -1, pointerEvents: "none" }); + } + }); + t2.to(".menu-logo1",{opacity:0,x:"100%",duration:0.3},"<") + .to(".menu-g span", { + duration: 0.5, + x: "100%", + stagger: 0.1, + ease: "Expo.easeInOut", + },"<"); + }, []); + return ( + <> +
+ + + + + {/* The logo to animate with the menu */} +
+
+ logo +
+
+
+ + + ); +}; + +export default Landing_page;