Skip to content

Form

Form validation is not bundled in fluent-design-vue. The library provides the building blocks (FuiField, invalid prop, aria-invalid) that integrate naturally with any validation library. This guide covers basic patterns and integration with VeeValidate + Zod.

Basic form (manual validation)

Basic form

VeeValidate + Zod

VeeValidate + Zod validation

Validation states

Validation states
Password must be at least 8 characters

All control types

Form with all control types

Required fields

Required fields

Horizontal layout

Horizontal form

Disabled form

Disabled form
State: enabled

Dynamic validation rules

Dynamic validation rules

Dynamic form

Dynamic form (add / remove rows)
Member 1

Installation

bash
pnpm add vee-validate @vee-validate/zod zod

How it works

  1. VeeValidate manages form state and validation
  2. Zod schemas define validation rules with type-safe error messages
  3. errors.fieldName provides validation messages per field
  4. Pass :validation-message="errors.field" and :validation-state="errors.field ? 'error' : 'none'" to FuiField
  5. FuiField provides context to children via provide/inject
  6. Child components automatically apply invalid styling and aria-invalid
  7. The invalid prop on a child still takes precedence when explicitly set
  8. Dynamic rules: use watch to clear errors when a dependent field changes; validate conditionally based on other field values