UNPKG

@lobehub/editor

Version:

A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.

91 lines (90 loc) 4.33 kB
import { BaseSelection, ElementNode, LexicalEditor, LexicalNode, TextNode } from 'lexical'; import { IRootNode } from "../../../editor-kernel/inode"; import type { IEditorKernel, IServiceID } from "../../../types/kernel"; import { type MarkdownReaderFunc, type TransformerRecord, type TransfromerRecordArray } from '../data-source/markdown/parse'; import type { Transformer } from './transformers'; export interface IMarkdownWriterContext { /** * Add processor * @param processor */ addProcessor(processor: (before: string, content: string, after: string) => string): void; /** * Direct output * @param line * @returns */ appendLine: (line: string) => void; /** * Control child node to markdown * @param parentCtx * @param child * @returns */ processChild: (parentCtx: IMarkdownWriterContext, child: LexicalNode) => void; /** * Wrap child elements * @param before * @param after * @returns */ wrap: (before: string, after: string) => void; } export declare const MARKDOWN_WRITER_LEVEL_MAX = 0; export declare const MARKDOWN_READER_LEVEL_HIGH = 1; export declare const MARKDOWN_READER_LEVEL_NORMAL = 2; export type MARKDOWN_READER_LEVEL = typeof MARKDOWN_READER_LEVEL_HIGH | typeof MARKDOWN_READER_LEVEL_NORMAL | typeof MARKDOWN_WRITER_LEVEL_MAX; export interface IMarkdownShortCutService { insertIRootNode(editor: LexicalEditor, root: IRootNode, selection: BaseSelection): void; parseMarkdownToLexical(markdown: string): IRootNode; /** * Register Markdown reader */ registerMarkdownReader<K extends keyof TransformerRecord>(type: K, reader: MarkdownReaderFunc<K>, level?: MARKDOWN_READER_LEVEL): void; registerMarkdownShortCut(transformer: Transformer): void; registerMarkdownShortCuts(transformers: Transformer[]): void; /** * Register Markdown writer * @param type Lexical Node type * @param writer */ registerMarkdownWriter(type: string, writer: (ctx: IMarkdownWriterContext, node: LexicalNode) => void | boolean): void; } export declare const IMarkdownShortCutService: IServiceID<IMarkdownShortCutService>; export declare class MarkdownShortCutService implements IMarkdownShortCutService { private kernel?; private elementTransformers; private textFormatTransformers; private textMatchTransformers; private logger; private _markdownWriters; private _markdownReaders; constructor(kernel?: IEditorKernel | undefined); get markdownWriters(): Record<string, (_ctx: IMarkdownWriterContext, _node: LexicalNode) => boolean | void>; get markdownReaders(): TransfromerRecordArray; private _textFormatTransformersByTrigger; private _textMatchTransformersByTrigger; get textMatchTransformersByTrigger(): Readonly<Record<string, Readonly<{ getEndIndex?: ((node: TextNode, match: RegExpMatchArray) => number | false) | undefined; importRegExp?: RegExp | undefined; regExp: RegExp; replace?: ((node: TextNode, match: RegExpMatchArray) => void | TextNode) | undefined; trigger?: string | undefined; type: "text-match"; }>[]>>; get textFormatTransformersByTrigger(): Readonly<Record<string, readonly Readonly<{ format?: readonly import("lexical").TextFormatType[] | undefined; intraword?: boolean | undefined; process?: ((selection: import("lexical").RangeSelection) => void) | undefined; tag: string; type: "text-format"; }>[]>>; registerMarkdownShortCut(transformer: Transformer): void; registerMarkdownShortCuts(transformers: Transformer[]): void; testTransformers(parentNode: ElementNode, anchorNode: TextNode, anchorOffset: number, trigger?: 'enter'): boolean; runTransformers(parentNode: ElementNode, anchorNode: TextNode, anchorOffset: number, trigger?: 'enter'): boolean; registerMarkdownWriter(type: string, writer: (ctx: IMarkdownWriterContext, node: LexicalNode) => boolean | void): void; registerMarkdownReader<K extends keyof TransformerRecord>(type: K, reader: MarkdownReaderFunc<K>, level?: MARKDOWN_READER_LEVEL): void; parseMarkdownToLexical(markdown: string): IRootNode; insertIRootNode(editor: LexicalEditor, root: IRootNode, selection: BaseSelection): void; }