import type { Ref } from 'vue' import type { ThemeLocaleDataRef } from '@vuepress/plugin-theme-data/client' import { usePageData, usePageFrontmatter, usePageLang, useSiteLocaleData, } from 'vuepress/client' import type { PageDataRef, PageFrontmatterRef, SiteLocaleDataRef, } from 'vuepress/client' import type { PlumeThemeFriendsFrontmatter, PlumeThemeHomeFrontmatter, PlumeThemeLocaleData, PlumeThemePageData, PlumeThemePageFrontmatter, PlumeThemePostFrontmatter, } from '../../shared/index.js' import { useThemeLocaleData } from './theme-data.js' import { useDarkMode } from './dark-mode.js' type FrontmatterType = 'home' | 'post' | 'friends' | 'page' type Frontmatter = T extends 'home' ? PlumeThemeHomeFrontmatter : T extends 'post' ? PlumeThemePostFrontmatter : T extends 'friends' ? PlumeThemeFriendsFrontmatter : PlumeThemePageFrontmatter export interface Data { theme: ThemeLocaleDataRef page: PageDataRef frontmatter: PageFrontmatterRef> lang: Ref site: SiteLocaleDataRef isDark: Ref } export function useData(): Data { const theme = useThemeLocaleData() const page = usePageData() const frontmatter = usePageFrontmatter>() const site = useSiteLocaleData() const isDark = useDarkMode() const lang = usePageLang() return { theme, page, frontmatter, lang, site, isDark } }