diff --git a/src/components/Header.tsx b/src/components/Header.tsx index edfc238..d340808 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,70 +1,136 @@ -import React, { useState } from 'react'; -import { Menu, X, Anchor } from 'lucide-react'; +import React, { useState, useEffect, useRef } from 'react'; +import { Menu, X, Anchor, BookOpen } from 'lucide-react'; + +type Page = 'home' | 'musee'; interface HeaderProps { scrolled: boolean; + currentPage: Page; + navigateTo: (page: Page) => void; } const navLinks = [ - { label: 'Accueil', href: '#accueil' }, - { label: 'À Propos', href: '#apropos' }, - { label: 'Histoire', href: '#histoire' }, - { label: 'Galerie', href: '#galerie' }, + { label: 'Accueil', href: '#accueil' }, + { label: 'À Propos', href: '#apropos' }, + { label: 'Histoire', href: '#histoire' }, + { label: 'Galerie', href: '#galerie' }, { label: 'Événements', href: '#evenements' }, - { label: 'Contact', href: '#contact' }, + { label: 'Contact', href: '#contact' }, ]; -const Header: React.FC = ({ scrolled }) => { +const Header: React.FC = ({ scrolled, currentPage, navigateTo }) => { const [menuOpen, setMenuOpen] = useState(false); + const mobileMenuRef = useRef(null); + const hamburgerRef = useRef(null); + + // Close mobile menu on resize to desktop + useEffect(() => { + const onResize = () => { + if (window.innerWidth >= 1024) setMenuOpen(false); + }; + window.addEventListener('resize', onResize); + return () => window.removeEventListener('resize', onResize); + }, []); + + // Trap focus in mobile menu + useEffect(() => { + if (!menuOpen) return; + const focusable = mobileMenuRef.current?.querySelectorAll( + 'a, button, [tabindex]:not([tabindex="-1"])' + ); + focusable?.[0]?.focus(); + + const handleKey = (e: KeyboardEvent) => { + if (e.key === 'Escape') { + setMenuOpen(false); + hamburgerRef.current?.focus(); + } + }; + document.addEventListener('keydown', handleKey); + return () => document.removeEventListener('keydown', handleKey); + }, [menuOpen]); const handleNavClick = (href: string) => { setMenuOpen(false); - const el = document.querySelector(href); - if (el) el.scrollIntoView({ behavior: 'smooth' }); + if (currentPage !== 'home') { + navigateTo('home'); + setTimeout(() => { + document.querySelector(href)?.scrollIntoView({ behavior: 'smooth' }); + }, 100); + } else { + document.querySelector(href)?.scrollIntoView({ behavior: 'smooth' }); + } }; return (
+ {/* Tricolore accent */} +