FormControl provides context such as isInvalid, isDisabled, and isRequired
to form elements.
It follows the WAI specifications for forms.
By passing the isRequired props, the Input field has aria-required set to
true, and the FormLabel will show a red asterisk.
Form Libraries like Formik make it soooo easy to manage form state and validation. I 💖 Formik
We've improved the accessibility of the FormControl component. Here are the
changes:
id passed to the form control will be passed to the form input directly.FormLabel will have htmlFor that points to the id of the form input.FormErrorMessage adds aria-describedby and aria-invalid pointing to
the form input.FormHelperText adds/extends aria-describedby pointing to the form input.isDisabled, isRequired, isReadOnly props passed to FormControl will
cascade across all related components.FormLabel is now aware of the disabled, focused and error state of the
form input. This helps you style the label accordingly using the _disabled,
_focus, and _invalid style props.
If you render FormErrorMessage and isInvalid is false or undefined,
FormErrorMessage won't be visible. The only way to make it visible is by
passing isInvalid and setting it to true.
| Name | Type | Description | Default |
|---|---|---|---|
| colorScheme | string | - | |
| isDisabled | boolean | If `true`, the form control will be disabled. This has 2 side effects: - The `FormLabel` will have `data-disabled` attribute - The form element (e.g, Input) will be disabled | - |
| isInvalid | boolean | If `true`, the form control will be invalid. This has 2 side effects: - The `FormLabel` and `FormErrorIcon` will have `data-invalid` set to `true` - The form element (e.g, Input) will have `aria-invalid` set to `true` | - |
| isLoading | boolean | If `true`, the form control will be in its `loading` state | - |
| isReadOnly | boolean | If `true`, the form control will be readonly | - |
| isRequired | boolean | If `true`, the form control will required. This has 2 side effects: - The `FormLabel` will show a required indicator - The form element (e.g, Input) will have `aria-requred` set to `true` | - |
| label | string | The label text used to inform users as to what information is requested for a text field. | - |
| orientation | "horizontal" | "vertical" | - | |
| size | string | - | |
| styleConfig | Record<string, any> | - | |
| variant | string | - |