kml first commit
This commit is contained in:
34
src/colors.ts
Normal file
34
src/colors.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
// Stable video_name -> RGB hash (12-color palette).
|
||||
|
||||
const PALETTE: ReadonlyArray<readonly [number, number, number]> = [
|
||||
[231, 76, 60],
|
||||
[52, 152, 219],
|
||||
[46, 204, 113],
|
||||
[241, 196, 15],
|
||||
[155, 89, 182],
|
||||
[230, 126, 34],
|
||||
[26, 188, 156],
|
||||
[233, 30, 99],
|
||||
[3, 169, 244],
|
||||
[205, 220, 57],
|
||||
[255, 87, 34],
|
||||
[121, 85, 72],
|
||||
];
|
||||
|
||||
const cache = new Map<string, readonly [number, number, number]>();
|
||||
|
||||
export function videoColorRGB(
|
||||
name: string | null | undefined,
|
||||
): readonly [number, number, number] {
|
||||
const key = name ?? "";
|
||||
const hit = cache.get(key);
|
||||
if (hit) return hit;
|
||||
let h = 0;
|
||||
for (let i = 0; i < key.length; i++) {
|
||||
h = ((h << 5) - h + key.charCodeAt(i)) | 0;
|
||||
}
|
||||
const idx = ((h % PALETTE.length) + PALETTE.length) % PALETTE.length;
|
||||
const c = PALETTE[idx];
|
||||
cache.set(key, c);
|
||||
return c;
|
||||
}
|
||||
Reference in New Issue
Block a user