diff --git a/public/index.html b/public/index.html index 7886fcb..1e8bd2d 100644 --- a/public/index.html +++ b/public/index.html @@ -31,6 +31,13 @@ Learn how to configure a non-root public URL by running `npm run build`. --> p5.js Showcase + diff --git a/src/App.js b/src/App.js index 3630f0a..1adb826 100644 --- a/src/App.js +++ b/src/App.js @@ -7,6 +7,7 @@ import { Switch, Route, Link, HashRouter } from "react-router-dom"; import Gallery from "./global_components/Gallery.js"; import About from "./global_components/About.js"; import FilterButton from "./global_components/FilterButton"; +import DarkModeToggle from './global_components/DarkModeToggle'; import Showcase2020 from "./showcase_2020/Showcase2020"; import GalleryNineteen from "./showcase_2020/GalleryNineteen.js"; @@ -70,6 +71,7 @@ export default function App() { +
@@ -116,6 +118,7 @@ export default function App() { +
@@ -151,6 +154,7 @@ export default function App() { +
diff --git a/src/global_components/DarkModeToggle.js b/src/global_components/DarkModeToggle.js new file mode 100644 index 0000000..7224ec6 --- /dev/null +++ b/src/global_components/DarkModeToggle.js @@ -0,0 +1,38 @@ +import React, { useEffect, useState } from 'react'; +import '../styles/darkMode.css'; + +const DarkModeToggle = () => { + const [darkMode, setDarkMode] = useState(() => { + // Get initial state from localStorage or system preference + const savedTheme = localStorage.getItem('theme'); + if (savedTheme) { + return savedTheme === 'dark'; + } + return window.matchMedia('(prefers-color-scheme: dark)').matches; + }); + + useEffect(() => { + // Update data-theme attribute and localStorage when darkMode changes + document.documentElement.setAttribute('data-theme', darkMode ? 'dark' : 'light'); + localStorage.setItem('theme', darkMode ? 'dark' : 'light'); + }, [darkMode]); + + return ( + + ); +}; + +export default DarkModeToggle; \ No newline at end of file diff --git a/src/styles/darkMode.css b/src/styles/darkMode.css new file mode 100644 index 0000000..325ec54 --- /dev/null +++ b/src/styles/darkMode.css @@ -0,0 +1,55 @@ +/* Dark mode styles */ +:root[data-theme="dark"] { + --background-color: #121212; + --text-color: #ffffff; + --card-background: #1e1e1e; + --nav-background: #1a1a1a; + --link-color: #bb86fc; + --border-color: #333333; + --button-background: #333333; + --button-color: #ffffff; + --hover-color: #bb86fc; +} + +/* Light mode styles */ +:root[data-theme="light"] { + --background-color: #ffffff; + --text-color: #000000; + --card-background: #ffffff; + --nav-background: #f8f9fa; + --link-color: #0056b3; + --border-color: #dee2e6; + --button-background: #f8f9fa; + --button-color: #000000; + --hover-color: #0056b3; +} + +/* Apply variables */ +body { + background-color: var(--background-color); + color: var(--text-color); + transition: all 0.3s ease; +} + +.navigation, .navigation2022 { + background-color: var(--nav-background); +} + +.card { + background-color: var(--card-background); + border-color: var(--border-color); +} + +a { + color: var(--link-color); +} + +/* Apply to specific elements */ +button { + background-color: var(--button-background); + color: var(--button-color); +} + +button:hover { + color: var(--hover-color); +} \ No newline at end of file