import type { MouseEvent } from "react";
import * as React from "react";
import type { ActionElementEventHandler, FlexibleOptionList, FullField, FullOperator, InputType, Option, OptionList, RuleProps, RuleType, ValidationResult, ValueChangeEventHandler, ValueEditorType, ValueSourceOptions, ValueSources } from "../types";
/**
* Default component to display {@link RuleType} objects. This is
* actually a small wrapper around {@link RuleComponents}.
*
* @group Components
*/
export declare const Rule: React.MemoExoticComponent<(r: RuleProps) => React.JSX.Element>;
/**
* Renders a `React.Fragment` containing an array of form controls for managing a {@link RuleType}.
*
* @group Components
*/
export declare const RuleComponents: React.MemoExoticComponent<(r: UseRule) => React.JSX.Element>;
export type UseRule = RuleProps & {
	classNames: {
		shiftActions: string
		dragHandle: string
		fields: string
		operators: string
		valueSource: string
		value: string
		cloneRule: string
		lockRule: string
		removeRule: string
	}
	cloneRule: ActionElementEventHandler
	fieldData: FullField<string, string, string, Option<string>, Option<string>>
	generateOnChangeHandler: (prop: Exclude<keyof RuleType, "id" | "path">) => ValueChangeEventHandler
	onChangeValueSource: ValueChangeEventHandler
	onChangeField: ValueChangeEventHandler
	onChangeOperator: ValueChangeEventHandler
	onChangeValue: ValueChangeEventHandler
	hideValueControls: boolean
	inputType: InputType | null
	operators: OptionList<FullOperator>
	outerClassName: string
	removeRule: ActionElementEventHandler
	shiftRuleUp: (event?: MouseEvent, _context?: any) => void
	shiftRuleDown: (event?: MouseEvent, _context?: any) => void
	toggleLockRule: ActionElementEventHandler
	validationResult: boolean | ValidationResult
	valueEditorSeparator: React.ReactNode
	valueEditorType: ValueEditorType
	values: FlexibleOptionList<Option<string>>
	valueSourceOptions: ValueSourceOptions
	valueSources: ValueSources
};
/**
* Prepares all values and methods used by the {@link Rule} component.
*
* @group Hooks
*/
export declare const useRule: (props: RuleProps) => UseRule;
