@vkontakte/vkui 6.7.2 → 6.7.4

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 (296) hide show
  1. package/dist/cjs/components/BaseGallery/BaseGallery.d.ts.map +1 -1
  2. package/dist/cjs/components/BaseGallery/BaseGallery.js +5 -2
  3. package/dist/cjs/components/BaseGallery/BaseGallery.js.map +1 -1
  4. package/dist/cjs/components/BaseGallery/CarouselBase/CarouselBase.d.ts.map +1 -1
  5. package/dist/cjs/components/BaseGallery/CarouselBase/CarouselBase.js +5 -1
  6. package/dist/cjs/components/BaseGallery/CarouselBase/CarouselBase.js.map +1 -1
  7. package/dist/cjs/components/Button/Button.d.ts +1 -0
  8. package/dist/cjs/components/Button/Button.d.ts.map +1 -1
  9. package/dist/cjs/components/Button/Button.js.map +1 -1
  10. package/dist/cjs/components/Calendar/Calendar.d.ts +6 -6
  11. package/dist/cjs/components/Calendar/Calendar.d.ts.map +1 -1
  12. package/dist/cjs/components/Calendar/Calendar.js +25 -5
  13. package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
  14. package/dist/cjs/components/CalendarDay/CalendarDay.d.ts +4 -1
  15. package/dist/cjs/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  16. package/dist/cjs/components/CalendarDay/CalendarDay.js +5 -3
  17. package/dist/cjs/components/CalendarDay/CalendarDay.js.map +1 -1
  18. package/dist/cjs/components/CalendarDays/CalendarDays.d.ts +6 -3
  19. package/dist/cjs/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  20. package/dist/cjs/components/CalendarDays/CalendarDays.js +5 -3
  21. package/dist/cjs/components/CalendarDays/CalendarDays.js.map +1 -1
  22. package/dist/cjs/components/CalendarHeader/CalendarHeader.d.ts +8 -2
  23. package/dist/cjs/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  24. package/dist/cjs/components/CalendarHeader/CalendarHeader.js +14 -6
  25. package/dist/cjs/components/CalendarHeader/CalendarHeader.js.map +1 -1
  26. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +8 -4
  27. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  28. package/dist/cjs/components/CalendarRange/CalendarRange.js +13 -8
  29. package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
  30. package/dist/cjs/components/CalendarTime/CalendarTime.d.ts +9 -2
  31. package/dist/cjs/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  32. package/dist/cjs/components/CalendarTime/CalendarTime.js +10 -5
  33. package/dist/cjs/components/CalendarTime/CalendarTime.js.map +1 -1
  34. package/dist/cjs/components/Clickable/useState.d.ts +1 -1
  35. package/dist/cjs/components/Clickable/useState.d.ts.map +1 -1
  36. package/dist/cjs/components/Clickable/useState.js +12 -19
  37. package/dist/cjs/components/Clickable/useState.js.map +1 -1
  38. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  39. package/dist/cjs/components/CustomSelect/CustomSelect.js +3 -18
  40. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  41. package/dist/cjs/components/DateInput/DateInput.d.ts +12 -3
  42. package/dist/cjs/components/DateInput/DateInput.d.ts.map +1 -1
  43. package/dist/cjs/components/DateInput/DateInput.js +26 -11
  44. package/dist/cjs/components/DateInput/DateInput.js.map +1 -1
  45. package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts +15 -3
  46. package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  47. package/dist/cjs/components/DateRangeInput/DateRangeInput.js +22 -11
  48. package/dist/cjs/components/DateRangeInput/DateRangeInput.js.map +1 -1
  49. package/dist/cjs/components/FocusTrap/FocusTrap.d.ts +1 -1
  50. package/dist/cjs/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  51. package/dist/cjs/components/FocusTrap/FocusTrap.js +50 -41
  52. package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
  53. package/dist/cjs/components/FormItem/FormItem.d.ts +0 -2
  54. package/dist/cjs/components/FormItem/FormItem.d.ts.map +1 -1
  55. package/dist/cjs/components/FormItem/FormItem.js.map +1 -1
  56. package/dist/cjs/components/Gallery/Gallery.d.ts +1 -1
  57. package/dist/cjs/components/Gallery/Gallery.d.ts.map +1 -1
  58. package/dist/cjs/components/Gallery/Gallery.js +12 -3
  59. package/dist/cjs/components/Gallery/Gallery.js.map +1 -1
  60. package/dist/cjs/components/Gallery/hooks.d.ts +9 -1
  61. package/dist/cjs/components/Gallery/hooks.d.ts.map +1 -1
  62. package/dist/cjs/components/Gallery/hooks.js +43 -25
  63. package/dist/cjs/components/Gallery/hooks.js.map +1 -1
  64. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  65. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +19 -26
  66. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  67. package/dist/cjs/components/Popover/Popover.js +1 -1
  68. package/dist/cjs/components/Popover/Popover.js.map +1 -1
  69. package/dist/cjs/hooks/useDateInput.d.ts +2 -1
  70. package/dist/cjs/hooks/useDateInput.d.ts.map +1 -1
  71. package/dist/cjs/hooks/useDateInput.js +29 -9
  72. package/dist/cjs/hooks/useDateInput.js.map +1 -1
  73. package/dist/cjs/lib/floating/customResizeObserver.d.ts.map +1 -1
  74. package/dist/cjs/lib/floating/customResizeObserver.js +0 -1
  75. package/dist/cjs/lib/floating/customResizeObserver.js.map +1 -1
  76. package/dist/cjs/lib/floating/types/component.d.ts +2 -2
  77. package/dist/cjs/lib/floating/types/component.d.ts.map +1 -1
  78. package/dist/cjs/lib/floating/useFloatingWithInteractions/index.d.ts +1 -0
  79. package/dist/cjs/lib/floating/useFloatingWithInteractions/index.d.ts.map +1 -1
  80. package/dist/cjs/lib/floating/useFloatingWithInteractions/index.js.map +1 -1
  81. package/dist/cjs/lib/floating/useFloatingWithInteractions/types.d.ts +2 -1
  82. package/dist/cjs/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  83. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  84. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +14 -1
  85. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  86. package/dist/components/BaseGallery/BaseGallery.d.ts.map +1 -1
  87. package/dist/components/BaseGallery/BaseGallery.js +5 -2
  88. package/dist/components/BaseGallery/BaseGallery.js.map +1 -1
  89. package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts.map +1 -1
  90. package/dist/components/BaseGallery/CarouselBase/CarouselBase.js +5 -1
  91. package/dist/components/BaseGallery/CarouselBase/CarouselBase.js.map +1 -1
  92. package/dist/components/Button/Button.d.ts +1 -0
  93. package/dist/components/Button/Button.d.ts.map +1 -1
  94. package/dist/components/Button/Button.js.map +1 -1
  95. package/dist/components/Calendar/Calendar.d.ts +6 -6
  96. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  97. package/dist/components/Calendar/Calendar.js +25 -5
  98. package/dist/components/Calendar/Calendar.js.map +1 -1
  99. package/dist/components/CalendarDay/CalendarDay.d.ts +4 -1
  100. package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  101. package/dist/components/CalendarDay/CalendarDay.js +5 -3
  102. package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
  103. package/dist/components/CalendarDays/CalendarDays.d.ts +6 -3
  104. package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  105. package/dist/components/CalendarDays/CalendarDays.js +5 -3
  106. package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
  107. package/dist/components/CalendarHeader/CalendarHeader.d.ts +8 -2
  108. package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  109. package/dist/components/CalendarHeader/CalendarHeader.js +14 -6
  110. package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
  111. package/dist/components/CalendarRange/CalendarRange.d.ts +8 -4
  112. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  113. package/dist/components/CalendarRange/CalendarRange.js +13 -8
  114. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  115. package/dist/components/CalendarTime/CalendarTime.d.ts +9 -2
  116. package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  117. package/dist/components/CalendarTime/CalendarTime.js +10 -5
  118. package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
  119. package/dist/components/Clickable/useState.d.ts +1 -1
  120. package/dist/components/Clickable/useState.d.ts.map +1 -1
  121. package/dist/components/Clickable/useState.js +12 -19
  122. package/dist/components/Clickable/useState.js.map +1 -1
  123. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  124. package/dist/components/CustomSelect/CustomSelect.js +3 -18
  125. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  126. package/dist/components/DateInput/DateInput.d.ts +12 -3
  127. package/dist/components/DateInput/DateInput.d.ts.map +1 -1
  128. package/dist/components/DateInput/DateInput.js +26 -11
  129. package/dist/components/DateInput/DateInput.js.map +1 -1
  130. package/dist/components/DateRangeInput/DateRangeInput.d.ts +15 -3
  131. package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  132. package/dist/components/DateRangeInput/DateRangeInput.js +22 -11
  133. package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
  134. package/dist/components/FocusTrap/FocusTrap.d.ts +1 -1
  135. package/dist/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  136. package/dist/components/FocusTrap/FocusTrap.js +51 -42
  137. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  138. package/dist/components/FormItem/FormItem.d.ts +0 -2
  139. package/dist/components/FormItem/FormItem.d.ts.map +1 -1
  140. package/dist/components/FormItem/FormItem.js.map +1 -1
  141. package/dist/components/Gallery/Gallery.d.ts +1 -1
  142. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  143. package/dist/components/Gallery/Gallery.js +12 -3
  144. package/dist/components/Gallery/Gallery.js.map +1 -1
  145. package/dist/components/Gallery/hooks.d.ts +9 -1
  146. package/dist/components/Gallery/hooks.d.ts.map +1 -1
  147. package/dist/components/Gallery/hooks.js +43 -25
  148. package/dist/components/Gallery/hooks.js.map +1 -1
  149. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  150. package/dist/components/HorizontalScroll/HorizontalScroll.js +20 -27
  151. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  152. package/dist/components/Popover/Popover.js +1 -1
  153. package/dist/components/Popover/Popover.js.map +1 -1
  154. package/dist/components.css +1 -1
  155. package/dist/components.css.map +1 -1
  156. package/dist/components.js.tmp +382 -230
  157. package/dist/cssm/components/BaseGallery/BaseGallery.d.ts.map +1 -1
  158. package/dist/cssm/components/BaseGallery/BaseGallery.js +3 -1
  159. package/dist/cssm/components/BaseGallery/BaseGallery.js.map +1 -1
  160. package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.d.ts.map +1 -1
  161. package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js +5 -1
  162. package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js.map +1 -1
  163. package/dist/cssm/components/Button/Button.d.ts +1 -0
  164. package/dist/cssm/components/Button/Button.d.ts.map +1 -1
  165. package/dist/cssm/components/Button/Button.js +1 -0
  166. package/dist/cssm/components/Button/Button.js.map +1 -1
  167. package/dist/cssm/components/Calendar/Calendar.d.ts +6 -6
  168. package/dist/cssm/components/Calendar/Calendar.d.ts.map +1 -1
  169. package/dist/cssm/components/Calendar/Calendar.js +14 -4
  170. package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
  171. package/dist/cssm/components/CalendarDay/CalendarDay.d.ts +4 -1
  172. package/dist/cssm/components/CalendarDay/CalendarDay.d.ts.map +1 -1
  173. package/dist/cssm/components/CalendarDay/CalendarDay.js +2 -1
  174. package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
  175. package/dist/cssm/components/CalendarDays/CalendarDays.d.ts +6 -3
  176. package/dist/cssm/components/CalendarDays/CalendarDays.d.ts.map +1 -1
  177. package/dist/cssm/components/CalendarDays/CalendarDays.js +2 -1
  178. package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
  179. package/dist/cssm/components/CalendarHeader/CalendarHeader.d.ts +8 -2
  180. package/dist/cssm/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
  181. package/dist/cssm/components/CalendarHeader/CalendarHeader.js +7 -3
  182. package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
  183. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +8 -4
  184. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  185. package/dist/cssm/components/CalendarRange/CalendarRange.js +9 -5
  186. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  187. package/dist/cssm/components/CalendarTime/CalendarTime.d.ts +9 -2
  188. package/dist/cssm/components/CalendarTime/CalendarTime.d.ts.map +1 -1
  189. package/dist/cssm/components/CalendarTime/CalendarTime.js +10 -5
  190. package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
  191. package/dist/cssm/components/CalendarTime/CalendarTime.module.css +4 -0
  192. package/dist/cssm/components/Clickable/useState.d.ts +1 -1
  193. package/dist/cssm/components/Clickable/useState.d.ts.map +1 -1
  194. package/dist/cssm/components/Clickable/useState.js +10 -11
  195. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  196. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  197. package/dist/cssm/components/CustomSelect/CustomSelect.js +3 -18
  198. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  199. package/dist/cssm/components/DateInput/DateInput.d.ts +12 -3
  200. package/dist/cssm/components/DateInput/DateInput.d.ts.map +1 -1
  201. package/dist/cssm/components/DateInput/DateInput.js +18 -9
  202. package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
  203. package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts +15 -3
  204. package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
  205. package/dist/cssm/components/DateRangeInput/DateRangeInput.js +17 -9
  206. package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
  207. package/dist/cssm/components/FocusTrap/FocusTrap.d.ts +1 -1
  208. package/dist/cssm/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  209. package/dist/cssm/components/FocusTrap/FocusTrap.js +51 -42
  210. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  211. package/dist/cssm/components/FormItem/FormItem.d.ts +0 -2
  212. package/dist/cssm/components/FormItem/FormItem.d.ts.map +1 -1
  213. package/dist/cssm/components/FormItem/FormItem.js.map +1 -1
  214. package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.module.css +1 -0
  215. package/dist/cssm/components/Gallery/Gallery.d.ts +1 -1
  216. package/dist/cssm/components/Gallery/Gallery.d.ts.map +1 -1
  217. package/dist/cssm/components/Gallery/Gallery.js +9 -2
  218. package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
  219. package/dist/cssm/components/Gallery/hooks.d.ts +9 -1
  220. package/dist/cssm/components/Gallery/hooks.d.ts.map +1 -1
  221. package/dist/cssm/components/Gallery/hooks.js +43 -25
  222. package/dist/cssm/components/Gallery/hooks.js.map +1 -1
  223. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  224. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +20 -27
  225. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  226. package/dist/cssm/components/Popover/Popover.js +1 -1
  227. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  228. package/dist/cssm/hooks/useDateInput.d.ts +2 -1
  229. package/dist/cssm/hooks/useDateInput.d.ts.map +1 -1
  230. package/dist/cssm/hooks/useDateInput.js +30 -9
  231. package/dist/cssm/hooks/useDateInput.js.map +1 -1
  232. package/dist/cssm/lib/floating/customResizeObserver.d.ts.map +1 -1
  233. package/dist/cssm/lib/floating/customResizeObserver.js +0 -1
  234. package/dist/cssm/lib/floating/customResizeObserver.js.map +1 -1
  235. package/dist/cssm/lib/floating/types/component.d.ts +2 -2
  236. package/dist/cssm/lib/floating/types/component.d.ts.map +1 -1
  237. package/dist/cssm/lib/floating/types/component.js.map +1 -1
  238. package/dist/cssm/lib/floating/useFloatingWithInteractions/index.d.ts +1 -0
  239. package/dist/cssm/lib/floating/useFloatingWithInteractions/index.d.ts.map +1 -1
  240. package/dist/cssm/lib/floating/useFloatingWithInteractions/index.js.map +1 -1
  241. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.d.ts +2 -1
  242. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  243. package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  244. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  245. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +14 -1
  246. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  247. package/dist/hooks/useDateInput.d.ts +2 -1
  248. package/dist/hooks/useDateInput.d.ts.map +1 -1
  249. package/dist/hooks/useDateInput.js +30 -9
  250. package/dist/hooks/useDateInput.js.map +1 -1
  251. package/dist/lib/floating/customResizeObserver.d.ts.map +1 -1
  252. package/dist/lib/floating/customResizeObserver.js +0 -1
  253. package/dist/lib/floating/customResizeObserver.js.map +1 -1
  254. package/dist/lib/floating/types/component.d.ts +2 -2
  255. package/dist/lib/floating/types/component.d.ts.map +1 -1
  256. package/dist/lib/floating/types/component.js.map +1 -1
  257. package/dist/lib/floating/useFloatingWithInteractions/index.d.ts +1 -0
  258. package/dist/lib/floating/useFloatingWithInteractions/index.d.ts.map +1 -1
  259. package/dist/lib/floating/useFloatingWithInteractions/index.js.map +1 -1
  260. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +2 -1
  261. package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
  262. package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
  263. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  264. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +14 -1
  265. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  266. package/dist/vkui.css +1 -1
  267. package/dist/vkui.css.map +1 -1
  268. package/dist/vkui.js.tmp +382 -230
  269. package/package.json +1 -1
  270. package/src/components/BaseGallery/BaseGallery.tsx +8 -1
  271. package/src/components/BaseGallery/CarouselBase/CarouselBase.tsx +6 -1
  272. package/src/components/Button/Button.tsx +1 -0
  273. package/src/components/Calendar/Calendar.tsx +49 -6
  274. package/src/components/CalendarDay/CalendarDay.tsx +7 -1
  275. package/src/components/CalendarDays/CalendarDays.tsx +9 -1
  276. package/src/components/CalendarHeader/CalendarHeader.tsx +21 -1
  277. package/src/components/CalendarRange/CalendarRange.tsx +24 -3
  278. package/src/components/CalendarTime/CalendarTime.module.css +4 -0
  279. package/src/components/CalendarTime/CalendarTime.tsx +39 -10
  280. package/src/components/Clickable/useState.tsx +30 -27
  281. package/src/components/CustomSelect/CustomSelect.tsx +4 -17
  282. package/src/components/DateInput/DateInput.tsx +32 -3
  283. package/src/components/DateRangeInput/DateRangeInput.tsx +28 -1
  284. package/src/components/FocusTrap/FocusTrap.tsx +75 -45
  285. package/src/components/FormItem/FormItem.tsx +0 -2
  286. package/src/components/FormLayoutGroup/FormLayoutGroup.module.css +1 -0
  287. package/src/components/Gallery/Gallery.tsx +10 -1
  288. package/src/components/Gallery/hooks.ts +49 -33
  289. package/src/components/HorizontalScroll/HorizontalScroll.tsx +23 -28
  290. package/src/components/Popover/Popover.tsx +1 -1
  291. package/src/hooks/useDateInput.ts +23 -6
  292. package/src/lib/floating/customResizeObserver.ts +0 -1
  293. package/src/lib/floating/types/component.ts +2 -1
  294. package/src/lib/floating/useFloatingWithInteractions/index.ts +2 -0
  295. package/src/lib/floating/useFloatingWithInteractions/types.ts +3 -1
  296. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +15 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce, noop } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n onShownChanged: onShownChangedProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo<LocalState | undefined>(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const onShownChanged = useStableCallback(onShownChangedProp ? onShownChangedProp : noop);\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: 'fixed',\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n if (!closeAfterClick && shownLocalState.reason === 'hover') {\n return;\n }\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback((event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n hideWithDelay();\n }\n },\n );\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n onShownChanged(false, shownLocalState.reason);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus = React.useCallback(\n () => (triggerOnFocus ? blockFocusRef.current : true),\n [triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n onShownChanged(true, shownLocalState.reason);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide, onShownChanged],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["useFloatingWithInteractions","whileElementsMounted","args","autoUpdateFloatingElement","elementResize","trigger","DEFAULT_TRIGGER","placement","placementProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","onShownChanged","onShownChangedProp","memoizedValue","React","useMemo","undefined","shownLocalState","setShownLocalState","useCustomEnsuredControl","value","defaultValue","onChange","useStableCallback","reason","noop","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","useResolveTriggerType","x","y","strategy","refs","middlewareData","useFloating","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","debounce","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","getActiveElementByAnotherElement","contains","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","currentTarget","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","handleEscapeKeyDown","handleClickOutside","useGlobalOnClickOutside","useIsomorphicLayoutEffect","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","isHTMLElement","win","getWindow","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","convertFloatingDataToReactCSSProperties","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce, noop } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n onShownChanged: onShownChangedProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo<LocalState | undefined>(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const onShownChanged = useStableCallback(onShownChangedProp ? onShownChangedProp : noop);\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: 'fixed',\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n if (!closeAfterClick && shownLocalState.reason === 'hover') {\n return;\n }\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback((event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n hideWithDelay();\n }\n },\n );\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n onShownChanged(false, shownLocalState.reason);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus: UseFloatingWithInteractionsReturn['onRestoreFocus'] = React.useCallback(\n (restoreFocus = true) => {\n if (!restoreFocus) {\n return false;\n }\n if (restoreFocus === true) {\n return triggerOnFocus ? blockFocusRef.current : true;\n } else if (restoreFocus === 'anchor-element') {\n return refs.reference.current as HTMLElement;\n } else if (restoreFocus instanceof HTMLElement) {\n return restoreFocus;\n }\n return false;\n },\n [refs.reference, triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n onShownChanged(true, shownLocalState.reason);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide, onShownChanged],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["useFloatingWithInteractions","whileElementsMounted","args","autoUpdateFloatingElement","elementResize","trigger","DEFAULT_TRIGGER","placement","placementProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","onShownChanged","onShownChangedProp","memoizedValue","React","useMemo","undefined","shownLocalState","setShownLocalState","useCustomEnsuredControl","value","defaultValue","onChange","useStableCallback","reason","noop","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","useResolveTriggerType","x","y","strategy","refs","middlewareData","useFloating","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","debounce","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","getActiveElementByAnotherElement","contains","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","currentTarget","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","restoreFocus","HTMLElement","handleEscapeKeyDown","handleClickOutside","useGlobalOnClickOutside","useIsomorphicLayoutEffect","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","isHTMLElement","win","getWindow","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","convertFloatingDataToReactCSSProperties","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseGallery.d.ts","sourceRoot":"","sources":["../../../src/components/BaseGallery/BaseGallery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,KAAK,EAAE,gBAAgB,EAAkD,MAAM,SAAS,CAAC;AA2BhG,eAAO,MAAM,WAAW,4LAiBrB,gBAAgB,KAAG,KAAK,CAAC,SAqU3B,CAAC"}
1
+ {"version":3,"file":"BaseGallery.d.ts","sourceRoot":"","sources":["../../../src/components/BaseGallery/BaseGallery.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,KAAK,EAAE,gBAAgB,EAAkD,MAAM,SAAS,CAAC;AA2BhG,eAAO,MAAM,WAAW,4LAiBrB,gBAAgB,KAAG,KAAK,CAAC,SA4U3B,CAAC"}
@@ -107,7 +107,7 @@ export const BaseGallery = (_param)=>{
107
107
  return indent;
108
108
  };
109
109
  const initializeSlides = (options = {})=>{
110
- var _rootRef_current, _viewportRef_current, _layoutState_current_slides_slideIndex, _localSlides_slideIndex;
110
+ var _rootRef_current, _viewportRef_current, _layoutState_current_slides_slideIndex, _localSlides_slideIndex, _localSlides_slideIndex1;
111
111
  var _React_Children_map;
112
112
  const localSlides = (_React_Children_map = React.Children.map(children, (_item, i)=>{
113
113
  const elem = slidesStore.current[`slide-${i}`];
@@ -123,6 +123,9 @@ export const BaseGallery = (_param)=>{
123
123
  const localViewportOffsetWidth = (_viewportRef_current_offsetWidth = (_viewportRef_current = viewportRef.current) === null || _viewportRef_current === void 0 ? void 0 : _viewportRef_current.offsetWidth) !== null && _viewportRef_current_offsetWidth !== void 0 ? _viewportRef_current_offsetWidth : 0;
124
124
  const localLayerWidth = localSlides.reduce((val, slide)=>slide.width + val, 0);
125
125
  const adjustShiftX = localSlides.length <= layoutState.current.slides.length || ((_layoutState_current_slides_slideIndex = layoutState.current.slides[slideIndex]) === null || _layoutState_current_slides_slideIndex === void 0 ? void 0 : _layoutState_current_slides_slideIndex.coordX) !== ((_localSlides_slideIndex = localSlides[slideIndex]) === null || _localSlides_slideIndex === void 0 ? void 0 : _localSlides_slideIndex.coordX);
126
+ var _localSlides_slideIndex_width;
127
+ const currentSlideOffsetOnCenterAlignment = (localContainerWidth - ((_localSlides_slideIndex_width = (_localSlides_slideIndex1 = localSlides[slideIndex]) === null || _localSlides_slideIndex1 === void 0 ? void 0 : _localSlides_slideIndex1.width) !== null && _localSlides_slideIndex_width !== void 0 ? _localSlides_slideIndex_width : 0)) / 2;
128
+ const isFullyVisible = align === 'center' ? localLayerWidth + currentSlideOffsetOnCenterAlignment <= localContainerWidth : localLayerWidth <= localContainerWidth;
126
129
  layoutState.current = {
127
130
  containerWidth: localContainerWidth,
128
131
  viewportOffsetWidth: localViewportOffsetWidth,
@@ -141,7 +144,7 @@ export const BaseGallery = (_param)=>{
141
144
  align
142
145
  }),
143
146
  slides: localSlides,
144
- isFullyVisible: localLayerWidth <= localContainerWidth
147
+ isFullyVisible
145
148
  };
146
149
  setShiftState((prevState)=>{
147
150
  var _options_animation;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/BaseGallery/BaseGallery.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport { calcMax, calcMin } from './helpers';\nimport type { BaseGalleryProps, GallerySlidesState, LayoutState, ShiftingState } from './types';\nimport styles from './BaseGallery.module.css';\n\nconst ANIMATION_DURATION = 0.24;\n\nconst LAYOUT_DEFAULT_STATE = {\n containerWidth: 0,\n viewportOffsetWidth: 0,\n layerWidth: 0,\n min: 0,\n max: 0,\n slides: [],\n isFullyVisible: true,\n};\n\nconst SHIFT_DEFAULT_STATE = {\n animation: undefined,\n shiftX: 0,\n dragging: false,\n deltaX: 0,\n indent: 0,\n};\n\nconst stylesBullets = {\n dark: styles['BaseGallery__bullets--dark'],\n light: styles['BaseGallery__bullets--light'],\n};\nexport const BaseGallery = ({\n bullets = false,\n getRootRef,\n children,\n slideWidth = '100%',\n slideIndex = 0,\n dragDisabled = false,\n onDragStart,\n onDragEnd,\n onChange,\n onPrevClick,\n onNextClick,\n align = 'left',\n showArrows,\n getRef,\n arrowSize = 'l',\n ...restProps\n}: BaseGalleryProps): React.ReactNode => {\n const slidesStore = React.useRef<Record<string, HTMLDivElement | null>>({});\n const layoutState = React.useRef<LayoutState>(LAYOUT_DEFAULT_STATE);\n const [shiftState, setShiftState] = React.useState<ShiftingState>(SHIFT_DEFAULT_STATE);\n\n const rootRef = useExternRef(getRootRef);\n const viewportRef = useExternRef(getRef);\n\n const { window } = useDOM();\n const hasPointer = useAdaptivityHasPointer();\n\n const isCenterWithCustomWidth = slideWidth === 'custom' && align === 'center';\n\n const validateIndent = (value: number) => {\n const localMax = layoutState.current.max ?? 0;\n const localMin = layoutState.current.min ?? 0;\n\n if (value < localMin) {\n return localMin;\n } else if (value > localMax) {\n return localMax;\n }\n\n return value;\n };\n\n /*\n * Считает отступ слоя галереи\n */\n const calculateIndent = (targetIndex: number) => {\n if (layoutState.current.isFullyVisible) {\n return 0;\n }\n\n const targetSlide = layoutState.current.slides?.length\n ? layoutState.current.slides[targetIndex]\n : null;\n\n if (targetSlide) {\n const { coordX, width } = targetSlide;\n\n if (isCenterWithCustomWidth) {\n const viewportWidth = layoutState.current.viewportOffsetWidth ?? 0;\n return viewportWidth / 2 - coordX - width / 2;\n }\n\n return validateIndent(-1 * coordX);\n }\n return 0;\n };\n\n /*\n * Считает отступ слоя галереи во время драга\n */\n const calculateDragIndent = () => {\n const localMax = layoutState.current.max ?? 0;\n const localMin = layoutState.current.min ?? 0;\n const indent = shiftState.shiftX + shiftState.deltaX;\n\n if (indent > localMax) {\n return localMax + Number((indent - localMax) / 3);\n } else if (indent < localMin) {\n return localMin + Number((indent - localMin) / 3);\n }\n\n return indent;\n };\n\n const initializeSlides = (options: { animation?: boolean } = {}) => {\n const localSlides =\n React.Children.map(children, (_item: React.ReactNode, i: number): GallerySlidesState => {\n const elem = slidesStore.current[`slide-${i}`];\n return {\n coordX: elem?.offsetLeft ?? 0,\n width: elem?.offsetWidth ?? 0,\n };\n }) ?? [];\n\n const localContainerWidth = rootRef.current?.offsetWidth ?? 0;\n const localViewportOffsetWidth = viewportRef.current?.offsetWidth ?? 0;\n const localLayerWidth = localSlides.reduce(\n (val: number, slide: GallerySlidesState) => slide.width + val,\n 0,\n );\n const adjustShiftX =\n localSlides.length <= layoutState.current.slides.length ||\n layoutState.current.slides[slideIndex]?.coordX !== localSlides[slideIndex]?.coordX;\n\n layoutState.current = {\n containerWidth: localContainerWidth,\n viewportOffsetWidth: localViewportOffsetWidth,\n layerWidth: localLayerWidth,\n max: calcMax({\n slides: localSlides,\n viewportOffsetWidth: localViewportOffsetWidth,\n isCenterWithCustomWidth,\n }),\n min: calcMin({\n containerWidth: localContainerWidth,\n layerWidth: localLayerWidth,\n slides: localSlides,\n viewportOffsetWidth: localViewportOffsetWidth,\n isCenterWithCustomWidth,\n align,\n }),\n slides: localSlides,\n isFullyVisible: localLayerWidth <= localContainerWidth,\n };\n\n setShiftState((prevState) => ({\n ...prevState,\n shiftX: adjustShiftX ? calculateIndent(slideIndex) : prevState.shiftX,\n animation: options.animation ?? prevState.shiftX === validateIndent(prevState.shiftX),\n }));\n };\n\n const onResize = () => {\n if (shiftState.animation !== undefined) {\n initializeSlides({ animation: false });\n }\n };\n\n useGlobalEventListener(window, 'resize', onResize);\n\n useIsomorphicLayoutEffect(() => {\n initializeSlides({ animation: false });\n }, [children, align, slideWidth]);\n\n useIsomorphicLayoutEffect(() => {\n if (shiftState.animation !== undefined) {\n setShiftState((prevState) => ({\n ...prevState,\n animation: true,\n deltaX: 0,\n shiftX: calculateIndent(slideIndex ?? 0),\n }));\n }\n }, [slideIndex]);\n\n const slideLeft = (event: React.MouseEvent) => {\n onChange?.(slideIndex - 1);\n onPrevClick?.(event);\n };\n\n const slideRight = (event: React.MouseEvent) => {\n onChange?.(slideIndex + 1);\n onNextClick?.(event);\n };\n\n /*\n * Получает индекс слайда, к которому будет осуществлен переход\n */\n const getTarget = (e: CustomTouchEvent) => {\n const expectDeltaX = (shiftState.deltaX / e.duration) * 240 * 0.6;\n const shift =\n shiftState.shiftX + shiftState.deltaX + expectDeltaX - (layoutState.current.max ?? 0);\n const direction = shiftState.deltaX < 0 ? 1 : -1;\n\n // Находим ближайшую границу слайда к текущему отступу\n let targetIndex = layoutState.current.slides.reduce(\n (val: number, item: GallerySlidesState, index: number) => {\n const previousValue = Math.abs(layoutState.current.slides[val].coordX + shift);\n const currentValue = Math.abs(item.coordX + shift);\n\n return previousValue < currentValue ? val : index;\n },\n slideIndex,\n );\n\n if (targetIndex === slideIndex) {\n let targetSlide = slideIndex + direction;\n\n if (targetSlide >= 0 && targetSlide < layoutState.current.slides.length) {\n if (Math.abs(shiftState.deltaX) > layoutState.current.slides[targetSlide].width * 0.05) {\n targetIndex = targetSlide;\n }\n }\n }\n\n return targetIndex;\n };\n\n const isDraggable = !dragDisabled && !layoutState.current.isFullyVisible;\n\n const onStart = (e: CustomTouchEvent) => {\n e.originalEvent.stopPropagation();\n if (isDraggable) {\n onDragStart?.(e);\n setShiftState((prevState) => ({ ...prevState, animation: false }));\n }\n };\n\n const onMoveX = (e: CustomTouchEvent) => {\n if (isDraggable) {\n e.originalEvent.preventDefault();\n\n if (e.isSlideX) {\n if (shiftState.deltaX !== e.shiftX) {\n setShiftState((prevState) => ({\n ...prevState,\n deltaX: e.shiftX,\n dragging: e.isSlideX,\n }));\n }\n }\n }\n };\n\n const onEnd = (e: CustomTouchEvent) => {\n if (isDraggable) {\n const targetIndex = e.isSlide ? getTarget(e) : slideIndex ?? 0;\n onDragEnd?.(e, targetIndex);\n\n const nextShiftState: Partial<ShiftingState> = {\n animation: true,\n dragging: false,\n deltaX: 0,\n };\n\n const shiftXStick = calculateDragIndent();\n if (targetIndex !== slideIndex) {\n // Сохраняем сдвиг слайда в том положении, в каком его оставили после драга (fix issue #2185)\n nextShiftState.shiftX = shiftXStick;\n }\n\n setShiftState((prevState) => ({ ...prevState, ...nextShiftState }));\n if (targetIndex !== slideIndex) {\n onChange?.(targetIndex);\n }\n }\n };\n\n const indent = shiftState.dragging ? calculateDragIndent() : shiftState.shiftX;\n\n const layerStyle = {\n transform: `translateX(${indent}px)`,\n transition: shiftState.animation\n ? `transform ${ANIMATION_DURATION}s cubic-bezier(.1, 0, .25, 1)`\n : 'none',\n };\n\n const setSlideRef = (slideRef: HTMLDivElement | null, slideIndex: number) => {\n slidesStore.current[`slide-${slideIndex}`] = slideRef;\n };\n\n // shiftX is negative number <= 0, we can swipe back only if it is < 0\n const canSlideLeft = !layoutState.current.isFullyVisible && shiftState.shiftX < 0;\n\n const canSlideRight =\n !layoutState.current.isFullyVisible &&\n // we can't move right when gallery layer fully scrolled right, if gallery aligned by left side\n ((align === 'left' &&\n layoutState.current.containerWidth - shiftState.shiftX <\n (layoutState.current.layerWidth ?? 0)) ||\n // otherwise we need to check current slide index (align = right or align = center)\n (align !== 'left' && slideIndex < layoutState.current.slides.length - 1));\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['BaseGallery'],\n align === 'center' && styles['BaseGallery--align-center'],\n slideWidth === 'custom' && styles['BaseGallery--custom-width'],\n isDraggable && styles['BaseGallery--draggable'],\n )}\n getRootRef={rootRef}\n >\n <Touch\n className={styles['BaseGallery__viewport']}\n onStartX={onStart}\n onMoveX={onMoveX}\n onEnd={onEnd}\n style={{ width: slideWidth === 'custom' ? '100%' : slideWidth }}\n getRootRef={viewportRef}\n noSlideClick\n >\n <div className={styles['BaseGallery__layer']} style={layerStyle}>\n {React.Children.map(children, (item: React.ReactNode, i: number) => (\n <div\n className={styles['BaseGallery__slide']}\n key={`slide-${i}`}\n ref={(el) => setSlideRef(el, i)}\n >\n {item}\n </div>\n ))}\n </div>\n </Touch>\n\n {bullets && (\n <div\n aria-hidden\n className={classNames(styles['BaseGallery__bullets'], stylesBullets[bullets])}\n >\n {React.Children.map(children, (_item: React.ReactNode, index: number) => (\n <div\n className={classNames(\n styles['BaseGallery__bullet'],\n index === slideIndex && styles['BaseGallery__bullet--active'],\n )}\n key={index}\n />\n ))}\n </div>\n )}\n\n {showArrows && hasPointer && canSlideLeft && (\n <ScrollArrow\n className={styles['BaseGallery__arrow']}\n direction=\"left\"\n onClick={slideLeft}\n size={arrowSize}\n />\n )}\n {showArrows && hasPointer && canSlideRight && (\n <ScrollArrow\n className={styles['BaseGallery__arrow']}\n direction=\"right\"\n onClick={slideRight}\n size={arrowSize}\n />\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivityHasPointer","useExternRef","useGlobalEventListener","useDOM","useIsomorphicLayoutEffect","RootComponent","ScrollArrow","Touch","calcMax","calcMin","ANIMATION_DURATION","LAYOUT_DEFAULT_STATE","containerWidth","viewportOffsetWidth","layerWidth","min","max","slides","isFullyVisible","SHIFT_DEFAULT_STATE","animation","undefined","shiftX","dragging","deltaX","indent","stylesBullets","dark","light","BaseGallery","bullets","getRootRef","children","slideWidth","slideIndex","dragDisabled","onDragStart","onDragEnd","onChange","onPrevClick","onNextClick","align","showArrows","getRef","arrowSize","restProps","slidesStore","useRef","layoutState","shiftState","setShiftState","useState","rootRef","viewportRef","window","hasPointer","isCenterWithCustomWidth","validateIndent","value","localMax","current","localMin","calculateIndent","targetIndex","targetSlide","length","coordX","width","viewportWidth","calculateDragIndent","Number","initializeSlides","options","localSlides","Children","map","_item","i","elem","offsetLeft","offsetWidth","localContainerWidth","localViewportOffsetWidth","localLayerWidth","reduce","val","slide","adjustShiftX","prevState","onResize","slideLeft","event","slideRight","getTarget","e","expectDeltaX","duration","shift","direction","item","index","previousValue","Math","abs","currentValue","isDraggable","onStart","originalEvent","stopPropagation","onMoveX","preventDefault","isSlideX","onEnd","isSlide","nextShiftState","shiftXStick","layerStyle","transform","transition","setSlideRef","slideRef","canSlideLeft","canSlideRight","baseClassName","className","onStartX","style","noSlideClick","div","ref","el","aria-hidden","onClick","size"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/BaseGallery/BaseGallery.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { useDOM } from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport { type CustomTouchEvent, Touch } from '../Touch/Touch';\nimport { calcMax, calcMin } from './helpers';\nimport type { BaseGalleryProps, GallerySlidesState, LayoutState, ShiftingState } from './types';\nimport styles from './BaseGallery.module.css';\n\nconst ANIMATION_DURATION = 0.24;\n\nconst LAYOUT_DEFAULT_STATE = {\n containerWidth: 0,\n viewportOffsetWidth: 0,\n layerWidth: 0,\n min: 0,\n max: 0,\n slides: [],\n isFullyVisible: true,\n};\n\nconst SHIFT_DEFAULT_STATE = {\n animation: undefined,\n shiftX: 0,\n dragging: false,\n deltaX: 0,\n indent: 0,\n};\n\nconst stylesBullets = {\n dark: styles['BaseGallery__bullets--dark'],\n light: styles['BaseGallery__bullets--light'],\n};\nexport const BaseGallery = ({\n bullets = false,\n getRootRef,\n children,\n slideWidth = '100%',\n slideIndex = 0,\n dragDisabled = false,\n onDragStart,\n onDragEnd,\n onChange,\n onPrevClick,\n onNextClick,\n align = 'left',\n showArrows,\n getRef,\n arrowSize = 'l',\n ...restProps\n}: BaseGalleryProps): React.ReactNode => {\n const slidesStore = React.useRef<Record<string, HTMLDivElement | null>>({});\n const layoutState = React.useRef<LayoutState>(LAYOUT_DEFAULT_STATE);\n const [shiftState, setShiftState] = React.useState<ShiftingState>(SHIFT_DEFAULT_STATE);\n\n const rootRef = useExternRef(getRootRef);\n const viewportRef = useExternRef(getRef);\n\n const { window } = useDOM();\n const hasPointer = useAdaptivityHasPointer();\n\n const isCenterWithCustomWidth = slideWidth === 'custom' && align === 'center';\n\n const validateIndent = (value: number) => {\n const localMax = layoutState.current.max ?? 0;\n const localMin = layoutState.current.min ?? 0;\n\n if (value < localMin) {\n return localMin;\n } else if (value > localMax) {\n return localMax;\n }\n\n return value;\n };\n\n /*\n * Считает отступ слоя галереи\n */\n const calculateIndent = (targetIndex: number) => {\n if (layoutState.current.isFullyVisible) {\n return 0;\n }\n\n const targetSlide = layoutState.current.slides?.length\n ? layoutState.current.slides[targetIndex]\n : null;\n\n if (targetSlide) {\n const { coordX, width } = targetSlide;\n\n if (isCenterWithCustomWidth) {\n const viewportWidth = layoutState.current.viewportOffsetWidth ?? 0;\n return viewportWidth / 2 - coordX - width / 2;\n }\n\n return validateIndent(-1 * coordX);\n }\n return 0;\n };\n\n /*\n * Считает отступ слоя галереи во время драга\n */\n const calculateDragIndent = () => {\n const localMax = layoutState.current.max ?? 0;\n const localMin = layoutState.current.min ?? 0;\n const indent = shiftState.shiftX + shiftState.deltaX;\n\n if (indent > localMax) {\n return localMax + Number((indent - localMax) / 3);\n } else if (indent < localMin) {\n return localMin + Number((indent - localMin) / 3);\n }\n\n return indent;\n };\n\n const initializeSlides = (options: { animation?: boolean } = {}) => {\n const localSlides =\n React.Children.map(children, (_item: React.ReactNode, i: number): GallerySlidesState => {\n const elem = slidesStore.current[`slide-${i}`];\n return {\n coordX: elem?.offsetLeft ?? 0,\n width: elem?.offsetWidth ?? 0,\n };\n }) ?? [];\n\n const localContainerWidth = rootRef.current?.offsetWidth ?? 0;\n const localViewportOffsetWidth = viewportRef.current?.offsetWidth ?? 0;\n const localLayerWidth = localSlides.reduce(\n (val: number, slide: GallerySlidesState) => slide.width + val,\n 0,\n );\n const adjustShiftX =\n localSlides.length <= layoutState.current.slides.length ||\n layoutState.current.slides[slideIndex]?.coordX !== localSlides[slideIndex]?.coordX;\n\n const currentSlideOffsetOnCenterAlignment =\n (localContainerWidth - (localSlides[slideIndex]?.width ?? 0)) / 2;\n const isFullyVisible =\n align === 'center'\n ? localLayerWidth + currentSlideOffsetOnCenterAlignment <= localContainerWidth\n : localLayerWidth <= localContainerWidth;\n\n layoutState.current = {\n containerWidth: localContainerWidth,\n viewportOffsetWidth: localViewportOffsetWidth,\n layerWidth: localLayerWidth,\n max: calcMax({\n slides: localSlides,\n viewportOffsetWidth: localViewportOffsetWidth,\n isCenterWithCustomWidth,\n }),\n min: calcMin({\n containerWidth: localContainerWidth,\n layerWidth: localLayerWidth,\n slides: localSlides,\n viewportOffsetWidth: localViewportOffsetWidth,\n isCenterWithCustomWidth,\n align,\n }),\n slides: localSlides,\n isFullyVisible,\n };\n\n setShiftState((prevState) => ({\n ...prevState,\n shiftX: adjustShiftX ? calculateIndent(slideIndex) : prevState.shiftX,\n animation: options.animation ?? prevState.shiftX === validateIndent(prevState.shiftX),\n }));\n };\n\n const onResize = () => {\n if (shiftState.animation !== undefined) {\n initializeSlides({ animation: false });\n }\n };\n\n useGlobalEventListener(window, 'resize', onResize);\n\n useIsomorphicLayoutEffect(() => {\n initializeSlides({ animation: false });\n }, [children, align, slideWidth]);\n\n useIsomorphicLayoutEffect(() => {\n if (shiftState.animation !== undefined) {\n setShiftState((prevState) => ({\n ...prevState,\n animation: true,\n deltaX: 0,\n shiftX: calculateIndent(slideIndex ?? 0),\n }));\n }\n }, [slideIndex]);\n\n const slideLeft = (event: React.MouseEvent) => {\n onChange?.(slideIndex - 1);\n onPrevClick?.(event);\n };\n\n const slideRight = (event: React.MouseEvent) => {\n onChange?.(slideIndex + 1);\n onNextClick?.(event);\n };\n\n /*\n * Получает индекс слайда, к которому будет осуществлен переход\n */\n const getTarget = (e: CustomTouchEvent) => {\n const expectDeltaX = (shiftState.deltaX / e.duration) * 240 * 0.6;\n const shift =\n shiftState.shiftX + shiftState.deltaX + expectDeltaX - (layoutState.current.max ?? 0);\n const direction = shiftState.deltaX < 0 ? 1 : -1;\n\n // Находим ближайшую границу слайда к текущему отступу\n let targetIndex = layoutState.current.slides.reduce(\n (val: number, item: GallerySlidesState, index: number) => {\n const previousValue = Math.abs(layoutState.current.slides[val].coordX + shift);\n const currentValue = Math.abs(item.coordX + shift);\n\n return previousValue < currentValue ? val : index;\n },\n slideIndex,\n );\n\n if (targetIndex === slideIndex) {\n let targetSlide = slideIndex + direction;\n\n if (targetSlide >= 0 && targetSlide < layoutState.current.slides.length) {\n if (Math.abs(shiftState.deltaX) > layoutState.current.slides[targetSlide].width * 0.05) {\n targetIndex = targetSlide;\n }\n }\n }\n\n return targetIndex;\n };\n\n const isDraggable = !dragDisabled && !layoutState.current.isFullyVisible;\n\n const onStart = (e: CustomTouchEvent) => {\n e.originalEvent.stopPropagation();\n if (isDraggable) {\n onDragStart?.(e);\n setShiftState((prevState) => ({ ...prevState, animation: false }));\n }\n };\n\n const onMoveX = (e: CustomTouchEvent) => {\n if (isDraggable) {\n e.originalEvent.preventDefault();\n\n if (e.isSlideX) {\n if (shiftState.deltaX !== e.shiftX) {\n setShiftState((prevState) => ({\n ...prevState,\n deltaX: e.shiftX,\n dragging: e.isSlideX,\n }));\n }\n }\n }\n };\n\n const onEnd = (e: CustomTouchEvent) => {\n if (isDraggable) {\n const targetIndex = e.isSlide ? getTarget(e) : slideIndex ?? 0;\n onDragEnd?.(e, targetIndex);\n\n const nextShiftState: Partial<ShiftingState> = {\n animation: true,\n dragging: false,\n deltaX: 0,\n };\n\n const shiftXStick = calculateDragIndent();\n if (targetIndex !== slideIndex) {\n // Сохраняем сдвиг слайда в том положении, в каком его оставили после драга (fix issue #2185)\n nextShiftState.shiftX = shiftXStick;\n }\n\n setShiftState((prevState) => ({ ...prevState, ...nextShiftState }));\n if (targetIndex !== slideIndex) {\n onChange?.(targetIndex);\n }\n }\n };\n\n const indent = shiftState.dragging ? calculateDragIndent() : shiftState.shiftX;\n\n const layerStyle = {\n transform: `translateX(${indent}px)`,\n transition: shiftState.animation\n ? `transform ${ANIMATION_DURATION}s cubic-bezier(.1, 0, .25, 1)`\n : 'none',\n };\n\n const setSlideRef = (slideRef: HTMLDivElement | null, slideIndex: number) => {\n slidesStore.current[`slide-${slideIndex}`] = slideRef;\n };\n\n // shiftX is negative number <= 0, we can swipe back only if it is < 0\n const canSlideLeft = !layoutState.current.isFullyVisible && shiftState.shiftX < 0;\n\n const canSlideRight =\n !layoutState.current.isFullyVisible &&\n // we can't move right when gallery layer fully scrolled right, if gallery aligned by left side\n ((align === 'left' &&\n layoutState.current.containerWidth - shiftState.shiftX <\n (layoutState.current.layerWidth ?? 0)) ||\n // otherwise we need to check current slide index (align = right or align = center)\n (align !== 'left' && slideIndex < layoutState.current.slides.length - 1));\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['BaseGallery'],\n align === 'center' && styles['BaseGallery--align-center'],\n slideWidth === 'custom' && styles['BaseGallery--custom-width'],\n isDraggable && styles['BaseGallery--draggable'],\n )}\n getRootRef={rootRef}\n >\n <Touch\n className={styles['BaseGallery__viewport']}\n onStartX={onStart}\n onMoveX={onMoveX}\n onEnd={onEnd}\n style={{ width: slideWidth === 'custom' ? '100%' : slideWidth }}\n getRootRef={viewportRef}\n noSlideClick\n >\n <div className={styles['BaseGallery__layer']} style={layerStyle}>\n {React.Children.map(children, (item: React.ReactNode, i: number) => (\n <div\n className={styles['BaseGallery__slide']}\n key={`slide-${i}`}\n ref={(el) => setSlideRef(el, i)}\n >\n {item}\n </div>\n ))}\n </div>\n </Touch>\n\n {bullets && (\n <div\n aria-hidden\n className={classNames(styles['BaseGallery__bullets'], stylesBullets[bullets])}\n >\n {React.Children.map(children, (_item: React.ReactNode, index: number) => (\n <div\n className={classNames(\n styles['BaseGallery__bullet'],\n index === slideIndex && styles['BaseGallery__bullet--active'],\n )}\n key={index}\n />\n ))}\n </div>\n )}\n\n {showArrows && hasPointer && canSlideLeft && (\n <ScrollArrow\n className={styles['BaseGallery__arrow']}\n direction=\"left\"\n onClick={slideLeft}\n size={arrowSize}\n />\n )}\n {showArrows && hasPointer && canSlideRight && (\n <ScrollArrow\n className={styles['BaseGallery__arrow']}\n direction=\"right\"\n onClick={slideRight}\n size={arrowSize}\n />\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivityHasPointer","useExternRef","useGlobalEventListener","useDOM","useIsomorphicLayoutEffect","RootComponent","ScrollArrow","Touch","calcMax","calcMin","ANIMATION_DURATION","LAYOUT_DEFAULT_STATE","containerWidth","viewportOffsetWidth","layerWidth","min","max","slides","isFullyVisible","SHIFT_DEFAULT_STATE","animation","undefined","shiftX","dragging","deltaX","indent","stylesBullets","dark","light","BaseGallery","bullets","getRootRef","children","slideWidth","slideIndex","dragDisabled","onDragStart","onDragEnd","onChange","onPrevClick","onNextClick","align","showArrows","getRef","arrowSize","restProps","slidesStore","useRef","layoutState","shiftState","setShiftState","useState","rootRef","viewportRef","window","hasPointer","isCenterWithCustomWidth","validateIndent","value","localMax","current","localMin","calculateIndent","targetIndex","targetSlide","length","coordX","width","viewportWidth","calculateDragIndent","Number","initializeSlides","options","localSlides","Children","map","_item","i","elem","offsetLeft","offsetWidth","localContainerWidth","localViewportOffsetWidth","localLayerWidth","reduce","val","slide","adjustShiftX","currentSlideOffsetOnCenterAlignment","prevState","onResize","slideLeft","event","slideRight","getTarget","e","expectDeltaX","duration","shift","direction","item","index","previousValue","Math","abs","currentValue","isDraggable","onStart","originalEvent","stopPropagation","onMoveX","preventDefault","isSlideX","onEnd","isSlide","nextShiftState","shiftXStick","layerStyle","transform","transition","setSlideRef","slideRef","canSlideLeft","canSlideRight","baseClassName","className","onStartX","style","noSlideClick","div","ref","el","aria-hidden","onClick","size"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CarouselBase.d.ts","sourceRoot":"","sources":["../../../../src/components/BaseGallery/CarouselBase/CarouselBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,UAAU,CAAC;AAmB1E,eAAO,MAAM,YAAY,4LAiBtB,gBAAgB,KAAG,KAAK,CAAC,SAgW3B,CAAC"}
1
+ {"version":3,"file":"CarouselBase.d.ts","sourceRoot":"","sources":["../../../../src/components/BaseGallery/CarouselBase/CarouselBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,UAAU,CAAC;AAmB1E,eAAO,MAAM,YAAY,4LAiBtB,gBAAgB,KAAG,KAAK,CAAC,SAqW3B,CAAC"}
@@ -98,6 +98,10 @@ export const CarouselBase = (_param)=>{
98
98
  width: elem.offsetWidth
99
99
  };
100
100
  }) || [];
101
+ if (localSlides.length === 0) {
102
+ initialized.current = false;
103
+ return;
104
+ }
101
105
  const containerWidth = rootRef.current.offsetWidth;
102
106
  const viewportOffsetWidth = viewportRef.current.offsetWidth;
103
107
  const layerWidth = localSlides.reduce((val, slide)=>slide.width + val, 0);
@@ -109,7 +113,7 @@ export const CarouselBase = (_param)=>{
109
113
  slideIndex++;
110
114
  }
111
115
  if (remainingWidth <= 0 && slideIndex === localSlides.length) {
112
- warn('Ширины слайдов недостаточно для корректной работы свойства "looped". Пожалуйста, сделайте её больше."');
116
+ warn('Ширины слайдов недостаточно для корректной работы свойства "looped". Пожалуйста, сделайте её больше.');
113
117
  }
114
118
  }
115
119
  if (align === 'center') {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/BaseGallery/CarouselBase/CarouselBase.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../../hooks/useAdaptivityHasPointer';\nimport { useExternRef } from '../../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../../hooks/useGlobalEventListener';\nimport { useMutationObserver } from '../../../hooks/useMutationObserver';\nimport { useDOM } from '../../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../../lib/warnOnce';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport { ScrollArrow } from '../../ScrollArrow/ScrollArrow';\nimport { type CustomTouchEvent, Touch } from '../../Touch/Touch';\nimport { type BaseGalleryProps, type GallerySlidesState } from '../types';\nimport {\n ANIMATION_DURATION,\n CONTROL_ELEMENTS_STATE,\n SLIDE_THRESHOLD,\n SLIDES_MANAGER_STATE,\n} from './constants';\nimport { calculateIndent, getLoopPoints, getTargetIndex } from './helpers';\nimport { useSlideAnimation } from './hooks';\nimport type { ControlElementsState, SlidesManagerState } from './types';\nimport styles from '../BaseGallery.module.css';\n\nconst stylesBullets = {\n dark: styles['BaseGallery__bullets--dark'],\n light: styles['BaseGallery__bullets--light'],\n};\n\nconst warn = warnOnce('Gallery');\n\nexport const CarouselBase = ({\n bullets = false,\n getRootRef,\n children,\n slideWidth = '100%',\n slideIndex = 0,\n dragDisabled = false,\n onDragStart,\n onDragEnd,\n onChange,\n onPrevClick,\n onNextClick,\n align = 'left',\n showArrows,\n getRef,\n arrowSize = 'l',\n ...restProps\n}: BaseGalleryProps): React.ReactNode => {\n const slidesStore = React.useRef<Record<string, HTMLDivElement | null>>({});\n const slidesManager = React.useRef<SlidesManagerState>(SLIDES_MANAGER_STATE);\n\n const rootRef = useExternRef(getRootRef);\n const viewportRef = useExternRef(getRef);\n const layerRef = React.useRef<HTMLDivElement>(null);\n const animationFrameRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n const shiftXCurrentRef = React.useRef<number>(0);\n const shiftXDeltaRef = React.useRef<number>(0);\n const initialized = React.useRef<boolean>(false);\n const { addToAnimationQueue, getAnimateFunction, startAnimation } = useSlideAnimation();\n\n const [controlElementsState, setControlElementsState] =\n React.useState<ControlElementsState>(CONTROL_ELEMENTS_STATE);\n\n const { window } = useDOM();\n const hasPointer = useAdaptivityHasPointer();\n\n const isCenterWithCustomWidth = slideWidth === 'custom' && align === 'center';\n\n const transformCssStyles = (shiftX: number, animation = false) => {\n slidesManager.current.loopPoints.forEach((loopPoint) => {\n const { target, index } = loopPoint;\n const slide = slidesStore.current[index];\n if (slide) {\n slide.style.transform = `translate3d(${target(shiftX)}px, 0, 0)`;\n }\n });\n\n if (layerRef.current) {\n layerRef.current.style.transform = `translate3d(${shiftX}px, 0, 0)`;\n layerRef.current.style.transition = animation\n ? `transform ${ANIMATION_DURATION}ms cubic-bezier(.1, 0, .25, 1)`\n : '';\n }\n };\n\n const requestTransform = (shiftX: number, animation = false) => {\n const { snaps, contentSize, slides } = slidesManager.current;\n\n if (animationFrameRef.current !== null) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(() => {\n if (shiftX > snaps[0]) {\n shiftXCurrentRef.current = -contentSize + snaps[0];\n shiftX = shiftXCurrentRef.current + shiftXDeltaRef.current;\n }\n const lastPoint = slides[slides.length - 1].width + slides[slides.length - 1].coordX;\n\n if (shiftX <= -lastPoint) {\n shiftXCurrentRef.current = Math.abs(shiftXDeltaRef.current) + snaps[0];\n }\n transformCssStyles(shiftX, animation);\n });\n };\n\n const initializeSlides = () => {\n if (!rootRef.current || !viewportRef.current) {\n return;\n }\n let localSlides =\n React.Children.map(children, (_item, i): GallerySlidesState => {\n const elem = slidesStore.current[i] || { offsetLeft: 0, offsetWidth: 0 };\n return { coordX: elem.offsetLeft, width: elem.offsetWidth };\n }) || [];\n\n const containerWidth = rootRef.current.offsetWidth;\n const viewportOffsetWidth = viewportRef.current.offsetWidth;\n const layerWidth = localSlides.reduce((val, slide) => slide.width + val, 0);\n\n if (process.env.NODE_ENV === 'development') {\n let remainingWidth = containerWidth;\n let slideIndex = 0;\n\n while (remainingWidth > 0 && slideIndex < localSlides.length) {\n remainingWidth -= localSlides[slideIndex].width;\n slideIndex++;\n }\n if (remainingWidth <= 0 && slideIndex === localSlides.length) {\n warn(\n 'Ширины слайдов недостаточно для корректной работы свойства \"looped\". Пожалуйста, сделайте её больше.\"',\n );\n }\n }\n if (align === 'center') {\n const firstSlideShift = (containerWidth - localSlides[0].width) / 2;\n localSlides = localSlides.map((item) => {\n return {\n width: item.width,\n coordX: item.coordX - firstSlideShift,\n };\n });\n }\n\n slidesManager.current = {\n ...slidesManager.current,\n viewportOffsetWidth,\n slides: localSlides,\n isFullyVisible: layerWidth <= containerWidth,\n };\n\n const snaps = localSlides.map((_, index) =>\n calculateIndent(index, slidesManager.current, isCenterWithCustomWidth),\n );\n\n let contentSize = -snaps[snaps.length - 1] + localSlides[localSlides.length - 1].width;\n if (align === 'center') {\n contentSize += snaps[0];\n }\n\n slidesManager.current.snaps = snaps;\n slidesManager.current.contentSize = contentSize;\n slidesManager.current.loopPoints = getLoopPoints(slidesManager.current, containerWidth);\n\n setControlElementsState({\n canSlideLeft: !slidesManager.current.isFullyVisible,\n canSlideRight: !slidesManager.current.isFullyVisible,\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n });\n\n shiftXCurrentRef.current = snaps[slideIndex];\n initialized.current = true;\n\n requestTransform(shiftXCurrentRef.current);\n };\n\n const onResize = () => {\n if (initialized.current) {\n initializeSlides();\n }\n };\n\n useGlobalEventListener(window, 'resize', onResize);\n\n useIsomorphicLayoutEffect(\n function performSlideChange() {\n if (!initialized.current) {\n return;\n }\n const { snaps, slides } = slidesManager.current;\n const indent = snaps[slideIndex];\n let startPoint = shiftXCurrentRef.current;\n\n /**\n * Переключаемся с последнего элемента на первый\n * Для корректной анимации мы прокручиваем последний слайд на всю длину (shiftX) \"вперед\"\n * В конце анимации при отрисовке следующего кадра задаем всем слайдам начальные значения\n */\n if (indent === snaps[0] && shiftXCurrentRef.current <= snaps[snaps.length - 1]) {\n const distance =\n Math.abs(snaps[snaps.length - 1]) + slides[slides.length - 1].width + startPoint;\n\n addToAnimationQueue(\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * -1;\n\n transformCssStyles(shiftX);\n\n if (shiftX <= snaps[snaps.length - 1] - slides[slides.length - 1].width) {\n requestAnimationFrame(() => {\n shiftXCurrentRef.current = indent;\n transformCssStyles(snaps[0]);\n });\n }\n }),\n );\n /**\n * Переключаемся с первого слайда на последний\n * Для корректной анимации сначала задаем первым видимым слайдам смещение\n * В следующем кадре начинаем анимация прокрутки \"назад\"\n */\n } else if (indent === snaps[snaps.length - 1] && shiftXCurrentRef.current === snaps[0]) {\n startPoint = indent - slides[slides.length - 1].width;\n\n addToAnimationQueue(() => {\n requestAnimationFrame(() => {\n const shiftX = indent - slides[slides.length - 1].width;\n transformCssStyles(shiftX);\n\n getAnimateFunction((progress) => {\n transformCssStyles(startPoint + progress * slides[slides.length - 1].width);\n })();\n });\n });\n /**\n * Если не обработаны `corner`-кейсы выше, то просто проигрываем анимацию смещения\n */\n } else {\n addToAnimationQueue(() => {\n const distance = Math.abs(indent - startPoint);\n let direction = startPoint <= indent ? 1 : -1;\n\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * direction;\n transformCssStyles(shiftX);\n })();\n });\n }\n\n startAnimation();\n\n shiftXCurrentRef.current = indent;\n },\n [slideIndex],\n );\n\n useMutationObserver(layerRef, initializeSlides);\n\n useIsomorphicLayoutEffect(initializeSlides, [align, slideWidth]);\n\n const calculateMinDeltaXToSlide = () => {\n return slidesManager.current.slides[slideIndex].width * SLIDE_THRESHOLD;\n };\n\n const slideLeft = (event: React.MouseEvent) => {\n if (slideIndex > 0) {\n shiftXCurrentRef.current += calculateMinDeltaXToSlide();\n }\n onChange?.(\n (slideIndex - 1 + slidesManager.current.slides.length) % slidesManager.current.slides.length,\n );\n onPrevClick?.(event);\n };\n\n const slideRight = (event: React.MouseEvent) => {\n if (slideIndex < slidesManager.current.slides.length - 1) {\n shiftXCurrentRef.current -= calculateMinDeltaXToSlide();\n }\n onChange?.((slideIndex + 1) % slidesManager.current.slides.length);\n onNextClick?.(event);\n };\n\n const onStart = (e: CustomTouchEvent) => {\n e.originalEvent.stopPropagation();\n if (controlElementsState.isDraggable) {\n onDragStart?.(e);\n shiftXCurrentRef.current = slidesManager.current.snaps[slideIndex];\n shiftXDeltaRef.current = 0;\n }\n };\n\n const onMoveX = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n e.originalEvent.preventDefault();\n\n if (e.isSlideX) {\n if (shiftXDeltaRef.current !== e.shiftX) {\n shiftXDeltaRef.current = e.shiftX;\n requestTransform(shiftXCurrentRef.current + shiftXDeltaRef.current);\n }\n }\n }\n };\n\n const onEnd = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n let targetIndex = slideIndex;\n if (e.isSlide) {\n targetIndex = getTargetIndex(\n slidesManager.current.slides,\n slideIndex,\n shiftXCurrentRef.current,\n shiftXDeltaRef.current,\n );\n }\n onDragEnd?.(e, targetIndex);\n\n if (targetIndex !== slideIndex) {\n shiftXCurrentRef.current = shiftXCurrentRef.current + shiftXDeltaRef.current;\n onChange?.(targetIndex);\n } else {\n const initialShiftX = slidesManager.current.snaps[targetIndex];\n requestTransform(initialShiftX, true);\n }\n }\n };\n\n const setSlideRef = (slideRef: HTMLDivElement | null, slideIndex: number) => {\n slidesStore.current[slideIndex] = slideRef;\n };\n\n const { canSlideLeft, canSlideRight, isDraggable } = controlElementsState;\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['BaseGallery'],\n slideWidth === 'custom' && styles['BaseGallery--custom-width'],\n isDraggable && styles['BaseGallery--draggable'],\n )}\n getRootRef={rootRef}\n >\n <Touch\n className={styles['BaseGallery__viewport']}\n onStartX={onStart}\n onMoveX={onMoveX}\n onEnd={onEnd}\n style={{ width: slideWidth === 'custom' ? '100%' : slideWidth }}\n getRootRef={viewportRef}\n noSlideClick\n >\n <div className={styles['BaseGallery__layer']} ref={layerRef}>\n {React.Children.map(children, (item: React.ReactNode, i: number) => (\n <div\n className={styles['BaseGallery__slide']}\n key={`slide-${i}`}\n ref={(el) => setSlideRef(el, i)}\n >\n {item}\n </div>\n ))}\n </div>\n </Touch>\n\n {bullets && (\n <div\n aria-hidden\n className={classNames(styles['BaseGallery__bullets'], stylesBullets[bullets])}\n >\n {React.Children.map(children, (_item: React.ReactNode, index: number) => (\n <div\n className={classNames(\n styles['BaseGallery__bullet'],\n index === slideIndex && styles['BaseGallery__bullet--active'],\n )}\n key={index}\n />\n ))}\n </div>\n )}\n\n {showArrows && hasPointer && canSlideLeft && (\n <ScrollArrow\n className={styles['BaseGallery__arrow']}\n direction=\"left\"\n onClick={slideLeft}\n size={arrowSize}\n />\n )}\n {showArrows && hasPointer && canSlideRight && (\n <ScrollArrow\n className={styles['BaseGallery__arrow']}\n direction=\"right\"\n onClick={slideRight}\n size={arrowSize}\n />\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivityHasPointer","useExternRef","useGlobalEventListener","useMutationObserver","useDOM","useIsomorphicLayoutEffect","warnOnce","RootComponent","ScrollArrow","Touch","ANIMATION_DURATION","CONTROL_ELEMENTS_STATE","SLIDE_THRESHOLD","SLIDES_MANAGER_STATE","calculateIndent","getLoopPoints","getTargetIndex","useSlideAnimation","stylesBullets","dark","light","warn","CarouselBase","bullets","getRootRef","children","slideWidth","slideIndex","dragDisabled","onDragStart","onDragEnd","onChange","onPrevClick","onNextClick","align","showArrows","getRef","arrowSize","restProps","slidesStore","useRef","slidesManager","rootRef","viewportRef","layerRef","animationFrameRef","shiftXCurrentRef","shiftXDeltaRef","initialized","addToAnimationQueue","getAnimateFunction","startAnimation","controlElementsState","setControlElementsState","useState","window","hasPointer","isCenterWithCustomWidth","transformCssStyles","shiftX","animation","current","loopPoints","forEach","loopPoint","target","index","slide","style","transform","transition","requestTransform","snaps","contentSize","slides","cancelAnimationFrame","requestAnimationFrame","lastPoint","length","width","coordX","Math","abs","initializeSlides","localSlides","Children","map","_item","i","elem","offsetLeft","offsetWidth","containerWidth","viewportOffsetWidth","layerWidth","reduce","val","process","env","NODE_ENV","remainingWidth","firstSlideShift","item","isFullyVisible","_","canSlideLeft","canSlideRight","isDraggable","onResize","performSlideChange","indent","startPoint","distance","progress","direction","calculateMinDeltaXToSlide","slideLeft","event","slideRight","onStart","e","originalEvent","stopPropagation","onMoveX","preventDefault","isSlideX","onEnd","targetIndex","isSlide","initialShiftX","setSlideRef","slideRef","baseClassName","className","onStartX","noSlideClick","div","ref","el","aria-hidden","onClick","size"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/BaseGallery/CarouselBase/CarouselBase.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../../hooks/useAdaptivityHasPointer';\nimport { useExternRef } from '../../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../../hooks/useGlobalEventListener';\nimport { useMutationObserver } from '../../../hooks/useMutationObserver';\nimport { useDOM } from '../../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../../lib/warnOnce';\nimport { RootComponent } from '../../RootComponent/RootComponent';\nimport { ScrollArrow } from '../../ScrollArrow/ScrollArrow';\nimport { type CustomTouchEvent, Touch } from '../../Touch/Touch';\nimport { type BaseGalleryProps, type GallerySlidesState } from '../types';\nimport {\n ANIMATION_DURATION,\n CONTROL_ELEMENTS_STATE,\n SLIDE_THRESHOLD,\n SLIDES_MANAGER_STATE,\n} from './constants';\nimport { calculateIndent, getLoopPoints, getTargetIndex } from './helpers';\nimport { useSlideAnimation } from './hooks';\nimport type { ControlElementsState, SlidesManagerState } from './types';\nimport styles from '../BaseGallery.module.css';\n\nconst stylesBullets = {\n dark: styles['BaseGallery__bullets--dark'],\n light: styles['BaseGallery__bullets--light'],\n};\n\nconst warn = warnOnce('Gallery');\n\nexport const CarouselBase = ({\n bullets = false,\n getRootRef,\n children,\n slideWidth = '100%',\n slideIndex = 0,\n dragDisabled = false,\n onDragStart,\n onDragEnd,\n onChange,\n onPrevClick,\n onNextClick,\n align = 'left',\n showArrows,\n getRef,\n arrowSize = 'l',\n ...restProps\n}: BaseGalleryProps): React.ReactNode => {\n const slidesStore = React.useRef<Record<string, HTMLDivElement | null>>({});\n const slidesManager = React.useRef<SlidesManagerState>(SLIDES_MANAGER_STATE);\n\n const rootRef = useExternRef(getRootRef);\n const viewportRef = useExternRef(getRef);\n const layerRef = React.useRef<HTMLDivElement>(null);\n const animationFrameRef = React.useRef<ReturnType<typeof requestAnimationFrame> | null>(null);\n const shiftXCurrentRef = React.useRef<number>(0);\n const shiftXDeltaRef = React.useRef<number>(0);\n const initialized = React.useRef<boolean>(false);\n const { addToAnimationQueue, getAnimateFunction, startAnimation } = useSlideAnimation();\n\n const [controlElementsState, setControlElementsState] =\n React.useState<ControlElementsState>(CONTROL_ELEMENTS_STATE);\n\n const { window } = useDOM();\n const hasPointer = useAdaptivityHasPointer();\n\n const isCenterWithCustomWidth = slideWidth === 'custom' && align === 'center';\n\n const transformCssStyles = (shiftX: number, animation = false) => {\n slidesManager.current.loopPoints.forEach((loopPoint) => {\n const { target, index } = loopPoint;\n const slide = slidesStore.current[index];\n if (slide) {\n slide.style.transform = `translate3d(${target(shiftX)}px, 0, 0)`;\n }\n });\n\n if (layerRef.current) {\n layerRef.current.style.transform = `translate3d(${shiftX}px, 0, 0)`;\n layerRef.current.style.transition = animation\n ? `transform ${ANIMATION_DURATION}ms cubic-bezier(.1, 0, .25, 1)`\n : '';\n }\n };\n\n const requestTransform = (shiftX: number, animation = false) => {\n const { snaps, contentSize, slides } = slidesManager.current;\n\n if (animationFrameRef.current !== null) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n animationFrameRef.current = requestAnimationFrame(() => {\n if (shiftX > snaps[0]) {\n shiftXCurrentRef.current = -contentSize + snaps[0];\n shiftX = shiftXCurrentRef.current + shiftXDeltaRef.current;\n }\n const lastPoint = slides[slides.length - 1].width + slides[slides.length - 1].coordX;\n\n if (shiftX <= -lastPoint) {\n shiftXCurrentRef.current = Math.abs(shiftXDeltaRef.current) + snaps[0];\n }\n transformCssStyles(shiftX, animation);\n });\n };\n\n const initializeSlides = () => {\n if (!rootRef.current || !viewportRef.current) {\n return;\n }\n let localSlides =\n React.Children.map(children, (_item, i): GallerySlidesState => {\n const elem = slidesStore.current[i] || { offsetLeft: 0, offsetWidth: 0 };\n return { coordX: elem.offsetLeft, width: elem.offsetWidth };\n }) || [];\n\n if (localSlides.length === 0) {\n initialized.current = false;\n return;\n }\n\n const containerWidth = rootRef.current.offsetWidth;\n const viewportOffsetWidth = viewportRef.current.offsetWidth;\n const layerWidth = localSlides.reduce((val, slide) => slide.width + val, 0);\n\n if (process.env.NODE_ENV === 'development') {\n let remainingWidth = containerWidth;\n let slideIndex = 0;\n\n while (remainingWidth > 0 && slideIndex < localSlides.length) {\n remainingWidth -= localSlides[slideIndex].width;\n slideIndex++;\n }\n if (remainingWidth <= 0 && slideIndex === localSlides.length) {\n warn(\n 'Ширины слайдов недостаточно для корректной работы свойства \"looped\". Пожалуйста, сделайте её больше.',\n );\n }\n }\n if (align === 'center') {\n const firstSlideShift = (containerWidth - localSlides[0].width) / 2;\n localSlides = localSlides.map((item) => {\n return {\n width: item.width,\n coordX: item.coordX - firstSlideShift,\n };\n });\n }\n\n slidesManager.current = {\n ...slidesManager.current,\n viewportOffsetWidth,\n slides: localSlides,\n isFullyVisible: layerWidth <= containerWidth,\n };\n\n const snaps = localSlides.map((_, index) =>\n calculateIndent(index, slidesManager.current, isCenterWithCustomWidth),\n );\n\n let contentSize = -snaps[snaps.length - 1] + localSlides[localSlides.length - 1].width;\n if (align === 'center') {\n contentSize += snaps[0];\n }\n\n slidesManager.current.snaps = snaps;\n slidesManager.current.contentSize = contentSize;\n slidesManager.current.loopPoints = getLoopPoints(slidesManager.current, containerWidth);\n\n setControlElementsState({\n canSlideLeft: !slidesManager.current.isFullyVisible,\n canSlideRight: !slidesManager.current.isFullyVisible,\n isDraggable: !(dragDisabled || slidesManager.current.isFullyVisible),\n });\n\n shiftXCurrentRef.current = snaps[slideIndex];\n initialized.current = true;\n\n requestTransform(shiftXCurrentRef.current);\n };\n\n const onResize = () => {\n if (initialized.current) {\n initializeSlides();\n }\n };\n\n useGlobalEventListener(window, 'resize', onResize);\n\n useIsomorphicLayoutEffect(\n function performSlideChange() {\n if (!initialized.current) {\n return;\n }\n const { snaps, slides } = slidesManager.current;\n const indent = snaps[slideIndex];\n let startPoint = shiftXCurrentRef.current;\n\n /**\n * Переключаемся с последнего элемента на первый\n * Для корректной анимации мы прокручиваем последний слайд на всю длину (shiftX) \"вперед\"\n * В конце анимации при отрисовке следующего кадра задаем всем слайдам начальные значения\n */\n if (indent === snaps[0] && shiftXCurrentRef.current <= snaps[snaps.length - 1]) {\n const distance =\n Math.abs(snaps[snaps.length - 1]) + slides[slides.length - 1].width + startPoint;\n\n addToAnimationQueue(\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * -1;\n\n transformCssStyles(shiftX);\n\n if (shiftX <= snaps[snaps.length - 1] - slides[slides.length - 1].width) {\n requestAnimationFrame(() => {\n shiftXCurrentRef.current = indent;\n transformCssStyles(snaps[0]);\n });\n }\n }),\n );\n /**\n * Переключаемся с первого слайда на последний\n * Для корректной анимации сначала задаем первым видимым слайдам смещение\n * В следующем кадре начинаем анимация прокрутки \"назад\"\n */\n } else if (indent === snaps[snaps.length - 1] && shiftXCurrentRef.current === snaps[0]) {\n startPoint = indent - slides[slides.length - 1].width;\n\n addToAnimationQueue(() => {\n requestAnimationFrame(() => {\n const shiftX = indent - slides[slides.length - 1].width;\n transformCssStyles(shiftX);\n\n getAnimateFunction((progress) => {\n transformCssStyles(startPoint + progress * slides[slides.length - 1].width);\n })();\n });\n });\n /**\n * Если не обработаны `corner`-кейсы выше, то просто проигрываем анимацию смещения\n */\n } else {\n addToAnimationQueue(() => {\n const distance = Math.abs(indent - startPoint);\n let direction = startPoint <= indent ? 1 : -1;\n\n getAnimateFunction((progress) => {\n const shiftX = startPoint + progress * distance * direction;\n transformCssStyles(shiftX);\n })();\n });\n }\n\n startAnimation();\n\n shiftXCurrentRef.current = indent;\n },\n [slideIndex],\n );\n\n useMutationObserver(layerRef, initializeSlides);\n\n useIsomorphicLayoutEffect(initializeSlides, [align, slideWidth]);\n\n const calculateMinDeltaXToSlide = () => {\n return slidesManager.current.slides[slideIndex].width * SLIDE_THRESHOLD;\n };\n\n const slideLeft = (event: React.MouseEvent) => {\n if (slideIndex > 0) {\n shiftXCurrentRef.current += calculateMinDeltaXToSlide();\n }\n onChange?.(\n (slideIndex - 1 + slidesManager.current.slides.length) % slidesManager.current.slides.length,\n );\n onPrevClick?.(event);\n };\n\n const slideRight = (event: React.MouseEvent) => {\n if (slideIndex < slidesManager.current.slides.length - 1) {\n shiftXCurrentRef.current -= calculateMinDeltaXToSlide();\n }\n onChange?.((slideIndex + 1) % slidesManager.current.slides.length);\n onNextClick?.(event);\n };\n\n const onStart = (e: CustomTouchEvent) => {\n e.originalEvent.stopPropagation();\n if (controlElementsState.isDraggable) {\n onDragStart?.(e);\n shiftXCurrentRef.current = slidesManager.current.snaps[slideIndex];\n shiftXDeltaRef.current = 0;\n }\n };\n\n const onMoveX = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n e.originalEvent.preventDefault();\n\n if (e.isSlideX) {\n if (shiftXDeltaRef.current !== e.shiftX) {\n shiftXDeltaRef.current = e.shiftX;\n requestTransform(shiftXCurrentRef.current + shiftXDeltaRef.current);\n }\n }\n }\n };\n\n const onEnd = (e: CustomTouchEvent) => {\n if (controlElementsState.isDraggable) {\n let targetIndex = slideIndex;\n if (e.isSlide) {\n targetIndex = getTargetIndex(\n slidesManager.current.slides,\n slideIndex,\n shiftXCurrentRef.current,\n shiftXDeltaRef.current,\n );\n }\n onDragEnd?.(e, targetIndex);\n\n if (targetIndex !== slideIndex) {\n shiftXCurrentRef.current = shiftXCurrentRef.current + shiftXDeltaRef.current;\n onChange?.(targetIndex);\n } else {\n const initialShiftX = slidesManager.current.snaps[targetIndex];\n requestTransform(initialShiftX, true);\n }\n }\n };\n\n const setSlideRef = (slideRef: HTMLDivElement | null, slideIndex: number) => {\n slidesStore.current[slideIndex] = slideRef;\n };\n\n const { canSlideLeft, canSlideRight, isDraggable } = controlElementsState;\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['BaseGallery'],\n slideWidth === 'custom' && styles['BaseGallery--custom-width'],\n isDraggable && styles['BaseGallery--draggable'],\n )}\n getRootRef={rootRef}\n >\n <Touch\n className={styles['BaseGallery__viewport']}\n onStartX={onStart}\n onMoveX={onMoveX}\n onEnd={onEnd}\n style={{ width: slideWidth === 'custom' ? '100%' : slideWidth }}\n getRootRef={viewportRef}\n noSlideClick\n >\n <div className={styles['BaseGallery__layer']} ref={layerRef}>\n {React.Children.map(children, (item: React.ReactNode, i: number) => (\n <div\n className={styles['BaseGallery__slide']}\n key={`slide-${i}`}\n ref={(el) => setSlideRef(el, i)}\n >\n {item}\n </div>\n ))}\n </div>\n </Touch>\n\n {bullets && (\n <div\n aria-hidden\n className={classNames(styles['BaseGallery__bullets'], stylesBullets[bullets])}\n >\n {React.Children.map(children, (_item: React.ReactNode, index: number) => (\n <div\n className={classNames(\n styles['BaseGallery__bullet'],\n index === slideIndex && styles['BaseGallery__bullet--active'],\n )}\n key={index}\n />\n ))}\n </div>\n )}\n\n {showArrows && hasPointer && canSlideLeft && (\n <ScrollArrow\n className={styles['BaseGallery__arrow']}\n direction=\"left\"\n onClick={slideLeft}\n size={arrowSize}\n />\n )}\n {showArrows && hasPointer && canSlideRight && (\n <ScrollArrow\n className={styles['BaseGallery__arrow']}\n direction=\"right\"\n onClick={slideRight}\n size={arrowSize}\n />\n )}\n </RootComponent>\n );\n};\n"],"names":["React","classNames","useAdaptivityHasPointer","useExternRef","useGlobalEventListener","useMutationObserver","useDOM","useIsomorphicLayoutEffect","warnOnce","RootComponent","ScrollArrow","Touch","ANIMATION_DURATION","CONTROL_ELEMENTS_STATE","SLIDE_THRESHOLD","SLIDES_MANAGER_STATE","calculateIndent","getLoopPoints","getTargetIndex","useSlideAnimation","stylesBullets","dark","light","warn","CarouselBase","bullets","getRootRef","children","slideWidth","slideIndex","dragDisabled","onDragStart","onDragEnd","onChange","onPrevClick","onNextClick","align","showArrows","getRef","arrowSize","restProps","slidesStore","useRef","slidesManager","rootRef","viewportRef","layerRef","animationFrameRef","shiftXCurrentRef","shiftXDeltaRef","initialized","addToAnimationQueue","getAnimateFunction","startAnimation","controlElementsState","setControlElementsState","useState","window","hasPointer","isCenterWithCustomWidth","transformCssStyles","shiftX","animation","current","loopPoints","forEach","loopPoint","target","index","slide","style","transform","transition","requestTransform","snaps","contentSize","slides","cancelAnimationFrame","requestAnimationFrame","lastPoint","length","width","coordX","Math","abs","initializeSlides","localSlides","Children","map","_item","i","elem","offsetLeft","offsetWidth","containerWidth","viewportOffsetWidth","layerWidth","reduce","val","process","env","NODE_ENV","remainingWidth","firstSlideShift","item","isFullyVisible","_","canSlideLeft","canSlideRight","isDraggable","onResize","performSlideChange","indent","startPoint","distance","progress","direction","calculateMinDeltaXToSlide","slideLeft","event","slideRight","onStart","e","originalEvent","stopPropagation","onMoveX","preventDefault","isSlideX","onEnd","targetIndex","isSlide","initialShiftX","setSlideRef","slideRef","baseClassName","className","onStartX","noSlideClick","div","ref","el","aria-hidden","onClick","size"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import type { HasAlign } from '../../types';
3
3
  import { type TappableProps } from '../Tappable/Tappable';
4
+ import '../Tappable/Tappable.module.css';
4
5
  import '../Spinner/Spinner.module.css';
5
6
  export interface VKUIButtonProps extends HasAlign {
6
7
  mode?: 'primary' | 'secondary' | 'tertiary' | 'outline' | 'link';
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,+BAA+B,CAAC;AAqCvC,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACjE,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,mBAAmB,CAAC;IAC9F,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,eAAe;CAAG;AAEpF;;GAEG;AACH,eAAO,MAAM,MAAM,mKAgBhB,WAAW,KAAG,KAAK,CAAC,SAoEtB,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,iCAAiC,CAAC;AACzC,OAAO,+BAA+B,CAAC;AAqCvC,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACjE,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,mBAAmB,CAAC;IAC9F,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,eAAe;CAAG;AAEpF;;GAEG;AACH,eAAO,MAAM,MAAM,mKAgBhB,WAAW,KAAG,KAAK,CAAC,SAoEtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasAlign } from '../../types';\nimport { Spinner } from '../Spinner/Spinner';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport '../Spinner/Spinner.module.css';\nimport styles from './Button.module.css';\n\nconst stylesSize = {\n s: styles['Button--size-s'],\n m: styles['Button--size-m'],\n l: styles['Button--size-l'],\n};\n\nconst stylesMode = {\n primary: styles['Button--mode-primary'],\n secondary: styles['Button--mode-secondary'],\n tertiary: styles['Button--mode-tertiary'],\n outline: styles['Button--mode-outline'],\n link: styles['Button--mode-link'],\n};\n\nconst stylesAppearance = {\n 'accent': styles['Button--appearance-accent'],\n 'positive': styles['Button--appearance-positive'],\n 'negative': styles['Button--appearance-negative'],\n 'neutral': styles['Button--appearance-neutral'],\n 'overlay': styles['Button--appearance-overlay'],\n 'accent-invariable': styles['Button--appearance-accent-invariable'],\n};\n\nconst stylesAlign = {\n left: styles['Button--align-left'],\n center: styles['Button--align-center'],\n right: styles['Button--align-right'],\n};\n\nconst sizeYClassNames = {\n none: styles['Button--sizeY-none'],\n regular: styles['Button--sizeY-regular'],\n};\n\nexport interface VKUIButtonProps extends HasAlign {\n mode?: 'primary' | 'secondary' | 'tertiary' | 'outline' | 'link';\n appearance?: 'accent' | 'positive' | 'negative' | 'neutral' | 'overlay' | 'accent-invariable';\n size?: 's' | 'm' | 'l';\n stretched?: boolean;\n before?: React.ReactNode;\n after?: React.ReactNode;\n loading?: boolean;\n disableSpinnerAnimation?: boolean;\n rounded?: boolean;\n}\n\nexport interface ButtonProps extends Omit<TappableProps, 'size'>, VKUIButtonProps {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Button\n */\nexport const Button = ({\n size = 's',\n mode = 'primary',\n appearance = 'accent',\n stretched = false,\n align = 'center',\n children,\n before,\n after,\n getRootRef,\n loading,\n onClick,\n className,\n disableSpinnerAnimation,\n rounded,\n ...restProps\n}: ButtonProps): React.ReactNode => {\n const hasIcons = Boolean(before || after);\n const hasIconOnly = !children && Boolean(after) !== Boolean(before);\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n return (\n <Tappable\n hoverMode={styles['Button--hover']}\n activeMode={styles['Button--active']}\n Component={restProps.href ? 'a' : 'button'}\n focusVisibleMode=\"outside\"\n {...restProps}\n onClick={loading ? undefined : onClick}\n className={classNames(\n className,\n styles.Button,\n stylesSize[size],\n stylesMode[mode],\n stylesAppearance[appearance],\n stylesAlign[align],\n sizeY !== 'compact' && sizeYClassNames[sizeY],\n platform === 'ios' && styles['Button--ios'],\n stretched && styles['Button--stretched'],\n hasIcons && styles['Button--with-icon'],\n hasIconOnly && !stretched && styles['Button--singleIcon'],\n loading && styles['Button--loading'],\n rounded && styles['Button--rounded'],\n )}\n getRootRef={getRootRef}\n >\n {loading && (\n <Spinner\n size=\"small\"\n className={styles.Button__spinner}\n disableAnimation={disableSpinnerAnimation}\n />\n )}\n <span className={styles.Button__in}>\n {hasReactNode(before) && (\n <span\n className={styles.Button__before}\n role=\"presentation\"\n data-testid={process.env.NODE_ENV === 'test' ? 'before' : undefined}\n >\n {before}\n </span>\n )}\n {hasReactNode(children) && (\n <span\n className={styles.Button__content}\n data-testid={process.env.NODE_ENV === 'test' ? 'children' : undefined}\n >\n {children}\n </span>\n )}\n {hasReactNode(after) && (\n <span\n className={styles.Button__after}\n role=\"presentation\"\n data-testid={process.env.NODE_ENV === 'test' ? 'after' : undefined}\n >\n {after}\n </span>\n )}\n </span>\n </Tappable>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivity","usePlatform","Spinner","Tappable","stylesSize","s","m","l","stylesMode","primary","secondary","tertiary","outline","link","stylesAppearance","stylesAlign","left","center","right","sizeYClassNames","none","regular","Button","size","mode","appearance","stretched","align","children","before","after","getRootRef","loading","onClick","className","disableSpinnerAnimation","rounded","restProps","hasIcons","Boolean","hasIconOnly","sizeY","platform","hoverMode","activeMode","Component","href","focusVisibleMode","undefined","disableAnimation","span","role","data-testid","process","env","NODE_ENV"],"mappings":";;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,WAAW,QAAQ,0BAA0B;AAEtD,SAASC,OAAO,QAAQ,qBAAqB;AAC7C,SAASC,QAAQ,QAA4B,uBAAuB;AAIpE,MAAMC,aAAa;IACjBC,CAAC;IACDC,CAAC;IACDC,CAAC;AACH;AAEA,MAAMC,aAAa;IACjBC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,OAAO;IACPC,IAAI;AACN;AAEA,MAAMC,mBAAmB;IACvB,QAAQ;IACR,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,mBAAmB;AACrB;AAEA,MAAMC,cAAc;IAClBC,IAAI;IACJC,MAAM;IACNC,KAAK;AACP;AAEA,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAgBA;;CAEC,GACD,OAAO,MAAMC,SAAS;QAAC,EACrBC,OAAO,GAAG,EACVC,OAAO,SAAS,EAChBC,aAAa,QAAQ,EACrBC,YAAY,KAAK,EACjBC,QAAQ,QAAQ,EAChBC,QAAQ,EACRC,MAAM,EACNC,KAAK,EACLC,UAAU,EACVC,OAAO,EACPC,OAAO,EACPC,SAAS,EACTC,uBAAuB,EACvBC,OAAO,EAEK,WADTC;QAdHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,WAAWC,QAAQV,UAAUC;IACnC,MAAMU,cAAc,CAACZ,YAAYW,QAAQT,WAAWS,QAAQV;IAC5D,MAAM,EAAEY,QAAQ,MAAM,EAAE,GAAGzC;IAC3B,MAAM0C,WAAWzC;IAEjB,qBACE,MAACE;QACCwC,SAAS;QACTC,UAAU;QACVC,WAAWR,UAAUS,IAAI,GAAG,MAAM;QAClCC,kBAAiB;OACbV;QACJJ,SAASD,UAAUgB,YAAYf;QAC/BC,WAAWpC,WACToC,yBAEA9B,UAAU,CAACmB,KAAK,EAChBf,UAAU,CAACgB,KAAK,EAChBV,gBAAgB,CAACW,WAAW,EAC5BV,WAAW,CAACY,MAAM,EAClBc,UAAU,aAAatB,eAAe,CAACsB,MAAM,EAC7CC,aAAa,4BACbhB,sCACAY,qCACAE,eAAe,CAACd,uCAChBM,kCACAI;QAEFL,YAAYA;;YAEXC,yBACC,KAAC9B;gBACCqB,MAAK;gBACLW,SAAS;gBACTe,kBAAkBd;;0BAGtB,MAACe;gBAAKhB,SAAS;;oBACZnC,aAAa8B,yBACZ,KAACqB;wBACChB,SAAS;wBACTiB,MAAK;wBACLC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,WAAWP;kCAEzDnB;;oBAGJ9B,aAAa6B,2BACZ,KAACsB;wBACChB,SAAS;wBACTkB,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,aAAaP;kCAE3DpB;;oBAGJ7B,aAAa+B,wBACZ,KAACoB;wBACChB,SAAS;wBACTiB,MAAK;wBACLC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,UAAUP;kCAExDlB;;;;;;AAMb,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, hasReactNode } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport type { HasAlign } from '../../types';\nimport { Spinner } from '../Spinner/Spinner';\nimport { Tappable, type TappableProps } from '../Tappable/Tappable';\nimport '../Tappable/Tappable.module.css';\nimport '../Spinner/Spinner.module.css';\nimport styles from './Button.module.css';\n\nconst stylesSize = {\n s: styles['Button--size-s'],\n m: styles['Button--size-m'],\n l: styles['Button--size-l'],\n};\n\nconst stylesMode = {\n primary: styles['Button--mode-primary'],\n secondary: styles['Button--mode-secondary'],\n tertiary: styles['Button--mode-tertiary'],\n outline: styles['Button--mode-outline'],\n link: styles['Button--mode-link'],\n};\n\nconst stylesAppearance = {\n 'accent': styles['Button--appearance-accent'],\n 'positive': styles['Button--appearance-positive'],\n 'negative': styles['Button--appearance-negative'],\n 'neutral': styles['Button--appearance-neutral'],\n 'overlay': styles['Button--appearance-overlay'],\n 'accent-invariable': styles['Button--appearance-accent-invariable'],\n};\n\nconst stylesAlign = {\n left: styles['Button--align-left'],\n center: styles['Button--align-center'],\n right: styles['Button--align-right'],\n};\n\nconst sizeYClassNames = {\n none: styles['Button--sizeY-none'],\n regular: styles['Button--sizeY-regular'],\n};\n\nexport interface VKUIButtonProps extends HasAlign {\n mode?: 'primary' | 'secondary' | 'tertiary' | 'outline' | 'link';\n appearance?: 'accent' | 'positive' | 'negative' | 'neutral' | 'overlay' | 'accent-invariable';\n size?: 's' | 'm' | 'l';\n stretched?: boolean;\n before?: React.ReactNode;\n after?: React.ReactNode;\n loading?: boolean;\n disableSpinnerAnimation?: boolean;\n rounded?: boolean;\n}\n\nexport interface ButtonProps extends Omit<TappableProps, 'size'>, VKUIButtonProps {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Button\n */\nexport const Button = ({\n size = 's',\n mode = 'primary',\n appearance = 'accent',\n stretched = false,\n align = 'center',\n children,\n before,\n after,\n getRootRef,\n loading,\n onClick,\n className,\n disableSpinnerAnimation,\n rounded,\n ...restProps\n}: ButtonProps): React.ReactNode => {\n const hasIcons = Boolean(before || after);\n const hasIconOnly = !children && Boolean(after) !== Boolean(before);\n const { sizeY = 'none' } = useAdaptivity();\n const platform = usePlatform();\n\n return (\n <Tappable\n hoverMode={styles['Button--hover']}\n activeMode={styles['Button--active']}\n Component={restProps.href ? 'a' : 'button'}\n focusVisibleMode=\"outside\"\n {...restProps}\n onClick={loading ? undefined : onClick}\n className={classNames(\n className,\n styles.Button,\n stylesSize[size],\n stylesMode[mode],\n stylesAppearance[appearance],\n stylesAlign[align],\n sizeY !== 'compact' && sizeYClassNames[sizeY],\n platform === 'ios' && styles['Button--ios'],\n stretched && styles['Button--stretched'],\n hasIcons && styles['Button--with-icon'],\n hasIconOnly && !stretched && styles['Button--singleIcon'],\n loading && styles['Button--loading'],\n rounded && styles['Button--rounded'],\n )}\n getRootRef={getRootRef}\n >\n {loading && (\n <Spinner\n size=\"small\"\n className={styles.Button__spinner}\n disableAnimation={disableSpinnerAnimation}\n />\n )}\n <span className={styles.Button__in}>\n {hasReactNode(before) && (\n <span\n className={styles.Button__before}\n role=\"presentation\"\n data-testid={process.env.NODE_ENV === 'test' ? 'before' : undefined}\n >\n {before}\n </span>\n )}\n {hasReactNode(children) && (\n <span\n className={styles.Button__content}\n data-testid={process.env.NODE_ENV === 'test' ? 'children' : undefined}\n >\n {children}\n </span>\n )}\n {hasReactNode(after) && (\n <span\n className={styles.Button__after}\n role=\"presentation\"\n data-testid={process.env.NODE_ENV === 'test' ? 'after' : undefined}\n >\n {after}\n </span>\n )}\n </span>\n </Tappable>\n );\n};\n"],"names":["React","classNames","hasReactNode","useAdaptivity","usePlatform","Spinner","Tappable","stylesSize","s","m","l","stylesMode","primary","secondary","tertiary","outline","link","stylesAppearance","stylesAlign","left","center","right","sizeYClassNames","none","regular","Button","size","mode","appearance","stretched","align","children","before","after","getRootRef","loading","onClick","className","disableSpinnerAnimation","rounded","restProps","hasIcons","Boolean","hasIconOnly","sizeY","platform","hoverMode","activeMode","Component","href","focusVisibleMode","undefined","disableAnimation","span","role","data-testid","process","env","NODE_ENV"],"mappings":";;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,YAAY,QAAQ,kBAAkB;AAC3D,SAASC,aAAa,QAAQ,4BAA4B;AAC1D,SAASC,WAAW,QAAQ,0BAA0B;AAEtD,SAASC,OAAO,QAAQ,qBAAqB;AAC7C,SAASC,QAAQ,QAA4B,uBAAuB;AAKpE,MAAMC,aAAa;IACjBC,CAAC;IACDC,CAAC;IACDC,CAAC;AACH;AAEA,MAAMC,aAAa;IACjBC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,OAAO;IACPC,IAAI;AACN;AAEA,MAAMC,mBAAmB;IACvB,QAAQ;IACR,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,mBAAmB;AACrB;AAEA,MAAMC,cAAc;IAClBC,IAAI;IACJC,MAAM;IACNC,KAAK;AACP;AAEA,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;AACT;AAgBA;;CAEC,GACD,OAAO,MAAMC,SAAS;QAAC,EACrBC,OAAO,GAAG,EACVC,OAAO,SAAS,EAChBC,aAAa,QAAQ,EACrBC,YAAY,KAAK,EACjBC,QAAQ,QAAQ,EAChBC,QAAQ,EACRC,MAAM,EACNC,KAAK,EACLC,UAAU,EACVC,OAAO,EACPC,OAAO,EACPC,SAAS,EACTC,uBAAuB,EACvBC,OAAO,EAEK,WADTC;QAdHd;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,WAAWC,QAAQV,UAAUC;IACnC,MAAMU,cAAc,CAACZ,YAAYW,QAAQT,WAAWS,QAAQV;IAC5D,MAAM,EAAEY,QAAQ,MAAM,EAAE,GAAGzC;IAC3B,MAAM0C,WAAWzC;IAEjB,qBACE,MAACE;QACCwC,SAAS;QACTC,UAAU;QACVC,WAAWR,UAAUS,IAAI,GAAG,MAAM;QAClCC,kBAAiB;OACbV;QACJJ,SAASD,UAAUgB,YAAYf;QAC/BC,WAAWpC,WACToC,yBAEA9B,UAAU,CAACmB,KAAK,EAChBf,UAAU,CAACgB,KAAK,EAChBV,gBAAgB,CAACW,WAAW,EAC5BV,WAAW,CAACY,MAAM,EAClBc,UAAU,aAAatB,eAAe,CAACsB,MAAM,EAC7CC,aAAa,4BACbhB,sCACAY,qCACAE,eAAe,CAACd,uCAChBM,kCACAI;QAEFL,YAAYA;;YAEXC,yBACC,KAAC9B;gBACCqB,MAAK;gBACLW,SAAS;gBACTe,kBAAkBd;;0BAGtB,MAACe;gBAAKhB,SAAS;;oBACZnC,aAAa8B,yBACZ,KAACqB;wBACChB,SAAS;wBACTiB,MAAK;wBACLC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,WAAWP;kCAEzDnB;;oBAGJ9B,aAAa6B,2BACZ,KAACsB;wBACChB,SAAS;wBACTkB,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,aAAaP;kCAE3DpB;;oBAGJ7B,aAAa+B,wBACZ,KAACoB;wBACChB,SAAS;wBACTiB,MAAK;wBACLC,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,UAAUP;kCAExDlB;;;;;;AAMb,EAAE"}
@@ -1,9 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import type { HTMLAttributesWithRootRef } from '../../types';
3
- import { type CalendarDaysProps } from '../CalendarDays/CalendarDays';
4
- import { type CalendarHeaderProps } from '../CalendarHeader/CalendarHeader';
5
- import { type CalendarTimeProps } from '../CalendarTime/CalendarTime';
6
- export interface CalendarProps extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>, Pick<CalendarTimeProps, 'changeHoursLabel' | 'changeMinutesLabel'>, Pick<CalendarHeaderProps, 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'onNextMonth' | 'onPrevMonth' | 'prevMonthIcon' | 'nextMonthIcon' | 'prevMonthProps' | 'nextMonthProps'>, Pick<CalendarDaysProps, 'dayProps' | 'listenDayChangesForUpdate' | 'renderDayContent'> {
3
+ import { type CalendarDaysProps, type CalendarDaysTestsProps } from '../CalendarDays/CalendarDays';
4
+ import { type CalendarHeaderProps, type CalendarHeaderTestsProps } from '../CalendarHeader/CalendarHeader';
5
+ import { type CalendarTimeProps, type CalendarTimeTestsProps } from '../CalendarTime/CalendarTime';
6
+ export type CalendarTestsProps = CalendarDaysTestsProps & CalendarHeaderTestsProps & CalendarTimeTestsProps;
7
+ export interface CalendarProps extends Omit<HTMLAttributesWithRootRef<HTMLDivElement>, 'onChange'>, Pick<CalendarTimeProps, 'changeHoursLabel' | 'changeMinutesLabel' | 'doneButtonText' | 'doneButtonDisabled' | 'doneButtonShow'>, Pick<CalendarHeaderProps, 'prevMonthLabel' | 'nextMonthLabel' | 'changeMonthLabel' | 'changeYearLabel' | 'onNextMonth' | 'onPrevMonth' | 'prevMonthIcon' | 'nextMonthIcon' | 'prevMonthProps' | 'nextMonthProps'>, Pick<CalendarDaysProps, 'dayProps' | 'listenDayChangesForUpdate' | 'renderDayContent'>, CalendarTestsProps {
7
8
  value?: Date;
8
9
  /**
9
10
  * Запрещает выбор даты в прошлом.
@@ -17,7 +18,6 @@ export interface CalendarProps extends Omit<HTMLAttributesWithRootRef<HTMLDivEle
17
18
  disableFuture?: boolean;
18
19
  enableTime?: boolean;
19
20
  disablePickers?: boolean;
20
- doneButtonText?: string;
21
21
  changeDayLabel?: string;
22
22
  weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
23
23
  showNeighboringMonth?: boolean;
@@ -51,5 +51,5 @@ export interface CalendarProps extends Omit<HTMLAttributesWithRootRef<HTMLDivEle
51
51
  /**
52
52
  * @see https://vkcom.github.io/VKUI/#/Calendar
53
53
  */
54
- export declare const Calendar: ({ value, onChange, disablePast, disableFuture, shouldDisableDate, onClose, enableTime, doneButtonText, weekStartsOn, disablePickers, changeHoursLabel, changeMinutesLabel, prevMonthLabel, nextMonthLabel, changeMonthLabel, changeYearLabel, showNeighboringMonth, changeDayLabel, size, viewDate: externalViewDate, onHeaderChange, onNextMonth, onPrevMonth, prevMonthIcon, nextMonthIcon, prevMonthProps, nextMonthProps, dayProps, listenDayChangesForUpdate, renderDayContent, minDateTime, maxDateTime, ...props }: CalendarProps) => React.ReactNode;
54
+ export declare const Calendar: ({ value, onChange, disablePast, disableFuture, shouldDisableDate, onClose, enableTime, doneButtonText, doneButtonDisabled, doneButtonShow, weekStartsOn, disablePickers, changeHoursLabel, changeMinutesLabel, prevMonthLabel, nextMonthLabel, changeMonthLabel, changeYearLabel, showNeighboringMonth, changeDayLabel, size, viewDate: externalViewDate, onHeaderChange, onNextMonth, onPrevMonth, prevMonthIcon, nextMonthIcon, prevMonthProps, nextMonthProps, dayProps, listenDayChangesForUpdate, renderDayContent, minDateTime, maxDateTime, minutesTestId, hoursTestId, doneButtonTestId, prevMonthButtonTestId, nextMonthButtonTestId, monthDropdownTestId, yearDropdownTestId, dayTestId, ...props }: CalendarProps) => React.ReactNode;
55
55
  //# sourceMappingURL=Calendar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAIpF,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EACjE,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,GAAG,oBAAoB,CAAC,EAClE,IAAI,CACF,mBAAmB,EACjB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,CACnB,EACD,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,2BAA2B,GAAG,kBAAkB,CAAC;IACxF,KAAK,CAAC,EAAE,IAAI,CAAC;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAID;;GAEG;AACH,eAAO,MAAM,QAAQ,8fAkClB,aAAa,KAAG,KAAK,CAAC,SAiIxB,CAAC"}
1
+ {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AAItC,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GACrD,wBAAwB,GACxB,sBAAsB,CAAC;AAEzB,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,EACjE,IAAI,CACF,iBAAiB,EACf,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAChB,oBAAoB,GACpB,gBAAgB,CACnB,EACD,IAAI,CACF,mBAAmB,EACjB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,gBAAgB,CACnB,EACD,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,2BAA2B,GAAG,kBAAkB,CAAC,EACtF,kBAAkB;IACpB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAID;;GAEG;AACH,eAAO,MAAM,QAAQ,krBA4ClB,aAAa,KAAG,KAAK,CAAC,SA2IxB,CAAC"}