/// /// import { AuthMessage, AuthPermission } from "../../../commons/auth-message"; import { EventEmitter } from 'events'; import OTClient, { DocContainer, Op, DocBlock, BlockLockInfo, DocVersion, TextAlign, OnProgress } from "../ot/index"; import UndoState from "../undo/index"; import RemoteCaretPos from "../blocks/remote-carets/RemoteCaretPos"; import { EditorDoc, RootElement, ContainerElement, BlockElement, BoxElement, EditorOptions, Editor, CaretPos, BLOCK_TYPE, BlockData, BlockTypes, Block, RemoteUserCaretPos, BoxData, BoxTemplateData, TextCommand, BlockCommand, CommandParams, SelectionDetail, Position, DeleteBlockOptions, EmbedData, EMBED_TYPE, TextToolbar, ContextMenu, InsertBlockOptions, ReplaceBlockOptions, UpdateBlockDataOptions, UpdateBlockTextOptions, BlockTemplateData, DialogOptions, StandardDialogOptions, StandardInputDialog, StandardConfirmDialog, AgentSelector, AutoSuggest, Tooltip, BOX_TYPE, InsertBoxOptions, Dialog, CommentData, SelectionState, CommandTargetInfo, Popover, CommandStatus, LinkDetails, OnlineUsers, OnlineUserChange, EditableToolbar, BreakTextBlockOptions, ActionOperatorOptions, FileBoxTemplateData, FilePreviewType, EditorOp, ThemeModeType, TextInputBoxTemplateData, CheckInputBoxTemplateData, SelectBoxTemplateData, EDITOR_EVENT, FloatMenu, WikiLinkBoxTemplateData, VersionDialogOptions, QuickInsertMenuTrigger, EMBED_MEDIA_TYPE, ImageBoxData, DocTemplate, CompositionData, HeadingBlockScrollListenerCallbackResult, IImageOptions, WikiLinkBoxData } from "../interface"; import '../static/css/variables.css'; import '../static/css/editor.css'; import '../static/css/editorDarkPatch.css'; import '../static/css/editorFullscreen.css'; import RichTextOperations from "../text/RichTextOperations"; import RichTextDocument from "../text/RichTextDocument"; import EditorBlockMenuButton from "../ui/BlockMenuButton"; import FindDialog from "../find/FindDialog"; import EditorCommentsContainer from "../comment/CommentsContainer"; import "../blocks/box/TagBox"; import "../blocks/box/WikiLinkBox"; import "../blocks/box/MentionBox"; import "../blocks/box/MathBox"; import "../blocks/box/CalendarBox"; import "../blocks/box/LoadingBox"; import "../blocks/box/FileBox"; import "../blocks/box/InputBox"; import "../blocks/box/BrBox"; import "../blocks/box/ImageBox"; import "../blocks/box/AnchorBox"; import "../blocks/box/QuickInsertBox"; import EditorVersionDialog from "../version/VersionDialog"; import { EditorBlockCommentButton } from "../ui/BlockCommentButton"; import { BlockInfoForComposition } from "./apply-remote-ops-for-composition"; interface RemoteCaretPosMessage { type: 'remoteCaretPos'; userId: string; caretPos: CaretPos; endCaretPos: CaretPos; keyPressed: boolean; } interface ExclusiveBlockMessage { type: 'exclusiveBlock'; userId: string; displayName: string; blockIds: string[]; exclusive: boolean; } export default class EditorImpl implements Editor { editorElement: HTMLElement; rootElement: RootElement; rootContainerElement: ContainerElement; loader: HTMLElement; static editors: Map; static commandTarget: CommandTargetInfo | null; themeMode: ThemeModeType; otClient: OTClient; doc: DocContainer | null; undoState: UndoState; remoteCaretPos: RemoteCaretPos; options: EditorOptions; lastCaretPos: CaretPos; lastEndCaretPos: CaretPos; lastDragBlock: BlockElement | null; broadcastCaretMessage: import("lodash").DebouncedFunc<(message: RemoteCaretPosMessage) => void>; compositing: boolean; compositionData: CompositionData; waitingCommand: CommandParams | null; lastEvent: MouseEvent | KeyboardEvent | null; lastEventDateTime: number; lastPosition: Position; isLastRangeInEditor: boolean; lastSelectionDetail: SelectionDetail | null; autoSuggest: AutoSuggest; tooltip: Tooltip | null; textToolbar: TextToolbar; editableToolbar: EditableToolbar; contextMenu: ContextMenu; contextMenuTime: number; floatMenu: FloatMenu; blockMenuButton?: EditorBlockMenuButton; blockCommentButton?: EditorBlockCommentButton; mouseDown: boolean; keyPressed: boolean; dirty: boolean; agentSelector: AgentSelector; exclusiveBlocks: Set; exclusiveBlockTimer: number; auth: AuthMessage; parentEditor: Editor | null; updateComments: import("lodash").DebouncedFunc<() => void>; updateCommentsPosition: import("lodash").DebouncedFunc<() => void>; updateCommandStatus: import("lodash").DebouncedFunc<() => void>; readonly: boolean; readonlyBeforeFullscreen: boolean; commentsContainer: EditorCommentsContainer; events: EventEmitter; elementRemoveListener: MutationObserver | null; loaded: boolean; dragging: boolean; boxDataMap: Map; hoverBlock: BlockElement | null; hoverComplexBlock: BlockElement | null; entireSelectedBlock: BlockElement | null; selectEntireBlockTime: number; hoverImage: HTMLImageElement | null; focusedImage: HTMLImageElement | null; focusedBlock: BlockElement | null; findDialog: FindDialog; versionDialog: EditorVersionDialog; onChange: import("lodash").DebouncedFunc<() => void>; onlineUsers: OnlineUsers; rangeFromMouseDown: Range | null; private lastSelectionState; private updateSelectionCounter; private unlockedBlocksByPassword; private mediaQueryList; private pendingExclusiveMessages; private headingBlockScrollListener?; mouseWheeled: boolean; linkDialogShow: boolean; signLinkDialog(show: boolean): void; constructor(editorElement: HTMLElement, options: EditorOptions, auth: AuthMessage, parentEditor?: Editor); get destroyed(): boolean; setThemeMode(themeModeType?: ThemeModeType): void; formatDate(date: Date): string; scrollToBottomView: import("lodash").DebouncedFunc<() => void>; scrollToMiddleView(): void; isTypewriterMode(): boolean; setTypewriterMode(mode: boolean): void; isFocusMode(): boolean; setFocusMode(isFocusMode: boolean): void; isCommentsVisible(): boolean; setCommentsVisible(visible: boolean): void; clearEditorPlugin(): void; resetContent(logout: boolean): void; destroy(): void; get id(): string; get version(): string; docId(): string; data(): EditorDoc; applyOps(ops: any): void; meta(): { [index: string]: any; }; reload(): void; loadLocalBlocks(blocks: DocBlock[]): void; loadLocalData(data: EditorDoc): void; handleWebSocketOpen: (event: any) => void; handleWriteConflictError: (error: Error) => void; handleRequestReloadError: (error: Error) => Promise; handleAssertionFailure: (err: Error) => void; handleMaxUserError: () => void; handleWebSocketClose: (event: any) => void; handleWebSocketError: (err: any) => void; isLocal(): boolean; isHistory(): boolean; isMarkdownOnly(): boolean; isDirty(): boolean; isReadOnly(): boolean; setReadOnly(readonly: boolean): void; isCommentable(): boolean; isChildEditor(): boolean; isWritable(): boolean; isDragging(): boolean; setDragging(isDragging: boolean): void; isMouseDown(): boolean; isAllLoaded(): boolean; onChangeCore(): void; onDirty(): void; onClean(): void; getAgentSelector(): AgentSelector; rootContainer(): ContainerElement; getContainerById(id: string): ContainerElement | null; getBlockByIndex(container: ContainerElement, index: number): BlockElement; getBlockContainer(block: BlockElement): ContainerElement; getBlockIndex(block: BlockElement): number; getBlockById(id: string): BlockElement | null; getBoxById(id: string): BoxElement | null; replaceBoxToText(id: string, text: string): void; getBoxData(id: string): BoxData; setBoxData(id: string, data: BoxData): void; handleReauth: () => Promise; loadDocument(): Promise; handleWebsocketMessage: (obj: any) => void; getOnlineUsers(): OnlineUsers; getOnlineUserColor(userId: string, type: 'flag' | 'selection'): string; getFixedUserColor(userId: string, type: 'flag' | 'selection'): string; getUserAvatarUrl(avatarUrl: string, userId: string): string; isComposing(): boolean; composingBlock(): BlockElement | null; isInEditor(dom: Node | null): boolean; isValid(): boolean; showFindDialog(): void; showReplaceDialog(): void; highlightText(text: string, options?: { keepReplaceResult?: boolean; }): void; clearHighlight(options?: { keepReplaceResult?: boolean; }): void; getWaitingCommand(): CommandParams | null; addWaitingCommand(params: CommandParams): void; clearWaitingCommand(): void; endComposition(): void; getRemoteCaretPosesInBlock(blockId: string): RemoteUserCaretPos[]; handleBlur: (event: FocusEvent) => void; handleCompositionStart: (event: Event) => void; handleCompositionEndCore: (event: Event) => void; handleCompositionEnd: (event: Event) => void; handleClick: (event: MouseEvent) => void; mousePosition(): Position; handleMouseDown: (event: MouseEvent) => void; handleMouseMove: (event: MouseEvent) => void; handleMouseUp: (event: MouseEvent) => void; handleDragStart: (event: Event) => void; handleDragEnter: (event: DragEvent) => void; handleDrop: (event: DragEvent) => void; handleCopy: (event: ClipboardEvent | null) => void; handleCut: (event: ClipboardEvent | null) => void; clearSelectedContents(): void; handlePaste: (event: ClipboardEvent) => Promise; handleMediaQueryListChange: () => void; handleResize: () => void; handleContextMenu: (event: MouseEvent) => void; handleWheel: (event: WheelEvent) => void; handleKeydown: (event: KeyboardEvent) => void; handleRemoteCaretPosChanged: (blockIds: string[], flashUserId: string | null) => void; setImageSelected(block: BlockElement | null, image: HTMLImageElement | null): void; handleRemoteUserChanged: (users: OnlineUsers, change: OnlineUserChange) => void; updateTextToolbar(force: boolean): void; handleSelectionChanged: () => void; handleFullscreenChange: () => void; updateBlockToolsFixedButton(block: BlockElement): void; updateCommandStatusCore(): void; broadcastCaretMessageCore(message: RemoteCaretPosMessage): void; broadcastCaretPos(): void; broadcastExclusiveBlockMessage(blocks: BlockElement[], exclusive: boolean): void; handleRemoteExclusiveBlockMessage(message: ExclusiveBlockMessage): void; isPreviewEnabled(fileName: string): boolean; setFileDisplayType(fileBlockOrFileBox: BlockElement | BoxElement, type: FilePreviewType): void; fullscreenPreviewFile(fileBlockOrFileBox: BlockElement | BoxElement): void; getBlockData(block: BlockElement): BlockData; getBlockDataFromDoc(block: BlockElement): BlockData; saveData(): void; cloneBlock(block: BlockElement, options: { type: 'above' | 'below'; focusToNewBlock: boolean; }): boolean; moveBlock(block: BlockElement, options: { type: 'up' | 'down'; }): boolean; checkCommentable(): void; executeBlockCommand(command: BlockCommand, block?: BlockElement, params?: CommandParams): any; editComment(commentId: string): void; executeTextCommand(command: TextCommand, params?: CommandParams): any; applyTextCustomStyle(style: string, enable?: boolean): void; undo(): boolean; redo(): boolean; beginUndoGroup(): void; endUndoGroup(): void; beginUpdateSelection(): void; endUpdateSelection(): void; isUpdatingSelection(): boolean; exclusiveBlock(block: BlockElement): void; isTitleBlock(block: BlockElement): boolean; titleFromEditor(): string; setTitle(title?: string): void; isBlockLocked(block: BlockElement): boolean; isParentBlockLocked(block: BlockElement): boolean; isBlockWritable(block: BlockElement): boolean; isBlockMarkerExpired(block: BlockElement): boolean; setBlockMarkerExpired(block: BlockElement, status: boolean): void; getBlockLockInfo(block: BlockElement): BlockLockInfo; lockBlock(block: BlockElement): void; static setCursor(type: string | null): void; setBlockMarkerData(block: BlockElement, markerData: string, width: number, options: UpdateBlockDataOptions): void; setBlockPadding(block: BlockElement, padding: number): void; setBlockStyleState(block: BlockElement, style: string, enabled: boolean): void; indentBlock(block: BlockElement): void; outdentBlock(block: BlockElement): void; unlockBlock(block: BlockElement): void; unlockBlockByPassword(block: BlockElement, password: string): void; isBlockUnlockedByPassword(block: BlockElement): boolean; setBlockLockPassword(block: BlockElement, password: string): void; unexclusiveBlock(block: BlockElement): void; isBlockExclusive(block: BlockElement): boolean; startExclusiveBlockTimer(): void; stopExclusiveBlockTimer(): void; alignBlock(block: BlockElement, align?: TextAlign): void; blinkBlock(block: BlockElement, delay: number): void; isMainContainer(containerOrBlock: ContainerElement): boolean; createEmptyContainerBlockData(): BlockData[]; insertDoc(doc: EditorDoc, options?: { block: BlockElement; offset: number; }): void; insertMarkdown(markdown: string, options?: { block: BlockElement; offset: number; }): void; importDocx(file: File): Promise; batchInsertBlocks(container: ContainerElement, insertPos: number, blocksData: BlockData[]): BlockElement[]; canInsertBlockAt(container: ContainerElement, index: number): boolean; insertBlock(container: ContainerElement | null, insertPos: number, type: BlockTypes, blockData: BlockData | null, options: InsertBlockOptions): BlockElement; insertTextBlock(container: ContainerElement | null, index: number, text: string | RichTextDocument, textBlockData?: any, options?: InsertBlockOptions): BlockElement; splitTextBlock(block: BlockElement, offset: number, options: { keepFormat: boolean; }): BlockElement; insertCheckbox(container: ContainerElement | null, index: number, checked: boolean, text: string): BlockElement; replaceBlockToText(block: BlockElement, text: string): BlockElement; insertTable(index: number, cols: number, rows: number, params?: BlockTemplateData): BlockElement; insertCode(index: number, code: string, language?: string, params?: BlockTemplateData): BlockElement; insertLayout(index: number, cols: number): BlockElement; getAccepts(type: EMBED_TYPE.AUDIO | EMBED_TYPE.VIDEO | EMBED_TYPE.IMAGE | EMBED_TYPE.OFFICE): string; insertEmbed(container: ContainerElement | null, index: number, embedType: EMBED_TYPE, embedData: EmbedData, insertOptions?: BreakTextBlockOptions): BlockElement; insertMermaid(container: ContainerElement | null, index: number, mermaidText: string, options?: BreakTextBlockOptions): BlockElement; insertDrawIO(container: ContainerElement | null, index: number, xml: string | null | undefined, options?: BreakTextBlockOptions): BlockElement; insertDocSnapshot(container: ContainerElement | null, doc: EditorDoc, index: number, options?: BreakTextBlockOptions): Promise; insertHorizontalLine(container: ContainerElement | null, index: number, options?: BreakTextBlockOptions): BlockElement; insertChart(container: ContainerElement | null, index: number, srcOrData: string, options?: { width?: number | string; height?: number | string; }): BlockElement; addResources(resources: string[]): Promise; uploadDocThumbnail(file: File): Promise; uploadResource(file: File, onProgress: OnProgress): Promise; createBlockData(type: BLOCK_TYPE, options?: any, id?: string): BlockData; createEmbedBlockData(embedType: EMBED_TYPE, data: EmbedData, id?: string): BlockData; updateBoxData(boxId: string, boxData: BoxTemplateData, updateLocalOnly?: boolean): void; updateEmbedData(block: BlockElement, data: EmbedData, options?: UpdateBlockDataOptions): void; getResourceToken(): string | null; getResourceBasePath(): string; resourceNameFromUrl(url: string): string; buildResourceUrl(resourceName: string, fileName?: string, options?: { withToken: boolean; }): string; getDocThumbImage(template: DocTemplate): string; apiServer(): string; editorServer(): string; verifyUploadFile(file: File, embedType: EMBED_MEDIA_TYPE): EMBED_MEDIA_TYPE; insertMediaFile(container: ContainerElement | null, file: File | string, index: number, embedType: EMBED_MEDIA_TYPE, options?: BreakTextBlockOptions & ActionOperatorOptions, callback?: (block: BlockElement, embedData: EmbedData) => void): BlockElement; insertImage(container: ContainerElement | null, file: File | string, index: number, options?: BreakTextBlockOptions, title?: string, link?: string): BlockElement; insertAudio(container: ContainerElement | null, file: File | string, index: number, options?: BreakTextBlockOptions): BlockElement; insertVideo(container: ContainerElement | null, file: File | string, index: number, options?: BreakTextBlockOptions): BlockElement; insertOffice(container: ContainerElement | null, file: File, index: number): BlockElement; updateOffice(type: 'block' | 'box', id: string, file: File): Promise; insertWebpage(container: ContainerElement | null, url: string, index: number, customType?: string, options?: BreakTextBlockOptions): Promise; hasFocus(): boolean | undefined; deleteBlock(block: BlockElement, options: DeleteBlockOptions): void; insertBox(type: BOX_TYPE, id: string | null, data: BoxTemplateData, options?: InsertBoxOptions): Promise; insertEmptyBox(type: BOX_TYPE): Promise; getBoxInsertTarget(block: BlockElement | null, offset: number | undefined): { targetBlock: null; targetOffset: undefined; } | { targetBlock: BlockElement; targetOffset: number | undefined; }; insertImageBox(src: string, width: number | undefined, height: number | undefined, block: BlockElement | null, offset: number | undefined): ImageBoxData | null; insertAnchorBox(block: BlockElement | null, offset: number | undefined): BoxData | null; insertFileBox(block: BlockElement | null, offset: number | undefined, id: string | null, data: FileBoxTemplateData): BoxData | null; insertWikiLink(block: BlockElement | null, offset: number | undefined, id: string | null, data: WikiLinkBoxTemplateData): BoxData | null; insertInput(block: BlockElement | null, offset: number | undefined, id: string | null, inputType: 'select' | 'text' | 'checkbox', data: BoxTemplateData): BoxData | null; insertTextInput(block: BlockElement | null, offset: number | undefined, id: string | null, data: TextInputBoxTemplateData): BoxData | null; insertCheckInput(block: BlockElement | null, offset: number | undefined, id: string | null, data: CheckInputBoxTemplateData): BoxData | null; insertSelect(block: BlockElement | null, offset: number | undefined, id: string | null, data: SelectBoxTemplateData): BoxData | null; editBox(boxData: BoxData, block: BlockElement): void; closeAutoSuggest(): void; getEmbedBlockEmbedData(block: BlockElement): EmbedData; getMediaBlockUrl(block: BlockElement): string; getAllImages(): { src: string; id: string; }[]; updatePlaceholder(): void; getLinkInfo(node: Node): { text: string; link: string; }; setLinkInfo(node: Node, info: { text?: string; link?: string; }): void; isHeadingBlockCollapsed(block: BlockElement): boolean; expandHeadingBlock(block: BlockElement): void; collapseHeadingBlock(block: BlockElement): void; getBlockTocInfo(block: BlockElement): { prevHeadingBlockId?: string; nextHeadingBlockId?: string; }; createChildContainer(parent: HTMLElement, id: string, blocks: any[]): ContainerElement; createEmptyChildContainer(parent: HTMLElement, id: string): ContainerElement; createEmptyChildContainerData(initBlocks?: BlockData[], id?: string): string; getChildContainerData(containerId: string): DocBlock[]; createComment(commentGroupId: string | null, replyCommentId: string | null, doc: EditorDoc | null, abstract?: string): string; addBlockComment(block: BlockElement, text?: string): string; addCommentToBlock(block: BlockElement, commentId: string, options?: { noEditComment: boolean; }): void; commentImage(block: BlockElement, image: HTMLElement): string; updateCommentText(id: string, doc: EditorDoc): void; deleteComment(id: string): void; handleCommentInserted(block: BlockElement, start: number, end: number, commentId: string): void; getCommentData(id: string): CommentData; getGroupComments(groupId: string): CommentData[]; getComments(): CommentData[][]; getChildEditorData(id: string): DocBlock[]; replaceBlock(block: BlockElement, newBlockData: BlockData, options: ReplaceBlockOptions): BlockElement; replaceContainerData(container: ContainerElement, blocks: DocBlock[]): void; updateBlockData(block: BlockElement, data: BlockTemplateData, options: UpdateBlockDataOptions): void; updateBlockText(block: BlockElement, text: RichTextDocument, options: UpdateBlockTextOptions): void; deleteBlockText(block: BlockElement, from: number, to: number): void; insertBlockText(block: BlockElement, pos: number, doc: RichTextDocument | string): void; static fixTextData(data: BlockData): DocBlock; fixTextBlockAtContainerEnd(block: BlockElement): BlockElement | null; getRootObjectName(container: ContainerElement): string; submitInsertContainerAction(id: string, data: BlockData[]): void; submitInsertBlockAction(container: ContainerElement, block: BlockElement, index: number, data: BlockData): void; submitDeleteBlockAction(block: BlockElement, fromUndo?: boolean): void; submitUpdateBlockDataAction(container: ContainerElement, index: number, id: string, data: BlockData, options: { fromUndo: boolean; }): void; submitReplaceBlockAction(container: ContainerElement, index: number, data: BlockData, fromUndo?: boolean): void; submitBlockTextChanges(block: BlockElement, oldText: RichTextDocument, newText: RichTextDocument, data: RichTextOperations, fromUndo?: boolean): void; compositionLockData: { doc: EditorDoc; inputEvent: InputEvent[]; info: BlockInfoForComposition; selectionStatus: SelectionState; remoteOps: Op[][]; reason: 'table' | 'sogou'; } | null; applyingRemoteOpsForComposition: boolean; isLockedForComposition(): boolean; lockForComposition(reason: 'table' | 'sogou'): void; unlockComposition(): boolean; isApplyingRemoteOpsForComposition(): boolean; updateDocumentByRemoteOps(ops: Op[], source: boolean): void; selectBlock(block: BlockElement, start: number, end?: number | undefined): void; moveCaretTo(x: number, y: number): void; selectBox(block: BlockElement, boxElement: BoxElement): void; isBlockEntireSelected(block: BlockElement): boolean; selectEntireBlock(block: BlockElement): void; getEntireSelectedBlock(): BlockElement | null; getSelectionDetail(): SelectionDetail; getHoverBlock(): BlockElement | null; getHoverImage(): HTMLImageElement | null; getFocusedImage(): HTMLImageElement | null; isSelectionWritable(detail: SelectionDetail): boolean; getSelectedText(options?: { visibleTextOnly?: boolean; }): string; getAllBlocks(options: { deep: boolean; }): BlockElement[]; getAllSelectedBlocks(options: { deep: boolean; }): BlockElement[]; getCurrentScale(): number; isSetScale(): boolean; getCaretPos(): CaretPos; fixSelection(options: { autoScroll: boolean; }): void; getCommandStatus(): CommandStatus; getBlockCommandStatus(block: BlockElement): CommandStatus; getDetailCommandStatus(detail: SelectionDetail): CommandStatus; saveCommandTarget(target: Node, popover: Popover): void; saveSelectionState(): SelectionState; restoreSelectionState(state: SelectionState): boolean; setCaretPos(pos: CaretPos): void; getCurrentBlockIndex(): number; createChildLocalEditor(elem: HTMLElement, permission: AuthPermission, options: EditorOptions, data?: EditorDoc): Editor; updateImageResizeTool(): void; addTokenToResources(html: string): void; adjustTextInputSize(): void; updateCommentsCore(): void; refreshComments(options?: { refreshNow: boolean; }): void; updateCommentsPositionCore(): void; showDialog(options: DialogOptions | StandardDialogOptions | StandardInputDialog | StandardConfirmDialog): Dialog; showVersions(container: HTMLElement | null, options?: VersionDialogOptions): EditorVersionDialog; showOps(ops: EditorOp[], options?: { play: boolean; speed?: number; }): Promise; getVersions(options?: { groupVersions?: boolean; }): Promise; getChanges(): Element[]; highlightChanges(elem: Element, timeout: number): void; getVersion(ver: number): Promise; getVersionOps(ver: number, from?: number): Promise<{ doc: EditorDoc; ops: EditorOp[]; }>; getLatestVersion(): Promise; createVersion(tag: string, publish: boolean): Promise; revertVersion(ver: number): Promise; focus(offset?: number): void; fullscreen(): void; isBlockQuoted(block: BlockElement): boolean; setBlockQuoted(block: BlockElement, quoted: boolean): void; addBlockInlineStyle(block: BlockElement, style: string): void; getBlockInlineStyle(block: BlockElement): string | undefined; addEventListener(type: EDITOR_EVENT, callback: (...args: any[]) => void): void; removeEventListener(type: EDITOR_EVENT, callback: (...args: any[]) => void): void; handleRootContainerResize: (entry: ResizeObserverEntry) => void; static registerBlockType(type: BlockTypes, blockClass: Block): void; static getEditorById(id: string): Editor; static getEditor(elem: Node): Editor; static getRootEditor(elem: Node): Editor; request(options: string | any): Promise; postCustomMessage(data: string): void; recognizeWebPageLink(url: string): Promise; recognizeNormalLink(url: string, block: BlockElement, options: { offset: number; count: number; }): Promise<{ text: string; link: string; } | null>; wrapHtml(blocksHtml: string): string; toHtml(): string; selectionToDoc(options?: { keepComments?: boolean; }): EditorDoc; selectionToHtml(): string; toPlainText(options?: { withoutTitle: boolean; }): string; toImage(width?: number, height?: number, download?: boolean): Promise; updateDocThumbnail(width: number, height: number): Promise; print(): Promise; toMarkdown(options?: { keepImageSize?: boolean; keepComments?: boolean; }): string; toDocx(template: Buffer | undefined, download?: boolean, backgroundImageOptions?: IImageOptions): Promise; updateToc(): void; play(): void; animateScrollToBlock(elem: BlockElement): void; setBlockIconVisible(visible: boolean): void; isInComment(element: Element): boolean; setQuickInsertMenuTrigger(quickInsertMenuTrigger: QuickInsertMenuTrigger): void; startHeadingBlockScrollListener(callback: (result: HeadingBlockScrollListenerCallbackResult) => void): void; stopHeadingBlockScrollListener(): void; static registerCurrentCommandTarget(commandTarget: CommandTargetInfo | null): void; static getCurrentCommandTarget(): CommandTargetInfo | null; static getCurrentCommandEditor(): Editor; static getCurrentCommandBlock(): BlockElement; static getVisiblePopover(): Popover | null; static hideCurPopover(): void; static selectCurrentCommandTargetBlock(): void; getWikiBoxDataByLinkId(linkId: string): WikiLinkBoxData | null; } export {};