import “color”; import “rgb”;

d3.hsl = function(h, s, l) {

return arguments.length === 1
    ? (h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l)
    : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl))
    : d3_hsl(+h, +s, +l);

};

function d3_hsl(h, s, l) {

return new d3_Hsl(h, s, l);

}

function d3_Hsl(h, s, l) {

this.h = h;
this.s = s;
this.l = l;

}

var d3_hslPrototype = d3_Hsl.prototype = new d3_Color;

d3_hslPrototype.brighter = function(k) {

k = Math.pow(0.7, arguments.length ? k : 1);
return d3_hsl(this.h, this.s, this.l / k);

};

d3_hslPrototype.darker = function(k) {

k = Math.pow(0.7, arguments.length ? k : 1);
return d3_hsl(this.h, this.s, k * this.l);

};

d3_hslPrototype.rgb = function() {

return d3_hsl_rgb(this.h, this.s, this.l);

};

function d3_hsl_rgb(h, s, l) {

var m1,
    m2;

/* Some simple corrections for h, s and l. */
h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;
s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;
l = l < 0 ? 0 : l > 1 ? 1 : l;

/* From FvD 13.37, CSS Color Module Level 3 */
m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
m1 = 2 * l - m2;

function v(h) {
  if (h > 360) h -= 360;
  else if (h < 0) h += 360;
  if (h < 60) return m1 + (m2 - m1) * h / 60;
  if (h < 180) return m2;
  if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
  return m1;
}

function vv(h) {
  return Math.round(v(h) * 255);
}

return d3_rgb(vv(h + 120), vv(h), vv(h - 120));

}