diff --git a/src/themeDescriptions/themes/lego/helpers/overwriteFromFigmaJSON.test.ts b/src/themeDescriptions/themes/lego/helpers/overwriteFromFigmaJSON.test.ts new file mode 100644 index 00000000..99c467be --- /dev/null +++ b/src/themeDescriptions/themes/lego/helpers/overwriteFromFigmaJSON.test.ts @@ -0,0 +1,45 @@ +import { describe, expect, it } from '@jest/globals'; + +import { overwriteFromFigmaJSON } from './overwriteFromFigmaJSON'; + +const originalLightTokens = { + colorBackgroundAccent: '#000000', + colorSearchFieldBackground: '#111111', + colorHeaderBackground: '#222222', + colorNotSpecifiedInFigmaJSON: '#333333', +}; + +const figmaJSON = { + appearance: { + backgroundAccent: { + light: '#2688eb', + dark: '#529ef4', + }, + backgroundHeaderBackground: { + light: '#ffffff', + dark: '#191919', + }, + otherSearchFieldBackground: { + light: '#ebebeb', + dark: '#373737', + }, + colorNotSpecifiedInOriginalTokens: { + light: '#212121', + dark: '#e3e3e3', + }, + }, +}; + +const overwrittenLightTokens = { + colorBackgroundAccent: '#2688eb', + colorSearchFieldBackground: '#ebebeb', + colorHeaderBackground: '#ffffff', +}; + +describe('overwriteFromFigmaJSON', () => { + it('should leave only overwritten tokens', () => { + expect( + overwriteFromFigmaJSON(originalLightTokens, 'appearance', 'light', figmaJSON), + ).toStrictEqual(overwrittenLightTokens); + }); +}); diff --git a/src/themeDescriptions/themes/lego/helpers/overwriteFromFigmaJSON.ts b/src/themeDescriptions/themes/lego/helpers/overwriteFromFigmaJSON.ts index 8eda54b9..1733cbcf 100644 --- a/src/themeDescriptions/themes/lego/helpers/overwriteFromFigmaJSON.ts +++ b/src/themeDescriptions/themes/lego/helpers/overwriteFromFigmaJSON.ts @@ -1,11 +1,13 @@ import figma from '../figma.json'; // Поля — режимы соответсвующей коллекции переменных из фигмы +// Цвета interface AppearanceVariable { light: string; dark: string; } +// Числа и строки interface TokensVariable { iOS: string | number; android: string | number; @@ -13,17 +15,23 @@ interface TokensVariable { vkCom: string | number; } +// Коллекция с переменными interface Collection { [name: string]: AppearanceVariable | TokensVariable; } +// Цельный файл. Может генерироваться дизайнерами плагином Figma Variables To JSON +interface FigmaJSON { + [collection: string]: Collection; +} + /** * Функция, возращающася список токенов, переопределённых в специальном JSON-файле с фигмовскими переменными * * @param originalTokens Токены, замена для которых будет искаться в figma.json * @param {('appearance' | 'tokens')} [collection='appearance'] Коллекция, среди которой ищется замена * @param {('light'|'dark')} [mode='light'] Режим переменных фигмы, применяемый для замены. Сейчас ограничивается светлой и тёмной темой - * @param source Объект, используемый вместо figma.json. По умолчанию генерируется дизайнерами плагином Figma Variables To JSON + * @param {FigmaJSON} source Объект, используемый вместо figma.json. Может генерироваться дизайнерами плагином Figma Variables To JSON * @returns Объект с токенами, для которых нашлась замена */ // eslint-disable-next-line max-params @@ -31,7 +39,7 @@ export function overwriteFromFigmaJSON( originalTokens, collection: 'appearance' | 'tokens' = 'appearance', mode: 'light' | 'dark' = 'light', - source = figma, + source: FigmaJSON = figma, ): Partial { return Object.fromEntries( Object.keys(originalTokens).reduce((acc, key) => {