@form-kit/form-kit
Version:
Build dynamic forms based on zod schema or JSON
73 lines (66 loc) • 3.21 kB
TypeScript
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 };