Build layer tokens for each theme

This commit is contained in:
Nate Butler 2023-06-08 11:15:59 -04:00
parent 16e3e04501
commit e2f46d5448
2 changed files with 67 additions and 0 deletions

View file

@ -1,12 +1,19 @@
import { ColorScheme } from "../colorScheme"
import { LayerToken, layerToken } from "./layer"
import { PlayerTokens, players } from "./players"
interface ColorSchemeTokens {
lowest: LayerToken
middle: LayerToken
highest: LayerToken
players: PlayerTokens
}
export function colorSchemeTokens(colorScheme: ColorScheme): ColorSchemeTokens {
return {
lowest: layerToken(colorScheme.lowest, "lowest"),
middle: layerToken(colorScheme.middle, "middle"),
highest: layerToken(colorScheme.highest, "highest"),
players: players(colorScheme),
}
}

View file

@ -0,0 +1,60 @@
import { SingleColorToken } from "@tokens-studio/types";
import { Layer, Style, StyleSet } from "../colorScheme";
import { colorToken } from "./token";
interface StyleToken {
background: SingleColorToken,
border: SingleColorToken,
foreground: SingleColorToken,
}
interface StyleSetToken {
default: StyleToken
active: StyleToken
disabled: StyleToken
hovered: StyleToken
pressed: StyleToken
inverted: StyleToken
}
export interface LayerToken {
base: StyleSetToken
variant: StyleSetToken
on: StyleSetToken
accent: StyleSetToken
positive: StyleSetToken
warning: StyleSetToken
negative: StyleSetToken
}
export const styleToken = (style: Style, name: string): StyleToken => {
const token = {
background: colorToken(`${name}Background`, style.background),
border: colorToken(`${name}Border`, style.border),
foreground: colorToken(`${name}Foreground`, style.foreground),
}
return token
}
export const styleSetToken = (styleSet: StyleSet, name: string): StyleSetToken => {
const token: StyleSetToken = {} as StyleSetToken;
for (const style in styleSet) {
const s = style as keyof StyleSet;
token[s] = styleToken(styleSet[s], `${name}${style}`);
}
return token;
}
export const layerToken = (layer: Layer, name: string): LayerToken => {
const token: LayerToken = {} as LayerToken;
for (const styleSet in layer) {
const s = styleSet as keyof Layer;
token[s] = styleSetToken(layer[s], `${name}${styleSet}`);
}
return token;
}