import type { AddEventListener, ComparableEventListenerLike, DetailEventListener, EventListenerRegistry, EventListeners, RemoveEventListener } from "./types.js";
/** Register {@linkcode listener} if the {@linkcode registry} has not {@linkcode listener}.
 * If {@linkcode listener} `signal` is passed, add algorithm.
 *
 * @see https://dom.spec.whatwg.org/#add-an-event-listener
 */
export declare function addAnEventListener(target: Readonly<EventTarget>, listener: Readonly<DetailEventListener>, registry: EventListenerRegistry): void;
/** Remove {@linkcode listener} from {@linkcode registry}.
 * @see https://dom.spec.whatwg.org/#remove-an-event-listener
 */
export declare function removeAnEventListener(target: Readonly<EventTarget>, listener: Readonly<ComparableEventListenerLike>, registry: EventListenerRegistry): void;
export declare function getEventListenersWithContext(context: {
    target: EventTarget;
    registry: EventListenerRegistry;
}): EventListeners;
export declare function createAddEventListener(context: {
    addEventListener: AddEventListener;
    registry: EventListenerRegistry;
}): AddEventListener;
export declare function createRemoveEventListener(context: {
    removeEventListener: RemoveEventListener;
    registry: EventListenerRegistry;
}): RemoveEventListener;
export declare function createGetEventListener(registry: EventListenerRegistry): GetEventListeners;
/** Setup event listener monitoring.
 * Performs a side effect and changes the prototype of `EventTarget`.
 */
export declare function updateEventListener(): GetEventListeners;
export interface EventListenerContext {
    addEventListener: AddEventListener;
    removeEventListener: RemoveEventListener;
    getEventListeners: GetEventListeners;
}
export interface GetEventListeners {
    (target: EventTarget): EventListeners;
}
export interface ContextOptions extends Partial<Pick<EventListenerContext, "addEventListener" | "removeEventListener">> {
    registry?: EventListenerRegistry;
}
export declare function createContext(options?: ContextOptions): EventListenerContext;
