import * as React from "react";
import { FormFieldBlockLayout } from "../types";
import { AriaFormFieldData, AriaFormGroupFieldData, ErrorValidationMode } from "../../form-skeletons";
import { StyledLabelSize, FormFieldsetProps } from "./styled-primitives/StyledFormElements";
export declare type CommonFieldBlockProps = {
    id: string;
    label: React.ReactNode;
    labelSize?: StyledLabelSize;
    error?: React.ReactNode;
    hint?: React.ReactNode;
    validationMode?: ErrorValidationMode;
    layout?: FormFieldBlockLayout;
    required?: boolean;
};
export declare type RenderFieldControl = (controlProps: AriaFormFieldData["controlProps"]) => React.ReactNode;
export declare type FormFieldBlockProps = CommonFieldBlockProps & {
    className?: string;
    children: React.ReactNode | RenderFieldControl;
};
export declare type WithFormFieldBlock<T> = Omit<T, keyof CommonFieldBlockProps> & CommonFieldBlockProps;
export declare function FormFieldBlock({ id, label, error, hint, required, labelSize, validationMode, layout, className, children, }: FormFieldBlockProps): JSX.Element;
export declare function FormFieldBlockBoilerplate({ fieldData, children, label, error, hint, layout, labelSize, ...rest }: Omit<React.ComponentPropsWithoutRef<"div">, "label"> & {
    fieldData: AriaFormFieldData;
    label?: React.ReactNode;
    labelSize?: StyledLabelSize;
    error?: React.ReactNode;
    hint?: React.ReactNode;
    layout?: FormFieldBlockLayout;
}): JSX.Element;
/**
 * Group field organism
 *
 */
export declare type RenderGroupFieldControl = (controlProps: Pick<AriaFormGroupFieldData, "getOptionControlProps" | "getOptionLabelProps">) => React.ReactNode;
export declare type FormGroupFieldBlockProps = CommonFieldBlockProps & {
    className?: string;
    children: RenderGroupFieldControl;
};
export declare function FormGroupFieldBlock({ id, label, error, hint, required, labelSize, validationMode, layout, className, children, }: FormGroupFieldBlockProps): JSX.Element;
export declare function FormGroupFieldBlockBoilerplate({ fieldData, children, label, error, hint, layout, labelSize, ...rest }: Omit<FormFieldsetProps, "label"> & {
    fieldData: AriaFormGroupFieldData;
    label?: React.ReactNode;
    labelSize?: StyledLabelSize;
    error?: React.ReactNode;
    hint?: React.ReactNode;
    layout?: FormFieldBlockLayout;
}): JSX.Element;
