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,