@vkontakte/vkui 4.20.0 → 4.22.1

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 (520) hide show
  1. package/.cache/.eslintcache +1 -1
  2. package/.cache/.stylelintcache +1 -1
  3. package/.cache/.tsbuildinfo +414 -116
  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/FocusTrap/FocusTrap.d.ts +2 -3
  12. package/.cache/ts/src/components/FormField/FormField.d.ts +2 -3
  13. package/.cache/ts/src/components/FormItem/FormItem.d.ts +2 -3
  14. package/.cache/ts/src/components/FormLayout/FormLayout.d.ts +2 -4
  15. package/.cache/ts/src/components/GridAvatar/GridAvatar.d.ts +9 -0
  16. package/.cache/ts/src/components/HorizontalCell/HorizontalCell.d.ts +2 -3
  17. package/.cache/ts/src/components/HorizontalScroll/HorizontalScroll.d.ts +3 -2
  18. package/.cache/ts/src/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
  19. package/.cache/ts/src/components/Link/Link.d.ts +1 -2
  20. package/.cache/ts/src/components/ModalRoot/types.d.ts +0 -1
  21. package/.cache/ts/src/components/ModalRoot/useModalManager.d.ts +37 -0
  22. package/.cache/ts/src/components/Removable/Removable.d.ts +2 -1
  23. package/.cache/ts/src/components/SimpleCell/SimpleCell.d.ts +2 -2
  24. package/.cache/ts/src/components/SplitCol/SplitCol.d.ts +3 -3
  25. package/.cache/ts/src/components/SubnavigationBar/SubnavigationBar.d.ts +2 -1
  26. package/.cache/ts/src/components/Switch/Switch.d.ts +2 -3
  27. package/.cache/ts/src/components/TabbarItem/TabbarItem.d.ts +3 -1
  28. package/.cache/ts/src/components/Tappable/Tappable.d.ts +2 -3
  29. package/.cache/ts/src/components/Touch/Touch.d.ts +16 -17
  30. package/.cache/ts/src/components/Typography/Caption/Caption.d.ts +2 -2
  31. package/.cache/ts/src/components/Typography/Headline/Headline.d.ts +2 -2
  32. package/.cache/ts/src/components/Typography/Subhead/Subhead.d.ts +2 -2
  33. package/.cache/ts/src/components/Typography/Text/Text.d.ts +2 -3
  34. package/.cache/ts/src/components/Typography/Title/Title.d.ts +2 -2
  35. package/.cache/ts/src/components/View/utils.d.ts +2 -0
  36. package/.cache/ts/src/index.d.ts +4 -0
  37. package/.cache/ts/src/lib/accessibility.d.ts +1 -1
  38. package/.cache/ts/src/lib/supportEvents.d.ts +3 -1
  39. package/.cache/ts/src/types.d.ts +3 -0
  40. package/dist/cjs/components/ActionSheet/ActionSheet.js +7 -9
  41. package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
  42. package/dist/cjs/components/Avatar/Avatar.d.ts +2 -0
  43. package/dist/cjs/components/Avatar/Avatar.js +7 -3
  44. package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
  45. package/dist/cjs/components/Banner/Banner.js.map +1 -1
  46. package/dist/cjs/components/Button/Button.js.map +1 -1
  47. package/dist/cjs/components/CardScroll/CardScroll.js +1 -1
  48. package/dist/cjs/components/CardScroll/CardScroll.js.map +1 -1
  49. package/dist/cjs/components/Cell/Cell.d.ts +11 -0
  50. package/dist/cjs/components/Cell/Cell.js +109 -182
  51. package/dist/cjs/components/Cell/Cell.js.map +1 -1
  52. package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
  53. package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js +50 -0
  54. package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
  55. package/dist/cjs/components/Cell/CellDragger/CellDragger.d.ts +6 -0
  56. package/dist/cjs/components/Cell/CellDragger/CellDragger.js +53 -0
  57. package/dist/cjs/components/Cell/CellDragger/CellDragger.js.map +1 -0
  58. package/dist/cjs/components/Cell/useDraggable.d.ts +13 -0
  59. package/dist/cjs/components/Cell/useDraggable.js +142 -0
  60. package/dist/cjs/components/Cell/useDraggable.js.map +1 -0
  61. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +2 -2
  62. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  63. package/dist/cjs/components/Counter/Counter.js.map +1 -1
  64. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +0 -1
  65. package/dist/cjs/components/CustomSelect/CustomSelect.js +2 -3
  66. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  67. package/dist/cjs/components/DropdownIcon/DropdownIcon.d.ts +3 -0
  68. package/dist/cjs/components/DropdownIcon/DropdownIcon.js +37 -0
  69. package/dist/cjs/components/DropdownIcon/DropdownIcon.js.map +1 -0
  70. package/dist/cjs/components/FocusTrap/FocusTrap.d.ts +2 -3
  71. package/dist/cjs/components/FocusTrap/FocusTrap.js +3 -5
  72. package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
  73. package/dist/cjs/components/FormField/FormField.d.ts +2 -3
  74. package/dist/cjs/components/FormField/FormField.js.map +1 -1
  75. package/dist/cjs/components/FormItem/FormItem.d.ts +2 -3
  76. package/dist/cjs/components/FormItem/FormItem.js.map +1 -1
  77. package/dist/cjs/components/FormLayout/FormLayout.d.ts +2 -4
  78. package/dist/cjs/components/FormLayout/FormLayout.js.map +1 -1
  79. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
  80. package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  81. package/dist/cjs/components/GridAvatar/GridAvatar.d.ts +9 -0
  82. package/dist/cjs/components/GridAvatar/GridAvatar.js +61 -0
  83. package/dist/cjs/components/GridAvatar/GridAvatar.js.map +1 -0
  84. package/dist/cjs/components/Header/Header.js.map +1 -1
  85. package/dist/cjs/components/HorizontalCell/HorizontalCell.d.ts +2 -3
  86. package/dist/cjs/components/HorizontalCell/HorizontalCell.js.map +1 -1
  87. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts +3 -2
  88. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +10 -13
  89. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  90. package/dist/cjs/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
  91. package/dist/cjs/components/InitialsAvatar/InitialsAvatar.js +64 -0
  92. package/dist/cjs/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
  93. package/dist/cjs/components/Link/Link.d.ts +1 -2
  94. package/dist/cjs/components/Link/Link.js.map +1 -1
  95. package/dist/cjs/components/ModalRoot/ModalRoot.js +170 -373
  96. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  97. package/dist/cjs/components/ModalRoot/ModalRootContext.js +0 -3
  98. package/dist/cjs/components/ModalRoot/ModalRootContext.js.map +1 -1
  99. package/dist/cjs/components/ModalRoot/ModalRootDesktop.js +59 -241
  100. package/dist/cjs/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  101. package/dist/cjs/components/ModalRoot/types.d.ts +0 -1
  102. package/dist/cjs/components/ModalRoot/types.js.map +1 -1
  103. package/dist/cjs/components/ModalRoot/useModalManager.d.ts +37 -0
  104. package/dist/cjs/components/ModalRoot/useModalManager.js +213 -0
  105. package/dist/cjs/components/ModalRoot/useModalManager.js.map +1 -0
  106. package/dist/cjs/components/NativeSelect/NativeSelect.js +2 -2
  107. package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
  108. package/dist/cjs/components/Removable/Removable.d.ts +2 -1
  109. package/dist/cjs/components/Removable/Removable.js +75 -66
  110. package/dist/cjs/components/Removable/Removable.js.map +1 -1
  111. package/dist/cjs/components/SelectMimicry/SelectMimicry.js +2 -2
  112. package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
  113. package/dist/cjs/components/SimpleCell/SimpleCell.d.ts +2 -2
  114. package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
  115. package/dist/cjs/components/SplitCol/SplitCol.d.ts +3 -3
  116. package/dist/cjs/components/SplitCol/SplitCol.js +2 -4
  117. package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
  118. package/dist/cjs/components/SubnavigationBar/SubnavigationBar.d.ts +2 -1
  119. package/dist/cjs/components/SubnavigationBar/SubnavigationBar.js +38 -11
  120. package/dist/cjs/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  121. package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  122. package/dist/cjs/components/Switch/Switch.d.ts +2 -3
  123. package/dist/cjs/components/Switch/Switch.js +18 -8
  124. package/dist/cjs/components/Switch/Switch.js.map +1 -1
  125. package/dist/cjs/components/Tabbar/Tabbar.js +3 -1
  126. package/dist/cjs/components/Tabbar/Tabbar.js.map +1 -1
  127. package/dist/cjs/components/TabbarItem/TabbarItem.d.ts +3 -1
  128. package/dist/cjs/components/TabbarItem/TabbarItem.js +29 -11
  129. package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
  130. package/dist/cjs/components/Tappable/Tappable.d.ts +2 -3
  131. package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
  132. package/dist/cjs/components/Textarea/Textarea.js +9 -7
  133. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  134. package/dist/cjs/components/Touch/Touch.d.ts +16 -17
  135. package/dist/cjs/components/Touch/Touch.js +21 -7
  136. package/dist/cjs/components/Touch/Touch.js.map +1 -1
  137. package/dist/cjs/components/Typography/Caption/Caption.d.ts +2 -2
  138. package/dist/cjs/components/Typography/Caption/Caption.js +4 -2
  139. package/dist/cjs/components/Typography/Caption/Caption.js.map +1 -1
  140. package/dist/cjs/components/Typography/Headline/Headline.d.ts +2 -2
  141. package/dist/cjs/components/Typography/Headline/Headline.js +2 -1
  142. package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
  143. package/dist/cjs/components/Typography/Subhead/Subhead.d.ts +2 -2
  144. package/dist/cjs/components/Typography/Subhead/Subhead.js +2 -1
  145. package/dist/cjs/components/Typography/Subhead/Subhead.js.map +1 -1
  146. package/dist/cjs/components/Typography/Text/Text.d.ts +2 -3
  147. package/dist/cjs/components/Typography/Text/Text.js +2 -1
  148. package/dist/cjs/components/Typography/Text/Text.js.map +1 -1
  149. package/dist/cjs/components/Typography/Title/Title.d.ts +2 -2
  150. package/dist/cjs/components/Typography/Title/Title.js +9 -4
  151. package/dist/cjs/components/Typography/Title/Title.js.map +1 -1
  152. package/dist/cjs/components/View/View.js +68 -75
  153. package/dist/cjs/components/View/View.js.map +1 -1
  154. package/dist/cjs/components/View/ViewInfinite.js +78 -85
  155. package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
  156. package/dist/cjs/components/View/utils.d.ts +2 -0
  157. package/dist/cjs/components/View/utils.js +13 -0
  158. package/dist/cjs/components/View/utils.js.map +1 -0
  159. package/dist/cjs/index.d.ts +4 -0
  160. package/dist/cjs/index.js +16 -0
  161. package/dist/cjs/index.js.map +1 -1
  162. package/dist/cjs/lib/accessibility.d.ts +1 -1
  163. package/dist/cjs/lib/accessibility.js.map +1 -1
  164. package/dist/cjs/lib/prefixClass.js +7 -6
  165. package/dist/cjs/lib/prefixClass.js.map +1 -1
  166. package/dist/cjs/lib/supportEvents.d.ts +3 -1
  167. package/dist/cjs/lib/supportEvents.js +1 -4
  168. package/dist/cjs/lib/supportEvents.js.map +1 -1
  169. package/dist/cjs/types.d.ts +3 -0
  170. package/dist/components/ActionSheet/ActionSheet.js +6 -9
  171. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  172. package/dist/components/Avatar/Avatar.d.ts +2 -0
  173. package/dist/components/Avatar/Avatar.js +4 -2
  174. package/dist/components/Avatar/Avatar.js.map +1 -1
  175. package/dist/components/Banner/Banner.js.map +1 -1
  176. package/dist/components/Button/Button.js.map +1 -1
  177. package/dist/components/CardScroll/CardScroll.js +1 -1
  178. package/dist/components/CardScroll/CardScroll.js.map +1 -1
  179. package/dist/components/Cell/Cell.d.ts +11 -0
  180. package/dist/components/Cell/Cell.js +103 -177
  181. package/dist/components/Cell/Cell.js.map +1 -1
  182. package/dist/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
  183. package/dist/components/Cell/CellCheckbox/CellCheckbox.js +31 -0
  184. package/dist/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
  185. package/dist/components/Cell/CellDragger/CellDragger.d.ts +6 -0
  186. package/dist/components/Cell/CellDragger/CellDragger.js +30 -0
  187. package/dist/components/Cell/CellDragger/CellDragger.js.map +1 -0
  188. package/dist/components/Cell/useDraggable.d.ts +13 -0
  189. package/dist/components/Cell/useDraggable.js +126 -0
  190. package/dist/components/Cell/useDraggable.js.map +1 -0
  191. package/dist/components/ChipsSelect/ChipsSelect.js +2 -2
  192. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  193. package/dist/components/Counter/Counter.js.map +1 -1
  194. package/dist/components/CustomSelect/CustomSelect.d.ts +0 -1
  195. package/dist/components/CustomSelect/CustomSelect.js +3 -5
  196. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  197. package/dist/components/DropdownIcon/DropdownIcon.d.ts +3 -0
  198. package/dist/components/DropdownIcon/DropdownIcon.js +19 -0
  199. package/dist/components/DropdownIcon/DropdownIcon.js.map +1 -0
  200. package/dist/components/FocusTrap/FocusTrap.d.ts +2 -3
  201. package/dist/components/FocusTrap/FocusTrap.js +3 -5
  202. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  203. package/dist/components/FormField/FormField.d.ts +2 -3
  204. package/dist/components/FormField/FormField.js.map +1 -1
  205. package/dist/components/FormItem/FormItem.d.ts +2 -3
  206. package/dist/components/FormItem/FormItem.js.map +1 -1
  207. package/dist/components/FormLayout/FormLayout.d.ts +2 -4
  208. package/dist/components/FormLayout/FormLayout.js.map +1 -1
  209. package/dist/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
  210. package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  211. package/dist/components/GridAvatar/GridAvatar.d.ts +9 -0
  212. package/dist/components/GridAvatar/GridAvatar.js +41 -0
  213. package/dist/components/GridAvatar/GridAvatar.js.map +1 -0
  214. package/dist/components/Header/Header.js.map +1 -1
  215. package/dist/components/HorizontalCell/HorizontalCell.d.ts +2 -3
  216. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  217. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +3 -2
  218. package/dist/components/HorizontalScroll/HorizontalScroll.js +10 -12
  219. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  220. package/dist/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
  221. package/dist/components/InitialsAvatar/InitialsAvatar.js +46 -0
  222. package/dist/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
  223. package/dist/components/Link/Link.d.ts +1 -2
  224. package/dist/components/Link/Link.js.map +1 -1
  225. package/dist/components/ModalRoot/ModalRoot.js +167 -376
  226. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  227. package/dist/components/ModalRoot/ModalRootContext.js +0 -3
  228. package/dist/components/ModalRoot/ModalRootContext.js.map +1 -1
  229. package/dist/components/ModalRoot/ModalRootDesktop.js +58 -244
  230. package/dist/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  231. package/dist/components/ModalRoot/types.d.ts +0 -1
  232. package/dist/components/ModalRoot/types.js.map +1 -1
  233. package/dist/components/ModalRoot/useModalManager.d.ts +37 -0
  234. package/dist/components/ModalRoot/useModalManager.js +189 -0
  235. package/dist/components/ModalRoot/useModalManager.js.map +1 -0
  236. package/dist/components/NativeSelect/NativeSelect.js +2 -2
  237. package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
  238. package/dist/components/Removable/Removable.d.ts +2 -1
  239. package/dist/components/Removable/Removable.js +73 -64
  240. package/dist/components/Removable/Removable.js.map +1 -1
  241. package/dist/components/SelectMimicry/SelectMimicry.js +2 -2
  242. package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
  243. package/dist/components/SimpleCell/SimpleCell.d.ts +2 -2
  244. package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
  245. package/dist/components/SplitCol/SplitCol.d.ts +3 -3
  246. package/dist/components/SplitCol/SplitCol.js +2 -4
  247. package/dist/components/SplitCol/SplitCol.js.map +1 -1
  248. package/dist/components/SubnavigationBar/SubnavigationBar.d.ts +2 -1
  249. package/dist/components/SubnavigationBar/SubnavigationBar.js +38 -11
  250. package/dist/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  251. package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  252. package/dist/components/Switch/Switch.d.ts +2 -3
  253. package/dist/components/Switch/Switch.js +15 -8
  254. package/dist/components/Switch/Switch.js.map +1 -1
  255. package/dist/components/Tabbar/Tabbar.js +3 -1
  256. package/dist/components/Tabbar/Tabbar.js.map +1 -1
  257. package/dist/components/TabbarItem/TabbarItem.d.ts +3 -1
  258. package/dist/components/TabbarItem/TabbarItem.js +26 -10
  259. package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
  260. package/dist/components/Tappable/Tappable.d.ts +2 -3
  261. package/dist/components/Tappable/Tappable.js.map +1 -1
  262. package/dist/components/Textarea/Textarea.js +9 -6
  263. package/dist/components/Textarea/Textarea.js.map +1 -1
  264. package/dist/components/Touch/Touch.d.ts +16 -17
  265. package/dist/components/Touch/Touch.js +21 -7
  266. package/dist/components/Touch/Touch.js.map +1 -1
  267. package/dist/components/Typography/Caption/Caption.d.ts +2 -2
  268. package/dist/components/Typography/Caption/Caption.js +4 -2
  269. package/dist/components/Typography/Caption/Caption.js.map +1 -1
  270. package/dist/components/Typography/Headline/Headline.d.ts +2 -2
  271. package/dist/components/Typography/Headline/Headline.js +2 -1
  272. package/dist/components/Typography/Headline/Headline.js.map +1 -1
  273. package/dist/components/Typography/Subhead/Subhead.d.ts +2 -2
  274. package/dist/components/Typography/Subhead/Subhead.js +2 -1
  275. package/dist/components/Typography/Subhead/Subhead.js.map +1 -1
  276. package/dist/components/Typography/Text/Text.d.ts +2 -3
  277. package/dist/components/Typography/Text/Text.js +2 -1
  278. package/dist/components/Typography/Text/Text.js.map +1 -1
  279. package/dist/components/Typography/Title/Title.d.ts +2 -2
  280. package/dist/components/Typography/Title/Title.js +9 -4
  281. package/dist/components/Typography/Title/Title.js.map +1 -1
  282. package/dist/components/View/View.js +67 -75
  283. package/dist/components/View/View.js.map +1 -1
  284. package/dist/components/View/ViewInfinite.js +79 -87
  285. package/dist/components/View/ViewInfinite.js.map +1 -1
  286. package/dist/components/View/utils.d.ts +2 -0
  287. package/dist/components/View/utils.js +6 -0
  288. package/dist/components/View/utils.js.map +1 -0
  289. package/dist/components.css +1 -1
  290. package/dist/components.css.map +1 -1
  291. package/dist/cssm/components/ActionSheet/ActionSheet.js +6 -9
  292. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  293. package/dist/cssm/components/Avatar/Avatar.js +4 -2
  294. package/dist/cssm/components/Avatar/Avatar.js.map +1 -1
  295. package/dist/cssm/components/Banner/Banner.js.map +1 -1
  296. package/dist/cssm/components/Button/Button.css +1 -1
  297. package/dist/cssm/components/Button/Button.js.map +1 -1
  298. package/dist/cssm/components/CardScroll/CardScroll.js +1 -1
  299. package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
  300. package/dist/cssm/components/Cell/Cell.css +1 -1
  301. package/dist/cssm/components/Cell/Cell.js +103 -177
  302. package/dist/cssm/components/Cell/Cell.js.map +1 -1
  303. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.css +1 -0
  304. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js +32 -0
  305. package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
  306. package/dist/cssm/components/Cell/CellDragger/CellDragger.css +1 -0
  307. package/dist/cssm/components/Cell/CellDragger/CellDragger.js +31 -0
  308. package/dist/cssm/components/Cell/CellDragger/CellDragger.js.map +1 -0
  309. package/dist/cssm/components/Cell/useDraggable.js +126 -0
  310. package/dist/cssm/components/Cell/useDraggable.js.map +1 -0
  311. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -2
  312. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  313. package/dist/cssm/components/Counter/Counter.js.map +1 -1
  314. package/dist/cssm/components/CustomSelect/CustomSelect.js +3 -5
  315. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  316. package/dist/cssm/components/DropdownIcon/DropdownIcon.css +1 -0
  317. package/dist/cssm/components/DropdownIcon/DropdownIcon.js +20 -0
  318. package/dist/cssm/components/DropdownIcon/DropdownIcon.js.map +1 -0
  319. package/dist/cssm/components/FocusTrap/FocusTrap.js +3 -5
  320. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  321. package/dist/cssm/components/FocusVisible/FocusVisible.css +1 -1
  322. package/dist/cssm/components/FormField/FormField.css +1 -1
  323. package/dist/cssm/components/FormField/FormField.js.map +1 -1
  324. package/dist/cssm/components/FormItem/FormItem.css +1 -1
  325. package/dist/cssm/components/FormItem/FormItem.js.map +1 -1
  326. package/dist/cssm/components/FormLayout/FormLayout.js.map +1 -1
  327. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.css +1 -1
  328. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
  329. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
  330. package/dist/cssm/components/Gallery/Gallery.css +1 -1
  331. package/dist/cssm/components/GridAvatar/GridAvatar.css +1 -0
  332. package/dist/cssm/components/GridAvatar/GridAvatar.js +42 -0
  333. package/dist/cssm/components/GridAvatar/GridAvatar.js.map +1 -0
  334. package/dist/cssm/components/Header/Header.js.map +1 -1
  335. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  336. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +10 -12
  337. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  338. package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.css +1 -1
  339. package/dist/cssm/components/IconButton/IconButton.css +1 -1
  340. package/dist/cssm/components/InitialsAvatar/InitialsAvatar.css +1 -0
  341. package/dist/cssm/components/InitialsAvatar/InitialsAvatar.js +52 -0
  342. package/dist/cssm/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
  343. package/dist/cssm/components/Link/Link.js.map +1 -1
  344. package/dist/cssm/components/ModalRoot/ModalRoot.js +167 -376
  345. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  346. package/dist/cssm/components/ModalRoot/ModalRootContext.js +0 -3
  347. package/dist/cssm/components/ModalRoot/ModalRootContext.js.map +1 -1
  348. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js +58 -244
  349. package/dist/cssm/components/ModalRoot/ModalRootDesktop.js.map +1 -1
  350. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  351. package/dist/cssm/components/ModalRoot/useModalManager.js +189 -0
  352. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -0
  353. package/dist/cssm/components/NativeSelect/NativeSelect.js +2 -2
  354. package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
  355. package/dist/cssm/components/Removable/Removable.css +1 -1
  356. package/dist/cssm/components/Removable/Removable.js +73 -64
  357. package/dist/cssm/components/Removable/Removable.js.map +1 -1
  358. package/dist/cssm/components/Search/Search.css +1 -1
  359. package/dist/cssm/components/Select/Select.css +1 -1
  360. package/dist/cssm/components/SelectMimicry/SelectMimicry.js +2 -2
  361. package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
  362. package/dist/cssm/components/SimpleCell/SimpleCell.css +1 -1
  363. package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
  364. package/dist/cssm/components/SplitCol/SplitCol.js +2 -4
  365. package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
  366. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js +38 -11
  367. package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
  368. package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
  369. package/dist/cssm/components/Switch/Switch.css +1 -1
  370. package/dist/cssm/components/Switch/Switch.js +15 -8
  371. package/dist/cssm/components/Switch/Switch.js.map +1 -1
  372. package/dist/cssm/components/Tabbar/Tabbar.css +1 -1
  373. package/dist/cssm/components/Tabbar/Tabbar.js +3 -1
  374. package/dist/cssm/components/Tabbar/Tabbar.js.map +1 -1
  375. package/dist/cssm/components/TabbarItem/TabbarItem.css +1 -1
  376. package/dist/cssm/components/TabbarItem/TabbarItem.js +26 -10
  377. package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
  378. package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
  379. package/dist/cssm/components/Textarea/Textarea.js +9 -6
  380. package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
  381. package/dist/cssm/components/Touch/Touch.js +21 -7
  382. package/dist/cssm/components/Touch/Touch.js.map +1 -1
  383. package/dist/cssm/components/Typography/Caption/Caption.js +4 -2
  384. package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
  385. package/dist/cssm/components/Typography/Headline/Headline.js +2 -1
  386. package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
  387. package/dist/cssm/components/Typography/Subhead/Subhead.js +2 -1
  388. package/dist/cssm/components/Typography/Subhead/Subhead.js.map +1 -1
  389. package/dist/cssm/components/Typography/Text/Text.js +2 -1
  390. package/dist/cssm/components/Typography/Text/Text.js.map +1 -1
  391. package/dist/cssm/components/Typography/Title/Title.js +9 -4
  392. package/dist/cssm/components/Typography/Title/Title.js.map +1 -1
  393. package/dist/cssm/components/View/View.js +67 -75
  394. package/dist/cssm/components/View/View.js.map +1 -1
  395. package/dist/cssm/components/View/ViewInfinite.js +79 -87
  396. package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
  397. package/dist/cssm/components/View/utils.js +6 -0
  398. package/dist/cssm/components/View/utils.js.map +1 -0
  399. package/dist/cssm/index.js +2 -0
  400. package/dist/cssm/index.js.map +1 -1
  401. package/dist/cssm/lib/accessibility.js.map +1 -1
  402. package/dist/cssm/lib/prefixClass.js +7 -6
  403. package/dist/cssm/lib/prefixClass.js.map +1 -1
  404. package/dist/cssm/lib/supportEvents.js +1 -4
  405. package/dist/cssm/lib/supportEvents.js.map +1 -1
  406. package/dist/cssm/styles/components.css +1 -1
  407. package/dist/cssm/styles/themes.css +1 -1
  408. package/dist/cssm/styles/vkcom_light.css +1 -1
  409. package/dist/index.d.ts +4 -0
  410. package/dist/index.js +2 -0
  411. package/dist/index.js.map +1 -1
  412. package/dist/lib/accessibility.d.ts +1 -1
  413. package/dist/lib/accessibility.js.map +1 -1
  414. package/dist/lib/prefixClass.js +7 -6
  415. package/dist/lib/prefixClass.js.map +1 -1
  416. package/dist/lib/supportEvents.d.ts +3 -1
  417. package/dist/lib/supportEvents.js +1 -4
  418. package/dist/lib/supportEvents.js.map +1 -1
  419. package/dist/types.d.ts +3 -0
  420. package/dist/vkui.css +2 -2
  421. package/dist/vkui.css.map +1 -1
  422. package/package.json +8 -4
  423. package/src/components/ActionSheet/ActionSheet.tsx +4 -5
  424. package/src/components/ActionSheet/Readme.md +18 -14
  425. package/src/components/Alert/Readme.md +15 -11
  426. package/src/components/Avatar/Avatar.tsx +5 -2
  427. package/src/components/Banner/Banner.tsx +4 -5
  428. package/src/components/Button/Button.css +26 -53
  429. package/src/components/Button/Button.tsx +2 -3
  430. package/src/components/Card/Readme.md +6 -6
  431. package/src/components/CardScroll/CardScroll.tsx +4 -1
  432. package/src/components/Cell/Cell.css +21 -58
  433. package/src/components/Cell/Cell.tsx +101 -162
  434. package/src/components/Cell/CellCheckbox/CellCheckbox.css +17 -0
  435. package/src/components/Cell/CellCheckbox/CellCheckbox.tsx +42 -0
  436. package/src/components/Cell/CellDragger/CellDragger.css +4 -0
  437. package/src/components/Cell/CellDragger/CellDragger.tsx +40 -0
  438. package/src/components/Cell/Readme.md +89 -51
  439. package/src/components/Cell/useDraggable.tsx +112 -0
  440. package/src/components/ChipsSelect/ChipsSelect.tsx +2 -2
  441. package/src/components/Counter/Counter.tsx +2 -2
  442. package/src/components/CustomSelect/CustomSelect.tsx +3 -4
  443. package/src/components/DropdownIcon/DropdownIcon.css +3 -0
  444. package/src/components/DropdownIcon/DropdownIcon.tsx +20 -0
  445. package/src/components/Epic/Readme.md +2 -1
  446. package/src/components/FocusTrap/FocusTrap.tsx +13 -11
  447. package/src/components/FocusVisible/FocusVisible.css +12 -4
  448. package/src/components/FormField/FormField.css +0 -1
  449. package/src/components/FormField/FormField.tsx +2 -2
  450. package/src/components/FormItem/FormItem.css +13 -14
  451. package/src/components/FormItem/FormItem.tsx +2 -3
  452. package/src/components/FormLayout/FormLayout.tsx +2 -4
  453. package/src/components/FormLayoutGroup/FormLayoutGroup.css +11 -7
  454. package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +10 -1
  455. package/src/components/Gallery/Gallery.css +2 -3
  456. package/src/components/Gallery/Readme.md +89 -109
  457. package/src/components/GridAvatar/GridAvatar.css +37 -0
  458. package/src/components/GridAvatar/GridAvatar.tsx +55 -0
  459. package/src/components/GridAvatar/Readme.md +12 -0
  460. package/src/components/Group/Readme.md +18 -14
  461. package/src/components/Header/Header.tsx +4 -4
  462. package/src/components/HorizontalCell/HorizontalCell.tsx +3 -3
  463. package/src/components/HorizontalScroll/HorizontalScroll.tsx +14 -18
  464. package/src/components/HorizontalScroll/HorizontalScrollArrow.css +2 -2
  465. package/src/components/IconButton/IconButton.css +7 -0
  466. package/src/components/InitialsAvatar/InitialsAvatar.css +53 -0
  467. package/src/components/InitialsAvatar/InitialsAvatar.tsx +90 -0
  468. package/src/components/InitialsAvatar/Readme.md +14 -0
  469. package/src/components/Link/Link.tsx +1 -1
  470. package/src/components/MiniInfoCell/Readme.md +66 -62
  471. package/src/components/ModalDismissButton/Readme.md +13 -10
  472. package/src/components/ModalRoot/ModalRoot.tsx +159 -349
  473. package/src/components/ModalRoot/ModalRootContext.tsx +0 -1
  474. package/src/components/ModalRoot/ModalRootDesktop.tsx +54 -240
  475. package/src/components/ModalRoot/Readme.md +35 -27
  476. package/src/components/ModalRoot/types.ts +0 -1
  477. package/src/components/ModalRoot/useModalManager.tsx +174 -0
  478. package/src/components/NativeSelect/NativeSelect.tsx +2 -2
  479. package/src/components/Removable/Removable.css +16 -63
  480. package/src/components/Removable/Removable.tsx +84 -64
  481. package/src/components/ScreenSpinner/Readme.md +13 -9
  482. package/src/components/Search/Search.css +1 -1
  483. package/src/components/Select/Select.css +1 -1
  484. package/src/components/SelectMimicry/SelectMimicry.tsx +2 -2
  485. package/src/components/SimpleCell/SimpleCell.css +10 -18
  486. package/src/components/SimpleCell/SimpleCell.tsx +3 -5
  487. package/src/components/SplitCol/SplitCol.tsx +4 -8
  488. package/src/components/SplitLayout/Readme.md +2 -2
  489. package/src/components/SubnavigationBar/Readme.md +90 -86
  490. package/src/components/SubnavigationBar/SubnavigationBar.tsx +32 -14
  491. package/src/components/SubnavigationButton/SubnavigationButton.tsx +2 -3
  492. package/src/components/Switch/Readme.md +6 -6
  493. package/src/components/Switch/Switch.css +46 -15
  494. package/src/components/Switch/Switch.tsx +16 -8
  495. package/src/components/Tabbar/Tabbar.css +15 -4
  496. package/src/components/Tabbar/Tabbar.tsx +3 -1
  497. package/src/components/TabbarItem/Readme.md +72 -0
  498. package/src/components/TabbarItem/TabbarItem.css +65 -14
  499. package/src/components/TabbarItem/TabbarItem.tsx +46 -22
  500. package/src/components/Tappable/Tappable.tsx +2 -3
  501. package/src/components/Textarea/Readme.md +3 -0
  502. package/src/components/Textarea/Textarea.tsx +10 -6
  503. package/src/components/Touch/Touch.tsx +38 -25
  504. package/src/components/Typography/Caption/Caption.tsx +4 -4
  505. package/src/components/Typography/Headline/Headline.tsx +3 -3
  506. package/src/components/Typography/Subhead/Subhead.tsx +3 -3
  507. package/src/components/Typography/Text/Text.tsx +3 -4
  508. package/src/components/Typography/Title/Title.tsx +9 -5
  509. package/src/components/View/Readme.md +42 -56
  510. package/src/components/View/View.tsx +46 -61
  511. package/src/components/View/ViewInfinite.tsx +52 -67
  512. package/src/components/View/utils.ts +8 -0
  513. package/src/index.ts +4 -0
  514. package/src/lib/accessibility.ts +2 -2
  515. package/src/lib/prefixClass.ts +9 -6
  516. package/src/lib/supportEvents.ts +1 -4
  517. package/src/styles/components.css +4 -0
  518. package/src/styles/vkcom_light.css +3 -3
  519. package/src/testing/utils.tsx +34 -1
  520. package/src/types.ts +4 -0
@@ -15,6 +15,7 @@ import { ScrollContext, ScrollContextInterface } from '../AppRoot/ScrollContext'
15
15
  import { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';
16
16
  import { getNavId, NavIdProps } from '../../lib/getNavId';
17
17
  import { warnOnce } from '../../lib/warnOnce';
18
+ import { swipeBackExcluded } from './utils';
18
19
  import './View.css';
19
20
 
20
21
  const warn = warnOnce('View');
@@ -29,14 +30,10 @@ interface ViewsScrolls {
29
30
  [index: string]: Scrolls;
30
31
  }
31
32
 
32
- type AnimationEventHandler = (e?: AnimationEvent) => void;
33
-
34
33
  type TransitionEventHandler = (e?: TransitionEvent) => void;
35
34
 
36
35
  export let scrollsCache: ViewsScrolls = {};
37
36
 
38
- const swipeBackExcludedTags = ['input', 'textarea'];
39
-
40
37
  export interface ViewProps extends React.HTMLAttributes<HTMLElement>, HasPlatform, NavIdProps {
41
38
  activePanel: string;
42
39
  /**
@@ -162,18 +159,28 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
162
159
  .find((id) => id === prevProps.activePanel || id === this.props.activePanel);
163
160
 
164
161
  const isBack = firstLayerId === this.props.activePanel;
162
+ this.scrolls[prevProps.activePanel] = this.props.scroll.getScroll().y;
165
163
 
166
- this.blurActiveElement();
164
+ if (this.shouldDisableTransitionMotion()) {
165
+ this.flushTransition(prevProps.activePanel, isBack);
166
+ } else {
167
+ this.blurActiveElement();
167
168
 
168
- this.scrolls[prevProps.activePanel] = this.props.scroll.getScroll().y;
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
- });
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
+ });
177
+
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
+ }
183
+ }
177
184
  }
178
185
 
179
186
  // Закончилась анимация свайпа назад
@@ -196,12 +203,6 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
196
203
  });
197
204
  }
198
205
 
199
- // Начался переход
200
- if (!prevState.animated && this.state.animated) {
201
- const { prevPanel, nextPanel, isBack } = this.state;
202
- this.waitAnimationFinish(this.pickPanel(isBack ? prevPanel : nextPanel), this.transitionEndHandler);
203
- }
204
-
205
206
  // Начался свайп назад
206
207
  if (!prevState.swipingBack && this.state.swipingBack) {
207
208
  this.props.onSwipeBackStart && this.props.onSwipeBackStart();
@@ -245,21 +246,6 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
245
246
  }
246
247
  }
247
248
 
248
- waitAnimationFinish(elem: HTMLElement, eventHandler: AnimationEventHandler): void {
249
- if (this.shouldDisableTransitionMotion()) {
250
- eventHandler();
251
- return;
252
- }
253
-
254
- if (animationEvent.supported) {
255
- elem.removeEventListener(animationEvent.name, eventHandler);
256
- elem.addEventListener(animationEvent.name, eventHandler);
257
- } else {
258
- clearTimeout(this.animationFinishTimeout);
259
- this.animationFinishTimeout = setTimeout(eventHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
260
- }
261
- }
262
-
263
249
  blurActiveElement(): void {
264
250
  if (typeof this.window !== 'undefined' && this.document.activeElement) {
265
251
  (this.document.activeElement as HTMLElement).blur();
@@ -270,30 +256,32 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
270
256
  return this.panelNodes[id];
271
257
  }
272
258
 
273
- transitionEndHandler = (e?: AnimationEvent): void => {
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
+
277
+ transitionEndHandler = (e?: React.AnimationEvent): void => {
274
278
  if (!e || [
275
279
  'vkui-animation-ios-next-forward',
276
280
  'vkui-animation-ios-prev-back',
277
281
  'vkui-animation-view-next-forward',
278
282
  'vkui-animation-view-prev-back',
279
283
  ].includes(e.animationName)) {
280
- const activePanel = this.props.activePanel;
281
- const isBack = this.state.isBack;
282
- const prevPanel = this.state.prevPanel;
283
- if (isBack) {
284
- this.scrolls[prevPanel] = 0;
285
- }
286
- this.setState({
287
- prevPanel: null,
288
- nextPanel: null,
289
- visiblePanels: [activePanel],
290
- activePanel: activePanel,
291
- animated: false,
292
- isBack: undefined,
293
- }, () => {
294
- isBack && this.props.scroll.scrollTo(0, this.scrolls[activePanel]);
295
- this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
296
- });
284
+ this.flushTransition(this.state.prevPanel, this.state.isBack);
297
285
  }
298
286
  };
299
287
 
@@ -327,12 +315,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
327
315
  }
328
316
 
329
317
  onMoveX = (e: TouchEvent): void => {
330
- const target = e.originalEvent.target as HTMLElement;
331
- if (
332
- target &&
333
- typeof target.tagName === 'string' &&
334
- swipeBackExcludedTags.includes(target.tagName.toLowerCase())
335
- ) {
318
+ if (swipeBackExcluded(e)) {
336
319
  return;
337
320
  }
338
321
 
@@ -432,7 +415,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
432
415
  } = this.props;
433
416
  const {
434
417
  prevPanel, nextPanel, activePanel, swipeBackPrevPanel, swipeBackNextPanel,
435
- swipeBackResult, isBack,
418
+ swipeBackResult, isBack, animated,
436
419
  } = this.state;
437
420
 
438
421
  const hasPopout = !!popout;
@@ -449,7 +432,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
449
432
  const disableAnimation = this.shouldDisableTransitionMotion();
450
433
 
451
434
  const modifiers = {
452
- 'View--animated': !disableAnimation && this.state.animated,
435
+ 'View--animated': !disableAnimation && animated,
453
436
  'View--swiping-back': !disableAnimation && this.state.swipingBack,
454
437
  'View--no-motion': disableAnimation,
455
438
  };
@@ -466,6 +449,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
466
449
  {panels.map((panel: React.ReactElement) => {
467
450
  const panelId = getNavId(panel.props, warn);
468
451
  const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;
452
+ const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);
469
453
  const compensateScroll = isPrev || panelId === swipeBackNextPanel || panelId === nextPanel && isBack;
470
454
 
471
455
  return (
@@ -479,6 +463,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
479
463
  'View__panel--swipe-back-success': swipeBackResult === SwipeBackResults.success,
480
464
  'View__panel--swipe-back-failed': swipeBackResult === SwipeBackResults.fail,
481
465
  })}
466
+ onAnimationEnd={isTransitionTarget ? this.transitionEndHandler : null}
482
467
  ref={(el) => this.panelNodes[panelId] = el}
483
468
  style={this.calcPanelSwipeStyles(panelId)}
484
469
  key={panelId}
@@ -15,6 +15,7 @@ import { ScrollContext, ScrollContextInterface } from '../AppRoot/ScrollContext'
15
15
  import { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';
16
16
  import { getNavId, NavIdProps } from '../../lib/getNavId';
17
17
  import { warnOnce } from '../../lib/warnOnce';
18
+ import { swipeBackExcluded } from './utils';
18
19
  import './View.css';
19
20
 
20
21
  const warn = warnOnce('ViewInfinite');
@@ -29,14 +30,10 @@ interface ViewsScrolls {
29
30
  [index: string]: Scrolls;
30
31
  }
31
32
 
32
- type AnimationEventHandler = (e?: AnimationEvent) => void;
33
-
34
33
  type TransitionEventHandler = (e?: TransitionEvent) => void;
35
34
 
36
35
  let scrollsCache: ViewsScrolls = {};
37
36
 
38
- const swipeBackExcludedTags = ['input', 'textarea'];
39
-
40
37
  export type TransitionParams = { from: string; to: string };
41
38
 
42
39
  export interface ViewInfiniteProps extends React.HTMLAttributes<HTMLElement>, HasPlatform, NavIdProps {
@@ -170,14 +167,24 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
170
167
  };
171
168
  this.scrolls = scrolls;
172
169
 
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
- });
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
+ });
181
+
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
+ }
187
+ }
181
188
  }
182
189
 
183
190
  // Закончилась анимация свайпа назад
@@ -209,12 +216,6 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
209
216
  });
210
217
  }
211
218
 
212
- // Начался переход
213
- if (!prevState.animated && this.state.animated) {
214
- const { prevPanel, nextPanel, isBack } = this.state;
215
- this.waitAnimationFinish(this.pickPanel(isBack ? prevPanel : nextPanel), this.transitionEndHandler);
216
- }
217
-
218
219
  // Начался свайп назад
219
220
  if (!prevState.swipingBack && this.state.swipingBack) {
220
221
  this.props.onSwipeBackStart && this.props.onSwipeBackStart();
@@ -265,21 +266,6 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
265
266
  }
266
267
  }
267
268
 
268
- waitAnimationFinish(elem: HTMLElement, eventHandler: AnimationEventHandler): void {
269
- if (this.shouldDisableTransitionMotion()) {
270
- eventHandler();
271
- return;
272
- }
273
-
274
- if (animationEvent.supported) {
275
- elem.removeEventListener(animationEvent.name, eventHandler);
276
- elem.addEventListener(animationEvent.name, eventHandler);
277
- } else {
278
- clearTimeout(this.animationFinishTimeout);
279
- this.animationFinishTimeout = setTimeout(eventHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
280
- }
281
- }
282
-
283
269
  blurActiveElement(): void {
284
270
  if (typeof this.window !== 'undefined' && this.document.activeElement) {
285
271
  (this.document.activeElement as HTMLElement).blur();
@@ -290,39 +276,41 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
290
276
  return this.panelNodes[id];
291
277
  }
292
278
 
293
- transitionEndHandler = (e?: AnimationEvent): void => {
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
+
306
+ transitionEndHandler = (e?: React.AnimationEvent): void => {
294
307
  if (!e || [
295
308
  'vkui-animation-ios-next-forward',
296
309
  'vkui-animation-ios-prev-back',
297
310
  'vkui-animation-view-next-forward',
298
311
  'vkui-animation-view-prev-back',
299
312
  ].includes(e.animationName)) {
300
- const activePanel = this.props.activePanel;
301
- const prevPanel = this.state.prevPanel;
302
- const isBack = this.state.isBack;
303
-
304
- const prevPanelScrolls = [...this.scrolls[prevPanel] || []].slice(0, -1);
305
- const newPanelScrolls = [...this.scrolls[activePanel] || []];
306
- const scrollPosition = isBack ? newPanelScrolls.pop() : 0;
307
- if (isBack) {
308
- this.scrolls = {
309
- ...this.scrolls,
310
- [prevPanel]: prevPanelScrolls,
311
- [activePanel]: newPanelScrolls,
312
- };
313
- }
314
-
315
- this.setState({
316
- prevPanel: null,
317
- nextPanel: null,
318
- visiblePanels: [activePanel],
319
- activePanel: activePanel,
320
- animated: false,
321
- isBack: undefined,
322
- }, () => {
323
- isBack && this.props.scroll.scrollTo(0, scrollPosition);
324
- this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
325
- });
313
+ this.flushTransition(this.state.prevPanel, this.state.isBack);
326
314
  }
327
315
  };
328
316
 
@@ -356,12 +344,7 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
356
344
  }
357
345
 
358
346
  onMoveX = (e: TouchEvent): void => {
359
- const target = e.originalEvent.target as HTMLElement;
360
- if (
361
- target &&
362
- typeof target.tagName === 'string' &&
363
- swipeBackExcludedTags.includes(target.tagName.toLowerCase())
364
- ) {
347
+ if (swipeBackExcluded(e)) {
365
348
  return;
366
349
  }
367
350
 
@@ -465,7 +448,7 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
465
448
  ...restProps
466
449
  } = this.props;
467
450
  const {
468
- prevPanel, nextPanel, activePanel, isBack,
451
+ prevPanel, nextPanel, activePanel, isBack, animated,
469
452
  swipeBackPrevPanel, swipeBackNextPanel, swipeBackResult, swipingBack,
470
453
  } = this.state;
471
454
 
@@ -517,6 +500,7 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
517
500
  const panelId = getNavId(panel.props, warn);
518
501
  const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;
519
502
  const compensateScroll = isPrev || panelId === swipeBackNextPanel || panelId === nextPanel && isBack;
503
+ const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);
520
504
  const scrollList = this.scrolls[panelId] || [];
521
505
  const scroll = scrollList[scrollList.length - 1] || 0;
522
506
 
@@ -531,6 +515,7 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
531
515
  'View__panel--swipe-back-success': swipeBackResult === SwipeBackResults.success,
532
516
  'View__panel--swipe-back-failed': swipeBackResult === SwipeBackResults.fail,
533
517
  })}
518
+ onAnimationEnd={isTransitionTarget ? this.transitionEndHandler : null}
534
519
  ref={(el) => this.panelNodes[panelId] = el}
535
520
  style={this.calcPanelSwipeStyles(panelId)}
536
521
  key={panelId}
@@ -0,0 +1,8 @@
1
+ import { TouchEvent } from '../Touch/Touch';
2
+
3
+ const swipeBackExcludedSelector = 'input, textarea, [data-vkui-swipe-back=false]';
4
+
5
+ export function swipeBackExcluded(e: TouchEvent) {
6
+ const target = e.originalEvent.target as HTMLElement;
7
+ return Boolean(target?.closest(swipeBackExcludedSelector));
8
+ }
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';
@@ -50,7 +50,7 @@ const ACCESSIBLE_KEYS: AccessibleKey[] = [
50
50
  },
51
51
  ];
52
52
 
53
- export function pressedKey(e: KeyboardEvent): Keys {
53
+ export function pressedKey(e: KeyboardEvent | React.KeyboardEvent<HTMLElement>): Keys {
54
54
  return ACCESSIBLE_KEYS.find(({ key, keyCode }) => key.includes(e.key) || keyCode === e.keyCode)?.code || null;
55
55
  }
56
56
 
@@ -66,7 +66,7 @@ export function shouldTriggerClickOnEnterOrSpace(e: KeyboardEvent | React.Keyboa
66
66
  && (role === 'button' || role === 'link');
67
67
 
68
68
  const isNativeAnchorEl = tagName === 'A' && el.hasAttribute('href');
69
- const keyPressed = pressedKey(e as KeyboardEvent);
69
+ const keyPressed = pressedKey(e);
70
70
 
71
71
  return isValidKeyboardEventTarget && (
72
72
  // trigger buttons on Space
@@ -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
  }
@@ -10,9 +10,8 @@ export type VKUISupportEvents = {
10
10
  declare const WebKitAnimationEvent: AnimationEvent;
11
11
  declare const WebKitTransitionEvent: TransitionEvent;
12
12
 
13
- const animationEvent: VKUISupportEvents = {
13
+ const animationEvent = {
14
14
  supported: false,
15
- name: null,
16
15
  };
17
16
 
18
17
  const transitionEvent: VKUISupportEvents = {
@@ -23,10 +22,8 @@ const transitionEvent: VKUISupportEvents = {
23
22
  if (canUseDOM && !isTesting) {
24
23
  if (typeof AnimationEvent !== 'undefined') {
25
24
  animationEvent.supported = true;
26
- animationEvent.name = 'animationend';
27
25
  } else if (typeof WebKitAnimationEvent !== 'undefined') {
28
26
  animationEvent.supported = true;
29
- animationEvent.name = 'webkitAnimationEnd';
30
27
  }
31
28
 
32
29
  if (typeof TransitionEvent !== 'undefined') {
@@ -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';
@@ -4,7 +4,7 @@
4
4
  */
5
5
  body[scheme="vkcom_light"], [scheme="vkcom_light"] {
6
6
  --accent: #5181b8;
7
- --accent_alternate: #2787f5;
7
+ --accent_alternate: #0077ff;
8
8
  --action_sheet_action_foreground: #5181b8;
9
9
  --action_sheet_separator: rgba(0, 0, 0, 0.12);
10
10
  --activity_indicator_tint: #aeb7c2;
@@ -71,7 +71,7 @@ body[scheme="vkcom_light"], [scheme="vkcom_light"] {
71
71
  --feed_recommended_friend_promo_background: #5181b8;
72
72
  --field_background: #f7f8fa;
73
73
  --field_border: #dce1e6;
74
- --field_error_background: #ff5c5c;
74
+ --field_error_background: #faebeb;
75
75
  --field_error_border: #e64646;
76
76
  --field_text_placeholder: #818c99;
77
77
  --field_valid_border: #4bb34b;
@@ -96,7 +96,7 @@ body[scheme="vkcom_light"], [scheme="vkcom_light"] {
96
96
  --header_text_alternate: #000000;
97
97
  --header_text_secondary: #818c99;
98
98
  --header_tint: #aeb7c2;
99
- --header_tint_alternate: #2787f5;
99
+ --header_tint_alternate: #0077ff;
100
100
  --icon_alpha_placeholder: #ffffff;
101
101
  --icon_medium: #6f7985;
102
102
  --icon_medium_alpha: rgba(0, 0, 0, 0.48);
@@ -10,7 +10,9 @@ export function fakeTimers() {
10
10
  afterEach(() => jest.useRealTimers());
11
11
  }
12
12
 
13
- export const runAllTimers = () => act(() => jest.runAllTimers());
13
+ export const runAllTimers = () => act(() => {
14
+ jest.runAllTimers();
15
+ });
14
16
 
15
17
  export const imgOnlyAttributes: ImgOnlyAttributes = {
16
18
  alt: 'test',
@@ -123,3 +125,34 @@ export const mockScrollContext = (getY: () => number): [React.FC, jest.Mock] =>
123
125
  scrollTo,
124
126
  ];
125
127
  };
128
+
129
+ const isNullOrUndefined = (val: any) => val === null || val === undefined;
130
+
131
+ // Согласно спеке, offsetParent в ряде случаев будет null
132
+ Object.defineProperty(HTMLElement.prototype, 'offsetParent', {
133
+ get() {
134
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
135
+ let element: HTMLElement = this;
136
+ while (!isNullOrUndefined(element) &&
137
+ (isNullOrUndefined(element.style) ||
138
+ isNullOrUndefined(element.style.display) ||
139
+ element.style.display.toLowerCase() !== 'none')) {
140
+ // @ts-ignore
141
+ element = element.parentNode;
142
+ }
143
+
144
+ if (!isNullOrUndefined(element)) {
145
+ return null;
146
+ }
147
+
148
+ if (!isNullOrUndefined(this.style) && !isNullOrUndefined(this.style.position) && this.style.position.toLowerCase() === 'fixed') {
149
+ return null;
150
+ }
151
+
152
+ if (this.tagName.toLowerCase() === 'html' || this.tagName.toLowerCase() === 'body') {
153
+ return null;
154
+ }
155
+
156
+ return this.parentNode;
157
+ },
158
+ });
package/src/types.ts CHANGED
@@ -14,6 +14,10 @@ export interface HasRef<T> {
14
14
  getRef?: React.Ref<T>;
15
15
  }
16
16
 
17
+ export interface HasComponent {
18
+ Component?: React.ElementType;
19
+ }
20
+
17
21
  export interface HasAlign {
18
22
  align?: AlignType;
19
23
  }