import { LocaleConfig, Plugin, PluginConfig } from '@vuepress/core';
import { KatexOptions } from 'katex';
import { ConvertLocaleConfig } from '@mr-hope/vuepress-shared';
import Token from 'markdown-it/lib/token';
import { MarkdownItContainerRenderFunction } from '@vuepress/plugin-container';
import { PluginSimple, PluginWithOptions } from 'markdown-it';
import { MarkdownEnv } from '@vuepress/markdown';
import { RuleBlock } from 'markdown-it/lib/parser_block';

/**
 * Code demo options
 */
interface CodeDemoOptions {
    /**
     * Whether to use babel to transpile to es5
     *
     * 是否使用 Babel 转义到 ES5
     *
     * @default false
     */
    useBabel: boolean;
    /**
     * JS Libray links
     *
     * 引入的 JS 外部库链接
     */
    jsLib: string[];
    /**
     * CSS Libray links
     *
     * 引入的 CSS 外部库链接
     */
    cssLib: string[];
    /**
     * Whether to display JSFiddle button
     *
     * 是否显示 JSFiddle 按钮
     *
     * @default true
     */
    jsfiddle?: boolean;
    /**
     * Whether to display CodePen button
     *
     * 是否显示 CodePen 按钮
     *
     * @default true
     */
    codepen?: boolean;
    /**
     * CodePen editor layout
     *
     * CodePen 编辑器布局
     *
     * @default "left"
     */
    codepenLayout: "top" | "left" | "right";
    /**
     * CodePen Editor Display
     *
     * CodePen 编辑器显示情况
     *
     * @default "101"
     */
    codepenEditors: "101" | "100" | "110" | "111" | "011" | "001" | "010";
    /**
     * Babel lib address
     *
     * Babel 库的地址
     *
     * @default "https://unpkg.com/@babel/standalone/babel.min.js"
     */
    babel: string;
    /**
     * Vue lib address
     *
     * Vue 库的地址
     *
     * @default "https://unpkg.com/vue/dist/vue.global.prod.js"
     */
    vue: string;
    /**
     * React lib address
     *
     * React 库的地址
     *
     * @default "https://unpkg.com/react/umd/react.production.min.js"
     */
    react: string;
    /**
     * ReactDOM lib address
     *
     * ReactDOM 库的地址
     *
     * @default "https://unpkg.com/react-dom/umd/react-dom.production.min.js"
     */
    reactDOM: string;
}

interface ImageMarkOptions {
    /**
     * lightmode only ids
     *
     * 日间模式 ID
     */
    light?: string[];
    /**
     * darkmode only ids
     *
     * 夜间模式 ID
     */
    dark?: string[];
}

interface MarkdownEnhanceLocaleData {
    /**
     * Default Title text for info block
     *
     * 信息块的默认标题
     */
    info: string;
    /**
     * Default Title text for note block
     *
     * 注释块的默认标题
     */
    note: string;
    /**
     * Default Title text for tip block
     *
     * 提示块的默认标题
     */
    tip: string;
    /**
     * Default Title text for warning block
     *
     * 注意块的默认标题
     */
    warning: string;
    /**
     * Default Title text for danger block
     *
     * 警告块的默认标题
     */
    danger: string;
    /**
     * Default Title text for details block
     *
     * 详情块的默认标题
     */
    details: string;
}
declare type MarkdownContainerName = keyof MarkdownEnhanceLocaleData;
declare type MarkdownEnhanceLocaleConfig = ConvertLocaleConfig<MarkdownEnhanceLocaleData>;

/**
 * @description This is added just because reveal.js do not have official type declaration files
 */
interface RevealOptions {
    /**
     * The "normal" size of the presentation, aspect ratio will be preserved when the presentation is scaled to fit different resolutions.
     *
     * Can be specified using percentage units.
     */
    width: number;
    /**
     * The "normal" size of the presentation, aspect ratio will be preserved when the presentation is scaled to fit different resolutions.
     *
     * Can be specified using percentage units.
     */
    height: number;
    /** Factor of the display size that should remain empty around the content */
    margin: number;
    /** Bounds for smallest/largest possible scale to apply to content */
    minScale: number;
    maxScale: number;
    /** Display presentation control arrows */
    controls: boolean;
    /** Help the user learn the controls by providing hints, for example by bouncing the down arrow when they first encounter a vertical slide */
    controlsTutorial: boolean;
    /** Determines where controls appear */
    controlsLayout: "bottom-right" | "edges";
    /** Visibility rule for backwards navigation arrows */
    controlsBackArrows: "faded" | "hidden" | "visible";
    /** Display a presentation progress bar */
    progress: boolean;
    /**
     * Display the page number of the current slide
     * - true:    Show slide number
     * - false:   Hide slide number
     *
     * Can optionally be set as a string that specifies the number formatting:
     * - "h.v":   Horizontal . vertical slide number (default)
     * - "h/v":   Horizontal / vertical slide number
     * - "c":   Flattened slide number
     * - "c/t":   Flattened slide number / total slides
     *
     * Alternatively, you can provide a function that returns the slide
     * number for the current slide. The function should take in a slide
     * object and return an array with one string [slideNumber] or
     * three strings [n1,delimiter,n2]. See #formatSlideNumber().
     */
    slideNumber: boolean | "h.v" | "h/v" | "c" | "c/t" | ((slideObject: any) => [string] | [string, string, string]);
    /**
     * Can be used to limit the contexts in which the slide number appears
     *
     * - "all":      Always show the slide number
     * - "print":    Only when printing to PDF
     * - "speaker":  Only in the speaker view
     */
    showSlideNumber: "all" | "print" | "speaker";
    /**
     * Use 1 based indexing for # links to match slide number (default is zero based)
     */
    hashOneBasedIndex: boolean;
    /**
     * Add the current slide number to the URL hash
     * so that reloading the page/copying the URL will return you to the same slide
     */
    hash: boolean;
    /**
     * Flags if we should monitor the hash and change slides accordingly
     */
    respondToHashChanges: boolean;
    /**
     * Push each slide change to the browser history.  Implies `hash: true`
     */
    history: boolean;
    /** Enable keyboard shortcuts for navigation */
    keyboard: boolean;
    /**
     * Optional function that blocks keyboard events when retuning false
     *
     * If you set this to 'focused', we will only capture keyboard events
     * for embdedded decks when they are in focus
     */
    keyboardCondition: null | "focused" | ((event: KeyboardEvent) => boolean);
    /**
     * Disables the default reveal.js slide layout (scaling and centering)
     * so that you can use custom CSS layout
     */
    disableLayout: boolean;
    /**
     * Enable the slide overview mode
     */
    overview: boolean;
    /**
     * Vertical centering of slides
     */
    center: boolean;
    /**
     * Enables touch navigation on devices with touch input
     */
    touch: boolean;
    /**
     * Loop the presentation
     */
    loop: boolean;
    /**
     * Change the presentation direction to be RTL
     */
    rtl: boolean;
    /**
     * Changes the behavior of our navigation directions.
     *
     * "default"
     * Left/right arrow keys step between horizontal slides, up/down
     * arrow keys step between vertical slides. Space key steps through
     * all slides (both horizontal and vertical).
     *
     * "linear"
     * Removes the up/down arrows. Left/right arrows step through all
     * slides (both horizontal and vertical).
     *
     * "grid"
     * When this is enabled, stepping left/right from a vertical stack
     * to an adjacent vertical stack will land you at the same vertical
     * index.
     *
     * Consider a deck with six slides ordered in two vertical stacks:
     * 1.1    2.1
     * 1.2    2.2
     * 1.3    2.3
     *
     * If you’re on slide 1.3 and navigate right, you will normally move
     * from 1.3 -> 2.1. If "grid" is used, the same navigation takes you
     * from 1.3 -> 2.3.
     */
    navigationMode: "default" | "linear" | "grid";
    /**
     * Randomizes the order of slides each time the presentation loads
     */
    shuffle: boolean;
    /**
     * Turns fragments on and off globally
     */
    fragments: boolean;
    /**
     * Flags whether to include the current fragment in the URL,
     * so that reloading brings you to the same fragment position
     */
    fragmentInURL: boolean;
    /**
     * Flags if the presentation is running in an embedded mode,
     * i.e. contained within a limited portion of the screen
     */
    embedded: boolean;
    /**
     * Flags if we should show a help overlay when the question-mark key is pressed
     */
    help: boolean;
    /**
     * Flags if it should be possible to pause the presentation (blackout)
     */
    pause: boolean;
    /**
     * Flags if speaker notes should be visible to all viewers
     */
    showNotes: boolean;
    /**
     * Global override for autolaying embedded media (video/audio/iframe)
     *
     * - `null`: Media will only autoplay if data-autoplay is present
     * - `true`: All media will autoplay, regardless of individual setting
     * - `false`: No media will autoplay, regardless of individual setting
     */
    autoPlayMedia: null | boolean;
    /**
     * Global override for preloading lazy-loaded iframes
     *
     * - `null`: Iframes with data-src AND data-preload will be loaded when within the viewDistance,
     *   iframes with only data-src will be loaded when visible
     * - `true`: All iframes with data-src will be loaded when within the viewDistance
     * - `false`: All iframes with data-src will be loaded only when visible
     */
    preloadIframes: null | boolean;
    /**
     * Can be used to globally disable auto-animation
     */
    autoAnimate: boolean;
    /**
     * Optionally provide a custom element matcher
     * that will be used to dictate which elements we can animate between.
     */
    autoAnimateMatcher: null;
    /**
     * Default settings for our auto-animate transitions,
     * can be overridden per-slide or per-element via data arguments
     */
    autoAnimateEasing: "ease" | "ease-in" | "ease-out" | "linear";
    autoAnimateDuration: number;
    autoAnimateUnmatched: boolean;
    /**
     * CSS properties that can be auto-animated.
     *
     * Position & scale is matched separately
     * so there's no need to include styles like top/right/bottom/left, width/height or margin
     */
    autoAnimateStyles: string[];
    /**
     * Controls automatic progression to the next slide
     * - `0`: Auto-sliding only happens if the data-autoslide HTML attribute
     *  is present on the current slide or fragment
     * - `1+`: All slides will progress automatically at the given interval
     * - `false`: No auto-sliding, even if data-autoslide is present
     */
    autoSlide: number | false;
    /**
     * Stop auto-sliding after user input
     */
    autoSlideStoppable: boolean;
    /**
     * Use this method for navigation when auto-sliding (defaults to navigateNext)
     */
    autoSlideMethod: null | any;
    /**
     * Specify the average time in seconds that you think you will spend presenting each slide. This is used to show a pacing timer in the speaker view
     */
    defaultTiming: null | number;
    /**
     * Enable slide navigation via mouse wheel
     */
    mouseWheel: boolean;
    /**
     * Opens links in an iframe preview overlay
     *
     * Add `data-preview-link` and `data-preview-link="false"` to customise each link individually
     */
    previewLinks: boolean;
    /**
     * Exposes the reveal.js API through window.postMessage
     */
    postMessage: boolean;
    /**
     * Dispatches all reveal.js events to the parent window through postMessage
     */
    postMessageEvents: boolean;
    /**
     * Focuses body when page changes visibility to ensure keyboard shortcuts work
     */
    focusBodyOnPageVisibilityChange: boolean;
    /**
     * Transition style
     */
    transition: "none" | "slide" | "fade" | "convex" | "concave" | "zoom";
    /**
     * Transition speed
     */
    transitionSpeed: "default" | "fast" | "slow";
    /**
     * Transition style for full page slide backgrounds
     */
    backgroundTransition: "none" | "fade" | "slide" | "convex" | "concave" | "zoom";
    /**
     * The maximum number of pages a single slide can expand onto when printing to PDF, unlimited by default
     */
    pdfMaxPagesPerSlide: number;
    /**
     * Prints each fragment on a separate slide
     */
    pdfSeparateFragments: boolean;
    /**
     * Offset used to reduce the height of content within exported PDF pages.
     * This exists to account for environment differences based on how you
     * print to PDF. CLI printing options, like phantomjs and wkpdf, can end
     * on precisely the total height of the document whereas in-browser
     * printing has to end one pixel before.
     */
    pdfPageHeightOffset: number;
    /**
     * Number of slides away from the current that are visible
     */
    viewDistance: number;
    /**
     * Number of slides away from the current that are visible on mobile devices.
     *
     * It is advisable to set this to a lower number than viewDistance in order to save resources.
     */
    mobileViewDistance: number;
    /**
     * The display mode that will be used to show slides
     */
    display: "block";
    /**
     * Hide cursor if inactive
     */
    hideInactiveCursor: boolean;
    /**
     * Time before the cursor is hidden (in ms)
     */
    hideCursorTime: number;
    plugins: any[];
}

declare type RevealPlugin = "highlight" | "math" | "search" | "notes" | "zoom";
interface PresentationOptions {
    /**
     * Reveal plugins enabled
     *
     * 启用的 Reveal.js 插件
     */
    plugins?: RevealPlugin[];
    /**
     * Config options passed directly to reval.js
     *
     * 直接传入 reval.js 的配置项
     */
    revealConfig?: Partial<RevealOptions>;
}

interface TaskListOptions {
    /**
     * 是否使用 `<label>` 来包裹文字
     *
     * Whether use `<label>` to wrap text
     *
     * @default true
     */
    label?: boolean;
    /**
     * 是否将 `<label>` 放置在 `<input>` 后还是包裹住 `<input>`
     *
     * Whether place `<label>` after `<input>` or wrap `<input>`
     *
     * @default true
     */
    labelAfter?: boolean;
}

/**
 * md-enhance plugin configuration
 */
interface MarkdownEnhanceOptions {
    /**
     * Whether enable standard GFM support
     *
     * 是否启用标准的 GitHub Favor Markdown 支持
     *
     * @default false
     */
    gfm?: boolean;
    /**
     * Whether to enable custom container including
     *
     * - info
     * - note
     * - tip
     * - warning
     * - danger
     * - details
     *
     * ⚠ The last 4 items conflict with default theme and will overide it’s style.
     *
     * 是否启用自定义容器
     *
     * - info
     * - note
     * - tip
     * - warning
     * - danger
     * - details
     *
     * ⚠ 最后四个会和默认主题冲突，且会覆盖默认主题的样式与行为。
     *
     * @default false
     */
    container?: boolean;
    /**
     * Whether to enable v-pre wrapper.
     *
     * 是否启用 v-pre 容器。
     *
     * @default false
     */
    vpre?: boolean;
    /**
     * Whether to enable codegroup.
     *
     * 是否启用代码组。
     *
     * @default false
     */
    codegroup?: boolean;
    /**
     * Whether to enable align support
     *
     * 是否启用自定义对齐支持。
     *
     * @default false
     */
    align?: boolean;
    /**
     * Whether to enable superscript format support
     *
     * 是否启用上角标格式支持。
     *
     * @default false
     */
    sup?: boolean;
    /**
     * Whether to enable subscript format support
     *
     * 是否启用下角标格式支持。
     *
     * @default false
     */
    sub?: boolean;
    /**
     * Whether to enable footnote format support
     *
     * 是否启用脚注格式支持。
     *
     * @default false
     */
    footnote?: boolean;
    /**
     * Whether enable native image lazy loading
     *
     * 是否启用原生的图片懒加载。
     *
     * @default false
     */
    lazyLoad?: boolean;
    /**
     * Whether to enable gfm image id mark support
     *
     * 是否启用 GFM 图片 ID 标记。
     *
     * @default false
     */
    imageMark?: boolean;
    /**
     * Whether to enable mark format support
     *
     * 是否启用标注支持。
     *
     * @default false
     */
    mark?: boolean;
    /**
     * Whether to enable tastlist format support
     *
     * 是否启用任务列表支持
     *
     * @default false
     */
    tasklist?: TaskListOptions | boolean;
    /**
     * Whether to enable markdown import syntax support\
     *
     * 是否启用 Markdown 导入语法支持
     *
     * @default false
     */
    mdImport?: (path: string) => string | boolean;
    /**
     * Whether to enable TeX syntax support
     *
     * @see https://katex.org/docs/options.html
     *
     * 是否启用 TeX 语法支持
     *
     * @see https://katex.org/docs/options.html
     *
     * @default false
     */
    tex?: KatexOptions | boolean;
    /**
     * Whether to enable chart support
     *
     * 是否启用 chart 图表支持
     *
     * @default false
     */
    chart?: boolean;
    /**
     * Whether to enable flowchart support
     *
     * 是否启用 flowchart 流程图支持
     *
     * @default false
     */
    flowchart?: boolean;
    /**
     * Whether to enable mermaid support
     *
     * 是否启用 Mermaid 流程图支持
     *
     * @default false
     */
    mermaid?: boolean;
    /**
     * Whether to enable code-demo support
     *
     * 是否启用代码示例功能
     *
     * @default false
     */
    demo?: Partial<CodeDemoOptions> | boolean;
    /**
     * Whether to enable presentation support
     *
     * 是否启用幻灯片支持
     *
     * @default false
     */
    presentation?: PresentationOptions | boolean;
    /**
     * Whether to enable all features.
     *
     * 是否启用全部增强语法
     *
     * @default false
     */
    enableAll?: boolean;
    /**
     * The delay of operating dom, in ms
     *
     * If the theme you are using has a switching animation, it is recommended to configure this option to `Switch animation duration + 200`
     *
     * 操作页面 DOM 的延时，单位 ms
     *
     * 如果你使用的主题有切换动画，建议配置此选项为 `切换动画时长 + 200`
     *
     * @default 500
     */
    delay?: number;
    /**
     * Locale config
     *
     * 国际化配置选项
     */
    locales?: LocaleConfig<MarkdownEnhanceLocaleData>;
}

declare const mdEnhancePlugin: Plugin<MarkdownEnhanceOptions>;
declare const mdEnhance: (options: MarkdownEnhanceOptions | false) => PluginConfig<MarkdownEnhanceOptions>;

declare const chartRender: (tokens: Token[], index: number) => string;

declare const codeDemoRender: (tokens: Token[], index: number) => string;
declare const codeDemoDefaultSetting: CodeDemoOptions;

declare const getDetailsRender: (locales: LocaleConfig<{
    defaultInfo: string;
}>) => MarkdownItContainerRenderFunction;

declare const flowchart: PluginSimple;

/**
 * Forked from https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js
 *
 * Copyright (c) 2014-2015 Vitaly Puzrin, Alex Kocharin.
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

declare const footnote: PluginSimple;

/***************************************************
 * Created by nanyuantingfeng on 2020/3/1 10:10. *
 ***************************************************/

declare const imageMark: PluginWithOptions<ImageMarkOptions>;

/**
 * Forked from https://github.com/waylonflinn/markdown-it-katex/blob/master/index.js
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2016 Waylon Flinn
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

declare const katex: PluginWithOptions<KatexOptions>;

declare const lazyLoad: PluginSimple;

/**
 * Forked from https://github.com/markdown-it/markdown-it-mark/blob/master/index.js
 *
 * Copyright (c) 2014-2015 Vitaly Puzrin, Alex Kocharin.
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

declare const mark: PluginSimple;

interface ImportMarkdownTokenMeta {
    importPath: string;
    lineStart: number;
    lineEnd?: number;
}
declare const createImportMarkdownBlockRule: (handleImportPath: (path: string) => string) => RuleBlock;
declare const resolveImportMarkdown: ({ importPath, lineStart, lineEnd }: ImportMarkdownTokenMeta, { filePath }: MarkdownEnv) => {
    importFilePath: string | null;
    importContent: string;
};
declare const mdImport: PluginWithOptions<(path: string) => string>;

declare const mermaid: PluginSimple;

declare const presentation: PluginSimple;

/**
 * Forked from https://github.com/markdown-it/markdown-it-sub/blob/master/index.js
 *
 * Copyright (c) 2014-2015 Vitaly Puzrin, Alex Kocharin.
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

declare const sub: PluginSimple;

/**
 * Forked from https://github.com/markdown-it/markdown-it-sup/blob/master/index.js
 *
 * Copyright (c) 2014-2015 Vitaly Puzrin, Alex Kocharin.
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

declare const sup: PluginSimple;

/**
 * Forked from https://github.com/revin/markdown-it-task-lists/blob/master/index.js
 *
 * Copyright (c) 2016, Revin Guillen
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

declare const tasklist: PluginWithOptions<TaskListOptions>;

export { CodeDemoOptions, ImageMarkOptions, ImportMarkdownTokenMeta, MarkdownContainerName, MarkdownEnhanceLocaleConfig, MarkdownEnhanceLocaleData, MarkdownEnhanceOptions, PresentationOptions, RevealPlugin, TaskListOptions, chartRender, codeDemoDefaultSetting, codeDemoRender, createImportMarkdownBlockRule, mdEnhancePlugin as default, flowchart, footnote, getDetailsRender, imageMark, katex, lazyLoad, mark, mdEnhance, mdEnhancePlugin, mdImport, mermaid, presentation, resolveImportMarkdown, sub, sup, tasklist };
