1
1
<template >
2
2
<button
3
- @click =" toggleDarkMode"
4
3
:aria-pressed =" darkMode"
5
4
class =" vue-darkmode"
5
+ @click =" toggleDarkMode"
6
6
>
7
- <slot :mode =" darkMode" ></slot >
8
- <component :is =" 'style'" :media =" darkMode && $_use_filter ? 'screen' : 'none'" scoped >
9
- html {
10
- background-color: #222 !important;
11
- color: #333 !important;
12
- }
13
-
14
- body {
15
- filter: contrast(90%) invert(90%) hue-rotate(180deg) !important;
16
- -ms-filter: invert(100%);
17
- -webkit-filter: contrast(90%) invert(90%) hue-rotate(180deg) !important;
18
- text-rendering: optimizeSpeed;
19
- image-rendering: optimizeSpeed;
20
- -webkit-font-smoothing: antialiased;
21
- -webkit-image-rendering: optimizeSpeed;
22
- }
23
-
24
- input, textarea, select {
25
- color: purple;
26
- }
27
-
28
- img, video, iframe, canvas, svg, embed[type='application/x-shockwave-flash'], object[type='application/x-shockwave-flash'], *[style*='url('] {
29
- filter: invert(100%) hue-rotate(-180deg) !important;
30
- -ms-filter: invert(100%) !important;
31
- -webkit-filter: invert(100%) hue-rotate(-180deg) !important;
32
- }
33
- </component >
7
+ <slot :mode =" darkMode" />
8
+ <component
9
+ :is =" 'style'"
10
+ :media =" darkMode && $_use_filter ? 'screen' : 'none'"
11
+ scoped
12
+ v-text =" styles.trim()"
13
+ />
34
14
</button >
35
15
</template >
36
16
37
17
<script >
18
+ import { styles } from ' ./styles'
19
+
38
20
export default {
39
21
name: ' DarkMode' ,
40
22
props: {
@@ -46,7 +28,11 @@ export default {
46
28
type: Boolean ,
47
29
default: true
48
30
},
49
- storage: {
31
+ styles: {
32
+ type: String ,
33
+ default: styles
34
+ },
35
+ persist: {
50
36
type: String ,
51
37
default: ' localStorage'
52
38
},
@@ -69,7 +55,7 @@ export default {
69
55
created () {
70
56
this .darkMode = this .isDark
71
57
if (! this .$isServer ) {
72
- this .darkMode = !! window [this .storage ].getItem (' darkMode' ) || this .isDark || this .prefersDark ()
58
+ this .darkMode = !! window [this .persist ].getItem (' darkMode' ) || this .isDark || this .prefersDark ()
73
59
this .themeColorMeta = document .querySelector (' meta[name="theme-color"]' )
74
60
if (this .useFilter ) {
75
61
this .$_use_filter = this .supportsFilters ()
@@ -94,12 +80,12 @@ export default {
94
80
document .documentElement .classList .toggle (' dark-mode' )
95
81
},
96
82
setDarkMode () {
97
- window [this .storage ].setItem (' darkMode' , ' on' )
83
+ window [this .persist ].setItem (' darkMode' , ' on' )
98
84
this .toggleClass ()
99
85
this .setThemeColor (this .themeColorDark )
100
86
},
101
87
removeDarkMode () {
102
- window [this .storage ].removeItem (' darkMode' )
88
+ window [this .persist ].removeItem (' darkMode' )
103
89
this .toggleClass ()
104
90
this .setThemeColor (this .themeColorLight )
105
91
},
0 commit comments