import React from 'react';
import PropTypes from 'prop-types';
import { FormErrorAutoFocusContainer } from './FormErrorAutoFocusContainer';
import { HashMap } from '../../typings/common';
declare type InputConverter = () => any;
declare type OutputConverter = () => any;
declare type Props = {
    onChange?: Function;
    name?: string;
    inputConverter: InputConverter;
    outputConverter: OutputConverter;
    noContainer?: boolean;
    testAutomationId?: string;
    children: React.ReactNode;
    disableAutoFocus?: boolean;
    className?: string;
} & Partial<DefaultProps> & Partial<FormContext['form']>;
declare type DefaultProps = {
    name: string;
    inputConverter: null;
    outputConverter: null;
    testAutomationId: string;
    noContainer: boolean;
    disableAutoFocus: boolean;
};
declare type FormValue = HashMap<any>;
export declare type FormContext = {
    form: {
        readOnly: boolean;
        value: FormValue;
        errors: HashMap<string | undefined>;
        setValue: Function;
        autoFocus?: Function;
    };
};
export declare class Form extends React.Component<Props> implements React.ChildContextProvider<FormContext> {
    static childContextTypes: {
        form: PropTypes.Requireable<object>;
    };
    static contextTypes: {
        form: PropTypes.Requireable<object>;
    };
    static propTypes: {
        onChange: PropTypes.Requireable<(...args: any[]) => any>;
        name: PropTypes.Requireable<string>;
        inputConverter: PropTypes.Requireable<(...args: any[]) => any>;
        outputConverter: PropTypes.Requireable<(...args: any[]) => any>;
        noContainer: PropTypes.Requireable<boolean>;
        testAutomationId: PropTypes.Requireable<string>;
        children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        className: PropTypes.Requireable<string>;
    };
    static defaultProps: {
        onChange: any;
        name: string;
        inputConverter: any;
        outputConverter: any;
        children: any;
        className: any;
        testAutomationId: string;
        noContainer: boolean;
    };
    formErrorAutoFocusContainer: any;
    constructor(props: any, context: any);
    setValue(value: FormValue, diff: Partial<FormValue>): void;
    getChildContext(): FormContext;
    getInputValue(): any;
    getNeededAutoFocus: FormErrorAutoFocusContainer['getNeededAutoFocus'];
    setOutputValue(value: FormValue, diff: Partial<FormValue>): void;
    setNeededAutoFocus: FormErrorAutoFocusContainer['setNeededAutoFocus'];
    inputConverter(value: FormValue): FormValue | ReturnType<InputConverter>;
    outputConverter(value: FormValue, diff: Partial<FormValue>): FormValue | ReturnType<OutputConverter>;
    extractProperty(propName: string, props?: Props): any;
    extractFlatProperty(propName: any): any;
    render(): JSX.Element;
}
export {};
