import type { FC, ReactNode, ComponentType, ReactElement } from 'react';
import type { Action, ExcludeStrict, ForwardProps, OmitStrict, TestIdProp } from '../../types';
import type { FlexProps } from '../Flex';
import type { FormControlProps } from '../FormControl';
import type { LabelProps } from '../Label';
import type { elements } from './FormField.test-ids';
export interface FormFieldProps extends OmitStrict<FormControlProps, 'placeholder' | 'value' | 'defaultValue'>, TestIdProp<typeof elements> {
    /** Pass a single form control component i.e. Input | TextArea | Select | etc.. */
    children: ReactElement | ReactElement[];
    /**
     * An id is required to connect a FormField's wrapping element, control element and info(aria-describedby) live region.
     * A random id will be generated if none is provided.
     * Since MOST FormControls should possess an id(excl. i.e RadioCheckGroup and others) this can be used.
     * The id prop will be used to generate the following:
     * - FormControl <-> Label association via a Label's htmlFor prop.
     * - FormField's wrapping element id {id}-field.
     * - FormField info element id ${id}-info.
     */
    id?: string;
    /**
     * Determines how the wrapping label should be rendered.
     * @default 'label'
     */
    labelAs?: LabelProps['as'];
    /**
     * Overrides the for attribute on the label. If this is not set it will default to the forms id.
     * @default undefined
     */
    labelFor?: LabelProps['htmlFor'];
    /**
     * Sets the id of the label.
     * @default undefined
     */
    labelId?: LabelProps['id'];
    /**
     * Visually hides the label region.
     * @default false
     */
    labelHidden?: boolean;
    /**
     * Visually places the label after the input.
     * @default false
     */
    labelAfter?: boolean;
    /**
     * Property used to check whether input type is radio to handle styling for RadioCheck
     * @default false
     */
    isRadioCheck?: boolean;
    /**
     * Wrapping HTML element tag. Renders as a fieldset for grouped elements i.e. RadioButtons/CheckboxGroup
     * @default 'div'
     */
    as?: 'div' | 'fieldset' | ComponentType<any>;
    /**
     * Layout field elements inline in a row.
     * @default false
     */
    inline?: boolean;
    /** Optionally utilized by Input or Select. */
    actions?: Action[];
    /** Enables Flex container prop pass through. */
    container?: ExcludeStrict<FlexProps['container'], true>;
    /** Character remaining count. Typically used on Textareas only */
    charLimitDisplay?: ReactNode;
    /** Id of additional describing element. */
    'aria-describedby'?: string;
    /** Callback invoked when the clear button is clicked. If provided will render the clear button. */
    onClear?: () => void;
    /** Suppresses announcements for status changes. */
    suppressAnnouncements?: boolean;
}
export declare const StyledFormFieldInfo: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, Pick<FormControlProps, "status">, never>;
export declare const StyledLabelRow: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
export declare const StyledFormField: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, FormFieldProps & {
    asFieldset: boolean;
    showAdditionalInfo: boolean;
}, never>;
declare const _default: FC<FormFieldProps & ForwardProps> & {
    getTestIds: (testIdProp?: TestIdProp["testId"]) => import("../../types").TestIdsRecord<readonly ["label", "info", "additional-info", "suggestion-accept", "suggestion-reject"]>;
};
export default _default;
//# sourceMappingURL=FormField.d.ts.map