import { OnAppearEventListenerCallback, OnChangeEventListenerCallback, OnStartEventListenerCallback, OnStopEventListenerCallback, SelectorCallback } from "./callbacks";
import { OnDisappearEventListenerCallback } from "./callbacks/OnDisappearEventListenerCallback";
import { IDOMObserverInitParameters } from "./parameters/IDOMObserverInitParameters";
export declare class DOMObserver<T extends Element = Element> {
    private readonly emitter;
    private readonly selector;
    private observer;
    private _is_active;
    get isActive(): boolean;
    private _parameters;
    get parameters(): IDOMObserverInitParameters<T>;
    private _state;
    private $elementRef;
    /**
     * @param {SelectorCallback<T>} selector
     * @param {IDOMObserverInitParameters<T>>} parameters
     */
    constructor(selector: SelectorCallback<T>, parameters: IDOMObserverInitParameters<T>);
    /**
     * Starts DOM observation
     */
    start(): void;
    /**
     * Stops DOM observation
     */
    stop(): void;
    /**
     * @returns {Promise<void>}
     * @protected
     */
    protected observeProcess(): Promise<void>;
    /**
     * @param {MutationRecord[]} mutations
     * @protected
     */
    protected onMutationOccurred(mutations: MutationRecord[]): void;
    protected emit(event: 'start'): void;
    protected emit(event: 'appear', $element: T): void;
    protected emit(event: 'change', $element: T, mutations: MutationRecord[]): void;
    protected emit(event: 'disappear', $element: T): void;
    protected emit(event: 'stop'): void;
    on(event: 'start', listener: OnStartEventListenerCallback): DOMObserver<T>;
    on(event: 'appear', listener: OnAppearEventListenerCallback<T>): DOMObserver<T>;
    on(event: 'change', listener: OnChangeEventListenerCallback<T>): DOMObserver<T>;
    on(event: 'disappear', listener: OnDisappearEventListenerCallback<T>): DOMObserver<T>;
    on(event: 'stop', listener: OnStopEventListenerCallback): DOMObserver<T>;
    once(event: 'start', listener: OnStartEventListenerCallback): DOMObserver<T>;
    once(event: 'appear', listener: OnAppearEventListenerCallback<T>): DOMObserver<T>;
    once(event: 'change', listener: OnChangeEventListenerCallback<T>): DOMObserver<T>;
    once(event: 'disappear', listener: OnDisappearEventListenerCallback<T>): DOMObserver<T>;
    once(event: 'stop', listener: OnStopEventListenerCallback): DOMObserver<T>;
    off(event: 'start', listener: OnStartEventListenerCallback): DOMObserver<T>;
    off(event: 'appear', listener: OnAppearEventListenerCallback<T>): DOMObserver<T>;
    off(event: 'change', listener: OnChangeEventListenerCallback<T>): DOMObserver<T>;
    off(event: 'disappear', listener: OnDisappearEventListenerCallback<T>): DOMObserver<T>;
    off(event: 'stop', listener: OnStopEventListenerCallback): DOMObserver<T>;
}
