From 5c9689a2248e760f720bb30ef67e28e6552ad6f0 Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:08:02 +0330 Subject: [PATCH] Import source: src/components/Navbar/Navbar Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- src/components/Navbar/Navbar.jsx | 125 +++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 src/components/Navbar/Navbar.jsx diff --git a/src/components/Navbar/Navbar.jsx b/src/components/Navbar/Navbar.jsx new file mode 100644 index 0000000..b4da793 --- /dev/null +++ b/src/components/Navbar/Navbar.jsx @@ -0,0 +1,125 @@ +import { useState, useEffect } from 'react' +import { motion, AnimatePresence } from 'framer-motion' + +const navLinks = [ + { label: 'Discover', href: '#discover' }, + { label: 'Artists', href: '#artists' }, + { label: 'Albums', href: '#albums' }, + { label: 'Charts', href: '#charts' }, +] + +export default function Navbar() { + const [scrolled, setScrolled] = useState(false) + const [menuOpen, setMenuOpen] = useState(false) + + useEffect(() => { + const handler = () => setScrolled(window.scrollY > 40) + window.addEventListener('scroll', handler, { passive: true }) + return () => window.removeEventListener('scroll', handler) + }, []) + + return ( + <> + +
+ {/* Logo */} + + CMUSIC + + + {/* Desktop links */} +
+ {navLinks.map(({ label, href }) => ( + + {label} + + + ))} +
+ + {/* Right actions */} +
+ {/* Search */} + + + + + + + {/* Sign in — desktop */} + + Sign In + + + {/* Avatar */} + + A + + + {/* Mobile hamburger */} + setMenuOpen(o => !o)} + > + + {menuOpen + ? + : + } + + +
+
+
+ + {/* Mobile menu */} + + {menuOpen && ( + + {navLinks.map(({ label, href }) => ( + setMenuOpen(false)} + className="block py-3 text-sm text-secondary hover:text-gold transition-colors border-b border-dark-border last:border-0"> + {label} + + ))} + + )} + + + ) +}