@itcase/ui-core 1.9.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/context/Notifications.interface.js +1 -0
- package/dist/cjs/context/Notifications.js +1 -0
- package/dist/cjs/context/UIContext.js +1 -0
- package/dist/cjs/context/UrlAssetPrefix.js +1 -0
- package/dist/cjs/context/index.js +1 -0
- package/dist/cjs/hoc/index.js +1 -0
- package/dist/cjs/hoc/urlWithAssetPrefix.js +1 -0
- package/dist/cjs/hooks/index.js +1 -0
- package/dist/cjs/hooks/useActiveClasses/index.js +1 -0
- package/dist/cjs/hooks/useActiveClasses/useActiveClasses.helpers.js +1 -0
- package/dist/cjs/hooks/useActiveClasses/useActiveClasses.interface.js +1 -0
- package/dist/cjs/hooks/useActiveClasses/useActiveClasses.js +1 -0
- package/dist/cjs/hooks/useAppearanceConfig/index.js +1 -0
- package/dist/cjs/hooks/useAppearanceConfig/useAppearanceConfig.js +1 -0
- package/dist/cjs/hooks/useDevicePropsGenerator/index.js +1 -0
- package/dist/cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.interface.js +1 -0
- package/dist/cjs/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +1 -0
- package/dist/cjs/hooks/useDeviceTargetClass.js +1 -0
- package/dist/cjs/hooks/useDropzoneFieldFiles.js +1 -0
- package/dist/cjs/hooks/useHoldProgress.js +1 -0
- package/dist/cjs/hooks/useMediaQueries/index.js +1 -0
- package/dist/cjs/hooks/useMediaQueries/useMediaQueries.js +1 -0
- package/dist/cjs/hooks/useStyles/index.js +1 -0
- package/dist/cjs/hooks/useStyles/styleAttributes.helpers.js +1 -0
- package/dist/cjs/hooks/useStyles/styleAttributes.interface.js +1 -0
- package/dist/cjs/hooks/useStyles/styleAttributes.js +1 -0
- package/dist/cjs/hooks/useStyles/useStyles.js +1 -0
- package/dist/cjs/hooks/useViewportFix.js +1 -0
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/mergeAppearanceKeys.js +1 -0
- package/dist/cjs/utils/setViewportProperty.js +1 -0
- package/dist/context/Notifications.interface.js +1 -0
- package/dist/context/Notifications.js +1 -0
- package/dist/context/UIContext.js +1 -0
- package/dist/context/UrlAssetPrefix.js +1 -0
- package/dist/context/index.js +1 -0
- package/dist/hoc/index.js +1 -0
- package/dist/hoc/urlWithAssetPrefix.js +1 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/useActiveClasses/index.js +1 -0
- package/dist/hooks/useActiveClasses/useActiveClasses.helpers.js +1 -0
- package/dist/hooks/useActiveClasses/useActiveClasses.interface.js +1 -0
- package/dist/hooks/useActiveClasses/useActiveClasses.js +1 -0
- package/dist/hooks/useAppearanceConfig/index.js +1 -0
- package/dist/hooks/useAppearanceConfig/useAppearanceConfig.js +1 -0
- package/dist/hooks/useDevicePropsGenerator/index.js +1 -0
- package/dist/hooks/useDevicePropsGenerator/useDevicePropsGenerator.interface.js +1 -0
- package/dist/hooks/useDevicePropsGenerator/useDevicePropsGenerator.js +1 -0
- package/dist/hooks/useDeviceTargetClass.js +1 -0
- package/dist/hooks/useDropzoneFieldFiles.js +1 -0
- package/dist/hooks/useHoldProgress.js +1 -0
- package/dist/hooks/useMediaQueries/index.js +1 -0
- package/dist/hooks/useMediaQueries/useMediaQueries.js +1 -0
- package/dist/hooks/useStyles/index.js +1 -0
- package/dist/hooks/useStyles/styleAttributes.helpers.js +1 -0
- package/dist/hooks/useStyles/styleAttributes.interface.js +1 -0
- package/dist/hooks/useStyles/styleAttributes.js +1 -0
- package/dist/hooks/useStyles/useStyles.js +1 -0
- package/dist/hooks/useViewportFix.js +1 -0
- package/dist/stories/useActiveClasses.mdx +134 -0
- package/dist/stories/useAppearanceConfig.mdx +83 -0
- package/dist/stories/useDevicePropsGenerator.mdx +202 -0
- package/dist/stories/useMediaQueries.mdx +80 -0
- package/dist/stories/useStyles.mdx +150 -0
- package/dist/types/context/Notifications.d.ts +21 -0
- package/dist/types/context/Notifications.interface.d.ts +47 -0
- package/dist/types/context/UIContext.d.ts +23 -0
- package/dist/types/context/UrlAssetPrefix.d.ts +12 -0
- package/dist/types/context/index.d.ts +4 -0
- package/dist/types/hoc/index.d.ts +2 -0
- package/dist/types/hoc/urlWithAssetPrefix.d.ts +28 -0
- package/dist/types/hooks/index.d.ts +9 -0
- package/dist/types/hooks/useActiveClasses/index.d.ts +2 -0
- package/dist/types/hooks/useActiveClasses/useActiveClasses.d.ts +3 -0
- package/dist/types/hooks/useActiveClasses/useActiveClasses.helpers.d.ts +5 -0
- package/dist/types/hooks/useActiveClasses/useActiveClasses.interface.d.ts +27 -0
- package/dist/types/hooks/useAppearanceConfig/index.d.ts +1 -0
- package/dist/types/hooks/useAppearanceConfig/useAppearanceConfig.d.ts +5 -0
- package/dist/types/hooks/useDevicePropsGenerator/index.d.ts +2 -0
- package/dist/types/hooks/useDevicePropsGenerator/useDevicePropsGenerator.d.ts +8 -0
- package/dist/types/hooks/useDevicePropsGenerator/useDevicePropsGenerator.interface.d.ts +12 -0
- package/dist/types/hooks/useDeviceTargetClass.d.ts +5 -0
- package/dist/types/hooks/useDropzoneFieldFiles.d.ts +14 -0
- package/dist/types/hooks/useHoldProgress.d.ts +17 -0
- package/dist/types/hooks/useMediaQueries/index.d.ts +1 -0
- package/dist/types/hooks/useMediaQueries/useMediaQueries.d.ts +7 -0
- package/dist/types/hooks/useStyles/index.d.ts +4 -0
- package/dist/types/hooks/useStyles/styleAttributes.d.ts +3 -0
- package/dist/types/hooks/useStyles/styleAttributes.helpers.d.ts +3 -0
- package/dist/types/hooks/useStyles/styleAttributes.interface.d.ts +147 -0
- package/dist/types/hooks/useStyles/useStyles.d.ts +4 -0
- package/dist/types/hooks/useViewportFix.d.ts +2 -0
- package/dist/types/types/index.d.ts +1 -0
- package/dist/types/types/utils.d.ts +43 -0
- package/dist/types/utils/index.d.ts +3 -0
- package/dist/types/utils/mergeAppearanceKeys.d.ts +7 -0
- package/dist/types/utils/setViewportProperty.d.ts +2 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/mergeAppearanceKeys.js +1 -0
- package/dist/utils/setViewportProperty.js +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { Meta } from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title="Hooks / useActiveClasses" />
|
|
4
|
+
|
|
5
|
+
# `useActiveClasses`
|
|
6
|
+
Генерирует CSS‑классы по правилам `CLASS_RULES` из `propsGenerator` с учетом состояний (`isActive`, `isDisabled`).
|
|
7
|
+
|
|
8
|
+
> ℹ️ Данный хук использует термины, о которых рассказывается в `useDevicePropsGenerator`, необходимо предварительно ознакомиться с ним
|
|
9
|
+
|
|
10
|
+
### Параметры
|
|
11
|
+
|
|
12
|
+
<table>
|
|
13
|
+
<thead>
|
|
14
|
+
<tr>
|
|
15
|
+
<th>Название</th>
|
|
16
|
+
<th>Обязательный</th>
|
|
17
|
+
<th>Тип</th>
|
|
18
|
+
<th>Значение</th>
|
|
19
|
+
<th>Описание</th>
|
|
20
|
+
</tr>
|
|
21
|
+
</thead>
|
|
22
|
+
<tbody>
|
|
23
|
+
<tr>
|
|
24
|
+
<td>isDisabled</td>
|
|
25
|
+
<td>Нет</td>
|
|
26
|
+
<td>`boolean`</td>
|
|
27
|
+
<td>false</td>
|
|
28
|
+
<td>`Boolean` флаг</td>
|
|
29
|
+
</tr>
|
|
30
|
+
<tr>
|
|
31
|
+
<td>propsGenerator</td>
|
|
32
|
+
<td>Да</td>
|
|
33
|
+
<td>`[key: string]: string`</td>
|
|
34
|
+
<td>
|
|
35
|
+
propsGenerator[propsKey]
|
|
36
|
+
</td>
|
|
37
|
+
<td>Генератор классов</td>
|
|
38
|
+
</tr>
|
|
39
|
+
<tr>
|
|
40
|
+
<td>suffixes</td>
|
|
41
|
+
<td>Нет</td>
|
|
42
|
+
<td>`string[]`</td>
|
|
43
|
+
<td>
|
|
44
|
+
['Checkmark']
|
|
45
|
+
</td>
|
|
46
|
+
<td>Массив суффиксов</td>
|
|
47
|
+
</tr>
|
|
48
|
+
<tr>
|
|
49
|
+
<td>isActive</td>
|
|
50
|
+
<td>Нет</td>
|
|
51
|
+
<td>`boolean`</td>
|
|
52
|
+
<td>false</td>
|
|
53
|
+
<td>`Boolean` флаг</td>
|
|
54
|
+
</tr>
|
|
55
|
+
</tbody>
|
|
56
|
+
</table>
|
|
57
|
+
|
|
58
|
+
### Результат
|
|
59
|
+
|
|
60
|
+
Возвращает объект, значения объекта:
|
|
61
|
+
|
|
62
|
+
<table>
|
|
63
|
+
<thead>
|
|
64
|
+
<tr>
|
|
65
|
+
<th>Название</th>
|
|
66
|
+
<th>Тип</th>
|
|
67
|
+
<th>Значение</th>
|
|
68
|
+
<th>Описание</th>
|
|
69
|
+
</tr>
|
|
70
|
+
</thead>
|
|
71
|
+
<tbody>
|
|
72
|
+
<tr>
|
|
73
|
+
<td>rootClasses</td>
|
|
74
|
+
<td>`string`</td>
|
|
75
|
+
<td>`'fill_surface-secondary borderColor_surface-border-quaternary'`</td>
|
|
76
|
+
<td>Строка из классами для корневого `html-тега`</td>
|
|
77
|
+
</tr>
|
|
78
|
+
<tr>
|
|
79
|
+
<td>suffixClasses</td>
|
|
80
|
+
<td>`string`</td>
|
|
81
|
+
<td>
|
|
82
|
+
`'fill_surface-secondary borderColor_accent-primary'`
|
|
83
|
+
</td>
|
|
84
|
+
<td>Строка из классов для вложенных `html-тэгов`</td>
|
|
85
|
+
</tr>
|
|
86
|
+
</tbody>
|
|
87
|
+
</table>
|
|
88
|
+
|
|
89
|
+
### Примечание
|
|
90
|
+
Чтобы на выходе получалась строка из классов, необходимо предварительно в `appearance` прописать значения, например:
|
|
91
|
+
|
|
92
|
+
```js
|
|
93
|
+
const radioAppearanceDefault = {
|
|
94
|
+
defaultPrimary: {
|
|
95
|
+
fill: 'surfaceSecondary',
|
|
96
|
+
fillRado: 'accentPrimary',
|
|
97
|
+
fillCheckmark: 'surfaceQuaternary'
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Использование
|
|
103
|
+
Для генерации классов вложенных `html-тегов`, задаем массив суффиксов
|
|
104
|
+
|
|
105
|
+
```jsx
|
|
106
|
+
function Radio({ isActive, isDisabled, propsGenerator }) {
|
|
107
|
+
const { rootClasses, suffixClasses } = useActiveClasses({
|
|
108
|
+
isDisabled,
|
|
109
|
+
propsGenerator,
|
|
110
|
+
suffixes: ['Checkmark', 'Radio'],
|
|
111
|
+
isActive,
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<label className={clsx('radio', rootClasses)}>
|
|
116
|
+
<div className={clsx('radio__state', suffixClasses.Radio)}>
|
|
117
|
+
<span>State</span>
|
|
118
|
+
</div>
|
|
119
|
+
<div className={clsx('radio__state-checkmark', suffixClasses.Checkmark)}>
|
|
120
|
+
<span>Checkmark</span>
|
|
121
|
+
</div>
|
|
122
|
+
</label>
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export { Radio }
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
В данном случае
|
|
130
|
+
- `rootClasses` = 'fill_surface-secondary'
|
|
131
|
+
- `suffixClasses.Radio` = 'fill_surface-quaternary',
|
|
132
|
+
- `suffixClasses.Chekmark` = 'fill_accent-primary'
|
|
133
|
+
|
|
134
|
+
И все данные значение получены из `appearance`, которые указали ранее
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Meta } from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title="Hooks / useAppearanceConfig" />
|
|
4
|
+
|
|
5
|
+
# `useAppearanceConfig`
|
|
6
|
+
Хук позволяет возвращает объект из всех `appearance` переданных компоненту
|
|
7
|
+
|
|
8
|
+
## Использование
|
|
9
|
+
|
|
10
|
+
```js
|
|
11
|
+
import { useAppearanceConfig } from '../../hooks/useAppearanceConfig'
|
|
12
|
+
|
|
13
|
+
const { appearanceConfig } = useAppearanceConfig(
|
|
14
|
+
appearance,
|
|
15
|
+
componentConfig,
|
|
16
|
+
isDisabled,
|
|
17
|
+
)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Параметры
|
|
21
|
+
|
|
22
|
+
<table>
|
|
23
|
+
<thead>
|
|
24
|
+
<tr>
|
|
25
|
+
<th>Название</th>
|
|
26
|
+
<th>Обязательный</th>
|
|
27
|
+
<th>Тип</th>
|
|
28
|
+
<th>Значение</th>
|
|
29
|
+
<th>Описание</th>
|
|
30
|
+
</tr>
|
|
31
|
+
</thead>
|
|
32
|
+
<tbody>
|
|
33
|
+
<tr>
|
|
34
|
+
<td>appearance</td>
|
|
35
|
+
<td>Да</td>
|
|
36
|
+
<td>`string`</td>
|
|
37
|
+
<td>`'surfacePrimary sizeXL'`</td>
|
|
38
|
+
<td>Переданные appearance компоненту</td>
|
|
39
|
+
</tr>
|
|
40
|
+
<tr>
|
|
41
|
+
<td>componentConfig</td>
|
|
42
|
+
<td>Да</td>
|
|
43
|
+
<td></td>
|
|
44
|
+
<td>
|
|
45
|
+
`{
|
|
46
|
+
appearance,
|
|
47
|
+
setAppearance
|
|
48
|
+
}`
|
|
49
|
+
</td>
|
|
50
|
+
<td>Конфигурация всех appearance компонента</td>
|
|
51
|
+
</tr>
|
|
52
|
+
<tr>
|
|
53
|
+
<td>isDisabled</td>
|
|
54
|
+
<td>Нет</td>
|
|
55
|
+
<td>`boolean`</td>
|
|
56
|
+
<td>
|
|
57
|
+
`true`
|
|
58
|
+
</td>
|
|
59
|
+
<td>Указывает, отключен ли компонент</td>
|
|
60
|
+
</tr>
|
|
61
|
+
</tbody>
|
|
62
|
+
</table>
|
|
63
|
+
|
|
64
|
+
## Возвращает
|
|
65
|
+
|
|
66
|
+
<table>
|
|
67
|
+
<thead>
|
|
68
|
+
<tr>
|
|
69
|
+
<th>Название</th>
|
|
70
|
+
<th>Тип</th>
|
|
71
|
+
<th>Значение</th>
|
|
72
|
+
</tr>
|
|
73
|
+
</thead>
|
|
74
|
+
<tbody>
|
|
75
|
+
<tr>
|
|
76
|
+
<td>appearanceConfig</td>
|
|
77
|
+
<td>`[key: string]: number | string`</td>
|
|
78
|
+
<td>`{size: 's', fill: 'surfacePrimary'}`</td>
|
|
79
|
+
</tr>
|
|
80
|
+
</tbody>
|
|
81
|
+
</table>
|
|
82
|
+
|
|
83
|
+
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { Meta } from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title="Hooks / useDevicePropsGenerator" />
|
|
4
|
+
|
|
5
|
+
# `useDevicePropsGenerator`
|
|
6
|
+
Хук позволяет автоматически получать значения `props` или `appearance`, которые соответствуют `viewport` пользователя, а также преобразовывать их в `CSS‑классы`.
|
|
7
|
+
|
|
8
|
+
Важно учитывать приоритет при котором будут применяться стили:
|
|
9
|
+
|
|
10
|
+
1. Сначала используется значение из props, соответствующее текущему устройству
|
|
11
|
+
- Передали
|
|
12
|
+
|
|
13
|
+
```jsx
|
|
14
|
+
<Component textAlignMobile="center" />
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- Получили
|
|
18
|
+
```jsx
|
|
19
|
+
<Component style={{ textAlign: 'center' }} />
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
2. Если такого нет — используется значение из props без учёта устройства
|
|
23
|
+
- Передали
|
|
24
|
+
|
|
25
|
+
```jsx
|
|
26
|
+
<Component textAlign="right" />
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- Получили
|
|
30
|
+
|
|
31
|
+
```jsx
|
|
32
|
+
<Component style={{ textAlign: 'right' }} />
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
3. Если и его нет — берётся значение из appearance-конфига для текущего устройства
|
|
36
|
+
|
|
37
|
+
- Передали
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
{
|
|
41
|
+
textAlignMobile: 'left'
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- Получили
|
|
46
|
+
|
|
47
|
+
```jsx
|
|
48
|
+
<Component style={{ textAlign: 'left' }} />
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
4. И в последнюю очередь — значение из appearance-конфига без учёта устройства
|
|
52
|
+
|
|
53
|
+
- Передали
|
|
54
|
+
```jsx
|
|
55
|
+
textAlign: 'justify'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- Получили
|
|
59
|
+
```jsx
|
|
60
|
+
<Component style={{ textAlign: 'justify' }} />
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Использование
|
|
64
|
+
|
|
65
|
+
1. При создании компонента, можно опционально задать componentConfig, который содержит все appearance для данного компонента и позволяет задать новые appearance извне
|
|
66
|
+
|
|
67
|
+
```js
|
|
68
|
+
const componentConfig: ComponentConfig = {
|
|
69
|
+
appearance: componentAppearance,
|
|
70
|
+
setAppearance: (appearanceConfig) => {
|
|
71
|
+
componentConfig.appearance = appearanceConfig
|
|
72
|
+
},
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
2. Для того чтобы передавать несколько appearance в одной строке, например:
|
|
77
|
+
```jsx
|
|
78
|
+
<Component appearance='errorPrimary sizeM' />
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
где `errorPrimary` это
|
|
82
|
+
```js
|
|
83
|
+
{
|
|
84
|
+
fill: 'errorTertiary',
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
а `sizeM` это
|
|
89
|
+
```ts
|
|
90
|
+
{
|
|
91
|
+
size: 'm',
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Используем `useAppearanceConfig`
|
|
96
|
+
```js
|
|
97
|
+
const { appearanceConfig } = useAppearanceConfig(
|
|
98
|
+
appearance,
|
|
99
|
+
componentConfig,
|
|
100
|
+
isDisabled,
|
|
101
|
+
)
|
|
102
|
+
```
|
|
103
|
+
Которому передается созданный ранее `componentConfig` и `appearance`, его результатом будет единый объект со свойствами из разных appearance
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
{
|
|
107
|
+
fill: 'errorTertiary',
|
|
108
|
+
size: "m",
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
3. Используем useDevicePropsGenerator, который принимает 2 параметра
|
|
113
|
+
|
|
114
|
+
<table>
|
|
115
|
+
<thead>
|
|
116
|
+
<tr>
|
|
117
|
+
<th>Название</th>
|
|
118
|
+
<th>Обязательный</th>
|
|
119
|
+
<th>Тип</th>
|
|
120
|
+
<th>Значение</th>
|
|
121
|
+
<th>Описание</th>
|
|
122
|
+
</tr>
|
|
123
|
+
</thead>
|
|
124
|
+
<tbody>
|
|
125
|
+
<tr>
|
|
126
|
+
<td>componentProps</td>
|
|
127
|
+
<td>Да</td>
|
|
128
|
+
<td>`[key: string]: number | string`</td>
|
|
129
|
+
<td>errorTertiary</td>
|
|
130
|
+
<td>Пропсы компонента</td>
|
|
131
|
+
</tr>
|
|
132
|
+
<tr>
|
|
133
|
+
<td>appearanceConfig</td>
|
|
134
|
+
<td>Нет</td>
|
|
135
|
+
<td>`[key: string]: number | string`</td>
|
|
136
|
+
<td>
|
|
137
|
+
appearanceConfig[propsKey]
|
|
138
|
+
</td>
|
|
139
|
+
<td>Объект из appearance</td>
|
|
140
|
+
</tr>
|
|
141
|
+
</tbody>
|
|
142
|
+
</table>
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
Из propsGenerator получаем переменные со строками, которые соответствуют appearance переданными в хук. Если указать просто `fill`, то получим `errorTertiary`,
|
|
146
|
+
если укажем `fillClass` то получим `error-tertiary`, поэтому везде в приведенном ниже примере указан суффикс `Class`.
|
|
147
|
+
|
|
148
|
+
```js
|
|
149
|
+
const propsGenerator = useDevicePropsGenerator(props, appearanceConfig)
|
|
150
|
+
|
|
151
|
+
const {
|
|
152
|
+
fillClass,
|
|
153
|
+
sizeClass,
|
|
154
|
+
} = propsGenerator
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
4. Применяем стили к компоненту. Важно учитывать, если в названии класса указывается сначала название компонента, это означает что он ссылается на стили,
|
|
158
|
+
которые определены внутри директории этого компонента `../Component/css`
|
|
159
|
+
|
|
160
|
+
```jsx
|
|
161
|
+
'textarea__input'
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Если в названии класса нет название компонента, это означает что ссылаемся на глобальный класс, который определен `src/styles`
|
|
165
|
+
```jsx
|
|
166
|
+
`fill_${fillClass}`
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
```jsx
|
|
170
|
+
<textarea
|
|
171
|
+
className={clsx(
|
|
172
|
+
'textarea__input',
|
|
173
|
+
fillClass && `fill_${fillClass}`,
|
|
174
|
+
sizeClass && `size_${sizeClass}`,
|
|
175
|
+
)}
|
|
176
|
+
/>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
К примеру fill, будет отображаться в браузере как `fill_error-tertiary`.
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
6. Чтобы применить стили в зависимости от `viewPort`, для этого нужно указать в `appearance` суффикс `Mobile` или `Desktop` или `Tablet`
|
|
183
|
+
|
|
184
|
+
```js
|
|
185
|
+
{
|
|
186
|
+
sizeMobile: 'm',
|
|
187
|
+
textSizeMobile: 'm',
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Или напрямую при использовании компонента
|
|
192
|
+
|
|
193
|
+
```js
|
|
194
|
+
<Component sizeMobile="m"/>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Всего доступны 3 типа размеров
|
|
198
|
+
1. Mobile (от `240px` до `768px`)
|
|
199
|
+
2. Tablet (от `768px` до `960px`)
|
|
200
|
+
3. Desktop (от `960px` до `1920px`)
|
|
201
|
+
|
|
202
|
+
Подробнее об этом можно узнать в `src/context/UIContext.tsx`, ознакомиться с размерами для (`Mobile`, `Tablet`, `Desktop`) можно в `../../hooks/useMediaQueries/mediaQueries.json`
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Meta } from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title="Hooks / useMediaQueries" />
|
|
4
|
+
|
|
5
|
+
# `useMediaQueries`
|
|
6
|
+
Предназначен для определения и выполнения кода согласно значению `viewport`, список доступных `viewport` находится в файле `../../hooks/useMediaQueries/mediaQueries.json`
|
|
7
|
+
|
|
8
|
+
## API
|
|
9
|
+
|
|
10
|
+
### Параметры
|
|
11
|
+
|
|
12
|
+
<table>
|
|
13
|
+
<thead>
|
|
14
|
+
<tr>
|
|
15
|
+
<th>Название</th>
|
|
16
|
+
<th>Тип</th>
|
|
17
|
+
<th>Значение</th>
|
|
18
|
+
<th>Описание</th>
|
|
19
|
+
</tr>
|
|
20
|
+
</thead>
|
|
21
|
+
<tbody>
|
|
22
|
+
<tr>
|
|
23
|
+
<td>userDevice</td>
|
|
24
|
+
<td>UserDeviceState</td>
|
|
25
|
+
<td>`{}`</td>
|
|
26
|
+
<td>`Boolean` флаги устройства пользователя</td>
|
|
27
|
+
</tr>
|
|
28
|
+
</tbody>
|
|
29
|
+
</table>
|
|
30
|
+
|
|
31
|
+
### Возвращает объект
|
|
32
|
+
|
|
33
|
+
`deviceTypes` - который является объектом в котором находятся все `boolean` флаги
|
|
34
|
+
|
|
35
|
+
<table>
|
|
36
|
+
<thead>
|
|
37
|
+
<tr>
|
|
38
|
+
<th>Флаг</th>
|
|
39
|
+
<th>Диапазон(px)</th>
|
|
40
|
+
</tr>
|
|
41
|
+
</thead>
|
|
42
|
+
<tbody>
|
|
43
|
+
<tr>
|
|
44
|
+
<td>`isMobile`</td>
|
|
45
|
+
<td>`≥ 240px и ≤ 768px`</td>
|
|
46
|
+
</tr>
|
|
47
|
+
<tr>
|
|
48
|
+
<td>`isMobileHuge`</td>
|
|
49
|
+
<td>`≥ 640px и ≤ 768px`</td>
|
|
50
|
+
</tr>
|
|
51
|
+
<tr>
|
|
52
|
+
<td>`isTablet`</td>
|
|
53
|
+
<td>`≥ 768px и ≤ 960px`</td>
|
|
54
|
+
</tr>
|
|
55
|
+
<tr>
|
|
56
|
+
<td>`isDesktop`</td>
|
|
57
|
+
<td>`≥ 960px и ≤ 1920px`</td>
|
|
58
|
+
</tr>
|
|
59
|
+
<tr>
|
|
60
|
+
<td>`isDesktopMega`</td>
|
|
61
|
+
<td>`≥ 2560px`</td>
|
|
62
|
+
</tr>
|
|
63
|
+
</tbody>
|
|
64
|
+
</table>
|
|
65
|
+
|
|
66
|
+
### Использование
|
|
67
|
+
|
|
68
|
+
```jsx
|
|
69
|
+
const Component = () => {
|
|
70
|
+
const { isMobile, isTablet, isDesktop } = useMediaQueries()
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<div>
|
|
74
|
+
{isMobile && <p>isMobile</p>}
|
|
75
|
+
{isTablet && <p>isTablet</p>}
|
|
76
|
+
{isDesktop && <p>isDesktop</p>}
|
|
77
|
+
</div>
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
```
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Meta } from '@storybook/addon-docs/blocks'
|
|
2
|
+
|
|
3
|
+
<Meta title="Hooks / useStyles" />
|
|
4
|
+
|
|
5
|
+
# `useStyles`
|
|
6
|
+
|
|
7
|
+
Хук конвертирует props компонента в inline стили.
|
|
8
|
+
|
|
9
|
+
Важно учитывать приоритет при котором будут применяться стили:
|
|
10
|
+
|
|
11
|
+
1. Сначала используется значение из props, соответствующее текущему устройству
|
|
12
|
+
- Передали
|
|
13
|
+
|
|
14
|
+
```jsx
|
|
15
|
+
<Component textAlignMobile="center" />
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- Получили
|
|
19
|
+
```jsx
|
|
20
|
+
<Component style={{ textAlign: 'center' }} />
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
2. Если такого нет — используется значение из props без учёта устройства
|
|
24
|
+
- Передали
|
|
25
|
+
|
|
26
|
+
```jsx
|
|
27
|
+
<Component textAlign="right" />
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- Получили
|
|
31
|
+
|
|
32
|
+
```jsx
|
|
33
|
+
<Component style={{ textAlign: 'right' }} />
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
3. Если и его нет — берётся значение из appearance-конфига для текущего устройства
|
|
37
|
+
|
|
38
|
+
- Передали
|
|
39
|
+
|
|
40
|
+
```js
|
|
41
|
+
{
|
|
42
|
+
textAlignMobile: 'left'
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- Получили
|
|
47
|
+
|
|
48
|
+
```jsx
|
|
49
|
+
<Component style={{ textAlign: 'left' }} />
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
4. И в последнюю очередь — значение из appearance-конфига без учёта устройства
|
|
53
|
+
|
|
54
|
+
- Передали
|
|
55
|
+
```jsx
|
|
56
|
+
textAlign: 'justify'
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- Получили
|
|
60
|
+
```jsx
|
|
61
|
+
<Component style={{ textAlign: 'justify' }} />
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## API
|
|
65
|
+
|
|
66
|
+
### Параметры
|
|
67
|
+
|
|
68
|
+
<table>
|
|
69
|
+
<thead>
|
|
70
|
+
<tr>
|
|
71
|
+
<th>Название</th>
|
|
72
|
+
<th>Тип</th>
|
|
73
|
+
<th>Значение</th>
|
|
74
|
+
<th>Описание</th>
|
|
75
|
+
</tr>
|
|
76
|
+
</thead>
|
|
77
|
+
<tbody>
|
|
78
|
+
<tr>
|
|
79
|
+
<td>props</td>
|
|
80
|
+
<td>StyleAttributes</td>
|
|
81
|
+
<td>background</td>
|
|
82
|
+
<td>Props, могут быть любые inline-стили</td>
|
|
83
|
+
</tr>
|
|
84
|
+
</tbody>
|
|
85
|
+
</table>
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
### Использование
|
|
89
|
+
|
|
90
|
+
Создаем ui компонент и используем хук
|
|
91
|
+
|
|
92
|
+
```js
|
|
93
|
+
const { dot: dotStyles, styles: badgeStyles } = useStyles(props)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Залогируем данные
|
|
97
|
+
```js
|
|
98
|
+
console.log('dotStyles', dotStyles)
|
|
99
|
+
console.log('badgeStyles', badgeStyles)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Добавим в JSX-разметку компонента стили
|
|
103
|
+
|
|
104
|
+
```jsx
|
|
105
|
+
<div style={badgeStyles}>
|
|
106
|
+
{dot && (
|
|
107
|
+
<div style={dotStyles}>
|
|
108
|
+
текст
|
|
109
|
+
</div>
|
|
110
|
+
)}
|
|
111
|
+
</div>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
При использовании прокидываем стили
|
|
115
|
+
|
|
116
|
+
```jsx
|
|
117
|
+
<Badge
|
|
118
|
+
marginDotMobile="10px"
|
|
119
|
+
paddingStylesMobile="10px"
|
|
120
|
+
dot={true}
|
|
121
|
+
{...args}
|
|
122
|
+
/>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Почему именно такое название пропсов?
|
|
126
|
+
Пропсы соответствуют такой структуре
|
|
127
|
+
|
|
128
|
+
<table>
|
|
129
|
+
<thead>
|
|
130
|
+
<tr>
|
|
131
|
+
<th>Во первых (margin)</th>
|
|
132
|
+
<th>Во вторых (Dot)</th>
|
|
133
|
+
<th>В третьих (Mobile)</th>
|
|
134
|
+
</tr>
|
|
135
|
+
</thead>
|
|
136
|
+
<tbody>
|
|
137
|
+
<tr>
|
|
138
|
+
<td>Указывается название стиля, которое будет применено (margin например)</td>
|
|
139
|
+
<td>Название к которому будет применяться стиль, в нашем случае это Dot</td>
|
|
140
|
+
<td>Для какого размера экрана принимать данные стили</td>
|
|
141
|
+
</tr>
|
|
142
|
+
</tbody>
|
|
143
|
+
</table>
|
|
144
|
+
|
|
145
|
+
И получим на выходе в логах, для мобильного разрешения экрана.
|
|
146
|
+
|
|
147
|
+
```js
|
|
148
|
+
dotStyles - {margin: '10px'}
|
|
149
|
+
badgeStyles - {padding: '10px'}
|
|
150
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { GeneratedId, SimpleCallback } from '@itcase/types-core';
|
|
2
|
+
import type { CreatedNotification, Notification, NotificationsProviderProps } from './Notifications.interface';
|
|
3
|
+
declare function NotificationsProvider(props: NotificationsProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare function useNotifications(): Notification[];
|
|
5
|
+
declare function useNotificationsAPI(): {
|
|
6
|
+
hideNotifications: (targetId?: GeneratedId) => void;
|
|
7
|
+
showNotification: (notification: string | CreatedNotification, onClose?: SimpleCallback) => void;
|
|
8
|
+
notificationStatuses: {
|
|
9
|
+
readonly error: "error";
|
|
10
|
+
readonly info: "info";
|
|
11
|
+
readonly success: "success";
|
|
12
|
+
readonly warning: "warning";
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
declare const statusToAppearanceList: {
|
|
16
|
+
readonly error: "errorPrimary sizeS solid rounded";
|
|
17
|
+
readonly info: "infoPrimary sizeS solid rounded";
|
|
18
|
+
readonly success: "successPrimary sizeS solid rounded";
|
|
19
|
+
readonly warning: "warningPrimary sizeS solid rounded";
|
|
20
|
+
};
|
|
21
|
+
export { NotificationsProvider, statusToAppearanceList, useNotifications, useNotificationsAPI, };
|