import { type FormikConfig, type FormikHelpers } from "formik"; import { type ComponentType, type ReactElement, type ReactNode } from "react"; import { type ObjectShape } from "yup"; import type { IFormButtonProps } from "./FormButton"; import { type IFormWrapperProps } from "./FormWrapper"; export type IOnSubmitForm = (values: Values, formikHelpers: FormikHelpers) => Promise; export type IFormValue = string | boolean | File; export type IComposedFormValues = IFormValue | Array | { [key: string]: IFormValue; }; export type INestedFormValues = IComposedFormValues | Array | { [key: string]: IComposedFormValues; }; export type IFormValues = object; export type IFormData = object; export type IValidationSchema = Record; export interface IFormProps extends FormikConfig { title?: ReactNode; validationSchema: IValidationSchema; successMessage?: ReactNode; onSubmit: IOnSubmitForm; onSuccess?: (result: Data | null) => void; children: IFormWrapperProps["children"]; form?: IFormWrapperProps["form"]; submitButton?: IFormWrapperProps["submitButton"]; FormButtonComponent?: IFormWrapperProps["FormButtonComponent"]; } export type FormComponent = ComponentType>; export declare function Form({ title, validationSchema, successMessage, onSuccess, form, submitButton, FormButtonComponent, children, onSubmit, ...formikConfig }: IFormProps): ReactElement;