-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1085 from VKCOM/next
4.55.0
- Loading branch information
Showing
34 changed files
with
5,140 additions
and
1,665 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,211 @@ | ||
# Хелпер-функции для токенов | ||
Значения токенов бывают разные. Большинство токенов можно выразить либо числом (размеры), либо строкой (цвета, шрифты и прочее). | ||
|
||
Но иногда для правильной записи значений базовых типов недостаточно. Бывавет так, что в значении токена нужно сослаться | ||
на другой токен, или сгенерировать значение токена по набору правил. | ||
|
||
Для этих целей в пакете `@vkontakte/vkui-tokens` предусмотрены **функции-хелперы**. Они выполняются на этапе | ||
сборки темы и позволяют управлять тем, какие значения попадут в итоговые файлы. | ||
|
||
| ||
|
||
## `alias` | ||
Функция выполняет подстановку значения другого токена. | ||
|
||
Будьте осторожны с указанием токенов, которые сами являются ссылками. | ||
Неправильно указанный токен может привезти к переполнению стека и крешу сборки! | ||
|
||
### Интерфейс | ||
```typescript | ||
function alias<T extends ThemeDescription>(token: string): TokenFunction<T>; | ||
``` | ||
|
||
### Параметры | ||
* **token** — Имя токена. Можно использовать токены из текущей темы либо из всех тем, от которой наследуется текущая. | ||
|
||
### Пример | ||
Исходный файл темы: | ||
|
||
```typescript | ||
import { ParadigmThemeDescription } from '@/interfaces/namespaces/paradigm'; | ||
import { lightTheme } from '@/themeDescriptions/base/paradigm'; | ||
import { alias } from '@/build/helpers/tokenHelpers'; | ||
|
||
export const myCustomTheme: ParadigmThemeDescription = { | ||
...lightTheme, | ||
sizeArrow: alias('sizeArrowPromo'), | ||
sizeArrowPromo: { | ||
regular: 8, | ||
}, | ||
}; | ||
``` | ||
|
||
Итоговый файл с темой: | ||
|
||
```css | ||
:root { | ||
/* ... */ | ||
--vkui--size_arrow--regular: 8px; | ||
--vkui--size_arrow_promo--regular: 8px; | ||
/* ... */ | ||
} | ||
``` | ||
|
||
| ||
|
||
## `namedAlias` | ||
Функция создаёт именованый алиас — runtime-ссылку на другой токен темы выполняет подстановку | ||
fallback-значения этого токена. | ||
|
||
Будьте осторожны с указанием токенов, которые сами являются ссылками. | ||
Неправильно указанный токен может привезти к переполнению стека и крешу сборки! | ||
|
||
### Интерфейс | ||
```typescript | ||
function namedAlias<T extends ThemeDescription>(token: string): NamedTokenFunction<T> | ||
``` | ||
|
||
### Параметры | ||
* **token** — Имя токена. Можно использовать токены из текущей темы либо из всех тем, от которой наследуется текущая. | ||
|
||
### Пример | ||
Исходный файл темы: | ||
|
||
```typescript | ||
import { ParadigmThemeDescription } from '@/interfaces/namespaces/paradigm'; | ||
import { lightTheme } from '@/themeDescriptions/base/paradigm'; | ||
import { namedAlias } from '@/build/helpers/tokenHelpers'; | ||
export const myCustomTheme: ParadigmThemeDescription = { | ||
...lightTheme, | ||
sizeArrow: namedAlias('sizeArrowPromo'), | ||
sizeArrowPromo: { | ||
regular: 8, | ||
}, | ||
}; | ||
``` | ||
|
||
Итоговый файл с темой: | ||
|
||
```css | ||
:root { | ||
/* ... */ | ||
--vkui--size_arrow--regular: var(--vkui--size_arrow_promo--regular, 8px); | ||
--vkui--size_arrow_promo--regular: 8px; | ||
/* ... */ | ||
} | ||
``` | ||
|
||
| ||
|
||
## `staticRef` | ||
Функция создаёт runtime-ссылку на другой токен темы. | ||
|
||
### Интерфейс | ||
```typescript | ||
function staticRef<T>(value: Token<T, any>): T; | ||
``` | ||
|
||
### Параметры | ||
* **token** — Имя токена. Можно использовать любые токены, которые находятся в контексте страницы. | ||
|
||
### Пример | ||
Исходный файл темы: | ||
|
||
```typescript | ||
import { ParadigmThemeDescription } from '@/interfaces/namespaces/paradigm'; | ||
import { lightTheme } from '@/themeDescriptions/base/paradigm'; | ||
import { staticRef } from '@/build/helpers/tokenHelpers'; | ||
export const myCustomTheme: ParadigmThemeDescription = { | ||
...lightTheme, | ||
sizeArrow: staticRef('sizeArrowPromo'), | ||
sizeArrowPromo: { | ||
regular: 8, | ||
}, | ||
}; | ||
``` | ||
|
||
Итоговый файл с темой: | ||
|
||
```css | ||
:root { | ||
/* ... */ | ||
--vkui--size_arrow--regular: var(--vkui--size_arrow_promo--regular); | ||
--vkui--size_arrow_promo--regular: 8px; | ||
/* ... */ | ||
} | ||
``` | ||
|
||
| ||
|
||
## `gradient` | ||
Функция создаёт градиент из одного или нескольких цветов. | ||
|
||
Если передан один цвет, система сборки сгенериурет градиент из указанного цвета в прозрачный. При этом | ||
градиент будет построен по точкам, указанным в файле `opacityMap.json`. | ||
|
||
Если передано два и более цветов, будет сгенерирован градиент между этими цветами с равномерной расстановкой точек. | ||
|
||
### Интерфейс | ||
```typescript | ||
export function gradient<T extends ThemeDescription> ( | ||
...stops: (Property.Color | NamedTokenFunction<T>)[] | ||
): TokenFunction<T>; | ||
``` | ||
|
||
### Параметры | ||
* **stops** — Список точек градиента. Можно использовать цвета в строковом формате (rgba, hex) и именованые | ||
алиасы, созданные с помощью хелпера `namedAlias`. | ||
|
||
### Пример | ||
Исходный файл темы: | ||
|
||
```typescript | ||
import { ParadigmThemeDescription } from '@/interfaces/namespaces/paradigm'; | ||
import { lightTheme } from '@/themeDescriptions/base/paradigm'; | ||
import { gradient, namedAlias } from '@/build/helpers/tokenHelpers'; | ||
export const myCustomTheme: ParadigmThemeDescription = { | ||
...lightTheme, | ||
colorIconPrimary: 'rgba(64, 64, 64, 1)', | ||
gradient: gradient(namedAlias('colorIconPrimary'), 'rgba(32, 32, 32, 1)'), | ||
}; | ||
``` | ||
|
||
Итоговый файл с темой: | ||
|
||
```css | ||
:root { | ||
/* ... */ | ||
--vkui--color_icon_primary: rgba(64, 64, 64, 1); | ||
--vkui--gradient: var(--vkui--color_icon_primary, rgba(64, 64, 64, 1)) 0%, rgba(32, 32, 32, 1) 100%; | ||
/* ... */ | ||
} | ||
``` | ||
|
||
```json | ||
{ | ||
"gradient": { | ||
"gradient": [ | ||
{ | ||
"color": "rgba(64, 64, 64, 1)", | ||
"token": "colorIconPrimary", | ||
"step": 0, | ||
"alpha": 1 | ||
}, | ||
{ | ||
"color": "rgba(32, 32, 32, 1)", | ||
"token": "colorIconPrimary", | ||
"step": 1, | ||
"alpha": 1 | ||
} | ||
] | ||
}, | ||
"other": { | ||
"colorIconPrimary": { | ||
"normal": "rgba(64, 64, 64, 1)" | ||
} | ||
} | ||
} | ||
``` |
48 changes: 48 additions & 0 deletions
48
docs/src/components/layouts/shared/AsideMenu/AsideMenu.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
import { Card, Spacing, Title } from '@vkontakte/vkui'; | ||
import * as React from 'react'; | ||
import { Link } from 'react-router-dom'; | ||
|
||
export interface AsideMenuItem { | ||
slug?: string; | ||
title: string; | ||
} | ||
|
||
export interface AsideMenuProps { | ||
items?: AsideMenuItem[]; | ||
} | ||
|
||
const defaultItems: AsideMenuItem[] = []; | ||
|
||
export function AsideMenu(props: AsideMenuProps) { | ||
const items = props.items ?? defaultItems; | ||
|
||
return ( | ||
<aside className="aside-menu"> | ||
<Card mode="shadow" className="aside-menu_card"> | ||
<Title level="2" className="aside-menu_title">Разделы</Title> | ||
<Spacing size={8}/> | ||
|
||
{items.map((item) => { | ||
if (item.slug) { | ||
return ( | ||
<div className="aside-menu-item" key={item.title}> | ||
<Link to={`/articles/${item.slug}`}>{item.title}</Link> | ||
</div> | ||
); | ||
} else { | ||
return ( | ||
<React.Fragment key={item.title}> | ||
<Spacing size={20}/> | ||
<Title level="3">{item.title}</Title> | ||
<Spacing size={8}/> | ||
</React.Fragment> | ||
) | ||
} | ||
})} | ||
|
||
<Spacing size={32}/> | ||
<Link to="/">← К таблице токенов</Link> | ||
</Card> | ||
</aside> | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.