feat: sessão #3 — lib (db/auth/email/validations), API routes, NextAuth v5, middleware, páginas account/shelters/shelter-dashboard, Prisma v7 fix
This commit is contained in:
55
components/layout/Header.tsx
Normal file
55
components/layout/Header.tsx
Normal file
@@ -0,0 +1,55 @@
|
||||
'use client';
|
||||
|
||||
import { useState, useEffect } from 'react';
|
||||
import Link from 'next/link';
|
||||
import { PawPrint } from 'lucide-react';
|
||||
import SideMenu from './SideMenu';
|
||||
|
||||
export default function Header() {
|
||||
const [scrolled, setScrolled] = useState(false);
|
||||
const [menuOpen, setMenuOpen] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const handleScroll = () => setScrolled(window.scrollY > 8);
|
||||
window.addEventListener('scroll', handleScroll, { passive: true });
|
||||
return () => window.removeEventListener('scroll', handleScroll);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (menuOpen) {
|
||||
document.body.style.overflow = 'hidden';
|
||||
} else {
|
||||
document.body.style.overflow = '';
|
||||
}
|
||||
return () => { document.body.style.overflow = ''; };
|
||||
}, [menuOpen]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<header className={`header${scrolled ? ' scrolled' : ''}`}>
|
||||
{/* Logo */}
|
||||
<Link href="/" className="logo" aria-label="PawLink — Início">
|
||||
<PawPrint size={22} strokeWidth={2.5} />
|
||||
PawLink
|
||||
</Link>
|
||||
|
||||
{/* Hambúrguer animado */}
|
||||
<button
|
||||
id="menu-toggle"
|
||||
className={`menu-btn${menuOpen ? ' open' : ''}`}
|
||||
onClick={() => setMenuOpen(v => !v)}
|
||||
aria-label={menuOpen ? 'Fechar menu' : 'Abrir menu de navegação'}
|
||||
aria-expanded={menuOpen}
|
||||
aria-controls="side-menu"
|
||||
>
|
||||
<span />
|
||||
<span />
|
||||
<span />
|
||||
</button>
|
||||
</header>
|
||||
|
||||
{/* Side Menu — sempre montado, abre/fecha via CSS */}
|
||||
<SideMenu open={menuOpen} onClose={() => setMenuOpen(false)} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user