/**
* Generate N unique random HEX colors (#RRGGBB).
* @param count Number of unique colors to generate.
* @returns Array of HEX color strings.
*/
export function generateRandomUniqueHexColors(count: number): string[] {
// A Set ensures uniqueness automatically
const colors: Set<string> = new Set();
while (colors.size < count) {
// Create 3 random bytes (R, G, B)
const bytes: Uint8Array = new Uint8Array(3);
crypto.getRandomValues(bytes); // secure random values
// Convert bytes → hex string (#RRGGBB)
const hex: string =
`#${Array.from(bytes)
.map((v: number) => v.toString(16).padStart(2, "0"))
.join("")}`;
colors.add(hex); // Set ignores duplicates
}
// Convert Set → Array
const result: string[] = Array.from(colors);
return result;
}
// Example usage
const colors: string[] = generateRandomUniqueHexColors(12);
console.log("Generated HEX colors:");
colors.forEach((c: string) => console.log(c));
/*
run:
Generated HEX colors:
#e3c828
#45f4e5
#6c1de0
#2676d8
#516505
#04ebe7
#9fa377
#b867c5
#61e26e
#f65fa9
#b53342
#2ddc10
*/