@atlaskit/adf-schema
Version:
Shared package that contains the ADF-schema (json) and ProseMirror node/mark specs
69 lines (68 loc) • 2.18 kB
JavaScript
import { rgbFromHex } from './rgb-from-hex';
import { rgbToLch } from './rgb-to-lch';
var clamp = function clamp(i, min, max) {
return Math.round(Math.min(Math.max(i, min), max));
};
var rgbToHex = function rgbToHex(_ref) {
var r = _ref.r,
g = _ref.g,
b = _ref.b;
var convertComponent = function convertComponent(c) {
var cBase16 = c.toString(16);
return cBase16.length === 1 ? "0".concat(cBase16) : cBase16;
};
return "#".concat(convertComponent(r)).concat(convertComponent(g)).concat(convertComponent(b));
};
var lchToLab = function lchToLab(_ref2) {
var l = _ref2.l,
c = _ref2.c,
h = _ref2.h;
var convertH = Number.isNaN(h) ? 0 : h * (Math.PI / 180);
return {
l: l,
a: Math.cos(convertH) * c,
b: Math.sin(convertH) * c
};
};
var labToXyz = function labToXyz(_ref3) {
var l = _ref3.l,
a = _ref3.a,
b = _ref3.b;
var convertComponent = function convertComponent(c) {
return c > 0.206896552 ? Math.pow(c, 3) : 0.12841855 * (c - 0.137931034);
};
var y = (l + 16) / 116;
var x = a / 500 + y;
var z = y - b / 200;
return {
x: convertComponent(x) * 0.95047,
y: convertComponent(y),
z: convertComponent(z) * 1.08883
};
};
var xyzToRgb = function xyzToRgb(_ref4) {
var x = _ref4.x,
y = _ref4.y,
z = _ref4.z;
var convertComponent = function convertComponent(c) {
return 255 * (c <= 0.00304 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055);
};
return {
r: clamp(convertComponent(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), 0, 255),
g: clamp(convertComponent(-0.969266 * x + 1.8760108 * y + 0.041556 * z), 0, 255),
b: clamp(convertComponent(0.0556434 * x - 0.2040259 * y + 1.0572252 * z), 0, 255)
};
};
var lchToRgb = function lchToRgb(lch) {
return xyzToRgb(labToXyz(lchToLab(lch)));
};
export var clampLightness = function clampLightness(color, newPercent) {
var rgb = rgbFromHex(color);
if (rgb === null) {
return color;
}
// LCH (rather than HSL) gives the best results here as the L component in LCH is based on human color perception
var lch = rgbToLch(rgb);
lch.l = clamp(newPercent, 0, 100);
return rgbToHex(lchToRgb(lch));
};