'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

/* Convert between RGB and Hue
/* ========================================================================== */

function rgb2hue(rgbR, rgbG, rgbB) {
	var fallbackhue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;

	var value = rgb2value(rgbR, rgbG, rgbB);
	var whiteness = rgb2whiteness(rgbR, rgbG, rgbB);
	var delta = value - whiteness;

	if (delta) {
		// calculate segment
		var segment = value === rgbR ? (rgbG - rgbB) / delta : value === rgbG ? (rgbB - rgbR) / delta : (rgbR - rgbG) / delta;

		// calculate shift
		var shift = value === rgbR ? segment < 0 ? 360 / 60 : 0 / 60 : value === rgbG ? 120 / 60 : 240 / 60;

		// calculate hue
		var hue = (segment + shift) * 60;

		return hue;
	} else {
		// otherwise return the fallback hue
		return fallbackhue;
	}
}

function hue2rgb(t1, t2, hue) {
	// calculate the ranged hue
	var rhue = hue < 0 ? hue + 360 : hue > 360 ? hue - 360 : hue;

	// calculate the rgb value
	var rgb = rhue * 6 < 360 ? t1 + (t2 - t1) * rhue / 60 : rhue * 2 < 360 ? t2 : rhue * 3 < 720 ? t1 + (t2 - t1) * (240 - rhue) / 60 : t1;

	return rgb;
}

/* RGB tooling
/* ========================================================================== */

function rgb2value(rgbR, rgbG, rgbB) {
	var value = Math.max(rgbR, rgbG, rgbB);

	return value;
}

function rgb2whiteness(rgbR, rgbG, rgbB) {
	var whiteness = Math.min(rgbR, rgbG, rgbB);

	return whiteness;
}

/* Math matrix
/* ========================================================================== */

function matrix(params, mats) {
	return mats.map(function (mat) {
		return mat.reduce(function (acc, value, index) {
			return acc + params[index] * value;
		}, 0);
	});
}

/* D50 reference white
/* ========================================================================== */

var wd50X = 96.42;
var wd50Y = 100;
var wd50Z = 82.49;

var epsilon = Math.pow(6, 3) / Math.pow(29, 3);

/* Kappa
/* ========================================================================== */

var kappa = Math.pow(29, 3) / Math.pow(3, 3);

/* Convert between RGB and HSL
/* ========================================================================== */

function rgb2hsl(rgbR, rgbG, rgbB, fallbackhue) {
	var hslH = rgb2hue(rgbR, rgbG, rgbB, fallbackhue);
	var hslV = rgb2value(rgbR, rgbG, rgbB);
	var hslW = rgb2whiteness(rgbR, rgbG, rgbB);

	// calculate value/whiteness delta
	var hslD = hslV - hslW;

	// calculate lightness
	var hslL = (hslV + hslW) / 2;

	// calculate saturation
	var hslS = hslD === 0 ? 0 : hslD / (100 - Math.abs(2 * hslL - 100)) * 100;

	return [hslH, hslS, hslL];
}

function hsl2rgb(hslH, hslS, hslL) {
	// calcuate t2
	var t2 = hslL <= 50 ? hslL * (hslS + 100) / 100 : hslL + hslS - hslL * hslS / 100;

	// calcuate t1
	var t1 = hslL * 2 - t2;

	// calculate rgb
	var _ref = [hue2rgb(t1, t2, hslH + 120), hue2rgb(t1, t2, hslH), hue2rgb(t1, t2, hslH - 120)],
	    rgbR = _ref[0],
	    rgbG = _ref[1],
	    rgbB = _ref[2];


	return [rgbR, rgbG, rgbB];
}

/*

References
----------

- https://www.w3.org/TR/css-color-3/#hsl-color
- https://www.w3.org/TR/css-color-4/#hsl-to-rgb
- https://www.rapidtables.com/convert/color/rgb-to-hsl.html
- https://www.rapidtables.com/convert/color/hsl-to-rgb.html

/* ========================================================================== */

var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

/* Convert between RGB and HWB
/* ========================================================================== */

function rgb2hwb(rgbR, rgbG, rgbB, fallbackhue) {
	var hwbH = rgb2hue(rgbR, rgbG, rgbB, fallbackhue);
	var hwbW = rgb2whiteness(rgbR, rgbG, rgbB);
	var hwbV = rgb2value(rgbR, rgbG, rgbB);
	var hwbB = 100 - hwbV;

	return [hwbH, hwbW, hwbB];
}

function hwb2rgb(hwbH, hwbW, hwbB, fallbackhue) {
	var _hsl2rgb$map = hsl2rgb(hwbH, 100, 50, fallbackhue).map(function (v) {
		return v * (100 - hwbW - hwbB) / 100 + hwbW;
	}),
	    _hsl2rgb$map2 = _slicedToArray(_hsl2rgb$map, 3),
	    rgbR = _hsl2rgb$map2[0],
	    rgbG = _hsl2rgb$map2[1],
	    rgbB = _hsl2rgb$map2[2];

	return [rgbR, rgbG, rgbB];
}

/*

References
----------

- https://www.w3.org/TR/css-color-4/#hwb-to-rgb
- http://alvyray.com/Papers/CG/hwb2rgb.htm

/* ========================================================================== */

var _slicedToArray$1 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

/* Convert between RGB and HSV
/* ========================================================================== */

function rgb2hsv(rgbR, rgbG, rgbB, fallbackhue) {
	var hsvV = rgb2value(rgbR, rgbG, rgbB);
	var hsvW = rgb2whiteness(rgbR, rgbG, rgbB);
	var hsvH = rgb2hue(rgbR, rgbG, rgbB, fallbackhue);

	// calculate saturation
	var hsvS = hsvV === hsvW ? 0 : (hsvV - hsvW) / hsvV * 100;

	return [hsvH, hsvS, hsvV];
}

function hsv2rgb(hsvH, hsvS, hsvV) {
	var rgbI = Math.floor(hsvH / 60);

	// calculate rgb parts
	var rgbF = hsvH / 60 - rgbI & 1 ? hsvH / 60 - rgbI : 1 - hsvH / 60 - rgbI;
	var rgbM = hsvV * (100 - hsvS) / 100;
	var rgbN = hsvV * (100 - hsvS * rgbF) / 100;

	var _ref = rgbI === 5 ? [hsvV, rgbM, rgbN] : rgbI === 4 ? [rgbN, rgbM, hsvV] : rgbI === 3 ? [rgbM, rgbN, hsvV] : rgbI === 2 ? [rgbM, hsvV, rgbN] : rgbI === 1 ? [rgbN, hsvV, rgbM] : [hsvV, rgbN, rgbM],
	    _ref2 = _slicedToArray$1(_ref, 3),
	    rgbR = _ref2[0],
	    rgbG = _ref2[1],
	    rgbB = _ref2[2];

	return [rgbR, rgbG, rgbB];
}

/*

References
----------

- http://alvyray.com/Papers/CG/hsv2rgb.htm

/* ========================================================================== */

var _slicedToArray$2 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

/* Convert between RGB and XYZ
/* ========================================================================== */

function rgb2xyz(rgbR, rgbG, rgbB) {
	var _map = [rgbR, rgbG, rgbB].map(function (v) {
		return v > 4.045 ? Math.pow((v + 5.5) / 105.5, 2.4) * 100 : v / 12.92;
	}),
	    _map2 = _slicedToArray$2(_map, 3),
	    lrgbR = _map2[0],
	    lrgbB = _map2[1],
	    lrgbG = _map2[2];

	var _matrix = matrix([lrgbR, lrgbB, lrgbG], [[0.4124564, 0.3575761, 0.1804375], [0.2126729, 0.7151522, 0.0721750], [0.0193339, 0.1191920, 0.9503041]]),
	    _matrix2 = _slicedToArray$2(_matrix, 3),
	    xyzX = _matrix2[0],
	    xyzY = _matrix2[1],
	    xyzZ = _matrix2[2];

	return [xyzX, xyzY, xyzZ];
}

function xyz2rgb(xyzX, xyzY, xyzZ) {
	var _matrix3 = matrix([xyzX, xyzY, xyzZ], [[3.2404542, -1.5371385, -0.4985314], [-0.9692660, 1.8760108, 0.0415560], [0.0556434, -0.2040259, 1.0572252]]),
	    _matrix4 = _slicedToArray$2(_matrix3, 3),
	    lrgbR = _matrix4[0],
	    lrgbB = _matrix4[1],
	    lrgbG = _matrix4[2];

	var _map3 = [lrgbR, lrgbB, lrgbG].map(function (v) {
		return v > 0.31308 ? 1.055 * Math.pow(v / 100, 1 / 2.4) * 100 - 5.5 : 12.92 * v;
	}),
	    _map4 = _slicedToArray$2(_map3, 3),
	    rgbR = _map4[0],
	    rgbG = _map4[1],
	    rgbB = _map4[2];

	return [rgbR, rgbG, rgbB];
}

/*

References
----------

- https://www.w3.org/TR/css-color-4/#rgb-to-lab
- https://www.w3.org/TR/css-color-4/#color-conversion-code

/* ========================================================================== */

/* Convert between HSL and HSV
/* ========================================================================== */

function hsl2hsv(hslH, hslS, hslL) {
	var hsv1 = hslS * (hslL < 50 ? hslL : 100 - hslL) / 100;
	var hsvS = hsv1 === 0 ? 0 : 2 * hsv1 / (hslL + hsv1) * 100;
	var hsvV = hslL + hsv1;

	return [hslH, hsvS, hsvV];
}

function hsv2hsl(hsvH, hsvS, hsvV) {
	var hslL = (200 - hsvS) * hsvV / 100;

	var hslS = hslL === 0 || hslL === 200 ? 0 : hsvS * hsvV / 100 / (hslL <= 100 ? hslL : 200 - hslL) * 100,
	    hslV = hslL * 5 / 10;


	return [hsvH, hslS, hslV];
}

/*

References
----------

- https://gist.github.com/defims/0ca2ef8832833186ed396a2f8a204117

/* ========================================================================== */

/* Convert between HWB and HSV
/* ========================================================================== */

function hwb2hsv(hwbH, hwbW, hwbB) {
	var hsvH = hwbH,
	    hsvS = hwbB === 100 ? 0 : 100 - hwbW / (100 - hwbB) * 100,
	    hsvV = 100 - hwbB;


	return [hsvH, hsvS, hsvV];
}

function hsv2hwb(hsvH, hsvS, hsvV) {
	var hwbH = hsvH,
	    hwbW = (100 - hsvS) * hsvV / 100,
	    hwbB = 100 - hsvV;


	return [hwbH, hwbW, hwbB];
}

/*

References
----------

- https://en.wikipedia.org/wiki/HWB_color_model#Converting_to_and_from_HSV

/* ========================================================================== */

var _slicedToArray$3 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

/* Convert between Lab and XYZ
/* ========================================================================== */

function lab2xyz(labL, labA, labB) {
	// compute f, starting with the luminance-related term
	var f2 = (labL + 16) / 116;
	var f1 = labA / 500 + f2;
	var f3 = f2 - labB / 200;

	// compute pre-scaled XYZ
	var initX = Math.pow(f1, 3) > epsilon ? Math.pow(f1, 3) : (116 * f1 - 16) / kappa,
	    initY = labL > kappa * epsilon ? Math.pow((labL + 16) / 116, 3) : labL / kappa,
	    initZ = Math.pow(f3, 3) > epsilon ? Math.pow(f3, 3) : (116 * f3 - 16) / kappa;

	var _matrix = matrix(
	// compute XYZ by scaling pre-scaled XYZ by reference white
	[initX * wd50X, initY * wd50Y, initZ * wd50Z],
	// calculate D65 XYZ from D50 XYZ
	[[0.9555766, -0.0230393, 0.0631636], [-0.0282895, 1.0099416, 0.0210077], [0.0122982, -0.0204830, 1.3299098]]),
	    _matrix2 = _slicedToArray$3(_matrix, 3),
	    xyzX = _matrix2[0],
	    xyzY = _matrix2[1],
	    xyzZ = _matrix2[2];

	return [xyzX, xyzY, xyzZ];
}

function xyz2lab(xyzX, xyzY, xyzZ) {
	// calculate D50 XYZ from D65 XYZ
	var _matrix3 = matrix([xyzX, xyzY, xyzZ], [[1.0478112, 0.0228866, -0.0501270], [0.0295424, 0.9904844, -0.0170491], [-0.0092345, 0.0150436, 0.7521316]]),
	    _matrix4 = _slicedToArray$3(_matrix3, 3),
	    d50X = _matrix4[0],
	    d50Y = _matrix4[1],
	    d50Z = _matrix4[2];

	// calculate f


	var _map = [d50X / wd50X, d50Y / wd50Y, d50Z / wd50Z].map(function (value) {
		return value > epsilon ? Math.cbrt(value) : (kappa * value + 16) / 116;
	}),
	    _map2 = _slicedToArray$3(_map, 3),
	    f1 = _map2[0],
	    f2 = _map2[1],
	    f3 = _map2[2];

	var labL = 116 * f2 - 16,
	    labA = 500 * (f1 - f2),
	    labB = 200 * (f2 - f3);


	return [labL, labA, labB];
}

/*

References
----------

- https://www.w3.org/TR/css-color-4/#rgb-to-lab
- https://www.w3.org/TR/css-color-4/#color-conversion-code
- https://www.easyrgb.com/en/math.php

/* ========================================================================== */

/* Convert between Lab and XYZ
/* ========================================================================== */

function lab2lch(labL, labA, labB) {
	var _ref = [Math.sqrt(Math.pow(labA, 2) + Math.pow(labB, 2)), // convert to chroma
	Math.atan2(labB, labA) * 180 / Math.PI // convert to hue, in degrees
	],
	    lchC = _ref[0],
	    lchH = _ref[1];


	return [labL, lchC, lchH];
}

function lch2lab(lchL, lchC, lchH) {
	// convert to Lab a and b from the polar form
	var labA = lchC * Math.cos(lchH * Math.PI / 180),
	    labB = lchC * Math.sin(lchH * Math.PI / 180);


	return [lchL, labA, labB];
}

/*

References
----------

- https://www.w3.org/TR/css-color-4/#lch-to-lab
- https://www.w3.org/TR/css-color-4/#color-conversion-code

/* ========================================================================== */

var _slicedToArray$4 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

/* Convert between RGB and Lab
/* ========================================================================== */

function rgb2lab(rgbR, rgbG, rgbB) {
	var _rgb2xyz = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz2 = _slicedToArray$4(_rgb2xyz, 3),
	    xyzX = _rgb2xyz2[0],
	    xyzY = _rgb2xyz2[1],
	    xyzZ = _rgb2xyz2[2];

	var _xyz2lab = xyz2lab(xyzX, xyzY, xyzZ),
	    _xyz2lab2 = _slicedToArray$4(_xyz2lab, 3),
	    labL = _xyz2lab2[0],
	    labA = _xyz2lab2[1],
	    labB = _xyz2lab2[2];

	return [labL, labA, labB];
}

function lab2rgb(labL, labA, labB) {
	var _lab2xyz = lab2xyz(labL, labA, labB),
	    _lab2xyz2 = _slicedToArray$4(_lab2xyz, 3),
	    xyzX = _lab2xyz2[0],
	    xyzY = _lab2xyz2[1],
	    xyzZ = _lab2xyz2[2];

	var _xyz2rgb = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb2 = _slicedToArray$4(_xyz2rgb, 3),
	    rgbR = _xyz2rgb2[0],
	    rgbG = _xyz2rgb2[1],
	    rgbB = _xyz2rgb2[2];

	return [rgbR, rgbG, rgbB];
}

/* Convert between RGB and LCH
/* ========================================================================== */

function rgb2lch(rgbR, rgbG, rgbB) {
	var _rgb2xyz3 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz4 = _slicedToArray$4(_rgb2xyz3, 3),
	    xyzX = _rgb2xyz4[0],
	    xyzY = _rgb2xyz4[1],
	    xyzZ = _rgb2xyz4[2];

	var _xyz2lab3 = xyz2lab(xyzX, xyzY, xyzZ),
	    _xyz2lab4 = _slicedToArray$4(_xyz2lab3, 3),
	    labL = _xyz2lab4[0],
	    labA = _xyz2lab4[1],
	    labB = _xyz2lab4[2];

	var _lab2lch = lab2lch(labL, labA, labB),
	    _lab2lch2 = _slicedToArray$4(_lab2lch, 3),
	    lchL = _lab2lch2[0],
	    lchC = _lab2lch2[1],
	    lchH = _lab2lch2[2];

	return [lchL, lchC, lchH];
}

function lch2rgb(lchL, lchC, lchH) {
	var _lch2lab = lch2lab(lchL, lchC, lchH),
	    _lch2lab2 = _slicedToArray$4(_lch2lab, 3),
	    labL = _lch2lab2[0],
	    labA = _lch2lab2[1],
	    labB = _lch2lab2[2];

	var _lab2xyz3 = lab2xyz(labL, labA, labB),
	    _lab2xyz4 = _slicedToArray$4(_lab2xyz3, 3),
	    xyzX = _lab2xyz4[0],
	    xyzY = _lab2xyz4[1],
	    xyzZ = _lab2xyz4[2];

	var _xyz2rgb3 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb4 = _slicedToArray$4(_xyz2rgb3, 3),
	    rgbR = _xyz2rgb4[0],
	    rgbG = _xyz2rgb4[1],
	    rgbB = _xyz2rgb4[2];

	return [rgbR, rgbG, rgbB];
}

/* Convert between HSL and HWB
/* ========================================================================== */

function hwb2hsl(hwbH, hwbW, hwbB) {
	var _hwb2hsv = hwb2hsv(hwbH, hwbW, hwbB),
	    _hwb2hsv2 = _slicedToArray$4(_hwb2hsv, 3),
	    hsvH = _hwb2hsv2[0],
	    hsvS = _hwb2hsv2[1],
	    hsvV = _hwb2hsv2[2];

	var _hsv2hsl = hsv2hsl(hsvH, hsvS, hsvV),
	    _hsv2hsl2 = _slicedToArray$4(_hsv2hsl, 3),
	    hslH = _hsv2hsl2[0],
	    hslS = _hsv2hsl2[1],
	    hslL = _hsv2hsl2[2];

	return [hslH, hslS, hslL];
}

function hsl2hwb(hslH, hslS, hslL) {
	var _hsl2hsv = hsl2hsv(hslH, hslS, hslL),
	    _hsl2hsv2 = _slicedToArray$4(_hsl2hsv, 3),
	    hsvS = _hsl2hsv2[1],
	    hsvV = _hsl2hsv2[2];

	var _hsv2hwb = hsv2hwb(hslH, hsvS, hsvV),
	    _hsv2hwb2 = _slicedToArray$4(_hsv2hwb, 3),
	    hwbW = _hsv2hwb2[1],
	    hwbB = _hsv2hwb2[2];

	return [hslH, hwbW, hwbB];
}

/* Convert between HSL and Lab
/* ========================================================================== */

function hsl2lab(hslH, hslS, hslL) {
	var _hsl2rgb = hsl2rgb(hslH, hslS, hslL),
	    _hsl2rgb2 = _slicedToArray$4(_hsl2rgb, 3),
	    rgbR = _hsl2rgb2[0],
	    rgbG = _hsl2rgb2[1],
	    rgbB = _hsl2rgb2[2];

	var _rgb2xyz5 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz6 = _slicedToArray$4(_rgb2xyz5, 3),
	    xyzX = _rgb2xyz6[0],
	    xyzY = _rgb2xyz6[1],
	    xyzZ = _rgb2xyz6[2];

	var _xyz2lab5 = xyz2lab(xyzX, xyzY, xyzZ),
	    _xyz2lab6 = _slicedToArray$4(_xyz2lab5, 3),
	    labL = _xyz2lab6[0],
	    labA = _xyz2lab6[1],
	    labB = _xyz2lab6[2];

	return [labL, labA, labB];
}

function lab2hsl(labL, labA, labB, fallbackhue) {
	var _lab2xyz5 = lab2xyz(labL, labA, labB),
	    _lab2xyz6 = _slicedToArray$4(_lab2xyz5, 3),
	    xyzX = _lab2xyz6[0],
	    xyzY = _lab2xyz6[1],
	    xyzZ = _lab2xyz6[2];

	var _xyz2rgb5 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb6 = _slicedToArray$4(_xyz2rgb5, 3),
	    rgbR = _xyz2rgb6[0],
	    rgbG = _xyz2rgb6[1],
	    rgbB = _xyz2rgb6[2];

	var _rgb2hsl = rgb2hsl(rgbR, rgbG, rgbB, fallbackhue),
	    _rgb2hsl2 = _slicedToArray$4(_rgb2hsl, 3),
	    hslH = _rgb2hsl2[0],
	    hslS = _rgb2hsl2[1],
	    hslL = _rgb2hsl2[2];

	return [hslH, hslS, hslL];
}

/* Convert between HSL and LCH
/* ========================================================================== */

function hsl2lch(hslH, hslS, hslL) {
	var _hsl2rgb3 = hsl2rgb(hslH, hslS, hslL),
	    _hsl2rgb4 = _slicedToArray$4(_hsl2rgb3, 3),
	    rgbR = _hsl2rgb4[0],
	    rgbG = _hsl2rgb4[1],
	    rgbB = _hsl2rgb4[2];

	var _rgb2xyz7 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz8 = _slicedToArray$4(_rgb2xyz7, 3),
	    xyzX = _rgb2xyz8[0],
	    xyzY = _rgb2xyz8[1],
	    xyzZ = _rgb2xyz8[2];

	var _xyz2lab7 = xyz2lab(xyzX, xyzY, xyzZ),
	    _xyz2lab8 = _slicedToArray$4(_xyz2lab7, 3),
	    labL = _xyz2lab8[0],
	    labA = _xyz2lab8[1],
	    labB = _xyz2lab8[2];

	var _lab2lch3 = lab2lch(labL, labA, labB),
	    _lab2lch4 = _slicedToArray$4(_lab2lch3, 3),
	    lchL = _lab2lch4[0],
	    lchC = _lab2lch4[1],
	    lchH = _lab2lch4[2];

	return [lchL, lchC, lchH];
}

function lch2hsl(lchL, lchC, lchH, fallbackhue) {
	var _lch2lab3 = lch2lab(lchL, lchC, lchH),
	    _lch2lab4 = _slicedToArray$4(_lch2lab3, 3),
	    labL = _lch2lab4[0],
	    labA = _lch2lab4[1],
	    labB = _lch2lab4[2];

	var _lab2xyz7 = lab2xyz(labL, labA, labB),
	    _lab2xyz8 = _slicedToArray$4(_lab2xyz7, 3),
	    xyzX = _lab2xyz8[0],
	    xyzY = _lab2xyz8[1],
	    xyzZ = _lab2xyz8[2];

	var _xyz2rgb7 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb8 = _slicedToArray$4(_xyz2rgb7, 3),
	    rgbR = _xyz2rgb8[0],
	    rgbG = _xyz2rgb8[1],
	    rgbB = _xyz2rgb8[2];

	var _rgb2hsl3 = rgb2hsl(rgbR, rgbG, rgbB, fallbackhue),
	    _rgb2hsl4 = _slicedToArray$4(_rgb2hsl3, 3),
	    hslH = _rgb2hsl4[0],
	    hslS = _rgb2hsl4[1],
	    hslL = _rgb2hsl4[2];

	return [hslH, hslS, hslL];
}

/* Convert between HSL and XYZ
/* ========================================================================== */

function hsl2xyz(hslH, hslS, hslL) {
	var _hsl2rgb5 = hsl2rgb(hslH, hslS, hslL),
	    _hsl2rgb6 = _slicedToArray$4(_hsl2rgb5, 3),
	    rgbR = _hsl2rgb6[0],
	    rgbG = _hsl2rgb6[1],
	    rgbB = _hsl2rgb6[2];

	var _rgb2xyz9 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz10 = _slicedToArray$4(_rgb2xyz9, 3),
	    xyzX = _rgb2xyz10[0],
	    xyzY = _rgb2xyz10[1],
	    xyzZ = _rgb2xyz10[2];

	return [xyzX, xyzY, xyzZ];
}

function xyz2hsl(xyzX, xyzY, xyzZ, fallbackhue) {
	var _xyz2rgb9 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb10 = _slicedToArray$4(_xyz2rgb9, 3),
	    rgbR = _xyz2rgb10[0],
	    rgbG = _xyz2rgb10[1],
	    rgbB = _xyz2rgb10[2];

	var _rgb2hsl5 = rgb2hsl(rgbR, rgbG, rgbB, fallbackhue),
	    _rgb2hsl6 = _slicedToArray$4(_rgb2hsl5, 3),
	    hslH = _rgb2hsl6[0],
	    hslS = _rgb2hsl6[1],
	    hslL = _rgb2hsl6[2];

	return [hslH, hslS, hslL];
}

/* Convert between HWB and Lab
/* ========================================================================== */

function hwb2lab(hwbH, hwbW, hwbB) {
	var _hwb2rgb = hwb2rgb(hwbH, hwbW, hwbB),
	    _hwb2rgb2 = _slicedToArray$4(_hwb2rgb, 3),
	    rgbR = _hwb2rgb2[0],
	    rgbG = _hwb2rgb2[1],
	    rgbB = _hwb2rgb2[2];

	var _rgb2xyz11 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz12 = _slicedToArray$4(_rgb2xyz11, 3),
	    xyzX = _rgb2xyz12[0],
	    xyzY = _rgb2xyz12[1],
	    xyzZ = _rgb2xyz12[2];

	var _xyz2lab9 = xyz2lab(xyzX, xyzY, xyzZ),
	    _xyz2lab10 = _slicedToArray$4(_xyz2lab9, 3),
	    labL = _xyz2lab10[0],
	    labA = _xyz2lab10[1],
	    labB = _xyz2lab10[2];

	return [labL, labA, labB];
}

function lab2hwb(labL, labA, labB, fallbackhue) {
	var _lab2xyz9 = lab2xyz(labL, labA, labB),
	    _lab2xyz10 = _slicedToArray$4(_lab2xyz9, 3),
	    xyzX = _lab2xyz10[0],
	    xyzY = _lab2xyz10[1],
	    xyzZ = _lab2xyz10[2];

	var _xyz2rgb11 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb12 = _slicedToArray$4(_xyz2rgb11, 3),
	    rgbR = _xyz2rgb12[0],
	    rgbG = _xyz2rgb12[1],
	    rgbB = _xyz2rgb12[2];

	var _rgb2hwb = rgb2hwb(rgbR, rgbG, rgbB, fallbackhue),
	    _rgb2hwb2 = _slicedToArray$4(_rgb2hwb, 3),
	    hwbH = _rgb2hwb2[0],
	    hwbW = _rgb2hwb2[1],
	    hwbB = _rgb2hwb2[2];

	return [hwbH, hwbW, hwbB];
}

/* Convert between HWB and LCH
/* ========================================================================== */

function hwb2lch(hwbH, hwbW, hwbB) {
	var _hwb2rgb3 = hwb2rgb(hwbH, hwbW, hwbB),
	    _hwb2rgb4 = _slicedToArray$4(_hwb2rgb3, 3),
	    rgbR = _hwb2rgb4[0],
	    rgbG = _hwb2rgb4[1],
	    rgbB = _hwb2rgb4[2];

	var _rgb2xyz13 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz14 = _slicedToArray$4(_rgb2xyz13, 3),
	    xyzX = _rgb2xyz14[0],
	    xyzY = _rgb2xyz14[1],
	    xyzZ = _rgb2xyz14[2];

	var _xyz2lab11 = xyz2lab(xyzX, xyzY, xyzZ),
	    _xyz2lab12 = _slicedToArray$4(_xyz2lab11, 3),
	    labL = _xyz2lab12[0],
	    labA = _xyz2lab12[1],
	    labB = _xyz2lab12[2];

	var _lab2lch5 = lab2lch(labL, labA, labB),
	    _lab2lch6 = _slicedToArray$4(_lab2lch5, 3),
	    lchL = _lab2lch6[0],
	    lchC = _lab2lch6[1],
	    lchH = _lab2lch6[2];

	return [lchL, lchC, lchH];
}

function lch2hwb(lchL, lchC, lchH, fallbackhue) {
	var _lch2lab5 = lch2lab(lchL, lchC, lchH),
	    _lch2lab6 = _slicedToArray$4(_lch2lab5, 3),
	    labL = _lch2lab6[0],
	    labA = _lch2lab6[1],
	    labB = _lch2lab6[2];

	var _lab2xyz11 = lab2xyz(labL, labA, labB),
	    _lab2xyz12 = _slicedToArray$4(_lab2xyz11, 3),
	    xyzX = _lab2xyz12[0],
	    xyzY = _lab2xyz12[1],
	    xyzZ = _lab2xyz12[2];

	var _xyz2rgb13 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb14 = _slicedToArray$4(_xyz2rgb13, 3),
	    rgbR = _xyz2rgb14[0],
	    rgbG = _xyz2rgb14[1],
	    rgbB = _xyz2rgb14[2];

	var _rgb2hwb3 = rgb2hwb(rgbR, rgbG, rgbB, fallbackhue),
	    _rgb2hwb4 = _slicedToArray$4(_rgb2hwb3, 3),
	    hwbH = _rgb2hwb4[0],
	    hwbW = _rgb2hwb4[1],
	    hwbB = _rgb2hwb4[2];

	return [hwbH, hwbW, hwbB];
}

/* Convert between HWB and XYZ
/* ========================================================================== */

function hwb2xyz(hwbH, hwbW, hwbB) {
	var _hwb2rgb5 = hwb2rgb(hwbH, hwbW, hwbB),
	    _hwb2rgb6 = _slicedToArray$4(_hwb2rgb5, 3),
	    rgbR = _hwb2rgb6[0],
	    rgbG = _hwb2rgb6[1],
	    rgbB = _hwb2rgb6[2];

	var _rgb2xyz15 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz16 = _slicedToArray$4(_rgb2xyz15, 3),
	    xyzX = _rgb2xyz16[0],
	    xyzY = _rgb2xyz16[1],
	    xyzZ = _rgb2xyz16[2];

	return [xyzX, xyzY, xyzZ];
}

function xyz2hwb(xyzX, xyzY, xyzZ, fallbackhue) {
	var _xyz2rgb15 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb16 = _slicedToArray$4(_xyz2rgb15, 3),
	    rgbR = _xyz2rgb16[0],
	    rgbG = _xyz2rgb16[1],
	    rgbB = _xyz2rgb16[2];

	var _rgb2hwb5 = rgb2hwb(rgbR, rgbG, rgbB, fallbackhue),
	    _rgb2hwb6 = _slicedToArray$4(_rgb2hwb5, 3),
	    hwbH = _rgb2hwb6[0],
	    hwbW = _rgb2hwb6[1],
	    hwbB = _rgb2hwb6[2];

	return [hwbH, hwbW, hwbB];
}

/* Convert between HSV and Lab
/* ========================================================================== */

function hsv2lab(hsvH, hsvS, hsvV) {
	var _hsv2rgb = hsv2rgb(hsvH, hsvS, hsvV),
	    _hsv2rgb2 = _slicedToArray$4(_hsv2rgb, 3),
	    rgbR = _hsv2rgb2[0],
	    rgbG = _hsv2rgb2[1],
	    rgbB = _hsv2rgb2[2];

	var _rgb2xyz17 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz18 = _slicedToArray$4(_rgb2xyz17, 3),
	    xyzX = _rgb2xyz18[0],
	    xyzY = _rgb2xyz18[1],
	    xyzZ = _rgb2xyz18[2];

	var _xyz2lab13 = xyz2lab(xyzX, xyzY, xyzZ),
	    _xyz2lab14 = _slicedToArray$4(_xyz2lab13, 3),
	    labL = _xyz2lab14[0],
	    labA = _xyz2lab14[1],
	    labB = _xyz2lab14[2];

	return [labL, labA, labB];
}

function lab2hsv(labL, labA, labB, fallbackhue) {
	var _lab2xyz13 = lab2xyz(labL, labA, labB),
	    _lab2xyz14 = _slicedToArray$4(_lab2xyz13, 3),
	    xyzX = _lab2xyz14[0],
	    xyzY = _lab2xyz14[1],
	    xyzZ = _lab2xyz14[2];

	var _xyz2rgb17 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb18 = _slicedToArray$4(_xyz2rgb17, 3),
	    rgbR = _xyz2rgb18[0],
	    rgbG = _xyz2rgb18[1],
	    rgbB = _xyz2rgb18[2];

	var _rgb2hsv = rgb2hsv(rgbR, rgbG, rgbB, fallbackhue),
	    _rgb2hsv2 = _slicedToArray$4(_rgb2hsv, 3),
	    hsvH = _rgb2hsv2[0],
	    hsvS = _rgb2hsv2[1],
	    hsvV = _rgb2hsv2[2];

	return [hsvH, hsvS, hsvV];
}

/* Convert between HSV and LCH
/* ========================================================================== */

function hsv2lch(hsvH, hsvS, hsvV) {
	var _hsv2rgb3 = hsv2rgb(hsvH, hsvS, hsvV),
	    _hsv2rgb4 = _slicedToArray$4(_hsv2rgb3, 3),
	    rgbR = _hsv2rgb4[0],
	    rgbG = _hsv2rgb4[1],
	    rgbB = _hsv2rgb4[2];

	var _rgb2xyz19 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz20 = _slicedToArray$4(_rgb2xyz19, 3),
	    xyzX = _rgb2xyz20[0],
	    xyzY = _rgb2xyz20[1],
	    xyzZ = _rgb2xyz20[2];

	var _xyz2lab15 = xyz2lab(xyzX, xyzY, xyzZ),
	    _xyz2lab16 = _slicedToArray$4(_xyz2lab15, 3),
	    labL = _xyz2lab16[0],
	    labA = _xyz2lab16[1],
	    labB = _xyz2lab16[2];

	var _lab2lch7 = lab2lch(labL, labA, labB),
	    _lab2lch8 = _slicedToArray$4(_lab2lch7, 3),
	    lchL = _lab2lch8[0],
	    lchC = _lab2lch8[1],
	    lchH = _lab2lch8[2];

	return [lchL, lchC, lchH];
}

function lch2hsv(lchL, lchC, lchH, fallbackhue) {
	var _lch2lab7 = lch2lab(lchL, lchC, lchH),
	    _lch2lab8 = _slicedToArray$4(_lch2lab7, 3),
	    labL = _lch2lab8[0],
	    labA = _lch2lab8[1],
	    labB = _lch2lab8[2];

	var _lab2xyz15 = lab2xyz(labL, labA, labB),
	    _lab2xyz16 = _slicedToArray$4(_lab2xyz15, 3),
	    xyzX = _lab2xyz16[0],
	    xyzY = _lab2xyz16[1],
	    xyzZ = _lab2xyz16[2];

	var _xyz2rgb19 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb20 = _slicedToArray$4(_xyz2rgb19, 3),
	    rgbR = _xyz2rgb20[0],
	    rgbG = _xyz2rgb20[1],
	    rgbB = _xyz2rgb20[2];

	var _rgb2hsv3 = rgb2hsv(rgbR, rgbG, rgbB, fallbackhue),
	    _rgb2hsv4 = _slicedToArray$4(_rgb2hsv3, 3),
	    hsvH = _rgb2hsv4[0],
	    hsvS = _rgb2hsv4[1],
	    hsvV = _rgb2hsv4[2];

	return [hsvH, hsvS, hsvV];
}

/* Convert between HSV and XYZ
/* ========================================================================== */

function hsv2xyz(hsvH, hsvS, hsvV) {
	var _hsv2rgb5 = hsv2rgb(hsvH, hsvS, hsvV),
	    _hsv2rgb6 = _slicedToArray$4(_hsv2rgb5, 3),
	    rgbR = _hsv2rgb6[0],
	    rgbG = _hsv2rgb6[1],
	    rgbB = _hsv2rgb6[2];

	var _rgb2xyz21 = rgb2xyz(rgbR, rgbG, rgbB),
	    _rgb2xyz22 = _slicedToArray$4(_rgb2xyz21, 3),
	    xyzX = _rgb2xyz22[0],
	    xyzY = _rgb2xyz22[1],
	    xyzZ = _rgb2xyz22[2];

	return [xyzX, xyzY, xyzZ];
}

function xyz2hsv(xyzX, xyzY, xyzZ, fallbackhue) {
	var _xyz2rgb21 = xyz2rgb(xyzX, xyzY, xyzZ),
	    _xyz2rgb22 = _slicedToArray$4(_xyz2rgb21, 3),
	    rgbR = _xyz2rgb22[0],
	    rgbG = _xyz2rgb22[1],
	    rgbB = _xyz2rgb22[2];

	var _rgb2hsv5 = rgb2hsv(rgbR, rgbG, rgbB, fallbackhue),
	    _rgb2hsv6 = _slicedToArray$4(_rgb2hsv5, 3),
	    hsvH = _rgb2hsv6[0],
	    hsvS = _rgb2hsv6[1],
	    hsvV = _rgb2hsv6[2];

	return [hsvH, hsvS, hsvV];
}

/* Convert between XYZ and LCH
/* ========================================================================== */

function xyz2lch(xyzX, xyzY, xyzZ) {
	var _xyz2lab17 = xyz2lab(xyzX, xyzY, xyzZ),
	    _xyz2lab18 = _slicedToArray$4(_xyz2lab17, 3),
	    labL = _xyz2lab18[0],
	    labA = _xyz2lab18[1],
	    labB = _xyz2lab18[2];

	var _lab2lch9 = lab2lch(labL, labA, labB),
	    _lab2lch10 = _slicedToArray$4(_lab2lch9, 3),
	    lchL = _lab2lch10[0],
	    lchC = _lab2lch10[1],
	    lchH = _lab2lch10[2];

	return [lchL, lchC, lchH];
}

function lch2xyz(lchL, lchC, lchH) {
	var _lch2lab9 = lch2lab(lchL, lchC, lchH),
	    _lch2lab10 = _slicedToArray$4(_lch2lab9, 3),
	    labL = _lch2lab10[0],
	    labA = _lch2lab10[1],
	    labB = _lch2lab10[2];

	var _lab2xyz17 = lab2xyz(labL, labA, labB),
	    _lab2xyz18 = _slicedToArray$4(_lab2xyz17, 3),
	    xyzX = _lab2xyz18[0],
	    xyzY = _lab2xyz18[1],
	    xyzZ = _lab2xyz18[2];

	return [xyzX, xyzY, xyzZ];
}

var index = {
	rgb2hsl,
	rgb2hwb,
	rgb2lab,
	rgb2lch,
	rgb2hsv,
	rgb2xyz,

	hsl2rgb,
	hsl2hwb,
	hsl2lab,
	hsl2lch,
	hsl2hsv,
	hsl2xyz,

	hwb2rgb,
	hwb2hsl,
	hwb2lab,
	hwb2lch,
	hwb2hsv,
	hwb2xyz,

	lab2rgb,
	lab2hsl,
	lab2hwb,
	lab2lch,
	lab2hsv,
	lab2xyz,

	lch2rgb,
	lch2hsl,
	lch2hwb,
	lch2lab,
	lch2hsv,
	lch2xyz,

	hsv2rgb,
	hsv2hsl,
	hsv2hwb,
	hsv2lab,
	hsv2lch,
	hsv2xyz,

	xyz2rgb,
	xyz2hsl,
	xyz2hwb,
	xyz2lab,
	xyz2lch,
	xyz2hsv,

	rgb2hue
};

exports.rgb2hsl = rgb2hsl;
exports.rgb2hwb = rgb2hwb;
exports.rgb2lab = rgb2lab;
exports.rgb2lch = rgb2lch;
exports.rgb2hsv = rgb2hsv;
exports.rgb2xyz = rgb2xyz;
exports.hsl2rgb = hsl2rgb;
exports.hsl2hwb = hsl2hwb;
exports.hsl2lab = hsl2lab;
exports.hsl2lch = hsl2lch;
exports.hsl2hsv = hsl2hsv;
exports.hsl2xyz = hsl2xyz;
exports.hwb2rgb = hwb2rgb;
exports.hwb2hsl = hwb2hsl;
exports.hwb2lab = hwb2lab;
exports.hwb2lch = hwb2lch;
exports.hwb2hsv = hwb2hsv;
exports.hwb2xyz = hwb2xyz;
exports.lab2rgb = lab2rgb;
exports.lab2hsl = lab2hsl;
exports.lab2hwb = lab2hwb;
exports.lab2lch = lab2lch;
exports.lab2hsv = lab2hsv;
exports.lab2xyz = lab2xyz;
exports.lch2rgb = lch2rgb;
exports.lch2hsl = lch2hsl;
exports.lch2hwb = lch2hwb;
exports.lch2lab = lch2lab;
exports.lch2hsv = lch2hsv;
exports.lch2xyz = lch2xyz;
exports.hsv2rgb = hsv2rgb;
exports.hsv2hsl = hsv2hsl;
exports.hsv2hwb = hsv2hwb;
exports.hsv2lab = hsv2lab;
exports.hsv2lch = hsv2lch;
exports.hsv2xyz = hsv2xyz;
exports.xyz2rgb = xyz2rgb;
exports.xyz2hsl = xyz2hsl;
exports.xyz2hwb = xyz2hwb;
exports.xyz2lab = xyz2lab;
exports.xyz2lch = xyz2lch;
exports.xyz2hsv = xyz2hsv;
exports.rgb2hue = rgb2hue;
exports['default'] = index;