love/source/scripts/love.ts

69 lines
1.7 KiB
TypeScript

import {hsluvToHex as hsluv} from 'hsluv';
export interface LoveVariant {
name: 'dark' | 'light';
colors: {
foreground1: string;
foreground2: string;
background1: string;
background2: string;
accents: string[];
grays: string[];
};
}
export function generateLove(): LoveVariant[] {
// Create Love with its 2 variants.
const love: LoveVariant[] = [
{
name: 'dark',
colors: {
foreground1: hsluv([275, 100, 95]).toUpperCase(),
foreground2: hsluv([275, 100, 90]).toUpperCase(),
background1: hsluv([275, 40, 10]).toUpperCase(),
background2: hsluv([275, 40, 15]).toUpperCase(),
accents: [],
grays: []
}
},
{
name: 'light',
colors: {
foreground1: hsluv([275, 40, 10]).toUpperCase(),
foreground2: hsluv([275, 40, 15]).toUpperCase(),
background1: hsluv([275, 100, 95]).toUpperCase(),
background2: hsluv([275, 100, 90]).toUpperCase(),
accents: [],
grays: []
}
}
];
// Generate the accent and gray colors.
const accentCount = 10;
const grayCount = 3;
for (let index = 0; index < accentCount; index++) {
// Dark accents.
love[0].colors.accents.push(
hsluv([index * (360 / accentCount), 90, 75]).toUpperCase()
);
// Light accents.
love[1].colors.accents.push(
hsluv([index * (360 / accentCount), 90, 30]).toUpperCase()
);
if (index < grayCount) {
// Dark grays.
love[0].colors.grays.push(
hsluv([0, 0, 100 - (index + 1) * 10]).toUpperCase()
);
// Light grays.
love[1].colors.grays.push(hsluv([0, 0, (index + 1) * 10]).toUpperCase());
}
}
return love;
}