UNPKG

@form-kit/form-kit

Version:

Build dynamic forms based on zod schema or JSON

73 lines (66 loc) 3.21 kB
import * as react_jsx_runtime from 'react/jsx-runtime'; import { z } from 'zod'; import * as react_hook_form from 'react-hook-form'; import { ControllerRenderProps } from 'react-hook-form'; import * as react from 'react'; declare const BaseInputComponents: { text: (props: react.DetailedHTMLProps<react.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>) => react_jsx_runtime.JSX.Element; date: (props: { onChange: (...event: any[]) => void; onBlur: react_hook_form.Noop; value: any; disabled?: boolean; name: string; ref: react_hook_form.RefCallBack; }) => react_jsx_runtime.JSX.Element; }; type FieldType<C extends Components> = keyof (typeof BaseInputComponents & C); type FieldComponentProps<C extends Components, T extends FieldType<C>> = React.ComponentProps<(typeof BaseInputComponents & C)[T]>; type FieldProps<C extends Components, T extends FieldType<C>> = FieldComponentProps<C, T>; type BaseField = { name: string; label?: string; placeholder?: string; description?: string; element?: React.ReactNode; }; type FormFieldMap<C extends Components> = { [K in FieldType<C>]: BaseField & { type: K; fieldProps?: Omit<FieldProps<C, K>, keyof ControllerRenderProps>; }; }; type FormFieldType<C extends Components = NonNullable<unknown>> = FormFieldMap<C>[FieldType<C>]; type Components = Record<string, React.ComponentType<any>>; type Sizes = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12; type Field<ZObject extends z.ZodObject<any> = z.ZodObject<any>, C extends Components = NonNullable<unknown>> = FormFieldType<C> & { name: keyof z.infer<ZObject>; size?: Sizes; }; type MaybePromise<T> = T | Promise<T>; type FormSubmitHandler<Z extends z.ZodObject<any>> = (values: z.infer<Z>) => MaybePromise<void>; type _TransformField<C extends Components = NonNullable<unknown>> = FormFieldType<C> & { size?: Sizes; name: 'foo'; }; type FieldTransformFunction<Z extends z.ZodObject<any>, C extends Components> = (field: Field<Z, C>) => Partial<_TransformField<C>> | undefined; type FieldTransformObject<Z extends z.ZodObject<any> = z.ZodObject<any>, C extends Components = NonNullable<unknown>> = Partial<{ [K in keyof z.infer<Z>]: Partial<_TransformField<C>> | FieldTransformFunction<Z, C>; }>; type FieldTransformer<Z extends z.ZodObject<any> = z.ZodObject<any>, C extends Components = NonNullable<unknown>> = FieldTransformObject<Z, C> | FieldTransformFunction<Z, C>; type Option = { id: string | number; name: string; }; type SelectOptions = Option[] | Promise<Option[]>; type FormProps<Z extends z.ZodObject<any>, C extends Components> = { schema: Z; initialValues?: z.input<Z>; fields?: Field<Z, C>[]; fieldTransformer?: FieldTransformer<Z, C>; onSubmit?: FormSubmitHandler<Z>; onCancel?: () => void; components?: C; }; declare const FormKit: <Z extends z.ZodObject<any> = z.ZodObject<any>, C extends Components = NonNullable<unknown>>(props: FormProps<Z, C>) => react_jsx_runtime.JSX.Element; export { type Components, type Field, type FieldTransformer, FormKit, type FormSubmitHandler, type Option, type SelectOptions, type Sizes };