1829 lines
40 KiB
TypeScript
1829 lines
40 KiB
TypeScript
import { LocaleConfig, LocaleData, Page, PageFrontmatter } from "vuepress";
|
||
import { Stats } from "node:fs";
|
||
import { WatermarkPluginFrontmatter, WatermarkPluginOptions } from "@vuepress/plugin-watermark";
|
||
import { MarkdownChartPluginOptions } from "@vuepress/plugin-markdown-chart";
|
||
import { MarkdownHintPluginOptions } from "@vuepress/plugin-markdown-hint";
|
||
import { MarkdownImagePluginOptions } from "@vuepress/plugin-markdown-image";
|
||
import { MarkdownIncludePluginOptions } from "@vuepress/plugin-markdown-include";
|
||
import { MarkdownMathPluginOptions } from "@vuepress/plugin-markdown-math";
|
||
import { MarkdownPowerPluginOptions } from "vuepress-plugin-md-power";
|
||
import { SearchPluginOptions } from "@vuepress-plume/plugin-search";
|
||
import { DocSearchOptions as DocSearchOptions$1, DocSearchPluginOptions } from "@vuepress/plugin-docsearch";
|
||
import { CommentPluginOptions } from "@vuepress/plugin-comment";
|
||
import { CopyCodePluginOptions } from "@vuepress/plugin-copy-code";
|
||
import { ChangelogOptions, ContributorsOptions, GitChangelogInfo as GitChangelog, GitContributorInfo as GitContributor, GitPluginPageData } from "@vuepress/plugin-git";
|
||
import { ReadingTime, ReadingTimePluginOptions } from "@vuepress/plugin-reading-time";
|
||
import { ReplaceAssetsPluginOptions } from "@vuepress/plugin-replace-assets";
|
||
import { ShikiPluginOptions } from "@vuepress/plugin-shiki";
|
||
import { CachePluginOptions } from "@vuepress/plugin-cache";
|
||
import { PhotoSwipePluginOptions } from "@vuepress/plugin-photo-swipe";
|
||
import { SeoPluginOptions } from "@vuepress/plugin-seo";
|
||
import { SitemapPluginOptions } from "@vuepress/plugin-sitemap";
|
||
|
||
//#region src/shared/common/base.d.ts
|
||
/**
|
||
* 图片
|
||
*/
|
||
type ThemeImage = string | {
|
||
src: string;
|
||
alt?: string;
|
||
width?: string | number;
|
||
height?: string | number;
|
||
} | {
|
||
dark: string;
|
||
light: string;
|
||
alt?: string;
|
||
width?: string | number;
|
||
height?: string | number;
|
||
};
|
||
/**
|
||
* 图标
|
||
*/
|
||
type ThemeIcon = string | {
|
||
svg: string;
|
||
};
|
||
/**
|
||
* 颜色
|
||
*/
|
||
type ThemeColor = string | {
|
||
light: string;
|
||
dark: string;
|
||
};
|
||
/**
|
||
* 页内 heading 导航栏
|
||
*/
|
||
type ThemeOutline = false | number | [number, number] | "deep";
|
||
/**
|
||
* 徽章
|
||
*/
|
||
interface ThemeBadge {
|
||
text?: string;
|
||
type?: string;
|
||
color?: string;
|
||
bgColor?: string;
|
||
borderColor?: string;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/common/social.d.ts
|
||
/**
|
||
* 社交链接
|
||
*/
|
||
interface SocialLink {
|
||
icon: SocialLinkIcon;
|
||
link: string;
|
||
ariaLabel?: string;
|
||
}
|
||
/**
|
||
* 社交链接图标
|
||
*/
|
||
type SocialLinkIcon = SocialLinkIconUnion | {
|
||
svg: string;
|
||
name?: string;
|
||
};
|
||
type SocialLinkIconUnion = "discord" | "telegram" | "facebook" | "github" | "instagram" | "linkedin" | "mastodon" | "npm" | "slack" | "twitter" | "x" | "youtube" | "qq" | "weibo" | "bilibili" | "gitlab" | "docker" | "juejin" | "zhihu" | "douban" | "steam" | "stackoverflow" | "xbox";
|
||
//#endregion
|
||
//#region src/shared/frontmatter/normal.d.ts
|
||
type ThemeNormalFrontmatter = PageFrontmatter<{
|
||
/**
|
||
* @deprecated
|
||
*
|
||
* 使用 pageLayout = 'home' 代替
|
||
*/
|
||
home?: boolean;
|
||
/**
|
||
* @deprecated
|
||
*
|
||
* 使用 pageLayout = 'friends' 代替
|
||
*/
|
||
friends?: boolean;
|
||
/**
|
||
* page layout
|
||
*/
|
||
pageLayout?: false | "home" | "blog" | "doc" | "custom" | "page" | "friends";
|
||
/**
|
||
* 自定义页面 class
|
||
*/
|
||
pageClass?: string;
|
||
/**
|
||
* 是否显示导航栏
|
||
*
|
||
* @default true
|
||
*/
|
||
navbar?: boolean;
|
||
/**
|
||
* 是否显示返回顶部按钮
|
||
*
|
||
* @default true
|
||
*/
|
||
backToTop?: boolean;
|
||
/**
|
||
* 是否显示向下箭头标志
|
||
*
|
||
* @default false
|
||
*/
|
||
signDown?: boolean;
|
||
/**
|
||
* 当前页面是否显示 外部链接图标
|
||
*
|
||
* @default true
|
||
*/
|
||
externalLinkIcon?: boolean;
|
||
/**
|
||
* @deprecated 使用 `externalLinkIcon` 代替
|
||
*/
|
||
externalLink?: boolean;
|
||
}>;
|
||
//#endregion
|
||
//#region src/shared/frontmatter/page.d.ts
|
||
interface ThemePageFrontmatter extends ThemeNormalFrontmatter {
|
||
home?: never;
|
||
friends?: never;
|
||
/**
|
||
* 是否开启评论
|
||
*/
|
||
comments?: boolean;
|
||
/**
|
||
* 是否显示编辑按钮
|
||
*/
|
||
editLink?: boolean;
|
||
/**
|
||
* 编辑链接模式
|
||
*/
|
||
editLinkPattern?: string;
|
||
/**
|
||
* 是否显示最近更新时间
|
||
*/
|
||
lastUpdated?: boolean;
|
||
/**
|
||
* 是否显示贡献者
|
||
*/
|
||
contributors?: boolean | string[];
|
||
/**
|
||
* 是否显示变更历史
|
||
*/
|
||
changelog?: boolean;
|
||
/**
|
||
* 上一篇
|
||
*/
|
||
prev?: string | NavItemWithLink;
|
||
/**
|
||
* 下一篇
|
||
*/
|
||
next?: string | NavItemWithLink;
|
||
/**
|
||
* 是否显示侧边栏,也可以强制指定当前页面显示哪个侧边栏
|
||
*/
|
||
sidebar?: string | false;
|
||
/**
|
||
* 是否显示页内侧边栏
|
||
*/
|
||
aside?: boolean | "left";
|
||
/**
|
||
* 是否显示内容大纲,仅在页内侧边栏开启时生效
|
||
*/
|
||
outline?: ThemeOutline;
|
||
/**
|
||
* 是否显示阅读时间、字数
|
||
*/
|
||
readingTime?: boolean;
|
||
/**
|
||
* 水印配置
|
||
*/
|
||
watermark?: WatermarkPluginFrontmatter["watermark"] & {
|
||
fullPage?: boolean;
|
||
};
|
||
/**
|
||
* 用作 navbar 、 sidebar 的图标
|
||
* 支持 iconify 图标,直接使用 iconify name 即可自动加载
|
||
* 支持 本地、远程 svg 图标,直接使用 svg 的 url 即可
|
||
* 或直接传入 svg 字符串
|
||
*/
|
||
icon?: ThemeIcon;
|
||
/**
|
||
* 标题徽章
|
||
*/
|
||
badge?: string | ThemeBadge;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/autoFrontmatter.d.ts
|
||
interface AutoFrontmatterMarkdownFile {
|
||
filepath: string;
|
||
relativePath: string;
|
||
content: string;
|
||
createTime: Date;
|
||
stats: Stats;
|
||
}
|
||
type FrontmatterFn<T = any> = (value: T, file: AutoFrontmatterMarkdownFile, data: ThemePageFrontmatter) => T | PromiseLike<T>;
|
||
type AutoFrontmatterObject<T = any> = Record<string, FrontmatterFn<T>>;
|
||
type AutoFrontmatterArray = {
|
||
include: string | string[];
|
||
frontmatter: AutoFrontmatterObject;
|
||
}[];
|
||
interface AutoFrontmatterOptions {
|
||
/**
|
||
* glob 匹配,被匹配的文件将会自动生成 frontmatter
|
||
*
|
||
* @default ['**\/*.md']
|
||
*/
|
||
include?: string | string[];
|
||
/**
|
||
* glob 匹配,被匹配的文件将不会自动生成 frontmatter
|
||
*/
|
||
exclude?: string | string[];
|
||
/**
|
||
* 是否自动生成 permalink
|
||
*
|
||
* @default true
|
||
*/
|
||
permalink?: boolean;
|
||
/**
|
||
* 是否自动生成 createTime
|
||
*
|
||
* 默认读取 文件创建时间,`createTitme` 比 vuepress 默认的 `date` 时间更精准到秒
|
||
*/
|
||
createTime?: boolean;
|
||
/**
|
||
* 是否自动生成 author
|
||
*
|
||
* 默认读取 `profile.name` 或 `package.json` 的 `author`
|
||
*
|
||
* @deprecated 不再默认生成 `author`, 该配置已废弃
|
||
*/
|
||
author?: boolean;
|
||
/**
|
||
* 是否自动生成 title
|
||
*
|
||
* 默认读取文件名作为标题
|
||
*/
|
||
title?: boolean;
|
||
/**
|
||
* {
|
||
* key(value, file, data) {
|
||
* return value
|
||
* }
|
||
* }
|
||
*/
|
||
frontmatter?: AutoFrontmatterArray | AutoFrontmatterObject;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/blog.d.ts
|
||
interface BlogCategoryItem {
|
||
/**
|
||
* 分类 ID
|
||
*/
|
||
id: string;
|
||
/**
|
||
* 分类排序
|
||
*/
|
||
sort: number;
|
||
/**
|
||
* 分类名称
|
||
*/
|
||
name: string;
|
||
}
|
||
/**
|
||
* 博客封面图布局
|
||
*/
|
||
type BlogPostCoverLayout = "left" | "right" | "odd-left" | "odd-right" | "top";
|
||
/**
|
||
* 博客文章封面图样式
|
||
*/
|
||
interface BlogPostCoverStyle {
|
||
/**
|
||
* 博客文章封面图的位置
|
||
*/
|
||
layout?: BlogPostCoverLayout;
|
||
/**
|
||
* 博客文章封面图的比例
|
||
*
|
||
* @default '4:3'
|
||
*/
|
||
ratio?: number | `${number}:${number}` | `${number}/${number}`;
|
||
/**
|
||
* 封面图的宽度, 仅在 layout 为 'left' 或 'right' 时生效
|
||
*
|
||
* @default 240
|
||
*/
|
||
width?: number;
|
||
/**
|
||
* 是否使用紧凑模式,紧凑模式下,封面图紧贴容器边缘
|
||
* @default false
|
||
*/
|
||
compact?: boolean;
|
||
}
|
||
/**
|
||
* 博客文章
|
||
*/
|
||
interface ThemeBlogPostItem {
|
||
/**
|
||
* 文章标题
|
||
*/
|
||
title: string;
|
||
/**
|
||
* 文章摘要
|
||
*/
|
||
excerpt: string;
|
||
/**
|
||
* 文章路径
|
||
*/
|
||
path: string;
|
||
/**
|
||
* 文章标签
|
||
*/
|
||
tags?: string[];
|
||
/**
|
||
* 文章是否置顶,数字表示置顶的优先级
|
||
* @default false
|
||
*/
|
||
sticky?: boolean | number;
|
||
/**
|
||
* 文章所属分类
|
||
*/
|
||
categoryList?: BlogCategoryItem[];
|
||
/**
|
||
* 文章创建时间
|
||
*/
|
||
createTime: string;
|
||
/**
|
||
* 文章语言
|
||
*/
|
||
lang: string;
|
||
/**
|
||
* 文章是否加密
|
||
*/
|
||
encrypt?: boolean;
|
||
/**
|
||
* 文章封面图
|
||
*/
|
||
cover?: string;
|
||
/**
|
||
* 文章封面图样式
|
||
*/
|
||
coverStyle?: BlogPostCoverStyle;
|
||
/**
|
||
* 文章是否为草稿
|
||
*/
|
||
draft?: boolean;
|
||
}
|
||
/**
|
||
* 博客文章列表
|
||
*/
|
||
type ThemeBlogPostList = ThemeBlogPostItem[];
|
||
/**
|
||
* 博客配置
|
||
*/
|
||
interface BlogOptions {
|
||
/**
|
||
* 通过 glob string 配置包含文件,
|
||
*
|
||
* 默认读取 源目录中的所有 `.md` 文件,但会排除 `notes` 配置中用于笔记的目录。
|
||
*
|
||
* 如果希望只将某个目录下的文章读取为博客文章,比如 `blog` 目录,可以配置为:
|
||
* `['blog/**\/*.md']`
|
||
*
|
||
* @default - ['**\/*.md']
|
||
*/
|
||
include?: string[];
|
||
/**
|
||
* 通过 glob string 配置排除的文件
|
||
*
|
||
* _README.md 文件一般作为主页或者某个目录下的主页,不应该被读取为 blog文章_
|
||
*
|
||
* @default - ['.vuepress/', 'node_modules/', '{README,index}.md']
|
||
*/
|
||
exclude?: string[];
|
||
/**
|
||
* 分页
|
||
*/
|
||
pagination?: false | number | {
|
||
/**
|
||
* 每页显示的文章数量
|
||
* @default 15
|
||
*/
|
||
perPage?: number;
|
||
};
|
||
/**
|
||
* 博客文章列表页链接
|
||
*
|
||
* @default '/blog/'
|
||
*/
|
||
link?: string;
|
||
/**
|
||
* 是否启用博客文章列表
|
||
* @default true
|
||
*/
|
||
postList?: boolean;
|
||
/**
|
||
* 是否启用标签页
|
||
* @default true
|
||
*/
|
||
tags?: boolean;
|
||
/**
|
||
* 自定义标签页链接
|
||
*
|
||
* @default '/blog/tags/'
|
||
*/
|
||
tagsLink?: string;
|
||
/**
|
||
* 标签颜色主题
|
||
*
|
||
* @default 'colored'
|
||
*/
|
||
tagsTheme?: "colored" | "gray" | "brand";
|
||
/**
|
||
* 是否启用归档页
|
||
* @default true
|
||
*/
|
||
archives?: boolean;
|
||
/**
|
||
* 自定义归档页链接
|
||
*
|
||
* @default '/blog/archives/'
|
||
*/
|
||
archivesLink?: string;
|
||
/**
|
||
* 是否启用分类功能
|
||
* - 启用后会生成分类页
|
||
* @default true
|
||
*/
|
||
categories?: boolean;
|
||
/**
|
||
* 自定义分类页链接
|
||
*
|
||
* @default '/blog/categories/'
|
||
*/
|
||
categoriesLink?: string;
|
||
/**
|
||
* 分类页展开深度
|
||
*
|
||
* @default 'deep'
|
||
*/
|
||
categoriesExpand?: number | "deep";
|
||
/**
|
||
* 文章分类列表转换函数,比如排除不需要的一级分类
|
||
* @param categories 分类列表
|
||
* @returns 返回一个新的分类列表
|
||
*/
|
||
categoriesTransform?: (categories: BlogCategoryItem[]) => BlogCategoryItem[];
|
||
/**
|
||
* 博客文章封面图
|
||
*
|
||
* 配置封面图的位置,支持 `'left'`、`'right'`、`'top'`、`'top-inside'`
|
||
*
|
||
* @default 'right'
|
||
*/
|
||
postCover?: BlogPostCoverLayout | BlogPostCoverStyle;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/bulletin.d.ts
|
||
/**
|
||
* 公告栏配置
|
||
*/
|
||
type BulletinOptions<T extends Record<string, unknown> = Record<string, unknown>> = T & {
|
||
/**
|
||
* 公告位置
|
||
* @default 'top-right'
|
||
*/
|
||
layout?: "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center";
|
||
/**
|
||
* 是否显示渐变边框
|
||
*
|
||
* @default true
|
||
*/
|
||
border?: boolean;
|
||
/**
|
||
* 在哪些页面显示公告
|
||
*
|
||
* - `true` 表示所有页面
|
||
* - `false` 表示不显示
|
||
* - 传入一个函数,返回 `true` 时显示
|
||
*/
|
||
enablePage?: boolean | ((page: Page) => boolean);
|
||
/**
|
||
* 公告持续时间
|
||
*
|
||
* @default 'always'
|
||
*
|
||
* - `'session'` 表示在会话周期内关闭公告后不再显示,在新的会话周期重新显示,刷新页面不会重新显示
|
||
* - `'always'` 表示总是显示,关闭公告后刷新页面会重新显示
|
||
* - `'once'` 表示在仅在当前周期内显示,关闭公告后不再显示,新的会话和刷新页面都不会重新显示
|
||
*/
|
||
lifetime?: "session" | "always" | "once";
|
||
/**
|
||
* 公告 ID
|
||
*
|
||
* 公告持续时间 需要根据 `id` 作为唯一标识
|
||
*/
|
||
id?: string;
|
||
/**
|
||
* 公告标题
|
||
*/
|
||
title?: string;
|
||
/**
|
||
* 公告内容
|
||
*
|
||
* 可以使用 markdown 语法 或者 使用 html 文本,
|
||
* 使用 markdown 时需要声明 `contentType` 为 `markdown`
|
||
*/
|
||
content?: string;
|
||
/**
|
||
* 公告内容 类型
|
||
*
|
||
* - `markdown` 表示使用 markdown 语法
|
||
* - `text` 表示使用 普通文本 (可以是 html 内容)
|
||
*
|
||
* @default 'text'
|
||
*/
|
||
contentType?: "markdown" | "text";
|
||
/**
|
||
* 传入一个 `markdown` 或 `html` 文件路径,并使用文件内容作为公告内容
|
||
*
|
||
* - 使用 `.md` 文件时,将会解析 markdown 语法
|
||
* - 使用 `.html` 文件时,只能包含公告内容,请不要使用 `<html>` `<body>` `<script>` 等标签。
|
||
*/
|
||
contentFile?: string;
|
||
};
|
||
//#endregion
|
||
//#region src/shared/utils.d.ts
|
||
/**
|
||
* A literal type that supports custom further strings but preserves autocompletion in IDEs.
|
||
*
|
||
* @see [copied from issue](https://github.com/microsoft/TypeScript/issues/29729#issuecomment-471566609)
|
||
*/
|
||
type LiteralUnion<Union extends Base, Base = string> = Union | (Base & {
|
||
zz_IGNORE_ME?: never;
|
||
});
|
||
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
|
||
type UnionToTuple<T> = UnionToIntersection<T extends any ? () => T : never> extends (() => infer R) ? [...UnionToTuple<Exclude<T, R>>, R] : [];
|
||
//#endregion
|
||
//#region src/shared/features/copyright.d.ts
|
||
/**
|
||
* 内置支持的版权协议
|
||
*/
|
||
type KnownCopyrightLicense = "CC-BY-4.0" | "CC-BY-SA-4.0" | "CC-BY-NC-4.0" | "CC-BY-NC-SA-4.0" | "CC-BY-ND-4.0" | "CC-BY-NC-ND-4.0" | "CC0";
|
||
/**
|
||
* 文章版权协议
|
||
*
|
||
* @see https://creativecommons.org/licenses/
|
||
*/
|
||
type CopyrightLicense = LiteralUnion<KnownCopyrightLicense>;
|
||
/**
|
||
* 版权配置
|
||
*/
|
||
interface CopyrightOptions {
|
||
/**
|
||
* 版权信息
|
||
* @see https://creativecommons.org/share-your-work/cclicenses/
|
||
* @default 'CC-BY-4.0'
|
||
*/
|
||
license?: CopyrightLicense | {
|
||
name: string;
|
||
url: string;
|
||
};
|
||
/**
|
||
* 版权所有者
|
||
*/
|
||
author?: string | {
|
||
name: string;
|
||
url?: string;
|
||
};
|
||
/**
|
||
* 作品的创作方式
|
||
*/
|
||
creation?: "original" | "translate" | "reprint";
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/encrypt.d.ts
|
||
interface EncryptOptions {
|
||
/**
|
||
* 是否启用全站加密
|
||
* @default false
|
||
*/
|
||
global?: boolean;
|
||
/**
|
||
* 超级权限密码, 该密码可以解密全站,以及任意加密的文章
|
||
*
|
||
*/
|
||
admin?: string | string[];
|
||
/**
|
||
* 文章密码, 可以通过 文章的 markdown 文件相对路径、页面访问路径、
|
||
* 目录路径 等,对 单个文章 或者 整个目录 进行 加密。
|
||
* 如果是以 `^` 开头,则被认为是类似于正则表达式进行匹配。
|
||
*
|
||
* @example
|
||
* ```json
|
||
* {
|
||
* "前端/基础/html.md": "123",
|
||
* "/article/23c44c/": ["456", "789"],
|
||
* "^/note/(note1|note2)/": "123"
|
||
* }
|
||
* ```
|
||
*/
|
||
rules?: {
|
||
[key: string]: string | string[];
|
||
};
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/latestUpdated.d.ts
|
||
interface LastUpdatedOptions {
|
||
/**
|
||
* Set options for last updated time formatting.
|
||
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat#using_options
|
||
*
|
||
* @default
|
||
* { dateStyle: 'short', timeStyle: 'short' }
|
||
*/
|
||
formatOptions?: Intl.DateTimeFormatOptions & {
|
||
forceLocale?: boolean;
|
||
};
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/markdown.d.ts
|
||
interface MarkdownOptions extends MarkdownPowerPluginOptions, MarkdownChartPluginOptions, Pick<MarkdownHintPluginOptions, "alert" | "hint"> {
|
||
/**
|
||
* 已弃用
|
||
* @deprecated use `demo` instead
|
||
*/
|
||
oldDemo?: never;
|
||
/**
|
||
* markdown image enhance
|
||
*/
|
||
image?: false | MarkdownImagePluginOptions;
|
||
/**
|
||
* 在 markdown 中包含其他文件
|
||
*/
|
||
include?: false | MarkdownIncludePluginOptions;
|
||
/**
|
||
* markdown 数学公式
|
||
*/
|
||
math?: false | MarkdownMathPluginOptions;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/navbar.d.ts
|
||
/**
|
||
* 导航项
|
||
*/
|
||
type ThemeNavItem = string | NavItemWithLink | NavItemWithChildren;
|
||
interface NavItemWithLink {
|
||
/**
|
||
* 导航文本
|
||
*/
|
||
text: string;
|
||
/**
|
||
* 导航链接
|
||
*/
|
||
link: string;
|
||
/**
|
||
* 导航图标
|
||
*/
|
||
icon?: ThemeIcon;
|
||
/**
|
||
* 徽章
|
||
*/
|
||
badge?: string | ThemeBadge;
|
||
/**
|
||
* 当前分组的页面前缀
|
||
*/
|
||
prefix?: never;
|
||
items?: never;
|
||
/**
|
||
* `activeMatch` is expected to be a regex string. We can't use actual
|
||
* RegExp object here because it isn't serializable
|
||
*
|
||
* `activeMatch` 应该是一个正则表达式字符串。我们不能在这里使用实际的
|
||
* RegExp 对象,因为它不可序列化
|
||
*/
|
||
activeMatch?: string;
|
||
rel?: string;
|
||
target?: string;
|
||
noIcon?: boolean;
|
||
}
|
||
interface NavItemChildren {
|
||
/**
|
||
* 下拉菜单的文本
|
||
*/
|
||
text?: string;
|
||
/**
|
||
*
|
||
* 当前分组的页面前缀
|
||
*/
|
||
prefix?: string;
|
||
/**
|
||
* 导航图标
|
||
*/
|
||
icon?: ThemeIcon;
|
||
/**
|
||
* 徽章
|
||
*/
|
||
badge?: string | ThemeBadge;
|
||
/**
|
||
* 导航栏下拉菜单
|
||
*/
|
||
items: (string | NavItemWithLink)[];
|
||
}
|
||
interface NavItemWithChildren {
|
||
text?: string;
|
||
/**
|
||
* 当前分组的页面前缀
|
||
*/
|
||
prefix?: string;
|
||
/**
|
||
* 导航图标
|
||
*/
|
||
icon?: ThemeIcon;
|
||
/**
|
||
* 徽章
|
||
*/
|
||
badge?: string | ThemeBadge;
|
||
/**
|
||
* 导航栏下拉菜单
|
||
*/
|
||
items: (string | NavItemChildren | NavItemWithLink)[];
|
||
/**
|
||
* `activeMatch` is expected to be a regex string. We can't use actual
|
||
* RegExp object here because it isn't serializable
|
||
*
|
||
* `activeMatch` 应为正则表达式字符串,但必须将其定义为字符串。
|
||
* 我们不能在这里使用实际的 RegExp 对象,因为它在构建期间不可序列化。
|
||
*/
|
||
activeMatch?: string;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/sidebar.d.ts
|
||
type ThemeSidebar = "auto" | (string | ThemeSidebarItem)[] | ThemeSidebarMulti;
|
||
type ThemeSidebarMulti = Record<string, "auto" | (string | ThemeSidebarItem)[] | {
|
||
items: "auto" | (string | ThemeSidebarItem)[];
|
||
prefix?: string;
|
||
}>;
|
||
interface ThemeSidebarItem {
|
||
/**
|
||
* 侧边栏文本
|
||
*/
|
||
text?: string;
|
||
/**
|
||
* 侧边栏链接
|
||
*/
|
||
link?: string;
|
||
/**
|
||
* 侧边栏图标
|
||
*/
|
||
icon?: ThemeIcon;
|
||
/**
|
||
* 侧边栏徽章
|
||
*/
|
||
badge?: string | ThemeBadge;
|
||
/**
|
||
* 次级侧边栏分组
|
||
*/
|
||
items?: "auto" | (string | ThemeSidebarItem)[];
|
||
/**
|
||
* 如果未指定,组不可折叠。
|
||
*
|
||
* 如果为`true`,组可折叠,并默认折叠。
|
||
*
|
||
* 如果为`false`,组可折叠,但默认展开。
|
||
*/
|
||
collapsed?: boolean;
|
||
/**
|
||
* 当前分组的链接前缀
|
||
*/
|
||
prefix?: string;
|
||
/**
|
||
* @deprecated 使用 `prefix` 替代
|
||
*/
|
||
dir?: string;
|
||
rel?: string;
|
||
target?: string;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/notes.d.ts
|
||
interface ThemeNoteListOptions {
|
||
/**
|
||
* 保存所有笔记的目录
|
||
* @default '/notes/'
|
||
*/
|
||
dir: string;
|
||
/**
|
||
* 所有笔记的默认链接前缀
|
||
* @default '/'
|
||
*/
|
||
link: string;
|
||
/**
|
||
* 笔记配置
|
||
*/
|
||
notes: ThemeNote[];
|
||
}
|
||
interface ThemeNote {
|
||
/**
|
||
* 保存笔记的目录
|
||
*/
|
||
dir: string;
|
||
/**
|
||
* 当前笔记的链接前缀,将会与 `notes.link` 合并
|
||
*/
|
||
link: string;
|
||
/**
|
||
* 当前笔记名称
|
||
*/
|
||
text?: string;
|
||
/**
|
||
* 当前笔记的侧边栏配置
|
||
*/
|
||
sidebar?: "auto" | (string | ThemeSidebarItem)[];
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/profile.d.ts
|
||
/**
|
||
* 个人资料
|
||
*/
|
||
interface ProfileOptions {
|
||
/**
|
||
* @deprecated 弃用,使用 `avatar` 代替
|
||
* 头像链接
|
||
*/
|
||
url?: string;
|
||
/**
|
||
* 头像链接地址
|
||
*/
|
||
avatar?: string;
|
||
/**
|
||
* 名称
|
||
*/
|
||
name?: string;
|
||
/**
|
||
* 描述
|
||
*/
|
||
description?: string;
|
||
/**
|
||
* 是否显示为圆形头像
|
||
*/
|
||
circle?: boolean;
|
||
/**
|
||
* 地理位置
|
||
*/
|
||
location?: string;
|
||
/**
|
||
* 组织,公司
|
||
*/
|
||
organization?: string;
|
||
/**
|
||
* 布局位置,左侧或者右侧
|
||
* @default 'right'
|
||
*/
|
||
layout?: "left" | "right";
|
||
}
|
||
//#endregion
|
||
//#region src/shared/features/search.d.ts
|
||
interface SearchBaseOptions {
|
||
provider: "local" | "algolia";
|
||
}
|
||
interface LocalSearchOptions extends SearchBaseOptions, SearchPluginOptions {
|
||
provider: "local";
|
||
}
|
||
interface DocSearchOptions extends SearchBaseOptions, DocSearchPluginOptions {
|
||
provider: "algolia";
|
||
}
|
||
type SearchOptions = LocalSearchOptions | DocSearchOptions;
|
||
//#endregion
|
||
//#region src/shared/features/transition.d.ts
|
||
interface TransitionOptions {
|
||
/**
|
||
* 是否启用 页面间跳转过渡动画
|
||
* @default true
|
||
*/
|
||
page?: boolean;
|
||
/**
|
||
* 是否启用 博客文章列表过渡动画
|
||
* @default true
|
||
*/
|
||
postList?: boolean;
|
||
/**
|
||
* 是否启用 深色/浅色 模式切换过渡动画
|
||
* @default 'fade'
|
||
*/
|
||
appearance?: boolean | "fade" | "circle-clip" | "horizontal-clip" | "vertical-clip" | "skew-clip";
|
||
}
|
||
//#endregion
|
||
//#region src/shared/locale.d.ts
|
||
/**
|
||
* 内置的多语言配置
|
||
*/
|
||
interface PresetLocale extends Record<CopyrightLicense, string> {}
|
||
interface ThemeLocale extends LocaleData {
|
||
/**
|
||
* 网站站点首页
|
||
*/
|
||
home?: string;
|
||
/**
|
||
* 网站站点logo
|
||
*/
|
||
logo?: string;
|
||
/**
|
||
* 深色模式下的网站站点logo
|
||
*/
|
||
logoDark?: string;
|
||
/**
|
||
* 是否启用深色模式切换按钮
|
||
*/
|
||
appearance?: boolean | "dark" | "force-dark";
|
||
/**
|
||
* 配置博主拥有者 个人资料
|
||
*
|
||
* 显示在博客右侧侧边栏
|
||
*/
|
||
profile?: ProfileOptions;
|
||
/**
|
||
* 社交账号配置
|
||
*/
|
||
social?: SocialLink[];
|
||
/**
|
||
* 导航栏配置
|
||
*
|
||
* 设置为 `false` 将会禁用导航栏
|
||
*/
|
||
navbar?: false | ThemeNavItem[];
|
||
/**
|
||
* 允许显示在导航栏的社交类型
|
||
* @default ['github', 'twitter', 'discord', 'facebook']
|
||
*/
|
||
navbarSocialInclude?: (SocialLinkIconUnion | (string & {
|
||
zz_IGNORE_ME?: never;
|
||
}))[];
|
||
/**
|
||
* 笔记配置, 笔记中的文章默认不会出现在首页文章列表
|
||
*
|
||
* 注:也可以将notes配置到navbar中
|
||
*/
|
||
notes?: false | ThemeNoteListOptions;
|
||
/**
|
||
* 侧边栏配置
|
||
*/
|
||
sidebar?: ThemeSidebarMulti;
|
||
/**
|
||
* 是否显示侧边栏滚动条
|
||
* @default true
|
||
*/
|
||
sidebarScrollbar?: boolean;
|
||
/**
|
||
* 要显示的标题级别。
|
||
*
|
||
* 单个数字表示只显示该级别的标题。
|
||
*
|
||
* 如果传递的是一个元组,第一个数字是最小级别,第二个数字是最大级别。
|
||
*
|
||
* 'deep' 与 [2, 6] 相同,将显示从 <h2> 到 <h6> 的所有标题。
|
||
*
|
||
* @default [2, 3]
|
||
*/
|
||
outline?: ThemeOutline;
|
||
/**
|
||
* 是否显示侧边栏
|
||
*
|
||
* - `false` 表示禁用 右侧边栏
|
||
* - `true` 表示启用 右侧边栏
|
||
* - `'left` 表示将有侧边栏移动到文章内容左侧,sidebar 右侧
|
||
*
|
||
* @default true
|
||
*/
|
||
aside?: boolean | "left";
|
||
/**
|
||
* 配置公告
|
||
*/
|
||
bulletin?: true | BulletinOptions;
|
||
/**
|
||
* 配置版权信息
|
||
* @default false
|
||
*/
|
||
copyright?: boolean | CopyrightLicense | CopyrightOptions;
|
||
/**
|
||
* 是否启用过渡动画效果
|
||
*
|
||
* @default true
|
||
*/
|
||
transition?: boolean | TransitionOptions;
|
||
/**
|
||
* "编辑此页" 的链接匹配模式
|
||
*
|
||
* @example ':repo/edit/:branch/:path'
|
||
*/
|
||
editLinkPattern?: string;
|
||
/**
|
||
* 是否显示上一页
|
||
*
|
||
* @default true
|
||
*/
|
||
prevPage?: boolean;
|
||
/**
|
||
* 是否显示下一页
|
||
*
|
||
* @default true
|
||
*/
|
||
nextPage?: boolean;
|
||
/**
|
||
* 是否显示外部链接图标
|
||
*
|
||
* @default true
|
||
*/
|
||
externalLinkIcon?: boolean;
|
||
/**
|
||
* 是否在文章页显示创建时间
|
||
*
|
||
* @default true
|
||
*/
|
||
createTime?: boolean | "only-blog";
|
||
/**
|
||
* 页脚配置
|
||
*/
|
||
footer?: false | {
|
||
message?: string;
|
||
copyright?: string;
|
||
};
|
||
}
|
||
/**
|
||
* 已弃用的配置
|
||
*/
|
||
interface ThemeLocaleDeprecated {
|
||
/**
|
||
* @deprecated 弃用,使用 `profile` 代替
|
||
*/
|
||
avatar?: ProfileOptions;
|
||
}
|
||
/**
|
||
* 主题多语言文本配置
|
||
*/
|
||
interface ThemeLocaleText {
|
||
/**
|
||
* 深色模式切换按钮的文本
|
||
* @default 'Appearance'
|
||
*/
|
||
appearanceText?: string;
|
||
/**
|
||
* 切换到浅色模式提示文本
|
||
* @default 'Switch to light theme'
|
||
*/
|
||
lightModeSwitchTitle?: string;
|
||
/**
|
||
* 切换到深色模式的提示文本
|
||
* @default 'Switch to dark theme'
|
||
*/
|
||
darkModeSwitchTitle?: string;
|
||
/**
|
||
* 版权所有的文本
|
||
* @default 'Copyright'
|
||
*/
|
||
copyrightText?: string;
|
||
/**
|
||
* 版权归属者的文本
|
||
* @default 'Copyright Ownership:'
|
||
*/
|
||
copyrightAuthorText?: string;
|
||
/**
|
||
* 本文链接的文本
|
||
* @default 'This article link:'
|
||
*/
|
||
copyrightCreationOriginalText?: string;
|
||
/**
|
||
* 本文翻译链接的文本
|
||
* @default 'This article is translated from:'
|
||
*/
|
||
copyrightCreationTranslateText?: string;
|
||
/**
|
||
* 转载链接的文本
|
||
* @default 'This article is reprint from:'
|
||
*/
|
||
copyrightCreationReprintText?: string;
|
||
/**
|
||
* 许可证的文本
|
||
* @default 'License under:'
|
||
*/
|
||
copyrightLicenseText?: string;
|
||
/**
|
||
* 选择语言菜单 的文本。
|
||
* @default 'Languages'
|
||
*/
|
||
selectLanguageText?: string;
|
||
/**
|
||
* 选择语言菜单 的 `aria-label` 属性。
|
||
*/
|
||
selectLanguageAriaLabel?: string;
|
||
/**
|
||
* 语言名称
|
||
*
|
||
* 仅能在主题配置的 locales 的内部生效 。
|
||
* 它将被用作 locale 的语言名称,展示在 选择语言菜单 内。
|
||
*/
|
||
selectLanguageName?: string;
|
||
/**
|
||
* "编辑此页" 的文本
|
||
*
|
||
* @default "Edit this page"
|
||
*/
|
||
editLinkText?: string;
|
||
/**
|
||
* "最后更新时间" 的文本
|
||
*
|
||
* @default 'Last updated'
|
||
*/
|
||
lastUpdatedText?: string;
|
||
/**
|
||
* 贡献者的文本
|
||
* @default 'Contributors'
|
||
*/
|
||
contributorsText?: string;
|
||
/**
|
||
* 变更历史的文本
|
||
* @default 'Changelog'
|
||
*/
|
||
changelogText?: string;
|
||
/**
|
||
* 单次变更记录的时间文本
|
||
* @default 'On'
|
||
*/
|
||
changelogOnText?: string;
|
||
/**
|
||
* 查看完整的变更历史的文本
|
||
*
|
||
* @default 'View All Changelog'
|
||
*/
|
||
changelogButtonText?: string;
|
||
/**
|
||
* 移动设备下的导航栏中 菜单选项的文字。
|
||
*
|
||
* @default 'Menu'
|
||
*/
|
||
sidebarMenuLabel?: string;
|
||
/**
|
||
* 移动设备下的导航栏中返回顶部的文字。
|
||
*
|
||
* @default 'return to top'
|
||
*/
|
||
returnToTopLabel?: string;
|
||
/**
|
||
* 侧边栏 outline 文本
|
||
*
|
||
* @default 'On this page'
|
||
*/
|
||
outlineLabel?: string;
|
||
/**
|
||
* 上一页的文本
|
||
*
|
||
* @default 'Previous Page'
|
||
*/
|
||
prevPageLabel?: string;
|
||
/**
|
||
* 下一页的文本
|
||
*
|
||
* @default 'Next Page'
|
||
*/
|
||
nextPageLabel?: string;
|
||
/**
|
||
* 404 页面配置
|
||
*/
|
||
notFound?: {
|
||
code?: string | number;
|
||
title?: string;
|
||
quote?: string;
|
||
linkLabel?: string;
|
||
linkText?: string;
|
||
};
|
||
/**
|
||
* 页脚
|
||
*/
|
||
footer?: {
|
||
message?: string;
|
||
copyright?: string;
|
||
};
|
||
/**
|
||
* 首页文本,用于默认生成的导航栏、面包屑导航中
|
||
*/
|
||
homeText?: string;
|
||
/**
|
||
* 博客文本,用于默认生成的导航栏、面包屑导航中
|
||
*/
|
||
blogText?: string;
|
||
/**
|
||
* 标签文本,用于默认生成的导航栏、博客标签页中
|
||
*/
|
||
tagText?: string;
|
||
/**
|
||
* 归档文本,用于默认生成的导航栏、博客归档页中
|
||
*/
|
||
archiveText?: string;
|
||
/**
|
||
* 分类文本,用于默认生成的导航栏、博客分类页中
|
||
*/
|
||
categoryText?: string;
|
||
/**
|
||
* 博客总数文本,用于默认生成的导航栏、博客归档页中
|
||
* @default '{count} articles''
|
||
*/
|
||
archiveTotalText?: string;
|
||
/**
|
||
* 全站加密时的提示
|
||
*/
|
||
encryptGlobalText?: string;
|
||
/**
|
||
* 文章加密时的提示
|
||
*/
|
||
encryptPageText?: string;
|
||
/**
|
||
* 加密确认按钮文本
|
||
*/
|
||
encryptButtonText?: string;
|
||
/**
|
||
* 加密时输入框的 placeholder
|
||
*/
|
||
encryptPlaceholder?: string;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/data.d.ts
|
||
type ThemeLocaleData = ThemeLocale & ThemeLocaleDeprecated & ThemeLocaleText;
|
||
/**
|
||
* 主题注入到 客户端的数据
|
||
*/
|
||
interface ThemeData extends ThemeBaseData, ThemeLocaleData {
|
||
/**
|
||
* 部署站点域名。
|
||
* 用于生成 sitemap、 seo等。
|
||
*
|
||
*/
|
||
hostname?: string;
|
||
/**
|
||
* 博客配置
|
||
*/
|
||
blog?: false | Omit<BlogOptions, "include" | "exclude">;
|
||
/**
|
||
* 文章链接前缀
|
||
*
|
||
* @default '/article/'
|
||
*/
|
||
article?: string;
|
||
/**
|
||
* 是否显示 "编辑此页"
|
||
*
|
||
* @default true
|
||
*/
|
||
editLink?: boolean;
|
||
/**
|
||
* 最后更新时间
|
||
*
|
||
* @default { formatOptions: { dateStyle: 'short', timeStyle: 'short' } }
|
||
*/
|
||
lastUpdated?: false | LastUpdatedOptions;
|
||
/**
|
||
* 是否显示贡献者
|
||
*/
|
||
contributors?: boolean | {
|
||
mode?: "inline" | "block";
|
||
};
|
||
/**
|
||
* 是否显示页面更新日志
|
||
*/
|
||
changelog?: boolean;
|
||
/**
|
||
* 文档仓库配置, 用于生成 Edit this page 链接
|
||
*/
|
||
docsRepo?: string;
|
||
/**
|
||
* 文档仓库分支配置,用于生成 `Edit this page` 链接。
|
||
*/
|
||
docsBranch?: string;
|
||
/**
|
||
* 文档仓库目录配置,用于生成 `Edit this page` 链接。
|
||
*/
|
||
docsDir?: string;
|
||
}
|
||
interface ThemeBaseData extends ThemeLocaleData {
|
||
/**
|
||
* 多语言配置
|
||
*/
|
||
locales?: LocaleConfig<ThemeLocaleData>;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/frontmatter/friends.d.ts
|
||
/**
|
||
* 友链
|
||
*/
|
||
interface FriendsItem {
|
||
/**
|
||
* 友链名称
|
||
*/
|
||
name: string;
|
||
/**
|
||
* 友链链接
|
||
*/
|
||
link: string;
|
||
/**
|
||
* 头像
|
||
*/
|
||
avatar?: string;
|
||
/**
|
||
* 友链描述
|
||
*/
|
||
desc?: string;
|
||
/**
|
||
* 所在地
|
||
*/
|
||
location?: string;
|
||
/**
|
||
* 所属组织
|
||
*/
|
||
organization?: string;
|
||
/**
|
||
* 社交链接
|
||
*/
|
||
socials?: SocialLink[];
|
||
/**
|
||
* 背景色
|
||
*/
|
||
backgroundColor?: ThemeColor;
|
||
/**
|
||
* 文本颜色
|
||
*/
|
||
color?: ThemeColor;
|
||
/**
|
||
* 名称颜色
|
||
*/
|
||
nameColor?: ThemeColor;
|
||
}
|
||
/**
|
||
* 友链分组
|
||
*/
|
||
interface FriendGroup {
|
||
/**
|
||
* 友链分组标题
|
||
*/
|
||
title?: string;
|
||
/**
|
||
* 友链分组描述
|
||
*/
|
||
desc?: string;
|
||
/**
|
||
* 友链列表
|
||
*/
|
||
list?: FriendsItem[];
|
||
}
|
||
/**
|
||
* 友情链接
|
||
*/
|
||
interface ThemeFriendsFrontmatter extends ThemeNormalFrontmatter {
|
||
/**
|
||
* 是否启用友链布局
|
||
* @deprecated
|
||
*/
|
||
friends: boolean;
|
||
/**
|
||
* 标题
|
||
*/
|
||
title?: string;
|
||
/**
|
||
* 描述
|
||
*/
|
||
description?: string;
|
||
/**
|
||
* markdown 内容位置
|
||
*/
|
||
contentPosition?: "before" | "after";
|
||
/**
|
||
* 友链列表
|
||
*/
|
||
list?: FriendsItem[];
|
||
/**
|
||
* 友链分组
|
||
*/
|
||
groups?: FriendGroup[];
|
||
}
|
||
//#endregion
|
||
//#region src/shared/frontmatter/home.d.ts
|
||
interface ThemeHomeFrontmatter extends ThemeNormalFrontmatter, Omit<ThemeHomeBanner, "type"> {
|
||
home?: true;
|
||
friends?: never;
|
||
config?: ThemeHomeConfig[];
|
||
}
|
||
type ThemeHomeConfig = ThemeHomeBanner | ThemeHomeTextImage | ThemeHomeFeatures | ThemeHomeProfile | ThemeHomeHero;
|
||
interface ThemeHero {
|
||
name: string;
|
||
tagline?: string;
|
||
text?: string;
|
||
actions: ThemeHeroAction[];
|
||
}
|
||
interface ThemeDocHero extends ThemeHero {
|
||
image?: ThemeImage;
|
||
}
|
||
interface ThemeHeroAction {
|
||
theme?: "brand" | "alt";
|
||
text: string;
|
||
link?: string;
|
||
target?: string;
|
||
rel?: string;
|
||
icon?: string;
|
||
suffixIcon?: string;
|
||
}
|
||
interface ThemeHomeConfigBase {
|
||
type: "banner" | "hero" | "doc-hero" | "text-image" | "image-text" | "features" | "profile" | "custom";
|
||
full?: boolean;
|
||
backgroundImage?: string | {
|
||
light: string;
|
||
dark: string;
|
||
};
|
||
backgroundAttachment?: "fixed" | "local";
|
||
onlyOnce?: boolean;
|
||
}
|
||
interface ThemeHomeBanner extends Pick<ThemeHomeConfigBase, "type" | "onlyOnce" | "full"> {
|
||
type: "banner";
|
||
banner?: string;
|
||
bannerMask?: number | {
|
||
light?: number;
|
||
dark?: number;
|
||
};
|
||
hero: ThemeHero;
|
||
}
|
||
interface PlumeThemeHomeHeroTintPlate {
|
||
r: {
|
||
value: number;
|
||
offset: number;
|
||
};
|
||
g: {
|
||
value: number;
|
||
offset: number;
|
||
};
|
||
b: {
|
||
value: number;
|
||
offset: number;
|
||
};
|
||
}
|
||
interface ThemeHomeHero extends ThemeHomeConfigBase {
|
||
type: "hero";
|
||
hero: ThemeHero;
|
||
full?: boolean;
|
||
background?: "tint-plate" | (string & {
|
||
zz_IGNORE?: never;
|
||
});
|
||
tintPlate?: string | number | {
|
||
light?: string | number;
|
||
dark?: string | number;
|
||
} | PlumeThemeHomeHeroTintPlate | {
|
||
light?: PlumeThemeHomeHeroTintPlate;
|
||
dark?: PlumeThemeHomeHeroTintPlate;
|
||
};
|
||
filter?: string;
|
||
}
|
||
interface ThemeHomeDocHero extends ThemeHomeConfigBase {
|
||
type: "doc-hero";
|
||
hero: ThemeDocHero;
|
||
}
|
||
interface ThemeHomeTextImage extends ThemeHomeConfigBase {
|
||
type: "text-image" | "image-text";
|
||
image: ThemeImage;
|
||
width?: number | string;
|
||
title?: string;
|
||
description?: string;
|
||
list: (string | {
|
||
title?: string;
|
||
description?: string;
|
||
})[];
|
||
}
|
||
interface ThemeHomeFeatures extends ThemeHomeConfigBase {
|
||
type: "features";
|
||
title?: string;
|
||
description?: string;
|
||
features: ThemeHomeFeature[];
|
||
}
|
||
interface ThemeHomeFeature {
|
||
icon?: FeatureIcon;
|
||
title: string;
|
||
details?: string;
|
||
link?: string;
|
||
linkText?: string;
|
||
rel?: string;
|
||
target?: string;
|
||
}
|
||
type FeatureIcon = string | {
|
||
src: string;
|
||
alt?: string;
|
||
width?: string | number;
|
||
height?: string | number;
|
||
wrap?: boolean;
|
||
} | {
|
||
light: string;
|
||
dark: string;
|
||
alt?: string;
|
||
width?: string | number;
|
||
height?: string | number;
|
||
wrap?: boolean;
|
||
};
|
||
interface ThemeHomeProfile extends ThemeHomeConfigBase {
|
||
type: "profile";
|
||
name?: string;
|
||
description?: string;
|
||
avatar?: ThemeImage;
|
||
circle?: boolean;
|
||
}
|
||
interface ThemeHomeCustom extends ThemeHomeConfigBase {
|
||
type: "custom";
|
||
}
|
||
//#endregion
|
||
//#region src/shared/frontmatter/post.d.ts
|
||
interface ThemePostFrontmatter extends ThemePageFrontmatter {
|
||
/**
|
||
* 创建时间
|
||
*/
|
||
createTime?: string;
|
||
/**
|
||
* 文章标签
|
||
*/
|
||
tags?: string[];
|
||
/**
|
||
* 是否置顶
|
||
*/
|
||
sticky?: boolean | number;
|
||
/**
|
||
* 标记当前文章是否为博客文章
|
||
*
|
||
* `false` 时,从博客列表中排除
|
||
*
|
||
* @default true
|
||
*/
|
||
article?: boolean;
|
||
/**
|
||
* 标记当前文章是否为草稿状态,
|
||
* 草稿状态下的文章不会出现在博客列表中
|
||
*
|
||
* @default false
|
||
*/
|
||
draft?: boolean;
|
||
/**
|
||
* 文章封面图
|
||
*/
|
||
cover?: string;
|
||
/**
|
||
* 文章封面图样式
|
||
*/
|
||
coverStyle?: BlogPostCoverStyle;
|
||
/**
|
||
* 是否展示文章摘要,传入 string 时为自定义摘要,此时 `<!-- more -->` 无效
|
||
*/
|
||
excerpt?: boolean | string;
|
||
/**
|
||
* 版权信息
|
||
*/
|
||
copyright?: boolean | CopyrightLicense | CopyrightFrontmatter;
|
||
/**
|
||
* 文章加密密码
|
||
*/
|
||
password?: string | string[];
|
||
/**
|
||
* 文章加密密码提示文本
|
||
*/
|
||
passwordHint?: string;
|
||
}
|
||
interface CopyrightFrontmatter extends CopyrightOptions {
|
||
/**
|
||
* 作品的作者
|
||
*
|
||
* @default ''
|
||
*/
|
||
author?: string | {
|
||
name: string;
|
||
url?: string;
|
||
};
|
||
/**
|
||
* 作品的创作方式
|
||
* @default 'original'
|
||
*/
|
||
creation?: "original" | "translate" | "reprint";
|
||
/**
|
||
* 原文地址,非 原创 作品时需要声明原文地址
|
||
* @default ''
|
||
*/
|
||
source?: string;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/plugins.d.ts
|
||
interface ThemeBuiltinPlugins {
|
||
/**
|
||
* plugin-search 配置
|
||
*/
|
||
search?: false | Partial<SearchPluginOptions>;
|
||
/**
|
||
* plugin-docsearch 配置
|
||
*/
|
||
docsearch?: false | DocSearchOptions$1;
|
||
/**
|
||
* 代码块复制按钮配置
|
||
*/
|
||
copyCode?: false | CopyCodePluginOptions;
|
||
/**
|
||
* 代码高亮 配置
|
||
*/
|
||
shiki?: false | ShikiPluginOptions;
|
||
/**
|
||
* git 插件 配置
|
||
*/
|
||
git?: boolean;
|
||
/**
|
||
* 页面加载进度插件
|
||
*/
|
||
nprogress?: false;
|
||
/**
|
||
* 图片预览 插件
|
||
*/
|
||
photoSwipe?: false | PhotoSwipePluginOptions;
|
||
/**
|
||
* @deprecated 插件相关功能已迁移至其他官方插件,此插件已弃用
|
||
*/
|
||
markdownEnhance?: never;
|
||
/**
|
||
* 是否启用 `vuepress-plugin-md-power` 插件
|
||
*/
|
||
markdownPower?: false | MarkdownPowerPluginOptions;
|
||
/**
|
||
* 是否启用 `@vuepress/plugin-markdown-image` 插件
|
||
*
|
||
* @default false
|
||
* @see https://ecosystem.vuejs.press/zh/plugins/markdown/markdown-image.html
|
||
*/
|
||
markdownImage?: false | MarkdownImagePluginOptions;
|
||
/**
|
||
* 是否启用 `@vuepress/plugin-markdown-math` 插件
|
||
*
|
||
* @default { type: 'katex' }
|
||
* @see https://ecosystem.vuejs.press/zh/plugins/markdown/markdown-math.html
|
||
*/
|
||
markdownMath?: false | MarkdownMathPluginOptions;
|
||
/**
|
||
* 是否启用 `@vuepress/plugin-markdown-include` 插件
|
||
*
|
||
* @default true
|
||
*
|
||
* @see https://ecosystem.vuejs.press/zh/plugins/markdown/markdown-include.html
|
||
*/
|
||
markdownInclude?: boolean | MarkdownIncludePluginOptions;
|
||
/**
|
||
* 是否启用 `@vuepress/plugin-markdown-chart` 插件
|
||
*
|
||
* @default false
|
||
*
|
||
* @see https://ecosystem.vuejs.press/plugins/markdown/markdown-chart/
|
||
*/
|
||
markdownChart?: false | MarkdownChartPluginOptions;
|
||
/**
|
||
* 评论插件
|
||
*/
|
||
comment?: false | CommentPluginOptions;
|
||
/**
|
||
* 生成站点地图
|
||
*/
|
||
sitemap?: false | Omit<SitemapPluginOptions, "hostname"> & {
|
||
hostname?: string;
|
||
};
|
||
/**
|
||
* SEO
|
||
*/
|
||
seo?: false | Omit<SeoPluginOptions, "hostname"> & {
|
||
hostname?: string;
|
||
};
|
||
/**
|
||
* 缓存
|
||
*/
|
||
cache?: false | CachePluginOptions;
|
||
/**
|
||
* 阅读时间、字数统计
|
||
*/
|
||
readingTime?: false | ReadingTimePluginOptions;
|
||
/**
|
||
* 是否开启 水印
|
||
*/
|
||
watermark?: boolean | (WatermarkPluginOptions & {
|
||
fullPage?: boolean;
|
||
});
|
||
/**
|
||
* 资源链接替换
|
||
*/
|
||
replaceAssets?: false | ReplaceAssetsPluginOptions;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/options.d.ts
|
||
/**
|
||
* 主题配置 (支持热更新)
|
||
*/
|
||
interface ThemeConfig extends ThemeBaseData {
|
||
/**
|
||
* 站点加密配置
|
||
*/
|
||
encrypt?: EncryptOptions;
|
||
/**
|
||
* 自动插入 frontmatter
|
||
*/
|
||
autoFrontmatter?: false | Omit<AutoFrontmatterOptions, "frontmatter">;
|
||
}
|
||
/**
|
||
* 主题全量配置
|
||
*/
|
||
interface ThemeOptions extends ThemeConfig, ThemeFeatureOptions, Omit<ThemeData, "changelog" | "contributors" | "blog"> {
|
||
/**
|
||
* 主题内置插件配置
|
||
*
|
||
* 请勿将此配置与 [vuepress plugins](https://v2.vuepress.vuejs.org/zh/reference/config.html#plugins) 混淆
|
||
*/
|
||
plugins?: ThemeBuiltinPlugins;
|
||
}
|
||
/**
|
||
* 主题功能配置,此配置用于扁平化管理内置插件、功能
|
||
*/
|
||
interface ThemeFeatureOptions {
|
||
/**
|
||
* 是否启用编译缓存
|
||
*
|
||
* @default 'filesystem'
|
||
*/
|
||
cache?: false | "memory" | "filesystem";
|
||
/**
|
||
* 自定义主题配置文件路径
|
||
*/
|
||
configFile?: string;
|
||
/**
|
||
* 博客配置
|
||
*/
|
||
blog?: false | BlogOptions;
|
||
/**
|
||
* 是否显示 "编辑此页"
|
||
*
|
||
* @default true
|
||
*/
|
||
editLink?: boolean;
|
||
/**
|
||
* 最后更新时间
|
||
*
|
||
* @default { formatOptions: { dateStyle: 'short', timeStyle: 'short' } }
|
||
*/
|
||
lastUpdated?: false | LastUpdatedOptions;
|
||
/**
|
||
* 贡献者配置
|
||
*/
|
||
contributors?: boolean | ContributorsOptions & {
|
||
mode?: "inline" | "block";
|
||
};
|
||
/**
|
||
* 页面变更记录配置
|
||
*/
|
||
changelog?: boolean | ChangelogOptions;
|
||
/**
|
||
* 站点搜索配置
|
||
*
|
||
* @default { provider: 'local' }
|
||
*/
|
||
search?: boolean | SearchOptions;
|
||
/**
|
||
* markdown 功能增强配置
|
||
*/
|
||
markdown?: MarkdownOptions;
|
||
/**
|
||
* 代码块高亮配置,主题使用 `shiki` 作为代码块高亮器
|
||
*/
|
||
codeHighlighter?: false | ShikiPluginOptions;
|
||
/**
|
||
* 评论配置
|
||
*/
|
||
comment?: false | CommentPluginOptions;
|
||
/**
|
||
* 水印配置
|
||
*/
|
||
watermark?: boolean | (WatermarkPluginOptions & {
|
||
fullPage?: boolean;
|
||
});
|
||
/**
|
||
* 阅读时间、字数统计
|
||
*/
|
||
readingTime?: false | ReadingTimePluginOptions;
|
||
/**
|
||
* 代码复制
|
||
*/
|
||
copyCode?: false | CopyCodePluginOptions;
|
||
/**
|
||
* 资源链接替换
|
||
*/
|
||
replaceAssets?: false | ReplaceAssetsPluginOptions;
|
||
}
|
||
//#endregion
|
||
//#region src/shared/pageData.d.ts
|
||
interface ThemePageData extends GitPluginPageData {
|
||
/**
|
||
* 博客文章分类列表
|
||
*/
|
||
categoryList?: BlogCategoryItem[];
|
||
/**
|
||
* 相对于根目录的文件路径
|
||
*/
|
||
filePathRelative: string | null;
|
||
/**
|
||
* 阅读时间
|
||
*/
|
||
readingTime?: ReadingTime;
|
||
/**
|
||
* 是否启用公告
|
||
*/
|
||
bulletin?: boolean;
|
||
}
|
||
//#endregion
|
||
export { AutoFrontmatterArray, AutoFrontmatterMarkdownFile, AutoFrontmatterObject, AutoFrontmatterOptions, BlogCategoryItem, BlogOptions, BlogPostCoverLayout, BlogPostCoverStyle, BulletinOptions, CopyrightFrontmatter, CopyrightLicense, CopyrightOptions, DocSearchOptions, EncryptOptions, FeatureIcon, FriendGroup, FriendsItem, FrontmatterFn, type GitChangelog, type GitContributor, KnownCopyrightLicense, LastUpdatedOptions, LiteralUnion, LocalSearchOptions, MarkdownOptions, NavItemChildren, NavItemWithChildren, NavItemWithLink, PlumeThemeHomeHeroTintPlate, PresetLocale, ProfileOptions, SearchOptions, SocialLink, SocialLinkIcon, SocialLinkIconUnion, ThemeBadge, ThemeBaseData, ThemeBlogPostItem, ThemeBlogPostList, ThemeBuiltinPlugins, ThemeColor, ThemeConfig, ThemeData, ThemeDocHero, ThemeFeatureOptions, ThemeFriendsFrontmatter, ThemeHero, ThemeHeroAction, ThemeHomeBanner, ThemeHomeConfig, ThemeHomeConfigBase, ThemeHomeCustom, ThemeHomeDocHero, ThemeHomeFeature, ThemeHomeFeatures, ThemeHomeFrontmatter, ThemeHomeHero, ThemeHomeProfile, ThemeHomeTextImage, ThemeIcon, ThemeImage, ThemeLocale, ThemeLocaleData, ThemeLocaleDeprecated, ThemeLocaleText, ThemeNavItem, ThemeNote, ThemeNoteListOptions, ThemeOptions, ThemeOutline, ThemePageData, ThemePageFrontmatter, ThemePostFrontmatter, ThemeSidebar, ThemeSidebarItem, ThemeSidebarMulti, TransitionOptions, UnionToTuple }; |