1
1
import { onBeforeMount , ref , watch } from 'vue'
2
2
3
- const getStoredTheme = ( localStorageItemName : string ) => localStorage . getItem ( localStorageItemName )
3
+ const getStoredTheme = ( localStorageItemName : string ) =>
4
+ typeof window !== 'undefined' && localStorage . getItem ( localStorageItemName )
4
5
const setStoredTheme = ( localStorageItemName : string , colorMode : string ) =>
5
6
localStorage . setItem ( localStorageItemName , colorMode )
6
7
7
8
const getPreferredColorScheme = ( localStorageItemName : string ) => {
9
+ if ( typeof window === 'undefined' ) {
10
+ return
11
+ }
12
+
8
13
const storedTheme = getStoredTheme ( localStorageItemName )
9
14
10
15
if ( storedTheme ) {
@@ -28,23 +33,23 @@ export const useColorModes = (localStorageItemName = 'coreui-vue-color-scheme')
28
33
const colorMode = ref ( getPreferredColorScheme ( localStorageItemName ) )
29
34
30
35
watch ( colorMode , ( ) => {
31
- setStoredTheme ( localStorageItemName , colorMode . value )
32
- setTheme ( colorMode . value )
36
+ if ( colorMode . value ) {
37
+ setStoredTheme ( localStorageItemName , colorMode . value )
38
+ setTheme ( colorMode . value )
39
+ }
33
40
} )
34
41
35
42
onBeforeMount ( ( ) => {
36
- if ( typeof getStoredTheme ( localStorageItemName ) === 'string' ) {
43
+ if ( typeof getStoredTheme ( localStorageItemName ) === 'string' && colorMode . value ) {
37
44
setTheme ( colorMode . value )
38
45
}
39
46
40
47
window . matchMedia ( '(prefers-color-scheme: dark)' ) . addEventListener ( 'change' , ( ) => {
41
48
const storedTheme = getStoredTheme ( localStorageItemName )
42
- if ( storedTheme !== 'light' && storedTheme !== 'dark' ) {
49
+ if ( storedTheme !== 'light' && storedTheme !== 'dark' && colorMode . value ) {
43
50
setTheme ( colorMode . value )
44
51
}
45
52
} )
46
-
47
- watch ( colorMode , ( ) => setTheme ( colorMode . value ) )
48
53
} )
49
54
50
55
return {
0 commit comments