44 lines
1.6 KiB
JavaScript
44 lines
1.6 KiB
JavaScript
import { setupDarkMode } from '@theme/useDarkMode';
|
|
import { useScrollPromise } from '@theme/useScrollPromise';
|
|
import { setupSidebarItems } from '@theme/useSidebarItems';
|
|
import { hasGlobalComponent } from '@vuepress/helper/client';
|
|
import { h } from 'vue';
|
|
import { defineClientConfig } from 'vuepress/client';
|
|
import { Badge, CodeGroup, CodeGroupItem } from './components/global/index.js';
|
|
import Layout from './layouts/Layout.vue';
|
|
import NotFound from './layouts/NotFound.vue';
|
|
import '@vuepress/helper/normalize.css';
|
|
import './styles/index.scss';
|
|
export default defineClientConfig({
|
|
enhance({ app, router }) {
|
|
if (!hasGlobalComponent('Badge'))
|
|
app.component('Badge', Badge);
|
|
if (!hasGlobalComponent('CodeGroup'))
|
|
app.component('CodeGroup', CodeGroup);
|
|
if (!hasGlobalComponent('CodeGroupItem'))
|
|
app.component('CodeGroupItem', CodeGroupItem);
|
|
// compat with @vuepress/plugin-docsearch and @vuepress/plugin-search
|
|
app.component('VPSearch', () => {
|
|
const SearchComponent = app.component('Docsearch') || app.component('SearchBox');
|
|
if (SearchComponent) {
|
|
return h(SearchComponent);
|
|
}
|
|
return null;
|
|
});
|
|
// handle scrollBehavior with transition
|
|
const scrollBehavior = router.options.scrollBehavior;
|
|
router.options.scrollBehavior = async (...args) => {
|
|
await useScrollPromise().wait();
|
|
return scrollBehavior(...args);
|
|
};
|
|
},
|
|
setup() {
|
|
setupDarkMode();
|
|
setupSidebarItems();
|
|
},
|
|
layouts: {
|
|
Layout,
|
|
NotFound,
|
|
},
|
|
});
|