import { IDisposable } from './lifecycle';
export interface Event<T> {
    (listener: (e: T) => any): IDisposable;
}
export interface EmitterOptions {
    replay?: boolean;
}
export declare namespace Event {
    const any: <T>(...children: Event<T>[]) => Event<T>;
}
export declare class Emitter<T> implements IDisposable {
    private readonly options?;
    private _event?;
    private _last?;
    private _listeners;
    private _disposed;
    constructor(options?: EmitterOptions | undefined);
    get event(): Event<T>;
    fire(e: T): void;
    dispose(): void;
}
export declare function addDisposableWindowListener<K extends keyof WindowEventMap>(element: Window, type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
export declare function addDisposableListener<K extends keyof HTMLElementEventMap>(element: HTMLElement, type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
