/*! * @thednp/event-listener ESM v2.0.15 (https://thednp.github.io/event-listener) * Copyright 2026 © thednp * Licensed under MIT (https://github.com/thednp/event-listener/blob/main/LICENSE) */ //#region package.json.d.ts declare let version: string; //#endregion //#region src/types.d.ts /** * Type definitions addapted from React 18.2 * Project: https://react.dev/ */ type NativeAnimationEvent = AnimationEvent; type NativeClipboardEvent = ClipboardEvent; type NativeCompositionEvent = CompositionEvent; type NativeDragEvent = DragEvent; type NativeFocusEvent = FocusEvent; type NativeKeyboardEvent = KeyboardEvent; type NativeMouseEvent = MouseEvent; type NativeTouchEvent = TouchEvent; type NativePointerEvent = PointerEvent; type NativeTransitionEvent = TransitionEvent; type NativeUIEvent = UIEvent; type NativeWheelEvent = WheelEvent; interface AbstractView { document: Document; } interface BaseEvent { nativeEvent: E; currentTarget: C | null; target: T & EventTarget; bubbles: boolean; cancelable: boolean; defaultPrevented: boolean; eventPhase: number; isTrusted: boolean; preventDefault(): void; isDefaultPrevented(): boolean; stopPropagation(): void; isPropagationStopped(): boolean; persist(): void; timeStamp: number; type: string; } /** * currentTarget - a reference to the element on which the event listener is registered. * * target - a reference to the element from which the event was originally dispatched. * This might be a child element to the element on which the event listener is registered. * If you thought this should be `EventTarget & T`, see https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11508#issuecomment-256045682 */ type NativeEvent = BaseEvent; interface ClipboardEvent extends NativeEvent { clipboardData: DataTransfer; } interface CompositionEvent extends NativeEvent { data: string; } interface DragEvent extends MouseEvent { dataTransfer: DataTransfer; } interface PointerEvent extends MouseEvent { pointerId: number; pressure: number; tangentialPressure: number; tiltX: number; tiltY: number; twist: number; width: number; height: number; pointerType: "mouse" | "pen" | "touch"; isPrimary: boolean; } interface FocusEvent extends NativeEvent { relatedTarget: (EventTarget & R) | null; target: EventTarget & T; } type FormControl = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement; type FormEvent = NativeEvent; interface ChangeEvent extends FormEvent { target: EventTarget & T; } type ModifierKey = "Alt" | "AltGraph" | "CapsLock" | "Control" | "Fn" | "FnLock" | "Hyper" | "Meta" | "NumLock" | "ScrollLock" | "Shift" | "Super" | "Symbol" | "SymbolLock"; interface KeyboardEvent extends UIEvent { altKey: boolean; /** @deprecated */ charCode: number; ctrlKey: boolean; code: string; /** * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method. */ getModifierState(key: ModifierKey): boolean; /** * See the [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#named-key-attribute-values). for possible values */ key: string; /** @deprecated */ keyCode: number; locale: string; location: number; metaKey: boolean; repeat: boolean; shiftKey: boolean; /** @deprecated */ which: number; } interface MouseEvent extends UIEvent { altKey: boolean; button: number; buttons: number; clientX: number; clientY: number; ctrlKey: boolean; /** * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method. */ getModifierState(key: ModifierKey): boolean; metaKey: boolean; movementX: number; movementY: number; pageX: number; pageY: number; relatedTarget: EventTarget | null; screenX: number; screenY: number; shiftKey: boolean; } interface TouchEvent extends UIEvent { altKey: boolean; changedTouches: TouchList; ctrlKey: boolean; /** * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method. */ getModifierState(key: ModifierKey): boolean; metaKey: boolean; shiftKey: boolean; targetTouches: TouchList; touches: TouchList; } interface UIEvent extends NativeEvent { detail: number; view: AbstractView; } interface WheelEvent extends MouseEvent { deltaMode: number; deltaX: number; deltaY: number; deltaZ: number; } interface AnimationEvent extends NativeEvent { animationName: string; elapsedTime: number; pseudoElement: string; } interface TransitionEvent extends NativeEvent { elapsedTime: number; propertyName: string; pseudoElement: string; } type EventHandler> = (event: E) => void; type NativeEventHandler = EventHandler>; type ClipboardEventHandler = EventHandler>; type CompositionEventHandler = EventHandler>; type DragEventHandler = EventHandler>; type FocusEventHandler = EventHandler>; type FormEventHandler = EventHandler>; type ChangeEventHandler = EventHandler>; type KeyboardEventHandler = EventHandler>; type MouseEventHandler = EventHandler>; type TouchEventHandler = EventHandler>; type PointerEventHandler = EventHandler>; type UIEventHandler = EventHandler>; type WheelEventHandler = EventHandler>; type AnimationEventHandler = EventHandler>; type TransitionEventHandler = EventHandler>; type PossibleEventTarget = EventTarget & (Element | Document | Window | MediaQueryList); type EventRegistryEntry> = Map; type EventsRegistry = Record>>; //#endregion //#region src/index.d.ts declare const registry: EventsRegistry; /** * The global event listener. * * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/currentTarget */ declare const globalListener: (e: NativeEvent) => void; /** * Register a new listener with its options and attach the `globalListener` * to the target if this is the first listener. */ declare const addListener: (element: T, eventType: string, listener: L, options?: AddEventListenerOptions) => void; /** * Remove a listener from registry and detach the `globalListener` * if no listeners are found in the registry. */ declare const removeListener: (element: T, eventType: string, listener: L, options?: AddEventListenerOptions) => void; declare const on: typeof addListener; declare const off: typeof removeListener; //#endregion export { type AnimationEvent, type AnimationEventHandler, type ChangeEvent, type ChangeEventHandler, type ClipboardEvent, type ClipboardEventHandler, type CompositionEvent, type CompositionEventHandler, type DragEvent, type DragEventHandler, type EventRegistryEntry, type EventsRegistry, type FocusEvent, type FocusEventHandler, type FormEvent, type FormEventHandler, type KeyboardEvent, type KeyboardEventHandler, type MouseEvent, type MouseEventHandler, type NativeEvent, type NativeEventHandler, type PointerEvent, type PointerEventHandler, type PossibleEventTarget, type TouchEvent, type TouchEventHandler, type TransitionEvent, type TransitionEventHandler, type UIEvent, type UIEventHandler, type WheelEvent, type WheelEventHandler, addListener, globalListener, off, on, registry, removeListener, version }; //# sourceMappingURL=index.d.ts.map