tinte
Version:
An opinionated tool for generating multi-platform color themes
86 lines (77 loc) • 1.99 kB
text/typescript
import { currentPalette } from "./config/index.ts";
import { ColorMap, Shade } from "./types.ts";
import { entries } from "./utils/index.ts";
const colorAbbreviations = {
red: "re",
orange: "or",
yellow: "ye",
green: "gr",
cyan: "cy",
blue: "bl",
purple: "pu",
magenta: "ma",
} as const;
const textTones = {
tx: {
light: currentPalette.base.black,
dark: currentPalette.base[200],
},
"tx-2": {
light: currentPalette.base[600],
dark: currentPalette.base[500],
},
"tx-3": {
light: currentPalette.base[300],
dark: currentPalette.base[700],
},
};
const interfaceTones = {
ui: {
light: currentPalette.base[100],
dark: currentPalette.base[900],
},
"ui-2": {
light: currentPalette.base[150],
dark: currentPalette.base[850],
},
"ui-3": {
light: currentPalette.base[200],
dark: currentPalette.base[800],
},
};
const backgroundTones = {
bg: {
light: currentPalette.base.paper,
dark: currentPalette.base.black,
},
"bg-2": {
light: currentPalette.base[50],
dark: currentPalette.base[950],
},
};
const generateColorTones = ({
lightContrastShade = 500,
darkContrastShade = 300,
}: {
lightContrastShade: Shade;
darkContrastShade: Shade;
}): ColorMap => {
const colorMap: ColorMap = {} as ColorMap;
for (const [colorName, abbreviation] of entries(colorAbbreviations)) {
colorMap[abbreviation] = {
light: currentPalette[colorName][lightContrastShade],
dark: currentPalette[colorName][darkContrastShade],
};
colorMap[`${abbreviation}-2`] = {
light: currentPalette[colorName][darkContrastShade],
dark: currentPalette[colorName][lightContrastShade],
};
}
return colorMap;
};
export const mappedPalette = {
...textTones,
...interfaceTones,
...backgroundTones,
...generateColorTones({ lightContrastShade: 500, darkContrastShade: 300 }),
};