hexToHct function
Converts a hex colour to AstryxHct.
Unparseable input is treated as black, matching upstream.
Implementation
AstryxHct hexToHct(String hex) {
final (r, g, b) = _hexToRgb(hex);
final lr = _srgbToLinear(r);
final lg = _srgbToLinear(g);
final lb = _srgbToLinear(b);
final (x, y, z) = _linearRgbToXyz(lr, lg, lb);
final (l, a, bLab) = _xyzToLab(x, y, z);
final hueRad = math.atan2(bLab, a);
var hue = hueRad * 180 / math.pi;
if (hue < 0) hue += 360;
final chroma = math.sqrt(a * a + bLab * bLab);
return AstryxHct(
hue: hue,
chroma: chroma,
tone: math.max(0, math.min(100, l)),
);
}