themer
Version:
Customizable theme creator for editors, terminals, wallpaper, and more.
88 lines • 3.1 kB
JavaScript
import Color from 'color';
import capitalize from 'lodash/capitalize.js';
import camelCase from 'lodash/camelCase.js';
import kebabCase from 'lodash/kebabCase.js';
import snakeCase from 'lodash/snakeCase.js';
import upperFirst from 'lodash/upperFirst.js';
export function colorSetToVariants(colorSet) {
return Object.entries(colorSet.variants).map(([name, colors]) => ({
name,
colors,
isDark: name === 'dark',
title: {
human: `${colorSet.title.human} ${capitalize(name)}`,
kebab: `${colorSet.title.kebab}-${name}`,
snake: `${colorSet.title.snake}_${name}`,
upperCamel: `${colorSet.title.upperCamel}${capitalize(name)}`,
},
}));
}
export function prepareColorSet(colorSet) {
const variants = 'dark' in colorSet.variants && 'light' in colorSet.variants
? {
dark: prepareVariant(colorSet.variants.dark),
light: prepareVariant(colorSet.variants.light),
}
: 'dark' in colorSet.variants
? { dark: prepareVariant(colorSet.variants.dark) }
: { light: prepareVariant(colorSet.variants.light) };
return {
...colorSet,
variants,
title: {
human: `Themer ${colorSet.name}`,
kebab: kebabCase(`themer-${colorSet.name}`),
snake: snakeCase(`themer_${colorSet.name}`),
upperCamel: upperFirst(camelCase(`Themer ${colorSet.name}`)),
},
};
}
export function prepareVariant(variant) {
if ('shade1' in variant) {
return variant;
}
const start = new Color(variant.shade0);
const end = new Color(variant.shade7);
const rDelta = (end.red() - start.red()) / 7;
const gDelta = (end.green() - start.green()) / 7;
const bDelta = (end.blue() - start.blue()) / 7;
return {
...variant,
shade1: new Color({
r: start.red() + rDelta * 1,
g: start.green() + gDelta * 1,
b: start.blue() + bDelta * 1,
}).hex(),
shade2: new Color({
r: start.red() + rDelta * 2,
g: start.green() + gDelta * 2,
b: start.blue() + bDelta * 2,
}).hex(),
shade3: new Color({
r: start.red() + rDelta * 3,
g: start.green() + gDelta * 3,
b: start.blue() + bDelta * 3,
}).hex(),
shade4: new Color({
r: start.red() + rDelta * 4,
g: start.green() + gDelta * 4,
b: start.blue() + bDelta * 4,
}).hex(),
shade5: new Color({
r: start.red() + rDelta * 5,
g: start.green() + gDelta * 5,
b: start.blue() + bDelta * 5,
}).hex(),
shade6: new Color({
r: start.red() + rDelta * 6,
g: start.green() + gDelta * 6,
b: start.blue() + bDelta * 6,
}).hex(),
};
}
export function brightMix(colors, key, isDark) {
return Color(colors[key])
.mix(isDark ? Color(colors.shade7) : Color(colors.shade0), 0.2)
.hex();
}
//# sourceMappingURL=index.js.map