import { IMarkdownString } from "../common/htmlContent.js";
import { IDisposable } from "../common/lifecycle.js";
import * as marked from "../common/marked/marked.js";
import { URI } from "../common/uri.js";
import * as domSanitize from "./domSanitize.js";
export type MarkdownActionHandler = (linkContent: string, mdStr: IMarkdownString) => void;
/**
* Options for the rendering of markdown with {@link renderMarkdown}.
*/
export interface MarkdownRenderOptions {
readonly codeBlockRenderer?: (languageId: string, value: string) => Promise;
readonly codeBlockRendererSync?: (languageId: string, value: string, raw?: string) => HTMLElement;
readonly asyncRenderCallback?: () => void;
readonly actionHandler?: MarkdownActionHandler;
readonly fillInIncompleteTokens?: boolean;
readonly sanitizerConfig?: MarkdownSanitizerConfig;
readonly markedOptions?: MarkdownRendererMarkedOptions;
readonly markedExtensions?: marked.MarkedExtension[];
}
/**
* Subset of options passed to `Marked` for rendering markdown.
*/
export interface MarkdownRendererMarkedOptions {
readonly gfm?: boolean;
readonly breaks?: boolean;
}
export interface MarkdownSanitizerConfig {
readonly replaceWithPlaintext?: boolean;
readonly allowedTags?: {
readonly override: readonly string[];
};
readonly allowedAttributes?: {
readonly override: ReadonlyArray;
};
readonly allowedLinkSchemes?: {
readonly augment: readonly string[];
};
readonly remoteImageIsAllowed?: (uri: URI) => boolean;
}
export interface IRenderedMarkdown extends IDisposable {
readonly element: HTMLElement;
}
/**
* Low-level way create a html element from a markdown string.
*
* **Note** that for most cases you should be using {@link import('../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js').MarkdownRenderer MarkdownRenderer}
* which comes with support for pretty code block rendering and which uses the default way of handling links.
*/
export declare function renderMarkdown(markdown: IMarkdownString, options?: MarkdownRenderOptions, target?: HTMLElement): IRenderedMarkdown;
export declare const allowedMarkdownHtmlTags: readonly string[];
export declare const allowedMarkdownHtmlAttributes: readonly (string | domSanitize.SanitizeAttributeRule)[];
/**
* Renders `str` as plaintext, stripping out Markdown syntax if it's a {@link IMarkdownString}.
*
* For example `# Header` would be output as `Header`.
*/
export declare function renderAsPlaintext(str: IMarkdownString | string, options?: {
/** Controls if the ``` of code blocks should be preserved in the output or not */
readonly includeCodeBlocksFences?: boolean;
/** Controls if we want to format empty links from "Link [](file)" to "Link file" */
readonly useLinkFormatter?: boolean;
}): string;
export declare function fillInIncompleteTokens(tokens: marked.TokensList): marked.TokensList;