/**
 * @description 封装 DOM 操作
 * @wangfupeng
 */
import Editor from '../editor/index';
declare type OffsetDataType = {
    top: number;
    left: number;
    width: number;
    height: number;
    parent: Element | null;
};
export declare type DomElementSelector = string | DomElement | HTMLElement | Element | Document | HTMLCollection | Node | NodeList | HTMLElement[] | EventTarget | null | undefined;
export declare class DomElement<T extends DomElementSelector = DomElementSelector> {
    selector: T;
    length: number;
    elems: HTMLElement[];
    dataSource: Map<string, any>;
    /**
     * 构造函数
     * @param selector 任一类型的选择器
     */
    constructor(selector: T);
    /**
     * 获取元素 id
     */
    get id(): string;
    /**
     * 遍历所有元素，执行回调函数
     * @param fn 回调函数
     */
    forEach(fn: (ele: HTMLElement, index?: number) => boolean | unknown): DomElement;
    /**
     * 克隆元素
     * @param deep 是否深度克隆
     */
    clone(deep?: boolean): DomElement;
    /**
     * 获取第几个元素
     * @param index index
     */
    get(index?: number): DomElement;
    /**
     * 获取第一个元素
     */
    first(): DomElement;
    /**
     * 获取最后一个元素
     */
    last(): DomElement;
    /**
     * 绑定事件
     * @param type 事件类型
     * @param selector DOM 选择器
     * @param fn 事件函数
     */
    on(type: string, fn: Function): DomElement;
    on(type: string, selector: string, fn: Function): DomElement;
    /**
     * 解绑事件
     * @param type 事件类型
     * @param selector DOM 选择器
     * @param fn 事件函数
     */
    off(type: string, fn: Function): DomElement;
    off(type: string, selector: string, fn: Function): DomElement;
    /**
     * 设置/获取 属性
     * @param key key
     * @param val value
     */
    attr(key: string): string;
    attr(key: string, val: string): DomElement;
    /**
     * 删除 属性
     * @param key key
     */
    removeAttr(key: string): void;
    /**
     * 添加 css class
     * @param className css class
     */
    addClass(className?: string): DomElement;
    /**
     * 添加 css class
     * @param className css class
     */
    removeClass(className?: string): DomElement;
    /**
     * 是否有传入的 css class
     * @param className css class
     */
    hasClass(className?: string): boolean;
    /**
     * 修改 css
     * @param key css key
     * @param val css value
     */
    css(key: string, val?: string | number): DomElement;
    /**
     * 封装 getBoundingClientRect
     */
    getBoundingClientRect(): DOMRect;
    /**
     * 显示
     */
    show(): DomElement;
    /**
     * 隐藏
     */
    hide(): DomElement;
    /**
     * 获取子节点（只有 DOM 元素）
     */
    children(): DomElement | null;
    /**
     * 获取子节点（包括文本节点）
     */
    childNodes(): DomElement | null;
    /**
     * 将子元素全部替换
     * @param $children 新的child节点
     */
    replaceChildAll($children: DomElement): void;
    /**
     * 增加子节点
     * @param $children 子节点
     */
    append($children: DomElement): DomElement;
    /**
     * 移除当前节点
     */
    remove(): DomElement;
    /**
     * 当前元素，是否包含某个子元素
     * @param $child 子元素
     */
    isContain($child: DomElement): boolean;
    /**
     * 获取当前元素的尺寸和位置信息
     */
    getSizeData(): DOMRect;
    /**
     * 获取当前元素 nodeName
     */
    getNodeName(): string;
    /**
     * 根据元素位置获取元素节点（默认获取0位置的节点）
     * @param n 元素节点位置
     */
    getNode(n?: number): Node;
    /**
     * 获取当前元素可视高度
     */
    getClientHeight(): number;
    /**
     * 获取当前元素可视宽度
     */
    /**
     * 查询
     * @param selector css 选择器
     */
    find(selector: string): DomElement;
    /**
     * 获取/设置 元素 text
     * @param val text 值
     */
    text(): string;
    text(val: string): DomElement;
    /**
     * 设置/获取 元素 html
     * @param val html 值
     */
    html(): string;
    html(val: string): DomElement;
    /**
     * 获取元素 value
     */
    val(): string;
    /**
     * focus 到当前元素
     */
    focus(): DomElement;
    /**
     * 当前元素前一个兄弟节点
     */
    prev(): DomElement;
    /**
     * 当前元素后一个兄弟节点
     */
    next(): DomElement;
    /**
     * 获取父元素
     */
    parent(): DomElement;
    /**
     * 查找父元素，直到满足 selector 条件
     * @param selector css 选择器
     * @param curElem 从哪个元素开始查找，默认为当前元素
     */
    parentUntil(selector: string, curElem?: HTMLElement): DomElement | null;
    /**
     * 查找父元素，直到满足 selector 条件,或者 到达 编辑区域容器以及菜单栏容器
     * @param selector css 选择器
     * @param curElem 从哪个元素开始查找，默认为当前元素
     */
    parentUntilEditor(selector: string, editor: Editor, curElem?: HTMLElement): DomElement | null;
    /**
     * 判读是否相等
     * @param $elem 元素
     */
    equal($elem: DomElement | HTMLElement): boolean;
    /**
     * 将该元素插入到某个元素前面
     * @param selector css 选择器
     */
    insertBefore(selector: string | DomElement): DomElement;
    /**
     * 将该元素插入到selector元素后面
     * @param selector css 选择器
     */
    insertAfter(selector: string | DomElement): DomElement;
    /**
     * 设置/获取 数据
     * @param key key
     * @param value value
     */
    data<T>(key: string, value?: T): T | undefined;
    /**
     * 获取当前节点的顶级(段落)
     * @param editor 富文本实例
     */
    getNodeTop(editor: Editor): DomElement;
    /**
     * 获取当前 节点 基与上一个拥有相对或者解决定位的父容器的位置
     * @param editor 富文本实例
     */
    getOffsetData(): OffsetDataType;
    /**
     * 从上至下进行滚动
     * @param top 滚动的值
     */
    scrollTop(top: number): void;
}
declare function $(...arg: ConstructorParameters<typeof DomElement>): DomElement;
export default $;
