Standard Schema Forms
Headless Standard Schema Forms; covers Standard Schema V1, TanStack Form, Formwerk.
| Package | @vizejs/ui/form |
| Maturity | stable |
| Own the source | vize lib pull form |
| Requires | error-summary, field-wiring |
| Aliases | forms, standard schema forms, validation forms |
| Covers | Standard Schema V1, TanStack Form, Formwerk |
API
formatFormFieldName
Convert a Standard Schema issue path into a conventional HTML field name.
function formatFormFieldName(path: readonly FormPathKey[]): string
normalizeStandardSchemaIssues
Convert Standard Schema issues into normalized field errors.
function normalizeStandardSchemaIssues( issues: readonly StandardSchemaV1.Issue[], options: FormFieldErrorOptions = {}, ): readonly FormFieldError[]
createFormErrorSummaryFields
Convert normalized field errors into unique fields for the error summary.
function createFormErrorSummaryFields( errors: readonly FormFieldError[], options: FormErrorSummaryFieldOptions = {}, ): readonly ErrorSummaryField[]
normalizeStandardSchemaResult
Normalize a Standard Schema validation result for form fields and summaries.
function normalizeStandardSchemaResult<Output>( result: StandardSchemaV1.Result<Output>, options: StandardSchemaValidationOptions = {}, ): FormValidationResult<Output>
validateStandardSchema
Validate a Standard Schema and normalize the result for form consumers.
async function validateStandardSchema<Input, Output>( schema: StandardSchemaV1<Input, Output>, value: Input, options: StandardSchemaValidationOptions = {}, ): Promise<FormValidationResult<Output>>
useFormField
Create normalized field state whose invalid flag can feed existing field wiring.
function useFormField(options: FormFieldOptions): FormFieldController
useFormErrorSummary
Create error-summary fields from normalized form errors.
function useFormErrorSummary( options: FormErrorSummaryOptions = {}, ): FormErrorSummaryController
normalizeNativeConstraintErrors
Convert native constraint-validation failures into normalized form errors.
function normalizeNativeConstraintErrors( form: HTMLFormElement, options: NativeConstraintErrorOptions = {}, ): readonly FormFieldError[]
useFormState
Create reactive form state around Standard Schema validation and submission.
function useFormState<Input, Output = Input>( options: FormStateOptions<Input, Output> = {}, ): FormStateController<Input, Output>
Behavior
Normative state x input -> outcome table for the Standard Schema form foundation
(@vizejs/ui/form). Every row is proven by the named test in
src/families/form/form/form.test.ts; compile-only assertions live in
src/families/form/form/form.types.test-d.ts.
| # | State | Input | Outcome | Proven by |
|---|---|---|---|---|
| F1 | any | Standard Schema issue path | path formats into a deterministic HTML field name | formats Standard Schema paths as form field names |
| F2 | failed | Standard Schema issues | field errors preserve messages, names, and unwrapped paths | normalizes Standard Schema failures into field and summary errors |
| F3 | failed | duplicate field errors | summary fields keep the first error per document id | deduplicates summary fields while preserving all field errors |
| F4 | any | sync or async schema validation | result normalizes into success or field-summary failure state | validates sync and async Standard Schemas |
| F5 | any | malformed schema, result, or options | throws a stable form diagnostic | rejects malformed schemas, results, and options |
| F6 | valid | field receives a matching error | useFormField supplies an invalid flag for field wiring |
wires field invalid state from normalized errors |
| F7 | invalid | field errors feed summary composable | useFormErrorSummary exposes existing error-summary fields |
feeds normalized errors into an error summary controller |
| F8 | public types | mismatched schema input or mutation | compilation rejects misuse | src/families/form/form/form.types.test-d.ts |
| F9 | native form | constraint-invalid controls | errors normalize through the same field and summary pipeline | normalizes native constraint validation failures |
| F10 | editing | field visit, change, and blur events | dirty, visited, and touched state are tracked per field | tracks field state and focuses the first registered invalid field |
| F11 | invalid | submitted form has registered fields | focus moves to the first invalid field in current error order | tracks field state and focuses the first registered invalid field |
| F12 | validating | a slower validation finishes last | stale results return to their caller but cannot replace state | discards stale async validation results |
| F13 | submitting | latest validation succeeds | onSubmit runs once for the latest valid result |
submits only the latest valid result |