solid-tiny-form
v0.2.0
Published
A tiny SolidJS form state manager with pluggable validation
Downloads
254
Maintainers
Readme
solid-tiny-form
A tiny SolidJS form state manager inspired by react-hook-form, but designed around Solid's fine-grained reactivity and createStore.
Features
createFormAPI for registering fields, setting values, submitting, resetting, and validating.- Form state is stored in a Solid store from
solid-js/store. - Pluggable resolver interface for schema validation libraries.
- Built-in ArkType resolver via
arktypeResolver. - Lightweight field-level rules for common cases.
Installation
pnpm add solid-tiny-form solid-jsInstall ArkType when using the optional ArkType resolver:
pnpm add arktypeThe ArkType adapter supports arktype@^2.1.27 and is exposed from solid-tiny-form/resolvers/arktype.
Usage
import { type } from "arktype";
import { createForm } from "solid-tiny-form";
import { arktypeResolver } from "solid-tiny-form/resolvers/arktype";
const schema = type({
email: "string.email",
age: "number >= 18",
});
function Example() {
const form = createForm({
defaultValues: {
email: "",
age: 18,
},
resolver: arktypeResolver(schema),
mode: "onBlur",
});
const onSubmit = form.handleSubmit((values) => {
console.log(values);
});
return (
<form onSubmit={onSubmit}>
<input {...form.register("email")} />
<input type="number" {...form.register("age", { valueAsNumber: true })} />
<button disabled={form.formState.isSubmitting}>Submit</button>
</form>
);
}API
createForm(options)
Creates a form controller.
const form = createForm({
defaultValues,
resolver,
context,
mode: "onSubmit",
});Validation modes are onSubmit, onBlur, onChange, and all.
Resolver interface
Resolvers receive current values and return parsed values plus field errors.
type Resolver<TValues, TContext> = (
values: TValues,
context: {
name?: string;
context?: TContext;
}
) =>
| { values: TValues; errors: Record<string, FieldError> }
| Promise<{ values: TValues; errors: Record<string, FieldError> }>;This keeps the core form independent from any validation library.
