import Token from "markdown-it/lib/token.mjs"; import { App } from "vuepress"; import { Markdown, MarkdownEnv } from "vuepress/markdown"; import { BuiltinTheme, ThemeRegistration } from "shiki"; import "markdown-it"; import { Plugin } from "vuepress/core"; //#region src/shared/caniuse.d.ts type CanIUseMode = "embed" | "image"; interface CanIUseTokenMeta { feature: string; mode: CanIUseMode; versions: string; } interface CanIUseOptions { /** * 嵌入模式 * * embed 通过iframe嵌入,提供可交互视图 * * image 通过图片嵌入,静态 * * @default 'embed' */ mode?: CanIUseMode; } //#endregion //#region src/shared/size.d.ts interface SizeOptions { width?: string; height?: string; ratio?: number | string; } //#endregion //#region src/shared/codepen.d.ts interface CodepenTokenMeta extends SizeOptions { title?: string; user?: string; slash?: string; tab?: string; theme?: string; preview?: boolean; editable?: boolean; } //#endregion //#region src/shared/codeSandbox.d.ts interface CodeSandboxTokenMeta extends SizeOptions { user?: string; id?: string; layout?: string; type?: "button" | "embed"; title?: string; filepath?: string; navbar?: boolean; console?: boolean; } //#endregion //#region src/shared/codeTabs.d.ts interface CodeTabsOptions { icon?: boolean | { named?: false | string[]; extensions?: false | string[]; }; } //#endregion //#region src/shared/demo.d.ts interface DemoFile { type: "vue" | "normal" | "css" | "markdown"; export?: string; path: string; gitignore?: boolean; } interface MarkdownDemoEnv extends MarkdownEnv { demoFiles?: DemoFile[]; } interface DemoMeta { type: "vue" | "normal" | "markdown"; url: string; title?: string; desc?: string; codeSetting?: string; expanded?: boolean; } interface DemoContainerRender { before: (app: App, md: Markdown, env: MarkdownDemoEnv, meta: DemoMeta, codeMap: Record) => string; after: () => string; token?: (token: Token, tokens: Token[], index: number) => void; } //#endregion //#region src/shared/fileTree.d.ts type FileTreeIconMode = "simple" | "colored"; interface FileTreeOptions { icon?: FileTreeIconMode; } //#endregion //#region src/shared/icon.d.ts type IconOptions = IconifyProvider | IconFontProvider | FontAwesomeProvider; interface IconProviderBase { /** * The provider of the icon * * 图标提供商 * @default 'iconify' */ provider?: "iconify" | "iconfont" | "fontawesome"; /** * The size of the icon * @default '1em' */ size?: string | number; /** * The color of the icon * @default 'currentColor' */ color?: string; } interface IconFontProvider extends IconProviderBase { provider?: "iconfont"; /** * The prefix of the iconfont * @default 'iconfont icon-' */ prefix?: string; /** * The assets of the iconfont */ assets?: IconAssetLink | IconAssetLink[]; } interface FontAwesomeProvider extends IconProviderBase { provider?: "fontawesome"; /** * The prefix of the fontawesome icon * @default 'fas' */ prefix?: LiteralUnion; /** * The assets of the fontawesome * @default 'fontawesome' */ assets?: FontAwesomeAssetBuiltIn | IconAssetLink | (IconAssetLink | FontAwesomeAssetBuiltIn)[]; } interface IconifyProvider extends IconProviderBase { provider?: "iconify"; /** * The prefix of the icon * @default '' */ prefix?: LiteralUnion; } type FontAwesomeAssetBuiltIn = "fontawesome" | "fontawesome-with-brands"; type IconAssetLink = `//${string}` | `//${string}` | `https://${string}` | `http://${string}`; type FontAwesomePrefix = "fas" | "s" | "far" | "r" | "fal" | "l" | "fat" | "t" | "fads" | "ds" | "fass" | "ss" | "fasr" | "sr" | "fasl" | "sl" | "fast" | "st" | "fasds" | "sds" | "fab" | "b"; type IconifyPrefix = "material-symbols" | "material-symbols-light" | "ic" | "mdi" | "mdi-light" | "line-md" | "solar" | "tabler" | "hugeicons" | "mingcute" | "ri" | "mynaui" | "iconamoon" | "iconoir" | "lucide" | "lucide-lab" | "uil" | "tdesign" | "si" | "bx" | "bxs" | "majesticons" | "gg" | "flowbite" | "basil" | "pixelarticons" | "pixel" | "akar-icons" | "ci" | "proicons" | "typcn" | "meteor-icons" | "prime" | "circum" | "fe" | "eos-icons" | "bitcoin-icons" | "humbleicons" | "uim" | "uit" | "uis" | "gridicons" | "mi" | "cuida" | "weui" | "duo-icons" | "svg-spinners" | "lets-icons" | "mage" | "stash" | "lineicons" | "icon-park-outline" | "icon-park-solid" | "icon-park-twotone" | "jam" | "guidance" | "carbon" | "ion" | "famicons" | "ant-design" | "lsicon" | "gravity-ui" | "cil" | "ep" | "charm" | "quill" | "bytesize" | "bi" | "rivet-icons" | "nimbus" | "formkit" | "fluent" | "ph" | "teenyicons" | "clarity" | "ix" | "octicon" | "memory" | "system-uicons" | "radix-icons" | "zondicons" | "uiw" | "maki" | "codex" | "ei" | "heroicons" | "pepicons-pop" | "pepicons-print" | "pepicons-pencil" | "f7" | "pajamas" | "garden" | "streamline" | "fa6-solid" | "fa6-regular" | "picon" | "ooui" | "oui" | "nrk" | "qlementine-icons" | "fluent-color" | "icon-park" | "marketeq" | "vscode-icons" | "codicon" | "material-icon-theme" | "file-icons" | "devicon" | "devicon-plain" | "catppuccin" | "skill-icons" | "unjs" | "simple-icons" | "logos" | "cib" | "fa6-brands" | "bxl" | "nonicons" | "arcticons" | "cbi" | "brandico" | "entypo-social" | "token" | "token-branded" | "cryptocurrency" | "cryptocurrency-color" | "openmoji" | "twemoji" | "noto" | "fluent-emoji" | "fluent-emoji-flat" | "fluent-emoji-high-contrast" | "noto-v1" | "emojione" | "emojione-monotone" | "emojione-v1" | "fxemoji" | "streamline-emojis" | "circle-flags" | "flag" | "flagpack" | "cif" | "gis" | "map" | "geo" | "game-icons" | "fad" | "academicons" | "wi" | "meteocons" | "healthicons" | "medical-icon" | "covid" | "la" | "eva" | "dashicons" | "flat-color-icons" | "entypo" | "foundation" | "raphael" | "icons8" | "iwwa" | "gala" | "heroicons-outline" | "heroicons-solid" | "fa-solid" | "fa-regular" | "fa-brands" | "fa" | "fluent-mdl2" | "fontisto" | "icomoon-free" | "subway" | "oi" | "wpf" | "simple-line-icons" | "et" | "el" | "vaadin" | "grommet-icons" | "whh" | "si-glyph" | "zmdi" | "ls" | "bpmn" | "flat-ui" | "vs" | "topcoat" | "il" | "websymbol" | "fontelico" | "ps" | "feather" | "mono-icons" | "pepicons"; type LiteralUnion = Union | (Base & { zz_IGNORE_ME?: never; }); //#endregion //#region src/shared/jsfiddle.d.ts interface JSFiddleTokenMeta extends SizeOptions { source: string; title?: string; theme?: string; tab?: string; } //#endregion //#region src/shared/npmTo.d.ts type NpmToPackageManager = "npm" | "pnpm" | "yarn" | "bun" | "deno"; type NpmToOptions = NpmToPackageManager[] | { tabs?: NpmToPackageManager[]; }; //#endregion //#region src/shared/pdf.d.ts type PDFEmbedType = "iframe" | "embed" | "pdfjs"; interface PDFTokenMeta extends SizeOptions { page?: number; noToolbar?: boolean; zoom?: number; src?: string; title?: string; } interface PDFOptions { /** * pdfjs url */ pdfjsUrl?: string; } //#endregion //#region src/shared/plot.d.ts /** * 是否启用 `!! !!` markdown (该标记为非标准标记,脱离插件将不生效) */ interface PlotOptions { /** * 触发方式 * * @default 'hover' */ trigger?: "hover" | "click"; /** * 遮罩层效果 * * @default 'mask' */ effect?: "mask" | "blur"; } //#endregion //#region src/shared/codeTree.d.ts interface CodeTreeOptions { icon?: FileTreeIconMode; height?: string | number; } //#endregion //#region src/shared/repl.d.ts type ThemeOptions = BuiltinTheme | { light: BuiltinTheme; dark: BuiltinTheme; }; interface ReplOptions { theme?: ThemeOptions; go?: boolean; kotlin?: boolean; rust?: boolean; python?: boolean; } interface ReplEditorData { grammars: { go?: any; kotlin?: any; rust?: any; python?: any; }; theme: ThemeRegistration | { light: ThemeRegistration; dark: ThemeRegistration; }; } //#endregion //#region src/shared/table.d.ts interface TableContainerOptions { /** * 表格对齐方式 * - 'left': 左对齐 * - 'center': 居中对齐 * - 'right': 右对齐 * * @default 'left' */ align?: "left" | "center" | "right"; /** * 表格复制 * - true: 等同于 `all`,支持复制为 html 和 markdown 格式 * - 'all': 支持复制为 html 和 markdown 格式 * - 'html': 只支持复制为 html 格式 * - 'md': 只支持复制为 markdown 格式 * - `false`: 禁用复制 * * @default true */ copy?: boolean | "all" | "html" | "md"; /** * 表格宽度是否为最大内容宽度 * * 最大内容宽度时,行内元素不再自动换行,超出容器宽度时表格显示滚动条 * * @default false */ maxContent?: boolean; } //#endregion //#region src/shared/plugin.d.ts interface MarkdownPowerPluginOptions { /** * 是否启用注释 * @default false */ annotation?: boolean; /** * 是否启用 abbr 语法 * @default false */ abbr?: boolean; /** * 配置代码块分组 */ codeTabs?: CodeTabsOptions; /** * 是否启用 npm-to 容器 */ npmTo?: boolean | NpmToOptions; /** * 是否启用 PDF 嵌入语法 * * `@[pdf](pdf_url)` * * @default false */ pdf?: boolean | PDFOptions; /** * 是否启用 图标支持 * - iconify - `::collect:icon_name::` => `` * - iconfont - `::name::` => `` * - fontawesome - `::fas:name::` => `` * * @default false */ icon?: IconOptions; /** * 是否启用 iconify 图标嵌入语法 * * `::collect:icon_name::` * * @default false * @deprecated use `icon` instead 该配置已弃用,请使用 `icon` 代替 */ icons?: boolean | IconOptions; /** * 是否启用 隐秘文本 语法 * * `!!plot_content!!` * * @default false */ plot?: boolean | PlotOptions; /** * 是否启用 timeline 语法 * * ```md * ::: timeline * - title * time="Q1" icon="ri:clockwise-line" line="dashed" type="warning" color="red" * * xxx * ::: * ``` * * @default false */ timeline?: boolean; /** * 是否启用 collapse 折叠面板 语法 * * ```md * ::: collapse accordion * - + title * * content * * - - title * * content * ::: * ``` * * @default false */ collapse?: boolean; /** * 是否启用 chat 容器 语法 * * ```md * ::: chat * {:date} * * {user} * message * * {.} * message * ::: * ``` * @default false */ chat?: boolean; /** * 是否启用 field / field-group 容器 * * @default false */ field?: boolean; /** * 是否启用 acfun 视频嵌入 * * `@[acfun](acid)` * * @default false */ acfun?: boolean; /** * 是否启用 bilibili 视频嵌入 * * `@[bilibili](bid)` * * @default false */ bilibili?: boolean; /** * 是否启用 youtube 视频嵌入 * * `@[youtube](video_id)` * * @default false */ youtube?: boolean; /** * 是否启用 artPlayer 视频嵌入 * * `@[artPlayer](url)` */ artPlayer?: boolean; /** * 是否启用 audioReader 音频嵌入 * * `@[audioReader](url)` */ audioReader?: boolean; /** * 是否启用 codepen 嵌入 * * `@[codepen](pen_id)` * * @default false */ codepen?: boolean; /** * @deprecated */ replit?: boolean; /** * 是否启用 codeSandbox 嵌入 * * `@[codesandbox](codesandbox_id)` * * @default false */ codeSandbox?: boolean; /** * 是否启用 jsfiddle 嵌入 * * `@[jsfiddle](jsfiddle_id)` * * @default false */ jsfiddle?: boolean; /** * 是否启用 REPL 容器语法 * * @default false */ repl?: false | ReplOptions; /** * 是否启用 文件树 容器语法 * * @default false */ fileTree?: boolean | FileTreeOptions; /** * 是否启用 代码树 容器语法 和 嵌入语法 * * ```md * ::: code-tree * ::: * ``` * * `@[code-tree](file_path)` * * * @default false */ codeTree?: boolean | CodeTreeOptions; /** * 是否启用 demo 语法 */ demo?: boolean; /** * 是否启用 caniuse 嵌入语法 * * `@[caniuse](feature_name)` * * @default false */ caniuse?: boolean | CanIUseOptions; /** * 是否启用 table 容器语法,为表格提供增强功能 * * - `copy`: 是否启用复制功能,支持复制为 html 格式 和 markdown 格式 * * @default false */ table?: boolean | TableContainerOptions; /** * 是否启用 自动填充 图片宽高属性 * * __请注意,无论是否启用,该功能仅在构建生产包时生效__ * * - 如果为 `true` ,等同于 `'local'` * - 如果为 `local`,则仅对本地图片 添加 width 和 height * - 如果为 `all`,则对所有图片(即包括 本地 和 远程) 添加 width 和 height * * 图片在加载过程中如果比较慢,从加载到完成的过程会导致页面布局不稳定,导致内容闪烁等。 * 此功能通过给图片添加 `width` 和 `height` 属性来解决该问题。 * * 请谨慎使用 `all` 选项,该选项会在构建阶段发起网络请求,尝试加载远程图片以获取图片尺寸信息, * 这可能会导致 构建时间变得更长(幸运的是获取尺寸信息只需要加载图片 几 KB 的数据包,因此耗时不会过长) * * @default false */ imageSize?: boolean | "local" | "all"; } //#endregion //#region src/shared/replit.d.ts interface ReplitTokenMeta extends SizeOptions { title?: string; source?: string; theme?: string; } //#endregion //#region src/shared/video.d.ts interface VideoOptions { bilibili?: boolean; youtube?: boolean; } interface AcFunTokenMeta extends SizeOptions { title?: string; id: string; } interface BilibiliTokenMeta extends SizeOptions { title?: string; bvid?: string; aid?: string; cid?: string; autoplay?: boolean; time?: string | number; page?: number; } interface YoutubeTokenMeta extends SizeOptions { title?: string; id: string; autoplay?: boolean; loop?: boolean; start?: string | number; end?: string | number; } interface ArtPlayerTokenMeta extends SizeOptions { muted?: boolean; autoplay?: boolean; autoMini?: boolean; loop?: boolean; volume?: number; poster?: string; url: string; type?: string; } //#endregion //#region src/node/container/codeTabs.d.ts declare function createCodeTabIconGetter(options?: CodeTabsOptions): (filename: string) => string | void; //#endregion //#region src/node/enhance/imageSize.d.ts interface ImgSize { width: number; height: number; } declare function resolveImageSize(app: App, url: string, remote?: boolean): Promise; //#endregion //#region src/node/plugin.d.ts declare function markdownPowerPlugin(options?: MarkdownPowerPluginOptions): Plugin; //#endregion export { AcFunTokenMeta, ArtPlayerTokenMeta, BilibiliTokenMeta, CanIUseMode, CanIUseOptions, CanIUseTokenMeta, CodeSandboxTokenMeta, CodeTabsOptions, CodepenTokenMeta, DemoContainerRender, DemoFile, DemoMeta, FileTreeIconMode, FileTreeOptions, FontAwesomeAssetBuiltIn, FontAwesomePrefix, FontAwesomeProvider, IconAssetLink, IconFontProvider, IconOptions, IconProviderBase, IconifyPrefix, IconifyProvider, JSFiddleTokenMeta, LiteralUnion, MarkdownDemoEnv, MarkdownPowerPluginOptions, NpmToOptions, NpmToPackageManager, PDFEmbedType, PDFOptions, PDFTokenMeta, PlotOptions, ReplEditorData, ReplOptions, ReplitTokenMeta, SizeOptions, ThemeOptions, VideoOptions, YoutubeTokenMeta, createCodeTabIconGetter, markdownPowerPlugin, resolveImageSize };