initial version (alpha)

This commit is contained in:
Danny Morabito 2025-10-12 13:03:07 -05:00
commit 0c965b54ed
Signed by: dannym
GPG key ID: 7CC8056A5A04557E
56 changed files with 10437 additions and 0 deletions

46
src/utils/color.ts Normal file
View file

@ -0,0 +1,46 @@
export function getColorFromPubkey(pubkey: string): string {
let hash = 0;
for (let i = 0; i < pubkey.length; i++) hash = ((hash << 5) - hash + pubkey.charCodeAt(i)) & 0xffffffff;
hash = Math.abs(hash);
const hue = hash % 360;
const saturation = hue >= 216 && hue <= 273 ? 0.8 : 0.9;
const lightness = hue >= 32 && hue <= 212 ? 0.85 : 0.65;
const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;
const huePrime = hue / 60;
const secondComponent = chroma * (1 - Math.abs((huePrime % 2) - 1));
const lightnessAdjustment = lightness - chroma / 2;
let [r, g, b] = [0, 0, 0];
const sector = Math.floor(huePrime);
switch (sector) {
case 0:
[r, g, b] = [chroma, secondComponent, 0];
break;
case 1:
[r, g, b] = [secondComponent, chroma, 0];
break;
case 2:
[r, g, b] = [0, chroma, secondComponent];
break;
case 3:
[r, g, b] = [0, secondComponent, chroma];
break;
case 4:
[r, g, b] = [secondComponent, 0, chroma];
break;
default:
[r, g, b] = [chroma, 0, secondComponent];
break;
}
const toHex = (value: number): string =>
Math.round((value + lightnessAdjustment) * 255)
.toString(16)
.padStart(2, "0");
return `${toHex(r)}${toHex(g)}${toHex(b)}`;
}