@thi.ng/color
Version:
Array-based color types, CSS parsing, conversions, transformations, declarative theme generation, gradients, presets
20 lines (19 loc) • 549 B
JavaScript
import { atan2Abs } from "@thi.ng/math/angle";
import { SQRT3, TAU, THIRD } from "@thi.ng/math/api";
import { setC3 } from "@thi.ng/vectors/setc";
import { clamp } from "../clamp.js";
const SQRT32 = SQRT3 / 2;
const rgbHsi = (out, src) => {
out = clamp(out || src, src);
const { 0: r, 1: g, 2: b } = out;
const i = THIRD * (r + g + b);
return i < 1e-6 || r === g && r === b ? setC3(out, 0, 0, i) : setC3(
out,
atan2Abs(SQRT32 * (g - b), 0.5 * (2 * r - g - b)) / TAU,
1 - Math.min(r, g, b) / i,
i
);
};
export {
rgbHsi
};