diff --git a/src/components/ThemeToggle.tsx b/src/components/ThemeToggle.tsx new file mode 100644 index 00000000..78a3fe4d --- /dev/null +++ b/src/components/ThemeToggle.tsx @@ -0,0 +1,35 @@ +import { useState, useEffect } from "react"; + +const ThemeToggle = () => { + const [theme, setTheme] = useState("dark"); + + useEffect(() => { + // if the theme isn't set, use the user's system preference + const savedTheme = localStorage.getItem("theme"); + if (savedTheme) { + setTheme(savedTheme); + document.documentElement.setAttribute("data-theme", savedTheme); + } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) { + setTheme("dark"); + document.documentElement.setAttribute("data-theme", "dark"); + } else { + setTheme("light"); + document.documentElement.setAttribute("data-theme", "light"); + } + }); + + const toggleTheme = () => { + const newTheme = theme === "dark" ? "light" : "dark"; + setTheme(newTheme); + localStorage.setItem("theme", newTheme); + document.documentElement.setAttribute("data-theme", newTheme); + }; + + return ( + + {theme === "dark" ? "π" : "π"} + + ); +}; + +export default ThemeToggle; diff --git a/src/layouts/Header.tsx b/src/layouts/Header.tsx index 52243cde..858638a3 100644 --- a/src/layouts/Header.tsx +++ b/src/layouts/Header.tsx @@ -2,6 +2,7 @@ import { GitHubIcon } from "../components/Icons"; import LinkButton from "../components/LinkButton"; import Logo from "../components/Logo"; import SearchInput from "../components/SearchInput"; +import ThemeToggle from "../components/ThemeToggle"; const Header = () => { return ( @@ -9,6 +10,7 @@ const Header = () => { + AltStyle γ«γγ£γ¦ε€ζγγγγγΌγΈ (->γͺγͺγΈγγ«) / γ’γγ¬γΉ: γ’γΌγ: γγγ©γ«γ ι³ε£°γγ©γ¦γΆ γ«γδ»γ ι θ²εθ»’ ζεζ‘ε€§ γ’γγ€γ«
AltStyle γ«γγ£γ¦ε€ζγγγγγΌγΈ (->γͺγͺγΈγγ«) / γ’γγ¬γΉ: γ’γΌγ: γγγ©γ«γ ι³ε£°γγ©γ¦γΆ γ«γδ»γ ι θ²εθ»’ ζεζ‘ε€§ γ’γγ€γ«