Fieldset
A set of form controls optionally grouped under a common name.
Examples
The Fieldset
component provides contexts such as invalid
and disabled
for form elements.
While most Ark UI components natively support these contexts, you can also use the Field
component with standard HTML form elements.
Basic Usage
Learn how to use the Fieldset
component in your project. Let's take a look at the most basic
example:
import { Fieldset } from '@ark-ui/react/fieldset'
export const Basic = (props: Fieldset.RootProps) => {
return (
<Fieldset.Root {...props}>
<Fieldset.Legend>Legend</Fieldset.Legend>
<Fieldset.HelperText>Helper text</Fieldset.HelperText>
<Fieldset.ErrorText>Error text</Fieldset.ErrorText>
</Fieldset.Root>
)
}
import { Fieldset } from '@ark-ui/solid/fieldset'
export const Basic = (props: Fieldset.RootProps) => {
return (
<Fieldset.Root {...props}>
<Fieldset.Legend>Legend</Fieldset.Legend>
<Fieldset.HelperText>Helper text</Fieldset.HelperText>
<Fieldset.ErrorText>Error text</Fieldset.ErrorText>
</Fieldset.Root>
)
}
<script setup lang="ts">
import { Fieldset } from '@ark-ui/vue/fieldset'
</script>
<template>
<Fieldset.Root>
<Fieldset.Legend>Legend</Fieldset.Legend>
<Fieldset.HelperText>Helper text</Fieldset.HelperText>
<Fieldset.ErrorText>Error text</Fieldset.ErrorText>
</Fieldset.Root>
</template>
Fieldset with Fields
This example demonstrates how to use the Field
component with a standard input field within a Fieldset
.
import { Field } from '@ark-ui/react/field'
import { Fieldset } from '@ark-ui/react/fieldset'
export const WithField = (props: Fieldset.RootProps) => {
return (
<Fieldset.Root {...props}>
<Fieldset.Legend>Legend</Fieldset.Legend>
<Fieldset.HelperText>Fieldset Helper Text</Fieldset.HelperText>
<Fieldset.ErrorText>Fieldset Error Text</Fieldset.ErrorText>
<Field.Root>
<Field.Label>Label</Field.Label>
<Field.Input />
<Field.HelperText>Field Helper Text</Field.HelperText>
<Field.ErrorText>Field Error Text</Field.ErrorText>
</Field.Root>
</Fieldset.Root>
)
}
import { Field } from '@ark-ui/solid/field'
import { Fieldset } from '@ark-ui/solid/fieldset'
export const WithField = (props: Fieldset.RootProps) => {
return (
<Fieldset.Root {...props}>
<Fieldset.Legend>Legend</Fieldset.Legend>
<Fieldset.HelperText>Fieldset Helper Text</Fieldset.HelperText>
<Fieldset.ErrorText>Fieldset Error Text</Fieldset.ErrorText>
<Field.Root>
<Field.Label>Label</Field.Label>
<Field.Input />
<Field.HelperText>Field Helper Text</Field.HelperText>
<Field.ErrorText>Field Error Text</Field.ErrorText>
</Field.Root>
</Fieldset.Root>
)
}
<script setup lang="ts">
import { Field } from '@ark-ui/vue/field'
import { Fieldset } from '@ark-ui/vue/fieldset'
</script>
<template>
<Fieldset.Root>
<Fieldset.Legend>Legend</Fieldset.Legend>
<Fieldset.HelperText>Fieldset Helper Text</Fieldset.HelperText>
<Fieldset.ErrorText>Fieldset Error Text</Fieldset.ErrorText>
<Field.Root>
<Field.Label>Label</Field.Label>
<Field.Input />
<Field.HelperText>Field Helper Text</Field.HelperText>
<Field.ErrorText>Field Error Text</Field.ErrorText>
</Field.Root>
</Fieldset.Root>
</template>
Fieldset with other Form Elements
This example shows how to use the Fieldset
component with other Ark UI form elements like Checkbox
.
import { Checkbox } from '@ark-ui/react/checkbox'
import { Field } from '@ark-ui/react/field'
import { Fieldset } from '@ark-ui/react/fieldset'
export const WithCheckbox = (props: Fieldset.RootProps) => {
return (
<Fieldset.Root {...props}>
<Fieldset.Legend>Legend</Fieldset.Legend>
<Fieldset.HelperText>Fieldset Helper Text</Fieldset.HelperText>
<Fieldset.ErrorText>Fieldset Error Text</Fieldset.ErrorText>
<Field.Root>
<Checkbox.Root>
<Checkbox.Label>Label</Checkbox.Label>
<Checkbox.Control>
<Checkbox.Indicator>✔️</Checkbox.Indicator>
</Checkbox.Control>
<Checkbox.HiddenInput />
</Checkbox.Root>
<Field.HelperText>Field Heler Text</Field.HelperText>
<Field.ErrorText>Field Error Text</Field.ErrorText>
</Field.Root>
</Fieldset.Root>
)
}
import { Checkbox } from '@ark-ui/solid/checkbox'
import { Field } from '@ark-ui/solid/field'
import { Fieldset } from '@ark-ui/solid/fieldset'
export const WithCheckbox = (props: Fieldset.RootProps) => {
return (
<Fieldset.Root {...props}>
<Fieldset.Legend>Legend</Fieldset.Legend>
<Fieldset.HelperText>Fieldset Helper Text</Fieldset.HelperText>
<Fieldset.ErrorText>Fieldset Error Text</Fieldset.ErrorText>
<Field.Root>
<Checkbox.Root>
<Checkbox.Label>Label</Checkbox.Label>
<Checkbox.Control>
<Checkbox.Indicator>✔️</Checkbox.Indicator>
</Checkbox.Control>
<Checkbox.HiddenInput />
</Checkbox.Root>
<Field.HelperText>Field Heler Text</Field.HelperText>
<Field.ErrorText>Field Error Text</Field.ErrorText>
</Field.Root>
</Fieldset.Root>
)
}
<script setup lang="ts">
import { Checkbox } from '@ark-ui/vue/checkbox'
import { Field } from '@ark-ui/vue/field'
import { Fieldset } from '@ark-ui/vue/fieldset'
</script>
<template>
<Fieldset.Root>
<Fieldset.Legend>Legend</Fieldset.Legend>
<Fieldset.HelperText>Fieldset Helper Text</Fieldset.HelperText>
<Fieldset.ErrorText>Fieldset Error Text</Fieldset.ErrorText>
<Field.Root>
<Checkbox.Root>
<Checkbox.Label>Checkbox</Checkbox.Label>
<Checkbox.Control>
<Checkbox.Indicator>✔️</Checkbox.Indicator>
</Checkbox.Control>
<Checkbox.HiddenInput />
</Checkbox.Root>
<Field.HelperText>Field Heler Text</Field.HelperText>
<Field.ErrorText>Field Error Text</Field.ErrorText>
</Field.Root>
</Fieldset.Root>
</template>
Using the Root Provider
The RootProvider
component provides a context for the fieldset. It accepts the value of the useFieldset
hook.
You can leverage it to access the component state and methods from outside the fieldset.
Example not found
Example not found
Example not found
If you're using the
RootProvider
component, you don't need to use theRoot
component.
API Reference
Root
Prop | Default | Type |
---|---|---|
asChild | (props: ParentProps<'fieldset'>) => Element Use the provided child element as the default rendered element, combining their props and behavior. For more details, read our Composition guide. | |
invalid | boolean Indicates whether the fieldset is invalid. |
ErrorText
Prop | Default | Type |
---|---|---|
asChild | (props: ParentProps<'span'>) => Element Use the provided child element as the default rendered element, combining their props and behavior. For more details, read our Composition guide. |
HelperText
Prop | Default | Type |
---|---|---|
asChild | (props: ParentProps<'span'>) => Element Use the provided child element as the default rendered element, combining their props and behavior. For more details, read our Composition guide. |
Legend
Prop | Default | Type |
---|---|---|
asChild | (props: ParentProps<'legend'>) => Element Use the provided child element as the default rendered element, combining their props and behavior. For more details, read our Composition guide. |
RootProvider
Prop | Default | Type |
---|---|---|
value | Accessor<{ refs: { rootRef: HTMLFieldSetElement | undefined; }; disabled: boolean; invalid: boolean; getRootProps: () => { disabled: boolean; 'data-disabled': Booleanish; 'data-invalid': Booleanish; 'aria-describedby': string | undefined; "data-scope": string; "data-part": string; }; getLegendProps: () => { ...; }; ... | |
asChild | (props: ParentProps<'fieldset'>) => Element Use the provided child element as the default rendered element, combining their props and behavior. For more details, read our Composition guide. |