Перейти к содержанию

FISYCO

Публичная бета

Токены в CSS, SCSS и TypeScript

Обновлено 8 ноября 2026 г.

Библиотека токенов превращает переменные и стили Figma в файлы в вашем репозитории: DTCG, JSON, пользовательские свойства CSS, SCSS, TypeScript и JavaScript с объявлениями типов. Здесь описаны настройки, от которых зависят эти файлы, и показано, как выглядит сгенерированный результат.

Перед началом

  • Figma подключена к рабочему пространству, и файл доступен через это подключение.
  • К проекту подключён репозиторий. См. Подключение репозитория.
  • Стили синхронизируются сами. Для переменных нужен тариф Figma Enterprise или плагин FISYCO, который отправляет их прямо из Figma. См. Плагин FISYCO для Figma.
  • Вы сопровождающий проекта либо владелец или администратор рабочего пространства.

Создайте библиотеку

  1. Откройте проект, нажмите Добавить библиотеку, выберите Токены и нажмите Продолжить.
  2. Общие настройки. Задайте название библиотеки и вставьте ссылку на файл Figma.
  3. Метод синхронизации. Выберите Стили автоматически, переменные через плагин или Переменные из Figma, если ваш тариф Figma открывает API переменных.
  4. Стили. Все группы стилей сразу отмечены. Снимите отметку с ненужных.
  5. Переменные. Отметьте группы переменных для синхронизации. Если хватает стилей, этот шаг можно пропустить.
  6. Генерация. Заполните поле Папка в репозитории (по умолчанию src/tokens), выберите форматы и правила имён, о которых ниже.
  7. Нажмите Создать библиотеку.

Выберите, что синхронизировать

Библиотека синхронизирует ровно те группы, которые вы отметили. Группой считается первый сегмент имени токена: color/bg/surface относится к группе color. Группы переменных считаются внутри коллекции, группы стилей внутри типа стиля.

Пустой выбор означает «ничего», а не «всё». Новой библиотеке нужна хотя бы одна группа.

Чтобы поменять выбор позже, откройте библиотеку и нажмите Править состав. До нажатия Сохранить состав панель показывает, сколько токенов следующий pull request уберёт из репозитория. Состав без единой группы сохранить нельзя. Те же списки есть в разделе Настройки → Источник.

Форматы вывода

Отметьте один или несколько форматов в поле Форматы вывода. В новой библиотеке сразу выбраны DTCG, JSON, CSS, TS и DTS.

Последнее слово за флажком Генерировать типы .d.ts. Если он включён и выбран TS или JS, tokens.d.ts появится, даже когда DTS не отмечен. Если выключен, файла типов не будет.

Имена

Имя токена в коде собирается в три шага:

  1. Шаблон именования собирает имя из плейсхолдеров. В нём обязателен {name}, имя токена в Figma. {collection}, {type} и {source} необязательны. По умолчанию шаблон {name}.
  2. Результат переводится в нижний регистр, а каждая цепочка символов, кроме букв, цифр и /, заменяется дефисом. Каждый / начинает новый сегмент.
  3. Регистр имён оформляет каждый сегмент: по умолчанию kebab-case, либо camelCase, либо snake_case. Префикс CSS-переменных ставится в начало CSS-переменной, по умолчанию это token.

Стили попадают в tokens.ts под styles., а {collection} для них пуст. Префикс действует и на переменные SCSS, и на классы текстовых стилей.

Имена переводятся в нижний регистр до того, как применяется регистр имён. Поэтому camelCase видит границы слов только на пробелах, дефисах и других разделителях: radiusLarge из Figma станет radiuslarge. Смена шаблона, регистра или префикса переименует все токены в сгенерированных файлах. Планируйте её как любое переименование в коде.

Режимы

Стратегия режимов определяет, как записываются светлый, тёмный и другие режимы. Имена режимов переводятся в kebab-case: Dark Mode превращается в dark-mode. Одноимённые режимы разных коллекций попадают в один блок или файл.

Значения внутри

tokens.css начинается с блока :root, в котором каждый токен записан со значением режима по умолчанию. Дальше идёт по блоку [data-theme="<mode>"] на каждый режим, включая режим по умолчанию:

Чтобы переключить режим, задайте data-theme на <html> или на любом элементе, тогда режим сменится только внутри него:

Блоки режимов пишутся только в tokens.css. При этой стратегии в tokens.scss лежат значения по умолчанию. Коллекция с единственным режимом тоже получает блок. Пока вы не переименуете этот режим, Figma называет его Mode 1, и блок будет [data-theme="mode-1"].

Отдельные файлы

Каждый режим получает свой файл tokens.<mode>.css, а если выбран SCSS, ещё и tokens.<mode>.scss. Каждый файл режима пишет в :root, а tokens.css хранит значения по умолчанию. Для этой стратегии среди форматов нужен CSS или SCSS.

DTCG и режимы

В формате DTCG режимов нет, поэтому FISYCO при любой стратегии пишет по полному файлу на режим. Токен без такого режима, например стиль, входит в каждый файл со своим значением. Если ни у одной переменной нет двух и более режимов, получится один файл design-tokens.tokens.json.

Единицы для чисел

Figma хранит числа без единиц, а padding: var(--token-spacing-md) без единицы не работает. В CSS и SCSS FISYCO берёт единицу из областей применения переменной, то есть из того, куда Figma разрешает её подставлять.

У алиаса своей единицы нет, её несёт переменная, на которую он ссылается. В JSON, TS, JS и DTCG числа остаются просто числами.

Текстовые стили

Текстовый стиль превращается в tokens.css в переменную с сокращённой записью font, например --token-typography-heading: 700 24px/32px "Inter";. Ещё он становится классом в token-styles.css:

Имя класса складывается из префикса, -style- и имени переменной, поэтому префикс встречается дважды. Стиль без семейства шрифта или кегля переменной font не получает: без них сокращённая запись недействительна.

Используйте токены

CSS

SCSS

В tokens.scss на каждый токен объявлена переменная Sass, а за ними идёт тот же блок :root. Поэтому при подключении файла появляются и пользовательские свойства. Алиас и в Sass остаётся ссылкой var():

TypeScript

tokens.ts экспортирует дерево tokens, плоскую карту tokenValuesByPath и список tokenPaths, все as const. Значения по режимам лежат под ID режимов Figma. Алиас выглядит как { "$alias": "<ID переменной>" }.

DTCG

Фрагмент design-tokens.light.tokens.json. Группы повторяют сегменты имени, ссылка остаётся ссылкой, а в $extensions хранится ID переменной Figma:

В именах DTCG префикса нет. Группы записаны в том же регистре, что и CSS-переменные, поэтому Style Dictionary соберёт --color-primary там, где FISYCO пишет --token-color-primary. Текстовые стили становятся токенами typography. У строк и логических значений нет $type: таких типов в DTCG нет. Эффекты и градиенты в файл не попадают.

Структура

В поле Структура вывода по умолчанию выбрано Один файл: все файлы лежат в папке библиотеки. Вариант По слоям переносит CSS и SCSS в styles/, файлы режимов в styles/themes/ и добавляет точку входа styles.css:

Файлы режимов точка входа не импортирует: каждый из них пишет в :root. Подключайте нужный файл режима отдельно.

Получите pull request

После синхронизации откройте библиотеку и нажмите Создать PR или Обновить PR, если pull request уже открыт. Чтобы не нажимать кнопку, включите Автоматически создавать PR после каждой синхронизации в разделе Настройки → Пул-реквесты.

В описании pull request посчитаны добавленные, изменённые и удалённые токены и перечислены изменения. Переименованная в Figma переменная сохраняет свой ID, поэтому приходит как переименование. Файлы, которые FISYCO доставлял раньше, но больше не пишет, удаляются в том же коммите, остальные файлы в папке он не трогает. Как проверить каждое изменение до pull request, см. Проверка изменений и pull request.

Правка одних только настроек генерации, например нового префикса, не меняет токены в Figma. С автоматическими pull request'ами следующая синхронизация всё равно её доставит: FISYCO сравнивает сгенерированные файлы с прошлой доставкой. Ручному pull request нужна синхронизация с изменениями.

См. также