При работе с дизайн-системой следует руководствоваться в первую очередь:
Рекомендации из этого документа являются дополнительными и могут быть изменены в пользу официальных источников, если не оговорено обратное.
Figma является единственным источником правды для дизайн-токенов. Все изменения должны начинаться здесь и затем распространяться в код.
Для отслеживания версий в Figma доступны следующие методы:
Опции автоматизации:
Все зарегистрированные токены автоматически отображаются в Storybook для удобства разработки:
Storybook служит дополнительным инструментом верификации того, что токены корректно зарегистрированы в системе.
В проекте используется три уровня дизайн-токенов:
// 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;
}
// 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)
}
};
/* 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;
}
# .npmrc
@teez:registry=https://npm.pkg.github.com
# Установка пакета
npm install @teez/design-tokens
// Импорт токенов
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
}
}));
/* Импорт переменных */
@import '@teez/design-tokens/css/variables.css';
/* Использование в стилях */
.button {
color: var(--teez-primary);
margin: var(--mantine-spacing-md);
}
@teez/design-tokens/
├── src/
│ ├── tokens/ # Токены в TypeScript
│ │ ├── colors.ts # Цветовые токены
│ │ ├── spacing.ts # Отступы
│ │ └── index.ts # Общий экспорт
│ ├── css/ # CSS переменные
│ │ └── variables.css
│ └── theme/ # Конфигурации тем
│ └── mantine.ts # Для Mantine
└── package.json
--tzbb-* - краткий вариант--teezbb-* - полный вариант--tzbb-color-primary--tzbc-* - краткий вариант--teezbc-* - полный вариант--tzbc-color-primary--tzin-* - краткий вариант--teezin-* - полный вариант--tzin-color-primarytzbb,
tzbc, tzin) для уменьшения объема
кода
tz-*