import * as React from 'react';
import { validationTypes, IStringValidationOptions, INumberValidationOptions, IDateValidationOptions, IEmailValidationOptions, IValidationFailMessages, IArrayValidationOptions, IRegExValidationOptions } from '@dock365/validator';
import { IFieldRenderProps as IRenderProps } from "@dock365/reform";
export declare type validationRulesType = (IStringValidationOptions & {
    type: validationTypes.String;
}) | (INumberValidationOptions & {
    type: validationTypes.Number;
}) | (IDateValidationOptions & {
    type: validationTypes.Date;
}) | (IArrayValidationOptions & {
    type: validationTypes.Array;
}) | (IRegExValidationOptions & {
    type: validationTypes.RegEx;
}) | (IEmailValidationOptions & {
    type: validationTypes.Email;
});
export interface IFieldRenderProps extends IRenderProps {
    defaultValueIsUpdatable?: boolean;
    className?: string;
    onClick?: (event: React.MouseEvent<any>) => void;
}
export declare enum ValidateOnTypes {
    OnChange = 0,
    OnBlur = 1
}
export interface IFieldProps {
    name: string;
    label?: string;
    placeholder?: string;
    defaultValue?: any;
    defaultValueIsUpdatable?: boolean;
    render: React.ComponentType<IFieldRenderProps>;
    hideLabel?: boolean;
    readOnly?: boolean;
    onChange?: (value: any, name: string, resetFields: () => void) => any;
    onBlur?: (value: any, name: string, errors: string[], resetFields: () => void) => any;
    validationRules?: validationRulesType;
    validate?: true;
    showAsteriskOnRequired?: boolean;
    customProps?: any;
    className?: string;
    customValidation?: (value?: any, validationRules?: validationRulesType) => string[];
    validationMessages?: IValidationFailMessages;
    onClick?: (event: React.MouseEvent<any>) => void;
}
export interface IFieldState {
    value: any;
    errors: string[];
    customErrors: string[];
}
export default class Field extends React.Component<IFieldProps, IFieldState> {
    private validator;
    constructor(props: IFieldProps);
    componentDidUpdate(prevProps: IFieldProps): void;
    render(): React.ReactElement<IFieldRenderProps, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)> | null) | (new (props: any) => React.Component<any, any, any>)>;
    private _resetField;
    private _validateField;
    private _updateCustomValidationMessage;
}
