UNPKG

use-form-light

Version:

use-form-light is a very small React library that helps you manage forms and gives you ready-made form components with built-in checks

72 lines (71 loc) 2.25 kB
import { ReactNode } from "react"; export type ValidationRule = { pattern: RegExp; message: string; }; export type ValidationRules<T> = { [K in keyof T]?: ValidationRule; }; export type FormValues = Record<string, any>; export type FormProps<T extends FormValues> = { children: React.ReactNode; onSubmit: (e: React.FormEvent<HTMLFormElement>) => void; styleOption?: "default" | "headless"; className?: string; }; export type InputProps = { register?: { name: string; value: string; onChange: (e: React.ChangeEvent<HTMLInputElement>) => void; }; error?: string; styleOption?: "default" | "headless"; className?: string; type?: string; children?: ReactNode; } & React.InputHTMLAttributes<HTMLInputElement>; export type TextareaProps = { register?: { name: string; value: string; onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void; }; error?: string; styleOption?: "default" | "headless"; className?: string; children?: ReactNode; } & React.TextareaHTMLAttributes<HTMLTextAreaElement>; export type ButtonProps = { styleOption?: "default" | "headless"; className?: string; children?: ReactNode; } & React.ButtonHTMLAttributes<HTMLButtonElement>; export type UseFormReturn<T extends FormValues> = { register: (name: keyof T) => { name: keyof T; value: T[keyof T]; onChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void; }; handleSubmit: (callback: (data: T) => void) => (e: React.FormEvent) => void; errors: Record<string, string>; values: T; setValue: (name: keyof T, value: any) => void; reset: () => void; validate: () => boolean; watch: (name?: keyof T) => T[keyof T] | T; }; export type SelectProps = { register?: { name: string; value: string; onChange: (e: React.ChangeEvent<HTMLSelectElement>) => void; }; error?: string; styleOption?: "default" | "headless"; className?: string; children?: ReactNode; } & React.SelectHTMLAttributes<HTMLSelectElement>; export type OptionProps = { children?: ReactNode; } & React.OptionHTMLAttributes<HTMLOptionElement>;