import React, { ReactNode, ReactElement } from 'react';
import { IconLookup } from '@fortawesome/fontawesome-svg-core';
import { FormFieldValidity, AsyncValidation } from './validity-shape';
import { VALIDATION_VALUES } from './constants';
import './form-field.less';
import { InputTypes, PasswordToggleButtonTextsProps } from '../input';
type NormalizeFuncParams = {
    nextValue: string | number;
    prevValue: string | number;
};
export declare enum HELPER_TEXT_POSITION {
    TOP = "top",
    BOTTOM = "bottom"
}
export type FormFieldProps = {
    children?: ReactElement | null;
    value?: string | number;
    id?: string;
    helperText?: string;
    helperTextPosition?: HELPER_TEXT_POSITION;
    label?: ReactNode;
    className?: string;
    wrapperClass?: string;
    isDisabled?: boolean;
    isOptional?: boolean;
    isHighlighted?: boolean;
    disabledInfo?: string;
    touched?: boolean;
    autoFocus?: boolean;
    validity?: FormFieldValidity | null;
    asyncValidation?: AsyncValidation;
    leftIcon?: IconLookup | null;
    rightIcon?: IconLookup | null;
    iconTooltipText?: string;
    labelIcon?: IconLookup | null;
    labelIconTestId?: string;
    labelIconTooltipText?: ReactNode;
    fieldClass?: string;
    placeholder?: string;
    required?: boolean;
    onChange?: (event: React.ChangeEvent<HTMLInputElement>, params: {
        normalizedValue: string | number;
    }) => void;
    onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
    onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;
    fieldTestId?: string;
    validationTestId?: string;
    disabledInfoTestId?: string;
    labelTestId?: string;
    normalize?: (params: NormalizeFuncParams) => string | number;
    shouldDisplayControls?: boolean;
    showPasswordToggle?: boolean;
    onSubmit?: () => void;
    onCancel?: () => void;
    submitAriaLabel?: string;
    cancelAriaLabel?: string;
    retryAriaLabel?: string;
    clearAriaLabel?: string;
    onClear?: () => void;
    onWheel?: (event: React.WheelEvent<HTMLInputElement>) => void;
    onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
    type?: InputTypes;
    readOnly?: boolean;
    spellCheck?: boolean;
    /** if true, no vertical padding between 2 form fields would be added */
    isHorizontalLayout?: boolean;
    passwordToggleButtonTexts?: PasswordToggleButtonTextsProps;
    validationValues?: VALIDATION_VALUES;
    optionalLabelText?: string;
    rows?: number;
    disableApplyButton?: boolean;
    'aria-describedby'?: string;
};
export default function FormField({ id, value, helperText, helperTextPosition, label, readOnly, className, wrapperClass, isDisabled, isOptional, isHighlighted, disabledInfo, autoFocus, validity, asyncValidation, touched, leftIcon, rightIcon, iconTooltipText, labelIcon, labelIconTestId, labelIconTooltipText, fieldClass, placeholder, required, onChange, onBlur, onSubmit, onCancel, submitAriaLabel, cancelAriaLabel, retryAriaLabel, clearAriaLabel, onKeyDown, onFocus, onWheel, onClear, children, fieldTestId, validationTestId, disabledInfoTestId, labelTestId, normalize, shouldDisplayControls, showPasswordToggle, type, spellCheck, isHorizontalLayout, disableApplyButton, passwordToggleButtonTexts: passwordToggleButtonTextsParams, validationValues: validationValuesParams, optionalLabelText, ...attrs }: FormFieldProps): import("react/jsx-runtime").JSX.Element;
export {};
