export type SyncCallback = ((...args: unknown[]) => void);
export type Callback = ((...args: unknown[]) => Promise<void>) | SyncCallback;
export interface ITransition<STATE, EVENT, CALLBACK> {
    fromState: STATE;
    event: EVENT;
    toState: STATE;
    cb: CALLBACK;
}
export declare function t<STATE, EVENT, CALLBACK>(fromState: STATE, event: EVENT, toState: STATE, cb?: CALLBACK): ITransition<STATE, EVENT, CALLBACK>;
export type ILogger = Partial<typeof console> & {
    error(...data: unknown[]): void;
};
/**
 * StateMachine
 * TypeScript finite state machine class with async transformations.
 */
export declare class StateMachine<STATE extends string | number | symbol, EVENT extends string | number | symbol, CALLBACK extends Record<EVENT, Callback> = Record<EVENT, Callback>> {
    protected init: STATE;
    protected transitions: ITransition<STATE, EVENT, CALLBACK[EVENT]>[];
    protected readonly logger: ILogger;
    protected _current: STATE;
    constructor(init: STATE, transitions?: ITransition<STATE, EVENT, CALLBACK[EVENT]>[], logger?: ILogger);
    addTransitions(transitions: ITransition<STATE, EVENT, CALLBACK[EVENT]>[]): void;
    getState(): STATE;
    can(event: EVENT): boolean;
    getNextState(event: EVENT): STATE | undefined;
    isFinal(): boolean;
    protected formatErr(fromState: STATE, event: EVENT): string;
    dispatch<E extends EVENT>(event: E, ...args: unknown[]): Promise<void>;
    /**
     * Generate a Mermaid StateDiagram of the current machine.
     */
    toMermaid(title?: string): string;
}
/**
 * SyncStateMachine
 * TypeScript finite state machine class with sync transformations.
 */
export declare class SyncStateMachine<STATE extends string | number | symbol, EVENT extends string | number | symbol, CALLBACK extends Record<EVENT, SyncCallback> = Record<EVENT, SyncCallback>> extends StateMachine<STATE, EVENT, CALLBACK> {
    constructor(init: STATE, transitions?: ITransition<STATE, EVENT, CALLBACK[EVENT]>[], logger?: ILogger);
    dispatch<E extends EVENT>(_event: E, ..._args: unknown[]): Promise<void>;
    syncDispatch<E extends EVENT>(event: E, ...args: unknown[]): boolean;
}
