@@ -38,6 +38,21 @@ const Header = () => {
3838 } )
3939 } , [ ] )
4040
41+ useEffect ( ( ) => {
42+ // Close all dropdowns when route changes
43+ const handleRouteChange = ( ) => {
44+ setLanguageDropdownOpen ( false )
45+ setFrameworkDropdownOpen ( false )
46+ setGitSelectionDropdownOpen ( false )
47+ setRoadmapDropdownOpen ( false )
48+ }
49+
50+ router . events . on ( 'routeChangeStart' , handleRouteChange )
51+ return ( ) => {
52+ router . events . off ( 'routeChangeStart' , handleRouteChange )
53+ }
54+ } , [ router ] )
55+
4156 const toggleSideNav = ( ) => {
4257 setIsOpen ( ! isOpen )
4358 }
@@ -103,7 +118,7 @@ const Header = () => {
103118 }
104119
105120 return (
106- < nav className = 'border-b border-gray-200 bg-white shadow-md' >
121+ < nav className = 'border-b border-gray-200 bg-[var(--bg-primary)] shadow-md dark:border-gray-700 ' >
107122 < div className = 'modern-container' >
108123 < div className = 'flex h-16 items-center justify-between' >
109124 < div className = 'flex items-center space-x-8' >
@@ -123,12 +138,12 @@ const Header = () => {
123138 >
124139 < button
125140 onClick = { toggleLanguageDropdown }
126- className = 'flex items-center transition-colors hover:text-modern-purple '
141+ className = 'flex items-center transition-colors duration-200 hover:text-[var(--accent-color)] '
127142 style = { { color : 'var(--fc-primary)' } }
128143 >
129144 < span className = 'font-medium' > Languages</ span >
130145 < svg
131- className = { `ml-1 h-4 w-4 transition-transform ${ isLanguageDropdownOpen ? 'rotate-180' : '' } ` }
146+ className = { `ml-1 h-4 w-4 transition-transform duration-200 ${ isLanguageDropdownOpen ? 'rotate-180' : '' } ` }
132147 fill = 'none'
133148 viewBox = '0 0 24 24'
134149 stroke = 'currentColor'
@@ -143,7 +158,7 @@ const Header = () => {
143158 </ button >
144159 { isLanguageDropdownOpen && (
145160 < div
146- className = 'scrollable-dropdown absolute z-50 mt-2 w-60 rounded-md py-1 shadow-lg'
161+ className = 'scrollable-dropdown absolute z-50 mt-2 w-60 rounded-md py-1 shadow-lg transition-all duration-200 '
147162 style = { {
148163 backgroundColor : 'var(--bg-secondary)' ,
149164 color : 'var(--fc-primary)'
@@ -153,10 +168,9 @@ const Header = () => {
153168 < button
154169 key = { language . name }
155170 onClick = { ( ) => navigateToLanguage ( language . link ) }
156- className = 'block w-full px-4 py-2 text-left text-sm transition-colors hover:bg-[var(--bg-hover)]'
171+ className = 'block w-full px-4 py-2 text-left text-sm transition-all duration-200 hover:bg-[var(--bg-hover)] hover:text-[var(--accent-color )]'
157172 style = { {
158- color : 'var(--fc-primary)' ,
159- backgroundColor : 'var(--bg-secondary)'
173+ color : 'var(--fc-primary)'
160174 } }
161175 >
162176 { language . name }
@@ -172,12 +186,12 @@ const Header = () => {
172186 >
173187 < button
174188 onClick = { toggleFrameworkDropdown }
175- className = 'flex items-center transition-colors hover:text-modern-purple '
189+ className = 'flex items-center transition-colors duration-200 hover:text-[var(--accent-color)] '
176190 style = { { color : 'var(--fc-primary)' } }
177191 >
178192 < span className = 'font-medium' > Frameworks</ span >
179193 < svg
180- className = { `ml-1 h-4 w-4 transition-transform ${ isFrameworkDropdownOpen ? 'rotate-180' : '' } ` }
194+ className = { `ml-1 h-4 w-4 transition-transform duration-200 ${ isFrameworkDropdownOpen ? 'rotate-180' : '' } ` }
181195 fill = 'none'
182196 viewBox = '0 0 24 24'
183197 stroke = 'currentColor'
@@ -192,7 +206,7 @@ const Header = () => {
192206 </ button >
193207 { isFrameworkDropdownOpen && (
194208 < div
195- className = 'scrollable-dropdown absolute z-50 mt-2 w-60 rounded-md py-1 shadow-lg'
209+ className = 'scrollable-dropdown absolute z-50 mt-2 w-60 rounded-md py-1 shadow-lg transition-all duration-200 '
196210 style = { {
197211 backgroundColor : 'var(--bg-secondary)' ,
198212 color : 'var(--fc-primary)'
@@ -202,10 +216,9 @@ const Header = () => {
202216 < button
203217 key = { framework . name }
204218 onClick = { ( ) => navigateToFramework ( framework . link ) }
205- className = 'block w-full px-4 py-2 text-left text-sm transition-colors hover:bg-[var(--bg-hover)]'
219+ className = 'block w-full px-4 py-2 text-left text-sm transition-all duration-200 hover:bg-[var(--bg-hover)] hover:text-[var(--accent-color )]'
206220 style = { {
207- color : 'var(--fc-primary)' ,
208- backgroundColor : 'var(--bg-secondary)'
221+ color : 'var(--fc-primary)'
209222 } }
210223 >
211224 { framework . name }
@@ -221,12 +234,12 @@ const Header = () => {
221234 >
222235 < button
223236 onClick = { toggleGitSelectionDropdown }
224- className = 'flex items-center transition-colors hover:text-modern-purple '
237+ className = 'flex items-center transition-colors duration-200 hover:text-[var(--accent-color)] '
225238 style = { { color : 'var(--fc-primary)' } }
226239 >
227240 < span className = 'font-medium' > Git</ span >
228241 < svg
229- className = { `ml-1 h-4 w-4 transition-transform ${ isGitSelectionDropdownOpen ? 'rotate-180' : '' } ` }
242+ className = { `ml-1 h-4 w-4 transition-transform duration-200 ${ isGitSelectionDropdownOpen ? 'rotate-180' : '' } ` }
230243 fill = 'none'
231244 viewBox = '0 0 24 24'
232245 stroke = 'currentColor'
@@ -241,7 +254,7 @@ const Header = () => {
241254 </ button >
242255 { isGitSelectionDropdownOpen && (
243256 < div
244- className = 'scrollable-dropdown absolute z-50 mt-2 w-60 rounded-md py-1 shadow-lg'
257+ className = 'scrollable-dropdown absolute z-50 mt-2 w-60 rounded-md py-1 shadow-lg transition-all duration-200 '
245258 style = { {
246259 backgroundColor : 'var(--bg-secondary)' ,
247260 color : 'var(--fc-primary)'
@@ -251,10 +264,9 @@ const Header = () => {
251264 < button
252265 key = { git . name }
253266 onClick = { ( ) => navigateToGitSelection ( git . link ) }
254- className = 'block w-full px-4 py-2 text-left text-sm transition-colors hover:bg-[var(--bg-hover)]'
267+ className = 'block w-full px-4 py-2 text-left text-sm transition-all duration-200 hover:bg-[var(--bg-hover)] hover:text-[var(--accent-color )]'
255268 style = { {
256- color : 'var(--fc-primary)' ,
257- backgroundColor : 'var(--bg-secondary)'
269+ color : 'var(--fc-primary)'
258270 } }
259271 >
260272 { git . name }
@@ -270,12 +282,12 @@ const Header = () => {
270282 >
271283 < button
272284 onClick = { toggleRoadmapDropdown }
273- className = 'flex items-center transition-colors hover:text-modern-purple '
285+ className = 'flex items-center transition-colors duration-200 hover:text-[var(--accent-color)] '
274286 style = { { color : 'var(--fc-primary)' } }
275287 >
276288 < span className = 'font-medium' > Roadmap</ span >
277289 < svg
278- className = { `ml-1 h-4 w-4 transition-transform ${ isRoadmapDropdownOpen ? 'rotate-180' : '' } ` }
290+ className = { `ml-1 h-4 w-4 transition-transform duration-200 ${ isRoadmapDropdownOpen ? 'rotate-180' : '' } ` }
279291 fill = 'none'
280292 viewBox = '0 0 24 24'
281293 stroke = 'currentColor'
@@ -290,7 +302,7 @@ const Header = () => {
290302 </ button >
291303 { isRoadmapDropdownOpen && (
292304 < div
293- className = 'scrollable-dropdown absolute z-50 mt-2 w-60 rounded-md py-1 shadow-lg'
305+ className = 'scrollable-dropdown absolute z-50 mt-2 w-60 rounded-md py-1 shadow-lg transition-all duration-200 '
294306 style = { {
295307 backgroundColor : 'var(--bg-secondary)' ,
296308 color : 'var(--fc-primary)'
@@ -300,10 +312,9 @@ const Header = () => {
300312 < button
301313 key = { roadmap . name }
302314 onClick = { ( ) => navigateToRoadmap ( roadmap . link ) }
303- className = 'block w-full px-4 py-2 text-left text-sm transition-colors hover:bg-[var(--bg-hover)]'
315+ className = 'block w-full px-4 py-2 text-left text-sm transition-all duration-200 hover:bg-[var(--bg-hover)] hover:text-[var(--accent-color )]'
304316 style = { {
305- color : 'var(--fc-primary)' ,
306- backgroundColor : 'var(--bg-secondary)'
317+ color : 'var(--fc-primary)'
307318 } }
308319 >
309320 { roadmap . name }
@@ -381,12 +392,13 @@ const Header = () => {
381392
382393 { /* Mobile menu */ }
383394 { isOpen && (
384- < div className = 'z-50 bg-white shadow-lg md:hidden' >
395+ < div className = 'z-50 bg-[var(--bg-primary)] shadow-lg md:hidden' >
385396 < div className = 'space-y-1 px-2 pb-3 pt-2 sm:px-3' >
386- < div className = 'block px-3 py-2 text-base font-medium text-gray-700' >
397+ < div className = 'block px-3 py-2 text-base font-medium text-gray-700 dark:text-gray-200 ' >
387398 < button
388399 onClick = { toggleLanguageDropdown }
389- className = 'flex w-full items-center justify-between'
400+ className = 'flex w-full items-center justify-between hover:text-modern-purple dark:text-gray-200'
401+ style = { { color : 'var(--fc-primary)' } }
390402 >
391403 < span > Languages</ span >
392404 < svg
@@ -409,7 +421,8 @@ const Header = () => {
409421 < button
410422 key = { language . name }
411423 onClick = { ( ) => navigateToLanguage ( language . link ) }
412- className = 'block w-full py-1 text-left text-sm text-gray-600 hover:text-modern-purple'
424+ className = 'block w-full py-1 text-left text-sm hover:text-modern-purple dark:text-gray-200'
425+ style = { { color : 'var(--fc-primary)' } }
413426 >
414427 { language . name }
415428 </ button >
@@ -418,10 +431,11 @@ const Header = () => {
418431 ) }
419432 </ div >
420433
421- < div className = 'block px-3 py-2 text-base font-medium text-gray-700' >
434+ < div className = 'block px-3 py-2 text-base font-medium text-gray-700 dark:text-gray-200 ' >
422435 < button
423436 onClick = { toggleFrameworkDropdown }
424- className = 'flex w-full items-center justify-between'
437+ className = 'flex w-full items-center justify-between hover:text-modern-purple dark:text-gray-200'
438+ style = { { color : 'var(--fc-primary)' } }
425439 >
426440 < span > Frameworks</ span >
427441 < svg
@@ -444,7 +458,8 @@ const Header = () => {
444458 < button
445459 key = { framework . name }
446460 onClick = { ( ) => navigateToFramework ( framework . link ) }
447- className = 'block w-full py-1 text-left text-sm text-gray-600 hover:text-modern-purple'
461+ className = 'block w-full py-1 text-left text-sm hover:text-modern-purple dark:text-gray-200'
462+ style = { { color : 'var(--fc-primary)' } }
448463 >
449464 { framework . name }
450465 </ button >
@@ -453,10 +468,11 @@ const Header = () => {
453468 ) }
454469 </ div >
455470
456- < div className = 'block px-3 py-2 text-base font-medium text-gray-700' >
471+ < div className = 'block px-3 py-2 text-base font-medium text-gray-700 dark:text-gray-200 ' >
457472 < button
458473 onClick = { toggleGitSelectionDropdown }
459- className = 'flex w-full items-center justify-between'
474+ className = 'flex w-full items-center justify-between hover:text-modern-purple dark:text-gray-200'
475+ style = { { color : 'var(--fc-primary)' } }
460476 >
461477 < span > Git</ span >
462478 < svg
@@ -479,7 +495,8 @@ const Header = () => {
479495 < button
480496 key = { git . name }
481497 onClick = { ( ) => navigateToGitSelection ( git . link ) }
482- className = 'block w-full py-1 text-left text-sm text-gray-600 hover:text-modern-purple'
498+ className = 'block w-full py-1 text-left text-sm hover:text-modern-purple dark:text-gray-200'
499+ style = { { color : 'var(--fc-primary)' } }
483500 >
484501 { git . name }
485502 </ button >
@@ -488,10 +505,11 @@ const Header = () => {
488505 ) }
489506 </ div >
490507
491- < div className = 'block px-3 py-2 text-base font-medium text-gray-700' >
508+ < div className = 'block px-3 py-2 text-base font-medium text-gray-700 dark:text-gray-200 ' >
492509 < button
493510 onClick = { toggleRoadmapDropdown }
494- className = 'flex w-full items-center justify-between'
511+ className = 'flex w-full items-center justify-between hover:text-modern-purple dark:text-gray-200'
512+ style = { { color : 'var(--fc-primary)' } }
495513 >
496514 < span > Roadmap</ span >
497515 < svg
@@ -514,7 +532,8 @@ const Header = () => {
514532 < button
515533 key = { roadmap . name }
516534 onClick = { ( ) => navigateToRoadmap ( roadmap . link ) }
517- className = 'block w-full py-1 text-left text-sm text-gray-600 hover:text-modern-purple'
535+ className = 'block w-full py-1 text-left text-sm hover:text-modern-purple dark:text-gray-200'
536+ style = { { color : 'var(--fc-primary)' } }
518537 >
519538 { roadmap . name }
520539 </ button >
0 commit comments