UNPKG

@lexical/markdown

Version:

This package contains Markdown helpers and functionality for Lexical.

144 lines (129 loc) 4.19 kB
/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow strict */ import type { BaseSelection, LexicalEditor, LexicalNode, ElementNode, TextFormatType, TextNode, } from 'lexical'; export type Transformer = | ElementTransformer | MultilineElementTransformer | TextFormatTransformer | TextMatchTransformer; export type ElementTransformer = { dependencies: Class<LexicalNode>[], export: ( node: LexicalNode, traverseChildren: (node: ElementNode) => string, ) => string | null, regExp: RegExp, replace: ( parentNode: ElementNode, children: LexicalNode[], match: string[], isImport: boolean, ) => boolean | void, type: 'element', triggerOnEnter?: boolean, }; export type MultilineElementTransformer = { dependencies: Class<LexicalNode>[]; export?: ( node: LexicalNode, traverseChildren: (node: ElementNode) => string, ) => string | null; handleImportAfterStartMatch?: (args: { lines: string[]; rootNode: ElementNode; startLineIndex: number; startMatch: RegExp$matchResult; transformer: MultilineElementTransformer; }) => [boolean, number] | null | void; regExpStart: RegExp; regExpEnd?: | RegExp | { optional?: true; regExp: RegExp; }; replace: ( rootNode: ElementNode, children: LexicalNode[] | null, startMatch: string[], endMatch: string[] | null, linesInBetween: string[] | null, isImport: boolean, ) => boolean | void; type: 'multiline-element'; }; export type TextFormatTransformer = Readonly<{ format: ReadonlyArray<TextFormatType>, tag: string, intraword?: boolean, type: 'text-format', }>; export type TextMatchTransformer = Readonly<{ dependencies: Class<LexicalNode>[], export?: ( node: LexicalNode, exportChildren: (node: ElementNode) => string, exportFormat: (node: TextNode, textContent: string) => string, ) => string | null, getEndIndex?: (node: TextNode, match: RegExp$matchResult) => number | false; importRegExp?: RegExp, regExp: RegExp, replace?: (node: TextNode, match: RegExp$matchResult) => void | TextNode, trigger?: string, type: 'text-match', }>; declare export function registerMarkdownShortcuts( editor: LexicalEditor, transformers?: Transformer[], ): () => void; declare export function $convertFromMarkdownString( markdown: string, transformers?: Transformer[], node?: ElementNode, shouldPreserveNewLines?: boolean, shouldMergeAdjacentLines?: boolean, ): void; declare export function $convertSelectionToMarkdownString( transformers?: Transformer[], selection: BaseSelection | null, shouldPreserveNewLines?: boolean, ): string; declare export function $convertToMarkdownString( transformers?: Transformer[], node?: ElementNode, shouldPreserveNewLines?: boolean, ): string; declare export var INLINE_CODE: TextFormatTransformer; declare export var HIGHLIGHT: TextFormatTransformer; declare export var BOLD_ITALIC_STAR: TextFormatTransformer; declare export var BOLD_ITALIC_UNDERSCORE: TextFormatTransformer; declare export var BOLD_STAR: TextFormatTransformer; declare export var BOLD_UNDERSCORE: TextFormatTransformer; declare export var STRIKETHROUGH: TextFormatTransformer; declare export var ITALIC_STAR: TextFormatTransformer; declare export var ITALIC_UNDERSCORE: TextFormatTransformer; declare export var HEADING: ElementTransformer; declare export var QUOTE: ElementTransformer; declare export var CODE: MultilineElementTransformer; declare export var UNORDERED_LIST: ElementTransformer; declare export var CHECK_LIST: ElementTransformer; declare export var ORDERED_LIST: ElementTransformer; declare export var LINK: TextMatchTransformer; declare export var TRANSFORMERS: Transformer[]; declare export var ELEMENT_TRANSFORMERS: ElementTransformer[]; declare export var MULTILINE_ELEMENT_TRANSFORMERS: MultilineElementTransformer[]; declare export var TEXT_FORMAT_TRANSFORMERS: TextFormatTransformer[]; declare export var TEXT_MATCH_TRANSFORMERS: TextFormatTransformer[];