UNPKG

@etsoo/shared

Version:

TypeScript shared utilities and functions

77 lines (76 loc) 2.62 kB
import { EColor } from "./types/EColor"; /** * Color utils */ export var ColorUtils; (function (ColorUtils) { /** * Get HEX or RGB colors * @param init Initial color * @param factor Increase factor * @param adjustOrder Adjust order to increase difference * @param hex to HEX or not * @returns Result */ function getColors(init = "#000", factor = 51, adjustOrder = true, hex = true) { return getEColors(init, factor, adjustOrder).map((c) => hex ? c.toHEXColor() : c.toRGBColor()); } ColorUtils.getColors = getColors; /** * Get EColors * @param init Initial color * @param factor Increase factor * @param adjustOrder Adjust order to increase difference * @returns Result */ function getEColors(init = "#000", factor = 51, adjustOrder = true) { // Init color const initColor = EColor.parse(init) ?? new EColor(0, 0, 0); // Factors elements // 51 = '00', '33', '66', '99', 'cc', 'ff' const factors = []; let f = 0; while (f <= 255) { factors.push(f); f += factor; } // RGB loop const colors = [initColor]; for (const r of factors) { for (const g of factors) { for (const b of factors) { colors.push(initColor.clone(r, g, b)); } } } // Non-nullable colors const nColors = colors.filter((color) => color != null); // Adjust order if (adjustOrder) { const firstColor = nColors.shift(); if (firstColor) { let color = firstColor; const newColors = [color]; while (nColors.length > 0) { const result = nColors.reduce((p, c, index) => { const delta = color.getDeltaValue(c); if (delta != null && delta > p.delta) { p.delta = delta; p.color = c; p.index = index; } return p; }, { delta: 0, color, index: -1 }); if (result.delta > 0) { color = result.color; newColors.push(color); nColors.splice(result.index, 1); } } return newColors; } } return nColors; } ColorUtils.getEColors = getEColors; })(ColorUtils || (ColorUtils = {}));