@chayns/colors
Version:
JavaScript utility functions for the calculation of colors for chayns
150 lines (116 loc) • 4.61 kB
JavaScript
import { darkenHexColor, lightenHexColor } from './lightenDarken';
import { hexToHsl } from '../converter';
import { colorPalette, specials } from './constants';
import { mixHex } from './mix';
import hexToRgb255 from '../converter/hex/hexToRgb255';
function getColorBrightness(color) {
var newCalculation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var rgb = hexToRgb255(color);
if (!rgb) {
return null;
}
var brightnessRgb = Math.max(rgb.r, rgb.g, rgb.b);
var brightness;
if (newCalculation) {
var max = Math.max(rgb.r, rgb.g, rgb.b);
var min = Math.min(rgb.r, rgb.g, rgb.b);
brightness = (max + min) / 2 / 255 * 100;
} else if (brightnessRgb < 64) {
brightness = 40;
} else if (brightnessRgb < 128) {
brightness = 60;
} else if (brightnessRgb < 192) {
brightness = 80;
} else {
brightness = 100;
}
return brightness;
}
function getAvailableColorList() {
return Object.keys(colorPalette[0]);
}
function getColorFromPalette(colorId, _ref) {
var _ref$color = _ref.color,
color = _ref$color === void 0 ? '#808080' : _ref$color,
_ref$colorMode = _ref.colorMode,
colorMode = _ref$colorMode === void 0 ? 0 : _ref$colorMode,
_ref$secondaryColor = _ref.secondaryColor,
secondaryColor = _ref$secondaryColor === void 0 ? null : _ref$secondaryColor;
// copy array
var colorData = JSON.parse(JSON.stringify(colorPalette[colorMode][colorId]));
var secondary;
if (!secondaryColor) {
secondary = color;
} else {
secondary = secondaryColor;
}
var colorIndex = colorData.indexOf(specials.COLOR);
if (colorIndex >= 0) {
colorData[colorIndex] = color;
}
var secondaryColorIndex = colorData.indexOf(specials.SECONDARY_COLOR);
if (secondaryColorIndex >= 0) {
colorData[secondaryColorIndex] = secondary;
}
var brightnessIndex = colorData.indexOf(specials.BRIGHTNESS);
if (brightnessIndex >= 0) {
colorData[brightnessIndex] = getColorBrightness(color, false);
}
var newBrightnessIndex = colorData.indexOf(specials.NEW_BRIGHTNESS);
if (newBrightnessIndex >= 0) {
colorData[newBrightnessIndex] = getColorBrightness(color, true);
}
var base400Index = colorData.indexOf(specials.BASE400);
if (base400Index >= 0) {
var _hexToHsl$s, _hexToHsl;
var brightness = getColorBrightness(color) || 0;
if (brightness < 50 && colorMode === 1) {
colorData[base400Index] = lightenHexColor(color, (brightness * -1 + 100) * 0.5);
} else if (brightness === 100 && ((_hexToHsl$s = (_hexToHsl = hexToHsl(color)) === null || _hexToHsl === void 0 ? void 0 : _hexToHsl.s) !== null && _hexToHsl$s !== void 0 ? _hexToHsl$s : 0) < 0.15) {
colorData[base400Index] = '#a8a8a8';
} else {
colorData[base400Index] = color;
}
}
var accent400Index = colorData.indexOf(specials.ACCENT400);
if (accent400Index >= 0) {
var _brightness = getColorBrightness(color) || 0;
if (_brightness < 50) {
colorData[accent400Index] = darkenHexColor('#2F2F2F', (_brightness * -1 + 100) * 0.1);
} else {
colorData[accent400Index] = '#2F2F2F';
}
}
var secondaryBase400Index = colorData.indexOf(specials.SECONDARY_BASE400);
if (secondaryBase400Index >= 0) {
var _hexToHsl$s2, _hexToHsl2;
var _brightness2 = getColorBrightness(secondary) || 0;
if (_brightness2 < 50 && colorMode === 1) {
colorData[secondaryBase400Index] = lightenHexColor(secondary, (_brightness2 * -1 + 100) * 0.5);
} else if (_brightness2 === 100 && ((_hexToHsl$s2 = (_hexToHsl2 = hexToHsl(secondary)) === null || _hexToHsl2 === void 0 ? void 0 : _hexToHsl2.s) !== null && _hexToHsl$s2 !== void 0 ? _hexToHsl$s2 : 0) < 15) {
colorData[secondaryBase400Index] = '#a8a8a8';
} else {
colorData[secondaryBase400Index] = secondary;
}
}
var secondaryAccent400Index = colorData.indexOf(specials.SECONDARY_ACCENT400);
if (secondaryAccent400Index >= 0) {
var _brightness3 = getColorBrightness(secondary) || 0;
if (_brightness3 < 50) {
colorData[secondaryAccent400Index] = darkenHexColor('#2F2F2F', (_brightness3 * -1 + 100) * 0.1);
} else {
colorData[secondaryAccent400Index] = '#2F2F2F';
}
}
if (Array.isArray(colorData)) {
if (colorData.length === 2) {
return mixHex(color, colorData[0], colorData[1]);
}
if (colorData.length === 3) {
return mixHex(colorData[0], colorData[1], colorData[2]);
}
}
return colorData;
}
export { getColorFromPalette, getAvailableColorList };
//# sourceMappingURL=chaynsColors.js.map