import * as react_hook_form from 'react-hook-form';
import { FieldValues, FormProviderProps, FieldPath, ControllerProps } from 'react-hook-form';
import * as React from 'react';
import React__default, { ComponentProps, ReactNode } from 'react';
import * as LabelPrimitive from '@radix-ui/react-label';

type FormProps<TFieldValues extends FieldValues, TContext = unknown, TTransformedValues extends FieldValues | undefined = undefined> = {
    form: Omit<FormProviderProps<TFieldValues, TContext, TTransformedValues>, 'children'>;
} & React__default.DetailedHTMLProps<React__default.FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;
type FormFC = <TFieldValues extends FieldValues, TContext = unknown, TTransformedValues extends FieldValues | undefined = undefined>(props: FormProps<TFieldValues, TContext, TTransformedValues>) => React__default.JSX.Element;

declare const FormItem$1: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
declare const FormLabel: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & React.RefAttributes<HTMLLabelElement>>;
declare const FormDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;

type FormItemProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = ControllerProps<TFieldValues, TName> & {
    itemProps?: ComponentProps<typeof FormItem$1>;
    label?: ReactNode;
    labelProps?: ComponentProps<typeof FormLabel>;
    description?: ReactNode;
    descriptionProps?: ComponentProps<typeof FormDescription>;
};
type FormItemFC = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>(props: FormItemProps<TFieldValues, TName>) => JSX.Element;
declare const FormItem: FormItemFC;

declare const Form: FormFC & typeof react_hook_form;

export { Form, FormItem, type FormItemProps, type FormProps };
