# Field
URL: https://ark-ui.com/docs/components/field
Source: https://raw.githubusercontent.com/chakra-ui/ark/refs/heads/main/website/src/content/pages/components/field.mdx
Provides a flexible container for form inputs, labels, and helper text.
---
## Anatomy
```tsx
```
## Examples
The `Field` component provides contexts such as `invalid`, `disabled`, `required`, and `readOnly` for form elements.
While most Ark UI components natively support these contexts, you can also use the `Field` component with standard HTML
form elements.
### Input
This example shows how to use the `Field` component with a standard input field.
**Example: input**
```ripple
import { Field } from 'ark-ripple/field';
import styles from 'styles/field.module.css';
export component Input() {
{'Label'}{'Some additional Info'}{'Error Info'}
}
```
### Textarea
This example illustrates how to use the `Field` component with a textarea element.
**Example: textarea**
```ripple
import { Field } from 'ark-ripple/field';
import styles from 'styles/field.module.css';
export component Textarea() {
{'Label'}{'Some additional Info'}{'Error Info'}
}
```
### Textarea Autoresize
Pass the `autoresize` prop to the `Textarea` component to enable automatic resizing as the user types.
**Example: textarea-autoresize**
```ripple
import { Field } from 'ark-ripple/field';
import styles from 'styles/field.module.css';
export component TextareaAutoresize() {
{'Label'}{'Some additional Info'}{'Error Info'}
}
```
### Select
This example demonstrates how to integrate the `Field` component with a select dropdown.
**Example: select**
```ripple
import { Field } from 'ark-ripple/field';
import styles from 'styles/field.module.css';
export component Select() {
{'Label'}{'Some additional Info'}{'Error Info'}
}
```
### Checkbox
This example demonstrates how to integrate the `Field` and `Checkbox` components.
### Root Provider
An alternative way to control the field is to use the `RootProvider` component and the `useField` hook. This way you can
access the state and methods from outside the component.
**Example: root-provider**
```ripple
import { Field } from 'ark-ripple/field';
import { useField } from 'ark-ripple/field';
import styles from 'styles/field.module.css';
import button from 'styles/button.module.css';
import { track } from 'ripple';
export component RootProvider() {
let invalid = track(false);
const field = useField({ id: 'field', invalid });
{'Label'}{'Some additional Info'}{'Error Info'}
}
```
### Custom Control
Use the `Field.Context` or `useFieldContext` hook to access the internal state of the field.This can help you wire up
custom controls with the `Field` component.
**Example: custom-control**
```ripple
import { Field } from 'ark-ripple/field';
import styles from 'styles/field.module.css';
export component CustomControl() {
{'Any Control'}
component children({ context }) {
}
{'Uses getInputProps() for maximum flexibility'}
{'This field has an error'}
}
```
## API Reference
**Component API Reference**
**Root Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `disabled` | `boolean` | No | Indicates whether the field is disabled. |
| `ids` | `ElementIds` | No | The ids of the field parts. |
| `invalid` | `boolean` | No | Indicates whether the field is invalid. |
| `readOnly` | `boolean` | No | Indicates whether the field is read-only. |
| `required` | `boolean` | No | Indicates whether the field is required. |
| `target` | `string` | No | The target field item value the label should point to. |
**ErrorText Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**HelperText Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Input Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Label Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**RequiredIndicator Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `fallback` | `string | number | bigint | boolean | ReactElement> | Iterable | ReactPortal | Promise<...>` | No | |
**RootProvider Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `value` | `{ ariaDescribedby: string | undefined; ids: { root: string; control: string; label: string; errorText: string; helperText: string; }; refs: { rootRef: RefObject; }; ... 11 more ...; getRequiredIndicatorProps: () => Omit<...>; }` | Yes | |
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Select Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
**Textarea Props:**
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. |
| `autoresize` | `boolean` | No | Whether the textarea should autoresize |