A color field allows users to edit a hex color or individual color channel value.
Vanilla CSS theme
--tint CSS variable used by the Vanilla CSS examples.channel
Value
Use the value or defaultValue prop to set the color value, and onChange to handle user input. The value may be a string or Color object, parsed using the parseColor function. onChange is always called with a Color object.
Current value: #E73623
import {ColorField} from './ColorField';
import {parseColor, type Color} from 'react-aria-components';
import {useState} from 'react';
function Example() {
let [value, setValue] = useState<Color | null>(parseColor('#e73623'));
return (
<div>
<ColorField
label="Primary color"
placeholder="Enter a color"
value={value}
onChange={setValue} />
<pre style={{fontSize: 12}}>Current value: {value?.toString('hex')}</pre>
</div>
);
}
Channel
By default, ColorField displays a hex value. Set the colorSpace and channel props to display a specific color channel.
Current value: #7F007F
import {ColorField} from './ColorField';
import {parseColor, type Color} from 'react-aria-components';
import {useState} from 'react';
function Example() {
let [color, setColor] = useState<Color | null>(parseColor('#7f007f'));
return (
<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
<ColorField
label="Hue"
value={color}
onChange={setColor}
colorSpace="hsl"
channel="hue" />
<ColorField
label="Saturation"
value={color}
onChange={setColor}
colorSpace="hsl"
channel="saturation" />
<ColorField
label="Lightness"
value={color}
onChange={setColor}
colorSpace="hsl"
channel="lightness" />
<pre style={{fontSize: 12}}>Current value: {color?.toString('hex')}</pre>
</div>
);
}
Forms
Use the name prop to submit the text value to the server. Set the isRequired prop to validate the value, or implement custom client or server-side validation. See the Forms guide to learn more.
import {ColorField} from './ColorField';
import {Button} from './Button';
import {Form} from './Form';
function Example(props) {
return (
<Form>
<ColorField
{...props}
label="Brand color"
placeholder="Enter a color"
name="brandColor"
isRequired />
<Button type="submit" style={{marginTop: 8}}>Submit</Button>
</Form>
);
}
API
<ColorField>
<Label />
<Input />
<Text slot="description" />
<FieldError />
</ColorField>
ColorField
| Name | Type | |
|---|---|---|
channel | ColorChannel | |
The color channel that this field edits. If not provided, the color is edited as a hex value. | ||
colorSpace | ColorSpace | |
The color space that the color field operates in if a | ||
isWheelDisabled | boolean | |
Enables or disables changing the value with scroll. | ||
isDisabled | boolean | |
Whether the input is disabled. | ||
isReadOnly | boolean | |
Whether the input can be selected but not changed by the user. | ||
children | ChildrenOrFunction | |
The children of the component. A function may be provided to alter the children based on component state. | ||
value | T | |
The current value (controlled). | ||
defaultValue | T | |
The default value (uncontrolled). | ||
onChange | | |
Handler that is called when the value changes. | ||
Default className: react-aria-ColorField
| Render Prop | CSS Selector |
|---|---|
isDisabled | CSS Selector: [data-disabled]
|
| Whether the color field is disabled. | |
isInvalid | CSS Selector: [data-invalid]
|
| Whether the color field is invalid. | |
isReadOnly | CSS Selector: [data-readonly]
|
| Whether the color field is read only. | |
isRequired | CSS Selector: [data-required]
|
| Whether the color field is required. | |
channel | CSS Selector: [data-channel="hex | hue | saturation | ..."]
|
The color channel that this field edits, or "hex" if no channel prop is set. | |
state | CSS Selector: — |
| State of the color field. | |