@@ -15,6 +15,13 @@ import {MenuContext} from 'components/useMenu';
15
15
import { Logo } from '../../Logo' ;
16
16
import NavLink from './NavLink' ;
17
17
18
+ declare global {
19
+ interface Window {
20
+ __theme : string ;
21
+ __setPreferredTheme : ( theme : string ) => void ;
22
+ }
23
+ }
24
+
18
25
const feedbackIcon = (
19
26
< svg
20
27
xmlns = "http://www.w3.org/2000/svg"
@@ -92,14 +99,6 @@ function inferSection(pathname: string): 'learn' | 'reference' | 'home' {
92
99
export default function Nav ( ) {
93
100
const { pathname} = useRouter ( ) ;
94
101
const { isOpen, toggleOpen} = React . useContext ( MenuContext ) ;
95
- // TODO: persist
96
- // TODO: respect system pref
97
- const [ isDark , setIsDark ] = React . useState ( ( ) => {
98
- if ( typeof document === 'undefined' ) {
99
- return false ;
100
- }
101
- return document . documentElement . classList . contains ( 'dark' ) ;
102
- } ) ;
103
102
const section = inferSection ( pathname ) ;
104
103
105
104
function handleFeedback ( ) {
@@ -137,21 +136,28 @@ export default function Nav() {
137
136
Beta
138
137
</ div >
139
138
</ div >
140
- < button
141
- type = "button"
142
- aria-label = { isDark ? 'Use Light Mode' : 'Use Dark Mode' }
143
- onClick = { ( ) => {
144
- if ( isDark ) {
145
- document . documentElement . classList . remove ( 'dark' ) ;
146
- setIsDark ( false ) ;
147
- } else {
148
- document . documentElement . classList . add ( 'dark' ) ;
149
- setIsDark ( true ) ;
150
- }
151
- } }
152
- className = "hidden lg:flex items-center h-full pr-2" >
153
- { isDark ? lightIcon : darkIcon }
154
- </ button >
139
+ < div className = "block dark:hidden" >
140
+ < button
141
+ type = "button"
142
+ aria-label = "Use Dark Mode"
143
+ onClick = { ( ) => {
144
+ window . __setPreferredTheme ( 'dark' ) ;
145
+ } }
146
+ className = "hidden lg:flex items-center h-full pr-2" >
147
+ { darkIcon }
148
+ </ button >
149
+ </ div >
150
+ < div className = "hidden dark:block" >
151
+ < button
152
+ type = "button"
153
+ aria-label = "Use Light Mode"
154
+ onClick = { ( ) => {
155
+ window . __setPreferredTheme ( 'light' ) ;
156
+ } }
157
+ className = "hidden lg:flex items-center h-full pr-2" >
158
+ { lightIcon }
159
+ </ button >
160
+ </ div >
155
161
</ div >
156
162
< div className = "px-0 pt-2 w-full 2xl:max-w-xs hidden lg:flex items-center self-center border-b-0 lg:border-b border-border dark:border-border-dark" >
157
163
< NavLink href = "/" isActive = { section === 'home' } >
@@ -172,21 +178,28 @@ export default function Nav() {
172
178
onClick = { handleFeedback } >
173
179
{ feedbackIcon }
174
180
</ button >
175
- < button
176
- type = "button"
177
- aria-label = { isDark ? 'Use Light Mode' : 'Use Dark Mode' }
178
- onClick = { ( ) => {
179
- if ( isDark ) {
180
- document . documentElement . classList . remove ( 'dark' ) ;
181
- setIsDark ( false ) ;
182
- } else {
183
- document . documentElement . classList . add ( 'dark' ) ;
184
- setIsDark ( true ) ;
185
- }
186
- } }
187
- className = "flex lg:hidden items-center p-1 h-full ml-4 lg:ml-6" >
188
- { isDark ? lightIcon : darkIcon }
189
- </ button >
181
+ < div className = "block dark:hidden" >
182
+ < button
183
+ type = "button"
184
+ aria-label = "Use Dark Mode"
185
+ onClick = { ( ) => {
186
+ window . __setPreferredTheme ( 'dark' ) ;
187
+ } }
188
+ className = "flex lg:hidden items-center p-1 h-full ml-4 lg:ml-6" >
189
+ { darkIcon }
190
+ </ button >
191
+ </ div >
192
+ < div className = "hidden dark:block" >
193
+ < button
194
+ type = "button"
195
+ aria-label = "Use Light Mode"
196
+ onClick = { ( ) => {
197
+ window . __setPreferredTheme ( 'light' ) ;
198
+ } }
199
+ className = "flex lg:hidden items-center p-1 h-full ml-4 lg:ml-6" >
200
+ { lightIcon }
201
+ </ button >
202
+ </ div >
190
203
</ div >
191
204
</ nav >
192
205
) ;
0 commit comments