// types shared between server and client import type { UseDarkOptions } from '@vueuse/core' import type { SSRContext } from 'vue/server-renderer' export type { DefaultTheme } from './default-theme.js' export type Awaitable = T | PromiseLike export interface PageData { relativePath: string filePath: string // differs from relativePath in case of path rewrites title: string titleTemplate?: string | boolean description: string headers: Header[] frontmatter: Record params?: Record isNotFound?: boolean lastUpdated?: number } export interface Header { /** * The level of the header * * `1` to `6` for `

` to `

` */ level: number /** * The title of the header */ title: string /** * The slug of the header * * Typically the `id` attr of the header anchor */ slug: string /** * Link of the header * * Typically using `#${slug}` as the anchor hash */ link: string /** * The children of the header */ children: Header[] } export interface SiteData { base: string cleanUrls?: boolean lang: string dir: string title: string titleTemplate?: string | boolean description: string head: HeadConfig[] appearance: | boolean | 'dark' | (Omit & { initialValue?: 'dark' }) themeConfig: ThemeConfig scrollOffset: | number | string | string[] | { selector: string | string[]; padding: number } locales: LocaleConfig localeIndex?: string contentProps?: Record } export type HeadConfig = | [string, Record] | [string, Record, string] export interface PageDataPayload { path: string pageData: PageData } export interface SSGContext extends SSRContext { content: string } export interface LocaleSpecificConfig { lang?: string dir?: string title?: string titleTemplate?: string | boolean description?: string head?: HeadConfig[] themeConfig?: ThemeConfig } export type LocaleConfig = Record< string, LocaleSpecificConfig & { label: string; link?: string } >