export declare type MountFunction = (callback: MountCallback) => void;
export declare type RefreshFunction = (callback: MountCallback) => void;
export declare type MountCallback = () => void;
export declare class MDOMPlugin {
    static get<PluginType extends DomPlugin<OptionsType>, OptionsType>(constructorFunction: {
        defaultMountPoint: string;
        new (element: HTMLElement, options: OptionsType): PluginType;
    }, element: HTMLElement): PluginType | undefined;
    static getRecursive<PluginType extends DomPlugin<OptionsType>, OptionsType>(constructorFunction: {
        defaultMountPoint: string;
        new (element: HTMLElement, options: OptionsType): PluginType;
    }, element: HTMLElement): PluginType | undefined;
    static attach<PluginType extends DomPlugin<OptionsType>, OptionsType>(constructorFunction: {
        defaultMountPoint: string;
        new (element: HTMLElement, options: OptionsType): PluginType;
    }, element: HTMLElement, options: OptionsType): DomPlugin<OptionsType>;
    static detach<PluginType extends DomPlugin<OptionsType>, OptionsType>(constructorFunction: {
        defaultMountPoint: string;
        new (element: HTMLElement, options: OptionsType): PluginType;
    }, element: HTMLElement): void;
    private static internalAttach;
    private static internalUpdate;
    private static mountPlugin;
    private static refreshPlugin;
    private static getMountFunction;
}
export interface DomPlugin<OptionsType> {
    element: HTMLElement;
    options: OptionsType;
    attach(mount: MountFunction): void;
    update(options: any, refresh: RefreshFunction): void;
    detach(): void;
    addEventListener(eventName: string, listener: EventListenerOrEventListenerObject): void;
    removeEventListener(eventName: string, listener?: EventListenerOrEventListenerObject): void;
    removeAllEvents(): void;
}
export declare abstract class MElementDomPlugin<OptionsType> implements DomPlugin<OptionsType> {
    protected attachedEvents: Map<string, EventListenerOrEventListenerObject[]>;
    protected _options: OptionsType;
    private readonly _element;
    get element(): HTMLElement;
    get options(): OptionsType;
    constructor(element: HTMLElement, options: OptionsType);
    abstract attach(mount: MountFunction): void;
    abstract update(options: any, refresh: RefreshFunction): void;
    abstract detach(): void;
    addEventListener(eventName: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean | undefined): void;
    removeEventListener(eventName: string): void;
    removeAllEvents(): void;
}
//# sourceMappingURL=domPlugin.d.ts.map