import * as React from 'react';
import { ValuesOf } from '../utils/typeUtils';
import { TooltipCommonProps } from '../common';
import { TextProps } from '../Text';
import { ALIGN, PLACEMENT, STATUS, LABEL_SIZE } from './FormField.constants';
export interface FormFieldProps extends Pick<TextProps, 'ellipsis' | 'maxLines'> {
    /** when function, it receives object with:
     * * `setCharactersLeft` - function accepts a number and will display it on top right of `FormField` component
     *
     * Note that alternatively you can also use `charCount` prop to display character count
     * instead of using the render function method.
     */
    /** Accept any kind of component as a child element. A child should be a form element like an Input, InputArea, Dropdown or RichTextArea. */
    children?: React.ReactNode | ((data: {
        setCharactersLeft: CharactersLeftFn;
    }) => React.ReactNode);
    /** Sets the maximum length for the field value. Character count is displayed in the top right corner of a component. */
    charCount?: number;
    /** Defines whether or not the content (children container) grows when there's space available. Otherwise, it only uses the necessary space.
     * @default true
     */
    stretchContent?: boolean;
    /** Sets a field label. It’s default value is a text string, but it can be overridden with any other component. */
    label?: React.ReactNode;
    /** Controls the label alignment */
    labelAlignment?: LabelAlignment;
    /** Controls the label placement */
    labelPlacement?: LabelPlacement;
    /** Controls the size of label */
    labelSize?: LabelSize;
    /** Marks a field as mandatory with an asterisk (*) at the end of a label. */
    required?: boolean;
    /** Displays a passed info message in a tooltip. Default value is a text string, but it can also be overridden with any other component. */
    infoContent?: React.ReactNode;
    /** Allows control over the tooltip style and behaviour by passed tooltip properties.
     * @linkTypeTo components-overlays--tooltip
     * @setTypeName TooltipCommonProps
     */
    infoTooltipProps?: TooltipCommonProps;
    /** Adds a custom element at the end of the label row (it overrides the charCount in case it's provided). */
    suffix?: React.ReactNode;
    /** Sets the type of status message, to give it appropriate colors and icons */
    status?: StatusType;
    /** Sets the status message. It is displayed bellow the child component*/
    statusMessage?: React.ReactNode;
    /** Input id used for connecting label to the input element using native ```for``` attribute
     *
     * ```js
     * <FormField id="myFormField" label="Hello">
     *   <Input id="myFormField"/>
     * </FormField>
     * ```
     */
    id?: string;
    /** Sets the id of the label */
    labelId?: string;
    /** Applies a data-hook HTML attribute that can be used in tests. */
    dataHook?: string;
    /** Applies custom width to the label. Works only when `labelPlacement` value is `right` or `left`*/
    labelWidth?: string;
    /** Applies custom width to the child component. Works only when `labelPlacement` value is `right` or `left` */
    inputWidth?: string;
    /** Specifies a CSS class name to be appended to the component’s root element.
     * @internal
     */
    classNames?: string;
    /**
     * Controls the visibility of the information icon based on hover.
     * If set to true, the icon appears only when the component is hovered over. By default, the icon is always visible (false).
     * When the component is wrapped with SidePanel.Field, the hover area extends to cover the full bounds of the component.
     * @default false
     */
    showInfoIconOnHover?: boolean;
}
export type StatusType = ValuesOf<typeof STATUS>;
export type LabelPlacement = ValuesOf<typeof PLACEMENT>;
export type LabelSize = ValuesOf<typeof LABEL_SIZE>;
export type LabelAlignment = ValuesOf<typeof ALIGN>;
type CharactersLeftFn = (lengthLeft: number) => void;
export {};
//# sourceMappingURL=FormField.types.d.ts.map