Skip to content

Commit d542b47

Browse files
committed
fix(dark-mode): persist theme and read prefers-color-scheme on load
1 parent eb63b6d commit d542b47

5 files changed

Lines changed: 36 additions & 16 deletions

File tree

src/App.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ const app = () => {
3232
};
3333
}, []);
3434

35-
// Update document theme attribute when darkMode changes
3635
useEffect(() => {
3736
if (superState.darkMode) {
3837
document.documentElement.setAttribute('data-theme', 'dark');
3938
} else {
4039
document.documentElement.removeAttribute('data-theme');
4140
}
41+
localStorage.setItem('darkMode', superState.darkMode);
4242
}, [superState.darkMode]);
4343

4444
return (

src/component/Header.jsx

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,7 @@ const Header = ({ superState, dispatcher }) => {
5252
</section>
5353
<div
5454
onClick={() => dispatcher({ type: T.TOGGLE_DARK_MODE })}
55-
style={{
56-
cursor: 'pointer',
57-
border: '1px solid #ccc',
58-
padding: '0 8px',
59-
display: 'flex',
60-
alignItems: 'center',
61-
justifyContent: 'center',
62-
transition: 'opacity 0.2s',
63-
backgroundColor: '#eee',
64-
}}
65-
onMouseEnter={(e) => { e.currentTarget.style.opacity = '0.7'; }}
66-
onMouseLeave={(e) => { e.currentTarget.style.opacity = '1'; }}
55+
className="theme-toggle"
6756
role="button"
6857
tabIndex={0}
6958
onKeyDown={(e) => e.key === 'Enter' && dispatcher({ type: T.TOGGLE_DARK_MODE })}

src/component/codeEdit.css

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,9 @@
3535
font-family: monospace;
3636
width: 100%;
3737
white-space: break-spaces;
38-
}
38+
}
39+
40+
[data-theme='dark'] .textField {
41+
background-color: #2D2D2D;
42+
color: #E4E4E4;
43+
}

src/component/header.css

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,31 @@
146146
background-color: #2B8CF7;
147147
}
148148

149+
[data-theme='dark'] .theme-toggle {
150+
background-color: #2D2D2D;
151+
border: 1px solid #3E3E3E;
152+
}
153+
154+
[data-theme='dark'] .theme-icon {
155+
color: #E4E4E4;
156+
}
157+
149158
/* Theme Icon Color */
150159
.theme-icon {
151160
color: black;
152-
}
161+
}
162+
163+
.theme-toggle {
164+
cursor: pointer;
165+
border: 1px solid #ccc;
166+
padding: 0 8px;
167+
display: flex;
168+
align-items: center;
169+
justify-content: center;
170+
background-color: #eee;
171+
transition: opacity 0.2s;
172+
}
173+
174+
.theme-toggle:hover {
175+
opacity: 0.7;
176+
}

src/reducer/initialState.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ const initialState = {
3838
octave: false,
3939
logs: false,
4040
logsmessage: '',
41-
darkMode: false,
41+
darkMode: localStorage.getItem('darkMode') !== null
42+
? localStorage.getItem('darkMode') === 'true'
43+
: window.matchMedia('(prefers-color-scheme: dark)').matches,
4244
clipboard: [],
4345
confirmModal: { open: false, message: '', onConfirm: null },
4446
searchPanel: false,

0 commit comments

Comments
 (0)