# ColorPicker Pick a color with an area, channel sliders, inputs, swatches and the eye dropper. ```ehtml Example import { ColorPicker } from "@elements/ui/color-picker"; ``` ## Parts | Part | What it is | |---|---| | `.color-picker` | The root; --value holds the color. | | `.color-picker-control` | The hex input and trigger. | | `.color-picker-trigger` | Opens the panel; shows the color. | | `.color-picker-content` | The panel, in the popover or inline. | | `.color-picker-area` | Saturation by brightness. | | `.color-picker-area-thumb` | The area's thumb, role=slider. | | `.color-picker-slider` | A channel slider (data-channel, data-orientation). | | `.color-picker-slider-label` | The slider's channel letter (sliderLabels). | | `.color-picker-slider-value` | The slider's value (sliderLabels). | | `.color-picker-value-text` | The color as text (valueText). | | `.color-picker-channels` | Hex and channel inputs. | | `.color-picker-format` | The format select. | | `.color-picker-format-trigger` | The format trigger button (formatTrigger). | | `.color-picker-swatches` | Preset swatches. | | `.color-picker-grid` | The transparency checkerboard. | ## Attributes | Attribute | Type | Default | Description | |---|---|---|---| | `value` | `string` (two-way) | `"#000000"` | The color as a CSS string. Hex, rgb(a), hsl(a), hsb(a) or a named color goes in. A value that is not a color shows as typed. | | `valueFormat` | `"hex" \| "hexa" \| "rgb" \| "rgba" \| "hsl" \| "hsla" \| "hsb" \| "hsba"` | `"hex"` | How value is written. hex adds alpha only below 1. | | `format` | `"rgba" \| "hsla" \| "hsba"` (two-way) | `"rgba"` | Which channel inputs show, and which saturation a saturation slider edits. | | `open` | `boolean` (two-way) | `false` | The popover is open. | | `inline` | `boolean` | `false` | Shows the panel in the page instead of a popover. | | `trigger` | `boolean` | `true` | false leaves only the control: a value swatch, the hex input and the eye dropper, with no panel. | | `area` | `boolean` | `true` | Shows the saturation and brightness area. | | `xChannel` | `ColorChannel` | `"saturation"` | The channel the area runs along x: hue, saturation, brightness, lightness, red, green or blue. | | `yChannel` | `ColorChannel` | `"brightness"` | The channel the area runs along y, min at the bottom. | | `sliders` | `ColorChannel[] \| null` | `null` | The channel sliders, any of hue, saturation, lightness, brightness, red, green, blue and alpha. null is hue and alpha; [] is none. | | `orientation` | `"horizontal" \| "vertical"` | `"horizontal"` | Lays the channel sliders out across or standing up. | | `sliderLabels` | `boolean` | `false` | Shows each slider's channel letter and value. | | `valueText` | `boolean` | `false` | Shows the color as text, with a swatch. | | `valueTextFormat` | `ColorStringFormat \| ""` | `""` | The value text's format; empty uses valueFormat. | | `alpha` | `boolean` | `true` | Shows the alpha slider and input. | | `eyeDropper` | `boolean` | `true` | Shows the eye dropper (disabled where the browser has none). | | `channelInputs` | `boolean` | `true` | Shows the hex and channel inputs. | | `formatSelect` | `boolean` | `true` | Shows the format select. | | `formatTrigger` | `boolean` | `false` | Shows a button that steps the format through rgba, hsla and hsba. | | `channelOrientation` | `"horizontal" \| "vertical"` | `"horizontal"` | Lays the channel inputs out in a grid, or stacked with each label before its input. | | `swatchRespectAlpha` | `boolean` | `true` | false draws the preset swatches without their alpha. | | `valueSwatchRespectAlpha` | `boolean` | `true` | false draws the value swatches without their alpha. | | `gridSize` | `string` | `""` | A CSS length for the transparency grid's cells; empty keeps the theme's. | | `input` | `boolean` | `true` | Shows the hex input beside the trigger. | | `swatches` | `string[]` | `[]` | Preset colors. | | `disabledSwatches` | `string[]` | `[]` | Swatches that cannot be picked: dimmed and skipped. | | `closeOnSelect` | `boolean` | `false` | Picking a swatch closes the popover. | | `openAutoFocus` | `boolean` | `true` | Moves focus to the color area when the popover opens. | | `initialFocus` | `string` | `""` | A selector in the panel to focus when it opens, in place of the area. | | `side` | `"top" \| "right" \| "bottom" \| "left"` | `"bottom"` | Popover side. | | `align` | `"start" \| "center" \| "end"` | `"start"` | Popover alignment. | | `sideOffset` | `number` | `4` | Gap between the control and the popover. | | `name` | `string` | `""` | Submits the value with its form. | | `form` | `string` | `""` | The id of the form the value belongs to. | | `disabled` | `boolean` | `false` | Not interactive. | | `readonly` | `boolean` | `false` | Shows the color; nothing changes it. | | `required` | `boolean` | `false` | The hex input is required. | | `invalid` | `boolean` | `false` | Marks the control invalid. | | `translations` | `Partial` | `{}` | Labels for the trigger, area, sliders, inputs, eye dropper and swatches. | | `class` | `string` | `""` | Extra classes on the root. | | `attrs` | `Record` | `{}` | Attributes for the hex input (inline: the panel): id, aria-label, data-\*. | | `onValueChange` | `(value: string) => void` | `() => {}` | Every change, during a drag too. | | `onValueChangeEnd` | `(value: string) => void` | `() => {}` | When a change is final: drag end, key, input, swatch. | | `onFormatChange` | `(format: ColorFormat) => void` | `() => {}` | When the format select or the format trigger changes the format. | | `onOpenChange` | `(open: boolean) => void` | `() => {}` | When the popover opens or closes itself. | | `onPointerDownOutside` | `(e: PointerEvent) => void` | `() => {}` | A press outside the open popover. | | `onFocusOutside` | `(e: FocusEvent) => void` | `() => {}` | Focus left the open popover. | ## Keyboard | Keys | Action | |---|---| | `Enter / Space` | On the trigger, opens the panel. | | `Arrow keys` | On the area: saturation and brightness. On a slider: its channel by 1 (degrees, percent or 0 to 255); ArrowUp and ArrowRight raise it. Shift for larger steps. | | `PageUp / PageDown` | Larger steps on the area and sliders. | | `Home / End` | Minimum and maximum on the area (saturation) and sliders. | | `Enter` | Commits a typed hex or channel value; on a swatch, selects it. | | `ArrowUp / ArrowDown` | In a channel input, steps it by 1 (Shift 10). | | `Escape` | Closes the panel and returns focus to the trigger. | ## Data attributes | Attribute | Values | On | |---|---|---| | `data-state` | `"open" \| "closed"` | root, control, trigger | | `data-state` | `"checked" \| "unchecked"` | swatch trigger, swatch | | `data-dragging` | present while dragging | root | | `data-disabled` | present when disabled (a swatch trigger also when listed in disabledSwatches) | root, control, trigger, input, area, area thumb, slider thumb, channel input, eye dropper, value text, swatch trigger | | `data-readonly` | present when read-only | root, control, trigger, input, area, area thumb, channel input, eye dropper | | `data-invalid` | present when invalid | root, control, trigger, input, area, area thumb, channel input, eye dropper | | `data-channel` | hue, alpha, red, green, blue, saturation, lightness, brightness, hex | slider, thumb, channel input | | `data-value` | the swatch color | swatch trigger, swatch | | `data-orientation` | `"horizontal" \| "vertical"` | slider, slider track, slider thumb | ## Accessibility - The trigger says the current color and that it opens a dialog; Escape closes it and returns focus. - The area thumb is a 2D slider: arrows change saturation and brightness, and its value text says both. - Every channel slider is a slider with aria-orientation and value text in degrees, percent or 0 to 255; every channel has a labeled input. - Swatches are toggle buttons named by their color. ## See also - [Slider](slider): Pick a value or a range by dragging thumbs along a track, with full keyboard support. - [NumberInput](number-input): A number field with stepper buttons, keyboard steps, formatting, wheel and scrub. - [PasswordInput](password-input): A password field with a button that shows and hides what was typed. - [InputOTP](input-otp): A one-time code in separate slots, with paste, SMS autofill and a pattern. - [TagsInput](tags-input): Type a list of tags into one field: add, edit, delete and paste them from the keyboard. - [FileUpload](file-upload): Drop, paste or browse for files; see them listed with previews, sizes, errors and progress.