import { Nullable, Timestamp } from "../types";
export declare class TEvent {
    private static counter;
    readonly uuid: number;
    protected _spawnedFrom: Nullable<this>;
    readonly name: string;
    readonly source: any;
    sourceState: any;
    payload: any;
    cancelled: boolean;
    timeStamp: Timestamp;
    children: TEvent[];
    constructor(name: string, source: any, payload?: any);
    get spawnedFrom(): Nullable<this>;
    protected setSpawnedFrom(msg: Nullable<this>): void;
    spawn(name: string, source: any, payload?: any): TEvent;
    private _rootEvent;
    get rootEvent(): this;
}
export declare class State {
    private static counter;
    stateData: any;
    readonly id: number;
    get name(): string;
    enter(data: any): void;
    handle(event: TEvent): void;
}
export type EventCallback = ((event: TEvent) => void) | ((event: TEvent) => Promise<void>);
export declare class EventEmitter {
    protected _eventHub: EventHub | null;
    constructor();
    get eventHub(): EventHub | null;
    set eventHub(hub: EventHub | null);
    protected eventHubChanged(oldHub: EventHub | null): void;
}
export declare class EventHub {
    private _handlers;
    on(names: Array<string> | string, callback: EventCallback): this;
    removeOn(names: Array<string> | string, callback: EventCallback): this;
    _ensurestrings(names: Array<string> | string): string[];
    _addHandler<T>(names: Array<string> | string, handlerlist: {
        [key: string]: Array<T>;
    }, handler: T): this;
    _removeHandler<T>(names: Array<string> | string, handlerlist: {
        [key: string]: Array<T>;
    }, handler: T): this;
    emit(name: string, source: any, payload?: any): boolean;
    dispatchEvent(event: TEvent): boolean;
    static BATCH_EVENTS: string;
    protected _events: TEvent[];
    protected _inBatchMode: boolean;
    startBatchMode(): this;
    cancelBatch(): void;
    commitBatch(): void;
}
export declare class StateMachine {
    private _states;
    private _rootState;
    private _currentState;
    constructor();
    set rootState(name: string);
    enter(state: string, data?: any): void;
    getState(name: string): State;
    registerState(state: State, isRoot?: boolean): void;
    handle(event: TEvent): void;
}
