ts-useful
Version:
Functions for animation, color transitions, ecliptic, bezier, decasteljau, curves, three dimensional curves, smooth scrolling, random range, randomItem, mobius index, vectors, physics vectors, and easing.
71 lines • 3.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ColorPercent = void 0;
const colorVect_1 = require("./abstract/colorVect");
const calculateStep_1 = require("./calculateStep");
const clamp_1 = require("./clamp");
const constants_1 = require("./constants");
const lerp_1 = require("./lerp");
class ColorPercent extends Array {
}
exports.ColorPercent = ColorPercent;
ColorPercent.regexArray = [
// #a0b1c2
{ regex: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/i,
converter: (e) => [parseInt(e[1].toString(), 16), parseInt(e[2].toString(), 16), parseInt(e[3].toString(), 16)] },
// #fff
{ regex: /#([a-f0-9])([a-f0-9])([a-f0-9])/i,
converter: (e) => [parseInt(e[1] + e[1], 16), parseInt(e[2] + e[2], 16), parseInt(e[3] + e[3], 16)] },
// rgb(num,num,num)
{ regex: /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,
converter: (e) => [parseInt(e[1], 10), parseInt(e[2], 10), parseInt(e[3], 10)] },
// rgb(num%,num%,num%)
{ regex: /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/,
converter: (e) => [parseFloat(e[1]) * 2.55, parseFloat(e[2]) * 2.55, parseFloat(e[3]) * 2.55] }
];
ColorPercent.getRgb = (color) => {
const rxc = ColorPercent.regexArray.find((rx) => rx.regex.test(color));
if (rxc)
return rxc.converter(rxc.regex.exec(color));
throw new Error(`getRgb Invalid color: ${color}`);
};
ColorPercent.colorDecToHex = (r, g, b) => `#${(1 << 24 | (r << 16) | (g << 8) | (b << 0)).toString(16).slice(1)}`;
/**
*
* @param colorList string[]: ['#ff0000', '#0000FF']
* @param percent number: .03
* @returns hex color.
*/
ColorPercent.getColor = (colorList, percent) => {
const stepInfo = (0, calculateStep_1.calculateStep)(colorList, percent);
const color = (position) => {
const [startColor, endColor] = [ColorPercent.getRgb(stepInfo.current), ColorPercent.getRgb(stepInfo.next)];
return Math.floor((0, lerp_1.Lerp)(startColor[position], endColor[position], stepInfo.percent));
};
return ColorPercent.colorDecToHex(color(0), color(1), color(2));
};
/**
*
* @param t number (float)
* @param a vector3
* @param b vector3
* @param c vector3
* @param d vector3
* @returns Hex string
*/
ColorPercent.makePalette = (t, a, b, c, d) => {
const calced = colorVect_1.ColorVect.multiplyBy(colorVect_1.ColorVect.multiply(c, colorVect_1.ColorVect.addBy(d, t)), constants_1.tau).map((v) => {
return Math.cos(v);
});
const rgb = colorVect_1.ColorVect.multiply(colorVect_1.ColorVect.add(a, b), calced).map((v) => Math.floor((0, clamp_1.Clamp)(Math.abs(v), 0, 1) * 100));
const colorString = `rgb(${rgb[0]}%, ${rgb[1]}%, ${rgb[2]}%)`;
const result = ColorPercent.getRgb(colorString);
return ColorPercent.colorDecToHex(result[0], result[1], result[2]);
};
ColorPercent.lighen = (color, percent) => {
return ColorPercent.getColor([color, '#FFFFFF'], percent);
};
ColorPercent.darken = (color, percent) => {
return ColorPercent.getColor([color, '#000000'], percent);
};
//# sourceMappingURL=colorPercent.js.map