import { FunctionalComponent, VNode } from 'vue';
import { RouteLocationNormalizedLoaded } from 'vuepress/client';
import { PageFrontmatter } from 'vuepress/shared';

interface IconBaseProps {
    name?: string;
    color?: string;
    ariaLabel?: string;
}
/**
 * Icon Base Component
 */
declare const IconBase: FunctionalComponent<IconBaseProps, Record<never, never>, {
    default: () => VNode | VNode[];
}>;

declare const RenderDefault: FunctionalComponent<Record<never, never>, Record<never, never>, {
    default: () => VNode | VNode[];
}>;

declare const EnterFullScreenIcon: FunctionalComponent;
declare const CancelFullScreenIcon: FunctionalComponent;

declare const GitHubIcon: FunctionalComponent;
declare const GitLabIcon: FunctionalComponent;
declare const GiteeIcon: FunctionalComponent;
declare const BitbucketIcon: FunctionalComponent;
declare const SourceIcon: FunctionalComponent;
declare const RepoIcon: FunctionalComponent<{
    link?: string;
    type?: string;
}>;

declare const cyrb53: (content: string, seed?: number) => number;
declare const generateIndexFromHash: (content: string, total: number) => number;

/**
 * Get hash from path
 *
 * @param path link path
 * @returns hash
 */
declare const getHash: (path: string) => string;
declare const normalizePath: (path: string) => string;
/**
 * Whether the lick is active
 *
 * @param route Current route
 * @param link link path
 * @returns Whether the lick is active
 */
declare const isActiveLink: (route: RouteLocationNormalizedLoaded, link?: string) => boolean;

declare class Popup {
    private containerElement;
    private popupElements;
    constructor();
    emit(html: string, duration?: number): number;
    close(popupId?: number): void;
    destroy(): void;
}

type RepoType = "GitHub" | "GitLab" | "Gitee" | "Bitbucket" | null;
declare const resolveRepoLink: (repo: string) => string;
declare const resolveRepoType: (repo?: string) => RepoType;

declare const getSize: () => Record<"width" | "height" | "left" | "top", number>;
declare const openPopupWindow: (link: string, target?: string, features?: string[]) => void;

type AuthorName = string;
interface AuthorInfo {
    /**
     * Author name
     *
     * 作者姓名
     */
    name: string;
    /**
     * Author website
     *
     * 作者网站
     */
    url?: string;
    /**
     * Author email
     *
     * 作者 Email
     */
    email?: string;
}
type Author = AuthorName | AuthorName[] | AuthorInfo | AuthorInfo[];

interface BasePageFrontMatter extends PageFrontmatter {
    /**
     * Page icon
     *
     * 页面图标
     */
    icon?: string;
    /**
     * Page Author(s)
     *
     * 页面作者
     */
    author?: Author | false;
    /**
     * Writing Date
     *
     * 写作日期
     */
    date?: Date | string;
    /**
     * Page Category(ies)
     *
     * 页面分类
     */
    category?: string | string[];
    categories?: string[];
    /**
     * Page Tag(s)
     *
     * 页面标签
     */
    tag?: string[] | string;
    tags?: string[];
    /**
     * Whether the content is original
     *
     * 是否原创
     */
    isOriginal?: boolean;
    /**
     * Whether the page is an article
     *
     * 页面是否是文章
     */
    article?: boolean;
    /**
     * Page Cover
     *
     * 页面封面
     */
    cover?: string;
    /**
     * Page Banner
     *
     * 页面 Banner 图
     */
    banner?: string;
    /**
     * Footer text
     *
     * 页脚文字
     */
    footer?: string | boolean;
    /**
     * License text
     *
     * 协议文字
     */
    license?: string;
    /**
     * Copyright text
     *
     * 版权文字
     */
    copyright?: string | false;
    /**
     * Whether is home page
     *
     * 是否是主页
     */
    home?: boolean;
    /**
     * @deprecated use `date` instead
     */
    time?: Date | string;
}

declare const getAuthor: (author: Author | false | undefined, canDisable?: boolean) => AuthorInfo[];
declare const getStringArray: (value: string[] | string | undefined, optionName: string) => string[];
declare const getCategory: (category: string[] | string | undefined) => string[];
declare const getTag: (tag: string[] | string | undefined) => string[];

export { BitbucketIcon, CancelFullScreenIcon, EnterFullScreenIcon, GitHubIcon, GitLabIcon, GiteeIcon, IconBase, Popup, RenderDefault, RepoIcon, SourceIcon, cyrb53, generateIndexFromHash, getAuthor, getCategory, getHash, getSize, getStringArray, getTag, isActiveLink, normalizePath, openPopupWindow, resolveRepoLink, resolveRepoType };
export type { Author, AuthorInfo, AuthorName, BasePageFrontMatter, IconBaseProps, RepoType };
