A swatch has no text, so a picker with nothing else announces nothing. Say what the color is for, and what it is set to.
- Name the control for what the color is for. “Brand color”, not “Color picker”. If a visible label says it already, point aria-labelledby at it.
- showText is how the value gets announced. It puts the value in the page as text. The swatch alone is a background, which screen readers do not read.
- Where your product has a name for the color, show it with the function form of showText. “Ocean” is easier to hear than a hex read out character by character.
- A custom trigger needs its own name and value text. children drops showText and any aria-* set on the picker.
- Label the preset groups. The label is the only text that tells two blocks of swatches apart.