22import Link from 'next/link'
33import React , { useState , useEffect } from 'react'
44import Image from 'next/image'
5- import { ArrowRight , MoveRight , PawPrint } from 'lucide-react'
5+ import { ArrowRight , MoveRight , PawPrint , Menu , X } from 'lucide-react'
66import { usePathname , useRouter } from 'next/navigation'
77
88const Header = ( ) => {
99 const pathname = usePathname ( )
1010 const router = useRouter ( )
1111 const [ loadingPath , setLoadingPath ] = useState < string | null > ( null )
12+ const [ menuOpen , setMenuOpen ] = useState ( false )
1213
1314 const navItems = [
1415 { href : '/' , label : 'Home' } ,
@@ -22,6 +23,7 @@ const Header = () => {
2223 if ( pathname !== href ) {
2324 setLoadingPath ( href )
2425 router . push ( href )
26+ setMenuOpen ( false )
2527 }
2628 }
2729
@@ -31,11 +33,12 @@ const Header = () => {
3133 } , [ pathname ] )
3234
3335 return (
34- < header className = "sticky top-0 z-50 px-4 py-4 bg-tansa-blue" >
36+ < header className = "sticky top-0 z-40 px-6 py-5 bg-tansa-blue" >
3537 < div className = "flex items-center justify-between w-full" >
3638 { /*Left Side Element*/ }
3739 < Link href = "/" className = "flex-1" >
38- < div className = "flex items-center space-x-6 group" >
40+ { /*Desktop Logo*/ }
41+ < div className = "hidden md:flex items-center space-x-6 group" >
3942 < div className = "h-16 w-16 rounded-full flex items-center justify-center transition-transform duration-300 group-hover:scale-110" >
4043 < Image
4144 src = "/TANSA-LOGO.svg"
@@ -55,6 +58,18 @@ const Header = () => {
5558 </ h2 >
5659 </ div >
5760 </ div >
61+ { /*Mobile Logo*/ }
62+ < div className = "flex items-center space-x-2 mb-8" >
63+ < Image
64+ src = "/TANSA-LOGO.svg"
65+ alt = "TANSA bear logo"
66+ width = { 40 }
67+ height = { 40 }
68+ />
69+ < h1 className = "text-sm font-semibold text-tansa-cream" >
70+ Taiwanese and New Zealand< br /> Students' Association
71+ </ h1 >
72+ </ div >
5873 </ Link >
5974
6075 { /* Navigation */ }
@@ -87,19 +102,18 @@ const Header = () => {
87102 </ ul >
88103 </ nav >
89104
90- { /* Right Side Elements */ }
91- < div className = "flex-1 flex justify-end " >
92- < div className = "flex items-center space-x-4" >
93- { /* Snowflake Icon */ }
105+ { /* Right Side Elements*/ }
106+ < div className = "flex items-center " >
107+ { /* Desktop Right Side */ }
108+ < div className = "hidden md:flex items-center space-x-4" >
94109 < Link
95110 href = "https://linktr.ee/tansa.ausa"
96- target = "blank "
111+ target = "_blank "
97112 className = "text-white transition-all duration-300 hover:scale-110"
98113 >
99114 < Image src = "/icons/linktree.svg" width = { 20 } height = { 20 } alt = "LinkTree" />
100115 </ Link >
101116
102- { /* Join Us Button */ }
103117 < Link
104118 href = "/sign-up"
105119 className = "bg-tansa-cream text-tansa-blue px-3 py-2 rounded-full font-bold transition-transform duration-200 group-hover:-translate-x-6 flex items-center group relative min-w-[110px]"
@@ -115,7 +129,54 @@ const Header = () => {
115129 </ span >
116130 </ Link >
117131 </ div >
132+ { /* Mobile Hamburger */ }
133+ < div className = "md:hidden ml-2 pt-5 pb-11 pr-2 z-50 mx-auto" >
134+ < button
135+ onClick = { ( ) => setMenuOpen ( ! menuOpen ) }
136+ className = { `group flex flex-col gap-1.5 w-8 h-8 justify-center items-center focus:outline-none ${
137+ menuOpen ? "open" : ""
138+ } `}
139+ >
140+ < span className = "hamburger-line" />
141+ < span className = "hamburger-line" />
142+ < span className = "hamburger-line" />
143+ </ button >
144+ </ div >
118145 </ div >
146+ { /* Mobile Dropdown Menu */ }
147+ { menuOpen && (
148+ < div className = "md:hidden absolute top-0 left-0 right-0 bg-tansa-cream shadow-lg z-40 px-6 pt-8 pb-8 transform transition-all duration-500 ease-out" >
149+
150+ { /* Mobile Logo */ }
151+ < div className = "flex items-center space-x-2 mb-8" >
152+ < Image
153+ src = "/TANSA-LOGO.svg"
154+ alt = "TANSA bear logo"
155+ width = { 40 }
156+ height = { 40 }
157+ />
158+ < h1 className = "text-sm font-semibold text-tansa-blue" >
159+ Taiwanese and New Zealand< br /> Students' Association
160+ </ h1 >
161+ </ div >
162+
163+ < ul className = "flex flex-col items-start space-y-6 text-lg text-tansa-blue font-semibold" >
164+ { /* Links */ }
165+ { navItems
166+ . filter ( ( item ) => item . href !== '/' ) // skip Home
167+ . map ( ( item ) => (
168+ < li key = { item . href } >
169+ < button
170+ onClick = { ( ) => handleClick ( item . href ) }
171+ className = "text-lg text-tansa-blue"
172+ >
173+ { item . label }
174+ </ button >
175+ </ li >
176+ ) ) }
177+ </ ul >
178+ </ div >
179+ ) }
119180 </ div >
120181 </ header >
121182 )
0 commit comments