office-ui-fabric-react
Version:
Reusable React components for building experiences for Office 365.
283 lines • 8.77 kB
JavaScript
define(["require", "exports", "../../Utilities", "./colorValues"], function (require, exports, Utilities_1, colorValues_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MAX_COLOR_SATURATION = 100;
exports.MAX_COLOR_HUE = 359;
exports.MAX_COLOR_VALUE = 100;
exports.MAX_COLOR_RGBA = 255;
function cssColor(color) {
return (_named(color) ||
_hex3(color) ||
_hex6(color) ||
_rgb(color) ||
_rgba(color) ||
_hsl(color) ||
_hsla(color));
}
exports.cssColor = cssColor;
function rgb2hex(r, g, b) {
return [_numberToPaddedHex(r), _numberToPaddedHex(g), _numberToPaddedHex(b)].join('');
}
exports.rgb2hex = rgb2hex;
function hsv2hex(h, s, v) {
var _a = hsv2rgb(h, s, v), r = _a.r, g = _a.g, b = _a.b;
return rgb2hex(r, g, b);
}
exports.hsv2hex = hsv2hex;
function rgb2hsv(r, g, b) {
var h = NaN;
var s;
var v;
var max = Math.max(r, g, b);
var min = Math.min(r, g, b);
var delta = max - min;
// hue
if (delta === 0) {
h = 0;
}
else if (r === max) {
h = ((g - b) / delta) % 6;
}
else if (g === max) {
h = (b - r) / delta + 2;
}
else if (b === max) {
h = (r - g) / delta + 4;
}
h = Math.round(h * 60);
if (h < 0) {
h += 360;
}
// saturation
s = Math.round((max === 0 ? 0 : delta / max) * 100);
// value
v = Math.round((max / 255) * 100);
return { h: h, s: s, v: v };
}
exports.rgb2hsv = rgb2hsv;
function hsl2hsv(h, s, l) {
s *= (l < 50 ? l : 100 - l) / 100;
return {
h: h,
s: ((2 * s) / (l + s)) * 100,
v: l + s
};
}
exports.hsl2hsv = hsl2hsv;
function hsv2hsl(h, s, v) {
s /= exports.MAX_COLOR_SATURATION;
v /= exports.MAX_COLOR_VALUE;
var l = (2 - s) * v;
var sl = s * v;
sl /= l <= 1 ? l : 2 - l;
sl = sl || 0;
l /= 2;
return { h: h, s: sl * 100, l: l * 100 };
}
exports.hsv2hsl = hsv2hsl;
function hsl2rgb(h, s, l) {
var hsv = hsl2hsv(h, s, l);
return hsv2rgb(hsv.h, hsv.s, hsv.v);
}
exports.hsl2rgb = hsl2rgb;
function hsv2rgb(h, s, v) {
s = s / 100;
v = v / 100;
var rgb = [];
var c = v * s;
var hh = h / 60;
var x = c * (1 - Math.abs((hh % 2) - 1));
var m = v - c;
switch (Math.floor(hh)) {
case 0:
rgb = [c, x, 0];
break;
case 1:
rgb = [x, c, 0];
break;
case 2:
rgb = [0, c, x];
break;
case 3:
rgb = [0, x, c];
break;
case 4:
rgb = [x, 0, c];
break;
case 5:
rgb = [c, 0, x];
break;
}
return {
r: Math.round(exports.MAX_COLOR_RGBA * (rgb[0] + m)),
g: Math.round(exports.MAX_COLOR_RGBA * (rgb[1] + m)),
b: Math.round(exports.MAX_COLOR_RGBA * (rgb[2] + m))
};
}
exports.hsv2rgb = hsv2rgb;
function getColorFromString(inputColor) {
var color = cssColor(inputColor);
if (!color) {
return;
}
var a = color.a, b = color.b, g = color.g, r = color.r;
var _a = rgb2hsv(r, g, b), h = _a.h, s = _a.s, v = _a.v;
return {
a: a,
b: b,
g: g,
h: h,
hex: rgb2hex(r, g, b),
r: r,
s: s,
str: inputColor,
v: v
};
}
exports.getColorFromString = getColorFromString;
function getColorFromRGBA(rgba) {
var a = rgba.a, b = rgba.b, g = rgba.g, r = rgba.r;
var _a = rgb2hsv(r, g, b), h = _a.h, s = _a.s, v = _a.v;
var hex = rgb2hex(r, g, b);
return {
a: a,
b: b,
g: g,
h: h,
hex: hex,
r: r,
s: s,
str: a === 100 ? "#" + hex : "rgba(" + r + ", " + g + ", " + b + ", " + a / 100 + ")",
v: v
};
}
exports.getColorFromRGBA = getColorFromRGBA;
function getFullColorString(color) {
return "#" + hsv2hex(color.h, exports.MAX_COLOR_SATURATION, exports.MAX_COLOR_VALUE);
}
exports.getFullColorString = getFullColorString;
function updateSV(color, s, v) {
var _a = hsv2rgb(color.h, s, v), r = _a.r, g = _a.g, b = _a.b;
var hex = rgb2hex(r, g, b);
return {
a: color.a,
b: b,
g: g,
h: color.h,
hex: hex,
r: r,
s: s,
str: color.a === 100 ? "#" + hex : "rgba(" + r + ", " + g + ", " + b + ", " + color.a / 100 + ")",
v: v
};
}
exports.updateSV = updateSV;
function updateH(color, h) {
var _a = hsv2rgb(h, color.s, color.v), r = _a.r, g = _a.g, b = _a.b;
var hex = rgb2hex(r, g, b);
return {
a: color.a,
b: b,
g: g,
h: h,
hex: hex,
r: r,
s: color.s,
str: color.a === 100 ? "#" + hex : "rgba(" + r + ", " + g + ", " + b + ", " + color.a / 100 + ")",
v: color.v
};
}
exports.updateH = updateH;
function updateA(color, a) {
return Utilities_1.assign({}, color, {
a: a,
str: a === 100 ? "#" + color.hex : "rgba(" + color.r + ", " + color.g + ", " + color.b + ", " + a / 100 + ")"
});
}
exports.updateA = updateA;
function _numberToPaddedHex(num) {
var hex = num.toString(16);
return hex.length === 1 ? '0' + hex : hex;
}
function _named(str) {
var c = colorValues_1.COLOR_VALUES[str.toLowerCase()];
if (c) {
return {
r: c[0],
g: c[1],
b: c[2],
a: 100
};
}
}
function _rgb(str) {
if (0 === str.indexOf('rgb(')) {
str = str.match(/rgb\(([^)]+)\)/)[1];
var parts = str.split(/ *, */).map(Number);
return {
r: parts[0],
g: parts[1],
b: parts[2],
a: 100
};
}
}
function _rgba(str) {
if (str.indexOf('rgba(') === 0) {
str = str.match(/rgba\(([^)]+)\)/)[1];
var parts = str.split(/ *, */).map(Number);
return {
r: parts[0],
g: parts[1],
b: parts[2],
a: parts[3] * 100
};
}
}
function _hex6(str) {
if ('#' === str[0] && 7 === str.length) {
return {
r: parseInt(str.slice(1, 3), 16),
g: parseInt(str.slice(3, 5), 16),
b: parseInt(str.slice(5, 7), 16),
a: 100
};
}
}
function _hex3(str) {
if ('#' === str[0] && 4 === str.length) {
return {
r: parseInt(str[1] + str[1], 16),
g: parseInt(str[2] + str[2], 16),
b: parseInt(str[3] + str[3], 16),
a: 100
};
}
}
function _hsl(str) {
if (str.indexOf('hsl(') === 0) {
str = str.match(/hsl\(([^)]+)\)/)[1];
var parts = str.split(/ *, */);
var h = parseInt(parts[0], 10);
var s = parseInt(parts[1], 10);
var l = parseInt(parts[2], 10);
var rgba = hsl2rgb(h, s, l);
rgba.a = 100;
return rgba;
}
}
function _hsla(str) {
if (str.indexOf('hsla(') === 0) {
str = str.match(/hsla\(([^)]+)\)/)[1];
var parts = str.split(/ *, */);
var h = parseInt(parts[0], 10);
var s = parseInt(parts[1], 10);
var l = parseInt(parts[2], 10);
var a = parseInt(parts[3], 10) * 100;
var rgba = hsl2rgb(h, s, l);
rgba.a = a;
return rgba;
}
}
});
//# sourceMappingURL=colors.js.map