mirror of
https://github.com/pengzhanbo/vuepress-theme-plume.git
synced 2026-04-23 10:58:13 +08:00
28 lines
672 B
TypeScript
28 lines
672 B
TypeScript
import { inject, provide, ref } from 'vue'
|
|
import type { InjectionKey, Ref } from 'vue'
|
|
|
|
export type DarkModeRef = Ref<boolean>
|
|
|
|
export const darkModeSymbol: InjectionKey<DarkModeRef> = Symbol(
|
|
__VUEPRESS_DEV__ ? 'darkMode' : ''
|
|
)
|
|
|
|
/**
|
|
* Inject dark mode global computed
|
|
*/
|
|
export const useDarkMode = (): DarkModeRef => {
|
|
const isDark = inject(darkModeSymbol)
|
|
if (isDark === undefined) {
|
|
throw new Error('useDarkMode() is called without provider.')
|
|
}
|
|
return isDark
|
|
}
|
|
|
|
/**
|
|
* Create dark mode ref and provide as global computed in setup
|
|
*/
|
|
export const setupDarkMode = (): void => {
|
|
const isDark = ref<boolean>(false)
|
|
provide(darkModeSymbol, isDark)
|
|
}
|