tinte
Version:
An opinionated tool for generating multi-platform color themes
59 lines (52 loc) • 1.66 kB
text/typescript
import { mappedPalette } from "../../mapped-palette.ts";
import { Color } from "../../utils/color.ts";
import { entries, getThemeName, writeFile } from "../../utils/index.ts";
import { ThemeType } from "../types.ts";
import { formatAbbreviationToSemantic } from "./mappers.ts";
export const generateGimpTheme = ({
name,
themeType,
}: {
name: string;
themeType: ThemeType;
}) => {
const themeName = getThemeName(name);
const maxLengths = {
red: Math.max(
...Object.values(mappedPalette).map(
(color) => Color.fromHex(color[themeType]).asInt.red.toString().length
)
),
green: Math.max(
...Object.values(mappedPalette).map(
(color) => Color.fromHex(color[themeType]).asInt.green.toString().length
)
),
blue: Math.max(
...Object.values(mappedPalette).map(
(color) => Color.fromHex(color[themeType]).asInt.blue.toString().length
)
),
};
const theme = `GIMP Palette
Name: ${themeName}
Columns: 8
${entries(mappedPalette).map(([key, color]) => {
const rgbaColor = Color.fromHex(color[themeType]);
const paddedRed = rgbaColor.asInt.red
.toString()
.padStart(maxLengths.red, " ");
const paddedGreen = rgbaColor.asInt.green
.toString()
.padStart(maxLengths.green, " ");
const paddedBlue = rgbaColor.asInt.blue
.toString()
.padStart(maxLengths.blue, " ");
return `${paddedRed} ${paddedGreen} ${paddedBlue} ${formatAbbreviationToSemantic(
key
)}`;
}).join(`
`)}`;
const filePath = `./_generated/${themeName}/gimp/${themeName}.gpl`;
writeFile(filePath, theme);
};