24 lines
786 B
JavaScript
24 lines
786 B
JavaScript
import { inject, readonly, ref } from 'vue';
|
|
import { getDarkMode } from '../utils/index.js';
|
|
export const darkModeSymbol = Symbol(__VUEPRESS_DEV__ ? 'darkMode' : '');
|
|
const darkmode = ref(false);
|
|
// Ensure darkmode is initialized only once in client-side
|
|
if (typeof document !== 'undefined') {
|
|
darkmode.value = getDarkMode();
|
|
const mutationObserver = new MutationObserver(() => {
|
|
darkmode.value = getDarkMode();
|
|
});
|
|
mutationObserver.observe(document.documentElement, {
|
|
attributeFilter: ['data-theme'],
|
|
attributes: true,
|
|
});
|
|
}
|
|
/**
|
|
* Get darkmode status
|
|
*
|
|
* 获取暗色模式状态
|
|
*
|
|
* @returns Readonly darkmode ref / 只读的暗色模式响应式引用
|
|
*/
|
|
export const useDarkMode = () => readonly(inject(darkModeSymbol, darkmode));
|