getRandomPalette = (opts) => {
const {
bgLightness,
length,
maxAttempts,
minColorDifference,
background,
minContrast
} = Object.assign(
{
length: 3,
background: undefined,
bgLightness: undefined,
maxAttempts: 100,
minColorDifference: 20,
minContrast: 1.5
},
opts
);
let bg = background || getRandomColor(bgLightness);
let iter = 0;
const colors = [];
while (iter < maxAttempts && colors.length < length) {
const nextColor = getRandomContrastColor(bg, minContrast);
const similarColor = colors.find(
(pickedColor) =>
colorDifference(pickedColor, nextColor) < minColorDifference
);
if (!similarColor) {
colors.push(nextColor);
}
iter++;
}
return {
background: bg,
colors
};
}