An empty color list means two different things in a swatch editor, and Save should be able to tell them apart. Color validity is out of scope here. Anything the editor accepts counts as valid.
A fresh swatch edit has no entered palette. Then the user picks Clear, adds blue, and removes blue again. The list is empty at the start and empty at the end, but only the end is a decision. By then the user has chosen an empty palette on purpose.
We could keep a color list plus an entered flag. Or we could give the states names, three F# cases like NotEntered, Empty and Colors of Color list. Removing the last color lands in Empty. Resetting the edit goes back to NotEntered.
There's one wrinkle I haven't worked out. That payload still allows Colors [], so the names alone leave construction open. A small construction function might be the missing piece. For an editor this small, though, the list and flag could honestly stay clearer, and I'm not sure yet which way I lean.
