Skip to content

Commit 886e33e

Browse files
committed
feat(visual): added guide for new components with css vars only, reverted changes for docs
1 parent 3c094d5 commit 886e33e

File tree

9 files changed

+75
-22
lines changed

9 files changed

+75
-22
lines changed

angular.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,7 @@
7171
"styles": [
7272
{
7373
"input": "apps/docs/src/main.scss"
74-
},
75-
"apps/docs/src/styles/koobiq/default-theme/css-tokens-light.css",
76-
"apps/docs/src/styles/koobiq/default-theme/css-tokens-dark.css"
77-
74+
}
7875
],
7976
"scripts": [],
8077
"vendorChunk": true,

apps/docs/scripts/build-tokens.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ function buildTokens(themeConfig) {
4444
delete extendedPlatform.platforms.figma;
4545

4646
extendedPlatform.platforms.css.files[0].options.selector = `.${platform.skin}`;
47-
extendedPlatform.platforms.css.files[1].options.selector = '.theme-light';
48-
extendedPlatform.platforms.css.files[2].options.selector = '.theme-dark';
4947

5048
const StyleDictionaryExtended = StyleDictionary.extend(extendedPlatform);
5149
delete StyleDictionaryExtended.platforms.figma;

apps/docs/src/styles/koobiq/default-theme/css-tokens-dark.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Do not edit directly
33
*/
44

5-
.theme-dark {
5+
.kbq-dark {
66
--kbq-theme-default: hsla(216, 100%, 50%, 100%);
77
--kbq-success-default: hsla(104, 64%, 50%, 100%);
88
--kbq-warning-default: hsla(38, 100%, 35%, 100%);

apps/docs/src/styles/koobiq/default-theme/css-tokens-light.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Do not edit directly
33
*/
44

5-
.theme-light {
5+
.kbq-light {
66
--kbq-theme-default: hsla(216, 100%, 50%, 100%);
77
--kbq-success-default: hsla(104, 64%, 50%, 100%);
88
--kbq-warning-default: hsla(38, 100%, 35%, 100%);

docs/guides/theming-2.0.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
### Что нового?
2+
3+
Теперь использование компонентов стало проще! Мы движемся к полной изоляции компонентов, что позволит вам легко подключать и использовать их. Кроме того, мы убрали необходимость пробрасывать токены для задания цветов компонентам.
4+
5+
### Как использовать?
6+
7+
1. Импортируйте компонент
8+
2. Просто добавьте класс `kbq-light` к элементу <body> вашего HTML-документа для использования светлой темы и `kbq-dark` для темной темы.
9+
10+
Для переключения тем используйте [ThemeService.](https://github.com/koobiq/angular-components/blob/main/packages/components/core/services/theme.service.ts#L24)
11+
12+
### Доступные селекторы для темной и светлой темы
13+
14+
Вот таблица доступных селекторов для темной и светлой тем:
15+
16+
| Тема | Селекторы |
17+
| ------- | ------------------------------------------ |
18+
| Темная | .kbq-dark, .theme-dark, .kbq-theme-dark |
19+
| Светлая | .kbq-light, .theme-light, .kbq-theme-light |
20+
21+
Мы рекомендуем использовать те селекторы, которые указаны в сервисе `ThemeService` (`kbq-theme-dark` для темной и `kbq-theme-light` для светлой).
22+
23+
### Как задать кастомные значения компоненту дизайн-системы?
24+
25+
Изменить цвета, размеры и шрифты можно задав соответствующие значения css-переменным компонента.
26+
Например:
27+
28+
```css
29+
.kbq-theme-dark {
30+
--kbq-alert-default-contrast-container-background: custom-color;
31+
--kbq-alert-default-contrast-container-title: custom-color;
32+
}
33+
```
34+
35+
### Откуда теперь брать значения дизайн-токенов для компонентов?
36+
37+
Все актуальные значения для компонентов хранятся в репозитории [@koobiq/design-tokens](https://github.com/koobiq/design-tokens). В репозитории Angular-компонентов затем преобразуются в CSS-переменные.
38+
Хранение дизайн-токенов в отдельном репозитории позволяет переиспользовать их в других проектах. Сгенерированные на основе дизайн-токенов CSS-переменные позволяет более удобно использовать компоненты и ускоряют их разработку, в том числе проведение дизайн-ревью.
39+
40+
### Что планируется сделать дальше?
41+
42+
Мы планируем применить эти улучшения ко всем компонентам и использовать семантические значения для CSS-переменных компонентов, такие как `var(--kbq-size-m)` вместо `12px`.
43+
Это сделает код более читаемым и поддерживаемым.

packages/components-dev/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
<title>Dev Example</title>
2323
</head>
24-
<body class="kbq-app-background">
24+
<body class="kbq-app-background kbq-light">
2525
<app />
2626
</body>
2727
</html>

packages/components/alert/alert-tokens.scss

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
:root {
1+
.kbq-alert {
22
--kbq-alert-size-normal-container-border-radius: 12px;
33
--kbq-alert-size-normal-container-padding-top: 0;
44
--kbq-alert-size-normal-container-padding-right: 8px;
@@ -63,6 +63,9 @@
6363
sans-serif;
6464
--kbq-alert-font-text-text-transform: null;
6565
--kbq-alert-font-text-font-feature-settings: 'calt', 'kern', 'liga', 'ss01', 'ss04';
66+
}
67+
68+
:where(.kbq-light, .theme-light, .kbq-theme-light) {
6669
--kbq-alert-default-contrast-container-background: hsla(229, 15%, 92%, 100%);
6770
--kbq-alert-default-contrast-container-title: hsla(229, 15%, 15%, 100%);
6871
--kbq-alert-default-contrast-container-text: hsla(229, 15%, 15%, 100%);
@@ -95,7 +98,7 @@
9598
--kbq-alert-colored-theme-container-text: hsla(229, 15%, 15%, 100%);
9699
}
97100

98-
.kbq-dark {
101+
:where(.kbq-dark, .theme-dark, .kbq-theme-dark) {
99102
--kbq-alert-default-contrast-container-background: hsla(229, 15%, 25%, 100%);
100103
--kbq-alert-default-contrast-container-title: hsla(229, 15%, 80%, 100%);
101104
--kbq-alert-default-contrast-container-text: hsla(229, 15%, 80%, 100%);

tools/cspell-locales/ru.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"инпуте",
4040
"кастомизируемых",
4141
"кастомное",
42+
"кастомные",
4243
"кликает",
4344
"контрол",
4445
"контролам",

tools/tokens/build-each-component.js

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,20 @@ const dictionaryMapper = (dictionary, outputReferences) => {
3030
return dictionary.allTokens.map(formatProperty).join('\n');
3131
};
3232

33+
const filterTokens = (dictionary, predicate) => {
34+
const filteredTokens = dictionary.allTokens.filter(predicate);
35+
return { ...dictionary, allTokens: filteredTokens, allProperties: filteredTokens };
36+
};
37+
3338
StyleDictionary.registerFormat({
3439
name: 'kbq-css/component',
3540
formatter: function ({ dictionary, options = {} }) {
36-
const { outputReferences, selector = ':root', darkThemeSelector = '.kbq-dark' } = options;
41+
const {
42+
outputReferences,
43+
component,
44+
lightThemeSelector = ':where(.kbq-light, .theme-light, .kbq-theme-light)',
45+
darkThemeSelector = ':where(.kbq-dark, .theme-dark, .kbq-theme-dark)'
46+
} = options;
3747

3848
const allTokens = applyCustomTransformations(dictionary);
3949

@@ -45,18 +55,16 @@ StyleDictionary.registerFormat({
4555
);
4656

4757
// formatting function expects dictionary as input, so here initialize a copy to work with different tokens
48-
const baseDictionary = { ...dictionary };
49-
const darkDictionary = { ...dictionary };
50-
51-
baseDictionary.allTokens = baseDictionary.allProperties = baseDictionary.allTokens.filter(
52-
(token) => token.attributes.light || token.attributes.type === 'size' || token.attributes.font
53-
);
54-
darkDictionary.allTokens = darkDictionary.allProperties = darkDictionary.allTokens.filter(
55-
(token) => token.attributes.dark
58+
const baseDictionary = filterTokens(
59+
dictionary,
60+
(token) => token.attributes.type === 'size' || token.attributes.font
5661
);
62+
const lightDictionary = filterTokens(dictionary, (token) => token.attributes.light);
63+
const darkDictionary = filterTokens(dictionary, (token) => token.attributes.dark);
5764

5865
return Object.entries({
59-
[selector]: baseDictionary,
66+
[`.kbq-${component}`]: baseDictionary,
67+
[lightThemeSelector]: lightDictionary,
6068
[darkThemeSelector]: darkDictionary
6169
})
6270
.map(([key, currentDictionary]) => {
@@ -81,7 +89,10 @@ const main = async () => {
8189
// give access to light/dark/palette tokens to resolve reference manually
8290
['light', 'dark', 'palette'].includes(token.attributes.category),
8391
format: 'kbq-css/component',
84-
prefix: 'kbq'
92+
prefix: 'kbq',
93+
options: {
94+
component
95+
}
8596
};
8697
});
8798

0 commit comments

Comments
 (0)