import { HTMLAttributes, ReactNode } from "react"; import { AutocompleteRenderOptionState, SxProps, Theme } from "@mui/material"; import * as Yup from "yup"; import { Control, UnpackNestedValue, UseFormReset, UseFormReturn, UseFormSetValue } from "react-hook-form"; import dayjs from "dayjs"; export declare type DefaultFormModalType = "string" | "textarea" | "number" | "select" | "password" | "multiple-select" | "async-select" | "date-time-picker"; export interface DefaultFormModelProps { type: DefaultFormModalType; label: string | ReactNode; name?: string; sx?: SxProps; } export declare type DefaultOptionsProps = { label: string; value: string; }; interface OptionsFormModelProps extends DefaultFormModelProps { options: DefaultOptionsProps[]; } interface NumberFormModelProps extends DefaultFormModelProps { suffix?: string; decimalScale?: number; prefix?: string; allowNegative?: boolean; } interface MultipleSelectFormModelProps extends DefaultFormModelProps { options: string[]; limitTags?: number; mappingLabel?: string; } interface AsyncSelectFormModelProps extends DefaultFormModelProps { options: K[]; setInputValue: any; setValue: any; setOptions: any; getOptionLabel: (option: K) => string; renderOption?: (props: HTMLAttributes, option: K, state: AutocompleteRenderOptionState) => ReactNode; isOptionEqualToValue: (option: K, value: K) => boolean; } interface DateTimePickerProps extends DefaultFormModelProps { minDateTime?: dayjs.Dayjs; inputFormat?: string; } interface TextAreaFormProps extends DefaultFormModelProps { rows?: number; } export declare type FormModelProps = ({ type: "select"; } & OptionsFormModelProps) | ({ type: "number"; } & NumberFormModelProps) | ({ type: "multiple-select"; } & MultipleSelectFormModelProps) | ({ type: "async-select"; } & AsyncSelectFormModelProps) | ({ type: "date-time-picker"; } & DateTimePickerProps) | ({ type: "textarea"; } & TextAreaFormProps) | ({ type: "string" | "password"; } & DefaultFormModelProps); export declare type FormModel = { [key: string]: FormModelProps; }; export declare type FormButtonProps = { control: Control; currentValue: UnpackNestedValue; setValue: UseFormSetValue; reset: UseFormReset; }; export declare type FormBaseProps = { formModel: FormModel; onFinish: (values: UnpackNestedValue) => void; initialValue?: T; formButton?: ((props: FormButtonProps) => ReactNode) | ReactNode; validationSchema?: Yup.SchemaOf; form?: UseFormReturn; breakpoints?: { [Key: string]: number; }; enableReInitialValue?: boolean; }; export {};