import { Context, InterfaceHelpers, CtxPerformTask, EventData, State } from '.';
import { Emit, Off, Descriptor } from 'pullable-event-bus';
import { CtxToIn } from './module';
export interface FractalOn {
    (evName: string, evData: EventData, pullable?: boolean): Descriptor;
}
export interface InputHelpers<S> extends InterfaceHelpers<S> {
    state: S;
    toIn: CtxToIn;
    toChild: CtxToChild;
    toChildAct: CtxToChildAct;
    toAct: CtxToAct;
    set: CtxSet;
    task: CtxPerformTask;
    emit: Emit;
    on: FractalOn;
    off: Off;
    comps: CtxComponentHelpers;
    _clearCache: CtxClearCache;
}
export declare const makeInputHelpers: <S extends State>(ctx: Context<S>) => InputHelpers<S>;
export interface CtxStateOf<S extends State> {
    (name?: string): S;
}
export declare const _stateOf: (ctx: Context<any>) => CtxStateOf<any>;
export interface CtxToChild {
    (childCompName: string, inputName: string, msg?: any): void;
}
export declare const toChild: <S>(ctx: Context<S>) => (childCompName: any, inputName: any, msg?: any) => Promise<void>;
export interface CtxToChildAct {
    (childCompName: string, actionName: string, msg?: any): void;
}
export declare const toChildAct: <S>(ctx: Context<S>) => (childCompName: any, actionName: any, msg?: any) => Promise<void>;
export interface CtxToAct {
    (actionName: string, data?: any): Promise<any>;
}
export declare const toAct: <S>(ctx: Context<S>) => CtxToAct;
export interface CtxSet {
    (arg0: any, arg1?: any): Promise<any>;
}
export declare const set: <S>(ctx: Context<S>) => CtxSet;
export declare type SubscriptionInfo = Descriptor;
export interface CtxClearCache {
    (interfaceName: string, childNames?: string[]): void;
}
/**
 * Clears the interface cache of a component and its descendants
 * @param ctx The component Context
 */
export declare const _clearCache: <S>(ctx: Context<S>) => CtxClearCache;
export interface Instruction extends Array<any> {
    0: string;
    1: string;
    2: any;
}
export interface ComponentHelpers {
    getState(key: string, options?: {
        exceptions?: string[];
        nameFn?(name: string): string;
    }): any;
    getStates(options?: {
        path?: string[];
        exceptions?: string[];
        nameFn?(name: string): string;
    }): any;
    executeAll(insts: Instruction[]): void;
    broadcast(inputName: string, data?: any): void;
    optionalBroadcast(inputName: string, data?: any): void;
    seqBroadcast(inputName: string, data?: any): Promise<any>;
    seqOptionalBroadcast(inputName: string, data?: any): Promise<any>;
    getNames(): string[];
    getCompleteNames(): string[];
}
export interface CtxComponentHelpers {
    (groupName: string): ComponentHelpers;
}
export declare const getName: (name: string) => string;
export declare const getCompleteNames: (state: any, groupName: string) => string[];
export declare const getNames: (state: any, groupName: string) => string[];
export declare const _componentHelpers: <S extends State>(ctx: Context<S>) => CtxComponentHelpers;
