1- import React from "react" ;
1+ "use client" ;
2+ import React , { useEffect , useState } from "react" ;
23import Link from "next/link" ;
34import Image from "next/image" ;
4- import { GithubIcon } from "lucide-react" ;
5+ import { GithubIcon , MoonIcon , SunIcon } from "lucide-react" ;
56import HamburgerMenu from "./HamburgerMenu" ;
67import { Button , Text } from "@/components/retroui" ;
78import { navConfig } from "@/config/navigation" ;
89
910export default function TopNav ( ) {
11+ const [ isDarkMode , setIsDarkMode ] = useState ( false ) ;
12+
13+ // Apply the saved theme preference on page load
14+ useEffect ( ( ) => {
15+ const savedTheme = localStorage . getItem ( "theme" ) ;
16+ if ( savedTheme === "dark" ) {
17+ document . documentElement . classList . add ( "dark" ) ;
18+ setIsDarkMode ( true ) ;
19+ } else {
20+ document . documentElement . classList . remove ( "dark" ) ;
21+ setIsDarkMode ( false ) ;
22+ }
23+ } , [ ] ) ;
24+
25+ const toggleDarkMode = ( ) => {
26+ const htmlElement = document . documentElement ;
27+ if ( htmlElement . classList . contains ( "dark" ) ) {
28+ htmlElement . classList . remove ( "dark" ) ;
29+ localStorage . setItem ( "theme" , "light" ) ;
30+ setIsDarkMode ( false ) ;
31+ } else {
32+ htmlElement . classList . add ( "dark" ) ;
33+ localStorage . setItem ( "theme" , "dark" ) ;
34+ setIsDarkMode ( true ) ;
35+ }
36+ } ;
37+
1038 return (
1139 < >
12- < nav className = "fixed top-0 left-0 right-0 w-full border-b-2 border-black bg-white " >
40+ < nav className = "fixed top-0 left-0 right-0 w-full border-b-2 bg-background " >
1341 < div className = "w-full bg-black text-white" >
1442 < div className = "container max-w-6xl mx-auto px-4 py-2 flex justify-center space-x-4 items-center" >
1543 < Text className = "text-sm text-center" >
@@ -68,7 +96,7 @@ export default function TopNav() {
6896 < HamburgerMenu />
6997 </ div >
7098
71- < div className = "hidden lg:flex items-center" >
99+ < div className = "hidden lg:flex items-center space-x-3 " >
72100 < Link
73101 href = "https://github.com/Logging-Stuff/retroui"
74102 target = "_blank"
@@ -79,6 +107,9 @@ export default function TopNav() {
79107 Star on GitHub
80108 </ Button >
81109 </ Link >
110+ < Button variant = "secondary" size = "icon" onClick = { toggleDarkMode } >
111+ { isDarkMode ? < SunIcon size = "14" /> : < MoonIcon size = "14" /> }
112+ </ Button >
82113 </ div >
83114 </ div >
84115 </ div >
0 commit comments