import { InstantiateContext } from "../engine/engine_gameobject.js";
import type { IEventList } from "../engine/engine_types.js";
export declare class CallInfo {
    /**
     * When the CallInfo is enabled it will be invoked when the EventList is invoked
     */
    enabled: boolean;
    /**
     * The target object to invoke the method on OR the function to invoke
     */
    target: Object | Function;
    methodName: string | null;
    /**
     * The arguments to invoke this method with
     */
    arguments?: Array<any>;
    get canClone(): boolean;
    constructor(target: Function);
    constructor(target: Object, methodName: string | null, args?: Array<any>, enabled?: boolean);
    invoke(...args: any): void;
}
export declare class EventListEvent<TArgs extends any> extends Event {
    args?: TArgs;
}
/**
 * The EventList is a class that can be used to create a list of event listeners that can be invoked
 */
export declare class EventList<TArgs extends any = any> implements IEventList {
    /** checked during instantiate to create a new instance */
    readonly isEventList = true;
    /**
     * @internal Used by the Needle Engine instantiate call to remap the event listeners to the new instance
     */
    __internalOnInstantiate(ctx: InstantiateContext): EventList<any>;
    private target?;
    private key?;
    /** set an event target to try invoke the EventTarget dispatchEvent when this EventList is invoked */
    setEventTarget(key: string, target: object): void;
    /** How many callback methods are subscribed to this event */
    get listenerCount(): number;
    /** If the event is currently being invoked */
    get isInvoking(): boolean;
    private _isInvoking;
    private readonly methods;
    private readonly _methodsCopy;
    static from(...evts: Array<Function>): EventList<any>;
    constructor(evts?: Array<CallInfo | Function> | Function);
    /** Invoke all the methods that are subscribed to this event */
    invoke(...args: Array<TArgs>): boolean;
    /** Add a new event listener to this event */
    addEventListener(cb: (args: TArgs) => void): Function;
    removeEventListener(cb: Function | null | undefined): void;
    removeAllEventListeners(): void;
}
