zod-form-kit
Version:
UI-agnostic form generation library based on Zod schemas with extensible adapter pattern
30 lines (29 loc) • 1.39 kB
TypeScript
import { z } from 'zod';
import { UIAdapter } from './plugin-system';
type ZodDiscriminatedUnionOption<T extends string> = z.ZodObject<{
variant: z.ZodLiteral<T>;
[key: string]: z.ZodTypeAny;
}>;
export type ZodDiscriminatedUnion<T extends string> = z.ZodDiscriminatedUnion<'variant', [ZodDiscriminatedUnionOption<T>, ...ZodDiscriminatedUnionOption<T>[]]>;
export declare const supportedPrimitives: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodDate, z.ZodEnum<[""]>]>;
export type ValidFormSchema = z.ZodObject<Record<string, any>> | ZodDiscriminatedUnion<string> | typeof supportedPrimitives;
export interface ZodFormProps<T extends ValidFormSchema> {
schema: T;
onSubmit: (data: z.infer<T>) => void;
defaultValues?: Partial<z.infer<T>>;
className?: string;
/**
* UI adapter to register and automatically set as the default theme adapter.
* When provided, this adapter will be registered and set as the default for the form.
*/
registerUIAdapter?: UIAdapter;
}
export interface FieldProps {
name: string;
label?: string;
required?: boolean;
error?: string;
className?: string;
}
export type SupportedZodTypes = z.ZodString | z.ZodNumber | z.ZodBoolean | z.ZodDate | z.ZodArray<any> | z.ZodObject<any> | z.ZodDiscriminatedUnion<any, any> | z.ZodOptional<any> | z.ZodNullable<any> | z.ZodDefault<any>;
export {};