nhb-toolbox
Version:
A versatile collection of smart, efficient, and reusable utility functions, classes and types for everyday development needs.
35 lines (34 loc) • 1.22 kB
JavaScript
import { convertColorCode, convertHslToHex, convertHslToRgb } from './convert.js';
import { _generateRandomHSL, _isSimilarToLast } from './helpers.js';
import { extractSolidColorValues } from './utils.js';
const generatedColors = new Set();
const recentColors = [];
export const generateRandomHSLColor = (maxColors = 16) => {
let color;
do {
color = _generateRandomHSL();
} while (generatedColors.has(color) || _isSimilarToLast(recentColors, color));
generatedColors.add(color);
recentColors.push(color);
if (recentColors?.length > maxColors) {
recentColors?.shift();
}
return color;
};
export const generateRandomColorInHexRGB = (maxColors = 16) => {
return convertColorCode(generateRandomHSLColor(maxColors));
};
export function generateRandomColor(options) {
const { colorType = 'hex', maxColors = 16 } = options ?? {};
const hsl = generateRandomHSLColor(maxColors);
const hslValues = extractSolidColorValues(hsl);
switch (colorType) {
case 'hsl':
return hsl;
case 'rgb':
return convertHslToRgb(...hslValues);
case 'hex':
default:
return convertHslToHex(...hslValues);
}
}