From 06cf3aa383cc88c46914a563a454f252a3c0426c Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:07:59 +0330 Subject: [PATCH] Import source: src/components/Hero/Hero Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- src/components/Hero/Hero.jsx | 159 +++++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 src/components/Hero/Hero.jsx diff --git a/src/components/Hero/Hero.jsx b/src/components/Hero/Hero.jsx new file mode 100644 index 0000000..8b40232 --- /dev/null +++ b/src/components/Hero/Hero.jsx @@ -0,0 +1,159 @@ +import { useEffect, useRef } from 'react' +import { motion } from 'framer-motion' +import { gsap } from 'gsap' +import AudioVisualizer3D from './AudioVisualizer3D' +import HeroParticles from './HeroParticles' + +const fadeUp = (delay = 0) => ({ + initial: { opacity: 0, y: 32 }, + animate: { opacity: 1, y: 0 }, + transition: { duration: 0.85, ease: [0.22, 1, 0.36, 1], delay }, +}) + +export default function Hero({ isPlaying, onTogglePlay }) { + const headingRef = useRef() + + useEffect(() => { + const ctx = gsap.context(() => { + gsap.from('.hero-line', { + y: 80, + opacity: 0, + duration: 1, + stagger: 0.14, + ease: 'power4.out', + delay: 0.2, + }) + }) + return () => ctx.revert() + }, []) + + return ( +
+ + {/* Particle bg */} +
+ +
+ + {/* Ambient blobs */} +
+
+
+ + {/* 3D Visualizer */} +
+ +
+ + {/* Main content */} +
+ + {/* Badge */} + + + Now Streaming + · + 40M tracks + + + {/* Headline */} +
+
+ Feel The +
+
+ Music +
+
+ In Three Dimensions +
+
+ + {/* Subtitle */} + + Where sound becomes sculpture. Every frequency, every beat — visualized in real time across a living 3D canvas. + + + {/* CTAs */} + + + {isPlaying + ? <> Pause + : <> Start Listening + } + + + + Explore Collection + + + + + + + {/* Stats row */} + + {[['40M+', 'Tracks'], ['2.1M', 'Artists'], ['180+', 'Countries'], ['99.9%', 'Uptime']].map(([num, label]) => ( +
+

{num}

+

{label}

+
+ ))} +
+
+ + {/* Scroll cue */} + + Scroll + + + + +
+ ) +} + +function PlayIcon() { + return ( + + + + ) +} +function PauseIcon() { + return ( + + + + ) +}