|
1 | 1 | import { watchEffect, computed, ComputedRef } from 'vue' |
2 | | -import { useLocalStorageState } from '..' |
| 2 | +import useLocalStorageState from '../useLocalStorageState' |
3 | 3 |
|
4 | 4 | import useMedia from '../useMedia' |
5 | 5 |
|
6 | | -export default function useDarkMode(): [ |
7 | | - ComputedRef<any>, |
8 | | - (value?: unknown) => void |
9 | | -] { |
10 | | - const [enabledState, setEnabledState] = useLocalStorageState( |
11 | | - 'dark-mode-enabled' |
12 | | - ) |
| 6 | +export default function useDarkMode(): [ComputedRef<any>, (value?: unknown) => void] { |
| 7 | + const [enabledState, setEnabledState] = useLocalStorageState('dark-mode-enabled') |
13 | 8 |
|
14 | | - const prefersDarkMode = usePrefersDarkMode() |
| 9 | + const prefersDarkMode = usePrefersDarkMode() |
15 | 10 |
|
16 | | - const enabled = computed(() => { |
17 | | - return typeof enabledState.value !== 'undefined' |
18 | | - ? enabledState.value |
19 | | - : prefersDarkMode.value |
20 | | - }) |
| 11 | + /** |
| 12 | + * Is it in dark mode |
| 13 | + */ |
| 14 | + const enabled = computed(() => { |
| 15 | + return typeof enabledState.value !== 'undefined' ? enabledState.value : prefersDarkMode.value |
| 16 | + }) |
21 | 17 |
|
22 | | - watchEffect(() => { |
23 | | - const className = 'dark-mode' |
24 | | - const element = window.document.body |
25 | | - if (enabled.value) { |
26 | | - element.classList.add(className) |
27 | | - } else { |
28 | | - element.classList.remove(className) |
29 | | - } |
30 | | - }) |
31 | | - return [enabled, setEnabledState] |
| 18 | + watchEffect(() => { |
| 19 | + const className = 'dark-mode' |
| 20 | + const element = window.document.body |
| 21 | + if (enabled.value) { |
| 22 | + element.classList.add(className) |
| 23 | + } else { |
| 24 | + element.classList.remove(className) |
| 25 | + } |
| 26 | + }) |
| 27 | + return [enabled, setEnabledState] |
32 | 28 | } |
33 | 29 |
|
34 | 30 | function usePrefersDarkMode() { |
35 | | - return useMedia(['(prefers-color-scheme: dark)'], [true], false) |
| 31 | + return useMedia(['(prefers-color-scheme: dark)'], [true], false) |
36 | 32 | } |
0 commit comments