@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
TypeScript
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;
}