vuepress-theme-plume
Version:
A Blog&Document Theme for VuePress 2.0
459 lines (458 loc) • 18 kB
TypeScript
import { App, ComputedRef, InjectionKey, MaybeRef, MaybeRefOrGetter, Ref } from "vue";
import { PageDataRef, PageFrontmatterRef, Router, SiteLocaleDataRef, useRoute, useRouter } from "vuepress/client";
import { BulletinOptions, CopyrightFrontmatter, GitContributor, NavItemWithLink, PresetLocale, ResolvedNavItem, ResolvedSidebarItem, ThemeBaseCollection, ThemeCollectionItem, ThemeData, ThemeDocCollection, ThemeFriendsFrontmatter, ThemeHomeFrontmatter, ThemeLocaleData, ThemeOutline, ThemePageData, ThemePageFrontmatter, ThemePostCollection, ThemePostFrontmatter, ThemePosts, ThemePostsItem, ThemeSidebar, ThemeSidebarItem, TransitionOptions } from "../../shared/index.js";
import { RouteParamValueRaw } from "vue-router";
//#region src/client/composables/aside.d.ts
declare function useAside(): {
isAsideEnabled: ComputedRef<boolean>;
};
//#endregion
//#region src/client/composables/bulletin.d.ts
declare function useBulletin<T extends Record<string, any> = Record<string, any>>(): ComputedRef<BulletinOptions & T | undefined>;
declare function useBulletinControl<T extends Record<string, any> = Record<string, any>>(): {
bulletin: ComputedRef<BulletinOptions & T | undefined>;
enableBulletin: ComputedRef<boolean>;
showBulletin: Ref<boolean>;
close: () => void;
};
//#endregion
//#region src/client/composables/collections.d.ts
type CollectionsRef = Ref<Record<string, ThemeCollectionItem[]>>;
type CollectionItemRef<T extends ThemeBaseCollection> = Ref<T | undefined>;
declare const collectionsRef: CollectionsRef;
declare const collectionItemRef: CollectionItemRef<ThemeBaseCollection>;
declare const useCollections: () => CollectionsRef;
declare const useCollection: <T extends ThemeBaseCollection = ThemeDocCollection>() => CollectionItemRef<T>;
declare function forceUpdateCollection(dir?: string | true): void;
declare function setupCollection(): void;
//#endregion
//#region src/client/composables/contributors.d.ts
interface useContributorsResult {
mode: ComputedRef<'inline' | 'block'>;
contributors: ComputedRef<GitContributor[]>;
hasContributors: ComputedRef<boolean>;
}
declare function useContributors(): useContributorsResult;
//#endregion
//#region src/client/composables/copyright.d.ts
interface useCopyrightResult {
license: ComputedRef<License>;
author: ComputedRef<Exclude<CopyrightFrontmatter['author'], string>>;
hasCopyright: ComputedRef<boolean>;
creation: ComputedRef<CopyrightFrontmatter['creation']>;
creationText: ComputedRef<string>;
sourceUrl: ComputedRef<string | undefined>;
}
declare function useCopyright(copyright: ComputedRef<CopyrightFrontmatter>): useCopyrightResult;
interface License {
name: string;
url?: string;
icons?: string[];
}
//#endregion
//#region src/client/composables/css-var.d.ts
/**
* Get css variable
* @param prop css variable name
* @param initialValue
*/
declare function useCssVar(prop: MaybeRefOrGetter<string | null | undefined>, initialValue?: string): ComputedRef<string | null | undefined>;
//#endregion
//#region src/client/composables/dark-mode.d.ts
type DarkModeRef = Ref<boolean>;
declare const darkModeSymbol: InjectionKey<DarkModeRef>;
declare function enableTransitions(): boolean;
declare function setupDarkMode(app: App): void;
/**
* Inject dark mode global computed
*/
declare function useDarkMode(): DarkModeRef;
//#endregion
//#region src/client/composables/theme-data.d.ts
type ThemeDataRef<T extends ThemeData = ThemeData> = Ref<T>;
type ThemeLocaleDataRef<T extends ThemeData = ThemeData> = ComputedRef<T>;
declare const themeLocaleDataSymbol: InjectionKey<ThemeLocaleDataRef>;
declare const themeData: ThemeDataRef;
declare function useThemeData<T extends ThemeData = ThemeData>(): ThemeDataRef<T>;
declare function useThemeLocaleData<T extends ThemeData = ThemeData>(): ThemeLocaleDataRef<T>;
declare function setupThemeData(app: App): void;
//#endregion
//#region src/client/composables/data.d.ts
type FrontmatterType = 'home' | 'post' | 'friends' | 'page';
type FrontmatterCollectionType = 'post' | 'doc';
type Frontmatter<T extends FrontmatterType = 'page'> = T extends 'home' ? ThemeHomeFrontmatter : T extends 'post' ? ThemePostFrontmatter : T extends 'friends' ? ThemeFriendsFrontmatter : ThemePageFrontmatter;
interface Data<T extends FrontmatterType = 'page', C extends FrontmatterCollectionType = 'doc'> {
theme: ThemeLocaleDataRef<ThemeLocaleData>;
page: PageDataRef<ThemePageData>;
frontmatter: PageFrontmatterRef<Frontmatter<T> & Record<string, unknown>>;
lang: Ref<string>;
site: SiteLocaleDataRef;
isDark: Ref<boolean>;
collection: CollectionItemRef<C extends 'doc' ? ThemeDocCollection : ThemePostCollection>;
}
declare function useData<T extends FrontmatterType = 'page', C extends FrontmatterCollectionType = 'doc'>(): Data<T, C>;
//#endregion
//#region src/client/composables/edit-link.d.ts
declare function useEditLink(): ComputedRef<null | NavItemWithLink>;
//#endregion
//#region src/client/composables/encrypt-data.d.ts
type EncryptConfig = readonly [boolean, string, string, string[], Record<string, string>];
interface EncryptDataRule {
key: string;
match: string;
rules: string[];
}
interface EncryptData {
global: boolean;
separator: string;
admins: string[];
matches: string[];
ruleList: EncryptDataRule[];
}
type EncryptRef = Ref<EncryptData>;
declare const encrypt: EncryptRef;
declare function useEncryptData(): EncryptRef;
//#endregion
//#region src/client/composables/encrypt.d.ts
interface Encrypt {
hasPageEncrypt: Ref<boolean>;
isGlobalDecrypted: Ref<boolean>;
isPageDecrypted: Ref<boolean>;
hashList: Ref<EncryptDataRule[]>;
}
declare const EncryptSymbol: InjectionKey<Encrypt>;
declare function setupEncrypt(): void;
declare function useEncrypt(): Encrypt;
declare function useEncryptCompare(): {
compareGlobal: (password: string) => Promise<boolean>;
comparePage: (password: string) => Promise<boolean>;
};
//#endregion
//#region src/client/composables/flyout.d.ts
interface UseFlyoutOptions {
el: Ref<HTMLElement | undefined>;
onFocus?: () => void;
onBlur?: () => void;
}
declare const focusedElement: Ref<HTMLElement | undefined>;
declare function useFlyout(options: UseFlyoutOptions): Readonly<Ref<boolean>>;
//#endregion
//#region src/client/composables/icons.d.ts
type IconsData = Record<string, string>;
type IconsDataRef = Ref<IconsData>;
declare const useIconsData: () => IconsDataRef;
//#endregion
//#region src/client/composables/internal-link.d.ts
interface InternalLink {
text: string;
link: string;
}
declare function useInternalLink(): {
home: ComputedRef<InternalLink>;
posts: ComputedRef<InternalLink | undefined>;
tags: ComputedRef<InternalLink | undefined>;
archive: ComputedRef<InternalLink | undefined>;
categories: ComputedRef<InternalLink | undefined>;
};
//#endregion
//#region src/client/composables/langs.d.ts
interface Lang {
text?: string;
link: string;
}
interface UseLangOptions {
removeCurrent?: boolean;
}
interface UseLangResult {
localeLinks: ComputedRef<Lang[]>;
currentLang: ComputedRef<Lang>;
}
declare function useLangs({
removeCurrent
}?: UseLangOptions): UseLangResult;
//#endregion
//#region src/client/composables/latest-updated.d.ts
declare function useLastUpdated(): {
datetime: Ref<string>;
isoDatetime: ComputedRef<string | undefined>;
lastUpdatedText: ComputedRef<string>;
};
//#endregion
//#region src/client/composables/link.d.ts
interface UseLinkResult {
/**
* 外部链接
*/
isExternal: ComputedRef<boolean>;
/**
* 外部链接协议
* 此项不包含 target="_blank" 的情况
*/
isExternalProtocol: ComputedRef<boolean>;
link: ComputedRef<string | undefined>;
}
declare function useLink(href: MaybeRefOrGetter<string | undefined>, target?: MaybeRefOrGetter<string | undefined>): UseLinkResult;
//#endregion
//#region src/client/composables/nav.d.ts
declare function useNavbarData(): Ref<ResolvedNavItem[]>;
interface UseNavReturn {
isScreenOpen: Ref<boolean>;
openScreen: () => void;
closeScreen: () => void;
toggleScreen: () => void;
}
declare function useNav(): UseNavReturn;
//#endregion
//#region src/client/composables/outline.d.ts
interface Header {
/**
* The level of the header
*
* `1` to `6` for `<h1>` to `<h6>`
*/
level: number;
/**
* The title of the header
*/
title: string;
/**
* The slug of the header
*
* Typically the `id` attr of the header anchor
*/
slug: string;
/**
* Link of the header
*
* Typically using `#${slug}` as the anchor hash
*/
link: string;
/**
* The children of the header
*/
children: Header[];
}
type MenuItem = Omit<Header, 'slug' | 'children'> & {
element: HTMLHeadElement;
children?: MenuItem[];
};
declare const headersSymbol: InjectionKey<Ref<MenuItem[]>>;
declare function setupHeaders(): Ref<MenuItem[]>;
declare function useHeaders(): Ref<MenuItem[]>;
declare function getHeaders(range?: ThemeOutline): MenuItem[];
declare function resolveHeaders(headers: MenuItem[], range?: ThemeOutline): MenuItem[];
declare function useActiveAnchor(container: Ref<HTMLElement | null>, marker: Ref<HTMLElement | null>): void;
//#endregion
//#region src/client/composables/page.d.ts
declare function usePostsPageData(): {
isPosts: ComputedRef<boolean>;
isPostsLayout: ComputedRef<boolean>;
};
//#endregion
//#region src/client/composables/posts-archives.d.ts
type ShortPostsItem = Pick<ThemePostsItem, 'title' | 'path' | 'createTime'>;
interface ArchiveItem {
title: string;
label: string;
list: ShortPostsItem[];
}
declare function useArchives(): {
archives: ComputedRef<ArchiveItem[]>;
};
//#endregion
//#region src/client/composables/posts-category.d.ts
interface CategoryItemWithPost {
type: 'post';
title: string;
path: string;
}
interface CategoryItem {
id: string;
type: 'category';
sort: number;
title: string;
items: (CategoryItem | CategoryItemWithPost)[];
}
type PostsCategory = (CategoryItem | CategoryItemWithPost)[];
declare function usePostsCategory(): {
categories: ComputedRef<PostsCategory>;
};
//#endregion
//#region src/client/composables/posts-data.d.ts
type PostsDataRef = Ref<Record<string, ThemePosts>>;
declare const postsData: PostsDataRef;
declare function usePostsData(): PostsDataRef;
declare function useLocalePostList(): ComputedRef<ThemePosts>;
//#endregion
//#region src/client/composables/posts-extract.d.ts
interface PostsExtractLink {
link?: string;
text?: string;
total: number;
}
declare function usePostsExtract(): {
hasPostsExtract: ComputedRef<boolean>;
tags: ComputedRef<PostsExtractLink>;
archives: ComputedRef<PostsExtractLink>;
categories: ComputedRef<PostsExtractLink>;
};
//#endregion
//#region src/client/composables/posts-post-list.d.ts
interface UsePostListControlResult {
postList: ComputedRef<ThemePostsItem[]>;
page: Ref<number>;
totalPage: ComputedRef<number>;
pageRange: ComputedRef<{
value: number | string;
more?: true;
}[]>;
isLastPage: ComputedRef<boolean>;
isFirstPage: ComputedRef<boolean>;
isPaginationEnabled: ComputedRef<boolean>;
changePage: (page: number) => void;
}
declare function usePostListControl(homePage: Ref<boolean>): UsePostListControlResult;
//#endregion
//#region src/client/composables/posts-tags.d.ts
type ShortPostItem = Pick<ThemePostsItem, 'title' | 'path' | 'createTime'>;
interface PostsTagItem {
name: string;
count: string | number;
className: string;
}
interface UseTagsResult {
tags: ComputedRef<PostsTagItem[]>;
currentTag: Ref<string>;
postList: ComputedRef<ShortPostItem[]>;
handleTagClick: (tag: string) => void;
}
declare function useTags(): UseTagsResult;
//#endregion
//#region src/client/composables/preset-locales.d.ts
interface PresetLocales {
[locale: string]: PresetLocale;
}
declare const presetLocales: PresetLocales;
declare function getPresetLocaleData(locale: string, name: keyof PresetLocale): string;
//#endregion
//#region src/client/composables/prev-next.d.ts
interface UsePrevNextResult {
prev: ComputedRef<NavItemWithLink | null>;
next: ComputedRef<NavItemWithLink | null>;
}
declare function usePrevNext(): UsePrevNextResult;
//#endregion
//#region src/client/composables/route-query.d.ts
type RouteQueryValueRaw = RouteParamValueRaw | string[];
interface ReactiveRouteOptions {
/**
* Mode to update the router query, ref is also acceptable
*
* @default 'replace'
*/
mode?: MaybeRef<'replace' | 'push'>;
/**
* Route instance, use `useRoute()` if not given
*/
route?: ReturnType<typeof useRoute>;
/**
* Router instance, use `useRouter()` if not given
*/
router?: ReturnType<typeof useRouter>;
}
interface ReactiveRouteOptionsWithTransform<V, R> extends ReactiveRouteOptions {
/**
* Function to transform data before return
*/
transform?: (val: V) => R;
}
declare function useRouteQuery(name: string): Ref<null | string | string[]>;
declare function useRouteQuery<T extends RouteQueryValueRaw = RouteQueryValueRaw, K = T>(name: string, defaultValue?: MaybeRefOrGetter<T>, options?: ReactiveRouteOptionsWithTransform<T, K>): Ref<K>;
//#endregion
//#region src/client/composables/scroll-behavior.d.ts
declare function enhanceScrollBehavior(router: Router): void;
//#endregion
//#region src/client/composables/scroll-promise.d.ts
interface ScrollPromise {
wait: () => Promise<void> | null;
pending: () => void;
resolve: () => void;
}
declare const useScrollPromise: () => ScrollPromise;
//#endregion
//#region src/client/composables/sidebar-data.d.ts
type SidebarData = Record<string, ThemeSidebar>;
type SidebarDataRef = Ref<SidebarData>;
type AutoDirSidebarRef = Ref<ThemeSidebarItem[] | {
link: string;
items: ThemeSidebarItem[];
}>;
type AutoHomeDataRef = Ref<Record<string, string>>;
declare const sidebarData: SidebarDataRef;
declare const autoDirSidebar: AutoDirSidebarRef;
declare function setupSidebar(): void;
declare function useSidebarData(): Ref<ResolvedSidebarItem[]>;
/**
* Get the `Sidebar` from sidebar option. This method will ensure to get correct
* sidebar config from `MultiSideBarConfig` with various path combinations such
* as matching `guide/` and `/guide/`. If no matching config was found, it will
* return empty array.
*/
declare function getSidebar(routePath: string, routeLocal: string): ResolvedSidebarItem[];
/**
* Get or generate sidebar group from the given sidebar items.
*/
declare function getSidebarGroups(sidebar: ResolvedSidebarItem[]): ResolvedSidebarItem[];
declare function getSidebarFirstLink(sidebar: ResolvedSidebarItem[]): string;
//#endregion
//#region src/client/composables/sidebar.d.ts
/**
* Check if the given sidebar item contains any active link.
*/
declare function hasActiveLink(path: string, items: ResolvedSidebarItem | ResolvedSidebarItem[]): boolean;
interface SidebarControl {
collapsed: Ref<boolean>;
collapsible: ComputedRef<boolean>;
isLink: ComputedRef<boolean>;
isActiveLink: Ref<boolean>;
hasActiveLink: ComputedRef<boolean>;
hasChildren: ComputedRef<boolean>;
toggle: () => void;
}
interface UseSidebarReturn {
isOpen: Ref<boolean>;
sidebar: Ref<ResolvedSidebarItem[]>;
sidebarKey: Ref<string>;
sidebarGroups: Ref<ResolvedSidebarItem[]>;
hasSidebar: ComputedRef<boolean>;
hasAside: ComputedRef<boolean>;
leftAside: ComputedRef<boolean>;
isSidebarEnabled: ComputedRef<boolean>;
open: () => void;
close: () => void;
toggle: () => void;
}
declare function useSidebar(): UseSidebarReturn;
/**
* a11y: cache the element that opened the Sidebar (the menu button) then
* focus that button again when Menu is closed with Escape key.
*/
declare function useCloseSidebarOnEscape(isOpen: Ref<boolean>, close: () => void): void;
declare function useSidebarControl(item: ComputedRef<ResolvedSidebarItem>): SidebarControl;
//#endregion
//#region src/client/composables/tag-colors.d.ts
type TagColors = Record<string, string>;
type TagColorsRef = Ref<TagColors>;
declare const useTagColors: () => TagColorsRef;
//#endregion
//#region src/client/composables/view-transition.d.ts
type TransitionMode = Exclude<TransitionOptions['appearance'], boolean>;
declare function resolveTransitionKeyframes(x: number, y: number, mode: TransitionMode, isDark: boolean): {
keyframes: PropertyIndexedKeyframes;
duration: number;
};
//#endregion
//#region src/client/composables/watermark.d.ts
declare function setupWatermark(): void;
//#endregion
export { AutoDirSidebarRef, AutoHomeDataRef, CategoryItem, CategoryItemWithPost, CollectionItemRef, CollectionsRef, Data, Encrypt, EncryptConfig, EncryptData, EncryptDataRule, EncryptRef, EncryptSymbol, Header, InternalLink, MenuItem, PostsCategory, PostsDataRef, ReactiveRouteOptions, ReactiveRouteOptionsWithTransform, RouteQueryValueRaw, ScrollPromise, ShortPostsItem, SidebarControl, SidebarData, SidebarDataRef, TagColors, TagColorsRef, ThemeDataRef, ThemeLocaleDataRef, UseNavReturn, UseSidebarReturn, autoDirSidebar, collectionItemRef, collectionsRef, darkModeSymbol, enableTransitions, encrypt, enhanceScrollBehavior, focusedElement, forceUpdateCollection, getHeaders, getPresetLocaleData, getSidebar, getSidebarFirstLink, getSidebarGroups, hasActiveLink, headersSymbol, postsData, presetLocales, resolveHeaders, resolveTransitionKeyframes, setupCollection, setupDarkMode, setupEncrypt, setupHeaders, setupSidebar, setupThemeData, setupWatermark, sidebarData, themeData, themeLocaleDataSymbol, useActiveAnchor, useArchives, useAside, useBulletin, useBulletinControl, useCloseSidebarOnEscape, useCollection, useCollections, useContributors, useCopyright, useCssVar, useDarkMode, useData, useEditLink, useEncrypt, useEncryptCompare, useEncryptData, useFlyout, useHeaders, useIconsData, useInternalLink, useLangs, useLastUpdated, useLink, useLocalePostList, useNav, useNavbarData, usePostListControl, usePostsCategory, usePostsData, usePostsExtract, usePostsPageData, usePrevNext, useRouteQuery, useScrollPromise, useSidebar, useSidebarControl, useSidebarData, useTagColors, useTags, useThemeData, useThemeLocaleData };