Skip to Content
DocumentationComponents

Components

FormKit Gov provides React components that wrap VA Design System web components with React Hook Form integration.

Field Components

ComponentDescriptionStorybook
TextInputFieldSingle-line text inputView 
TextareaFieldMulti-line text inputView 
SelectFieldDropdown selectionView 
CheckboxFieldSingle checkboxView 
CheckboxGroupFieldMultiple checkboxesView 
RadioFieldRadio button groupView 
DateFieldDate picker (month/day/year)View 
MemorableDateFieldMemorable date with dropdownsView 
NumberFieldNumeric inputView 
CurrencyFieldCurrency input with formattingView 
PhoneFieldPhone number with formattingView 
SSNFieldSocial Security Number with maskingView 
FileUploadFieldFile upload with validationView 
ComboBoxFieldSearchable dropdownView 
PrivacyAgreementFieldPrivacy policy checkboxView 

Molecular Components

ComponentDescriptionStorybook
FullNameFieldFirst, middle, last, suffixView 
AddressFieldComplete address formView 

Review Components

ComponentDescriptionStorybook
ReviewSectionSection with edit buttonView 
ReviewItemSingle field displayView 
ReviewListList of review itemsView 

Form Components

ComponentDescription
FormForm wrapper with React Hook Form
FormFieldField controller wrapper
FormItemField container
FormLabelField label
FormControlInput wrapper
FormDescriptionHelp text
FormMessageError message

Usage Example

import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { Form, FormField } from '@formkit-gov/react'; import { TextInputField } from '@formkit-gov/react/components'; import { createEmailSchema } from '@formkit-gov/core/schemas'; const schema = z.object({ email: createEmailSchema(), }); function EmailForm() { const form = useForm({ resolver: zodResolver(schema), defaultValues: { email: '' }, }); return ( <Form form={form} onSubmit={data => console.log(data)}> <FormField control={form.control} name="email" render={({ field, fieldState }) => ( <TextInputField {...field} label="Email address" type="email" error={fieldState.error?.message} required /> )} /> <va-button type="submit">Submit</va-button> </Form> ); }

For interactive examples, visit Storybook . See the complete form example  for a full integration demo.

Next Steps

Last updated on