1- import React , { useState , useEffect } from "react" ;
1+ import React from "react" ;
22import { AnimatePresence } from "framer-motion" ;
33import { Menu , X } from "lucide-react" ;
4- import { useIsMobile } from "@/hooks/use-mobile" ;
5- import Logo from "../components/Header/Logo" ;
6- import DesktopNav from "./DesktopNav" ;
7- import MobileNav from "./MobileNav" ;
8- import ConnectButton from "./ConnectButton" ;
9- import PriceTicker from "../PriceTicker" ;
4+ import { useIsMobile } from "src/hooks/use-mobile" ;
5+ import { useScroll } from "src/hooks/use-scroll" ;
6+ import Logo from "src/components/Header/Logo" ;
7+ import DesktopNav from "src/components/Header/DesktopNav" ;
8+ import MobileNav from "src/components/Header/MobileNav" ;
9+ import ConnectButton from "src/components/Header/ConnectButton" ;
10+ import PriceTicker from "src/components/PriceTicker" ;
1011
1112const Header = ( ) => {
12- const [ isScrolled , setIsScrolled ] = useState ( false ) ;
13- const [ isMenuOpen , setIsMenuOpen ] = useState ( false ) ;
13+ const isScrolled = useScroll ( ) ;
14+ const [ isMenuOpen , setIsMenuOpen ] = React . useState ( false ) ;
1415 const isMobile = useIsMobile ( ) ;
1516
16- useEffect ( ( ) => {
17- // Asegura que `window` esté disponible
18- if ( typeof window === "undefined" ) return ;
19-
20- const handleScroll = ( ) => {
21- setIsScrolled ( window . scrollY > 10 ) ;
22- } ;
23-
24- window . addEventListener ( "scroll" , handleScroll ) ;
25- return ( ) => window . removeEventListener ( "scroll" , handleScroll ) ;
26- } , [ ] ) ;
27-
2817 if ( isMobile === undefined ) {
29- // Renderiza un loader mientras se determina el estado de `isMobile`
30- return < div className = "bg-alien-space-dark h-16 w-full" /> ;
18+ return < div className = "bg-alien-space-dark h-16 w-full flex items-center justify-center" > Cargando...</ div > ;
3119 }
3220
3321 return (
@@ -37,35 +25,29 @@ const Header = () => {
3725 } `}
3826 >
3927 < div className = "container mx-auto px-4 flex justify-between items-center relative" >
40- { /* Logo */ }
4128 < Logo />
42-
43- { /* Navegación de Escritorio */ }
4429 < DesktopNav />
45-
46- { /* Botón de Conexión y Menú Móvil */ }
4730 < div className = "flex items-center gap-4" >
4831 { ! isMobile && < ConnectButton /> }
4932 { isMobile && (
5033 < button
5134 onClick = { ( ) => setIsMenuOpen ( ! isMenuOpen ) }
5235 className = "p-2 text-alien-gold focus:outline-none focus:ring-2 focus:ring-alien-gold"
53- aria-label = { isMenuOpen ? "Cerrar menú" : "Abrir menú" }
36+ aria-label = { isMenuOpen ? "Cerrar menú de navegación" : "Abrir menú de navegación" }
37+ aria-expanded = { isMenuOpen }
38+ aria-controls = "mobile-menu"
39+ data-state = { isMenuOpen ? "open" : "closed" }
5440 >
5541 { isMenuOpen ? < X size = { 24 } /> : < Menu size = { 24 } /> }
5642 </ button >
5743 ) }
5844 </ div >
5945 </ div >
60-
61- { /* Menú Móvil */ }
6246 < AnimatePresence >
6347 { isMobile && isMenuOpen && (
64- < MobileNav isMenuOpen = { isMenuOpen } setIsMenuOpen = { setIsMenuOpen } />
48+ < MobileNav isMenuOpen = { isMenuOpen } setIsMenuOpen = { setIsMenuOpen } id = "mobile-menu" />
6549 ) }
6650 </ AnimatePresence >
67-
68- { /* Ticker de precios */ }
6951 < div className = "absolute left-0 right-0 bottom-0 translate-y-full w-full bg-alien-space-dark/80" >
7052 < PriceTicker />
7153 </ div >
0 commit comments