import { ReactNode, ReactElement, MutableRefObject, HTMLProps, ForwardedRef } from 'react';
import { ButtonProps } from '../Button';
import { FormInstanceHandles, FormValues, FormErrors } from './types';
import './Form.less';
export declare type FormProps<FV extends FormValues> = {
    /**
     * Required mark.
     * @since 0.0.54
     */
    requiredMark?: ReactNode;
    /**
     * Hide required legend.
     * @ignore
     * @deprecated
     */
    hideRequiredLegend?: boolean;
    /**
     * Form values.
     * @since 0.0.57
     */
    values?: FV;
    /**
     * Form errors.
     * @since 0.0.57
     */
    errors?: FormErrors;
    /**
     * Current active state
     * @since 0.0.59
     */
    state?: 'submit' | 'apply' | 'cancel';
    /**
     * Content of the `Form`.
     * @since 0.0.54
     */
    children?: ReactNode;
    /**
     * Submit button visibility or custom configuration
     * @since 0.0.58
     */
    submitButton?: boolean | Partial<ButtonProps>;
    /**
     * Apply button visibility or custom configuration
     * @since 0.0.58
     */
    applyButton?: boolean | Partial<ButtonProps>;
    /**
     * Cancel button visibility or custom configuration
     * @since 0.0.58
     */
    cancelButton?: boolean | Partial<ButtonProps>;
    /**
     * Additional buttons
     * @since 0.0.58
     */
    additionalButtons?: ReactNode[];
    /**
     * A callback function, can be executed when some field value is changing.
     * @since 3.1.0
     */
    onFieldChange?: <Key extends keyof FV>(name: Key, value: FV[Key]) => void;
    /**
     * Submit handler
     * @since 0.0.54
     */
    onSubmit?: (values: FV, isApply?: boolean) => void;
    /**
     * Additional class name for the buttons container.
     * @since 0.0.66
     */
    footerClassName?: string;
    /**
     * Form responsive view will be switched automatically.
     * Specify this parameter explicitly if you want disable this behaviour and choice vertical or horizontal form view.
     * @since 0.4.1
     */
    vertical?: boolean;
    /**
     * @ignore
     */
    className?: string;
    /**
     * @ignore
     */
    baseClassName?: string;
    /**
     * @ignore
     */
    render?: (params: {
        renderForm: (params?: {
            actionButtons?: ReactNode;
        }) => ReactElement;
        renderActionButtons: () => ReactElement;
    }) => ReactNode;
    /**
     * @ignore
     */
    innerRef?: MutableRefObject<null | HTMLFormElement>;
} & Omit<HTMLProps<HTMLFormElement>, 'onSubmit' | 'ref'>;
export type { FormValues, FormInstanceHandles };
declare type FormComponent = <FV extends FormValues>(props: FormProps<FV> & {
    ref?: ForwardedRef<FormInstanceHandles>;
}) => ReactElement;
/**
 * `Form` component is used for entering and submitting of user data.
 * [More details about designing of forms.](#!/Good%20Forms)
 * @since 0.0.54
 */
declare const _default: FormComponent;
export default _default;
