import type { UseMergedContextReturn } from "../hooks/useMergedContext";
import type { BaseOption, FullCombinator, FullField, FullOperator, FullOption, FullOptionList, FullOptionMap, GetOptionIdentifierType, GetRuleTypeFromGroupWithFieldAndOperator, MatchModeOptions, Option, OptionGroup, QueryBuilderProps, RemoveNullability, RuleGroupTypeAny, RuleType, ValueSourceFullOptions, WithUnknownIndex } from "../types";
export type UseQueryBuilderSetup<
	RG extends RuleGroupTypeAny,
	F extends FullField,
	O extends FullOperator,
	C extends FullCombinator
> = {
	qbId: string;
	rqbContext: UseMergedContextReturn<F, GetOptionIdentifierType<O>, true>;
	fields: FullOptionList<F>;
	fieldMap: FullOptionMap<FullField<string, string, string, FullOption, FullOption>, GetOptionIdentifierType<F>>;
	combinators: WithUnknownIndex<BaseOption<string> & FullOption>[] | OptionGroup<WithUnknownIndex<BaseOption<string> & FullOption>>[];
	getRuleDefaultValue: <RT extends RuleType = GetRuleTypeFromGroupWithFieldAndOperator<RG, F, O>>(r: RT) => any;
	createRule: () => GetRuleTypeFromGroupWithFieldAndOperator<RG, F, O>;
	createRuleGroup: (independentCombinators?: boolean) => RG;
} & RemoveNullability<{
	getInputTypeMain: QueryBuilderProps<RG, F, O, C>["getInputType"];
	getRuleDefaultOperator: QueryBuilderProps<RG, F, O, C>["getDefaultOperator"];
	getValueEditorTypeMain: QueryBuilderProps<RG, F, O, C>["getValueEditorType"];
}> & {
	getValueSourcesMain: (field: GetOptionIdentifierType<F>, operator: GetOptionIdentifierType<O>, misc: {
		fieldData: F;
	}) => ValueSourceFullOptions;
	getSubQueryBuilderPropsMain: (field: GetOptionIdentifierType<F>, misc: {
		fieldData: F;
	}) => Record<string, unknown>;
	getMatchModesMain: (field: GetOptionIdentifierType<F>, misc?: {
		fieldData: F;
	}) => MatchModeOptions;
	getOperatorsMain: (...p: Parameters<NonNullable<QueryBuilderProps<RG, F, O, C>["getOperators"]>>) => FullOptionList<O>;
	getValuesMain: (...p: Parameters<NonNullable<QueryBuilderProps<RG, F, O, C>["getValues"]>>) => FullOptionList<Option>;
};
/**
* Massages the props as necessary and prepares the basic update/generate methods
* for use by the {@link QueryBuilder} component.
*
* @group Hooks
*/
export declare const useQueryBuilderSetup: <
	RG extends RuleGroupTypeAny,
	F extends FullField,
	O extends FullOperator,
	C extends FullCombinator
>(props: QueryBuilderProps<RG, F, O, C>) => UseQueryBuilderSetup<RG, F, O, C>;
