import React, { ReactNode } from 'react' import { FormApi, FormConfig, FieldState, FormState, FieldConfig } from '@formy/core' export type FieldElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement export type ForceUpdate = React.Dispatch> export type FormyValue = any export interface FieldHandlers { handleBlur(e: React.FocusEvent): Promise handleBlur(fieldOrEvent: T): T extends string ? (e: any) => void : Promise handleChange(e: React.ChangeEvent): Promise handleChange>( field: T, ): | (T extends React.ChangeEvent ? void : (e: unknown | React.ChangeEvent) => void) | Promise } export interface FieldStates { [key: string]: FieldState } export interface FormProps extends FormConfig { hook?: FormApi children?: ReactNode [key: string]: any } export interface FieldRegister { value: FormyValue // multiple?: boolean // checked?: boolean onChange: FieldHandlers['handleChange'] onBlur: FieldHandlers['handleBlur'] } export interface FormRegisterProps extends FormApi {} export interface FieldRegisterProps extends FieldRenderProps {} export interface FieldRenderProps extends FieldState, FieldHandlers { register: FieldRegister setFieldState: (fieldState: Partial) => void } export interface FieldSpyProps { name: string | string[] children: (...fieldStores: FieldState[]) => ReactNode } export interface FormSpyRenderProps extends FormState, FormApi {} export interface FormSpyProps { children: (formSpyRenderProps: FormSpyRenderProps) => ReactNode } export interface FieldProps extends FieldConfig { name: string children?: (props: FieldRenderProps) => ReactNode }