import { FederatedPointerEvent, FederatedWheelEvent } from './federated-event';
import type { IEventTarget } from '../interface/event';
import type { FederatedEvent } from './federated-event/base-event';
import type { Cursor } from '../interface';
type TrackingData = {
    pressTargetsByButton: {
        [id: number]: IEventTarget[];
    };
    clicksByButton: {
        [id: number]: {
            clickCount: number;
            target: IEventTarget;
            timeStamp: number;
        };
    };
    overTargets: IEventTarget[];
};
type EventManagerConfig = {
    clickInterval?: number;
    supportsTouchEvents?: boolean;
};
export declare class EventManager {
    rootTarget: IEventTarget;
    dispatch: any;
    cursor: Cursor | string;
    cursorTarget: IEventTarget | null;
    pauseNotify: boolean;
    protected mappingTable: Record<string, Array<{
        fn: (e: FederatedEvent, target: IEventTarget) => void;
        priority: number;
    }>>;
    protected mappingState: Record<string, any>;
    protected eventPool: Map<typeof FederatedEvent, FederatedEvent[]>;
    private _prePointTargetCache;
    private _config;
    constructor(root: IEventTarget, config: EventManagerConfig);
    addEventMapping(type: string, fn: (e: FederatedEvent, target: IEventTarget) => void): void;
    dispatchEvent(e: FederatedEvent, type?: string): void;
    mapEvent(e: FederatedEvent): void;
    propagate(e: FederatedEvent, type?: string): void;
    propagationPath(target: IEventTarget): IEventTarget[];
    protected notifyTarget(e: FederatedEvent, type?: string): void;
    protected onPointerDown: (from: FederatedEvent, target: IEventTarget) => void;
    protected onPointerMove: (from: FederatedEvent, target: IEventTarget) => void;
    protected onPointerOver: (from: FederatedEvent, target: IEventTarget) => void;
    protected onPointerOut: (from: FederatedEvent, target: IEventTarget) => void;
    protected onPointerUp: (from: FederatedEvent, target: IEventTarget) => void;
    protected onPointerUpOutside: (from: FederatedEvent, target: IEventTarget) => void;
    protected onWheel: (from: FederatedEvent, target: IEventTarget) => void;
    protected findMountedTarget(propagationPath: IEventTarget[] | null): IEventTarget | null;
    protected createPointerEvent(from: FederatedPointerEvent, type?: string, target?: IEventTarget): FederatedPointerEvent;
    protected createWheelEvent(from: FederatedWheelEvent, target?: IEventTarget): FederatedWheelEvent;
    protected clonePointerEvent(from: FederatedPointerEvent, type?: string): FederatedPointerEvent;
    copyWheelData(from: FederatedWheelEvent, to: FederatedWheelEvent): void;
    copyPointerData(from: FederatedEvent, to: FederatedEvent): void;
    copyMouseData(from: FederatedEvent, to: FederatedEvent): void;
    copyData(from: FederatedEvent, to: FederatedEvent): void;
    protected trackingData(id: number): TrackingData;
    protected allocateEvent<T extends FederatedEvent>(constructor: {
        new (boundary: EventManager): T;
    }): T;
    protected freeEvent<T extends FederatedEvent>(event: T): void;
    private notifyListeners;
    private emitDelegation;
    private pickTarget;
    release(): void;
}
export {};
