@vkontakte/vkui 4.21.0 → 4.22.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 (248) hide show
  1. package/.cache/.eslintcache +1 -1
  2. package/.cache/.stylelintcache +1 -1
  3. package/.cache/.tsbuildinfo +271 -37
  4. package/.cache/ts/src/components/Avatar/Avatar.d.ts +2 -0
  5. package/.cache/ts/src/components/Cell/Cell.d.ts +11 -0
  6. package/.cache/ts/src/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
  7. package/.cache/ts/src/components/Cell/CellDragger/CellDragger.d.ts +6 -0
  8. package/.cache/ts/src/components/Cell/useDraggable.d.ts +13 -0
  9. package/.cache/ts/src/components/CustomSelect/CustomSelect.d.ts +0 -1
  10. package/.cache/ts/src/components/DropdownIcon/DropdownIcon.d.ts +3 -0
  11. package/.cache/ts/src/components/GridAvatar/GridAvatar.d.ts +9 -0
  12. package/.cache/ts/src/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
  13. package/.cache/ts/src/components/Removable/Removable.d.ts +2 -1
  14. package/.cache/ts/src/components/TabbarItem/TabbarItem.d.ts +3 -1
  15. package/.cache/ts/src/index.d.ts +4 -0
  16. package/dist/cjs/components/ActionSheet/ActionSheet.js +1 -12
  17. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
  18. package/dist/cjs/components/Avatar/Avatar.d.ts +2 -0
  19. package/dist/cjs/components/Avatar/Avatar.js +7 -3
  20. package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
  21. package/dist/cjs/components/CardScroll/CardScroll.js +1 -1
  22. package/dist/cjs/components/CardScroll/CardScroll.js.map +1 -1
  23. package/dist/cjs/components/Cell/Cell.d.ts +11 -0
  24. package/dist/cjs/components/Cell/Cell.js +109 -182
  25. package/dist/cjs/components/Cell/Cell.js.map +1 -1
  26. package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
  27. package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js +50 -0
  28. package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
  29. package/dist/cjs/components/Cell/CellDragger/CellDragger.d.ts +6 -0
  30. package/dist/cjs/components/Cell/CellDragger/CellDragger.js +53 -0
  31. package/dist/cjs/components/Cell/CellDragger/CellDragger.js.map +1 -0
  32. package/dist/cjs/components/Cell/useDraggable.d.ts +13 -0
  33. package/dist/cjs/components/Cell/useDraggable.js +142 -0
  34. package/dist/cjs/components/Cell/useDraggable.js.map +1 -0
  35. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +2 -2
  36. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  37. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +0 -1
  38. package/dist/cjs/components/CustomSelect/CustomSelect.js +2 -3
  39. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  40. package/dist/cjs/components/DropdownIcon/DropdownIcon.d.ts +3 -0
  41. package/dist/cjs/components/DropdownIcon/DropdownIcon.js +37 -0
  42. package/dist/cjs/components/DropdownIcon/DropdownIcon.js.map +1 -0
  43. package/dist/cjs/components/FocusTrap/FocusTrap.js +3 -5
  44. package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
  45. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
  46. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  47. package/dist/cjs/components/GridAvatar/GridAvatar.d.ts +9 -0
  48. package/dist/cjs/components/GridAvatar/GridAvatar.js +61 -0
  49. package/dist/cjs/components/GridAvatar/GridAvatar.js.map +1 -0
  50. package/dist/cjs/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
  51. package/dist/cjs/components/InitialsAvatar/InitialsAvatar.js +64 -0
  52. package/dist/cjs/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
  53. package/dist/cjs/components/NativeSelect/NativeSelect.js +2 -2
  54. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  55. package/dist/cjs/components/Progress/Progress.js +6 -3
  56. package/dist/cjs/components/Progress/Progress.js.map +1 -1
  57. package/dist/cjs/components/Removable/Removable.d.ts +2 -1
  58. package/dist/cjs/components/Removable/Removable.js +20 -10
  59. package/dist/cjs/components/Removable/Removable.js.map +1 -1
  60. package/dist/cjs/components/SelectMimicry/SelectMimicry.js +2 -2
  61. package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
  62. package/dist/cjs/components/Tabbar/Tabbar.js +3 -1
  63. package/dist/cjs/components/Tabbar/Tabbar.js.map +1 -1
  64. package/dist/cjs/components/TabbarItem/TabbarItem.d.ts +3 -1
  65. package/dist/cjs/components/TabbarItem/TabbarItem.js +29 -11
  66. package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
  67. package/dist/cjs/components/View/View.js +53 -42
  68. package/dist/cjs/components/View/View.js.map +1 -1
  69. package/dist/cjs/components/View/ViewInfinite.js +63 -52
  70. package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
  71. package/dist/cjs/index.d.ts +4 -0
  72. package/dist/cjs/index.js +16 -0
  73. package/dist/cjs/index.js.map +1 -1
  74. package/dist/cjs/lib/prefixClass.js +7 -6
  75. package/dist/cjs/lib/prefixClass.js.map +1 -1
  76. package/dist/components/ActionSheet/ActionSheet.js +1 -11
  77. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  78. package/dist/components/Avatar/Avatar.d.ts +2 -0
  79. package/dist/components/Avatar/Avatar.js +4 -2
  80. package/dist/components/Avatar/Avatar.js.map +1 -1
  81. package/dist/components/CardScroll/CardScroll.js +1 -1
  82. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  83. package/dist/components/Cell/Cell.d.ts +11 -0
  84. package/dist/components/Cell/Cell.js +103 -177
  85. package/dist/components/Cell/Cell.js.map +1 -1
  86. package/dist/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
  87. package/dist/components/Cell/CellCheckbox/CellCheckbox.js +31 -0
  88. package/dist/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
  89. package/dist/components/Cell/CellDragger/CellDragger.d.ts +6 -0
  90. package/dist/components/Cell/CellDragger/CellDragger.js +30 -0
  91. package/dist/components/Cell/CellDragger/CellDragger.js.map +1 -0
  92. package/dist/components/Cell/useDraggable.d.ts +13 -0
  93. package/dist/components/Cell/useDraggable.js +126 -0
  94. package/dist/components/Cell/useDraggable.js.map +1 -0
  95. package/dist/components/ChipsSelect/ChipsSelect.js +2 -2
  96. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  97. package/dist/components/CustomSelect/CustomSelect.d.ts +0 -1
  98. package/dist/components/CustomSelect/CustomSelect.js +3 -5
  99. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  100. package/dist/components/DropdownIcon/DropdownIcon.d.ts +3 -0
  101. package/dist/components/DropdownIcon/DropdownIcon.js +19 -0
  102. package/dist/components/DropdownIcon/DropdownIcon.js.map +1 -0
  103. package/dist/components/FocusTrap/FocusTrap.js +3 -5
  104. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  105. package/dist/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
  106. package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  107. package/dist/components/GridAvatar/GridAvatar.d.ts +9 -0
  108. package/dist/components/GridAvatar/GridAvatar.js +41 -0
  109. package/dist/components/GridAvatar/GridAvatar.js.map +1 -0
  110. package/dist/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
  111. package/dist/components/InitialsAvatar/InitialsAvatar.js +46 -0
  112. package/dist/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
  113. package/dist/components/NativeSelect/NativeSelect.js +2 -2
  114. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  115. package/dist/components/Progress/Progress.js +6 -3
  116. package/dist/components/Progress/Progress.js.map +1 -1
  117. package/dist/components/Removable/Removable.d.ts +2 -1
  118. package/dist/components/Removable/Removable.js +20 -11
  119. package/dist/components/Removable/Removable.js.map +1 -1
  120. package/dist/components/SelectMimicry/SelectMimicry.js +2 -2
  121. package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
  122. package/dist/components/Tabbar/Tabbar.js +3 -1
  123. package/dist/components/Tabbar/Tabbar.js.map +1 -1
  124. package/dist/components/TabbarItem/TabbarItem.d.ts +3 -1
  125. package/dist/components/TabbarItem/TabbarItem.js +26 -10
  126. package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
  127. package/dist/components/View/View.js +53 -42
  128. package/dist/components/View/View.js.map +1 -1
  129. package/dist/components/View/ViewInfinite.js +65 -54
  130. package/dist/components/View/ViewInfinite.js.map +1 -1
  131. package/dist/components.css +1 -1
  132. package/dist/components.css.map +1 -1
  133. package/dist/cssm/components/ActionSheet/ActionSheet.js +1 -11
  134. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  135. package/dist/cssm/components/Avatar/Avatar.js +4 -2
  136. package/dist/cssm/components/Avatar/Avatar.js.map +1 -1
  137. package/dist/cssm/components/CardScroll/CardScroll.js +1 -1
  138. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  139. package/dist/cssm/components/Cell/Cell.css +1 -1
  140. package/dist/cssm/components/Cell/Cell.js +103 -177
  141. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  142. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.css +1 -0
  143. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js +32 -0
  144. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
  145. package/dist/cssm/components/Cell/CellDragger/CellDragger.css +1 -0
  146. package/dist/cssm/components/Cell/CellDragger/CellDragger.js +31 -0
  147. package/dist/cssm/components/Cell/CellDragger/CellDragger.js.map +1 -0
  148. package/dist/cssm/components/Cell/useDraggable.js +126 -0
  149. package/dist/cssm/components/Cell/useDraggable.js.map +1 -0
  150. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -2
  151. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  152. package/dist/cssm/components/CustomSelect/CustomSelect.js +3 -5
  153. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  154. package/dist/cssm/components/DropdownIcon/DropdownIcon.css +1 -0
  155. package/dist/cssm/components/DropdownIcon/DropdownIcon.js +20 -0
  156. package/dist/cssm/components/DropdownIcon/DropdownIcon.js.map +1 -0
  157. package/dist/cssm/components/FocusTrap/FocusTrap.js +3 -5
  158. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  159. package/dist/cssm/components/FormItem/FormItem.css +1 -1
  160. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.css +1 -1
  161. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
  162. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  163. package/dist/cssm/components/GridAvatar/GridAvatar.css +1 -0
  164. package/dist/cssm/components/GridAvatar/GridAvatar.js +42 -0
  165. package/dist/cssm/components/GridAvatar/GridAvatar.js.map +1 -0
  166. package/dist/cssm/components/InitialsAvatar/InitialsAvatar.css +1 -0
  167. package/dist/cssm/components/InitialsAvatar/InitialsAvatar.js +52 -0
  168. package/dist/cssm/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
  169. package/dist/cssm/components/NativeSelect/NativeSelect.js +2 -2
  170. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  171. package/dist/cssm/components/Progress/Progress.js +6 -3
  172. package/dist/cssm/components/Progress/Progress.js.map +1 -1
  173. package/dist/cssm/components/Removable/Removable.css +1 -1
  174. package/dist/cssm/components/Removable/Removable.js +20 -11
  175. package/dist/cssm/components/Removable/Removable.js.map +1 -1
  176. package/dist/cssm/components/Select/Select.css +1 -1
  177. package/dist/cssm/components/SelectMimicry/SelectMimicry.js +2 -2
  178. package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
  179. package/dist/cssm/components/SimpleCell/SimpleCell.css +1 -1
  180. package/dist/cssm/components/Tabbar/Tabbar.css +1 -1
  181. package/dist/cssm/components/Tabbar/Tabbar.js +3 -1
  182. package/dist/cssm/components/Tabbar/Tabbar.js.map +1 -1
  183. package/dist/cssm/components/TabbarItem/TabbarItem.css +1 -1
  184. package/dist/cssm/components/TabbarItem/TabbarItem.js +26 -10
  185. package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
  186. package/dist/cssm/components/TabsItem/TabsItem.css +1 -1
  187. package/dist/cssm/components/View/View.js +53 -42
  188. package/dist/cssm/components/View/View.js.map +1 -1
  189. package/dist/cssm/components/View/ViewInfinite.js +65 -54
  190. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  191. package/dist/cssm/index.js +2 -0
  192. package/dist/cssm/index.js.map +1 -1
  193. package/dist/cssm/lib/prefixClass.js +7 -6
  194. package/dist/cssm/lib/prefixClass.js.map +1 -1
  195. package/dist/cssm/styles/components.css +1 -1
  196. package/dist/index.d.ts +4 -0
  197. package/dist/index.js +2 -0
  198. package/dist/index.js.map +1 -1
  199. package/dist/lib/prefixClass.js +7 -6
  200. package/dist/lib/prefixClass.js.map +1 -1
  201. package/dist/vkui.css +1 -1
  202. package/dist/vkui.css.map +1 -1
  203. package/package.json +1 -1
  204. package/src/components/ActionSheet/ActionSheet.tsx +1 -8
  205. package/src/components/Avatar/Avatar.tsx +5 -2
  206. package/src/components/CardScroll/CardScroll.tsx +4 -1
  207. package/src/components/Cell/Cell.css +22 -45
  208. package/src/components/Cell/Cell.tsx +101 -162
  209. package/src/components/Cell/CellCheckbox/CellCheckbox.css +17 -0
  210. package/src/components/Cell/CellCheckbox/CellCheckbox.tsx +42 -0
  211. package/src/components/Cell/CellDragger/CellDragger.css +4 -0
  212. package/src/components/Cell/CellDragger/CellDragger.tsx +40 -0
  213. package/src/components/Cell/Readme.md +89 -51
  214. package/src/components/Cell/useDraggable.tsx +112 -0
  215. package/src/components/ChipsSelect/ChipsSelect.tsx +2 -2
  216. package/src/components/CustomSelect/CustomSelect.tsx +3 -4
  217. package/src/components/DropdownIcon/DropdownIcon.css +3 -0
  218. package/src/components/DropdownIcon/DropdownIcon.tsx +20 -0
  219. package/src/components/Epic/Readme.md +1 -0
  220. package/src/components/FocusTrap/FocusTrap.tsx +11 -8
  221. package/src/components/FormItem/FormItem.css +8 -8
  222. package/src/components/FormLayoutGroup/FormLayoutGroup.css +9 -3
  223. package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +10 -1
  224. package/src/components/GridAvatar/GridAvatar.css +37 -0
  225. package/src/components/GridAvatar/GridAvatar.tsx +55 -0
  226. package/src/components/GridAvatar/Readme.md +12 -0
  227. package/src/components/InitialsAvatar/InitialsAvatar.css +53 -0
  228. package/src/components/InitialsAvatar/InitialsAvatar.tsx +90 -0
  229. package/src/components/InitialsAvatar/Readme.md +14 -0
  230. package/src/components/ModalRoot/Readme.md +2 -2
  231. package/src/components/NativeSelect/NativeSelect.tsx +2 -2
  232. package/src/components/Progress/Progress.tsx +8 -3
  233. package/src/components/Removable/Removable.css +9 -20
  234. package/src/components/Removable/Removable.tsx +19 -11
  235. package/src/components/Select/Select.css +1 -1
  236. package/src/components/SelectMimicry/SelectMimicry.tsx +2 -2
  237. package/src/components/SimpleCell/SimpleCell.css +10 -27
  238. package/src/components/Tabbar/Tabbar.css +15 -4
  239. package/src/components/Tabbar/Tabbar.tsx +3 -1
  240. package/src/components/TabbarItem/Readme.md +72 -0
  241. package/src/components/TabbarItem/TabbarItem.css +65 -14
  242. package/src/components/TabbarItem/TabbarItem.tsx +46 -22
  243. package/src/components/TabsItem/TabsItem.css +5 -2
  244. package/src/components/View/View.tsx +37 -31
  245. package/src/components/View/ViewInfinite.tsx +44 -38
  246. package/src/index.ts +4 -0
  247. package/src/lib/prefixClass.ts +9 -6
  248. package/src/styles/components.css +4 -0
@@ -4,9 +4,15 @@ import Counter from '../Counter/Counter';
4
4
  import { classNames } from '../../lib/classNames';
5
5
  import { usePlatform } from '../../hooks/usePlatform';
6
6
  import { hasReactNode } from '../../lib/utils';
7
+ import Tappable from '../Tappable/Tappable';
8
+ import { Platform } from '../../lib/platform';
9
+ import { HasComponent, HasRootRef } from '../../types';
7
10
  import './TabbarItem.css';
8
11
 
9
- export interface TabbarItemProps extends React.HTMLAttributes<HTMLElement>, React.AnchorHTMLAttributes<HTMLElement> {
12
+ export interface TabbarItemProps extends
13
+ Omit<React.AllHTMLAttributes<HTMLElement>, 'label'>, // TODO убрать Omit после удаления свойства label
14
+ HasRootRef<HTMLElement>,
15
+ HasComponent {
10
16
  selected?: boolean;
11
17
  /**
12
18
  * Тест рядом с иконкой
@@ -22,31 +28,49 @@ export interface TabbarItemProps extends React.HTMLAttributes<HTMLElement>, Reac
22
28
  label?: React.ReactNode;
23
29
  }
24
30
 
25
- const TabbarItem: React.FunctionComponent<TabbarItemProps> = (props: TabbarItemProps) => {
26
- const { children, selected, label, indicator, text, ...restProps } = props;
31
+ const TabbarItem: React.FunctionComponent<TabbarItemProps> = ({
32
+ children,
33
+ selected,
34
+ label,
35
+ indicator,
36
+ text,
37
+ href,
38
+ Component = href ? 'a' : 'button',
39
+ disabled,
40
+ ...restProps
41
+ }: TabbarItemProps) => {
27
42
  const platform = usePlatform();
28
- const Component: React.ElementType = restProps.href ? 'a' : 'div';
29
43
 
30
- return (
31
- <Component
32
- {...restProps}
33
- vkuiClass={classNames(getClassName('TabbarItem', platform), {
34
- 'TabbarItem--selected': selected,
35
- 'TabbarItem--text': !!text,
36
- })}
37
- >
38
- <div vkuiClass="TabbarItem__in">
39
- <div vkuiClass="TabbarItem__icon">
40
- {children}
41
- <div vkuiClass="TabbarItem__label">
42
- {hasReactNode(indicator) && indicator}
43
- {!indicator && label && <Counter size="s" mode="prominent">{label}</Counter>}
44
- </div>
44
+ // @ts-ignore ругается на то, что у AllHTMLAttributes type это строка, а button не любую строку считает валидным значением
45
+ return (<Component
46
+ {...restProps}
47
+ disabled={disabled}
48
+ href={href}
49
+ vkuiClass={classNames(getClassName('TabbarItem', platform), {
50
+ 'TabbarItem--selected': selected,
51
+ 'TabbarItem--text': !!text,
52
+ })}
53
+ >
54
+ <Tappable
55
+ role="presentation"
56
+ Component="div"
57
+ disabled={disabled}
58
+ activeMode={platform === Platform.IOS ? 'TabbarItem__tappable--active' : 'background'}
59
+ activeEffectDelay={platform === Platform.IOS ? 0 : 300}
60
+ hasHover={false}
61
+ vkuiClass="TabbarItem__tappable"
62
+ />
63
+ <div vkuiClass="TabbarItem__in">
64
+ <div vkuiClass="TabbarItem__icon">
65
+ {children}
66
+ <div vkuiClass="TabbarItem__label">
67
+ {hasReactNode(indicator) && indicator}
68
+ {!indicator && label && <Counter size="s" mode="prominent">{label}</Counter>}
45
69
  </div>
46
- {text && <div vkuiClass="TabbarItem__text">{text}</div>}
47
70
  </div>
48
- </Component>
49
- );
71
+ {text && <div vkuiClass="TabbarItem__text">{text}</div>}
72
+ </div>
73
+ </Component>);
50
74
  };
51
75
 
52
76
  export default TabbarItem;
@@ -106,6 +106,7 @@
106
106
  flex-basis: 0;
107
107
  flex-shrink: 0;
108
108
  flex-grow: 1;
109
+ border-radius: 0;
109
110
  }
110
111
 
111
112
  .Tabs--ios.Tabs--segmented .TabsItem__in {
@@ -117,11 +118,13 @@
117
118
  }
118
119
 
119
120
  .Tabs--ios.Tabs--segmented .TabsItem:last-child {
120
- border-radius: 0 10px 10px 0;
121
+ border-top-right-radius: 10px;
122
+ border-bottom-right-radius: 10px;
121
123
  }
122
124
 
123
125
  .Tabs--ios.Tabs--segmented .TabsItem:first-child {
124
- border-radius: 10px 0 0 10px;
126
+ border-top-left-radius: 10px;
127
+ border-bottom-left-radius: 10px;
125
128
  }
126
129
 
127
130
  .Tabs--ios.Tabs--segmented .TabsItem {
@@ -159,23 +159,27 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
159
159
  .find((id) => id === prevProps.activePanel || id === this.props.activePanel);
160
160
 
161
161
  const isBack = firstLayerId === this.props.activePanel;
162
+ this.scrolls[prevProps.activePanel] = this.props.scroll.getScroll().y;
162
163
 
163
- this.blurActiveElement();
164
+ if (this.shouldDisableTransitionMotion()) {
165
+ this.flushTransition(prevProps.activePanel, isBack);
166
+ } else {
167
+ this.blurActiveElement();
164
168
 
165
- this.scrolls[prevProps.activePanel] = this.props.scroll.getScroll().y;
166
- this.setState({
167
- visiblePanels: [prevProps.activePanel, this.props.activePanel],
168
- prevPanel: prevProps.activePanel,
169
- nextPanel: this.props.activePanel,
170
- activePanel: null,
171
- animated: true,
172
- isBack,
173
- });
169
+ this.setState({
170
+ visiblePanels: [prevProps.activePanel, this.props.activePanel],
171
+ prevPanel: prevProps.activePanel,
172
+ nextPanel: this.props.activePanel,
173
+ activePanel: null,
174
+ animated: true,
175
+ isBack,
176
+ });
174
177
 
175
- // Фолбек анимации перехода
176
- if (!animationEvent.supported) {
177
- clearTimeout(this.animationFinishTimeout);
178
- this.animationFinishTimeout = setTimeout(this.transitionEndHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
178
+ // Фолбек анимации перехода
179
+ if (!animationEvent.supported) {
180
+ clearTimeout(this.animationFinishTimeout);
181
+ this.animationFinishTimeout = setTimeout(this.transitionEndHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
182
+ }
179
183
  }
180
184
  }
181
185
 
@@ -252,6 +256,24 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
252
256
  return this.panelNodes[id];
253
257
  }
254
258
 
259
+ flushTransition(prevPanel: string, isBack: boolean) {
260
+ const activePanel = this.props.activePanel;
261
+ if (isBack) {
262
+ this.scrolls[prevPanel] = 0;
263
+ }
264
+ this.setState({
265
+ prevPanel: null,
266
+ nextPanel: null,
267
+ visiblePanels: [activePanel],
268
+ activePanel,
269
+ animated: false,
270
+ isBack: undefined,
271
+ }, () => {
272
+ this.props.scroll.scrollTo(0, isBack ? this.scrolls[activePanel] : 0);
273
+ this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
274
+ });
275
+ }
276
+
255
277
  transitionEndHandler = (e?: React.AnimationEvent): void => {
256
278
  if (!e || [
257
279
  'vkui-animation-ios-next-forward',
@@ -259,23 +281,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
259
281
  'vkui-animation-view-next-forward',
260
282
  'vkui-animation-view-prev-back',
261
283
  ].includes(e.animationName)) {
262
- const activePanel = this.props.activePanel;
263
- const isBack = this.state.isBack;
264
- const prevPanel = this.state.prevPanel;
265
- if (isBack) {
266
- this.scrolls[prevPanel] = 0;
267
- }
268
- this.setState({
269
- prevPanel: null,
270
- nextPanel: null,
271
- visiblePanels: [activePanel],
272
- activePanel: activePanel,
273
- animated: false,
274
- isBack: undefined,
275
- }, () => {
276
- isBack && this.props.scroll.scrollTo(0, this.scrolls[activePanel]);
277
- this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
278
- });
284
+ this.flushTransition(this.state.prevPanel, this.state.isBack);
279
285
  }
280
286
  };
281
287
 
@@ -167,19 +167,23 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
167
167
  };
168
168
  this.scrolls = scrolls;
169
169
 
170
- this.setState({
171
- visiblePanels: [prevProps.activePanel, this.props.activePanel],
172
- prevPanel: prevProps.activePanel,
173
- nextPanel: this.props.activePanel,
174
- activePanel: null,
175
- animated: true,
176
- isBack,
177
- });
170
+ if (this.shouldDisableTransitionMotion()) {
171
+ this.flushTransition(prevProps.activePanel, isBack);
172
+ } else {
173
+ this.setState({
174
+ visiblePanels: [prevProps.activePanel, this.props.activePanel],
175
+ prevPanel: prevProps.activePanel,
176
+ nextPanel: this.props.activePanel,
177
+ activePanel: null,
178
+ animated: true,
179
+ isBack,
180
+ });
178
181
 
179
- // Фолбек анимации перехода
180
- if (!animationEvent.supported) {
181
- clearTimeout(this.animationFinishTimeout);
182
- this.animationFinishTimeout = setTimeout(this.transitionEndHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
182
+ // Фолбек анимации перехода
183
+ if (!animationEvent.supported) {
184
+ clearTimeout(this.animationFinishTimeout);
185
+ this.animationFinishTimeout = setTimeout(this.transitionEndHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
186
+ }
183
187
  }
184
188
  }
185
189
 
@@ -272,6 +276,33 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
272
276
  return this.panelNodes[id];
273
277
  }
274
278
 
279
+ flushTransition(prevPanel: string, isBack: boolean) {
280
+ const activePanel = this.props.activePanel;
281
+
282
+ const prevPanelScrolls = [...this.scrolls[prevPanel] || []].slice(0, -1);
283
+ const newPanelScrolls = [...this.scrolls[activePanel] || []];
284
+ const scrollPosition = isBack ? newPanelScrolls.pop() : 0;
285
+ if (isBack) {
286
+ this.scrolls = {
287
+ ...this.scrolls,
288
+ [prevPanel]: prevPanelScrolls,
289
+ [activePanel]: newPanelScrolls,
290
+ };
291
+ }
292
+
293
+ this.setState({
294
+ prevPanel: null,
295
+ nextPanel: null,
296
+ visiblePanels: [activePanel],
297
+ activePanel: activePanel,
298
+ animated: false,
299
+ isBack: undefined,
300
+ }, () => {
301
+ this.props.scroll.scrollTo(0, isBack ? scrollPosition : 0);
302
+ this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
303
+ });
304
+ }
305
+
275
306
  transitionEndHandler = (e?: React.AnimationEvent): void => {
276
307
  if (!e || [
277
308
  'vkui-animation-ios-next-forward',
@@ -279,32 +310,7 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
279
310
  'vkui-animation-view-next-forward',
280
311
  'vkui-animation-view-prev-back',
281
312
  ].includes(e.animationName)) {
282
- const activePanel = this.props.activePanel;
283
- const prevPanel = this.state.prevPanel;
284
- const isBack = this.state.isBack;
285
-
286
- const prevPanelScrolls = [...this.scrolls[prevPanel] || []].slice(0, -1);
287
- const newPanelScrolls = [...this.scrolls[activePanel] || []];
288
- const scrollPosition = isBack ? newPanelScrolls.pop() : 0;
289
- if (isBack) {
290
- this.scrolls = {
291
- ...this.scrolls,
292
- [prevPanel]: prevPanelScrolls,
293
- [activePanel]: newPanelScrolls,
294
- };
295
- }
296
-
297
- this.setState({
298
- prevPanel: null,
299
- nextPanel: null,
300
- visiblePanels: [activePanel],
301
- activePanel: activePanel,
302
- animated: false,
303
- isBack: undefined,
304
- }, () => {
305
- isBack && this.props.scroll.scrollTo(0, scrollPosition);
306
- this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
307
- });
313
+ this.flushTransition(this.state.prevPanel, this.state.isBack);
308
314
  }
309
315
  };
310
316
 
package/src/index.ts CHANGED
@@ -109,6 +109,10 @@ export { default as Gallery } from './components/Gallery/Gallery';
109
109
  export type { GalleryProps } from './components/Gallery/Gallery';
110
110
  export { default as Avatar } from './components/Avatar/Avatar';
111
111
  export type { AvatarProps } from './components/Avatar/Avatar';
112
+ export { GridAvatar } from './components/GridAvatar/GridAvatar';
113
+ export type { GridAvatarProps } from './components/GridAvatar/GridAvatar';
114
+ export { InitialsAvatar } from './components/InitialsAvatar/InitialsAvatar';
115
+ export type { InitialsAvatarProps } from './components/InitialsAvatar/InitialsAvatar';
112
116
  export { default as Progress } from './components/Progress/Progress';
113
117
  export type { ProgressProps } from './components/Progress/Progress';
114
118
  export { default as Search } from './components/Search/Search';
@@ -16,13 +16,16 @@ function prefixSingle(scopedStyle: string): string {
16
16
  }
17
17
 
18
18
  export function prefixClass(scopedStyle?: string | string[]) {
19
- let resolved = '';
20
19
  if (typeof scopedStyle === 'string') {
21
- resolved = prefixSingle(scopedStyle);
22
- } else {
23
- for (let i = 0; i < scopedStyle.length; i++) {
24
- resolved += ' ' + prefixSingle(scopedStyle[i]);
25
- }
20
+ return prefixSingle(scopedStyle);
21
+ }
22
+
23
+ let resolved = '';
24
+ for (let i = 0; i < scopedStyle.length; i++) {
25
+ const separator = resolved ? ' ' : '';
26
+
27
+ resolved += separator + prefixSingle(scopedStyle[i]);
26
28
  }
29
+
27
30
  return resolved;
28
31
  }
@@ -71,6 +71,8 @@
71
71
  @import '../components/Gradient/Gradient.css';
72
72
  @import '../components/SimpleCell/SimpleCell.css';
73
73
  @import '../components/Cell/Cell.css';
74
+ @import '../components/Cell/CellCheckbox/CellCheckbox.css';
75
+ @import '../components/Cell/CellDragger/CellDragger.css';
74
76
  @import '../components/CellButton/CellButton.css';
75
77
  @import '../components/RichCell/RichCell.css';
76
78
  @import '../components/HorizontalCell/HorizontalCell.css';
@@ -80,6 +82,8 @@
80
82
  @import '../components/Switch/Switch.css';
81
83
  @import '../components/InfoRow/InfoRow.css';
82
84
  @import '../components/Avatar/Avatar.css';
85
+ @import '../components/InitialsAvatar/InitialsAvatar.css';
86
+ @import '../components/GridAvatar/GridAvatar.css';
83
87
  @import '../components/Gallery/Gallery.css';
84
88
  @import '../components/Progress/Progress.css';
85
89
  @import '../components/Search/Search.css';