sk-js
Version:
JavaScript for ShaneKing
185 lines (163 loc) • 5.25 kB
JavaScript
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
import Proxy0 from './Proxy0';
var _goldenRatio = 0.618033988749895;
var _goldenRatioColor = function _goldenRatioColor(hue) {
var saturation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.5;
var value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.95;
var _hue = hue || Math.random();
_hue += _goldenRatio;
_hue %= 1;
return [_hue * 360, saturation * 100, value * 100];
};
var Color0 =
/*#__PURE__*/
function () {
function Color0() {
_classCallCheck(this, Color0);
}
_createClass(Color0, null, [{
key: "hex2rgb",
value: function hex2rgb(hex) {
hex = '0x' + hex.slice(1).replace(hex.length > 4 ? hex : /./g, '$&$&') | 0;
return [hex >> 16, hex >> 8 & 255, hex & 255];
}
}, {
key: "hexColor",
value: function hexColor(str) {
var hue = undefined;
if (str) {
hue = parseFloat(parseInt(Proxy0.md5.hex(str), 16).toString(10).split('e')[0]) / 10;
}
return Color0.rgb2hex(Color0.hsv2rgb(_goldenRatioColor(hue)));
}
}, {
key: "hsl2hsv",
value: function hsl2hsv(hsl) {
var h = hsl[0],
s = hsl[1] / 100,
l = hsl[2] / 100,
sv,
v;
l *= 2;
s *= l <= 1 ? l : 2 - l;
v = (l + s) / 2;
sv = 2 * s / (l + s);
return [h, sv * 100, v * 100];
}
}, {
key: "hsl2rgb",
value: function hsl2rgb(hsl) {
var h = hsl[0] / 360,
s = hsl[1] / 100,
l = hsl[2] / 100,
t1,
t2,
t3,
rgb,
val;
if (s === 0) {
val = l * 255;
return [val, val, val];
}
if (l < 0.5) t2 = l * (1 + s);else t2 = l + s - l * s;
t1 = 2 * l - t2;
rgb = [0, 0, 0];
for (var i = 0; i < 3; i++) {
t3 = h + 1 / 3 * -(i - 1);
if (t3 < 0) t3++;
if (t3 > 1) t3--;
if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3;else if (2 * t3 < 1) val = t2;else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;else val = t1;
rgb[i] = val * 255;
}
return rgb;
}
}, {
key: "hsv2hsl",
value: function hsv2hsl(hsv) {
var h = hsv[0],
s = hsv[1] / 100,
v = hsv[2] / 100,
sl,
l;
l = (2 - s) * v;
sl = s * v;
sl /= l <= 1 ? l : 2 - l;
l /= 2;
return [h, sl * 100, l * 100];
}
}, {
key: "hsv2rgb",
value: function hsv2rgb(hsv) {
var h = hsv[0] / 60;
var s = hsv[1] / 100;
var v = hsv[2] / 100;
var hi = Math.floor(h) % 6;
var f = h - Math.floor(h);
var p = 255 * v * (1 - s);
var q = 255 * v * (1 - s * f);
var t = 255 * v * (1 - s * (1 - f));
v = 255 * v;
switch (hi) {
case 0:
return [v, t, p];
case 1:
return [q, v, p];
case 2:
return [p, v, t];
case 3:
return [p, q, v];
case 4:
return [t, p, v];
case 5:
return [v, p, q];
}
}
}, {
key: "rgb2hex",
value: function rgb2hex(rgb) {
return "#" + ((256 + rgb[0] << 8 | rgb[1]) << 8 | rgb[2]).toString(16).slice(1);
}
}, {
key: "rgb2hsl",
value: function rgb2hsl(rgb) {
var r = rgb[0] / 255,
g = rgb[1] / 255,
b = rgb[2] / 255,
min = Math.min(r, g, b),
max = Math.max(r, g, b),
delta = max - min,
h,
s,
l;
if (max === min) h = 0;else if (r === max) h = (g - b) / delta;else if (g === max) h = 2 + (b - r) / delta;else if (b === max) h = 4 + (r - g) / delta;
h = Math.min(h * 60, 360);
if (h < 0) h += 360;
l = (min + max) / 2;
if (max === min) s = 0;else if (l <= 0.5) s = delta / (max + min);else s = delta / (2 - max - min);
return [h, s * 100, l * 100];
}
}, {
key: "rgb2hsv",
value: function rgb2hsv(rgb) {
var r = rgb[0],
g = rgb[1],
b = rgb[2],
min = Math.min(r, g, b),
max = Math.max(r, g, b),
delta = max - min,
h,
s,
v;
if (max === 0) s = 0;else s = delta / max * 1000 / 10;
if (max === min) h = 0;else if (r === max) h = (g - b) / delta;else if (g === max) h = 2 + (b - r) / delta;else if (b === max) h = 4 + (r - g) / delta;
h = Math.min(h * 60, 360);
if (h < 0) h += 360;
v = max / 255 * 1000 / 10;
return [h, s, v];
}
}]);
return Color0;
}();
export { Color0 as default };