mirror of
https://github.com/zoo-apps/ZIPs.git
synced 2026-10-30 14:57:22 +00:00
116 lines
4.5 KiB
TypeScript
116 lines
4.5 KiB
TypeScript
'use client';
|
|
|
|
import Link from 'next/link';
|
|
import { Logo } from './logo';
|
|
import { ThemeToggle } from './theme-toggle';
|
|
import { Search, ArrowRight } from 'lucide-react';
|
|
import { useEffect, useState } from 'react';
|
|
|
|
export function HomeHeader() {
|
|
const [scrolled, setScrolled] = useState(false);
|
|
|
|
useEffect(() => {
|
|
const handleScroll = () => {
|
|
setScrolled(window.scrollY > 10);
|
|
};
|
|
window.addEventListener('scroll', handleScroll, { passive: true });
|
|
return () => window.removeEventListener('scroll', handleScroll);
|
|
}, []);
|
|
|
|
const triggerSearch = () => {
|
|
const event = new KeyboardEvent('keydown', {
|
|
key: 'k',
|
|
metaKey: true,
|
|
bubbles: true,
|
|
});
|
|
document.dispatchEvent(event);
|
|
};
|
|
|
|
return (
|
|
<header
|
|
className={`sticky top-0 z-50 w-full transition-all duration-200 ${
|
|
scrolled
|
|
? 'bg-background/80 backdrop-blur-lg border-b border-border'
|
|
: 'bg-transparent'
|
|
}`}
|
|
>
|
|
<div className="container max-w-6xl mx-auto px-4">
|
|
<div className="flex h-16 items-center justify-between">
|
|
{/* Left: Logo */}
|
|
<Link href="/" className="flex items-center gap-2.5 shrink-0">
|
|
<Logo size={28} />
|
|
<span className="font-bold text-lg hidden sm:block">Zoo ZIPs</span>
|
|
</Link>
|
|
|
|
{/* Center: Nav */}
|
|
<nav className="hidden md:flex items-center gap-6">
|
|
<Link
|
|
href="/docs"
|
|
className="text-sm text-muted-foreground hover:text-foreground transition-colors"
|
|
>
|
|
Proposals
|
|
</Link>
|
|
<a
|
|
href="https://github.com/zoo-labs/zips"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="text-sm text-muted-foreground hover:text-foreground transition-colors"
|
|
>
|
|
Contribute
|
|
</a>
|
|
<a
|
|
href="https://github.com/zoo-labs/zips/discussions"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="text-sm text-muted-foreground hover:text-foreground transition-colors"
|
|
>
|
|
Discussions
|
|
</a>
|
|
</nav>
|
|
|
|
{/* Right: Search, Social, Theme, CTA */}
|
|
<div className="flex items-center gap-3">
|
|
<button
|
|
onClick={triggerSearch}
|
|
className="flex items-center gap-2 px-3 py-1.5 text-sm text-muted-foreground bg-muted/50 border border-border rounded-lg hover:bg-muted transition-colors"
|
|
>
|
|
<Search className="size-3.5" />
|
|
<span className="hidden sm:inline">Search</span>
|
|
<kbd className="hidden sm:flex items-center gap-0.5 px-1.5 py-0.5 text-[10px] bg-background border border-border rounded">
|
|
<span className="text-xs">⌘</span>K
|
|
</kbd>
|
|
</button>
|
|
|
|
{/* GitHub */}
|
|
<a
|
|
href="https://github.com/zoo-labs/zips"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="p-2 text-muted-foreground hover:text-foreground transition-colors"
|
|
aria-label="GitHub"
|
|
>
|
|
<svg className="size-5" fill="currentColor" viewBox="0 0 24 24">
|
|
<path
|
|
fillRule="evenodd"
|
|
clipRule="evenodd"
|
|
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
|
/>
|
|
</svg>
|
|
</a>
|
|
|
|
<ThemeToggle />
|
|
|
|
<Link
|
|
href="/docs"
|
|
className="hidden sm:inline-flex items-center gap-1.5 px-4 py-2 text-sm font-medium bg-foreground text-background rounded-lg hover:bg-foreground/90 transition-colors"
|
|
>
|
|
Browse
|
|
<ArrowRight className="size-3.5" />
|
|
</Link>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
);
|
|
}
|