Skip to content

Commit c7425b5

Browse files
committed
fix: switch theme when system theme is changed
1 parent f73e37c commit c7425b5

File tree

5 files changed

+37
-13
lines changed

5 files changed

+37
-13
lines changed

src/components/App.tsx

+24-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { h, FC, useEffect, useState } from 'renderer'
1+
import { h, FC, useEffect, useState, useCallback } from 'renderer'
22
import inView from 'element-in-view'
33
import { InstanceOptions } from '../docup'
44
import { Navbar } from './Navbar'
@@ -103,16 +103,34 @@ export const App: FC<{ options: InstanceOptions }> = ({ options }) => {
103103
}, [])
104104

105105
useEffect(() => {
106-
if (options.useSystemTheme !== false) {
107-
if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
108-
document.documentElement.classList.add('dark')
109-
}
110-
}
111106
// Update location.hash on scrolling
112107
window.addEventListener('scroll', handleScroll)
113108
return () => window.removeEventListener('scroll', handleScroll)
114109
}, [])
115110

111+
const mediaQuery = '(prefers-color-scheme: dark)'
112+
const updateDarkModeClass = useCallback(() => {
113+
if (options.useSystemTheme === false) return
114+
115+
if (window.matchMedia(mediaQuery).matches) {
116+
document.documentElement.classList.add('dark')
117+
} else {
118+
document.documentElement.classList.remove('dark')
119+
}
120+
}, [options.useSystemTheme])
121+
122+
useEffect(() => {
123+
updateDarkModeClass()
124+
125+
const listener = () => updateDarkModeClass()
126+
const m = window.matchMedia(mediaQuery)
127+
m.addEventListener('change', listener)
128+
129+
return () => {
130+
m.removeEventListener('change', listener)
131+
}
132+
}, [])
133+
116134
return (
117135
<div>
118136
{showSidebar && (

src/components/Navbar.tsx

+1-4
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@ export const Navbar: FC<{
88
toggleSidebar: () => void
99
}> = ({ title, base, navLinks, toggleSidebar }) => {
1010
return (
11-
<header
12-
style={{ borderColor: 'var(--navbar-border-fg)' }}
13-
class="fixed w-full top-0 left-0 h-12 navbar flex items-center justify-between px-5 border-b"
14-
>
11+
<header class="fixed w-full top-0 left-0 h-12 navbar flex items-center justify-between px-5 border-b">
1512
<div class="flex items-center">
1613
<h1 class="mr-8 text-2xl">
1714
<a href={base}>{title}</a>

src/components/Sidebar.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export const Sidebar: FC<{
4444
<div
4545
ref={sidebarRef}
4646
class={
47-
`fixed md:pt-12 sidebar left-0 top-0 bottom-0` +
47+
`fixed md:pt-12 sidebar left-0 top-0 bottom-0 border-r` +
4848
(showSidebar ? ' sidebar_show' : '')
4949
}
5050
>

src/css/main.css

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
:root {
22
--fg: #000;
33
--bg: #fff;
4+
--border-fg: rgb(218, 218, 218);
45
--navbar-bg: #ffffff;
56
--navbar-fg: inherit;
6-
--navbar-border-fg: rgb(218, 218, 218);
77
--navlink-fg: inherit;
88
--navlink-hover-fg: inherit;
99
--navlink-hover-bg: #d8d8d8;
@@ -33,8 +33,8 @@
3333
.dark {
3434
--bg: #121212;
3535
--fg: #eaeaea;
36+
--border-fg: rgb(68, 68, 68);
3637
--navbar-bg: var(--bg);
37-
--navbar-border-fg: rgb(68, 68, 68);
3838
--sidebar-bg: var(--bg);
3939
--sidebar-text-fg: var(--fg);
4040
--code-block-fg: rgb(182, 182, 182);
@@ -50,6 +50,12 @@
5050
--loader-end-bg: #252525;
5151
}
5252

53+
*,
54+
*::before,
55+
*::after {
56+
border-color: var(--border-fg);
57+
}
58+
5359
body {
5460
font-family: Lato;
5561
background: var(--bg);

tailwind.config.js

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ module.exports = {
88
colors: {
99
...colors,
1010
},
11+
borderColor: {
12+
border: 'var(--border-fg)',
13+
},
1114
},
1215
},
1316
variants: {},

0 commit comments

Comments
 (0)