diff --git a/styles/src/theme/tokens/colorScheme.ts b/styles/src/theme/tokens/colorScheme.ts index eaf0705e14f92011efa75b400c67d4d5e10eb0e3..0c31a68c0efe3ffac85ea10fe17187a71e95c0e7 100644 --- a/styles/src/theme/tokens/colorScheme.ts +++ b/styles/src/theme/tokens/colorScheme.ts @@ -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), } } diff --git a/styles/src/theme/tokens/layer.ts b/styles/src/theme/tokens/layer.ts new file mode 100644 index 0000000000000000000000000000000000000000..3ee813b8c4917d733c3bd91de0728de084f81524 --- /dev/null +++ b/styles/src/theme/tokens/layer.ts @@ -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; +}