Руководство по дизайн-токенам

⚠️ Приоритет официальных источников

При работе с дизайн-системой следует руководствоваться в первую очередь:

Рекомендации из этого документа являются дополнительными и могут быть изменены в пользу официальных источников, если не оговорено обратное.

Обзорное видео

Лучшие практики из видео 📹

Организация в Figma

  • Отдельная страница для токенов
  • Четкая структура и группировка
  • Использование компонентов-витрин
  • Документирование назначения токенов

Именование и структура

  • Консистентные префиксы
  • Семантические имена
  • Логическая группировка
  • Масштабируемая система

Процесс разработки

  • Figma как источник правды
  • Автоматизация экспорта
  • Версионирование токенов
  • Визуальная валидация в Storybook

Памятка для дизайнера

⚠️ Основные токены Teez находятся в процессе переработки и стандартизации. Следите за обновлениями в репозитории дизайн-системы.

Figma как источник правды

Figma является единственным источником правды для дизайн-токенов. Все изменения должны начинаться здесь и затем распространяться в код.

Версионирование токенов TODO

  • Major версия (2.0.0): несовместимые изменения в токенах
  • Minor версия (1.1.0): новые токены
  • Patch версия (1.0.1): исправления значений

Версионирование в Figma TODO

Для отслеживания версий в Figma доступны следующие методы:

⚠️ Требуется провести опции для выбора предпочтительного способа версионирования из представленных вариантов
  • Tokens Studio for Figma (рекомендуется):
    • Встроенная поддержка версионирования
    • Управление версиями через JSON
    • Синхронизация с GitHub
    • Автоматическое отслеживание изменений
  • Figma Variables:
    • Создание переменной version в коллекции токенов
    • Обновление значения при изменениях
    • Указание типа изменения (major/minor/patch)
  • Page Title:
    • Версия в названии страницы токенов
    • Пример: "🎨 Design Tokens v2.13.5"
  • Description:
    • Информация о версии в описании страницы/файла
    • Changelog с историей изменений

Настройка Figma

  1. Создайте отдельную страницу "🎨 Design Tokens"
  2. Используйте Styles для определения токенов
  3. Следуйте конвенции именования:
    • Цвета: tz/color/[категория]/[название]
    • Отступы: tz/spacing/[размер]
    • Типографика: tz/typography/[стиль]

Трюки для эффективной работы в Figma

Интеграция с кодом TODO

Опции автоматизации:

  • Tokens Studio for Figma
    • Экспорт в JSON
    • Синхронизация через GitHub
    • Поддержка версионирования
  • Style Dictionary
    • Преобразование JSON в различные форматы
    • Генерация CSS/SCSS/TS
  • Figma Tokens
    • Прямая интеграция с кодом
    • Webhooks для автоматизации

Категории токенов и префиксы

Цвета

  • CSS префикс: --tz-color-*
    • --tz-color-primary
    • --tz-color-primary-light
    • --tz-color-primary-dark
  • Figma: tz/color/[категория]/[оттенок]
    • tz/color/green/500
    • tz/color/gray/300

Типографика

  • CSS префикс: --tz-type-*
    • --tz-type-size-sm
    • --tz-type-weight-bold
    • --tz-type-height-lg
  • Figma: tz/type/[категория]
    • tz/type/heading-1
    • tz/type/body-regular

Отступы

  • CSS префикс: --tz-space-*
    • --tz-space-xs
    • --tz-space-sm
    • --tz-space-md
  • Figma: tz/space/[размер]
    • tz/space/8
    • tz/space/16

Компоненты

  • CSS префикс: --tz-comp-*
    • --tz-comp-radius-sm
    • --tz-comp-shadow-lg
  • Figma: tz/component/[свойство]
    • tz/component/radius-8
    • tz/component/shadow-large

💡 Советы по масштабированию

  • Создавайте токены с учетом возможного расширения
  • Используйте математические прогрессии для размеров
  • Документируйте назначение каждого токена
  • Регулярно проводите ревью системы токенов
  • Создавайте компоненты-витрины для каждого обновления

Визуализация токенов в Storybook 📹

Все зарегистрированные токены автоматически отображаются в Storybook для удобства разработки:

  • Визуальное представление всех токенов
  • Индикация статуса регистрации в кодовой базе
  • Примеры использования в компонентах
  • Автоматическое обновление при изменении токенов TODO

Storybook служит дополнительным инструментом верификации того, что токены корректно зарегистрированы в системе.

Реализация в нашем проекте

Структура токенов

В проекте используется три уровня дизайн-токенов:

1. Пакет @teez/design-tokens (TODO)


// package.json
{
  "name": "@teez/design-tokens",
  "version": "1.0.0",
  "description": "Teez Design System Tokens",
  "repository": "https://github.com/teez/design-tokens.git",
  "publishConfig": {
    "registry": "https://npm.pkg.github.com"
  }
}

// src/tokens/colors.ts
export const colors = {
  primary: '#B4FF87',
  secondary: '#7281A1',
  gray: '#667085',
  black: '#2C3344'
} as const;

// src/css/variables.css
:root {
  --teez-primary: #B4FF87;
  --teez-secondary: #7281A1;
  --teez-gray: #667085;
  --teez-black: #2C3344;
}

2. Mantine Theme


// src/app/ui/mantine-theme.config.ts
const theme: MantineThemeOverride = {
    // Цветовые палитры
    colors: { 
        teezGray: ['#eff4fe', '#e3e6ed', ...],
        teezGreen: ['#e2ffd2', '#dbffc7', ...],
        secondaryColor: ['#7281A1', ...],
        neutral: ['#f4f6fb', ...]
    },
    // Брейкпоинты
    breakpoints: {
        xl: '1200px',
        lg: '1024px',
        md: '768px',
        sm: '576px',
        xs: '0px'
    },
    // Размеры шрифтов
    fontSizes: {
        xs: rem(12),
        sm: rem(13),
        md: rem(15),
        lg: rem(20),
        xl: rem(24)
    }
};

3. CSS Custom Properties


/* Mantine автоматически создает CSS-переменные */
:root {
    /* Цвета */
    --mantine-color-teezGreen-7: #B4FF87;
    --mantine-color-teezGray-8: #667085;
    
    /* Отступы */
    --mantine-spacing-xs: 8px;
    --mantine-spacing-sm: 12px;
    --mantine-spacing-md: 16px;
    
    /* Радиусы */
    --mantine-radius-sm: 6px;
    --mantine-radius-md: 12px;
}

Установка и использование (TODO)


# .npmrc
@teez:registry=https://npm.pkg.github.com

# Установка пакета
npm install @teez/design-tokens

Использование в TypeScript:


// Импорт токенов
import { colors } from '@teez/design-tokens/tokens';
import { mantineTheme } from '@teez/design-tokens/theme/mantine';

// Использование в компоненте
const useStyles = createStyles((theme) => ({
    button: {
        backgroundColor: theme.colors.teezGreen[7],
        padding: theme.spacing.md
    }
}));

Использование в CSS:


/* Импорт переменных */
@import '@teez/design-tokens/css/variables.css';

/* Использование в стилях */
.button {
    color: var(--teez-primary);
    margin: var(--mantine-spacing-md);
}

Структура пакета (TODO)


@teez/design-tokens/
├── src/
│   ├── tokens/          # Токены в TypeScript
│   │   ├── colors.ts    # Цветовые токены
│   │   ├── spacing.ts   # Отступы
│   │   └── index.ts     # Общий экспорт
│   ├── css/            # CSS переменные
│   │   └── variables.css
│   └── theme/          # Конфигурации тем
│       └── mantine.ts  # Для Mantine
└── package.json

Процесс разработки

Текущий процесс

  1. Токены определяются в mantine-theme.config.ts
  2. CSS-переменные используются через Mantine или напрямую
  3. Компоненты используют тему через createStyles или CSS Modules

Планируемый процесс (TODO)

  1. Токены определяются в @teez/design-tokens
  2. Изменения проходят через PR в репозитории дизайн-токенов
  3. Автоматическая публикация в GitHub Packages при релизе
  4. Обновление зависимости в основном проекте

Лучшие практики

  1. Используйте theme из Mantine для компонентов через createStyles или sx prop
  2. Для CSS Modules используйте CSS-переменные (--mantine-* или --teez-*)
  3. Следуйте конвенции именования Mantine для консистентности
  4. Добавляйте новые цвета в theme.colors для доступа через тему
  5. Используйте rem() хелпер для размеров в теме
  6. После внедрения пакета @teez/design-tokens, импортируйте токены из него

Инструменты

Префиксы для продуктов Teez

Варианты префиксов для разных продуктов

B2B
  • --tzbb-* - краткий вариант
  • --teezbb-* - полный вариант
  • Figma: tzbb/[категория]/[название]
  • Пример: --tzbb-color-primary
B2C
  • --tzbc-* - краткий вариант
  • --teezbc-* - полный вариант
  • Figma: tzbc/[категория]/[название]
  • Пример: --tzbc-color-primary
Inner
  • --tzin-* - краткий вариант
  • --teezin-* - полный вариант
  • Figma: tzin/[категория]/[название]
  • Пример: --tzin-color-primary
Рекомендации:
  • Используйте краткие префиксы (tzbb, tzbc, tzin) для уменьшения объема кода
  • Сохраняйте консистентность префиксов внутри одного продукта
  • Для общих компонентов используйте префикс tz-*
  • В Figma используйте те же префиксы для соответствия с кодом

Решение проблем

Полезные ресурсы

Внесение изменений

  1. Новые токены добавляйте в mantine-theme.config.ts
  2. CSS-переменные определяйте в глобальных стилях
  3. Обновляйте документацию при добавлении новых токенов
  4. Проверяйте консистентность с существующими компонентами