import { Optional } from '@ephox/katamari';
import { BehaviourState, BehaviourStateInitialiser } from './BehaviourState';
import { AlloyBehaviour, BehaviourConfigDetail, BehaviourConfigSpec, BehaviourRecord } from './BehaviourTypes';
export interface BehaviourConfigAndState<C extends BehaviourConfigDetail, S extends BehaviourState> {
    config: C;
    state: S;
}
export interface BehaviourSpec<C extends BehaviourConfigSpec, D extends BehaviourConfigDetail, S extends BehaviourState> {
    config: C;
    state: BehaviourStateInitialiser<D, S>;
}
export interface BehaviourData<C extends BehaviourConfigSpec, D extends BehaviourConfigDetail, S extends BehaviourState> {
    list: Array<AlloyBehaviour<C, D, S>>;
    data: Record<string, () => Optional<BehaviourConfigAndState<D, S>>>;
}
declare const generateFrom: (spec: {
    behaviours?: BehaviourRecord;
}, all: Array<AlloyBehaviour<BehaviourConfigSpec, BehaviourConfigDetail, BehaviourState>>) => BehaviourData<BehaviourConfigSpec, BehaviourConfigDetail, BehaviourState>;
declare const getBehaviours: <C extends BehaviourConfigSpec, D extends BehaviourConfigDetail, S extends BehaviourState>(bData: BehaviourData<C, D, S>) => AlloyBehaviour<C, D, S>[];
declare const getData: <C extends BehaviourConfigSpec, D extends BehaviourConfigDetail, S extends BehaviourState>(bData: BehaviourData<C, D, S>) => Record<string, () => Optional<BehaviourConfigAndState<D, S>>>;
export { generateFrom, getBehaviours, getData };
//# sourceMappingURL=BehaviourBlob.d.ts.map