/**
 * @description 扩展 slate Editor（参考 slate-react react-editor.ts ）
 * @author wangfupeng
 */
import { Ancestor, Element, Node, Path, Point, Range } from 'slate';
import HoverBar from '../menus/bar/HoverBar';
import Toolbar from '../menus/bar/Toolbar';
import TextArea from '../text-area/TextArea';
import { DOMNode, DOMPoint, DOMRange, DOMSelection, DOMStaticRange } from '../utils/dom';
import { Key } from '../utils/key';
import type { IDomEditor } from './interface';
/**
 * 自定义全局 command
 */
export declare const DomEditor: {
    /**
     * Return the host window of the current editor.
     */
    getWindow(editor: IDomEditor): Window;
    /**
     * Find a key for a Slate node.
     * key 即一个累加不重复的 id ，每一个 slate node 都对对应一个 key ，意思相当于 node.id
     */
    findKey(editor: IDomEditor | null, node: Node): Key;
    setNewKey(node: Node): void;
    /**
     * Find the path of Slate node.
     * path 是一个数组，代表 slate node 的位置 https://docs.slatejs.org/concepts/03-locations#path
     */
    findPath(editor: IDomEditor | null, node: Node): Path;
    /**
     * Find the DOM node that implements DocumentOrShadowRoot for the editor.
     */
    findDocumentOrShadowRoot(editor: IDomEditor): Document | ShadowRoot;
    /**
     * 获取父节点
     * @param editor editor
     * @param node cur node
     */
    getParentNode(editor: IDomEditor | null, node: Node): Ancestor | null;
    /**
     * 获取当前节点的所有父节点
     * @param editor editor
     * @param node cur node
     */
    getParentsNodes(editor: IDomEditor, node: Node): Ancestor[];
    /**
     * 获取当前节点对应的顶级节点
     * @param editor editor
     * @param curNode cur node
     */
    getTopNode(editor: IDomEditor, curNode: Node): Node;
    /**
     * Find the native DOM element from a Slate node or editor.
     */
    toDOMNode(editor: IDomEditor, node: Node): HTMLElement;
    /**
     * Check if a DOM node is within the editor.
     */
    hasDOMNode(editor: IDomEditor, target: DOMNode, options?: {
        editable?: boolean;
    }): boolean;
    /**
     * Find a native DOM range from a Slate `range`.
     *
     * Notice: the returned range will always be ordinal regardless of the direction of Slate `range` due to DOM API limit.
     *
     * there is no way to create a reverse DOM Range using Range.setStart/setEnd
     * according to https://dom.spec.whatwg.org/#concept-range-bp-set.
     */
    toDOMRange(editor: IDomEditor, range: Range): DOMRange;
    /**
     * Find a native DOM selection point from a Slate point.
     */
    toDOMPoint(editor: IDomEditor, point: Point): DOMPoint;
    /**
     * Find a Slate node from a native DOM `element`.
     */
    toSlateNode(editor: IDomEditor | null, domNode: DOMNode): Node;
    /**
     * Get the target range from a DOM `event`.
     */
    findEventRange(editor: IDomEditor, event: any): Range;
    /**
     * Find a Slate range from a DOM range or selection.
     */
    toSlateRange<T extends boolean>(editor: IDomEditor, domRange: DOMRange | DOMStaticRange | DOMSelection, options: {
        exactMatch: T;
        suppressThrow: T;
    }): T extends true ? Range | null : Range;
    /**
     * Find a Slate point from a DOM selection's `domNode` and `domOffset`.
     */
    toSlatePoint<T extends boolean>(editor: IDomEditor, domPoint: DOMPoint, options: {
        exactMatch: T;
        suppressThrow: T;
    }): T extends true ? Point | null : Point;
    hasRange(editor: IDomEditor, range: Range): boolean;
    getNodeType(node: Node): string;
    checkNodeType(node: Node, type: string): boolean;
    getNodesStr(nodes: Node[]): string;
    getSelectedElems(editor: IDomEditor): Element[];
    getSelectedNodeByType(editor: IDomEditor, type: string): Node | null;
    getSelectedTextNode(editor: IDomEditor): Node | null;
    isNodeSelected(editor: IDomEditor, node: Node): boolean;
    isSelectionAtLineEnd(editor: IDomEditor, path: Path): boolean;
    getTextarea(editor: IDomEditor): TextArea;
    getToolbar(editor: IDomEditor): Toolbar | null;
    getHoverbar(editor: IDomEditor): HoverBar | null;
    normalizeContent(editor: IDomEditor): void;
    /**
     * 获取：距离触发 maxLength，还可以插入多少字符
     * @param editor editor
     */
    getLeftLengthOfMaxLength(editor: IDomEditor): number;
    cleanExposedTexNodeInSelectionBlock(editor: IDomEditor): void;
    /**
     * 是否是编辑器里最后一个元素
     * @param editor editor
     * @param node node
     */
    isLastNode(editor: IDomEditor, node: Node): boolean;
    /**
     * 生成空白 paragraph
     */
    genEmptyParagraph(): Element;
    /**
     * 是否选中了 void node
     * @param editor editor
     */
    isSelectedVoidNode(editor: IDomEditor): boolean;
    /**
     * 选区是否在一个空行
     * @param editor editor
     */
    isSelectedEmptyParagraph(editor: IDomEditor): boolean | undefined;
    /**
     * 当前 path 指向的 node ，是否是空的（无内容）
     * @param editor editor
     * @param path path
     */
    isEmptyPath(editor: IDomEditor, path: Path): boolean;
};
