UNPKG

@chayns/colors

Version:

JavaScript utility functions for the calculation of colors for chayns

150 lines (116 loc) 4.61 kB
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