forked from BRETT/BRETT
19 lines
594 B
TypeScript
19 lines
594 B
TypeScript
import { randomInt } from 'node:crypto'
|
|
|
|
export function randomUserColor() {
|
|
const h = randomInt(360)
|
|
const s = 60 + randomInt(30)
|
|
const l = 50 + randomInt(15)
|
|
const a = s * Math.min(l, 100 - l) / 100
|
|
const f = (n: number) => {
|
|
const k = (n + h / 30) % 12
|
|
const v = l / 100 - a * Math.max(-1, Math.min(k - 3, 9 - k, 1))
|
|
return Math.round(Math.min(1, Math.max(0, v)) * 255)
|
|
}
|
|
return `#${[f(0), f(8), f(4)].map(v => v.toString(16).padStart(2, '0')).join('')}`
|
|
}
|
|
|
|
export function avatarUrl(avatar: string | null) {
|
|
return avatar ? `/uploads/avatars/${avatar}` : null
|
|
}
|