UNPKG

chromaticity-color-utilities

Version:
512 lines (511 loc) 20.1 kB
"use strict"; // chromaticity-color-utilities // Copyright (C) 2022 Emma Litwa-Vulcu // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var Colors = __importStar(require("./Colors")); var Modify = /** @class */ (function () { function Modify() { } /** * Rotate $hue by $angle degrees * Degrees can be more than 360 or less than -360 and will loop around * * @param {number} hue degrees * @param {number} angle degrees * @return {number} rotated hue */ Modify.hueShift = function (hue, angle) { hue += angle; while (hue >= 360) hue -= 360; while (hue < 0) hue += 360; return hue; }; /** * Darken RGB color by amount * * @param {Colors.rgb} rgb * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.rgb} */ Modify.rgbDarken = function (rgb, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var rd = rgb.getR() * realAmount; var gd = rgb.getG() * realAmount; var bd = rgb.getB() * realAmount; return new Colors.rgb(rd, gd, bd, rgb.getA()); }; /** * Lighten RGB color by amount * * @param {Colors.rgb} rgb * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.rgb} */ Modify.rgbLighten = function (rgb, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var rl = rgb.getR() + (rgb.getMax() - rgb.getR()) * realAmount; var gl = rgb.getG() + (rgb.getMax() - rgb.getG()) * realAmount; var bl = rgb.getB() + (rgb.getMax() - rgb.getB()) * realAmount; return new Colors.rgb(rl, gl, bl, rgb.getA()); }; /** * Darken RGB color by amount (alt method) * * @param {Colors.rgb} rgb * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.rgb} */ Modify.rgb2Darken = function (rgb, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var distanceLeft = Math.max(rgb.getR(), rgb.getG(), rgb.getB()); var changeValue = distanceLeft * realAmount; var rd = Math.max(0, rgb.getR() - changeValue); var gd = Math.max(0, rgb.getG() - changeValue); var bd = Math.max(0, rgb.getB() - changeValue); return new Colors.rgb(rd, gd, bd, rgb.getA()); }; /** * Lighten RGB color by amount (alt method) * * @param {Colors.rgb} rgb * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.rgb} */ Modify.rgb2Lighten = function (rgb, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var distanceLeft = rgb.getMax() - Math.min(rgb.getR(), rgb.getG(), rgb.getB()); var changeValue = distanceLeft * realAmount; var rl = Math.min(rgb.getR() + changeValue, rgb.getMax()); var gl = Math.min(rgb.getG() + changeValue, rgb.getMax()); var bl = Math.min(rgb.getB() + changeValue, rgb.getMax()); return new Colors.rgb(rl, gl, bl, rgb.getA()); }; /** * Darken CMYK color by amount * * @param {Colors.cmyk} cmyk * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.cmyk} */ Modify.cmykDarken = function (cmyk, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var c2 = cmyk.getC() + (100 - cmyk.getC()) * realAmount; var m2 = cmyk.getM() + (100 - cmyk.getM()) * realAmount; var y2 = cmyk.getY() + (100 - cmyk.getY()) * realAmount; var k2 = cmyk.getK() + (100 - cmyk.getK()) * realAmount; return new Colors.cmyk(c2, m2, y2, k2); }; /** * Lighten CMYK color by amount * * @param {Colors.cmyk} cmyk * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.cmyk} */ Modify.cmykLighten = function (cmyk, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var c2 = cmyk.getC() * realAmount; var m2 = cmyk.getM() * realAmount; var y2 = cmyk.getY() * realAmount; var k2 = cmyk.getK() * realAmount; return new Colors.cmyk(c2, m2, y2, k2); }; /** * Darken CMYK color by amount (alt method) * * @param {Colors.cmyk} cmyk * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.cmyk} */ Modify.cmyk2Darken = function (cmyk, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var k2 = cmyk.getK() + (100 - cmyk.getK()) * realAmount; return new Colors.cmyk(cmyk.getC(), cmyk.getM(), cmyk.getY(), k2); }; /** * Lighten CMYK color by amount (alt method) * * @param {Colors.cmyk} cmyk * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.cmyk} */ Modify.cmyk2Lighten = function (cmyk, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var k2 = cmyk.getK() * realAmount; return new Colors.cmyk(cmyk.getC(), cmyk.getM(), cmyk.getY(), k2); }; /** * Darken HSL color by amount * * @param {Colors.hsl} hsl * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.hsl} */ Modify.hslDarken = function (hsl, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var vDarker = hsl.getL() * realAmount; return new Colors.hsl(hsl.getH(), hsl.getS(), vDarker, hsl.getA()); }; /** * Lighten HSL color by amount * * @param {Colors.hsl} hsl * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsl} */ Modify.hslLighten = function (hsl, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var vLighter = hsl.getL() + (100 - hsl.getL()) * realAmount; return new Colors.hsl(hsl.getH(), hsl.getS(), vLighter, hsl.getA()); }; /** * Darken HSV color by amount * * @param {Colors.hsv} hsv * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.hsv} */ Modify.hsvDarken = function (hsv, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var vDarker = hsv.getV() * realAmount; return new Colors.hsv(hsv.getH(), hsv.getS(), vDarker, hsv.getA()); }; /** * Lighten HSV color by amount * * @param {Colors.hsv} hsv * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsv} */ Modify.hsvLighten = function (hsv, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var vLighter = hsv.getV() + (100 - hsv.getV()) * realAmount; var sLighter = hsv.getS() - realAmount * hsv.getS(); return new Colors.hsv(hsv.getH(), sLighter, vLighter, hsv.getA()); }; /** * Darken HSI color by amount * * @param {Colors.hsi} hsi * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.hsi} */ Modify.hsiDarken = function (hsi, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var vDarker = hsi.getI() * realAmount; return new Colors.hsi(hsi.getH(), hsi.getS(), vDarker, hsi.getA()); }; /** * Lighten HSI color by amount * * @param {Colors.hsi} hsi * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsi} */ Modify.hsiLighten = function (hsi, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var vLighter = hsi.getI() + (100 - hsi.getI()) * realAmount; var sLighter = hsi.getS() - realAmount * hsi.getS(); return new Colors.hsi(hsi.getH(), sLighter, vLighter, hsi.getA()); }; /** * Darken HSP color by amount * * @param {Colors.hsp} hsp * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.hsp} */ Modify.hspDarken = function (hsp, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var pDarker = hsp.getP() * realAmount; return new Colors.hsp(hsp.getH(), hsp.getS(), pDarker, hsp.getA(), hsp.getPb(), hsp.getPr()); }; /** * Lighten HSP color by amount * * @param {Colors.hsp} hsp * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsp} */ Modify.hspLighten = function (hsp, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var pLighter = hsp.getP() + (100 - hsp.getP()) * realAmount; var sLighter = hsp.getS() - realAmount * hsp.getS(); return new Colors.hsp(hsp.getH(), sLighter, pLighter, hsp.getA(), hsp.getPb(), hsp.getPr()); }; /** * Darken Lab color by amount * * @param {Colors.lab} lab * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.lab} */ Modify.labDarken = function (lab, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var lDarker = lab.getL() * realAmount; var aDarker = lab.getA() * realAmount; var bDarker = lab.getB() * realAmount; return new Colors.lab(lDarker, aDarker, bDarker); }; /** * Lighten Lab color by amount * * @param {Colors.lab} lab * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.lab} */ Modify.labLighten = function (lab, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var realAmountAB = 1 - Math.min(Math.max(amount, 0), 1); var lLighter = lab.getL() + (100 - lab.getL()) * realAmount; var aLighter = lab.getA() * realAmountAB; var bLighter = lab.getB() * realAmountAB; return new Colors.lab(lLighter, aLighter, bLighter); }; /** * Darken Lab color by amount (alt method) * * @param {Colors.lab} lab * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.lab} */ Modify.lab2Darken = function (lab, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var lDarker = lab.getL() * realAmount; return new Colors.lab(lDarker, lab.getA(), lab.getB()); }; /** * Lighten Lab color by amount (alt method) * * @param {Colors.lab} lab * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.lab} */ Modify.lab2Lighten = function (lab, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var lLighter = lab.getL() + (100 - lab.getL()) * realAmount; return new Colors.lab(lLighter, lab.getA(), lab.getB()); }; /** * Darken Luv color by amount * * @param {Colors.luv} luv * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.luv} */ Modify.luvDarken = function (luv, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var lDarker = luv.getL() * realAmount; var uDarker = luv.getU() * realAmount; var vDarker = luv.getV() * realAmount; return new Colors.luv(lDarker, uDarker, vDarker); }; /** * Lighten Luv color by amount * * @param {Colors.luv} luv * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.luv} */ Modify.luvLighten = function (luv, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var realAmountAB = 1 - Math.min(Math.max(amount, 0), 1); var lLighter = luv.getL() + (100 - luv.getL()) * realAmount; var uLighter = luv.getU() * realAmountAB; var vLighter = luv.getV() * realAmountAB; return new Colors.luv(lLighter, uLighter, vLighter); }; /** * Darken Luv color by amount (alt method) * Breaks as L* approaches 0 * * @param {Colors.luv} luv * @param {number} [amount=0.5] amount to darken, 0-1 * @return {Colors.luv} */ Modify.luv2Darken = function (luv, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var lDarker = luv.getL() * realAmount; return new Colors.luv(lDarker, luv.getU(), luv.getV()); }; /** * Lighten Luv color by amount (alt method) * * @param {Colors.luv} luv * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.luv} */ Modify.luv2Lighten = function (luv, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var lLighter = luv.getL() + (100 - luv.getL()) * realAmount; return new Colors.luv(lLighter, luv.getU(), luv.getV()); }; /** * Desaturate HSL color by amount * * @param {Colors.hsl} hsl * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsl} */ Modify.hslDesaturate = function (hsl, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var sLess = hsl.getS() * realAmount; return new Colors.hsl(hsl.getH(), sLess, hsl.getL(), hsl.getA()); }; /** * Saturate HSL color by amount * * @param {Colors.hsl} hsl * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsl} */ Modify.hslSaturate = function (hsl, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var sMore = hsl.getS() + (100 - hsl.getS()) * realAmount; return new Colors.hsl(hsl.getH(), sMore, hsl.getL(), hsl.getA()); }; /** * Desaturate HSV color by amount * * @param {Colors.hsv} hsv * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsv} */ Modify.hsvDesaturate = function (hsv, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var sLess = hsv.getS() * realAmount; return new Colors.hsv(hsv.getH(), sLess, hsv.getV(), hsv.getA()); }; /** * Saturate HSV color by amount * * @param {Colors.hsv} hsv * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsv} */ Modify.hsvSaturate = function (hsv, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var sMore = hsv.getS() + (100 - hsv.getS()) * realAmount; return new Colors.hsv(hsv.getH(), sMore, hsv.getV(), hsv.getA()); }; /** * Desaturate HSI color by amount * * @param {Colors.hsi} hsi * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsi} */ Modify.hsiDesaturate = function (hsi, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var sLess = hsi.getS() * realAmount; return new Colors.hsi(hsi.getH(), sLess, hsi.getI(), hsi.getA()); }; /** * Saturate HSI color by amount * * @param {Colors.hsi} hsi * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsi} */ Modify.hsiSaturate = function (hsi, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var sMore = hsi.getS() + (100 - hsi.getS()) * realAmount; return new Colors.hsi(hsi.getH(), sMore, hsi.getI(), hsi.getA()); }; /** * Desaturate HSP color by amount * * @param {Colors.hsp} hsp * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsp} */ Modify.hspDesaturate = function (hsp, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = 1 - Math.min(Math.max(amount, 0), 1); var sLess = hsp.getS() * realAmount; return new Colors.hsp(hsp.getH(), sLess, hsp.getP(), hsp.getA()); }; /** * Saturate HSP color by amount * * @param {Colors.hsp} hsp * @param {number} [amount=0.5] amount to lighten, 0-1 * @return {Colors.hsp} */ Modify.hspSaturate = function (hsp, amount) { if (amount === void 0) { amount = 0.5; } var realAmount = Math.min(Math.max(amount, 0), 1); var sMore = hsp.getS() + (100 - hsp.getS()) * realAmount; return new Colors.hsp(hsp.getH(), sMore, hsp.getP(), hsp.getA()); }; return Modify; }()); exports.default = Modify;