@skbkontur/react-ui 5.3.0 → 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.
Files changed (139) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/cjs/components/Select/Select.js +1 -1
  3. package/cjs/components/Select/Select.js.map +1 -1
  4. package/components/Select/Select/Select.js +2 -2
  5. package/components/Select/Select/Select.js.map +1 -1
  6. package/package.json +1 -6
  7. package/cjs/components/Autocomplete/Autocomplete.md +0 -113
  8. package/cjs/components/Button/Button.md +0 -261
  9. package/cjs/components/Calendar/Calendar.md +0 -276
  10. package/cjs/components/Calendar/CalendarDay.md +0 -70
  11. package/cjs/components/Center/Center.md +0 -26
  12. package/cjs/components/Checkbox/Checkbox.md +0 -171
  13. package/cjs/components/ComboBox/ComboBox.md +0 -574
  14. package/cjs/components/CurrencyInput/CurrencyInput.md +0 -39
  15. package/cjs/components/CurrencyLabel/CurrencyLabel.md +0 -29
  16. package/cjs/components/DateInput/DateInput.md +0 -111
  17. package/cjs/components/DatePicker/DatePicker.md +0 -368
  18. package/cjs/components/Dropdown/Dropdown.md +0 -45
  19. package/cjs/components/DropdownMenu/DropdownMenu.md +0 -290
  20. package/cjs/components/FileUploader/FileUploader.md +0 -131
  21. package/cjs/components/FxInput/FxInput.md +0 -31
  22. package/cjs/components/Gapped/Gapped.md +0 -44
  23. package/cjs/components/GlobalLoader/GlobalLoader.md +0 -97
  24. package/cjs/components/Group/Group.md +0 -19
  25. package/cjs/components/Hint/Hint.md +0 -86
  26. package/cjs/components/Input/Input.md +0 -86
  27. package/cjs/components/Kebab/Kebab.md +0 -306
  28. package/cjs/components/Link/Link.md +0 -182
  29. package/cjs/components/Loader/Loader.md +0 -33
  30. package/cjs/components/MaskedInput/MaskedInput.md +0 -114
  31. package/cjs/components/MenuFooter/MenuFooter.md +0 -27
  32. package/cjs/components/MenuHeader/MenuHeader.md +0 -35
  33. package/cjs/components/MenuItem/MenuItem.md +0 -139
  34. package/cjs/components/MenuSeparator/MenuSeparator.md +0 -14
  35. package/cjs/components/MiniModal/MiniModal.md +0 -231
  36. package/cjs/components/Modal/Modal.md +0 -56
  37. package/cjs/components/Paging/Paging.md +0 -57
  38. package/cjs/components/PasswordInput/PasswordInput.md +0 -29
  39. package/cjs/components/Radio/Radio.md +0 -57
  40. package/cjs/components/RadioGroup/RadioGroup.md +0 -44
  41. package/cjs/components/ResponsiveLayout/ResponsiveLayout.md +0 -75
  42. package/cjs/components/ScrollContainer/ScrollContainer.md +0 -224
  43. package/cjs/components/Select/Select.md +0 -113
  44. package/cjs/components/SidePage/SidePage.md +0 -65
  45. package/cjs/components/SingleToast/SingleToast.md +0 -36
  46. package/cjs/components/Spinner/Spinner.md +0 -36
  47. package/cjs/components/Sticky/Sticky.md +0 -28
  48. package/cjs/components/Switcher/Switcher.md +0 -111
  49. package/cjs/components/Tabs/Tab.md +0 -73
  50. package/cjs/components/Tabs/Tabs.md +0 -54
  51. package/cjs/components/Textarea/Textarea.md +0 -58
  52. package/cjs/components/Toast/Toast.md +0 -69
  53. package/cjs/components/Toggle/Toggle.md +0 -110
  54. package/cjs/components/Token/Token.md +0 -48
  55. package/cjs/components/TokenInput/TokenInput.md +0 -277
  56. package/cjs/components/Tooltip/Tooltip.md +0 -322
  57. package/cjs/components/TooltipMenu/TooltipMenu.md +0 -241
  58. package/cjs/internal/DataTids/DATATIDS.md +0 -12
  59. package/cjs/internal/DataTids/DataTids.d.ts +0 -12
  60. package/cjs/internal/DataTids/DataTids.js +0 -50
  61. package/cjs/internal/DataTids/DataTids.js.map +0 -1
  62. package/cjs/internal/DataTids/DataTids.styles.d.ts +0 -7
  63. package/cjs/internal/DataTids/DataTids.styles.js +0 -42
  64. package/cjs/internal/DataTids/DataTids.styles.js.map +0 -1
  65. package/cjs/internal/DataTids/componentsDataTids.d.ts +0 -5
  66. package/cjs/internal/DataTids/componentsDataTids.js +0 -15
  67. package/cjs/internal/DataTids/componentsDataTids.js.map +0 -1
  68. package/cjs/internal/ThemePlayground/Playground.md +0 -7
  69. package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -64
  70. package/cjs/lib/locale/LOCALECONTEXT.md +0 -222
  71. package/cjs/lib/theming/ThemeContext.md +0 -265
  72. package/components/Autocomplete/Autocomplete.md +0 -113
  73. package/components/Button/Button.md +0 -261
  74. package/components/Calendar/Calendar.md +0 -276
  75. package/components/Calendar/CalendarDay.md +0 -70
  76. package/components/Center/Center.md +0 -26
  77. package/components/Checkbox/Checkbox.md +0 -171
  78. package/components/ComboBox/ComboBox.md +0 -574
  79. package/components/CurrencyInput/CurrencyInput.md +0 -39
  80. package/components/CurrencyLabel/CurrencyLabel.md +0 -29
  81. package/components/DateInput/DateInput.md +0 -111
  82. package/components/DatePicker/DatePicker.md +0 -368
  83. package/components/Dropdown/Dropdown.md +0 -45
  84. package/components/DropdownMenu/DropdownMenu.md +0 -290
  85. package/components/FileUploader/FileUploader.md +0 -131
  86. package/components/FxInput/FxInput.md +0 -31
  87. package/components/Gapped/Gapped.md +0 -44
  88. package/components/GlobalLoader/GlobalLoader.md +0 -97
  89. package/components/Group/Group.md +0 -19
  90. package/components/Hint/Hint.md +0 -86
  91. package/components/Input/Input.md +0 -86
  92. package/components/Kebab/Kebab.md +0 -306
  93. package/components/Link/Link.md +0 -182
  94. package/components/Loader/Loader.md +0 -33
  95. package/components/MaskedInput/MaskedInput.md +0 -114
  96. package/components/MenuFooter/MenuFooter.md +0 -27
  97. package/components/MenuHeader/MenuHeader.md +0 -35
  98. package/components/MenuItem/MenuItem.md +0 -139
  99. package/components/MenuSeparator/MenuSeparator.md +0 -14
  100. package/components/MiniModal/MiniModal.md +0 -231
  101. package/components/Modal/Modal.md +0 -56
  102. package/components/Paging/Paging.md +0 -57
  103. package/components/PasswordInput/PasswordInput.md +0 -29
  104. package/components/Radio/Radio.md +0 -57
  105. package/components/RadioGroup/RadioGroup.md +0 -44
  106. package/components/ResponsiveLayout/ResponsiveLayout.md +0 -75
  107. package/components/ScrollContainer/ScrollContainer.md +0 -224
  108. package/components/Select/Select.md +0 -113
  109. package/components/SidePage/SidePage.md +0 -65
  110. package/components/SingleToast/SingleToast.md +0 -36
  111. package/components/Spinner/Spinner.md +0 -36
  112. package/components/Sticky/Sticky.md +0 -28
  113. package/components/Switcher/Switcher.md +0 -111
  114. package/components/Tabs/Tab.md +0 -73
  115. package/components/Tabs/Tabs.md +0 -54
  116. package/components/Textarea/Textarea.md +0 -58
  117. package/components/Toast/Toast.md +0 -69
  118. package/components/Toggle/Toggle.md +0 -110
  119. package/components/Token/Token.md +0 -48
  120. package/components/TokenInput/TokenInput.md +0 -277
  121. package/components/Tooltip/Tooltip.md +0 -322
  122. package/components/TooltipMenu/TooltipMenu.md +0 -241
  123. package/internal/DataTids/DATATIDS.md +0 -12
  124. package/internal/DataTids/DataTids/DataTids.js +0 -69
  125. package/internal/DataTids/DataTids/DataTids.js.map +0 -1
  126. package/internal/DataTids/DataTids/package.json +0 -6
  127. package/internal/DataTids/DataTids.d.ts +0 -12
  128. package/internal/DataTids/DataTids.styles/DataTids.styles.js +0 -20
  129. package/internal/DataTids/DataTids.styles/DataTids.styles.js.map +0 -1
  130. package/internal/DataTids/DataTids.styles/package.json +0 -6
  131. package/internal/DataTids/DataTids.styles.d.ts +0 -7
  132. package/internal/DataTids/componentsDataTids/componentsDataTids.js +0 -12
  133. package/internal/DataTids/componentsDataTids/componentsDataTids.js.map +0 -1
  134. package/internal/DataTids/componentsDataTids/package.json +0 -6
  135. package/internal/DataTids/componentsDataTids.d.ts +0 -5
  136. package/internal/ThemePlayground/Playground.md +0 -7
  137. package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +0 -64
  138. package/lib/locale/LOCALECONTEXT.md +0 -222
  139. 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
- ```