import { BlocConstructor, BlocGeneric, BlocHookDependencyArrayFn, BlocState, InferPropsFromGeneric } from 'blac';

type HookTypes<B extends BlocConstructor<BlocGeneric>> = [
    BlocState<InstanceType<B>>,
    InstanceType<B>
];
export interface BlocHookOptions<B extends BlocGeneric<any, any>> {
    id?: string;
    dependencySelector?: BlocHookDependencyArrayFn<B>;
    props?: InferPropsFromGeneric<B>;
    inferStateUsage?: boolean;
}
export declare class UseBlocClass {
    static ridUsedKeys: Map<string, Set<string>>;
    static getUsedKeys: (rid: string) => Set<string>;
    static useBloc<B extends BlocConstructor<BlocGeneric>, O extends BlocHookOptions<InstanceType<B>>>(bloc: B, options?: O): HookTypes<B>;
}
declare const useBloc: typeof UseBlocClass.useBloc;
export default useBloc;
