98 lines
1.9 KiB
Vue
98 lines
1.9 KiB
Vue
<script lang="ts" setup>
|
|
import {
|
|
computed,
|
|
nextTick,
|
|
onBeforeUnmount,
|
|
onMounted,
|
|
ref,
|
|
watch,
|
|
} from 'vue';
|
|
|
|
// import { useAntdDesignTokens } from '@vben/hooks';
|
|
// import { initPreferences } from '@vben/preferences';
|
|
|
|
import { ConfigProvider, theme } from 'ant-design-vue';
|
|
import mediumZoom from 'medium-zoom';
|
|
import { useRoute } from 'vitepress';
|
|
import DefaultTheme from 'vitepress/theme';
|
|
|
|
const { Layout } = DefaultTheme;
|
|
const route = useRoute();
|
|
// const { tokens } = useAntdDesignTokens();
|
|
|
|
const initZoom = () => {
|
|
// mediumZoom('[data-zoomable]', { background: 'var(--vp-c-bg)' });
|
|
mediumZoom('.VPContent img', { background: 'var(--vp-c-bg)' });
|
|
};
|
|
|
|
const isDark = ref(true);
|
|
|
|
watch(
|
|
() => route.path,
|
|
() => nextTick(() => initZoom()),
|
|
);
|
|
|
|
// initPreferences({
|
|
// namespace: 'docs',
|
|
// });
|
|
|
|
onMounted(() => {
|
|
initZoom();
|
|
});
|
|
|
|
// 使用该函数
|
|
const observer = watchDarkModeChange((dark) => {
|
|
isDark.value = dark;
|
|
});
|
|
|
|
onBeforeUnmount(() => {
|
|
observer?.disconnect();
|
|
});
|
|
|
|
function watchDarkModeChange(callback: (isDark: boolean) => void) {
|
|
if (typeof window === 'undefined') {
|
|
return;
|
|
}
|
|
const htmlElement = document.documentElement;
|
|
|
|
const observer = new MutationObserver(() => {
|
|
const isDark = htmlElement.classList.contains('dark');
|
|
callback(isDark);
|
|
});
|
|
|
|
observer.observe(htmlElement, {
|
|
attributeFilter: ['class'],
|
|
attributes: true,
|
|
});
|
|
|
|
const initialIsDark = htmlElement.classList.contains('dark');
|
|
callback(initialIsDark);
|
|
|
|
return observer;
|
|
}
|
|
|
|
const tokenTheme = computed(() => {
|
|
const algorithm = isDark.value
|
|
? [theme.darkAlgorithm]
|
|
: [theme.defaultAlgorithm];
|
|
|
|
return {
|
|
algorithm,
|
|
// token: tokens,
|
|
};
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<ConfigProvider :theme="tokenTheme">
|
|
<Layout />
|
|
</ConfigProvider>
|
|
</template>
|
|
|
|
<style>
|
|
.medium-zoom-overlay,
|
|
.medium-zoom-image--opened {
|
|
z-index: 2147483647;
|
|
}
|
|
</style>
|