<space-picker>

<space-picker>

Usage

Basic usage

<space-picker value="oklab"></space-picker>

If no color space is provided (via the value attribute/property), the first one will be used:

<space-picker></space-picker>

You can specify what color spaces to use:

<space-picker spaces="oklch, p3, srgb" value="p3"></space-picker>

Unknown color spaces also work:

<space-picker spaces="bar, oklch, p3, srgb, foo" value="foo"></space-picker>

Custom labels

Do you need the picker to show something other than the default color space names, such as color space ids? Simply define the getSpaceLabel() method on the picker instance, and you are done. The method takes a color space object as an argument and returns a string that will be used as the space label.

<space-picker id="custom_labels"></space-picker>

<script>
    custom_labels.getSpaceLabel = space => space.id;
</script>

Grouping the color spaces

You can group the color spaces the way you like by specifying the groupBy property. Its value is a function accepting a color space as an argument and returning the name of a group the color space should be added to:

<space-picker id="space_picker" spaces="oklch, p3, srgb" value="p3"></space-picker>
<script>
    space_picker.groupBy = (space) => {
        let isPolar = space.coords.h?.type === "angle";
        return isPolar ? "Polar" : "Rectangular";
    };
</script>

Events

You can listen to the spacechange event to get either the id of the current color space (the value property) or the color space object itself (the selectedSpace property):

<space-picker onspacechange="this.nextElementSibling.textContent = this.value"></space-picker>
<output></output>

Dynamic

All properties are reactive and can be set programmatically:

<button onclick="this.nextElementSibling.value = 'oklch'">Switch to OKLCh</button>
<space-picker value="p3"></space-picker>

<space-picker> plays nicely with other color elements:

<label style="display: block; margin-block-end: .5em">
    Space:
    <space-picker value="oklch" oninput="this.parentElement.nextElementSibling.space = this.selectedSpace"></space-picker>
</label>
<color-slider space="oklch"
              stops="oklch(80% 50% 70), oklch(65% 50% 180)"
              oncolorchange="this.nextElementSibling.textContent = this.color"></color-slider>
<color-inline></color-inline>

Reference

Attributes & Properties

Attribute Property Property type Default value Description
value value string The first color space in this.spaces. The current value of the picker.
spaces spaces string | Array<ColorSpace> All known color spaces. Comma-separated list of color spaces to use.
groupBy Function Function to group the color spaces. Takes a color space object as an argument and returns the group name.
getSpaceLabel Function space => space.name Function to get the label for a color space. Takes a color space object as an argument and returns its label.

Getters

These properties are read-only.

Property Type Description
selectedSpace ColorSpace Color space object corresponding to the picker current value.
groups Object Object containing the color spaces grouped by the groupBy() function. Keys are group names, values are objects with space ids as keys, and corresponding color space objects are values.

Events

Name Description
input Fired when the space changes due to user action.
change Fired when the space changes due to user action.
valuechange Fired when the value changes for any reason, and once during initialization.
spacechange Fired when the space changes for any reason, and once during initialization.

Parts

Name Description
base The internal <select> element.

Installation

To install all color elements, check out the instructions on the homepage. The rest of this section is about using only <space-picker>.

The quick and dirty way is straight from the CDN (kindly provided by Netlify):

<script src="https://elements.colorjs.io/src/space-picker/space-picker.js" type="module"></script>

or in JS:

import "https://elements.colorjs.io/src/space-picker/space-picker.js";

If you are using npm to manage your dependencies, you can import it via:

import "color-elements/space-picker";

or:

import { SpacePicker } from "color-elements";