@skbkontur/react-ui 0.0.0-a5ba2462c5 → 0.0.0-a6f09fbded

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 (246) hide show
  1. package/CHANGELOG.md +0 -30
  2. package/cjs/components/Autocomplete/Autocomplete.md +113 -0
  3. package/cjs/components/Button/Button.md +261 -0
  4. package/cjs/components/Calendar/Calendar.md +276 -0
  5. package/cjs/components/Calendar/CalendarDay.md +70 -0
  6. package/cjs/components/Center/Center.md +26 -0
  7. package/cjs/components/Checkbox/Checkbox.md +171 -0
  8. package/cjs/components/ComboBox/ComboBox.d.ts +11 -5
  9. package/cjs/components/ComboBox/ComboBox.js +10 -1
  10. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  11. package/cjs/components/ComboBox/ComboBox.md +574 -0
  12. package/cjs/components/CurrencyInput/CurrencyInput.md +39 -0
  13. package/cjs/components/CurrencyLabel/CurrencyLabel.js +2 -2
  14. package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
  15. package/cjs/components/CurrencyLabel/CurrencyLabel.md +29 -0
  16. package/cjs/components/DateInput/DateInput.md +111 -0
  17. package/cjs/components/DatePicker/DatePicker.md +368 -0
  18. package/cjs/components/Dropdown/Dropdown.md +45 -0
  19. package/cjs/components/DropdownMenu/DropdownMenu.md +290 -0
  20. package/cjs/components/FileUploader/FileUploader.md +131 -0
  21. package/cjs/components/FxInput/FxInput.md +31 -0
  22. package/cjs/components/Gapped/Gapped.md +44 -0
  23. package/cjs/components/GlobalLoader/GlobalLoader.md +97 -0
  24. package/cjs/components/Group/Group.md +19 -0
  25. package/cjs/components/Hint/Hint.md +86 -0
  26. package/cjs/components/Input/Input.md +86 -0
  27. package/cjs/components/Input/InputLayout/InputLayout.d.ts +1 -0
  28. package/cjs/components/Input/InputLayout/InputLayout.js +4 -2
  29. package/cjs/components/Input/InputLayout/InputLayout.js.map +1 -1
  30. package/cjs/components/Kebab/Kebab.md +306 -0
  31. package/cjs/components/Link/Link.md +182 -0
  32. package/cjs/components/Loader/Loader.md +33 -0
  33. package/cjs/components/MaskedInput/MaskedInput.d.ts +0 -8
  34. package/cjs/components/MaskedInput/MaskedInput.js +2 -23
  35. package/cjs/components/MaskedInput/MaskedInput.js.map +1 -1
  36. package/cjs/components/MaskedInput/MaskedInput.md +114 -0
  37. package/cjs/components/MenuFooter/MenuFooter.md +27 -0
  38. package/cjs/components/MenuHeader/MenuHeader.md +35 -0
  39. package/cjs/components/MenuItem/MenuItem.md +139 -0
  40. package/cjs/components/MenuSeparator/MenuSeparator.md +14 -0
  41. package/cjs/components/MiniModal/MiniModal.md +231 -0
  42. package/cjs/components/Modal/Modal.md +56 -0
  43. package/cjs/components/Paging/Paging.md +57 -0
  44. package/cjs/components/PasswordInput/PasswordInput.md +29 -0
  45. package/cjs/components/Radio/Radio.md +57 -0
  46. package/cjs/components/RadioGroup/RadioGroup.md +44 -0
  47. package/cjs/components/ResponsiveLayout/ResponsiveLayout.md +75 -0
  48. package/cjs/components/ScrollContainer/ScrollContainer.md +224 -0
  49. package/cjs/components/Select/Select.md +113 -0
  50. package/cjs/components/SidePage/SidePage.md +65 -0
  51. package/cjs/components/SingleToast/SingleToast.md +36 -0
  52. package/cjs/components/Spinner/Spinner.md +36 -0
  53. package/cjs/components/Sticky/Sticky.md +28 -0
  54. package/cjs/components/Switcher/Switcher.md +111 -0
  55. package/cjs/components/Tabs/Tab.md +73 -0
  56. package/cjs/components/Tabs/Tabs.md +54 -0
  57. package/cjs/components/Textarea/Textarea.d.ts +6 -1
  58. package/cjs/components/Textarea/Textarea.js +16 -3
  59. package/cjs/components/Textarea/Textarea.js.map +1 -1
  60. package/cjs/components/Textarea/Textarea.md +58 -0
  61. package/cjs/components/Textarea/Textarea.styles.js +2 -1
  62. package/cjs/components/Textarea/Textarea.styles.js.map +1 -1
  63. package/cjs/components/Toast/Toast.md +69 -0
  64. package/cjs/components/Toggle/Toggle.md +110 -0
  65. package/cjs/components/Token/Token.md +48 -0
  66. package/cjs/components/TokenInput/TokenInput.md +277 -0
  67. package/cjs/components/Tooltip/Tooltip.d.ts +1 -1
  68. package/cjs/components/Tooltip/Tooltip.js +6 -8
  69. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  70. package/cjs/components/Tooltip/Tooltip.md +322 -0
  71. package/cjs/components/TooltipMenu/TooltipMenu.md +241 -0
  72. package/cjs/internal/ClearCrossIcon/ClearCrossIcon.d.ts +1 -0
  73. package/cjs/internal/ClearCrossIcon/ClearCrossIcon.js +16 -7
  74. package/cjs/internal/ClearCrossIcon/ClearCrossIcon.js.map +1 -1
  75. package/cjs/internal/ClearCrossIcon/ClearCrossIcon.styles.d.ts +3 -0
  76. package/cjs/internal/ClearCrossIcon/ClearCrossIcon.styles.js +27 -9
  77. package/cjs/internal/ClearCrossIcon/ClearCrossIcon.styles.js.map +1 -1
  78. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +7 -6
  79. package/cjs/internal/CustomComboBox/ComboBoxView.js +2 -7
  80. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  81. package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +6 -5
  82. package/cjs/internal/CustomComboBox/CustomComboBox.js +1 -3
  83. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  84. package/cjs/internal/CustomComboBox/getComboBoxTheme.d.ts +2 -1
  85. package/cjs/internal/CustomComboBox/getComboBoxTheme.js +10 -7
  86. package/cjs/internal/CustomComboBox/getComboBoxTheme.js.map +1 -1
  87. package/cjs/internal/DataTids/DATATIDS.md +12 -0
  88. package/cjs/internal/DataTids/DataTids.d.ts +12 -0
  89. package/cjs/internal/DataTids/DataTids.js +50 -0
  90. package/cjs/internal/DataTids/DataTids.js.map +1 -0
  91. package/cjs/internal/DataTids/DataTids.styles.d.ts +7 -0
  92. package/cjs/internal/DataTids/DataTids.styles.js +42 -0
  93. package/cjs/internal/DataTids/DataTids.styles.js.map +1 -0
  94. package/cjs/internal/DataTids/componentsDataTids.d.ts +5 -0
  95. package/cjs/internal/DataTids/componentsDataTids.js +15 -0
  96. package/cjs/internal/DataTids/componentsDataTids.js.map +1 -0
  97. package/cjs/internal/InputLikeText/InputLikeText.styles.d.ts +1 -0
  98. package/cjs/internal/InputLikeText/InputLikeText.styles.js +12 -4
  99. package/cjs/internal/InputLikeText/InputLikeText.styles.js.map +1 -1
  100. package/cjs/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.d.ts +37 -0
  101. package/cjs/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.js +235 -0
  102. package/cjs/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.js.map +1 -0
  103. package/cjs/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.styles.d.ts +3 -0
  104. package/cjs/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.styles.js +10 -0
  105. package/cjs/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.styles.js.map +1 -0
  106. package/cjs/internal/ThemePlayground/Playground.md +7 -0
  107. package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  108. package/cjs/internal/themes/BasicTheme.d.ts +2 -0
  109. package/cjs/internal/themes/BasicTheme.js +11 -6
  110. package/cjs/internal/themes/BasicTheme.js.map +1 -1
  111. package/cjs/internal/themes/DarkTheme5_4.js +10 -3
  112. package/cjs/internal/themes/DarkTheme5_4.js.map +1 -1
  113. package/cjs/internal/themes/LightTheme5_4.js +10 -3
  114. package/cjs/internal/themes/LightTheme5_4.js.map +1 -1
  115. package/cjs/internal/themes/consts.d.ts +7 -0
  116. package/cjs/internal/themes/consts.js +7 -0
  117. package/cjs/internal/themes/consts.js.map +1 -0
  118. package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +64 -0
  119. package/cjs/lib/locale/LOCALECONTEXT.md +222 -0
  120. package/cjs/lib/theming/ThemeContext.md +265 -0
  121. package/components/Autocomplete/Autocomplete.md +113 -0
  122. package/components/Button/Button.md +261 -0
  123. package/components/Calendar/Calendar.md +276 -0
  124. package/components/Calendar/CalendarDay.md +70 -0
  125. package/components/Center/Center.md +26 -0
  126. package/components/Checkbox/Checkbox.md +171 -0
  127. package/components/ComboBox/ComboBox/ComboBox.js +2 -1
  128. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  129. package/components/ComboBox/ComboBox.d.ts +11 -5
  130. package/components/ComboBox/ComboBox.md +574 -0
  131. package/components/CurrencyInput/CurrencyInput.md +39 -0
  132. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +1 -1
  133. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
  134. package/components/CurrencyLabel/CurrencyLabel.md +29 -0
  135. package/components/DateInput/DateInput.md +111 -0
  136. package/components/DatePicker/DatePicker.md +368 -0
  137. package/components/Dropdown/Dropdown.md +45 -0
  138. package/components/DropdownMenu/DropdownMenu.md +290 -0
  139. package/components/FileUploader/FileUploader.md +131 -0
  140. package/components/FxInput/FxInput.md +31 -0
  141. package/components/Gapped/Gapped.md +44 -0
  142. package/components/GlobalLoader/GlobalLoader.md +97 -0
  143. package/components/Group/Group.md +19 -0
  144. package/components/Hint/Hint.md +86 -0
  145. package/components/Input/Input.md +86 -0
  146. package/components/Input/InputLayout/InputLayout/InputLayout.js +5 -2
  147. package/components/Input/InputLayout/InputLayout/InputLayout.js.map +1 -1
  148. package/components/Input/InputLayout/InputLayout.d.ts +1 -0
  149. package/components/Kebab/Kebab.md +306 -0
  150. package/components/Link/Link.md +182 -0
  151. package/components/Loader/Loader.md +33 -0
  152. package/components/MaskedInput/MaskedInput/MaskedInput.js +1 -11
  153. package/components/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
  154. package/components/MaskedInput/MaskedInput.d.ts +0 -8
  155. package/components/MaskedInput/MaskedInput.md +114 -0
  156. package/components/MenuFooter/MenuFooter.md +27 -0
  157. package/components/MenuHeader/MenuHeader.md +35 -0
  158. package/components/MenuItem/MenuItem.md +139 -0
  159. package/components/MenuSeparator/MenuSeparator.md +14 -0
  160. package/components/MiniModal/MiniModal.md +231 -0
  161. package/components/Modal/Modal.md +56 -0
  162. package/components/Paging/Paging.md +57 -0
  163. package/components/PasswordInput/PasswordInput.md +29 -0
  164. package/components/Radio/Radio.md +57 -0
  165. package/components/RadioGroup/RadioGroup.md +44 -0
  166. package/components/ResponsiveLayout/ResponsiveLayout.md +75 -0
  167. package/components/ScrollContainer/ScrollContainer.md +224 -0
  168. package/components/Select/Select.md +113 -0
  169. package/components/SidePage/SidePage.md +65 -0
  170. package/components/SingleToast/SingleToast.md +36 -0
  171. package/components/Spinner/Spinner.md +36 -0
  172. package/components/Sticky/Sticky.md +28 -0
  173. package/components/Switcher/Switcher.md +111 -0
  174. package/components/Tabs/Tab.md +73 -0
  175. package/components/Tabs/Tabs.md +54 -0
  176. package/components/Textarea/Textarea/Textarea.js +11 -2
  177. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  178. package/components/Textarea/Textarea.d.ts +6 -1
  179. package/components/Textarea/Textarea.md +58 -0
  180. package/components/Textarea/Textarea.styles/Textarea.styles.js +1 -1
  181. package/components/Textarea/Textarea.styles/Textarea.styles.js.map +1 -1
  182. package/components/Toast/Toast.md +69 -0
  183. package/components/Toggle/Toggle.md +110 -0
  184. package/components/Token/Token.md +48 -0
  185. package/components/TokenInput/TokenInput.md +277 -0
  186. package/components/Tooltip/Tooltip/Tooltip.js +4 -7
  187. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  188. package/components/Tooltip/Tooltip.d.ts +1 -1
  189. package/components/Tooltip/Tooltip.md +322 -0
  190. package/components/TooltipMenu/TooltipMenu.md +241 -0
  191. package/internal/ClearCrossIcon/ClearCrossIcon/ClearCrossIcon.js +21 -7
  192. package/internal/ClearCrossIcon/ClearCrossIcon/ClearCrossIcon.js.map +1 -1
  193. package/internal/ClearCrossIcon/ClearCrossIcon.d.ts +1 -0
  194. package/internal/ClearCrossIcon/ClearCrossIcon.styles/ClearCrossIcon.styles.js +14 -5
  195. package/internal/ClearCrossIcon/ClearCrossIcon.styles/ClearCrossIcon.styles.js.map +1 -1
  196. package/internal/ClearCrossIcon/ClearCrossIcon.styles.d.ts +3 -0
  197. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +44 -51
  198. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  199. package/internal/CustomComboBox/ComboBoxView.d.ts +7 -6
  200. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +3 -5
  201. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  202. package/internal/CustomComboBox/CustomComboBox.d.ts +6 -5
  203. package/internal/CustomComboBox/getComboBoxTheme/getComboBoxTheme.js +5 -3
  204. package/internal/CustomComboBox/getComboBoxTheme/getComboBoxTheme.js.map +1 -1
  205. package/internal/CustomComboBox/getComboBoxTheme.d.ts +2 -1
  206. package/internal/DataTids/DATATIDS.md +12 -0
  207. package/internal/DataTids/DataTids/DataTids.js +69 -0
  208. package/internal/DataTids/DataTids/DataTids.js.map +1 -0
  209. package/internal/DataTids/DataTids/package.json +6 -0
  210. package/internal/DataTids/DataTids.d.ts +12 -0
  211. package/internal/DataTids/DataTids.styles/DataTids.styles.js +20 -0
  212. package/internal/DataTids/DataTids.styles/DataTids.styles.js.map +1 -0
  213. package/internal/DataTids/DataTids.styles/package.json +6 -0
  214. package/internal/DataTids/DataTids.styles.d.ts +7 -0
  215. package/internal/DataTids/componentsDataTids/componentsDataTids.js +12 -0
  216. package/internal/DataTids/componentsDataTids/componentsDataTids.js.map +1 -0
  217. package/internal/DataTids/componentsDataTids/package.json +6 -0
  218. package/internal/DataTids/componentsDataTids.d.ts +5 -0
  219. package/internal/InputLikeText/InputLikeText.styles/InputLikeText.styles.js +7 -4
  220. package/internal/InputLikeText/InputLikeText.styles/InputLikeText.styles.js.map +1 -1
  221. package/internal/InputLikeText/InputLikeText.styles.d.ts +1 -0
  222. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout/InternalTextareaWithLayout.js +249 -0
  223. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout/InternalTextareaWithLayout.js.map +1 -0
  224. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout/package.json +6 -0
  225. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.d.ts +37 -0
  226. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.styles/InternalTextareaWithLayout.styles.js +8 -0
  227. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.styles/InternalTextareaWithLayout.styles.js.map +1 -0
  228. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.styles/package.json +6 -0
  229. package/internal/InternalTextareaWithLayout/InternalTextareaWithLayout.styles.d.ts +3 -0
  230. package/internal/ThemePlayground/Playground.md +7 -0
  231. package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  232. package/internal/themes/BasicTheme/BasicTheme.js +4 -4
  233. package/internal/themes/BasicTheme/BasicTheme.js.map +1 -1
  234. package/internal/themes/BasicTheme.d.ts +2 -0
  235. package/internal/themes/DarkTheme5_4/DarkTheme5_4.js +4 -2
  236. package/internal/themes/DarkTheme5_4/DarkTheme5_4.js.map +1 -1
  237. package/internal/themes/LightTheme5_4/LightTheme5_4.js +4 -2
  238. package/internal/themes/LightTheme5_4/LightTheme5_4.js.map +1 -1
  239. package/internal/themes/consts/consts.js +7 -0
  240. package/internal/themes/consts/consts.js.map +1 -0
  241. package/internal/themes/consts/package.json +6 -0
  242. package/internal/themes/consts.d.ts +7 -0
  243. package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +64 -0
  244. package/lib/locale/LOCALECONTEXT.md +222 -0
  245. package/lib/theming/ThemeContext.md +265 -0
  246. package/package.json +6 -1
@@ -0,0 +1,75 @@
1
+ ### Вспомогательный интерфейс
2
+ ```ts static
3
+ interface ResponsiveLayoutFlags {
4
+ isMobile: boolean;
5
+ }
6
+ ```
7
+
8
+ ### Компонент ожидает в себя функцию, в которую аргументом передается объект с флагом лэйаута.
9
+
10
+ ```jsx static
11
+ import { ResponsiveLayout } from '@skbkontur/react-ui';
12
+
13
+ class SomeComponent {
14
+ public render() {
15
+ return (
16
+ <ResponsiveLayout>
17
+ {
18
+ ({ isMobile }) => {
19
+ /* ... */
20
+ }
21
+ }
22
+ </ResponsiveLayout>
23
+ )
24
+ }
25
+ }
26
+ ```
27
+
28
+ ### Также существует проп `onLayoutChange`, который вызывает переданный в него коллбэк при изменении лэйаута. Аргументом передается объект с флагом.
29
+
30
+ ```jsx static
31
+ import { ResponsiveLayout } from '@skbkontur/react-ui';
32
+
33
+ class SomeComponent {
34
+ public render() {
35
+ return (
36
+ <div>
37
+ <ResponsiveLayout onLayoutChange={({ isMobile }) => console.log(isMobile)} />
38
+ </div>
39
+ )
40
+ }
41
+ }
42
+ ```
43
+
44
+ ### В компонент можно передать проп `customMediaQueries: MediaQueriesType`, который позволяет кастомизировать возвращаемые флаги:
45
+ ```ts static
46
+ type MediaQueriesType = Record<string, string>;
47
+ ```
48
+ 1. Без кастомизации есть только флаг isMobile
49
+ 2. Поля из `customMediaQueries` дополняют список возвращаемых флагов в `ResponsiveLayoutFlags`
50
+ 3. При добавлении кастомного флага isMobile, значение дефолтного флага перезаписывается в пользу кастомного
51
+
52
+ ```jsx static
53
+ import { ResponsiveLayout } from '@skbkontur/react-ui';
54
+
55
+ const customMediaQueries = {
56
+ isTablet: '(min-width: 577px)',
57
+ isDesktop: '(min-width: 1280px)',
58
+ };
59
+
60
+ class SomeComponent {
61
+ public render() {
62
+ return (
63
+ <ResponsiveLayout customMediaQueries={customMediaQueries}>
64
+ {
65
+ ({ isMobile, isTablet, isDesktop }) => {
66
+ /* ... */
67
+ }
68
+ }
69
+ </ResponsiveLayout>
70
+ )
71
+ }
72
+ }
73
+ ```
74
+
75
+ Как альтернативу можно использовать хук [useResponsiveLayout](#/Mobiles).
@@ -0,0 +1,224 @@
1
+ ### Базовый пример
2
+ ```jsx harmony
3
+ function items(count) {
4
+ var items = [];
5
+ for (var i = 0; i < count; ++i) {
6
+ items.push(i);
7
+ }
8
+ return items;
9
+ }
10
+
11
+ var divStyle = {
12
+ display: 'inline-block',
13
+ border: '1px solid #f99',
14
+ height: 200,
15
+ margin: 1,
16
+ position: 'relative',
17
+ verticalAlign: 'top',
18
+ width: 200,
19
+ };
20
+ var absStyle = {
21
+ border: '1px solid',
22
+ boxSizing: 'border-box',
23
+ position: 'absolute',
24
+ width: '100%',
25
+ };
26
+
27
+ <div>
28
+ <div style={divStyle}>
29
+ <ScrollContainer>
30
+ {items(20).map((i) => (
31
+ <div key={i}>{i}</div>
32
+ ))}
33
+ </ScrollContainer>
34
+ </div>
35
+ <div style={{ ...divStyle, background: '#888' }}>
36
+ <ScrollContainer invert>
37
+ {items(20).map((i) => (
38
+ <div key={i}>{i}</div>
39
+ ))}
40
+ </ScrollContainer>
41
+ </div>
42
+ <div style={divStyle}>
43
+ <div style={absStyle}>
44
+ <ScrollContainer>
45
+ {items(3).map((i) => (
46
+ <div key={i}>{i}</div>
47
+ ))}
48
+ </ScrollContainer>
49
+ </div>
50
+ </div>
51
+ <div style={divStyle}>
52
+ <div style={absStyle}>
53
+ <ScrollContainer maxHeight={150}>
54
+ {items(30).map((i) => (
55
+ <div key={i}>{i}</div>
56
+ ))}
57
+ </ScrollContainer>
58
+ </div>
59
+ </div>
60
+ </div>;
61
+ ```
62
+
63
+ ### Горизонтальный scrollbar
64
+
65
+ ```jsx harmony
66
+ var divStyle = {
67
+ display: 'inline-block',
68
+ border: '1px solid #f99',
69
+ height: 200,
70
+ margin: 1,
71
+ position: 'relative',
72
+ verticalAlign: 'top',
73
+ width: 200,
74
+ };
75
+ var absStyle = {
76
+ border: '1px solid',
77
+ boxSizing: 'border-box',
78
+ position: 'absolute',
79
+ width: '100%',
80
+ };
81
+
82
+ function items(count) {
83
+ var items = [];
84
+ for (var i = 0; i < count; ++i) {
85
+ items.push(i);
86
+ }
87
+ return items;
88
+ }
89
+
90
+ var containerStyle = {
91
+ display: 'inline-block',
92
+ border: '1px solid #f99',
93
+ height: 200,
94
+ margin: 1,
95
+ width: 200,
96
+ };
97
+
98
+ var innerStyle = {
99
+ width: 400,
100
+ };
101
+
102
+ <div>
103
+ <div style={divStyle}>
104
+ <ScrollContainer>
105
+ {items(5).map((i) => (
106
+ <div style={innerStyle} key={i}>
107
+ {i}
108
+ </div>
109
+ ))}
110
+ </ScrollContainer>
111
+ </div>
112
+ <div style={{ ...divStyle, background: '#888' }}>
113
+ <ScrollContainer invert>
114
+ {items(20).map((i) => (
115
+ <div style={innerStyle} key={i}>
116
+ {i}
117
+ </div>
118
+ ))}
119
+ </ScrollContainer>
120
+ </div>
121
+ <div style={divStyle}>
122
+ <div style={absStyle}>
123
+ <ScrollContainer maxHeight={150}>
124
+ {items(3).map((i) => (
125
+ <div style={innerStyle} key={i}>
126
+ {i}
127
+ </div>
128
+ ))}
129
+ </ScrollContainer>
130
+ </div>
131
+ </div>
132
+ <div style={divStyle}>
133
+ <div style={absStyle}>
134
+ <ScrollContainer maxHeight={150} maxWidth={200}>
135
+ {items(30).map((i) => (
136
+ <div style={innerStyle} key={i}>
137
+ {i}
138
+ </div>
139
+ ))}
140
+ </ScrollContainer>
141
+ </div>
142
+ </div>
143
+ </div>;
144
+ ```
145
+
146
+ ### Смещение скроллбара
147
+
148
+ ```jsx harmony
149
+ const containerStyle = {
150
+ display: 'inline-block',
151
+ border: '1px solid #f99',
152
+ height: 200,
153
+ margin: 1,
154
+ width: 200,
155
+ };
156
+
157
+ const offsetY = {
158
+ top: 8,
159
+ bottom: 8,
160
+ right: 8,
161
+ };
162
+
163
+ <div style={containerStyle}>
164
+ <ScrollContainer offsetY={offsetY}>
165
+ {Array(30).fill(null).map((_,i) => (
166
+ <div key={i}>
167
+ {i}
168
+ </div>
169
+ ))}
170
+ </ScrollContainer>
171
+ </div>
172
+ ```
173
+
174
+ ### Скрытие если нет активности пользователя
175
+ Проп `showScrollBar` со значением `scroll` скрывает скроллбар при отсутствии активности пользователя. Задержку на скрытие скроллбара можно регулировать пропом `hideScrollBarDelay` (по умолчанию 500ms)
176
+
177
+ ```jsx harmony
178
+ var divStyle = {
179
+ display: 'inline-block',
180
+ border: '1px solid #f99',
181
+ height: 200,
182
+ margin: 1,
183
+ position: 'relative',
184
+ verticalAlign: 'top',
185
+ width: 200,
186
+ };
187
+ <div style={divStyle}>
188
+ <ScrollContainer showScrollBar={'scroll'}>
189
+ {Array(30).fill(null).map((_,i) => (
190
+ <div key={i}>
191
+ {i}
192
+ </div>
193
+ ))}
194
+ </ScrollContainer>
195
+ </div>
196
+ ```
197
+
198
+ ### Показ скролбара при наведении
199
+ Проп `showScrollBar` со значением `hover` позволяет показывать скроллбар только когда курсор находится над скролл контейнером
200
+
201
+ ```jsx harmony
202
+ var divStyle = {
203
+ display: 'inline-block',
204
+ border: '1px solid #f99',
205
+ height: 200,
206
+ margin: 1,
207
+ position: 'relative',
208
+ verticalAlign: 'top',
209
+ width: 200,
210
+ };
211
+
212
+
213
+ <span>
214
+ <div style={divStyle}>
215
+ <ScrollContainer showScrollBar={'hover'}>
216
+ {Array(30).fill(null).map((_,i) => (
217
+ <div key={i}>
218
+ {i}
219
+ </div>
220
+ ))}
221
+ </ScrollContainer>
222
+ </div>
223
+ </span>
224
+ ```
@@ -0,0 +1,113 @@
1
+ ### Базовый пример
2
+
3
+ ```jsx harmony
4
+ const [value, setValue] = React.useState();
5
+
6
+ const items = [Select.staticElement(() => <Select.Item>Not
7
+ selectable</Select.Item>), 'One', 'Two', 'Three', Select.SEP, 'Four'];
8
+
9
+ <Select items={items} value={value} onValueChange={setValue}/>;
10
+ ```
11
+
12
+ ### Запрет выделения и выбора
13
+ В пункты меню можно передать проп `isNotSelectable`, чтобы запретить выделение и выбор этого пункта меню
14
+
15
+ ```jsx harmony
16
+
17
+ const [value, setValue] = React.useState();
18
+
19
+ const items = [<Select.Item isNotSelectable>Not selectable</Select.Item>, 'One', 'Two', 'Three', Select.SEP, 'Four'];
20
+
21
+ <Select items={items} value={value} onValueChange={setValue} />
22
+ ```
23
+
24
+ ### Очистка значения
25
+ Очистить значение в `Select`'е можно только с помощью `null`
26
+ ```jsx harmony
27
+ import { Button, Group } from '@skbkontur/react-ui';
28
+
29
+ const [value, setValue] = React.useState();
30
+
31
+ const items = ['One', 'Two', 'Three', 'Four'];
32
+
33
+ <Group>
34
+ <Select items={items} value={value} onValueChange={setValue} />
35
+ <Button onClick={() => setValue(null)}>Очистить</Button>
36
+ </Group>
37
+ ```
38
+
39
+ ### Поле поиска
40
+
41
+ ```jsx harmony
42
+ const [value, setValue] = React.useState();
43
+
44
+ const items = ['One', 'Two', 'Three', Select.SEP, 'Four'];
45
+
46
+ <Select items={items} value={value} onValueChange={setValue} search />;
47
+ ```
48
+
49
+ ### Пример использования пропа `_renderButton`:
50
+
51
+ ```jsx harmony
52
+ import { Link } from '@skbkontur/react-ui';
53
+ import { People3Icon16Regular } from '@skbkontur/icons/icons/People3Icon/People3Icon16Regular';
54
+
55
+ const [value, setValue] = React.useState();
56
+
57
+ const items = [Select.staticElement(() => <Select.Item>Not
58
+ selectable</Select.Item>), 'One', 'Two', 'Three', Select.SEP, 'Four'];
59
+
60
+ const renderLinkButton = params => {
61
+ const linkProps = {
62
+ disabled: params.disabled,
63
+ icon: <People3Icon16Regular />,
64
+ _button: true,
65
+ _buttonOpened: params.opened,
66
+
67
+ onClick: params.onClick,
68
+ onKeyDown: params.onKeyDown,
69
+ };
70
+
71
+ return <Link {...linkProps}>{params.label}</Link>;
72
+ };
73
+
74
+ <Select
75
+ items={items}
76
+ value={value}
77
+ onValueChange={setValue}
78
+ _renderButton={renderLinkButton}
79
+ />;
80
+ ```
81
+
82
+ ### Локали по умолчанию
83
+
84
+ ```typescript static
85
+ interface SelectLocale {
86
+ placeholder?: React.ReactNode;
87
+ }
88
+
89
+ const ru_RU = {
90
+ placeholder: 'Ничего не выбрано',
91
+ };
92
+
93
+ const en_GB = {
94
+ placeholder: 'Nothing selected',
95
+ };
96
+ ```
97
+
98
+ ### Размер
99
+ ```jsx harmony
100
+ import { Gapped } from '@skbkontur/react-ui';
101
+
102
+ const [valueSmall, setValueSmall] = React.useState('Маленький');
103
+ const [valueMedium, setValueMedium] = React.useState('Средний');
104
+ const [valueLarge, setValueLarge] = React.useState('Большой');
105
+
106
+ const items = ['Маленький', 'Средний', 'Большой'];
107
+
108
+ <Gapped vertical>
109
+ <Select items={items} value={valueSmall} onValueChange={setValueSmall} size={'small'} />
110
+ <Select items={items} value={valueMedium} onValueChange={setValueMedium} size={'medium'} />
111
+ <Select items={items} value={valueLarge} onValueChange={setValueLarge} size={'large'} />
112
+ </Gapped>
113
+ ```
@@ -0,0 +1,65 @@
1
+ ### Базовый пример
2
+ ```jsx harmony
3
+ import { Button } from '@skbkontur/react-ui';
4
+
5
+ const [opened, setOpened] = React.useState(false);
6
+
7
+ function renderSidePage() {
8
+ return (
9
+ <SidePage onClose={close} blockBackground>
10
+ <SidePage.Header>Title</SidePage.Header>
11
+ <SidePage.Body>
12
+ <div
13
+ style={{
14
+ background: `repeating-linear-gradient(
15
+ 60deg,
16
+ #808080,
17
+ #808080 20px,
18
+ #d3d3d3 20px,
19
+ #d3d3d3 40px
20
+ )`,
21
+ height: 600,
22
+ padding: '20px 0',
23
+ }}
24
+ >
25
+ <SidePage.Container>
26
+ <p>Use rxjs operators with react hooks</p>
27
+ </SidePage.Container>
28
+ </div>
29
+ </SidePage.Body>
30
+ <SidePage.Footer panel>
31
+ <Button onClick={close}>Close</Button>
32
+ </SidePage.Footer>
33
+ </SidePage>
34
+ );
35
+ }
36
+
37
+ function open() {
38
+ setOpened(true);
39
+ }
40
+
41
+ function close() {
42
+ setOpened(false);
43
+ }
44
+
45
+ <div>
46
+ {opened && renderSidePage()}
47
+ <Button onClick={open}>Open</Button>
48
+ </div>;
49
+ ```
50
+
51
+ ### Локали по умолчанию
52
+
53
+ ```typescript static
54
+ interface SidePageLocale {
55
+ closeButtonAriaLabel?: string;
56
+ }
57
+
58
+ const ru_RU = {
59
+ closeButtonAriaLabel: 'Закрыть модальное окно'
60
+ }
61
+
62
+ const en_GB = {
63
+ closeButtonAriaLabel: 'Close modal window'
64
+ }
65
+ ```
@@ -0,0 +1,36 @@
1
+ `<SingleToast>` можно добавить в единственном месте в проекте, а статические методы будут всегда использовать последний отрендеренный экземпляр `<Toast>`.
2
+
3
+ _На внешний вид этого примера влияет следующий пример_
4
+ ### Базовый пример
5
+ ```jsx harmony
6
+ import { Button, SingleToast } from '@skbkontur/react-ui';
7
+
8
+ <div>
9
+ <SingleToast />
10
+ <Button onClick={() => SingleToast.push('Статический тост')}>
11
+ Показать статический тост
12
+ </Button>
13
+ </div>
14
+ ```
15
+
16
+ ### Кастомизация
17
+ `<SingleToast>` можно кастомизировать с помощью переменных темы для `toast`.
18
+ ```jsx harmony
19
+ import { Button, SingleToast, ThemeContext, ThemeFactory, THEME_2022 } from '@skbkontur/react-ui';
20
+
21
+ const rand = () => "Пример жёлтого тоста № " + Math.round(Math.random() * 100).toString();
22
+
23
+ const pushToast = () => {
24
+ SingleToast.push(rand(), {
25
+ label: "Cancel",
26
+ handler: () => SingleToast.push("Canceled")
27
+ });
28
+ };
29
+
30
+ <div>
31
+ <SingleToast theme={{ toastBg: '#f1c40f' }} />
32
+ <Button onClick={pushToast}>
33
+ Показать тост с жёлтым фоном
34
+ </Button>
35
+ </div>
36
+ ```
@@ -0,0 +1,36 @@
1
+ ### Базовый пример
2
+ ```jsx harmony
3
+ import { Gapped, Spinner } from '@skbkontur/react-ui';
4
+
5
+ const reactNodeCaption = (
6
+ <div>
7
+ <Spinner type="mini" caption={null} /> <span style={{ color: 'tomato', fontSize: '1.3em' }}>З</span>
8
+ агрузка
9
+ </div>
10
+ );
11
+
12
+ <Gapped>
13
+ <Spinner type="big" caption="big" />
14
+ <Spinner type="normal" caption="normal" />
15
+ <Spinner type="mini" caption="mini" />
16
+ <Spinner type="mini" dimmed caption="mini dimmed" />
17
+ <Spinner type="big" caption={reactNodeCaption} />
18
+ <Spinner type="big" caption="custom" width={8} color={'#538A1B'}/>
19
+ </Gapped>;
20
+ ```
21
+
22
+ ### Локали по умолчанию
23
+
24
+ ```typescript static
25
+ interface SpinnerLocale {
26
+ loading?: React.ReactNode;
27
+ }
28
+
29
+ const ru_RU = {
30
+ loading: 'Загрузка',
31
+ };
32
+
33
+ const en_GB = {
34
+ loading: 'Loading',
35
+ };
36
+ ```
@@ -0,0 +1,28 @@
1
+ ### Базовый пример
2
+ ```jsx harmony
3
+ const style = {
4
+ padding: 10,
5
+ background: '#f99',
6
+ };
7
+
8
+ let stop = null;
9
+
10
+ <div>
11
+ <Sticky side="top" getStop={() => stop}>
12
+ {fixed => (
13
+ <div style={style}>
14
+ Small loan of a million dollars
15
+ {fixed ? ' fixed' : <div>not fixed</div>}
16
+ </div>
17
+ )}
18
+ </Sticky>
19
+ Great
20
+ <div style={{ height: 1000 }} />
21
+ <div ref={el => (stop = el)} style={{ borderTop: '1px solid' }} />
22
+ <div style={{ height: 1000 }} />
23
+ <Sticky side="bottom" getStop={() => stop} offset={20}>
24
+ <div style={style}>Make America Great Again</div>
25
+ </Sticky>
26
+ <div style={{ height: 100 }} />
27
+ </div>;
28
+ ```
@@ -0,0 +1,111 @@
1
+ ### Базовый пример
2
+ ```jsx harmony
3
+ const [value, setValue] = React.useState();
4
+
5
+ <Switcher
6
+ caption="Switch the switcher"
7
+ items={['One', 'Two', 'Three']}
8
+ value={value}
9
+ onValueChange={setValue}
10
+ />;
11
+ ```
12
+
13
+ ### items в виде объектов
14
+ Случай, когда `items` принимает объект типа `{ label: string, value: string }`
15
+
16
+ ```jsx harmony
17
+ const [value, setValue] = React.useState();
18
+ const items = [
19
+ {
20
+ label: 'One',
21
+ value: '111',
22
+ },
23
+ {
24
+ label: 'Two',
25
+ value: '222',
26
+ },
27
+ {
28
+ label: 'Three',
29
+ value: '333',
30
+ }
31
+ ];
32
+
33
+ <Switcher
34
+ caption="Switch the switcher"
35
+ items={items}
36
+ value={value}
37
+ onValueChange={setValue}
38
+ />;
39
+ ```
40
+
41
+ ### Кастомизация кнопки
42
+ Вариант `items` с полем `buttonProps`, который позволяет кастомизировать кнопку
43
+
44
+ ```jsx harmony
45
+ const [value, setValue] = React.useState();
46
+ const items = [
47
+ {
48
+ label: 'One',
49
+ value: '111',
50
+ buttonProps: {
51
+ 'data-tid': "1-1-1",
52
+ disabled: true,
53
+ }
54
+ },
55
+ {
56
+ label: 'Three',
57
+ value: '333',
58
+ buttonProps: {
59
+ 'data-tid': "1-1-1",
60
+ use: "primary",
61
+ }
62
+ },
63
+ {
64
+ label: 'Two',
65
+ value: '222',
66
+ buttonProps: {
67
+ 'data-tid': "1-1-1",
68
+ arrow: true,
69
+ }
70
+ }
71
+ ];
72
+
73
+ <Switcher
74
+ caption="Switch the switcher"
75
+ items={items}
76
+ value={value}
77
+ onValueChange={setValue}
78
+ />;
79
+ ```
80
+
81
+ ### Кастомизация items
82
+ Пример с методом `renderItem` для кастомизации `items`:
83
+
84
+ ```jsx harmony
85
+ import {Hint, Tooltip} from '@skbkontur/react-ui';
86
+
87
+ const [value, setValue] = React.useState();
88
+ const items = ['One', 'Two', 'Three'];
89
+
90
+ const renderItem = (label, value, buttonProps, renderDefault) => {
91
+ if (value === 'One') {
92
+ return <Hint pos="bottom" text="Подсказка" opened manual>{renderDefault()}</Hint>;
93
+ }
94
+ if (value === 'Three') {
95
+ return (
96
+ <Tooltip pos="right middle" trigger="opened" render={() => 'Тултип'}>
97
+ {renderDefault()}
98
+ </Tooltip>
99
+ );
100
+ }
101
+ return renderDefault();
102
+ }
103
+
104
+ <Switcher
105
+ caption="Switch the switcher"
106
+ items={items}
107
+ value={value}
108
+ onValueChange={setValue}
109
+ renderItem={renderItem}
110
+ />;
111
+ ```