@@ -8,10 +8,28 @@ const useSettingsStore = defineStore(
8
8
'settings' ,
9
9
( ) => {
10
10
const settings = ref ( settingsDefault )
11
- watch ( ( ) => settings . value . app . colorScheme , ( colorScheme ) => {
11
+
12
+ const prefersColorScheme = window . matchMedia ( '(prefers-color-scheme: dark)' )
13
+ const currentColorScheme = ref < Exclude < Settings . app [ 'colorScheme' ] , '' > > ( )
14
+ watch ( ( ) => settings . value . app . colorScheme , ( val ) => {
15
+ if ( val === '' ) {
16
+ prefersColorScheme . addEventListener ( 'change' , updateTheme )
17
+ }
18
+ else {
19
+ prefersColorScheme . removeEventListener ( 'change' , updateTheme )
20
+ }
21
+ } , {
22
+ immediate : true ,
23
+ } )
24
+ watch ( ( ) => settings . value . app . colorScheme , updateTheme , {
25
+ immediate : true ,
26
+ } )
27
+ function updateTheme ( ) {
28
+ let colorScheme = settings . value . app . colorScheme
12
29
if ( colorScheme === '' ) {
13
- colorScheme = window . matchMedia ( '(prefers-color-scheme: dark)' ) . matches ? 'dark' : 'light'
30
+ colorScheme = prefersColorScheme . matches ? 'dark' : 'light'
14
31
}
32
+ currentColorScheme . value = colorScheme
15
33
switch ( colorScheme ) {
16
34
case 'light' :
17
35
document . documentElement . classList . remove ( 'dark' )
@@ -20,9 +38,8 @@ const useSettingsStore = defineStore(
20
38
document . documentElement . classList . add ( 'dark' )
21
39
break
22
40
}
23
- } , {
24
- immediate : true ,
25
- } )
41
+ }
42
+
26
43
watch ( ( ) => settings . value . menu . menuMode , ( val ) => {
27
44
document . body . setAttribute ( 'data-menu-mode' , val )
28
45
} , {
@@ -107,6 +124,7 @@ const useSettingsStore = defineStore(
107
124
108
125
return {
109
126
settings,
127
+ currentColorScheme,
110
128
os,
111
129
title,
112
130
setTitle,
0 commit comments