UNPKG

@kcuf/mere-color

Version:

Mere color utils for generating, manipulation, a11y purposes.

54 lines (53 loc) 2.16 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = adjustLightnessForContrast; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _util = require("../util"); var _parse = require("../parse"); var _a11y = require("../a11y"); /** * Adjust the color's lightness to meet target contrast, returning the new color in the original notation normalized. */ function adjustLightnessForContrast(color, targetContrast) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var hsl = (0, _parse.parseToHsl)(color); if (!hsl) { return color; } var _options$bgc = options.bgc, bgc = _options$bgc === void 0 ? '#fff' : _options$bgc, _options$steps = options.steps, steps = _options$steps === void 0 ? 100 : _options$steps, _options$minLightness = options.minLightness, minLightness = _options$minLightness === void 0 ? 0 : _options$minLightness, _options$maxLightness = options.maxLightness, maxLightness = _options$maxLightness === void 0 ? 100 : _options$maxLightness; var bgcLuminance = (0, _a11y.a11yLuminance)(bgc); if (bgcLuminance < 0) { return color; } var minL = minLightness; var maxL = maxLightness; var targetLightness = (minLightness + maxLightness) / 2; for (var i = 0; i < steps; i++) { var rgb = (0, _util.hslToRgb)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, hsl), {}, { l: targetLightness })); var contrast = (0, _util.computeContrast)((0, _util.rgbComputeLuminance)(rgb), bgcLuminance); if (Math.abs(contrast - targetContrast) < 0.001) { return (0, _util.toColorStringOriginalNotation)(rgb, color); } if (contrast > targetContrast) { minL = targetLightness; } else { maxL = targetLightness; } targetLightness = (minL + maxL) / 2; } return (0, _util.toColorStringOriginalNotation)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, hsl), {}, { l: targetLightness }), color); }