@skbkontur/react-ui 5.3.1 → 5.3.2
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/CHANGELOG.md +8 -0
- package/package.json +1 -6
- package/cjs/components/Autocomplete/Autocomplete.md +0 -113
- package/cjs/components/Button/Button.md +0 -261
- package/cjs/components/Calendar/Calendar.md +0 -276
- package/cjs/components/Calendar/CalendarDay.md +0 -70
- package/cjs/components/Center/Center.md +0 -26
- package/cjs/components/Checkbox/Checkbox.md +0 -171
- package/cjs/components/ComboBox/ComboBox.md +0 -574
- package/cjs/components/CurrencyInput/CurrencyInput.md +0 -39
- package/cjs/components/CurrencyLabel/CurrencyLabel.md +0 -29
- package/cjs/components/DateInput/DateInput.md +0 -111
- package/cjs/components/DatePicker/DatePicker.md +0 -368
- package/cjs/components/Dropdown/Dropdown.md +0 -45
- package/cjs/components/DropdownMenu/DropdownMenu.md +0 -290
- package/cjs/components/FileUploader/FileUploader.md +0 -131
- package/cjs/components/FxInput/FxInput.md +0 -31
- package/cjs/components/Gapped/Gapped.md +0 -44
- package/cjs/components/GlobalLoader/GlobalLoader.md +0 -97
- package/cjs/components/Group/Group.md +0 -19
- package/cjs/components/Hint/Hint.md +0 -86
- package/cjs/components/Input/Input.md +0 -86
- package/cjs/components/Kebab/Kebab.md +0 -306
- package/cjs/components/Link/Link.md +0 -182
- package/cjs/components/Loader/Loader.md +0 -33
- package/cjs/components/MaskedInput/MaskedInput.md +0 -114
- package/cjs/components/MenuFooter/MenuFooter.md +0 -27
- package/cjs/components/MenuHeader/MenuHeader.md +0 -35
- package/cjs/components/MenuItem/MenuItem.md +0 -139
- package/cjs/components/MenuSeparator/MenuSeparator.md +0 -14
- package/cjs/components/MiniModal/MiniModal.md +0 -231
- package/cjs/components/Modal/Modal.md +0 -56
- package/cjs/components/Paging/Paging.md +0 -57
- package/cjs/components/PasswordInput/PasswordInput.md +0 -29
- package/cjs/components/Radio/Radio.md +0 -57
- package/cjs/components/RadioGroup/RadioGroup.md +0 -44
- package/cjs/components/ResponsiveLayout/ResponsiveLayout.md +0 -75
- package/cjs/components/ScrollContainer/ScrollContainer.md +0 -224
- package/cjs/components/Select/Select.md +0 -113
- package/cjs/components/SidePage/SidePage.md +0 -65
- package/cjs/components/SingleToast/SingleToast.md +0 -36
- package/cjs/components/Spinner/Spinner.md +0 -36
- package/cjs/components/Sticky/Sticky.md +0 -28
- package/cjs/components/Switcher/Switcher.md +0 -111
- package/cjs/components/Tabs/Tab.md +0 -73
- package/cjs/components/Tabs/Tabs.md +0 -54
- package/cjs/components/Textarea/Textarea.md +0 -58
- package/cjs/components/Toast/Toast.md +0 -69
- package/cjs/components/Toggle/Toggle.md +0 -110
- package/cjs/components/Token/Token.md +0 -48
- package/cjs/components/TokenInput/TokenInput.md +0 -277
- package/cjs/components/Tooltip/Tooltip.md +0 -322
- package/cjs/components/TooltipMenu/TooltipMenu.md +0 -241
- package/cjs/internal/DataTids/DATATIDS.md +0 -12
- package/cjs/internal/DataTids/DataTids.d.ts +0 -12
- package/cjs/internal/DataTids/DataTids.js +0 -50
- package/cjs/internal/DataTids/DataTids.js.map +0 -1
- package/cjs/internal/DataTids/DataTids.styles.d.ts +0 -7
- package/cjs/internal/DataTids/DataTids.styles.js +0 -42
- package/cjs/internal/DataTids/DataTids.styles.js.map +0 -1
- package/cjs/internal/DataTids/componentsDataTids.d.ts +0 -5
- package/cjs/internal/DataTids/componentsDataTids.js +0 -15
- package/cjs/internal/DataTids/componentsDataTids.js.map +0 -1
- package/cjs/internal/ThemePlayground/Playground.md +0 -7
- package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -64
- package/cjs/lib/locale/LOCALECONTEXT.md +0 -222
- package/cjs/lib/theming/ThemeContext.md +0 -265
- package/components/Autocomplete/Autocomplete.md +0 -113
- package/components/Button/Button.md +0 -261
- package/components/Calendar/Calendar.md +0 -276
- package/components/Calendar/CalendarDay.md +0 -70
- package/components/Center/Center.md +0 -26
- package/components/Checkbox/Checkbox.md +0 -171
- package/components/ComboBox/ComboBox.md +0 -574
- package/components/CurrencyInput/CurrencyInput.md +0 -39
- package/components/CurrencyLabel/CurrencyLabel.md +0 -29
- package/components/DateInput/DateInput.md +0 -111
- package/components/DatePicker/DatePicker.md +0 -368
- package/components/Dropdown/Dropdown.md +0 -45
- package/components/DropdownMenu/DropdownMenu.md +0 -290
- package/components/FileUploader/FileUploader.md +0 -131
- package/components/FxInput/FxInput.md +0 -31
- package/components/Gapped/Gapped.md +0 -44
- package/components/GlobalLoader/GlobalLoader.md +0 -97
- package/components/Group/Group.md +0 -19
- package/components/Hint/Hint.md +0 -86
- package/components/Input/Input.md +0 -86
- package/components/Kebab/Kebab.md +0 -306
- package/components/Link/Link.md +0 -182
- package/components/Loader/Loader.md +0 -33
- package/components/MaskedInput/MaskedInput.md +0 -114
- package/components/MenuFooter/MenuFooter.md +0 -27
- package/components/MenuHeader/MenuHeader.md +0 -35
- package/components/MenuItem/MenuItem.md +0 -139
- package/components/MenuSeparator/MenuSeparator.md +0 -14
- package/components/MiniModal/MiniModal.md +0 -231
- package/components/Modal/Modal.md +0 -56
- package/components/Paging/Paging.md +0 -57
- package/components/PasswordInput/PasswordInput.md +0 -29
- package/components/Radio/Radio.md +0 -57
- package/components/RadioGroup/RadioGroup.md +0 -44
- package/components/ResponsiveLayout/ResponsiveLayout.md +0 -75
- package/components/ScrollContainer/ScrollContainer.md +0 -224
- package/components/Select/Select.md +0 -113
- package/components/SidePage/SidePage.md +0 -65
- package/components/SingleToast/SingleToast.md +0 -36
- package/components/Spinner/Spinner.md +0 -36
- package/components/Sticky/Sticky.md +0 -28
- package/components/Switcher/Switcher.md +0 -111
- package/components/Tabs/Tab.md +0 -73
- package/components/Tabs/Tabs.md +0 -54
- package/components/Textarea/Textarea.md +0 -58
- package/components/Toast/Toast.md +0 -69
- package/components/Toggle/Toggle.md +0 -110
- package/components/Token/Token.md +0 -48
- package/components/TokenInput/TokenInput.md +0 -277
- package/components/Tooltip/Tooltip.md +0 -322
- package/components/TooltipMenu/TooltipMenu.md +0 -241
- package/internal/DataTids/DATATIDS.md +0 -12
- package/internal/DataTids/DataTids/DataTids.js +0 -69
- package/internal/DataTids/DataTids/DataTids.js.map +0 -1
- package/internal/DataTids/DataTids/package.json +0 -6
- package/internal/DataTids/DataTids.d.ts +0 -12
- package/internal/DataTids/DataTids.styles/DataTids.styles.js +0 -20
- package/internal/DataTids/DataTids.styles/DataTids.styles.js.map +0 -1
- package/internal/DataTids/DataTids.styles/package.json +0 -6
- package/internal/DataTids/DataTids.styles.d.ts +0 -7
- package/internal/DataTids/componentsDataTids/componentsDataTids.js +0 -12
- package/internal/DataTids/componentsDataTids/componentsDataTids.js.map +0 -1
- package/internal/DataTids/componentsDataTids/package.json +0 -6
- package/internal/DataTids/componentsDataTids.d.ts +0 -5
- package/internal/ThemePlayground/Playground.md +0 -7
- package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -64
- package/lib/locale/LOCALECONTEXT.md +0 -222
- package/lib/theming/ThemeContext.md +0 -265
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
### Проп `mask`
|
|
2
|
-
|
|
3
|
-
Паттерн ввода. Пример с номером телефона.
|
|
4
|
-
|
|
5
|
-
```jsx harmony
|
|
6
|
-
const [value, setValue] = React.useState('');
|
|
7
|
-
|
|
8
|
-
<>
|
|
9
|
-
<span>value: "{value}"</span>
|
|
10
|
-
<br />
|
|
11
|
-
<br />
|
|
12
|
-
<MaskedInput
|
|
13
|
-
mask="+7 (999) 999-99-99"
|
|
14
|
-
placeholder="Номер телефона"
|
|
15
|
-
value={value}
|
|
16
|
-
onValueChange={setValue}
|
|
17
|
-
/>
|
|
18
|
-
</>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### Проп `alwaysShowMask`
|
|
22
|
-
|
|
23
|
-
Показывает маску всегда.
|
|
24
|
-
|
|
25
|
-
```jsx harmony
|
|
26
|
-
<MaskedInput mask="+7 (999) 999-99-99" alwaysShowMask />
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### Проп `maskChar`
|
|
30
|
-
|
|
31
|
-
Символом маски может быть любой символ.
|
|
32
|
-
|
|
33
|
-
```jsx harmony
|
|
34
|
-
const [value, setValue] = React.useState('');
|
|
35
|
-
|
|
36
|
-
<>
|
|
37
|
-
<span>value: "{value}"</span>
|
|
38
|
-
<br />
|
|
39
|
-
<br />
|
|
40
|
-
<MaskedInput
|
|
41
|
-
mask="9999 9999 9999 9999"
|
|
42
|
-
maskChar="X"
|
|
43
|
-
placeholder="Номер карты"
|
|
44
|
-
alwaysShowMask
|
|
45
|
-
value={value}
|
|
46
|
-
onValueChange={setValue}
|
|
47
|
-
/>
|
|
48
|
-
</>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Проп `formatChars`
|
|
52
|
-
|
|
53
|
-
При необходимости можно настроить собственный словарь.
|
|
54
|
-
|
|
55
|
-
```jsx harmony
|
|
56
|
-
const [value, setValue] = React.useState('');
|
|
57
|
-
|
|
58
|
-
<MaskedInput
|
|
59
|
-
mask="Hh:Mm:Ss"
|
|
60
|
-
alwaysShowMask
|
|
61
|
-
formatChars={{
|
|
62
|
-
H: '[0-2]',
|
|
63
|
-
h: value.startsWith('2') ? '[0-3]' : '[0-9]',
|
|
64
|
-
M: '[0-5]',
|
|
65
|
-
m: '[0-9]',
|
|
66
|
-
S: '[0-5]',
|
|
67
|
-
s: '[0-9]',
|
|
68
|
-
}}
|
|
69
|
-
value={value}
|
|
70
|
-
onValueChange={setValue}
|
|
71
|
-
/>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Проп `unmask`
|
|
75
|
-
|
|
76
|
-
Можно сразу получать очищенный value, содержащий только введённый пользователем символы.
|
|
77
|
-
|
|
78
|
-
```jsx harmony
|
|
79
|
-
const [value, setValue] = React.useState('');
|
|
80
|
-
|
|
81
|
-
<>
|
|
82
|
-
<span>value: "{value}"</span>
|
|
83
|
-
<br />
|
|
84
|
-
<br />
|
|
85
|
-
<MaskedInput
|
|
86
|
-
mask="+7 (999) 999-99-99"
|
|
87
|
-
unmask
|
|
88
|
-
alwaysShowMask
|
|
89
|
-
value={value}
|
|
90
|
-
onValueChange={setValue}
|
|
91
|
-
/>
|
|
92
|
-
</>
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### Проп `unmask` с фигурными скобками
|
|
96
|
-
|
|
97
|
-
Если обернуть фиксированные символы в фигурные скобки, то они попадут в `value` при `unmask = true`.
|
|
98
|
-
|
|
99
|
-
```jsx harmony
|
|
100
|
-
const [value, setValue] = React.useState('');
|
|
101
|
-
|
|
102
|
-
<>
|
|
103
|
-
<span>value: "{value}"</span>
|
|
104
|
-
<br />
|
|
105
|
-
<br />
|
|
106
|
-
<MaskedInput
|
|
107
|
-
mask="+{7} (999) 999-99-99"
|
|
108
|
-
unmask
|
|
109
|
-
alwaysShowMask
|
|
110
|
-
value={value}
|
|
111
|
-
onValueChange={setValue}
|
|
112
|
-
/>
|
|
113
|
-
</>
|
|
114
|
-
```
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
### Базовый пример меню с заголовками
|
|
2
|
-
|
|
3
|
-
```jsx harmony
|
|
4
|
-
import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
|
|
5
|
-
|
|
6
|
-
<DropdownMenu
|
|
7
|
-
menuMaxHeight="10rem"
|
|
8
|
-
caption={<Button use="primary">Сотрудники компании</Button>}
|
|
9
|
-
>
|
|
10
|
-
<MenuItem>Вася</MenuItem>
|
|
11
|
-
<MenuItem>Петя</MenuItem>
|
|
12
|
-
<MenuItem>Маша</MenuItem>
|
|
13
|
-
<MenuFooter>Всего 3 человека</MenuFooter>
|
|
14
|
-
</DropdownMenu>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### Размер
|
|
18
|
-
|
|
19
|
-
```jsx harmony
|
|
20
|
-
import { Gapped } from '@skbkontur/react-ui';
|
|
21
|
-
|
|
22
|
-
<Gapped vertical>
|
|
23
|
-
<MenuFooter size={'small'}>Маленький</MenuFooter>
|
|
24
|
-
<MenuFooter size={'medium'}>Средний</MenuFooter>
|
|
25
|
-
<MenuFooter size={'large'}>Большой</MenuFooter>
|
|
26
|
-
</Gapped>
|
|
27
|
-
```
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
### Базовый пример меню с заголовками
|
|
2
|
-
|
|
3
|
-
```jsx harmony
|
|
4
|
-
import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
|
|
5
|
-
|
|
6
|
-
<DropdownMenu
|
|
7
|
-
menuMaxHeight="10rem"
|
|
8
|
-
caption={<Button use="primary">Сотрудники компании</Button>}
|
|
9
|
-
>
|
|
10
|
-
<MenuHeader>Разработчики</MenuHeader>
|
|
11
|
-
<MenuItem>Вася</MenuItem>
|
|
12
|
-
<MenuItem>Петя</MenuItem>
|
|
13
|
-
<MenuItem>Маша</MenuItem>
|
|
14
|
-
<MenuHeader>Дизайнеры</MenuHeader>
|
|
15
|
-
<MenuItem>Галя</MenuItem>
|
|
16
|
-
<MenuItem>Гриша</MenuItem>
|
|
17
|
-
<MenuItem>Гена</MenuItem>
|
|
18
|
-
<MenuHeader>Продакты</MenuHeader>
|
|
19
|
-
<MenuItem>Валя</MenuItem>
|
|
20
|
-
<MenuItem>Аля</MenuItem>
|
|
21
|
-
<MenuItem>Артём</MenuItem>
|
|
22
|
-
</DropdownMenu>
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### Размер
|
|
26
|
-
|
|
27
|
-
```jsx harmony
|
|
28
|
-
import { Gapped } from '@skbkontur/react-ui';
|
|
29
|
-
|
|
30
|
-
<Gapped vertical>
|
|
31
|
-
<MenuHeader size={'small'}>Маленький</MenuHeader>
|
|
32
|
-
<MenuHeader size={'medium'}>Средний</MenuHeader>
|
|
33
|
-
<MenuHeader size={'large'}>Большой</MenuHeader>
|
|
34
|
-
</Gapped>
|
|
35
|
-
```
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
### Меню с базовыми элементами меню
|
|
2
|
-
|
|
3
|
-
```jsx harmony
|
|
4
|
-
import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
|
|
5
|
-
|
|
6
|
-
<DropdownMenu
|
|
7
|
-
caption={<Button use="primary">Открыть меню с базовыми элементами меню</Button>}
|
|
8
|
-
>
|
|
9
|
-
<MenuItem>Базовый элемент меню</MenuItem>
|
|
10
|
-
<MenuItem>Ещё один базовый элемент меню</MenuItem>
|
|
11
|
-
<MenuItem>И ещё один</MenuItem>
|
|
12
|
-
</DropdownMenu>
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
### Disabled
|
|
16
|
-
|
|
17
|
-
```jsx harmony
|
|
18
|
-
import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
|
|
19
|
-
|
|
20
|
-
<DropdownMenu
|
|
21
|
-
caption={<Button use="primary">Открыть меню с базовыми и заблокированными элементами</Button>}
|
|
22
|
-
>
|
|
23
|
-
<MenuItem>Это базовый элемент меню</MenuItem>
|
|
24
|
-
<MenuItem disabled>А это заблокированный</MenuItem>
|
|
25
|
-
<MenuItem>А это снова базовый</MenuItem>
|
|
26
|
-
<MenuItem disabled>И снова заблокированный</MenuItem>
|
|
27
|
-
<MenuItem disabled>И вот ещё один заблокированный</MenuItem>
|
|
28
|
-
</DropdownMenu>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### Запрет выделения
|
|
32
|
-
В пункты меню можно передать проп `isNotSelectable`, чтобы запретить выделение и выбор этого пункта меню
|
|
33
|
-
|
|
34
|
-
```jsx harmony
|
|
35
|
-
import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
|
|
36
|
-
|
|
37
|
-
<DropdownMenu
|
|
38
|
-
caption={<Button use="primary">Открыть меню с базовыми и отключёнными элементами</Button>}
|
|
39
|
-
>
|
|
40
|
-
<MenuItem>Это базовый элемент меню</MenuItem>
|
|
41
|
-
<MenuItem isNotSelectable>А это отключённый</MenuItem>
|
|
42
|
-
<MenuItem>А это снова базовый</MenuItem>
|
|
43
|
-
<MenuItem isNotSelectable>И снова отключённый</MenuItem>
|
|
44
|
-
<MenuItem isNotSelectable>И вот ещё один отключённый</MenuItem>
|
|
45
|
-
</DropdownMenu>
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Описание элементов
|
|
49
|
-
|
|
50
|
-
```jsx harmony
|
|
51
|
-
import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
|
|
52
|
-
|
|
53
|
-
<DropdownMenu
|
|
54
|
-
caption={<Button use="primary">Открыть меню с причастными к Pied Piper</Button>}
|
|
55
|
-
>
|
|
56
|
-
<MenuItem comment="Системный инженер">Bertram Gilfoyle</MenuItem>
|
|
57
|
-
<MenuItem comment="Hooli CEO">Gavin Belson</MenuItem>
|
|
58
|
-
<MenuItem comment="Java-разработчик">Dinesh Chugtai</MenuItem>
|
|
59
|
-
<MenuItem comment="Основатель Pied Piper">Richard Hendricks</MenuItem>
|
|
60
|
-
<MenuItem comment="Владелец инкубатора">Erlich Bachman</MenuItem>
|
|
61
|
-
</DropdownMenu>
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Иконки в элементах
|
|
65
|
-
|
|
66
|
-
```jsx harmony
|
|
67
|
-
import { Button, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
|
|
68
|
-
import { TechPhoneSmartIcon16Regular } from '@skbkontur/icons/icons/TechPhoneSmartIcon/TechPhoneSmartIcon16Regular';
|
|
69
|
-
import { CheckAIcon16Regular } from '@skbkontur/icons/icons/CheckAIcon/CheckAIcon16Regular';
|
|
70
|
-
import { HandThumbDownIcon16Regular } from '@skbkontur/icons/icons/HandThumbDownIcon/HandThumbDownIcon16Regular';
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
<DropdownMenu
|
|
74
|
-
caption={<Button use="primary">Открыть меню с иконками</Button>}
|
|
75
|
-
>
|
|
76
|
-
<MenuItem icon={<CheckAIcon16Regular />}>Базовый элемент меню c иконкой</MenuItem>
|
|
77
|
-
<MenuItem
|
|
78
|
-
disabled
|
|
79
|
-
icon={<HandThumbDownIcon16Regular />}
|
|
80
|
-
>
|
|
81
|
-
Отключённый элемент меню с иконкой
|
|
82
|
-
</MenuItem>
|
|
83
|
-
<MenuItem
|
|
84
|
-
icon={<TechPhoneSmartIcon16Regular />}
|
|
85
|
-
comment="А слева вы можете видеть икону 21-го века"
|
|
86
|
-
>
|
|
87
|
-
Элемент меню с описанием и иконкой
|
|
88
|
-
</MenuItem>
|
|
89
|
-
</DropdownMenu>
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Проп href
|
|
93
|
-
|
|
94
|
-
В элементы меню можно передавать проп `href`, чтобы превратить их в ссылку. Лучше выделять такие элементы иконками.
|
|
95
|
-
|
|
96
|
-
```jsx harmony
|
|
97
|
-
import { Button, MenuItem, DropdownMenu, MenuSeparator } from '@skbkontur/react-ui';
|
|
98
|
-
import { ArrowUiCornerOutUpRightIcon } from '@skbkontur/icons/icons/ArrowUiCornerOutUpRightIcon';
|
|
99
|
-
|
|
100
|
-
<DropdownMenu
|
|
101
|
-
caption={<Button use="primary">Открыть меню с ссылками</Button>}
|
|
102
|
-
>
|
|
103
|
-
<MenuItem
|
|
104
|
-
href="http://tech.skbkontur.ru/react-ui/"
|
|
105
|
-
target="_blank"
|
|
106
|
-
rel="noopener noreferrer"
|
|
107
|
-
>
|
|
108
|
-
Начало документации
|
|
109
|
-
</MenuItem>
|
|
110
|
-
<MenuItem
|
|
111
|
-
href="https://github.com/skbkontur/retail-ui/graphs/contributors"
|
|
112
|
-
target="_blank"
|
|
113
|
-
rel="noopener noreferrer"
|
|
114
|
-
>
|
|
115
|
-
Список прекрасных людей
|
|
116
|
-
</MenuItem>
|
|
117
|
-
<MenuSeparator />
|
|
118
|
-
<MenuItem
|
|
119
|
-
icon={< ArrowUiCornerOutUpRightIcon />}
|
|
120
|
-
href="https://guides.kontur.ru/"
|
|
121
|
-
target="_blank"
|
|
122
|
-
rel="noopener noreferrer"
|
|
123
|
-
>
|
|
124
|
-
Подробнее в Контур Гайдах
|
|
125
|
-
</MenuItem>
|
|
126
|
-
</DropdownMenu>
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Размер
|
|
130
|
-
|
|
131
|
-
```jsx harmony
|
|
132
|
-
import { Gapped } from '@skbkontur/react-ui';
|
|
133
|
-
|
|
134
|
-
<Gapped vertical>
|
|
135
|
-
<MenuItem size={'small'}>Маленький</MenuItem>
|
|
136
|
-
<MenuItem size={'medium'}>Средний</MenuItem>
|
|
137
|
-
<MenuItem size={'large'}>Большой</MenuItem>
|
|
138
|
-
</Gapped>
|
|
139
|
-
```
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
### Меню с разделителями
|
|
2
|
-
|
|
3
|
-
```jsx harmony
|
|
4
|
-
import { Button, MenuHeader, MenuItem, DropdownMenu } from '@skbkontur/react-ui';
|
|
5
|
-
|
|
6
|
-
<DropdownMenu caption={<Button use="primary">Открыть меню с разделителями</Button>}>
|
|
7
|
-
<MenuItem>У меня есть разделитель</MenuItem>
|
|
8
|
-
<MenuSeparator />
|
|
9
|
-
<MenuItem>У меня тоже!</MenuItem>
|
|
10
|
-
<MenuSeparator />
|
|
11
|
-
<MenuItem>А у меня нет :(</MenuItem>
|
|
12
|
-
<MenuItem>Как и у меня :(</MenuItem>
|
|
13
|
-
</DropdownMenu>;
|
|
14
|
-
```
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
Этот компонент обёртка над [Modal](#/Components/Modal/Modal).
|
|
2
|
-
|
|
3
|
-
`MiniModal` — модальное диалоговое окно, которое предполагает обязательный отклик пользователя по одному из доступных действий.
|
|
4
|
-
Закрытие окна по клику на фон или "крестик" не рекомендуется, т.к. у этих действий нет однозначного описания в
|
|
5
|
-
отличие от кнопок с названиями, наподобие "Сохранить", "Подтвердить" и т.п.
|
|
6
|
-
|
|
7
|
-
👉 По макету предполагается, что все кнопки должны быть среднего размера `size = medium`.
|
|
8
|
-
|
|
9
|
-
### Уведомление
|
|
10
|
-
|
|
11
|
-
Самый простой вариант использования:
|
|
12
|
-
|
|
13
|
-
```jsx harmony
|
|
14
|
-
import { MiniModal, Button, Gapped } from '@skbkontur/react-ui';
|
|
15
|
-
import { MoneyTypeCoinsIcon } from '@skbkontur/icons/MoneyTypeCoinsIcon';
|
|
16
|
-
|
|
17
|
-
const PayNotifice = () => {
|
|
18
|
-
|
|
19
|
-
const [isOpened, setIsOpened] = React.useState(false);
|
|
20
|
-
|
|
21
|
-
const open = () => setIsOpened(true);
|
|
22
|
-
const close = () => setIsOpened(false);
|
|
23
|
-
|
|
24
|
-
return (
|
|
25
|
-
<>
|
|
26
|
-
{isOpened && (
|
|
27
|
-
<MiniModal>
|
|
28
|
-
<MiniModal.Header>
|
|
29
|
-
Простое уведомление
|
|
30
|
-
</MiniModal.Header>
|
|
31
|
-
<MiniModal.Body>
|
|
32
|
-
Это простое, но достаточное важное уведомление, чтобы его показать в МиниМодалке
|
|
33
|
-
</MiniModal.Body>
|
|
34
|
-
<MiniModal.Footer>
|
|
35
|
-
<Button size="medium" use="primary" onClick={close}>Понятно</Button>
|
|
36
|
-
</MiniModal.Footer>
|
|
37
|
-
</MiniModal>
|
|
38
|
-
)}
|
|
39
|
-
<Button use="pay" onClick={open} icon={<MoneyTypeCoinsIcon/>}>Оплата</Button>
|
|
40
|
-
</>
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
<PayNotifice />
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### Подтверждение
|
|
48
|
-
|
|
49
|
-
Иногда от пользователя требуется выбрать одно из доступных действий.
|
|
50
|
-
|
|
51
|
-
Например, подтвердить важное действие или отклонить его:
|
|
52
|
-
|
|
53
|
-
```jsx harmony
|
|
54
|
-
import { MiniModal, Button, Gapped, ThemeContext } from '@skbkontur/react-ui';
|
|
55
|
-
import { TrashCanIcon } from '@skbkontur/icons/TrashCanIcon';
|
|
56
|
-
|
|
57
|
-
const ConfirmDelete = ({ name, handleDelete }) => {
|
|
58
|
-
const theme = React.useContext(ThemeContext);
|
|
59
|
-
|
|
60
|
-
const [isOpened, setIsOpened] = React.useState(false);
|
|
61
|
-
|
|
62
|
-
const open = () => setIsOpened(true);
|
|
63
|
-
const close = () => setIsOpened(false);
|
|
64
|
-
|
|
65
|
-
const mainAction = () => {
|
|
66
|
-
handleDelete();
|
|
67
|
-
close();
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
return (
|
|
71
|
-
<>
|
|
72
|
-
{isOpened && (
|
|
73
|
-
<MiniModal>
|
|
74
|
-
<MiniModal.Header icon={<TrashCanIcon size={64} color={theme.btnDangerBg}/>}>
|
|
75
|
-
Удалить "{name}"?
|
|
76
|
-
</MiniModal.Header>
|
|
77
|
-
<MiniModal.Footer direction="column">
|
|
78
|
-
<Button use="danger" size="medium" onClick={mainAction}>Удалить</Button>
|
|
79
|
-
<Button size="medium" onClick={close}>Отменить</Button>
|
|
80
|
-
</MiniModal.Footer>
|
|
81
|
-
</MiniModal>
|
|
82
|
-
)}
|
|
83
|
-
<Button onClick={open} icon={<TrashCanIcon weight="light"/>}/>
|
|
84
|
-
</>
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const list = ['Отчёт № 111', 'Отчёт № 222', 'Отчёт № 333'];
|
|
89
|
-
|
|
90
|
-
<Gapped vertical>
|
|
91
|
-
{list.map((name) => (
|
|
92
|
-
<Gapped key={name}>
|
|
93
|
-
<div style={{ width: 200, borderBottom: 'dashed 1px' }}>
|
|
94
|
-
{name}
|
|
95
|
-
</div>
|
|
96
|
-
<span>
|
|
97
|
-
<ConfirmDelete name={name} handleDelete={() => alert(`${name} удалён`)}/>
|
|
98
|
-
</span>
|
|
99
|
-
</Gapped>
|
|
100
|
-
))}
|
|
101
|
-
</Gapped>
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### Синглтон
|
|
105
|
-
|
|
106
|
-
Одно и то же диалоговое окно может вызываться в разных частях приложения.
|
|
107
|
-
|
|
108
|
-
В таком случае стоит реализовать паттерн синглтона:
|
|
109
|
-
|
|
110
|
-
```jsx harmony
|
|
111
|
-
import { MiniModal, Button, Gapped } from '@skbkontur/react-ui';
|
|
112
|
-
import { NotificationBellAlarmIcon16Solid } from '@skbkontur/icons/NotificationBellAlarmIcon16Solid';
|
|
113
|
-
import { NotificationBellAlarmIcon64Regular } from '@skbkontur/icons/NotificationBellAlarmIcon64Regular';
|
|
114
|
-
|
|
115
|
-
const EnableNotification = React.forwardRef(({ setStatus }, ref) => {
|
|
116
|
-
const [isOpened, setIsOpened] = React.useState(false);
|
|
117
|
-
|
|
118
|
-
const open = () => setIsOpened(true);
|
|
119
|
-
const close = () => setIsOpened(false);
|
|
120
|
-
|
|
121
|
-
const handleAllowAll = () => {
|
|
122
|
-
setStatus('Разрешить все');
|
|
123
|
-
close();
|
|
124
|
-
};
|
|
125
|
-
const handleAllowBasic = () => {
|
|
126
|
-
setStatus('Разрешить только основные');
|
|
127
|
-
close();
|
|
128
|
-
};
|
|
129
|
-
const handleDenyAll = () => {
|
|
130
|
-
setStatus('Запретить');
|
|
131
|
-
close();
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
React.useImperativeHandle(ref, () => ({ open, close }), []);
|
|
135
|
-
|
|
136
|
-
return isOpened && (
|
|
137
|
-
<MiniModal>
|
|
138
|
-
<MiniModal.Header icon={<NotificationBellAlarmIcon64Regular/>}>
|
|
139
|
-
Разрешить уведомления?
|
|
140
|
-
</MiniModal.Header>
|
|
141
|
-
<MiniModal.Footer direction="column">
|
|
142
|
-
<Button use="primary" size="medium" onClick={handleAllowAll}>Разрешить все</Button>
|
|
143
|
-
<Button size="medium" onClick={handleAllowBasic}>Разрешить только основные</Button>
|
|
144
|
-
<MiniModal.Indent/>
|
|
145
|
-
<Button size="medium" onClick={handleDenyAll}>Запретить</Button>
|
|
146
|
-
</MiniModal.Footer>
|
|
147
|
-
</MiniModal>
|
|
148
|
-
);
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
const [status, setStatus] = React.useState('-не выбрано-');
|
|
152
|
-
|
|
153
|
-
const NotificationEnableRef = React.useRef(null);
|
|
154
|
-
|
|
155
|
-
const NotificationEnableOpen = () => NotificationEnableRef.current && NotificationEnableRef.current.open();
|
|
156
|
-
|
|
157
|
-
<>
|
|
158
|
-
<EnableNotification ref={NotificationEnableRef} setStatus={setStatus}/>
|
|
159
|
-
<Gapped vertical>
|
|
160
|
-
<span>
|
|
161
|
-
<NotificationBellAlarmIcon16Solid/> Статус уведомлений: {status}
|
|
162
|
-
</span>
|
|
163
|
-
<Button use="text" theme={{ btnTextBg: '#D6D6D6' }} onClick={NotificationEnableOpen}>Разрешить уведомления?</Button>
|
|
164
|
-
<Button use="text" theme={{ btnTextBg: '#E6E6E6' }} onClick={NotificationEnableOpen}>Разрешить уведомления?</Button>
|
|
165
|
-
<Button use="text" theme={{ btnTextBg: '#F0F0F0' }} onClick={NotificationEnableOpen}>Разрешить уведомления?</Button>
|
|
166
|
-
</Gapped>
|
|
167
|
-
</>
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Ожидание
|
|
171
|
-
|
|
172
|
-
Некоторые действия для корректного исполнения требуют блокировки других действий пользователя.
|
|
173
|
-
|
|
174
|
-
В таких случаях можно, например, использовать проп `loading` для `Button`, и не позволять закрыть окно до конца исполнения:
|
|
175
|
-
|
|
176
|
-
```jsx harmony
|
|
177
|
-
import { Button, Gapped } from '@skbkontur/react-ui';
|
|
178
|
-
|
|
179
|
-
const WaitingUpdate = ({ handleUpdate, setLastUpdated }) => {
|
|
180
|
-
|
|
181
|
-
const [isLoading, setIsLoading] = React.useState(false);
|
|
182
|
-
const [isOpened, setIsOpened] = React.useState(false);
|
|
183
|
-
|
|
184
|
-
const open = () => setIsOpened(true);
|
|
185
|
-
const close = () => setIsOpened(false);
|
|
186
|
-
|
|
187
|
-
const handleMainClick = () => {
|
|
188
|
-
setIsLoading(true);
|
|
189
|
-
handleUpdate()
|
|
190
|
-
.then(() => {
|
|
191
|
-
setIsLoading(false);
|
|
192
|
-
setIsOpened(false);
|
|
193
|
-
setLastUpdated(new Date());
|
|
194
|
-
});
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
return (
|
|
198
|
-
<>
|
|
199
|
-
{isOpened && (
|
|
200
|
-
<MiniModal>
|
|
201
|
-
<MiniModal.Header>
|
|
202
|
-
Обновить?
|
|
203
|
-
</MiniModal.Header>
|
|
204
|
-
<MiniModal.Body>
|
|
205
|
-
После вашего подтверждения другие действия на странице будут заблокированы на несколько секунд.
|
|
206
|
-
</MiniModal.Body>
|
|
207
|
-
<MiniModal.Footer>
|
|
208
|
-
<Button use="success" size="medium" onClick={handleMainClick} loading={isLoading}>Обновить</Button>
|
|
209
|
-
<Button size="medium" onClick={close} disabled={isLoading}>Отменить</Button>
|
|
210
|
-
</MiniModal.Footer>
|
|
211
|
-
|
|
212
|
-
</MiniModal>
|
|
213
|
-
)}
|
|
214
|
-
<Button onClick={open} use="success">Обновить</Button>
|
|
215
|
-
</>
|
|
216
|
-
);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
const dateTimeFormat = new Intl.DateTimeFormat('nu', { hour: '2-digit', minute: '2-digit', second: '2-digit' });
|
|
220
|
-
|
|
221
|
-
const [lastUpdated, setLastUpdated] = React.useState(new Date());
|
|
222
|
-
|
|
223
|
-
const handleUpdate = () => new Promise((resolve) => setTimeout(resolve, 1500));
|
|
224
|
-
|
|
225
|
-
<Gapped>
|
|
226
|
-
<WaitingUpdate handleUpdate={handleUpdate} setLastUpdated={setLastUpdated} />
|
|
227
|
-
<span>
|
|
228
|
-
Последнее обновление: {dateTimeFormat.format(lastUpdated)}
|
|
229
|
-
</span>
|
|
230
|
-
</Gapped>
|
|
231
|
-
```
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
### Базовый пример
|
|
2
|
-
|
|
3
|
-
```jsx harmony
|
|
4
|
-
import { Button, Toggle } from '@skbkontur/react-ui';
|
|
5
|
-
|
|
6
|
-
const [opened, setOpened] = React.useState(false);
|
|
7
|
-
const [panel, setPanel] = React.useState(false);
|
|
8
|
-
|
|
9
|
-
function renderModal() {
|
|
10
|
-
return (
|
|
11
|
-
<Modal onClose={close}>
|
|
12
|
-
<Modal.Header>Title</Modal.Header>
|
|
13
|
-
<Modal.Body>
|
|
14
|
-
<p>Use rxjs operators with react hooks</p>
|
|
15
|
-
|
|
16
|
-
<div>
|
|
17
|
-
<Toggle checked={panel} onValueChange={setPanel} /> Panel{' '}
|
|
18
|
-
{panel ? 'enabled' : 'disabled'}
|
|
19
|
-
</div>
|
|
20
|
-
</Modal.Body>
|
|
21
|
-
<Modal.Footer panel={panel}>
|
|
22
|
-
<Button onClick={close}>Close</Button>
|
|
23
|
-
</Modal.Footer>
|
|
24
|
-
</Modal>
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function open() {
|
|
29
|
-
setOpened(true);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function close() {
|
|
33
|
-
setOpened(false);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
<div>
|
|
37
|
-
{opened && renderModal()}
|
|
38
|
-
<Button onClick={open}>Open</Button>
|
|
39
|
-
</div>;
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Локали по умолчанию
|
|
43
|
-
|
|
44
|
-
```typescript static
|
|
45
|
-
interface ModalLocale {
|
|
46
|
-
closeButtonAriaLabel: string;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const ru_RU = {
|
|
50
|
-
closeButtonAriaLabel: 'Закрыть модальное окно'
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const en_GB = {
|
|
54
|
-
closeButtonAriaLabel: 'Close modal window'
|
|
55
|
-
}
|
|
56
|
-
```
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
Управление с клавиатуры работает в двух вариантах:
|
|
2
|
-
|
|
3
|
-
- **useGlobalListener === true** слушатель keydown событий на document, если на стринице несколько компонентов Paging,
|
|
4
|
-
обработчик будет срабатывать на каждом
|
|
5
|
-
- **useGlobalListener === false** обработка нажатия клавиш будет работать только когда компонент в фокусе.
|
|
6
|
-
|
|
7
|
-
Навигационные подсказки появляются когда доступно управление с клавиатуры и `withoutNavigationHint != true`
|
|
8
|
-
|
|
9
|
-
### Базовый пример
|
|
10
|
-
```jsx harmony
|
|
11
|
-
class Paginator3000 extends React.Component {
|
|
12
|
-
constructor() {
|
|
13
|
-
super();
|
|
14
|
-
this.state = { active: 1 };
|
|
15
|
-
this._handlePageChange = this._handlePageChange.bind(this);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
render() {
|
|
19
|
-
return <Paging activePage={this.state.active} onPageChange={this._handlePageChange} pagesCount={12} />;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
_handlePageChange(pageNumber) {
|
|
23
|
-
this.setState({ active: pageNumber });
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
<Paginator3000 />;
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### Пейджинг в отключенном состоянии
|
|
31
|
-
|
|
32
|
-
```jsx
|
|
33
|
-
const [activePage, setActivePage] = React.useState(3);
|
|
34
|
-
|
|
35
|
-
<Paging
|
|
36
|
-
disabled
|
|
37
|
-
onPageChange={(activePage) => setActivePage(activePage)}
|
|
38
|
-
activePage={activePage}
|
|
39
|
-
pagesCount={8}
|
|
40
|
-
/>
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Локали по умолчанию
|
|
44
|
-
|
|
45
|
-
```typescript static
|
|
46
|
-
interface PagingLocale {
|
|
47
|
-
forward?: string;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const ru_RU = {
|
|
51
|
-
forward: 'Дальше',
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const en_GB = {
|
|
55
|
-
forward: 'Forward',
|
|
56
|
-
};
|
|
57
|
-
```
|