import { ThemeFunction, App, Plugin, Page, PluginObject, PluginConfig } from '@vuepress/core';
import { ThemeData as ThemeData$1 } from '@vuepress/plugin-theme-data';
import { FontIconAssets, BackToTopOptions, ComponentOptions } from 'vuepress-plugin-components';
import { Author, BasePageFrontMatter } from 'vuepress-shared';
import { GitPluginPageData, GitPluginOptions, GitData } from '@vuepress/plugin-git';
import { BlogPluginPageData, BlogOptions, BlogTypeOptions, BlogCategoryOptions } from 'vuepress-plugin-blog2';
import { ReadingTime, ReadingTimePluginPageData, ReadingTimeOptions } from 'vuepress-plugin-reading-time2';
import { SeoPluginPageData, SeoOptions } from 'vuepress-plugin-seo2';
import { LocaleData } from '@vuepress/shared';
import { AutoCatalogOptions } from 'vuepress-plugin-auto-catalog';
import { CommentPluginOptions, CommentOptions } from 'vuepress-plugin-comment2';
import { CopyCodeOptions } from 'vuepress-plugin-copy-code2';
import { CopyrightOptions } from 'vuepress-plugin-copyright2';
import { FeedOptions } from 'vuepress-plugin-feed2';
import { MarkdownEnhanceOptions } from 'vuepress-plugin-md-enhance';
import { PhotoSwipeOptions } from 'vuepress-plugin-photo-swipe';
import { PWAOptions } from 'vuepress-plugin-pwa2';
import { SitemapOptions } from 'vuepress-plugin-sitemap2';
import { UserConfig } from '@vuepress/cli';

interface HopeThemeBehaviorOptions {
    /**
     * Whether perform extra checks
     *
     * 是否执行额外检查
     *
     * @default false
     */
    check?: boolean;
    /**
     * Whether compact with historical versions
     *
     * 是否兼容历史版本
     *
     * @default false
     */
    compact?: boolean;
    /**
     * Whether enable customization
     *
     * 是否启用自定义
     *
     * @default false
     */
    custom?: boolean;
    /**
     * Whether enable debug mode
     *
     * 是否启用调试模式
     *
     * @default false
     */
    debug?: boolean;
}

declare const enum ArticleInfoType {
    type = "y",
    title = "t",
    shortTitle = "s",
    icon = "i",
    author = "a",
    date = "d",
    localizedDate = "l",
    category = "c",
    tag = "g",
    isEncrypted = "n",
    isOriginal = "o",
    readingTime = "r",
    excerpt = "e",
    sticky = "u",
    cover = "v",
    index = "I",
    order = "O"
}
declare const enum PageType {
    article = "a",
    home = "h",
    slide = "s",
    page = "p"
}
interface ArticleInfo extends Record<string, unknown> {
    /**
     * Type
     */
    [ArticleInfoType.type]: PageType;
    /**
     * Article title
     */
    [ArticleInfoType.title]: string;
    /**
     * Article short title
     */
    [ArticleInfoType.shortTitle]: string;
    /**
     * Page icon
     */
    [ArticleInfoType.icon]?: string;
    /**
     * Whether this page should be indexed
     *
     * used in other functions, e.g.: sidebar and catalog
     */
    [ArticleInfoType.index]?: boolean;
    /**
     * The order of this page in same directory
     */
    [ArticleInfoType.order]?: number;
    /**
     * Article author
     */
    [ArticleInfoType.author]?: Author | false;
    /**
     * writing date info
     */
    [ArticleInfoType.date]?: number;
    /**
     * writing date info in current language
     */
    [ArticleInfoType.localizedDate]?: string;
    /**
     * article category
     */
    [ArticleInfoType.category]?: string[];
    /**
     * Article tag
     */
    [ArticleInfoType.tag]?: string[];
    /**
     * Reading time info
     */
    [ArticleInfoType.readingTime]?: ReadingTime;
    /**
     * article excerpt
     */
    [ArticleInfoType.excerpt]: string;
    /**
     * Whether is encrypted
     */
    [ArticleInfoType.isEncrypted]?: true;
    /**
     * Whether is original
     */
    [ArticleInfoType.isOriginal]?: true;
    /**
     * Sticky info
     */
    [ArticleInfoType.sticky]?: number | boolean;
    /**
     * Cover image
     */
    [ArticleInfoType.cover]?: string;
}

interface ThemePageFrontmatter extends BasePageFrontMatter {
    /**
     * Whether is home page
     *
     * 是否是主页
     */
    home?: boolean;
    /**
     * Whether enable navbar
     *
     * 是否启用导航栏
     */
    navbar?: boolean;
    /**
     * Sidebar configuration
     *
     * 侧边栏配置
     */
    sidebar?: "heading" | false;
    /**
     * Additional Class for Page container
     *
     * 页面容器的额外类名
     */
    containerClass?: string;
}

interface ThemeHopePageFrontmatter extends ThemePageFrontmatter {
    home: true;
    /**
     * @default false
     */
    heroFullScreen?: boolean;
    heroImage?: string;
    heroImageDark?: string;
    heroImageStyle?: Record<string, string> | string;
    heroAlt?: string;
    heroText?: string;
    /**
     * Text array for typewriter effect
     *
     * 打字机效果的文字数组
     */
    heroTexts?: string[];
    tagline?: string;
    bgImage?: string | false;
    bgImageDark?: string | false;
    bgImageStyle?: Record<string, string> | string;
}

interface ThemeBlogHomeProjectOptions {
    /**
     * Project name
     *
     * 项目名称
     */
    name: string;
    /**
     * Project description
     *
     * 项目描述
     */
    desc?: string;
    /**
     * Project link
     *
     * 项目链接
     */
    link: string;
    /**
     * Project icon
     *
     * @description image link or icon fontClass are supported, as well as `"link"`、`"project"`、`"book"`、`"article"`、`"friend"`
     *
     * 项目图标
     *
     * @description 支持图片链接或者图标字体类，同时也支持 `"link"`、`"project"`、`"book"`、`"article"`、`"friend"`
     */
    icon?: string;
}
interface ThemeBlogHomePageFrontmatter extends ThemeHopePageFrontmatter {
    layout: "BlogHome";
    /**
     * @default true
     */
    hero?: boolean;
    projects: ThemeBlogHomeProjectOptions[];
}

/**
 * Type of page information
 *
 * 页面信息类型
 */
type PageInfo = "Author" | "Category" | "Date" | "Original" | "PageView" | "Tag" | "ReadingTime" | "Word";

/**
 * Base link item, displayed as text
 */
interface TextItemOptions {
    /**
     * Text of item
     *
     * 项目文字
     */
    text: string;
    /**
     * Icon of item
     *
     * 项目图标
     */
    icon?: string;
    /**
     * Aria label of item
     *
     * 项目无障碍标签
     */
    ariaLabel?: string;
}
/**
 * Props for `<AutoLink>`
 */
interface AutoLinkOptions extends TextItemOptions {
    /**
     * link of item
     *
     * 当前页面链接
     */
    link: string;
    /**
     * Rel of `<a>` tag
     *
     * `<a>` 标签的 `rel` 属性
     */
    rel?: string;
    /**
     * Target of `<a>` tag
     *
     * `<a>` 标签的 `target` 属性
     */
    target?: string;
    /**
     * Regexp mode to be active
     *
     * 匹配激活的正则表达式
     */
    activeMatch?: string;
}

interface ThemeNormalPageFrontmatter extends ThemePageFrontmatter {
    /**
     * Whether is homepage
     *
     * 是否是主页
     */
    home?: false;
    /**
     * Whether index current page
     *
     * 是否索引此页面
     *
     * @default true
     */
    index?: boolean;
    /**
     * Page order in sidebar
     *
     * 页面在侧边栏的顺序
     *
     * @default 0
     */
    order?: number;
    /**
     * Dir config
     *
     * @description Only available at README.md
     *
     * 目录配置
     *
     * @description 仅在 README.md 中可用
     */
    dir?: {
        /**
         * Dir title
         *
         * @default title of README.md
         *
         * 目录标题
         *
         * @default README.md 标题
         */
        text?: string;
        /**
         * Dir icon
         *
         * @default icon of README.md
         *
         * 目录图标
         *
         * @default README.md 图标
         */
        icon?: string;
        /**
         * Whether Dir is collapsible
         *
         * 目录是否可折叠
         *
         * @default true
         */
        collapsible?: boolean;
        /**
         * Whether Dir is clickable
         *
         * @description Will set group link to link of README.md
         *
         * 目录是否可点击
         *
         * @description 将会将目录分组的链接设置为 README.md 对应的链接
         *
         * @default false
         */
        link?: boolean;
        /**
         * Whether index current dir
         *
         * 是否索引此目录
         *
         * @default true
         */
        index?: boolean;
        /**
         * Dir order in sidebar
         *
         * 目录在侧边栏中的顺序
         *
         * @default 0
         */
        order?: number;
    };
    /**
     * A short title used in navbar, sidebar and breadcrumb
     *
     * 用于导航栏，侧边栏和路径导航的短标题
     */
    shortTitle?: string;
    /**
     * Page Heading depth
     *
     * 页面标题深度
     */
    headerDepth?: number;
    /**
     * Whether display lastUpdated time
     *
     * 是否显示最后更新事件
     */
    lastUpdated?: boolean;
    /**
     * Whether display contributors
     *
     * 是否显示贡献者
     */
    contributors?: boolean;
    /**
     * Whether show Edit link
     *
     * 是否显示编辑此页链接
     */
    editLink?: boolean;
    /**
     * Previous page link
     *
     * 上一页链接
     */
    prev?: string | AutoLinkOptions;
    /**
     * Next page link
     *
     * 下一页链接
     */
    next?: string | AutoLinkOptions;
    /**
     * Whether show toc list in desktop mode
     *
     * 是否在桌面模式下展示标题列表
     */
    toc?: boolean;
    /**
     * PageInfo items
     *
     * 页面信息项
     *
     * @default ["Author", "Visitor", "Time", "Category", "Tag", "ReadTime"]
     */
    pageInfo?: PageInfo[] | false;
    /**
     * Whether enable breadcrumb
     *
     * 是否启用路径导航
     */
    breadcrumb?: boolean;
    /**
     * Whether enable breadcrumb icon
     *
     * 是否启用路径导航图标
     */
    breadcrumbIcon?: boolean;
    /**
     *
     * Whether enable pageviews
     *
     * @description Only available when using artalk or waline comment service
     *
     * 是否启用访问量
     *
     * @description 仅在使用 Artalk 或 Waline 评论服务时有效
     *
     * @default true
     */
    pageview?: boolean;
    /**
     * Whether this page is an article
     */
    article?: boolean;
    /**
     * Whether the article be sticky in list
     *
     * If a number fill in, greater number will appear in front
     *
     * 是否置顶，如果填入数字，更大值会出现在前面
     */
    sticky?: boolean | number;
    /**
     * Whether the article be stared
     *
     * If a number fill in, greater number will appear in front
     *
     * 是否收藏，如果填入数字，更大值会出现在前面
     */
    star?: boolean | number;
    /**
     * Page excerpt
     *
     * 页面的摘要
     */
    excerpt?: string;
}

interface ThemeProjectHomeActionOptions {
    /**
     * Action name
     *
     * 操作名称
     */
    text: string;
    /**
     * Action link
     *
     * 操作链接
     */
    link: string;
    /**
     * Type of action
     *
     * 操作类型
     *
     * @default "default"
     */
    type?: "primary" | "default";
}
interface ThemeProjectHomeHighlightItem {
    /**
     * Item name, supports HTML string
     *
     * 项目名称，支持 HTML 字符串
     */
    title: string;
    /**
     * Item description, supports HTML string
     *
     * 项目描述，支持 HTML 字符串
     */
    details?: string;
    /**
     * Item icon
     *
     * @description image link or icon fontClass are supported
     *
     * 项目图标
     *
     * @description 支持图片链接或者图标字体类
     */
    icon?: string;
    /**
     * Item link
     *
     * 项目链接
     */
    link?: string;
}
type ThemeProjectHomeFeatureItem = ThemeProjectHomeHighlightItem;
interface ThemeProjectHomeHighlightOptions {
    /**
     * Highlight section header, supports HTML string
     *
     * 亮点标题，支持 HTML 字符串
     */
    header: string;
    /**
     * Highlight section description, supports HTML string
     *
     * 亮点描述，支持 HTML 字符串
     */
    description?: string;
    /**
     * Text color
     *
     * 文字颜色
     */
    color?: string;
    /**
     * Highlight section image
     *
     * 亮点图像
     */
    image?: string;
    /**
     * Highlight section image used in darkmode
     *
     * 夜间模式使用的亮点图片
     *
     * @default image
     */
    imageDark?: string;
    /**
     * Highlight Background image
     *
     * 亮点背景图
     */
    bgImage?: string;
    /**
     * Highlight Background image used in darkmode
     *
     * 夜间模式使用的亮点背景图
     *
     * @default bgImage
     */
    bgImageDark?: string;
    /**
     * Highlight Background image style
     *
     * 亮点背景图样式
     */
    bgImageStyle?: Record<string, string> | string;
    /**
     * Highlight section list type
     *
     * 亮点列表类型
     *
     * @default un-order
     */
    type?: "order" | "un-order" | "no-order";
    /**
     * Highlights
     *
     * 亮点
     */
    highlights?: ThemeProjectHomeHighlightItem[];
}
interface ThemeProjectHomeFeatureOptions {
    /**
     * Feature header
     *
     * 功能标题
     */
    header?: string;
    /**
     * Feature section description, supports HTML string
     *
     * 功能描述，支持 HTML 字符串
     */
    description?: string;
    /**
     * Text color
     *
     * 文字颜色
     */
    color?: string;
    /**
     * Feature section image
     *
     * 功能图像
     */
    image?: string;
    /**
     * Feature section image used in darkmode
     *
     * 夜间模式使用的功能图片
     *
     * @default image
     */
    imageDark?: string;
    /**
     * Feature Background image
     *
     * 功能背景图
     */
    bgImage?: string;
    /**
     * Feature Background image used in darkmode
     *
     * 夜间模式使用的功能背景图
     *
     * @default bgImage
     */
    bgImageDark?: string;
    /**
     * Feature Background image style
     *
     * 功能背景图样式
     */
    bgImageStyle?: Record<string, string> | string;
    /**
     * Features
     *
     * 功能
     */
    features: ThemeProjectHomeFeatureItem[];
}
interface ThemeProjectHomePageFrontmatter extends ThemeHopePageFrontmatter {
    actions?: ThemeProjectHomeActionOptions[];
    features?: ThemeProjectHomeFeatureItem[];
    highlights?: (ThemeProjectHomeFeatureOptions | ThemeProjectHomeHighlightOptions)[];
}

/**
 * Base nav group, has nav items children
 */
interface NavGroup<T> extends TextItemOptions {
    /**
     * Link prefix of current group
     *
     * 当前分组的页面前缀
     */
    prefix?: string;
    /**
     * Link of current group
     *
     * 当前分组的链接
     */
    link?: string;
    /**
     * Children of current group
     *
     * 当前分组的子项
     */
    children: T[];
}
/**
 * Navbar types
 */
type NavbarItem = AutoLinkOptions;
type NavbarGroup = NavGroup<NavbarGroup | NavbarItem | string>;
type NavbarOptions = (NavbarItem | NavbarGroup | string)[];

type DarkmodeOptions = "switch" | "auto" | "toggle" | "enable" | "disable";
interface OutlookLocaleData {
    /**
     * Theme Color
     */
    themeColor: string;
    /**
     * Theme mode
     */
    darkmode: string;
    /**
     * Theme mode
     */
    fullscreen: string;
}
interface AppearanceLocaleData {
    outlookLocales: {
        /**
         * Theme Color
         *
         * 主题色
         */
        themeColor: string;
        /**
         * Theme mode
         *
         * 夜间模式
         */
        darkmode: string;
        /**
         * Fullscreen text
         *
         * 全屏文字
         */
        fullscreen: string;
    };
}
/**
 * @kind root
 */
interface AppearanceOptions {
    /**
     * Whether enable pure mode
     *
     * 是否开启纯净模式
     *
     * @default false
     */
    pure?: boolean;
    /**
     * Dark mode support options:
     *
     * - `"switch"`: switch between dark, light and auto (default)
     * - `"toggle"`: toggle between lightmode and darkmode
     * - `"auto"`: Automatically decide whether to apply dark mode based on user device’s color-scheme or current time
     * - `"enable"`: only dark mode
     * - `"disable"`: disable dark mode
     *
     * 深色模式支持选项:
     *
     * - `"switch"`: 在深色模式，浅色模式和自动之间切换 (默认)
     * - `"toggle"`: 在深色模式和浅色模式之间切换
     * - `"auto"`: 自动根据用户设备主题或当前时间决定是否应用深色模式
     * - `"enable"`: 强制深色模式
     * - `"disable"`: 禁用深色模式
     *
     * @default "auto-switch"
     */
    darkmode?: DarkmodeOptions;
    /**
     * Whether enable theme color picker
     *
     * 是否启用主题色选择器
     *
     * @default false
     */
    themeColor?: boolean;
    /**
     * Whether display print button in desktop mode
     *
     * 是否在桌面模式下显示打印按钮
     *
     * @default true
     */
    print?: boolean;
    /**
     * Full screen button
     *
     * 全屏按钮
     *
     * @default false
     */
    fullscreen?: boolean;
    /**
     * Link of font icon asset
     *
     * 字体图标资源链接
     *
     * @description `"iconfont"` and `"fontawesome"` keywords are supported
     */
    iconAssets?: FontIconAssets;
    /**
     * Font Icon class prefix
     *
     * 字体图标 class 前缀
     *
     * @default ""
     */
    iconPrefix?: string;
}
type AppearanceConfig = AppearanceOptions;

interface BlogLocaleData extends Record<string, string> {
    /** 文章文字 */
    article: string;
    /** 文章列表文字 */
    articleList: string;
    /** 分类文字 */
    category: string;
    /** 标签文字 */
    tag: string;
    /** 时间轴文字 */
    timeline: string;
    /** 时间轴标题文字 */
    timelineTitle: string;
    /** 全部文字 */
    all: string;
    /** 个人介绍 */
    intro: string;
    /** 收藏文字 */
    star: string;
}
interface PaginationLocaleData {
    /**
     * Previous page button label text
     *
     * 上一页文字
     */
    prev: string;
    /**
     * Next page button label text
     *
     * 下一页文字
     */
    next: string;
    /**
     * Navigation hint label text
     *
     * 跳转提示文字
     */
    navigate: string;
    /**
     * Navigation button label text
     *
     * 跳转按钮文字
     */
    action: string;
    /**
     * Error text when invalid page number
     *
     * @description `$page` will be replaced by total page number automatically
     *
     * 页码错误文字
     *
     * @description 其中 `$page` 会自动替换为当前的总页数
     */
    errorText: string;
}
/**
 * 博客选项
 *
 * Blog configuration
 *
 * @kind locale
 */
interface BlogLocaleOptions {
    /**
     * Name of the Blogger
     *
     * 博主名称
     *
     * @default themeConfig.author
     */
    name?: string;
    /**
     * Blogger avatar, must be an absolute path
     *
     * 博主头像，应为绝对路径
     *
     * @default themeConfig.navbar.logo
     */
    avatar?: string;
    /**
     * Motto, slogan or a short description
     *
     * 口号、座右铭或介绍语
     */
    description?: string;
    /**
     * Blogger introduction page link
     *
     * 博主的个人介绍页地址
     */
    intro?: string;
    /**
     * 媒体链接配置
     *
     * Media links configuration
     *
     * @example
     *
     * ```js
     * {
     *   QQ: "http://wpa.qq.com/msgrd?v=3&uin=1178522294&site=qq&menu=yes",
     *   Qzone: "https://1178522294.qzone.qq.com/",
     *   Gmail: "mailto:mister-hope@outlook.com",
     *   Zhihu: "https://www.zhihu.com/people/mister-hope",
     *   Steam: "https://steamcommunity.com/id/Mr-Hope/",
     *   Weibo: "https://weibo.com/misterhope",
     * }
     * ```
     */
    medias?: Record<string, [string, string] | string>;
    /**
     * Whether clipping the avatar with round shape
     *
     * 是否剪裁头像为圆形形状
     *
     * @default false
     */
    roundAvatar?: boolean;
    /**
     * Whether to display blogger info in sidebar
     *
     * 是否在侧边栏展示博主信息
     *
     * @default "mobile"
     */
    sidebarDisplay?: "mobile" | "none" | "always";
    /**
     * Custom text for timeline
     *
     * 时间轴自定义文字
     *
     * @default "Yesterday once more"
     */
    timeline?: string;
    /**
     * Article number per page
     *
     * 每页的文章数量
     *
     * @default 10
     */
    articlePerPage?: number;
    /**
     * Article info displayed in article list
     *
     * 文章列表中展示的文章信息
     *
     * @default ["Author", "Original", "Date", "PageView", "ReadingTime", "Category", "Tag"]
     */
    articleInfo?: PageInfo[];
}
interface BlogLocaleConfig extends Omit<BlogLocaleOptions, "media"> {
    medias?: Record<string, string>;
}

interface EncryptLocaleData {
    /**
     * Aria label for encrypt icon
     *
     * 加密图标的无障碍标签
     */
    iconLabel: string;
    /**
     * Password placeholder
     *
     * 密码输入框的默认占位符
     */
    placeholder: string;
    /**
     * Whether remember password
     *
     * 是否记忆密码
     */
    remember: string;
    /**
     * Password error hint
     *
     * 密码错误提示
     */
    errorHint: string;
}
/**
 * Encrypt Options
 *
 * 加密选项
 *
 * @kind root
 */
interface EncryptOptions {
    /**
     * Whether encrypt globally
     *
     * 是否全局加密
     *
     * @default false
     */
    global?: boolean;
    /**
     * Admin passwords, which has the highest authority
     *
     * 最高权限密码
     */
    admin?: string | string[];
    /**
     * Encrypt Configuration
     *
     * @example
     *
     * ```json
     * {
     *   // This will encrypt the entire guide directory and both passwords will be available
     *   "/guide/": ["1234", "5678"],
     *   // this will only encrypt config/page.html
     *   "/config/page.html": "1234"
     * }
     * ```
     *
     * 加密配置
     *
     * @example
     *
     * ```json
     * {
     *   // 这会加密整个 guide 目录，并且两个密码都是可用的
     *   "/guide/": ["1234", "5678"],
     *   // 这只会加密 config/page.html
     *   "/config/page.html": "1234"
     * }
     * ```
     */
    config?: Record<string, string | string[]>;
}
/**
 * Encrypt Config
 *
 * 加密配置
 *
 * @kind root
 */
interface EncryptConfig {
    /**
     * Whether encrypt globally
     *
     * 是否全局加密
     *
     * @default false
     */
    global?: boolean;
    /**
     * Admin passwords, which has the highest authority
     *
     * 最高权限密码
     */
    admin?: string[];
    /**
     * Encrypt Configuration
     *
     * 加密配置
     */
    config?: Record<string, string[]>;
}

interface FeatureLocaleData {
    /**
     * Blog related i18n config
     *
     * 博客相关多语言配置
     */
    blogLocales: BlogLocaleData;
    /**
     * Pagination related i18n config
     *
     * 分页相关多语言配置
     */
    paginationLocales: PaginationLocaleData;
    /**
     * Encrypt related i18n config
     *
     * 加密相关多语言配置
     */
    encryptLocales: EncryptLocaleData;
}
interface FeatureLocaleOptions {
    /**
     * Blog feature options
     *
     * 博客功能配置
     */
    blog?: BlogLocaleOptions;
}
interface FeatureLocaleConfig {
    blog?: BlogLocaleConfig;
}
/**
 * @kind root
 */
interface FeatureOptions {
    /**
     * Encrypt config
     *
     * 加密配置
     */
    encrypt?: EncryptOptions;
    /**
     * Whether enable hotReload for features that requires app to restart
     *
     * @description These features includes blog support and structure sidebar feature
     *
     * 是否为需要重启整个 app 的功能启用热更新
     *
     * @description 这些功能包括博客支持和结构侧边栏功能
     *
     * @default app.env.isDebug
     */
    hotReload?: boolean;
}
interface FeatureConfig extends FeatureLocaleConfig {
    /**
     * Encrypt config
     *
     * 加密配置
     */
    encrypt: EncryptConfig;
}

/**
 * 页脚选项
 *
 * Footer options
 */
interface FooterLocaleOptions {
    /**
     * The default content for the footer, supports HTMLString.
     *
     * 页脚的默认内容，支持 HTMLString
     */
    footer?: string;
    /**
     * The default copyright info, set it to `false` to disable it by default.
     *
     * 默认的版权信息，设置为 `false` 来默认禁用它
     */
    copyright?: string | false;
    /**
     * Whether to display footer by default
     *
     * 是否默认显示页脚
     *
     * @default false
     */
    displayFooter?: boolean;
}

interface DocsRepoLocaleOptions {
    /**
     * Pattern of edit link, we provide built-in support for GitHub, Gitlab, Gitee, Bitbucket
     *
     * 编辑链接的匹配，我们已经为 GitHub、Gitlab、Gitee 和 Bitbucket 提供了内置支持
     *
     * @example ":repo/edit/:branch/:path"
     */
    editLinkPattern?: string;
    /**
     * The repo of your docs
     *
     * 文档仓库
     *
     * @default themeConfig.repo
     */
    docsRepo?: string;
    /**
     * The branch of your docs
     *
     * 文档所在分支
     *
     * @default "main"
     */
    docsBranch?: string;
    /**
     * Docs dir location in repo
     *
     * 文档在仓库中的目录
     *
     * @default ""
     */
    docsDir?: string;
}

interface MetaLocateData {
    /**
     * Author label text
     *
     * 作者文字
     */
    author: string;
    /**
     * Writing date label text
     *
     * 写作日期文字
     */
    date: string;
    /**
     * Label text marked as original
     *
     * 标记原创的文字
     */
    origin: string;
    /**
     * Page views label text
     *
     * 访问量文字
     */
    views: string;
    /**
     * Tag label text
     *
     * 标签文字
     */
    tag: string;
    /**
     * Category label text
     *
     * 分类文字
     */
    category: string;
    /**
     * Expect reading time label text
     *
     * 期望阅读时间文字
     */
    readingTime: string;
    /**
     * Words label Text
     *
     * 文章字数
     */
    words: string;
    /**
     * Table of contents
     *
     * 此页内容
     */
    toc: string;
    /**
     * Previous link
     *
     * 上一页
     */
    prev: string;
    /**
     * Next link
     *
     * 下一页
     */
    next: string;
    /**
     * Last updated Text
     *
     * 最后更新时间
     */
    lastUpdated: string;
    /**
     * Contributors text
     *
     * 贡献者
     */
    contributors: string;
    /**
     * Edit link text
     *
     * 编辑此页
     */
    editLink: string;
    /**
     * Print button
     *
     * 打印按钮
     */
    print: string;
}
interface MetaLocaleOptions {
    /**
     * Whether to show "Last Updated" or not
     *
     * 是否显示页面最后更新时间
     *
     * @default true
     */
    lastUpdated?: boolean;
    /**
     * Whether to show "Contributors" or not
     *
     * 是否显示页面贡献者
     *
     * @default true
     */
    contributors?: boolean;
    /**
     * Whether to show "Edit this page" or not
     *
     * 是否展示编辑此页链接
     *
     * @default true
     */
    editLink?: boolean;
}

interface NavbarLocaleData {
    /**
     * Aria label of of the language selection dropdown
     *
     * 语言下拉列表的无障碍标签
     */
    selectLangAriaLabel: string;
    /**
     * Language name of current locale
     *
     * 当前语言的名称
     */
    langName: string;
}
/**
 * Navbar component
 *
 * 导航栏组件
 */
type NavbarComponent = "Brand" | "Links" | "Language" | "Search" | "Outlook" | "Repo";
/**
 * Navbar layout options
 *
 * 导航栏布局选项
 */
interface NavbarLayoutOptions {
    start?: (NavbarComponent | string)[];
    center?: (NavbarComponent | string)[];
    end?: (NavbarComponent | string)[];
}
interface NavbarLocaleOptions {
    /**
     * Navbar config
     *
     * @description Set to `false` to disable navbar in current locale
     *
     * @see https://theme-hope.vuejs.press/guide/layout/navbar.html
     *
     * 导航栏配置
     *
     * @description 设置 `false` 以在当前语言中禁用导航栏
     *
     * @see https://theme-hope.vuejs.press/v2/zh/guide/layout/navbar.html
     */
    navbar?: NavbarOptions | false;
    /**
     * Navbar logo
     *
     * @description should be absolute path relative to `.vuepress/public` folder
     *
     * 导航栏图标
     *
     * @description 应为基于 `.vuepress/public` 文件夹的绝对路径
     */
    logo?: string;
    /**
     * Navbar logo under darkmode
     *
     * @description should be absolute path relative to `.vuepress/public` folder
     *
     * 夜间模式下导航栏图标
     *
     * @description 应为基于 `.vuepress/public` 文件夹的绝对路径
     */
    logoDark?: string;
    /**
     * Navbar title
     *
     * 导航栏标题
     *
     * @default $siteLocale.title
     */
    navTitle?: string | false;
    /**
     * Repository link
     *
     * 仓库链接
     */
    repo?: string;
    /**
     * Whether display repo link in navbar.
     *
     * 是否在导航栏显示仓库链接。
     *
     * @default true
     */
    repoDisplay?: boolean;
    /**
     * Repository aria label of navbar
     *
     * 导航栏仓库按钮的无障碍标签
     */
    repoLabel?: string;
    /**
     * Whether show icon in navbar
     *
     * 是否在导航栏中显示图标
     *
     * @default true
     */
    navbarIcon?: boolean;
    /**
     * Whether to hide navbar when scrolling down
     *
     * 是否在向下滚动时自动隐藏导航栏
     *
     * @default "mobile"
     */
    navbarAutoHide?: "always" | "mobile" | "none";
    /**
     * Navbar layout config
     *
     * 导航栏布局设置
     *
     * @default { start: ["Brand"], center: ["Links"], end: ["Language", "Repo", "Outlook", "Search"] }
     */
    navbarLayout?: NavbarLayoutOptions;
    /**
     * Whether hide site title on mobile
     *
     * 是否在移动视图下隐藏站点名称
     *
     * @default true
     */
    hideSiteNameOnMobile?: boolean;
}

interface RouteLocaleData {
    /**
     * Skip to main content
     */
    skipToContent: string;
    /**
     * 404 page title
     *
     * 404 页面的标题
     */
    notFoundTitle: string;
    /**
     * 404 page msgs
     *
     * 404 页面的提示信息
     */
    notFoundMsg: string[];
    /**
     * Back to homepage
     *
     * 返回主页
     */
    home: string;
    /**
     * Back to last page
     *
     * 返回上一页
     */
    back: string;
    /**
     * screen reader only message in `<ExternalLinkIcon>`
     *
     * 在 `<ExternalLinkIcon>` 中的屏幕阅读器消息
     */
    openInNewWindow: string;
}

interface ThemePageData extends BlogPluginPageData, Partial<GitPluginPageData>, Partial<ReadingTimePluginPageData>, Partial<SeoPluginPageData> {
    filePathRelative: string | null;
}

type SidebarPageItem = AutoLinkOptions;
interface SidebarStructureItem extends TextItemOptions {
    /**
     * Link prefix of current group
     *
     * 当前分组的页面前缀
     */
    prefix?: string;
    /**
     * Link of current group
     *
     * 当前分组的链接
     */
    link?: string;
    /**
     * Whether current group is collapsible
     *
     * 当前分组的链接是否可折叠
     *
     * @default false
     */
    collapsible?: boolean;
    children: "structure";
}
interface SidebarGroupItem extends TextItemOptions {
    /**
     * Link prefix of current group
     *
     * 当前分组的页面前缀
     */
    prefix?: string;
    /**
     * Link of current group
     *
     * 当前分组的链接
     */
    link?: string;
    /**
     * Whether current group is collapsible
     *
     * 当前分组的链接是否可折叠
     *
     * @default false
     */
    collapsible?: boolean;
    /**
     * Children of current group
     *
     * 当前分组的子项
     */
    children: (SidebarPageItem | SidebarGroupItem | SidebarStructureItem | string)[];
}
type SidebarItem = SidebarPageItem | SidebarGroupItem | SidebarStructureItem | string;
type SidebarArrayOptions = SidebarItem[];
type SidebarObjectOptions = Record<string, SidebarArrayOptions | "structure" | "heading" | false>;
type SidebarOptions = SidebarArrayOptions | SidebarObjectOptions | "structure" | "heading" | false;

interface SidebarFileInfo {
    type: "file";
    filename: string;
    title: string;
    order: number | null;
    path?: string | null;
    frontmatter: ThemeNormalPageFrontmatter;
    pageData: ThemePageData;
}
interface SidebarDirInfo {
    type: "dir";
    dirname: string;
    children: SidebarInfo[];
    title: string;
    order: number | null;
    groupInfo: {
        icon?: string;
        collapsible?: boolean;
        link?: string;
    };
    frontmatter: ThemeNormalPageFrontmatter | null;
    pageData: ThemePageData | null;
}
type SidebarInfo = SidebarFileInfo | SidebarDirInfo;
type SidebarSorterKeyword = "readme" | "order" | "date" | "date-desc" | "filename" | "title";
type SidebarSorterFunction = (infoA: SidebarInfo, infoB: SidebarInfo) => number;
type SidebarSorter = SidebarSorterFunction | SidebarSorterFunction[] | SidebarSorterKeyword | SidebarSorterKeyword[];
interface SidebarLocaleOptions {
    /**
     * sidebar config
     *
     * @description Set to `false` to disable sidebar in current locale
     * @see https://theme-hope.vuejs.press/guide/layout/sidebar.html
     *
     * 侧边栏配置
     *
     * @description 设置为 `false` 以在当前语言中禁用侧边栏
     * @see https://theme-hope.vuejs.press/zh/guide/layout/sidebar.html
     */
    sidebar?: SidebarOptions;
    /**
     * Whether show icons in the sidebar
     *
     * 是否在侧边栏显示图标
     *
     * @default true
     */
    sidebarIcon?: boolean;
    /**
     * Heading depth for sidebar and toc
     *
     * - Set to `0` to disable all levels
     * - Set to `1` to include `<h2>`
     * - Set to `2` to include `<h2>` and `<h3>`
     * - ...
     *
     * The max value depends on which headers you have extracted
     * via `markdown.headers.level`.
     *
     * The default value of `markdown.headers.level` is `[2, 3]`,
     * so the default max value of `headerDepth` is `2`
     *
     * 侧边栏和页面目录的标题深度
     *
     * - 设置 `0` 来禁用所有级别的标题
     * - 设置 `1` 来包含 `<h2>`
     * - 设置 `2` 来包含 `<h2>` 和 `<h3>`
     * - ...
     *
     * `markdown.headers.level` 的默认值是 `[2, 3]`,
     * 所以 `headerDepth` 的默认最大值是 `2`
     *
     * @default 2
     */
    headerDepth?: number;
}

interface LayoutLocaleData {
    /**
     * Navbar related i18n config
     */
    navbarLocales: NavbarLocaleData;
    /**
     * Meta related i18n config
     */
    metaLocales: MetaLocateData;
    /**
     * Router related i18n config
     */
    routeLocales: RouteLocaleData;
}
interface LayoutLocaleOptions extends NavbarLocaleOptions, SidebarLocaleOptions, DocsRepoLocaleOptions, MetaLocaleOptions, FooterLocaleOptions {
    /**
     * Home path of current locale
     *
     * @description Used as the link of back-to-home and navbar logo
     *
     * 当前语言的主页路径
     *
     * @description 用于导航栏图标和返回主页按钮的链接
     */
    home?: string;
    /**
     * Whether enable breadcrumb globally
     *
     * 是否全局启用路径导航
     *
     * @default true
     */
    breadcrumb?: boolean;
    /**
     * Whether display icon in breadcrumb
     *
     * 是否在路径导航显示图标
     *
     * @default true
     */
    breadcrumbIcon?: boolean;
    /**
     * Whether display icon besides page title
     *
     * 是否在页面标题旁显示图标
     *
     * @default true
     */
    titleIcon?: boolean;
    /**
     * Article Info display configuration
     *
     * @see https://theme-hope.vuejs.press/guide/feature/page-info.html
     *
     * 文章信息配置
     *
     * @see https://theme-hope.vuejs.press/zh/guide/feature/page-info.html
     *
     * @default ["Author", "Original", "Date", "PageView", "ReadingTime", "Category", "Tag"]
     */
    pageInfo?: PageInfo[] | false;
    /**
     * Whether show toc list in desktop mode
     *
     * 是否在桌面模式下展示标题列表
     */
    toc?: boolean;
    /**
     * Whether rtl layout should be used
     *
     * 是否使用 rtl 布局
     */
    rtl?: boolean;
    /**
     * Whether display nextLink
     *
     * 是否显示 下一篇 链接
     *
     * @default true
     */
    nextLink?: boolean;
    /**
     * Whether display prevLink
     *
     * 是否显示 上一篇 链接
     *
     * @default true
     */
    prevLink?: boolean;
}
type LayoutLocaleConfig = LayoutLocaleOptions;
/**
 * @kind root
 */
interface LayoutOptions {
    /**
     * Wether display back to top button
     *
     * 是否显示返回顶部按钮
     *
     * @default true
     */
    backToTop?: BackToTopOptions | boolean;
    /**
     * Sorter of structure sidebar
     *
     * 结构化侧边栏排序器
     *
     * @default ["readme", "index", "title", "filename"]
     */
    sidebarSorter?: SidebarSorter;
}

interface InfoOptions {
    /**
     * Site favicon
     *
     * 站点图标
     */
    favicon?: string;
    /**
     * Global default author
     *
     * 全局默认作者
     */
    author?: Author;
    /**
     * domain which to be deployed to
     *
     * 网站部署域名
     */
    hostname?: string;
    /**
     * Extra i18n sites
     *
     * @description key is the name of language, and value is the path of site, `:route` will be replaced by current route
     *
     * 额外的多语言站点
     *
     * @description 键是语言的名称，值是站点的路径，`:route` 会被替换为当前路由
     */
    extraLocales?: Record<string, string>;
}

type LocaleDataToOption<T> = {
    [P in keyof T]?: Partial<T[P]>;
};

interface ThemeLocaleData extends AppearanceLocaleData, FeatureLocaleData, LayoutLocaleData {
    /**
     * Current lang code
     */
    lang: string;
}
interface ThemeLocaleOptions extends LocaleData, LocaleDataToOption<AppearanceLocaleData>, LocaleDataToOption<FeatureLocaleData>, FeatureLocaleOptions, LocaleDataToOption<LayoutLocaleData>, LayoutLocaleOptions {
    /**
     * Global default author
     *
     * 全局默认作者
     */
    author?: Author;
}
interface ThemeLocaleConfig extends LocaleData, ThemeLocaleData, FeatureLocaleConfig, LayoutLocaleConfig {
    /**
     * Global default author
     *
     * 全局默认作者
     */
    author?: Author;
}

interface BlogPluginOptions extends Partial<Pick<BlogOptions, "excerptFilter" | "excerptLength" | "excerptSeparator" | "filter" | "hotReload">> {
    /**
     * Path of article list
     *
     * 文章列表的路径
     *
     * @default "/article/"
     */
    article?: string;
    /**
     * Path of category map
     *
     * 分类地图页的地址
     *
     * @default "/category/"
     */
    category?: string;
    /**
     * Path to navigate when clicking category label
     *
     * `:name` will be automatically replaced by current category name
     *
     * 点击分类标签时跳转的路径。
     *
     * 其中 `:name` 会被自动替换为当前分类名称
     *
     * @default "/category/:name/"
     */
    categoryItem?: string;
    /**
     * Path of tag map
     *
     * 标签地图页的地址
     *
     * @default "/tag/"
     */
    tag?: string;
    /**
     * Path to navigate when clicking tag label
     *
     * `:name` will be automatically replaced by current tag name
     *
     * 点击标签跳转的路径。
     *
     * 其中 `:name` 会被自动替换为当前分类名称
     *
     * @default "/tag/:name/"
     */
    tagItem?: string;
    /**
     * Path of star article list
     *
     * 星标文章列表的路径
     *
     * @default "/star/""
     */
    star?: string;
    /**
     * Path of timeline
     *
     * 时间线路径
     *
     * @default "/timeline/"
     */
    timeline?: string;
    /**
     * Excerpt generation
     *
     * 摘要生成
     *
     * @default true
     */
    excerpt?: boolean;
    /**
     * Additional Article Type
     *
     * @description This is an advanced option, please refer to the [blog2 plugin documentation](https://plugin-blog.vuejs.press/guide.html#customizing-categories-and-types) for details
     *
     * 额外的文章类型
     *
     * @description 这是一个高级选项，请参考 [blog2 插件文档](https://plugin-blog.vuejs.press/zh/guide.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%B1%BB%E5%88%AB%E5%92%8C%E7%B1%BB%E5%9E%8B) 了解详情
     *
     * @default []
     */
    type?: BlogTypeOptions[];
}

type PrismjsLightTheme = "ateliersulphurpool-light" | "coldark-cold" | "coy" | "duotone-light" | "ghcolors" | "gruvbox-light" | "material-light" | "one-light" | "vs";
type PrismjsDarkTheme = "atom-dark" | "cb" | "coldark-dark" | "dark" | "dracula" | "duotone-dark" | "duotone-earth" | "duotone-forest" | "duotone-sea" | "duotone-space" | "gruvbox-dark" | "holi" | "hopscotch" | "lucario" | "material-dark" | "material-oceanic" | "night-owl" | "nord" | "one-dark" | "pojoaque" | "shades-of-purple" | "solarized-dark-atom" | "tomorrow" | "vsc-dark-plus" | "xonokai" | "z-touch";
type PrismjsTheme = PrismjsDarkTheme | PrismjsLightTheme;
interface PrismjsOptions {
    /**
     * light theme
     *
     * @default 'one-light'
     */
    light?: PrismjsTheme;
    /**
     * dark theme
     * @default 'one-dark'
     */
    dark?: PrismjsTheme;
}

interface PluginsOptions {
    /**
     * Enable @vuepress/active-header-links or not
     *
     * 是否启用 @vuepress/active-header-links 插件
     *
     * @default true
     */
    activeHeaderLinks?: boolean;
    /**
     * Auto catalog plugin Options
     *
     * 自动目录插件选项
     *
     * @default true
     */
    autoCatalog?: AutoCatalogOptions | boolean;
    /**
     * Blog plugin options
     *
     * 博客插件选项
     *
     * @default false
     */
    blog?: BlogPluginOptions | boolean;
    /**
     * Components enabled
     *
     * @description FontIcon is used internally, so it will be registered anyway.
     *
     * @see https://plugin-components.vuejs.press/config.html
     *
     * 需要启用的插件
     *
     * @description FontIcon 被内部使用，所以它无论如何都会被注册。
     *
     * @see https://plugin-components.vuejs.press/zh/config.html
     */
    components?: ComponentOptions;
    /**
     * Comment plugin options
     *
     * @see https://plugin-comment2.vuejs.press/config/
     *
     * 评论插件配置
     *
     * @see https://plugin-comment2.vuejs.press/zh/config/
     */
    comment?: CommentPluginOptions | false;
    /**
     * code copy plugin options
     *
     * @see https://plugin-copy-code2.vuejs.press/config/
     *
     * 代码复制插件配置
     *
     * @see https://plugin-copy-code2.vuejs.press/zh/config/
     */
    copyCode?: CopyCodeOptions | false;
    /**
     * Copyright Plugin options
     *
     * @see https://plugin-copyright2.vuejs.press/config.html
     *
     * 版权信息插件配置
     *
     * @see https://plugin-copyright2.vuejs.press/zh/config.html
     *
     * @default false
     */
    copyright?: CopyrightOptions | boolean;
    /**
     * Enable @vuepress/external-link-icon or not
     *
     * 是否启用 @vuepress/external-link-icon 插件
     *
     * @default true
     */
    externalLinkIcon?: boolean;
    /**
     * Feed plugin options
     *
     * @see https://plugin-feed2.vuejs.press/config/
     *
     * Feed 插件配置
     *
     * @see https://plugin-feed2.vuejs.press/zh/config/
     */
    feed?: Omit<FeedOptions, "hostname">;
    /**
     * Git plugin options
     *
     * @description By default this plugin is only enabled in production mode for performance reasons.
     *
     * @see https://vuejs.press/reference/plugin/git.html
     *
     * Git 插件配置
     *
     * @description 默认情况下，出于性能原因，此插件仅在生产模式下启用。
     *
     * @see https://vuejs.press/zh/reference/plugin/git.html
     */
    git?: GitPluginOptions | boolean;
    /**
     * md-enhance plugin options
     *
     * @see https://plugin-md-enhance.vuejs.press/config/
     *
     * md-enhance 插件配置
     *
     * @see https://plugin-md-enhance.vuejs.press/zh/config/
     */
    mdEnhance?: (Omit<MarkdownEnhanceOptions, "container"> & {
        /**
         * Whether to enable custom container including
         *
         * - info
         * - note
         * - tip
         * - warning
         * - danger
         * - details
         *
         * ⚠ The last 4 items conflict with default theme and will override it’s style.
         *
         * 是否启用自定义容器
         *
         * - info
         * - note
         * - tip
         * - warning
         * - danger
         * - details
         *
         * ⚠ 最后四个会和默认主题冲突，且会覆盖默认主题的样式与行为。
         *
         * @default true
         */
        container?: boolean;
    }) | false;
    /**
     * Enable @vuepress/nprogress or not
     *
     * 是否启用 @vuepress/nprogress 插件
     *
     * @default true
     */
    nprogress?: boolean;
    /**
     * Photo Swipe plugin options
     *
     * @description This plugin is enabled by default
     *
     * @see https://plugin-photo-swipe.vuejs.press/config/
     *
     * 图片预览插件配置
     *
     * @see https://plugin-photo-swipe.vuejs.press/zh/config/
     *
     * @default true
     */
    photoSwipe?: PhotoSwipeOptions | boolean;
    /**
     * Enable @vuepress/prismjs or not
     *
     * 是否启用 @vuepress/prismjs 插件
     *
     * @default true
     */
    prismjs?: PrismjsOptions | boolean;
    /**
     * PWA plugin options
     *
     * @see https://plugin-pwa2.vuejs.press/config/
     *
     * PWA 插件配置
     *
     * @see https://plugin-pwa2.vuejs.press/zh/config/
     *
     * @default false
     */
    pwa?: PWAOptions | boolean;
    /**
     * ReadingTime options
     *
     * @see https://plugin-reading-time2.vuejs.press/
     *
     * 阅读时间插件配置
     *
     * @see https://plugin-reading-time2.vuejs.press/zh/
     *
     * @default true
     */
    readingTime?: ReadingTimeOptions | boolean;
    /**
     * SEO plugin options
     *
     * @see https://plugin-seo2.vuejs.press/config/
     *
     * SEO 插件配置
     *
     * @see https://plugin-seo2.vuejs.press/zh/config/
     *
     * @default true
     */
    seo?: Omit<SeoOptions, "hostname" | "author"> | boolean;
    /**
     * Sitemap plugin options
     *
     * @see https://plugin-sitemap2.vuejs.press/config/
     *
     * Sitemap 插件配置
     *
     * @see https://plugin-sitemap2.vuejs.press/zh/config/
     *
     * @default true
     */
    sitemap?: Omit<SitemapOptions, "hostname"> | boolean;
}

interface ThemeOptions extends AppearanceOptions, FeatureOptions, InfoOptions, LayoutOptions, ThemeData$1<ThemeLocaleOptions> {
    plugins?: PluginsOptions;
}
interface ThemeData extends AppearanceConfig, FeatureConfig, InfoOptions {
    locales: Record<string, ThemeLocaleConfig>;
}

type Helper<T> = (options: T) => T;
type ThemeNavbarHelper = Helper<NavbarOptions>;
type ThemeSidebarHelper = Helper<SidebarOptions>;
type ThemeSidebarArrayHelper = Helper<SidebarArrayOptions>;
type ThemeSidebarObjectHelper = Helper<SidebarObjectOptions>;
type ThemeBlogPluginHelper = Helper<BlogPluginOptions | boolean>;
type ThemeCommentPluginHelper = Helper<CommentOptions | false>;
type ThemeCopyCodePluginHelper = Helper<CopyCodeOptions | false>;
type ThemeCopyrightPluginHelper = Helper<CopyrightOptions | false>;
type ThemeFeedPluginHelper = Helper<Omit<FeedOptions, "hostname"> | false>;
type ThemeGitPluginHelper = Helper<GitPluginOptions | false>;
type ThemeMdEnhancePluginHelper = Helper<MarkdownEnhanceOptions | false>;
type ThemePhotoSwipePluginHelper = Helper<PhotoSwipeOptions | false>;
type ThemePWAPluginHelper = Helper<PWAOptions | false>;
type ThemeReadingTimePluginHelper = Helper<ReadingTimeOptions | false>;
type ThemeSEOPluginHelper = Helper<Omit<SeoOptions, "hostname" | "author"> | false>;
type ThemeSitemapPluginHelper = Helper<Omit<SitemapOptions, "hostname"> | false>;

declare const hopeTheme: (options: ThemeOptions, behavior?: HopeThemeBehaviorOptions | boolean) => ThemeFunction;

/**
 * @deprecated You should use V2 standard frontmatter and avoid using it
 */
declare const convertFrontmatter: (frontmatter: Record<string, unknown>, filePathRelative?: string | null) => ThemePageFrontmatter & Record<string, unknown>;

/**
 * @deprecated use `import { navbar } from "vuepress-theme-hope";` instead
 */
declare const navbarConfig: (config: NavbarOptions) => NavbarOptions;
/**
 * @deprecated use `import { arraySidebar } from "vuepress-theme-hope";` instead
 */
declare const sidebarConfig: (config: SidebarOptions) => SidebarOptions;
/**
 * @deprecated use `import { hopeThemeLegacy } from "vuepress-theme-hope";` instead
 */
declare const themeConfig: (themeConfig: ThemeOptions) => ThemeOptions;
/**
 * @deprecated import and use `hopeTheme` instead
 */
declare const config: (userConfig: Record<string, unknown>) => UserConfig;

/**
 * @deprecated use `import { navbar } from "vuepress-theme-hope";` instead
 */
declare const defineNavbarConfig: (config: NavbarOptions) => NavbarOptions;
/**
 * @deprecated use `import { sidebar } from "vuepress-theme-hope";` instead
 */
declare const defineSidebarConfig: (config: SidebarOptions) => SidebarOptions;
/**
 * @deprecated use `import { arraySidebar } from "vuepress-theme-hope";` instead
 */
declare const defineSidebarArrayConfig: (config: SidebarArrayOptions) => SidebarArrayOptions;
/**
 * @deprecated use `import { objectSidebar } from "vuepress-theme-hope";` instead
 */
declare const defineSidebarObjectConfig: (config: SidebarObjectOptions) => SidebarObjectOptions;
/**
 * @deprecated use `import { hopeThemeLegacy } from "vuepress-theme-hope";` instead
 */
declare const defineThemeConfig: (themeConfig: ThemeOptions) => ThemeOptions;
/**
 * @deprecated import and use `hopeTheme` instead
 */
declare const defineHopeConfig: (config: UserConfig & Record<string, unknown>) => UserConfig;

/**
 * @deprecated You should use V2 standard navbar config and avoid using it
 */
declare const convertNavbarOptions: (config: NavbarOptions | unknown) => NavbarOptions | false;

/**
 * @deprecated You should use V2 standard sidebar config and avoid using it
 */
declare const convertSidebarOptions: (config: SidebarOptions | unknown) => SidebarOptions | false;

/**
 * @deprecated You should use scss style files in v2 and avoid using it
 */
declare const checkLegacyStyle: (app: App) => void;

/**
 * @deprecated You should use V2 standard options and avoid using it
 */
declare const convertThemeOptions: (themeOptions: Record<string, unknown>) => ThemeOptions;

declare const navbar: ThemeNavbarHelper;
declare const sidebar: ThemeSidebarHelper;
declare const arraySidebar: ThemeSidebarArrayHelper;
declare const objectSidebar: ThemeSidebarObjectHelper;
declare const blog: ThemeBlogPluginHelper;
declare const comment: ThemeCommentPluginHelper;
declare const copyCode: ThemeCopyCodePluginHelper;
declare const copyright: ThemeCopyrightPluginHelper;
declare const feed: ThemeFeedPluginHelper;
declare const git: ThemeGitPluginHelper;
declare const mdEnhance: ThemeMdEnhancePluginHelper;
declare const photoSwipe: ThemePhotoSwipePluginHelper;
declare const pwa: ThemePWAPluginHelper;
declare const readingTime: ThemeReadingTimePluginHelper;
declare const seo: ThemeSEOPluginHelper;
declare const sitemap: ThemeSitemapPluginHelper;

declare const themeLocalesData: Record<string, ThemeLocaleData>;

/**
 * @private
 */
declare const getAlias: (isDebug: boolean) => Record<string, string>;

/**
 * Add tags as customElement
 *
 * @param bundlerOptions VuePress Bundler config
 * @param app VuePress Node App
 * @param customElements tags recognized as custom element
 */
declare const checkTag: (bundlerOptions: unknown, app: App) => void;
/**
 * @private
 */
declare const extendsBundlerOptions: (bundlerOptions: unknown, app: App) => void;

/** @private */
declare const getEncryptConfig: (encrypt?: EncryptOptions) => EncryptConfig;

/** @private */
declare const checkSocialMediaIcons: (themeData: ThemeData) => Record<string, string>;

interface ThemeStatus {
    enableAutoCatalog: boolean;
    enableBlog: boolean;
    enableEncrypt: boolean;
    enableSlide: boolean;
    enableReadingTime: boolean;
    blogType: {
        key: string;
        path: string;
    }[];
    hasMultipleLanguages: boolean;
    supportPageview: boolean;
}
/** @private */
declare const getStatus: (app: App, themeOptions: ThemeOptions) => ThemeStatus;

/**
 * @private
 *
 * Get client-side `themeData`
 */
declare const getThemeData: (app: App, themeOptions: ThemeOptions, { enableBlog, enableEncrypt }: ThemeStatus) => ThemeData;

/**
 * @private
 *
 * Resolve options for @vuepress/plugin-active-header-links
 */
declare const getActiveHeaderLinksPlugin: (activeHeaderLinks?: boolean) => Plugin | null;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-auto-catalog
 */
declare const getAutoCatalogPlugin: (autoCatalog?: AutoCatalogOptions | boolean) => Plugin | null;

/** @private */
declare const getBlogPlugin: (app: App, themeData: ThemeData, options?: BlogPluginOptions | boolean, hotReload?: boolean) => Plugin | null;

/** @private */
declare const getBlogCategoryCategory: (options: BlogPluginOptions, themeData: ThemeData) => BlogCategoryOptions<{
    git: GitData;
}, ThemeNormalPageFrontmatter, {
    routeMeta: ArticleInfo;
}>;
/** @private */
declare const getBlogTagCategory: (options: BlogPluginOptions, themeData: ThemeData) => BlogCategoryOptions<{
    git: GitData;
}, ThemeNormalPageFrontmatter, {
    routeMeta: ArticleInfo;
}>;

/** @private */
declare const blogFilter: ({ frontmatter, filePathRelative, }: Page<ThemePageData>) => boolean;

/** @private */
declare const injectBlogBasicInfo: (page: Page<ThemePageData>, info: Record<string, unknown>) => void;

/** @private */
declare const getBlogArticleType: (options: BlogPluginOptions, themeData: ThemeData) => BlogTypeOptions<{
    git: GitData;
}, ThemeNormalPageFrontmatter, {
    routeMeta: ArticleInfo;
}>;
/** @private */
declare const getBlogStarType: (options: BlogPluginOptions, themeData: ThemeData) => BlogTypeOptions<{
    git: GitData;
}, ThemeNormalPageFrontmatter, {
    routeMeta: ArticleInfo;
}>;
/** @private */
declare const getBlogTimelineType: (options: BlogPluginOptions, themeData: ThemeData) => BlogTypeOptions<{
    git: GitData;
}, ThemeNormalPageFrontmatter, {
    routeMeta: ArticleInfo;
}>;

/** @private */
declare const defaultPageSorter: (pageA: Page<{
    git: GitData;
}, ThemeNormalPageFrontmatter, {
    routeMeta: ArticleInfo;
}>, pageB: Page<{
    git: GitData;
}, ThemeNormalPageFrontmatter, {
    routeMeta: ArticleInfo;
}>) => number;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-comment2
 */
declare const getCommentPlugin: (options?: Partial<CommentPluginOptions> | false, legacy?: boolean) => PluginObject | null;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-components
 */
declare const getComponentsPlugin: (options: Pick<ThemeOptions, "backToTop" | "hostname" | "hotReload" | "iconAssets" | "iconPrefix">, { components, componentOptions, rootComponents, }?: ComponentOptions, legacy?: boolean) => Plugin;

/**
 * @private
 *
 * Get theme plugins
 */
declare const getPluginConfig: (app: App, plugins: PluginsOptions, themeData: ThemeData, options: Pick<ThemeOptions, "backToTop" | "hostname" | "hotReload" | "iconAssets" | "iconPrefix" | "favicon">, legacy?: boolean) => PluginConfig;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-copy-code2
 */
declare const getCopyCodePlugin: (options?: CopyCodeOptions | false) => Plugin | null;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-copyright
 */
declare const getCopyrightPlugin: (themeData: ThemeData, options?: Partial<CopyrightOptions> | boolean, hostname?: string) => Plugin | null;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-feed2
 */
declare const getFeedPlugin: (themeData: ThemeData, options?: Omit<FeedOptions, "hostname">, hostname?: string, favicon?: string, legacy?: boolean) => Plugin | null;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-md-enhance
 */
declare const getMdEnhancePlugin: (options?: Partial<MarkdownEnhanceOptions> | false, legacy?: boolean) => Plugin | null;

/**
 * @private
 *
 * Inject basic page info
 */
declare const injectPageInfo: (page: Page<ThemePageData>) => void;
declare const extendsPagePlugin: (themeData: ThemeData, behavior: HopeThemeBehaviorOptions) => PluginObject;
declare const useExtendsPagePlugin: (app: App, themeData: ThemeData, behavior: HopeThemeBehaviorOptions) => void;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-photo-swipe
 */
declare const getPhotoSwipePlugin: (options?: PhotoSwipeOptions | boolean) => Plugin | null;

/**
 * @private
 *
 * Composition Api to use `@vuepress/plugin-prismjs`
 */
declare const usePrismPlugin: (app: App) => void;
/**
 * @private
 *
 * Composition Api to remove `@vuepress/plugin-prismjs`
 */
declare const removePrismPlugin: (app: App) => void;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-pwa2
 */
declare const getPWAPlugin: (options?: PWAOptions | boolean, favicon?: string, legacy?: boolean) => Plugin | null;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-rtl
 */
declare const getRtlPlugin: (themeData: ThemeData) => Plugin | null;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-seo2
 */
declare const getSEOPlugin: (themeData: ThemeData, { seo }: PluginsOptions, hostname?: string, legacy?: boolean) => Plugin | null;

/**
 * @private
 *
 * Resolve options for vuepress-plugin-sitemap2
 */
declare const getSitemapPlugin: (options?: Omit<SitemapOptions, "hostname"> | boolean, hostname?: string, legacy?: boolean) => Plugin | null;

/**
 * @private
 *
 * Use plugins to ensure they apply first
 */
declare const usePlugin: (app: App, themeData: ThemeData, plugins: PluginsOptions, hotReload: boolean, behavior: HopeThemeBehaviorOptions) => void;

/**
 * @private
 */
declare const prepareBundleConfigFile: (app: App, { enableAutoCatalog, enableBlog, enableEncrypt, enableSlide }: ThemeStatus) => Promise<string>;

/**
 * @private
 */
declare const prepareSeparatedConfigFile: (app: App, { enableAutoCatalog, enableBlog, enableEncrypt, enableSlide }: ThemeStatus) => Promise<string>;

/**
 * @private
 */
declare const prepareHighLighterScss: (app: App, { prismjs }: PluginsOptions) => Promise<void>;

/**
 * @private
 */
declare const getSidebarData: (app: App, themeData: ThemeData, sorter?: SidebarSorter) => SidebarOptions;
/**
 * @private
 */
declare const prepareSidebarData: (app: App, themeData: ThemeData, sorter?: SidebarSorter) => Promise<void>;

declare const sidebarReadmeSorter: (infoA: SidebarInfo, infoB: SidebarInfo) => number;
declare const sidebarOrderSorter: (infoA: SidebarInfo, infoB: SidebarInfo) => number;
declare const sidebarDateSorter: (infoA: SidebarInfo, infoB: SidebarInfo) => number;
declare const sidebarDateDescSorter: (infoA: SidebarInfo, infoB: SidebarInfo) => number;
declare const sidebarFilenameSorter: (infoA: SidebarInfo, infoB: SidebarInfo) => number;
declare const sidebarTitleSorter: (infoA: SidebarInfo, infoB: SidebarInfo) => number;
/** @private */
declare const getSidebarSorter: (sorter?: SidebarSorter) => SidebarSorterFunction[];

interface FileInfo {
    type: "file";
    filename: string;
    path: string;
}
interface DirInfo {
    type: "dir";
    dirname: string;
    path: string;
    children: StructureInfo[];
}
type StructureInfo = DirInfo | FileInfo;
interface ThemeSidebarInfoOptions {
    app: App;
    sorters: SidebarSorterFunction[];
    nestingDepth?: number;
}
/**
 * @private
 */
declare const getStructureInfo: (pages: Page[], scope: string) => StructureInfo[];

/**
 * @private
 */
declare const prepareSocialMediaIcons: (app: App, icons: Record<string, string>) => Promise<void>;

export { AppearanceConfig, AppearanceLocaleData, AppearanceOptions, ArticleInfo, ArticleInfoType, AutoLinkOptions, BlogLocaleConfig, BlogLocaleData, BlogLocaleOptions, BlogPluginOptions, DarkmodeOptions, DirInfo, DocsRepoLocaleOptions, EncryptConfig, EncryptLocaleData, EncryptOptions, FeatureConfig, FeatureLocaleConfig, FeatureLocaleData, FeatureLocaleOptions, FeatureOptions, FileInfo, FooterLocaleOptions, HopeThemeBehaviorOptions, InfoOptions, LayoutLocaleConfig, LayoutLocaleData, LayoutLocaleOptions, LayoutOptions, MetaLocaleOptions, MetaLocateData, NavGroup, NavbarComponent, NavbarGroup, NavbarItem, NavbarLayoutOptions, NavbarLocaleData, NavbarLocaleOptions, NavbarOptions, OutlookLocaleData, PageInfo, PageType, PaginationLocaleData, PluginsOptions, PrismjsDarkTheme, PrismjsLightTheme, PrismjsOptions, PrismjsTheme, RouteLocaleData, SidebarArrayOptions, SidebarDirInfo, SidebarFileInfo, SidebarGroupItem, SidebarInfo, SidebarItem, SidebarLocaleOptions, SidebarObjectOptions, SidebarOptions, SidebarPageItem, SidebarSorter, SidebarSorterFunction, SidebarSorterKeyword, SidebarStructureItem, StructureInfo, TextItemOptions, ThemeBlogHomePageFrontmatter, ThemeBlogHomeProjectOptions, ThemeBlogPluginHelper, ThemeCommentPluginHelper, ThemeCopyCodePluginHelper, ThemeCopyrightPluginHelper, ThemeData, ThemeFeedPluginHelper, ThemeGitPluginHelper, ThemeHopePageFrontmatter, ThemeLocaleConfig, ThemeLocaleData, ThemeLocaleOptions, ThemeMdEnhancePluginHelper, ThemeNavbarHelper, ThemeNormalPageFrontmatter, ThemeOptions, ThemePWAPluginHelper, ThemePageData, ThemePageFrontmatter, ThemePhotoSwipePluginHelper, ThemeProjectHomeActionOptions, ThemeProjectHomeFeatureItem, ThemeProjectHomeFeatureOptions, ThemeProjectHomeHighlightItem, ThemeProjectHomeHighlightOptions, ThemeProjectHomePageFrontmatter, ThemeReadingTimePluginHelper, ThemeSEOPluginHelper, ThemeSidebarArrayHelper, ThemeSidebarHelper, ThemeSidebarInfoOptions, ThemeSidebarObjectHelper, ThemeSitemapPluginHelper, ThemeStatus, arraySidebar, blog, blogFilter, checkLegacyStyle, checkSocialMediaIcons, checkTag, comment, config, convertFrontmatter, convertNavbarOptions, convertSidebarOptions, convertThemeOptions, copyCode, copyright, defaultPageSorter, defineHopeConfig, defineNavbarConfig, defineSidebarArrayConfig, defineSidebarConfig, defineSidebarObjectConfig, defineThemeConfig, extendsBundlerOptions, extendsPagePlugin, feed, getActiveHeaderLinksPlugin, getAlias, getAutoCatalogPlugin, getBlogArticleType, getBlogCategoryCategory, getBlogPlugin, getBlogStarType, getBlogTagCategory, getBlogTimelineType, getCommentPlugin, getComponentsPlugin, getCopyCodePlugin, getCopyrightPlugin, getEncryptConfig, getFeedPlugin, getMdEnhancePlugin, getPWAPlugin, getPhotoSwipePlugin, getPluginConfig, getRtlPlugin, getSEOPlugin, getSidebarData, getSidebarSorter, getSitemapPlugin, getStatus, getStructureInfo, getThemeData, git, hopeTheme as hope, hopeTheme, injectBlogBasicInfo, injectPageInfo, mdEnhance, navbar, navbarConfig, objectSidebar, photoSwipe, prepareBundleConfigFile, prepareHighLighterScss, prepareSeparatedConfigFile, prepareSidebarData, prepareSocialMediaIcons, pwa, readingTime, removePrismPlugin, seo, sidebar, sidebarConfig, sidebarDateDescSorter, sidebarDateSorter, sidebarFilenameSorter, sidebarOrderSorter, sidebarReadmeSorter, sidebarTitleSorter, sitemap, themeConfig, themeLocalesData, useExtendsPagePlugin, usePlugin, usePrismPlugin };
