Skip to content

Commit 600723c

Browse files
authored
Merge pull request #31 from GreenMan36/theme-toggle
Add lightmode for accessibility
2 parents b95a0da + 5f7d833 commit 600723c

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

src/components/ThemeToggle.tsx

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { useState, useEffect } from "react";
2+
3+
const ThemeToggle = () => {
4+
const [theme, setTheme] = useState("dark");
5+
6+
useEffect(() => {
7+
// if the theme isn't set, use the user's system preference
8+
const savedTheme = localStorage.getItem("theme");
9+
if (savedTheme) {
10+
setTheme(savedTheme);
11+
document.documentElement.setAttribute("data-theme", savedTheme);
12+
} else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
13+
setTheme("dark");
14+
document.documentElement.setAttribute("data-theme", "dark");
15+
} else {
16+
setTheme("light");
17+
document.documentElement.setAttribute("data-theme", "light");
18+
}
19+
});
20+
21+
const toggleTheme = () => {
22+
const newTheme = theme === "dark" ? "light" : "dark";
23+
setTheme(newTheme);
24+
localStorage.setItem("theme", newTheme);
25+
document.documentElement.setAttribute("data-theme", newTheme);
26+
};
27+
28+
return (
29+
<button onClick={toggleTheme} className="button" aria-label="Toggle theme">
30+
{theme === "dark" ? "🌞" : "🌚"}
31+
</button>
32+
);
33+
};
34+
35+
export default ThemeToggle;

src/layouts/Header.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import { GitHubIcon } from "../components/Icons";
22
import LinkButton from "../components/LinkButton";
33
import Logo from "../components/Logo";
44
import SearchInput from "../components/SearchInput";
5+
import ThemeToggle from "../components/ThemeToggle";
56

67
const Header = () => {
78
return (
89
<header className="header">
910
<Logo />
1011
<nav className="primary-nav">
1112
<SearchInput />
13+
<ThemeToggle />
1214
<LinkButton
1315
href="https://github.com/dostonnabotov/quicksnip/blob/main/CONTRIBUTING.md"
1416
target="_blank"

src/styles/main.css

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,22 @@
5555

5656
--br-md: 0.5rem;
5757
--br-lg: 0.75rem;
58+
59+
transition:
60+
background-color 0.3s ease,
61+
color 0.3s ease;
62+
}
63+
64+
/*------------------------------------*\
65+
#ACCESSIBILITY/THEMING
66+
\*------------------------------------*/
67+
[data-theme="light"] {
68+
color-scheme: light;
69+
--clr-neutral-200: hsl(0, 0%, 10%);
70+
--clr-neutral-300: hsl(0, 0%, 30%);
71+
--clr-neutral-500: hsl(0, 0%, 85%);
72+
--clr-neutral-700: hsl(0, 0%, 95%);
73+
--clr-neutral-900: hsl(60, 25%, 98%);
5874
}
5975

6076
/*------------------------------------*\
@@ -434,6 +450,7 @@ abbr {
434450
.categories {
435451
display: grid;
436452
background-color: var(--bg-secondary);
453+
border: 1px solid var(--border-color);
437454
padding: 1.25rem;
438455
padding-bottom: 2rem;
439456
border-radius: var(--br-lg);

0 commit comments

Comments
 (0)