4.61.3 • Published 4 months ago

@vkontakte/vkui-tokens v4.61.3

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

Tests Npm GitHub Repo stars

Интерактивная документация

Этот репозиторий содержит токены единой дизайн-системы VKUI и их значения для тем оформления различных проектов.

Темы собираются в следующие форматы: css, scss, less, pcss, styl, js, json.

Для описания интерфейсов тем и значений переменных используется TypeScript.

Содержание

Актуальный changelog находится на странице релизов в GitHub!

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

Устанавливаем npm-пакет @vkontakte/vkui-tokens:

npm i --save @vkontakte/vkui-tokens@latest

Использование CSS-переменных темы напрямую из пакета

Подключение темы на страницу

В любом CSS-файле подключаем файл темы со значениями переменных:

@import '@vkontakte/vkui-tokens/themes/vkBase/cssVars/declarations/index.css';

Использование переменных в вёрстке

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

.class:hover {
  background-color: var(--vkui--color_background--hover);
}

Использование CSS-переменных через объект в JavaScript (TypeScript)

import baseTheme from '@vkontakte/vkui-tokens/themes/vkBase/cssVars/theme';

// Собствено имя CSS-переменной (название токена)
console.log(baseTheme.colorBackground.hover.name); // --vkui--color_background--hover;
// Сниппет для использования CSS-переменной
console.log(baseTheme.colorBackground.hover.value); // var(--vkui--color_background--hover, #F5F5F7)

// Динамически (с учётом возможных переопределений)
// узнаём, чему равно значение переменной внутри myElement:
getComputedStyle(myElement).getPropertyValue(baseTheme.colorBackground.hover.name);

Принудительное использование токенов определённого размера

Чтобы принудительно включить тот или иной вид темы у конкретного поддерева элементов, нужно воспользоваться классами .vkui--force-${auto | regular | compact | large | largeX ...}. Смотри демо работы адаптивных переменных и спец. классов.

Также можно просто использовать переменную конкретного брейкпоинта (ex. --vkui--sizefield_height--**_compact**), они все тоже попадают в :root)

Использование базовой темы напрямую из пакета

js/ts/json

Импортируем необходимую тему в файле и используем:

import baseTheme from '@vkontakte/vkui-tokens/themes/vkBase';

// do whatever you want with baseTheme

Используем в scss/styl/less root темы из пакета

Импортируем файл с необходимой темой и используем переменные от туда (снизу синтаксис SCSS)

@import '~@vkontakte/vkui-tokens/themes/vkBase/index';

.myAwesomeClass {
  background-color: $color-bg;
}

.myAwesomeClass:hover {
  background-color: $color-bg--hover;
}

Используем pcss формат темы из пакета

  1. Заходим в файл, где хотим использовать тему, и импортируем её:

    @import '@vkontakte/vkui-tokens/themes/vkBase';
  2. Заходим в файл темы, смотрим какие там есть переменные и используем их, например:

    width: var(--size-content-block-width);
  3. Просто так ничего не заработает, нужно поставить postcss:

    npm i --save-dev postcss

    Для запуска у postcss есть командная строка, которую тоже надо установить:

    npm i --save-dev postcss-cli
  4. Создаем конфиг postcss. Для этого создаем файл postcss.config.js (можно в любом месте проекта, но лучше в корне) и пишем в него необходимые плагины:

    const postcssPresetEnv = require('postcss-preset-env');
    
    module.exports = {
      plugins: [
        require('postcss-import'),
        require('precss'),
        require('postcss-css-variables'),
        require('postcss-custom-media'),
        require('postcss-media-minmax'),
        require('postcss-extend-rule'),
        postcssPresetEnv({
          stage: 0,
        }),
        require('postcss-color-mix'),
        require('cssnano'),
      ],
    };

    Возможно, вам не понадобятся все эти плагины, поэтому лучше почитать, что делает каждый из них (https://www.postcss.parts/). Нужно посмотреть файл вашей темы и ваш css (scss и др.), чтобы понять, что вам необходимо.

  5. Устанавливаем все необходимые плагины, которые написали в конфиге, например:

    npm i --save-dev postcss-import
  6. Настраиваем сборку postcss.

    Сборка производится командой postcss через командную строку с необходимым параметрами. Про них подробнее тут https://github.com/postcss/postcss-cli

    Пример команды:

    postcss src/main.css -c ./ --dir public

    Такая команда прогонит файл src/main.css с помощью конфига из текущей папки и положит результат в папку public.

Инструменты

Локальная сборка своих тем инструментами библиотеки

Библиотека предоставляет интерфейсы и темы, от которых можно наследоваться, и набор функций, которые позволяют собрать собственную тему в нужном формате.

Сборка темы подразумевает раскрытие наследования, генерацию цветов состояний (hover, active), округление и "пикселизация" значений и т.д.

Предварительная настройка

Инструменты адаптированы для запуска в Node-среде, и не подходят для генерации темы в рантайме (в браузерной среде). Вам необходимо установить следующие пакеты для корректной работы скриптов генерации:

npm i --save-dev color common-tags css.escape

Наследование от существующей темы

Например, возьмем базовые темы (светлую и темную) и добавим к ним новый токен и переопределим один существующий. Для этого нам нужно исполнить следующий скрипт:

import type { ThemeDescription } from '@vkontakte/vkui-tokens/interfaces/general';
import type { Adaptive } from '@vkontakte/vkui-tokens/interfaces/general/tools';
import {
  lightTheme as baseTheme,
  darkTheme,
} from '@vkontakte/vkui-tokens/themeDescriptions/base/vk.js';
import { expandAll } from '@vkontakte/vkui-tokens/build/expandTheme';
import { compileStyles } from '@vkontakte/vkui-tokens/build/compilers/styles/compileStyles';

interface MyNewAwesomeThemeDescription extends ThemeDescription {
  myNewAwesomeToken: Adaptive<number>;
}

const myNewAwesomeTheme: MyNewAwesomeThemeDescription = {
  ...baseTheme,
  // Название темы
  themeName: 'myAwesomeTheme',
  // Базовая часть названия темы (используется для генерации локального селектора, например: .vkui--myAwesomeTheme--light)
  themeNameBase: 'myAwesomeTheme',
  // Тема, от которой наследуются переменные, носит информационный характер
  themeInheritsFrom: 'vkBase',
  // Новый адаптивный токен
  myNewAwesomeToken: {
    regular: 20,
    compact: 12,
  },
  colors: {
    // Сохраняем остальные значения из темы
    ...baseTheme.colors,
    // Переопределяем необходимую переменную
    colorTextAccentThemed: '#ff0000',
  },
};

const myNewAwesomeThemeDark: MyNewAwesomeThemeDescription = {
  ...myNewAwesomeTheme,
  ...darkTheme,
  themeName: 'myAwesomeThemeDark',
  themeNameBase: 'myAwesomeTheme',
  themeInheritsFrom: 'vkBaseDark',
  colors: {
    ...darkTheme.colors,
    colorTextAccentThemed: '#00ff00',
  },
};

// Получаем разные типы тем на основе описания
const { theme, pixelifyTheme, cssVarsTheme } = expandAll(myNewAwesomeTheme);
const { pixelifyTheme: pixelifyThemeDark } = expandAll(myNewAwesomeThemeDark);

// Для использования, например, в вебе вам подойдет компиляция "пикселяризованной" темы в формате '.css':
const cssString = compileStyles('css', pixelifyTheme);
const cssStringDark = compileStyles('css', pixelifyThemeDark);

// Полученные CSS-строки со всеми переменными тем можно вставить в DOM или сохранить в файл

Roadmap

  • Добавить более умную генерацию active, hover состояний цвета. При генерации нужно учитывать тёмный и светлый вариант тем, а также сам цвет, для которого генерируется состояние. (решаем проблему, что цвет наведения, сгенерированный от синего, плохо виден на большинстве мониторов).
  • Генерация цветов по заранее определённой палитре.
  • Текстовое описание семантики каждого токена.
  • Более подробная документация.
  • Сайт с примерами и описанием.

Полезные ссылки

  1. Доклад про дизайн-системы на фронтенде: там рассказывается, зачем нужны дизайн-токены, причём тут UI-kit и как делать темизацию.
  2. Серия видеороликов на youtube, где показано использование этой библиотеки (но со старым названием, не пугайтесь), как ядра дизайн-системы на практике: первый, второй, третий
  3. Opensource библиотека компонентов (UI-kit) VKUI, которая использует токены.
  4. Сайт дизайн-система Paradigm, из которой выросла эта библиотека. Там можно найти дизайнерские принципы и идеи, которые стали основой этого репозитория.
4.61.3

4 months ago

4.61.2

4 months ago

4.61.1

5 months ago

4.61.0

5 months ago

4.60.0

5 months ago

4.59.0

7 months ago

4.58.1

7 months ago

4.58.0

7 months ago

4.57.0

7 months ago

4.56.3

8 months ago

4.56.2

8 months ago

4.56.1

8 months ago

4.56.0

8 months ago

4.55.0

9 months ago

4.54.1-dev-3ef202.0

10 months ago

4.53.2-dev-f0a2d3.0

11 months ago

4.53.2-dev-ac0b03.0

11 months ago

4.54.0

10 months ago

4.53.2

11 months ago

4.53.3

11 months ago

4.53.1

11 months ago

4.53.0

11 months ago

4.52.0

11 months ago

4.50.1-dev-d3fb91.0

12 months ago

4.50.1-dev-b01055.0

12 months ago

4.51.0

12 months ago

4.50.1-dev-6f67f8.0

12 months ago

4.50.1-dev-ec757f.0

12 months ago

4.50.0

12 months ago

4.49.1-dev-0ddce8.0

12 months ago

4.49.1-dev-84b93a.0

12 months ago

4.49.1-dev-c94f02.0

12 months ago

4.49.1-dev-2c96bd.0

12 months ago

4.49.0

1 year ago

4.48.0

1 year ago

4.47.0

1 year ago

4.46.0

1 year ago

4.45.0

1 year ago

4.44.0

1 year ago

4.43.1

1 year ago

4.43.0

1 year ago

4.42.0

1 year ago

4.41.4

2 years ago

4.37.0

2 years ago

4.40.0

2 years ago

4.36.0

2 years ago

4.39.1

2 years ago

4.39.0

2 years ago

4.38.2

2 years ago

4.38.1

2 years ago

4.41.2

2 years ago

4.41.1

2 years ago

4.41.0

2 years ago

4.41.3

2 years ago

4.35.1

2 years ago

4.35.0

2 years ago

4.33.1

2 years ago

4.33.0

2 years ago

4.29.2

2 years ago

4.29.3

2 years ago

4.29.4

2 years ago

4.32.0

2 years ago

4.32.1

2 years ago

4.31.0

2 years ago

4.30.1

2 years ago

4.30.0

2 years ago

4.34.1

2 years ago

4.34.0

2 years ago

4.29.1

2 years ago

4.29.0

2 years ago

4.28.0

2 years ago

4.25.0

3 years ago

4.21.0

3 years ago

4.26.0

3 years ago

4.24.0

3 years ago

4.24.1

3 years ago

4.25.1

3 years ago

4.25.2

3 years ago

4.23.0

3 years ago

4.22.0

3 years ago

4.27.0

3 years ago

4.5.4

3 years ago

4.20.2

3 years ago

4.20.0

3 years ago

4.20.1

3 years ago

4.18.1

3 years ago

4.14.3

3 years ago

4.18.0

3 years ago

4.5.3

3 years ago

4.17.0

3 years ago

4.17.1

3 years ago

4.16.0

3 years ago

4.19.0

3 years ago

4.19.1

3 years ago

4.15.0

3 years ago

4.14.1

3 years ago

4.14.2

3 years ago

4.14.0

3 years ago

4.13.0

3 years ago

4.13.1

3 years ago

4.12.0

3 years ago

4.12.1

3 years ago

4.12.2

3 years ago

4.9.0

3 years ago

4.9.1

3 years ago

4.10.1

3 years ago

4.10.0

3 years ago

4.8.0

3 years ago

4.7.0

3 years ago

4.11.0

3 years ago

4.6.0

3 years ago

4.5.2

3 years ago

4.4.0

3 years ago

4.3.1

3 years ago

4.5.0

3 years ago

4.5.1

3 years ago

4.0.0-274008.0

3 years ago

4.0.0-rc.80

3 years ago

4.0.0

3 years ago

4.2.0

3 years ago

4.0.0-rc.74

4 years ago

4.0.0-rc.76

3 years ago

4.0.0-rc.75

4 years ago

4.0.0-rc.78

3 years ago

4.0.0-rc.77

3 years ago

4.0.0-rc.79

3 years ago

4.1.0

3 years ago

4.3.0

3 years ago

4.0.0-rc.64-2

4 years ago

4.0.0-rc.64-1

4 years ago

4.0.0-rc.64-3

4 years ago

4.0.0-rc.73

4 years ago

4.0.0-rc.70

4 years ago

4.0.0-rc.72

4 years ago

4.0.0-rc.71

4 years ago

4.0.0-rc.67

4 years ago

4.0.0-rc.69

4 years ago

4.0.0-rc.68

4 years ago

4.0.0-rc.64-0

4 years ago

4.0.0-rc.63

4 years ago

4.0.0-rc.62

4 years ago

4.0.0-rc.65

4 years ago

4.0.0-rc.64

4 years ago

4.0.0-rc.66

4 years ago

4.0.0-rc.59

4 years ago

4.0.0-rc.55-0

4 years ago

4.0.0-rc.61

4 years ago

4.0.0-rc.60

4 years ago

4.0.0-rc.58

4 years ago

4.0.0-rc.57

4 years ago

4.0.0-rc.56

4 years ago

4.0.0-rc.55

4 years ago

4.0.0-rc.52

4 years ago

4.0.0-rc.54

4 years ago

4.0.0-rc.53

4 years ago

4.0.0-rc.51

4 years ago

4.0.0-rc.50

4 years ago

4.0.0-rc.49

4 years ago

4.0.0-rc.48

4 years ago

4.0.0-rc.47

4 years ago

4.0.0-rc.46

4 years ago

4.0.0-rc.45

4 years ago

4.0.0-rc.44

4 years ago

4.0.0-rc.43

4 years ago

4.0.0-rc.42

4 years ago

4.0.0-rc.38

4 years ago

4.0.0-rc.37

4 years ago

4.0.0-rc.39

4 years ago

4.0.0-rc.34

4 years ago

4.0.0-rc.36

4 years ago

4.0.0-rc.35

4 years ago

4.0.0-rc.41

4 years ago

4.0.0-rc.40

4 years ago

4.0.0-rc.32

4 years ago

4.0.0-rc.31

4 years ago

4.0.0-rc.33

4 years ago

4.0.0-rc.30

4 years ago

4.0.0-rc.27

4 years ago

4.0.0-rc.26

4 years ago

4.0.0-rc.29

4 years ago

4.0.0-rc.28

4 years ago

4.0.0-rc.25

4 years ago

4.0.0-rc.21

4 years ago

4.0.0-rc.20

4 years ago

4.0.0-rc.16

4 years ago

4.0.0-rc.15

4 years ago

4.0.0-rc.18

4 years ago

4.0.0-rc.17

4 years ago

4.0.0-rc.23

4 years ago

4.0.0-rc.22

4 years ago

4.0.0-rc.14

4 years ago

4.0.0-rc.24

4 years ago

4.0.0-rc.13

4 years ago

4.0.0-rc.19

4 years ago

4.0.0-rc.10

4 years ago

4.0.0-rc.7

4 years ago

4.0.0-rc.9

4 years ago

4.0.0-rc.8

4 years ago

4.0.0-rc.12

4 years ago

4.0.0-rc.11

4 years ago

4.0.0-rc.6

4 years ago

4.0.0-rc.5

4 years ago