import { EventRaw, UIEventRaw, DragEventRaw, FocusEventRaw, MouseEventRaw, TouchEventRaw, KeyboardEventRaw, } from './alias' import { EventObject } from './object' interface EventBase< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, TEvent extends EventRaw = any, > extends EventObject { relatedTarget?: undefined bubbles: boolean cancelable: boolean eventPhase: number detail: undefined view: undefined button: undefined buttons: undefined clientX: undefined clientY: undefined offsetX: undefined offsetY: undefined pageX: undefined pageY: undefined screenX: undefined screenY: undefined /** @deprecated */ toElement: undefined pointerId: undefined pointerType: undefined /** @deprecated */ char: undefined /** @deprecated */ charCode: undefined key: undefined /** @deprecated */ keyCode: undefined changedTouches: undefined targetTouches: undefined touches: undefined which: undefined altKey: undefined ctrlKey: undefined metaKey: undefined shiftKey: undefined } interface ChangeEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends EventBase { type: 'change' } interface ResizeEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends EventBase { type: 'resize' } interface ScrollEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends EventBase { type: 'scroll' } interface SelectEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends EventBase { type: 'select' } interface SubmitEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends EventBase { type: 'submit' } interface UIEventBase< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, TEvent extends UIEventRaw = any, > extends EventObject { bubbles: boolean cancelable: boolean eventPhase: number detail: number view: Window } interface MouseEventBase< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends UIEventBase< TDelegateTarget, TData, TCurrentTarget, TTarget, MouseEventRaw > { relatedTarget?: EventTarget | null button: number buttons: number clientX: number clientY: number offsetX: number offsetY: number pageX: number pageY: number screenX: number screenY: number /** @deprecated */ toElement: Element pointerId: undefined pointerType: undefined /** @deprecated */ char: undefined /** @deprecated */ charCode: undefined key: undefined /** @deprecated */ keyCode: undefined changedTouches: undefined targetTouches: undefined touches: undefined which: number altKey: boolean ctrlKey: boolean metaKey: boolean shiftKey: boolean } export interface ClickEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { relatedTarget?: null type: 'click' } export interface ContextMenuEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { relatedTarget?: null type: 'contextmenu' } export interface DoubleClickEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { relatedTarget?: null type: 'dblclick' } export interface MouseDownEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { relatedTarget?: null type: 'mousedown' } export interface MouseEnterEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { type: 'mouseenter' } export interface MouseLeaveEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { type: 'mouseleave' } export interface MouseMoveEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { relatedTarget?: null type: 'mousemove' } export interface MouseOutEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { type: 'mouseout' } export interface MouseOverEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { type: 'mouseover' } export interface MouseUpEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends MouseEventBase { relatedTarget?: null type: 'mouseup' } interface DragEventBase< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends UIEventBase< TDelegateTarget, TData, TCurrentTarget, TTarget, DragEventRaw > {} export interface DragEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends DragEventBase { type: 'drag' } export interface DragEndEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends DragEventBase { type: 'dragend' } export interface DragEnterEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends DragEventBase { type: 'dragenter' } export interface DragExitEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends DragEventBase { type: 'dragexit' } export interface DragLeaveEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends DragEventBase { type: 'dragleave' } export interface DragOverEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends DragEventBase { type: 'dragover' } export interface DragStartEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends DragEventBase { type: 'dragstart' } export interface DropEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends DragEventBase { type: 'drop' } interface KeyboardEventBase< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends UIEventBase< TDelegateTarget, TData, TCurrentTarget, TTarget, KeyboardEventRaw > { relatedTarget?: undefined button: undefined buttons: undefined clientX: undefined clientY: undefined offsetX: undefined offsetY: undefined pageX: undefined pageY: undefined screenX: undefined screenY: undefined /** @deprecated */ toElement: undefined pointerId: undefined pointerType: undefined /** @deprecated */ char: string | undefined /** @deprecated */ charCode: number code: string key: string /** @deprecated */ keyCode: number changedTouches: undefined targetTouches: undefined touches: undefined which: number altKey: boolean ctrlKey: boolean metaKey: boolean shiftKey: boolean } export interface KeyDownEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends KeyboardEventBase { type: 'keydown' } export interface KeyPressEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends KeyboardEventBase { type: 'keypress' } export interface KeyUpEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends KeyboardEventBase { type: 'keyup' } interface TouchEventBase< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends UIEventBase< TDelegateTarget, TData, TCurrentTarget, TTarget, TouchEventRaw > { relatedTarget?: undefined button: undefined buttons: undefined clientX: undefined clientY: undefined offsetX: undefined offsetY: undefined pageY: undefined screenX: undefined screenY: undefined /** @deprecated */ toElement: undefined pointerId: undefined pointerType: undefined /** @deprecated */ char: undefined /** @deprecated */ charCode: undefined key: undefined /** @deprecated */ keyCode: undefined changedTouches: TouchList targetTouches: TouchList touches: TouchList which: undefined altKey: boolean ctrlKey: boolean metaKey: boolean shiftKey: boolean } export interface TouchCancelEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends TouchEventBase { type: 'touchcancel' } export interface TouchEndEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends TouchEventBase { type: 'touchend' } export interface TouchMoveEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends TouchEventBase { type: 'touchmove' } export interface TouchStartEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends TouchEventBase { type: 'touchstart' } interface FocusEventBase< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends UIEventBase< TDelegateTarget, TData, TCurrentTarget, TTarget, FocusEventRaw > { relatedTarget?: EventTarget | null button: undefined buttons: undefined clientX: undefined clientY: undefined offsetX: undefined offsetY: undefined pageX: undefined pageY: undefined screenX: undefined screenY: undefined /** @deprecated */ toElement: undefined pointerId: undefined pointerType: undefined /** @deprecated */ char: undefined /** @deprecated */ charCode: undefined key: undefined /** @deprecated */ keyCode: undefined changedTouches: undefined targetTouches: undefined touches: undefined which: undefined altKey: undefined ctrlKey: undefined metaKey: undefined shiftKey: undefined } export interface BlurEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends FocusEventBase { type: 'blur' } export interface FocusEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends FocusEventBase { type: 'focus' } export interface FocusInEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends FocusEventBase { type: 'focusin' } export interface FocusOutEvent< TDelegateTarget = any, TData = any, TCurrentTarget = any, TTarget = any, > extends FocusEventBase { type: 'focusout' } interface TypeToTriggeredEventMap< TDelegateTarget, TData, TCurrentTarget, TTarget, > { // Event change: ChangeEvent resize: ResizeEvent scroll: ScrollEvent select: SelectEvent submit: SubmitEvent // UIEvent // MouseEvent click: ClickEvent contextmenu: ContextMenuEvent dblclick: DoubleClickEvent mousedown: MouseDownEvent mouseenter: MouseEnterEvent mouseleave: MouseLeaveEvent mousemove: MouseMoveEvent mouseout: MouseOutEvent mouseover: MouseOverEvent mouseup: MouseUpEvent // DragEvent drag: DragEvent dragend: DragEndEvent dragenter: DragEnterEvent dragexit: DragExitEvent dragleave: DragLeaveEvent dragover: DragOverEvent dragstart: DragStartEvent drop: DropEvent // KeyboardEvent keydown: KeyDownEvent keypress: KeyPressEvent keyup: KeyUpEvent // TouchEvent touchcancel: TouchCancelEvent touchend: TouchEndEvent touchmove: TouchMoveEvent touchstart: TouchStartEvent // FocusEvent blur: BlurEvent focus: FocusEvent focusin: FocusInEvent focusout: FocusOutEvent [type: string]: EventObject } export type EventHandlerBase = ( this: TContext, e: T, ...args: any[] ) => any export type EventHandler = EventHandlerBase< TCurrentTarget, EventObject > export type TypeEventHandler< TDelegateTarget, TData, TCurrentTarget, TTarget, TType extends keyof TypeToTriggeredEventMap< TDelegateTarget, TData, TCurrentTarget, TTarget >, > = EventHandlerBase< TCurrentTarget, TypeToTriggeredEventMap< TDelegateTarget, TData, TCurrentTarget, TTarget >[TType] > export interface TypeEventHandlers< TDelegateTarget, TData, TCurrentTarget, TTarget, > extends TypeEventHandlersBase< TDelegateTarget, TData, TCurrentTarget, TTarget > { // No idea why it's necessary to include `object` in the union but otherwise TypeScript complains that // derived types of Event are not assignable to Event. [type: string]: | TypeEventHandler | false | undefined | Record } type TypeEventHandlersBase = { [TType in keyof TypeToTriggeredEventMap< TDelegateTarget, TData, TCurrentTarget, TTarget >]?: | TypeEventHandler | false | Record }