UNPKG

tinte

Version:

An opinionated tool for generating multi-platform color themes

59 lines (52 loc) 1.66 kB
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); };