v1.0.0
12 Sep 2026First release.
Added
- A saturation and brightness square built as a
role="group"holding one real<input type="range">per axis, so each has an honest value and a screen reader hears both. Either axis takes every arrow key; shift moves ten. - Hue and opacity as real range inputs, with the browser's own keyboard behaviour and focus ring.
- A text field that takes hex (3, 4, 6 or 8 digits, with or without the
#),rgb(),hsl(),oklch()and the CSS named colours, and applies on Enter without submitting the form around it. - OKLCH as a first-class notation, converted with Ottosson's matrices and checked against his published figures for the sRGB primaries.
- A gamut warning: a colour OKLCH can name but sRGB cannot show is flagged and announced rather than silently moved.
- WCAG 2.1 contrast against a named background, with translucent colours composited first, and a rating of AAA, AA, AA large or fail.
- Hue and saturation held apart from the colour, so dragging through white or black and back keeps the hue that went in.
- Eyedropper where the browser has one, a copy button that falls back to selecting the value, and swatches as labelled buttons.
- Mounting onto an existing
<input>: it keeps its name, carries the value, and firesinputandchange, so a plain form posts the colour.destroy()hands it back untouched. parse,parseOklch,format,contrast,rate,readableOn,overand the conversions, exported for use without the widget.- React, Vue, Svelte and
<dx-color>entries over one DOM core, plus a CDN build. - Theming through CSS variables,
classNameson every part,theme: 'auto', a@layer devixstylesheet, RTL and forced-colors support. - 6.2 kB gzip, zero dependencies.