diff --git a/src/App.jsx b/src/App.jsx
index 8af2ccd..c376adf 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -32,13 +32,13 @@ const app = () => {
};
}, []);
- // Update document theme attribute when darkMode changes
useEffect(() => {
if (superState.darkMode) {
document.documentElement.setAttribute('data-theme', 'dark');
} else {
document.documentElement.removeAttribute('data-theme');
}
+ localStorage.setItem('darkMode', superState.darkMode);
}, [superState.darkMode]);
return (
diff --git a/src/component/Header.jsx b/src/component/Header.jsx
index a91f1eb..b6babab 100644
--- a/src/component/Header.jsx
+++ b/src/component/Header.jsx
@@ -52,18 +52,7 @@ const Header = ({ superState, dispatcher }) => {
dispatcher({ type: T.TOGGLE_DARK_MODE })}
- style={{
- cursor: 'pointer',
- border: '1px solid #ccc',
- padding: '0 8px',
- display: 'flex',
- alignItems: 'center',
- justifyContent: 'center',
- transition: 'opacity 0.2s',
- backgroundColor: '#eee',
- }}
- onMouseEnter={(e) => { e.currentTarget.style.opacity = '0.7'; }}
- onMouseLeave={(e) => { e.currentTarget.style.opacity = '1'; }}
+ className="theme-toggle"
role="button"
tabIndex={0}
onKeyDown={(e) => e.key === 'Enter' && dispatcher({ type: T.TOGGLE_DARK_MODE })}
diff --git a/src/component/codeEdit.css b/src/component/codeEdit.css
index f05d4a2..ec0d682 100644
--- a/src/component/codeEdit.css
+++ b/src/component/codeEdit.css
@@ -35,4 +35,9 @@
font-family: monospace;
width: 100%;
white-space: break-spaces;
-}
\ No newline at end of file
+}
+
+[data-theme='dark'] .textField {
+ background-color: #2D2D2D;
+ color: #E4E4E4;
+}
diff --git a/src/component/header.css b/src/component/header.css
index 947c48e..36b140f 100644
--- a/src/component/header.css
+++ b/src/component/header.css
@@ -146,7 +146,31 @@
background-color: #2B8CF7;
}
+[data-theme='dark'] .theme-toggle {
+ background-color: #2D2D2D;
+ border: 1px solid #3E3E3E;
+}
+
+[data-theme='dark'] .theme-icon {
+ color: #E4E4E4;
+}
+
/* Theme Icon Color */
.theme-icon {
color: black;
-}
\ No newline at end of file
+}
+
+.theme-toggle {
+ cursor: pointer;
+ border: 1px solid #ccc;
+ padding: 0 8px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #eee;
+ transition: opacity 0.2s;
+}
+
+.theme-toggle:hover {
+ opacity: 0.7;
+}
diff --git a/src/reducer/initialState.js b/src/reducer/initialState.js
index 2ba9059..bb53c35 100644
--- a/src/reducer/initialState.js
+++ b/src/reducer/initialState.js
@@ -38,7 +38,9 @@ const initialState = {
octave: false,
logs: false,
logsmessage: '',
- darkMode: false,
+ darkMode: localStorage.getItem('darkMode') !== null
+ ? localStorage.getItem('darkMode') === 'true'
+ : window.matchMedia('(prefers-color-scheme: dark)').matches,
clipboard: [],
confirmModal: { open: false, message: '', onConfirm: null },
searchPanel: false,