import { Editor, Element, Location, Node, Path } from '../../index';
import { NodeMatch, PropsCompare, PropsMerge } from '../editor';
import { MaximizeMode, RangeMode } from '../../types/types';
export interface NodeInsertNodesOptions<T extends Node> {
    at?: Location;
    match?: NodeMatch<T>;
    mode?: RangeMode;
    hanging?: boolean;
    select?: boolean;
    voids?: boolean;
    batchDirty?: boolean;
}
export interface NodeTransforms {
    /**
     * Insert nodes in the editor
     * at the specified location or (if not defined) the current selection or (if not defined) the end of the document.
     */
    insertNodes: <T extends Node>(editor: Editor, nodes: Node | Node[], options?: NodeInsertNodesOptions<T>) => void;
    /**
     * Lift nodes at a specific location upwards in the document tree, splitting
     * their parent in two if necessary.
     */
    liftNodes: <T extends Node>(editor: Editor, options?: {
        at?: Location;
        match?: NodeMatch<T>;
        mode?: MaximizeMode;
        voids?: boolean;
    }) => void;
    /**
     * Merge a node at a location with the previous node of the same depth,
     * removing any empty containing nodes after the merge if necessary.
     */
    mergeNodes: <T extends Node>(editor: Editor, options?: {
        at?: Location;
        match?: NodeMatch<T>;
        mode?: RangeMode;
        hanging?: boolean;
        voids?: boolean;
    }) => void;
    /**
     * Move the nodes at a location to a new location.
     */
    moveNodes: <T extends Node>(editor: Editor, options: {
        at?: Location;
        match?: NodeMatch<T>;
        mode?: MaximizeMode;
        to: Path;
        voids?: boolean;
    }) => void;
    /**
     * Remove the nodes at a specific location in the document.
     */
    removeNodes: <T extends Node>(editor: Editor, options?: {
        at?: Location;
        match?: NodeMatch<T>;
        mode?: RangeMode;
        hanging?: boolean;
        voids?: boolean;
    }) => void;
    /**
     * Set new properties on the nodes at a location.
     */
    setNodes: <T extends Node>(editor: Editor, props: Partial<T>, options?: {
        at?: Location;
        match?: NodeMatch<T>;
        mode?: MaximizeMode;
        hanging?: boolean;
        split?: boolean;
        voids?: boolean;
        compare?: PropsCompare;
        merge?: PropsMerge;
    }) => void;
    /**
     * Split the nodes at a specific location.
     */
    splitNodes: <T extends Node>(editor: Editor, options?: {
        at?: Location;
        match?: NodeMatch<T>;
        mode?: RangeMode;
        always?: boolean;
        height?: number;
        voids?: boolean;
    }) => void;
    /**
     * Unset properties on the nodes at a location.
     */
    unsetNodes: <T extends Node>(editor: Editor, props: string | string[], options?: {
        at?: Location;
        match?: NodeMatch<T>;
        mode?: MaximizeMode;
        hanging?: boolean;
        split?: boolean;
        voids?: boolean;
    }) => void;
    /**
     * Unwrap the nodes at a location from a parent node, splitting the parent if
     * necessary to ensure that only the content in the range is unwrapped.
     */
    unwrapNodes: <T extends Node>(editor: Editor, options?: {
        at?: Location;
        match?: NodeMatch<T>;
        mode?: MaximizeMode;
        split?: boolean;
        voids?: boolean;
    }) => void;
    /**
     * Wrap the nodes at a location in a new container node, splitting the edges
     * of the range first to ensure that only the content in the range is wrapped.
     */
    wrapNodes: <T extends Node>(editor: Editor, element: Element, options?: {
        at?: Location;
        match?: NodeMatch<T>;
        mode?: MaximizeMode;
        split?: boolean;
        voids?: boolean;
    }) => void;
}
export declare const NodeTransforms: NodeTransforms;
//# sourceMappingURL=node.d.ts.map