mirror of
https://github.com/vercel/commerce.git
synced 2025-03-14 22:42:33 +00:00
51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
import random from 'lodash.random'
|
|
|
|
export function getRandomPairOfColors() {
|
|
const colors = ['#37B679', '#DA3C3C', '#3291FF', '#7928CA', '#79FFE1']
|
|
const getRandomIdx = () => random(0, colors.length - 1)
|
|
let idx = getRandomIdx()
|
|
let idx2 = getRandomIdx()
|
|
|
|
// Has to be a different color
|
|
while (idx2 === idx) {
|
|
idx2 = getRandomIdx()
|
|
}
|
|
|
|
// Returns a pair of colors
|
|
return [colors[idx], colors[idx2]]
|
|
}
|
|
|
|
function hexToRgb(hex: string = '') {
|
|
// @ts-ignore
|
|
const match = hex.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i)
|
|
|
|
if (!match) {
|
|
return [0, 0, 0]
|
|
}
|
|
|
|
let colorString = match[0]
|
|
|
|
if (match[0].length === 3) {
|
|
colorString = colorString
|
|
.split('')
|
|
.map((char: string) => {
|
|
return char + char
|
|
})
|
|
.join('')
|
|
}
|
|
|
|
const integer = parseInt(colorString, 16)
|
|
const r = (integer >> 16) & 0xff
|
|
const g = (integer >> 8) & 0xff
|
|
const b = integer & 0xff
|
|
|
|
return [r, g, b]
|
|
}
|
|
|
|
export function isDark(color = '') {
|
|
// Equation from http://24ways.org/2010/calculating-color-contrast
|
|
const rgb = hexToRgb(color)
|
|
const res = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000
|
|
return res < 128
|
|
}
|