import { Numeric } from '../../util/NumberUtils/NumberUtils';
export declare type Requireable = any;
export declare type Ord = Numeric;
export declare type Num = Numeric;
export declare type Eq = any;
export interface IOperator<B, I> {
    (baseValue: B): (inputValue: I) => boolean;
}
export interface IRequireableOperator extends IOperator<undefined, Requireable> {
    (): (inputValue: Requireable) => boolean;
}
export interface IOrdOperator extends IOperator<Ord, Ord> {
    (baseValue: Numeric): (inputValue: Numeric) => boolean;
}
export interface IOrdAlphaOperator extends IOperator<string, string> {
}
export interface INumOperator extends IOperator<Ord, Ord> {
    (baseValue: Numeric): (inputValue: Numeric) => boolean;
}
export interface IEqOperator extends IOperator<any, any> {
    <T>(baseValue: T): (inputValue: T) => boolean;
}
export interface IGetValidatorBaseValue<B, F, P> {
    (allValues: F, componentProps: P, fieldName: string): B;
}
export interface IGetValidatorErrorMessage<B, I, F, P> {
    (validationBaseValue: B, inputValue: I, allValues: F, componentProps: P, fieldName: string): string;
}
export interface IParseValue<R, V> {
    (input: R): V;
}
export declare type ValidationError = string | undefined;
export declare type Validator<I, F, P> = (inputValue: I, allValues?: F, props?: P, name?: keyof F) => ValidationError;
export declare enum ValidateTrigger {
    Always = "Always",
    IfInputIsSet = "IfInputIsSet",
    IfBaseIsSet = "IfBaseIsSet",
    IfInputAndBaseAreSet = "IfInputAndBaseAreSet"
}
interface IValidatorCreatorProps<B, I, F, P> {
    validateOverride?: ValidateTrigger;
    getValidatorBaseValueOverride?: IGetValidatorBaseValue<B, F, P> | B;
    getValidatorErrorMessageOverride?: IGetValidatorErrorMessage<B, I, F, P> | string;
    getValueFromInputOverride?: IParseValue<any, I>;
    getValueFromBaseOverride?: IParseValue<any, B>;
}
export declare type ValidatorCreator<B, I, F, P> = (props?: IValidatorCreatorProps<B, I, F, P>) => Validator<I, F, P>;
export declare type Operator<B, I> = (baseValue: B) => (inputValue: I) => boolean;
export interface IFormFieldSpecification {
    label: string;
    path: string;
}
export interface IFormFieldSpecificationDescriptor extends Omit<IFormFieldSpecification, 'path'> {
    path?: IFormFieldSpecification['path'];
}
export interface IFormFieldValue<T> extends IFormFieldSpecification {
    value: T;
}
export interface ITransformer<V, R> {
    (value: V): R;
}
export declare type RegexOperator = (regex: RegExp) => (inputValue: string) => boolean;
export declare type Preprocessor<T> = (value: T) => T;
export {};
