# 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 |