Seed: music template (13 files)
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
import { useState, useEffect } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Sheet, SheetContent, SheetTrigger } from "@/components/ui/sheet";
|
||||
import { Menu, Music, Headphones } from "lucide-react";
|
||||
import { ThemeToggle } from "@/components/ThemeToggle";
|
||||
|
||||
export default function Header() {
|
||||
const [open, setOpen] = useState(false);
|
||||
const [scrolled, setScrolled] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const fn = () => setScrolled(window.scrollY > 20);
|
||||
window.addEventListener("scroll", fn);
|
||||
return () => window.removeEventListener("scroll", fn);
|
||||
}, []);
|
||||
|
||||
const links = [
|
||||
{ label: "Music", to: "/music" },
|
||||
{ label: "Tour", to: "/tour" },
|
||||
{ label: "About", to: "/about" },
|
||||
{ label: "Merch", to: "/#merch" },
|
||||
];
|
||||
|
||||
return (
|
||||
<header className={`fixed top-0 inset-x-0 z-50 transition-all duration-300 \${scrolled ? "bg-slate-950/90 backdrop-blur-lg border-b border-purple-900/30 shadow-lg" : "bg-transparent"}`}>
|
||||
<div className="mx-auto max-w-7xl flex items-center justify-between px-6 py-4">
|
||||
<Link to="/" className="flex items-center gap-2 text-lg font-black tracking-tight text-white">
|
||||
<Music className="h-5 w-5 text-purple-400" />
|
||||
Nova Eclipse
|
||||
</Link>
|
||||
<nav className="hidden md:flex items-center gap-8">
|
||||
{links.map((l) => (
|
||||
<Link key={l.to} to={l.to} className="text-sm text-slate-300 hover:text-purple-400 transition-colors">{l.label}</Link>
|
||||
))}
|
||||
</nav>
|
||||
<div className="hidden md:flex items-center gap-3">
|
||||
<ThemeToggle />
|
||||
<Button asChild size="sm" className="bg-gradient-to-r from-purple-600 to-fuchsia-500 hover:from-purple-500 hover:to-fuchsia-400 active:scale-[0.98] text-white shadow-lg shadow-purple-500/25">
|
||||
<a href="#listen"><Headphones className="h-4 w-4 mr-2" />Listen Now</a>
|
||||
</Button>
|
||||
</div>
|
||||
<Sheet open={open} onOpenChange={setOpen}>
|
||||
<SheetTrigger asChild className="md:hidden">
|
||||
<Button variant="ghost" size="icon" className="text-white"><Menu className="h-5 w-5" /></Button>
|
||||
</SheetTrigger>
|
||||
<SheetContent side="right" className="w-72 bg-slate-950 border-purple-900/30">
|
||||
<nav className="mt-8 flex flex-col gap-4">
|
||||
{links.map((l) => (
|
||||
<Link key={l.to} to={l.to} className="text-lg font-medium text-slate-200 hover:text-purple-400 transition-colors" onClick={() => setOpen(false)}>{l.label}</Link>
|
||||
))}
|
||||
<Button asChild className="mt-4 w-full bg-gradient-to-r from-purple-600 to-fuchsia-500 hover:from-purple-500 hover:to-fuchsia-400 active:scale-[0.98] text-white">
|
||||
<a href="#listen" onClick={() => setOpen(false)}><Headphones className="h-4 w-4 mr-2" />Listen Now</a>
|
||||
</Button>
|
||||
<ThemeToggle />
|
||||
</nav>
|
||||
</SheetContent>
|
||||
</Sheet>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user