d3-jsnext
Version:
d3, but futuristic
38 lines (29 loc) • 1.2 kB
JavaScript
import { d3_radians } from '../math/trigonometry';
import { d3_lab, d3_lab_K, d3_lab_hcl } from './lab';
import { d3_color } from './color';
import { d3_rgb_lab, d3$rgb } from './rgb';
var d3_hcl;
d3$hcl = d3_hcl;
function d3_hcl(h, c, l) {
return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l)
: arguments.length < 2 ? (h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l)
: (h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b)
: d3_lab_hcl((h = d3_rgb_lab((h = d3$rgb(h)).r, h.g, h.b)).l, h.a, h.b)))
: new d3_hcl(h, c, l);
}
var d3_hclPrototype = d3_hcl.prototype = new d3_color;
d3_hclPrototype.brighter = function(k) {
return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));
};
d3_hclPrototype.darker = function(k) {
return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));
};
d3_hclPrototype.rgb = function() {
return d3_hcl_lab(this.h, this.c, this.l).rgb();
};
function d3_hcl_lab(h, c, l) {
if (isNaN(h)) h = 0;
if (isNaN(c)) c = 0;
return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);
}
export { d3_hcl, d3_hcl_lab, d3_hclPrototype };