import type { MouseEvent } from "react";
import * as React from "react";
import type { ActionElementEventHandler, Classnames, Path, RuleGroupProps, RuleGroupType, RuleGroupTypeAny, RuleGroupTypeIC, ValidationResult, ValueChangeEventHandler } from "../types/index.mjs";
/**
* Default component to display {@link RuleGroupType} and {@link RuleGroupTypeIC}
* objects. This is actually a small wrapper around {@link RuleGroupHeaderComponents}
* and {@link RuleGroupBodyComponents}.
*
* @group Components
*/
export declare const RuleGroup: React.MemoExoticComponent<(props: RuleGroupProps) => React.JSX.Element>;
/**
* Renders a `React.Fragment` containing an array of form controls for managing
* a {@link RuleGroupType} or {@link RuleGroupTypeIC}.
*
* @group Components
*/
export declare const RuleGroupHeaderComponents: React.MemoExoticComponent<(rg: UseRuleGroup) => React.JSX.Element>;
/**
* Renders a `React.Fragment` containing an array of either (1) {@link Rule} and
* {@link RuleGroup}, or (2) {@link Rule}, {@link RuleGroup}, and {@link InlineCombinator}.
*
* @group Components
*/
export declare const RuleGroupBodyComponents: React.MemoExoticComponent<(rg: UseRuleGroup) => React.JSX.Element>;
export type UseRuleGroup = RuleGroupProps & {
	addGroup: ActionElementEventHandler
	addRule: ActionElementEventHandler
	accessibleDescription: string
	classNames: Pick<{ [k in keyof Classnames] : string }, "header" | "shiftActions" | "dragHandle" | "combinators" | "notToggle" | "addRule" | "addGroup" | "cloneGroup" | "lockGroup" | "removeGroup" | "body">
	cloneGroup: ActionElementEventHandler
	onCombinatorChange: ValueChangeEventHandler
	onGroupAdd: (group: RuleGroupTypeAny, parentPath: Path, context?: any) => void
	onIndependentCombinatorChange: (value: any, index: number, context?: any) => void
	onNotToggleChange: (checked: boolean, context?: any) => void
	outerClassName: string
	pathsMemo: {
		path: Path
		disabled: boolean
	}[]
	removeGroup: ActionElementEventHandler
	ruleGroup: RuleGroupType | RuleGroupTypeIC
	shiftGroupDown: (event?: MouseEvent, context?: any) => void
	shiftGroupUp: (event?: MouseEvent, context?: any) => void
	toggleLockGroup: ActionElementEventHandler
	validationClassName: string
	validationResult: boolean | ValidationResult
};
/**
* Prepares all values and methods used by the {@link RuleGroup} component.
*
* @group Hooks
*/
export declare const useRuleGroup: (props: RuleGroupProps) => UseRuleGroup;
