Skip to content

feat: добавлен генератор дизайн-токенов - #55

Merged
fabulous-unicorn merged 13 commits into
feature/release_v3from
feature/token-generator
Aug 4, 2026
Merged

fabulous-unicorn merged 13 commits into
feature/release_v3from
feature/token-generator

Conversation

@fabulous-unicorn

@fabulous-unicorn fabulous-unicorn commented Jul 30, 2026 •

Copy link
Copy Markdown
Collaborator

Добавлен генератор, преобразующий единый экспорт токенов из Figma в токены проекта

Входной файл: design-tokens/input/tokens.json
Существующие стили компонентов в рамках этой задачи не заменялись

Результат генерации

src/theme/tokens
├── fonts.json
├── semantic
│   ├── colorScheme
│   │   ├── light.json
│   │   └── dark.json
│   ├── dimensions.json
│   └── effects.json
└── components
    ├── light.json
    └── dark.json
  • semantic.colorScheme разделяется на светлую и тёмную темы.
  • semantic.dimension и semantic.effects не зависят от темы и генерируются один раз
  • В ThemeType.semantic подключается только выбранный colorScheme
  • Общие semantic-токены доступны через статический semanticTokens
  • Component-токены предназначены только для внутреннего использования UI Kit и не входят в темы или публичные экспорты
  • primitive.fonts преобразуется в общий fonts.json
  • Остальная часть primitive используется только для разрешения ссылок и не попадает в результат
  • Вложенные light и dark удаляются из выходных токенов

Генератор: Преобразование значений

  • разрешает ссылки между primitive, semantic и components;
  • преобразует rem, px, ms и числовые строки в числа;
  • раскрывает shorthand для padding, margin и borderWidth;
  • сворачивает одинаковые значения borderRadius в одно число;
  • сохраняет разные значения borderRadius в объекте { left, top, right, bottom };
  • сохраняет boxShadow строкой, преобразуя вложенные rem в px;
  • преобразует easing в коэффициенты для Easing.bezier;
  • нормализует focusRing, сохраняя его исходную структуру;
  • проверяет одинаковую структуру light- и dark-токенов;
  • проверяет, что общие semantic-токены не зависят от цветовой схемы;
  • отклоняет циклические и неразрешённые ссылки, неподдерживаемые значения и непреобразованные CSS-единицы.

Весь результат сначала собирается, валидируется и форматируется в памяти. При ошибке сгенерированные файлы не изменяются. После успешной проверки генератор удаляет лишние JSON и записывает результат.

Команды

  • yarn tokens:generate - валидирует, генерирует и форматирует токены
  • yarn tokens:check - без изменений файлов проверяет их актуальность и каноническое форматирование
  • yarn tokens:typecheck - проверяет TypeScript-код генератора.

tokens:typecheck и tokens:check запускаются при сборке, в CI typecheck и pre-push hook.

Comment thread scripts/token-generator/tsconfig.json Outdated
Comment thread .prettierignore Outdated
@github-actions
github-actions Bot requested a review from ragozin-nikita July 30, 2026 11:09
@fabulous-unicorn
fabulous-unicorn force-pushed the feature/token-generator branch 6 times, most recently from 9bb982f to 0948a4e Compare July 30, 2026 18:11
@fabulous-unicorn
fabulous-unicorn force-pushed the feature/token-generator branch from 0948a4e to 2f891ed Compare July 30, 2026 18:37
Comment thread scripts/token-generator/core/normalization.ts
Comment thread scripts/token-generator/core/normalization.ts
Comment thread scripts/token-generator/core/validation.ts
Comment thread scripts/token-generator/io.ts Outdated
@github-actions
github-actions Bot requested a review from ragozin-nikita July 31, 2026 10:06
@fabulous-unicorn
fabulous-unicorn force-pushed the feature/token-generator branch from c51cf27 to 5340e84 Compare July 31, 2026 10:13
ragozin-nikita
ragozin-nikita previously approved these changes Jul 31, 2026
@fabulous-unicorn
fabulous-unicorn force-pushed the feature/token-generator branch from 04093ec to 988f299 Compare July 31, 2026 12:46
@fabulous-unicorn
fabulous-unicorn changed the base branch from main to feature/release_v3 July 31, 2026 13:28
@sashansk3

Copy link
Copy Markdown

По результатам обсуждения:

  • Изменить семантику цветов. Поднять на уровень выше
  • Обсудить необходимость отрицательных отступов с дизайнерами
  • Выделить константы анимаций в экспоритируемый класс Easing из дизайн системы, который будет применять toEasing автоматически
  • Выделить константы времени в экспортируемый класс Timings
  • Выделить неизменяемые части dimension, effects из объекта темы
  • Исправить генерацию токенов none: "none". Заместо "none" использовать undefined

Comment thread package.json Outdated
@fabulous-unicorn

Copy link
Copy Markdown
Collaborator Author

Изменить семантику цветов. Поднять на уровень выше

разделю на три файла, но структуру все же менять не буду

Обсудить необходимость отрицательных отступов с дизайнерами

👌

Выделить константы анимаций в экспоритируемый класс Easing из дизайн системы, который будет применять toEasing автоматически
Выделить константы времени в экспортируемый класс Timings

может лучше оставить экспорт констант (могу удалить адаптер), а сделать доработку по необходимости, тогда когда уже увижу в использовании?
структуру менять не буду, но на вид адаптеров и использование хотелось бы чуть подробнее позже посмотреть

Выделить неизменяемые части dimension, effects из объекта темы

то же что и в самом первом пуункте

Исправить генерацию токенов none: "none". Заместо "none" использовать undefined

undefined - не получиться поставить, я там JSON.stringify использую
сломать это ничего не сломает, максимум будет просто мертвым кодом висеть

@fabulous-unicorn
fabulous-unicorn merged commit 3db267c into feature/release_v3 Aug 4, 2026
6 checks passed
@fabulous-unicorn
fabulous-unicorn deleted the feature/token-generator branch August 4, 2026 10:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants