@vkontakte/vkui 5.9.0 → 5.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/dist/cjs/components/Alert/Alert.d.ts +3 -3
  2. package/dist/cjs/components/Alert/Alert.d.ts.map +1 -1
  3. package/dist/cjs/components/Alert/Alert.js +5 -3
  4. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  5. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +1 -1
  6. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  7. package/dist/cjs/components/CalendarRange/CalendarRange.js +1 -2
  8. package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
  9. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +1 -1
  10. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  11. package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts +4 -2
  12. package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  13. package/dist/cjs/components/CustomScrollView/CustomScrollView.js +17 -5
  14. package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
  15. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -1
  16. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  17. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  18. package/dist/cjs/components/FormLayout/FormLayout.d.ts +3 -3
  19. package/dist/cjs/components/FormLayout/FormLayout.d.ts.map +1 -1
  20. package/dist/cjs/components/FormLayout/FormLayout.js +5 -2
  21. package/dist/cjs/components/FormLayout/FormLayout.js.map +1 -1
  22. package/dist/cjs/components/Gallery/Gallery.d.ts.map +1 -1
  23. package/dist/cjs/components/Gallery/Gallery.js +3 -10
  24. package/dist/cjs/components/Gallery/Gallery.js.map +1 -1
  25. package/dist/cjs/components/Gallery/hooks.d.ts +2 -0
  26. package/dist/cjs/components/Gallery/hooks.d.ts.map +1 -0
  27. package/dist/cjs/components/Gallery/hooks.js +52 -0
  28. package/dist/cjs/components/Gallery/hooks.js.map +1 -0
  29. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  30. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +49 -20
  31. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  32. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
  33. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  34. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +5 -2
  35. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  36. package/dist/cjs/components/ModalRoot/ModalRoot.js +6 -8
  37. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  38. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
  39. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
  40. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
  41. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
  42. package/dist/cjs/hooks/useDirection.d.ts +39 -0
  43. package/dist/cjs/hooks/useDirection.d.ts.map +1 -0
  44. package/dist/cjs/hooks/useDirection.js +39 -0
  45. package/dist/cjs/hooks/useDirection.js.map +1 -0
  46. package/dist/cjs/lib/floating/adapters.d.ts +1 -1
  47. package/dist/cjs/lib/floating/adapters.d.ts.map +1 -1
  48. package/dist/cjs/lib/floating/adapters.js +1 -1
  49. package/dist/cjs/lib/floating/adapters.js.map +1 -1
  50. package/dist/cjs/lib/floating/index.d.ts +1 -1
  51. package/dist/cjs/lib/floating/index.d.ts.map +1 -1
  52. package/dist/cjs/lib/floating/index.js +1 -1
  53. package/dist/cjs/lib/floating/index.js.map +1 -1
  54. package/dist/cjs/lib/floating/types.d.ts +2 -2
  55. package/dist/cjs/lib/floating/types.d.ts.map +1 -1
  56. package/dist/components/Alert/Alert.d.ts +3 -3
  57. package/dist/components/Alert/Alert.d.ts.map +1 -1
  58. package/dist/components/Alert/Alert.js +5 -3
  59. package/dist/components/Alert/Alert.js.map +1 -1
  60. package/dist/components/CalendarRange/CalendarRange.d.ts +1 -1
  61. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  62. package/dist/components/CalendarRange/CalendarRange.js +1 -2
  63. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  64. package/dist/components/ChipsSelect/ChipsSelect.js +1 -1
  65. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  66. package/dist/components/CustomScrollView/CustomScrollView.d.ts +4 -2
  67. package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  68. package/dist/components/CustomScrollView/CustomScrollView.js +17 -5
  69. package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
  70. package/dist/components/CustomSelect/CustomSelect.d.ts +4 -1
  71. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  72. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  73. package/dist/components/FormLayout/FormLayout.d.ts +3 -3
  74. package/dist/components/FormLayout/FormLayout.d.ts.map +1 -1
  75. package/dist/components/FormLayout/FormLayout.js +5 -2
  76. package/dist/components/FormLayout/FormLayout.js.map +1 -1
  77. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  78. package/dist/components/Gallery/Gallery.js +3 -10
  79. package/dist/components/Gallery/Gallery.js.map +1 -1
  80. package/dist/components/Gallery/hooks.d.ts +2 -0
  81. package/dist/components/Gallery/hooks.d.ts.map +1 -0
  82. package/dist/components/Gallery/hooks.js +41 -0
  83. package/dist/components/Gallery/hooks.js.map +1 -0
  84. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  85. package/dist/components/HorizontalScroll/HorizontalScroll.js +49 -20
  86. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  87. package/dist/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
  88. package/dist/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  89. package/dist/components/ModalPageHeader/ModalPageHeader.js +5 -2
  90. package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  91. package/dist/components/ModalRoot/ModalRoot.js +6 -8
  92. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  93. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
  94. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
  95. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
  96. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
  97. package/dist/components.css +6 -6
  98. package/dist/components.css.map +1 -1
  99. package/dist/components.js.tmp +3941 -2540
  100. package/dist/cssm/components/Alert/Alert.d.ts +3 -3
  101. package/dist/cssm/components/Alert/Alert.d.ts.map +1 -1
  102. package/dist/cssm/components/Alert/Alert.js +3 -2
  103. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  104. package/dist/cssm/components/Button/Button.module.css +3 -1
  105. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +1 -1
  106. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  107. package/dist/cssm/components/CalendarRange/CalendarRange.js +1 -1
  108. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  109. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +1 -1
  110. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  111. package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts +4 -2
  112. package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  113. package/dist/cssm/components/CustomScrollView/CustomScrollView.js +4 -2
  114. package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
  115. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -1
  116. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  117. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  118. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
  119. package/dist/cssm/components/FormLayout/FormLayout.d.ts +3 -3
  120. package/dist/cssm/components/FormLayout/FormLayout.d.ts.map +1 -1
  121. package/dist/cssm/components/FormLayout/FormLayout.js +4 -2
  122. package/dist/cssm/components/FormLayout/FormLayout.js.map +1 -1
  123. package/dist/cssm/components/Gallery/Gallery.d.ts.map +1 -1
  124. package/dist/cssm/components/Gallery/Gallery.js +2 -7
  125. package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
  126. package/dist/cssm/components/Gallery/hooks.d.ts +2 -0
  127. package/dist/cssm/components/Gallery/hooks.d.ts.map +1 -0
  128. package/dist/cssm/components/Gallery/hooks.js +39 -0
  129. package/dist/cssm/components/Gallery/hooks.js.map +1 -0
  130. package/dist/cssm/components/Group/Group.module.css +2 -2
  131. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  132. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +48 -19
  133. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  134. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -4
  135. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
  136. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  137. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +4 -2
  138. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  139. package/dist/cssm/components/ModalRoot/ModalRoot.js +6 -8
  140. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  141. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +7 -1
  142. package/dist/cssm/components/Snackbar/Snackbar.module.css +1 -1
  143. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
  144. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
  145. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js +4 -2
  146. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
  147. package/dist/cssm/hooks/useDirection.d.ts +39 -0
  148. package/dist/cssm/hooks/useDirection.d.ts.map +1 -0
  149. package/dist/cssm/hooks/useDirection.js +55 -0
  150. package/dist/cssm/hooks/useDirection.js.map +1 -0
  151. package/dist/cssm/lib/floating/adapters.d.ts +1 -1
  152. package/dist/cssm/lib/floating/adapters.d.ts.map +1 -1
  153. package/dist/cssm/lib/floating/adapters.js +1 -1
  154. package/dist/cssm/lib/floating/adapters.js.map +1 -1
  155. package/dist/cssm/lib/floating/index.d.ts +1 -1
  156. package/dist/cssm/lib/floating/index.d.ts.map +1 -1
  157. package/dist/cssm/lib/floating/index.js +1 -1
  158. package/dist/cssm/lib/floating/index.js.map +1 -1
  159. package/dist/cssm/lib/floating/types.d.ts +2 -2
  160. package/dist/cssm/lib/floating/types.d.ts.map +1 -1
  161. package/dist/cssm/lib/floating/types.js.map +1 -1
  162. package/dist/hooks/useDirection.d.ts +39 -0
  163. package/dist/hooks/useDirection.d.ts.map +1 -0
  164. package/dist/hooks/useDirection.js +56 -0
  165. package/dist/hooks/useDirection.js.map +1 -0
  166. package/dist/lib/floating/adapters.d.ts +1 -1
  167. package/dist/lib/floating/adapters.d.ts.map +1 -1
  168. package/dist/lib/floating/adapters.js +1 -1
  169. package/dist/lib/floating/adapters.js.map +1 -1
  170. package/dist/lib/floating/index.d.ts +1 -1
  171. package/dist/lib/floating/index.d.ts.map +1 -1
  172. package/dist/lib/floating/index.js +1 -1
  173. package/dist/lib/floating/index.js.map +1 -1
  174. package/dist/lib/floating/types.d.ts +2 -2
  175. package/dist/lib/floating/types.d.ts.map +1 -1
  176. package/dist/lib/floating/types.js.map +1 -1
  177. package/dist/vkui.css +6 -6
  178. package/dist/vkui.css.map +1 -1
  179. package/dist/vkui.js.tmp +3941 -2540
  180. package/package.json +2 -2
  181. package/src/components/Alert/Alert.tsx +10 -3
  182. package/src/components/Button/Button.module.css +3 -1
  183. package/src/components/CalendarRange/CalendarRange.tsx +0 -1
  184. package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
  185. package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
  186. package/src/components/CustomSelect/CustomSelect.tsx +5 -1
  187. package/src/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
  188. package/src/components/FormLayout/FormLayout.tsx +8 -3
  189. package/src/components/Gallery/Gallery.tsx +2 -6
  190. package/src/components/Gallery/hooks.ts +39 -0
  191. package/src/components/Group/Group.module.css +2 -2
  192. package/src/components/HorizontalScroll/HorizontalScroll.tsx +54 -20
  193. package/src/components/ModalPage/ModalPage.module.css +1 -4
  194. package/src/components/ModalPageHeader/ModalPageHeader.tsx +8 -4
  195. package/src/components/ModalRoot/ModalRoot.tsx +6 -5
  196. package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +6 -1
  197. package/src/components/Snackbar/Snackbar.module.css +1 -1
  198. package/src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx +6 -2
  199. package/src/hooks/useDirection.ts +63 -0
  200. package/src/lib/floating/adapters.ts +1 -1
  201. package/src/lib/floating/index.ts +1 -1
  202. package/src/lib/floating/types.ts +2 -2
@@ -5,6 +5,7 @@ import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
5
5
  import * as React from "react";
6
6
  import { classNames, noop } from "@vkontakte/vkjs";
7
7
  import { useAdaptivityHasPointer } from "../../hooks/useAdaptivityHasPointer";
8
+ import { useDirection } from "../../hooks/useDirection";
8
9
  import { useEventListener } from "../../hooks/useEventListener";
9
10
  import { useExternRef } from "../../hooks/useExternRef";
10
11
  import { easeInOutSine } from "../../lib/fx";
@@ -15,11 +16,25 @@ import { ScrollArrow } from "../ScrollArrow/ScrollArrow";
15
16
  */ function now() {
16
17
  return performance && performance.now ? performance.now() : Date.now();
17
18
  }
19
+ /**
20
+ * Округление к большему по модулю
21
+ *
22
+ * ## Пример
23
+ *
24
+ * ```ts
25
+ * import { strict as assert } from 'node:assert';
26
+ *
27
+ * assert.equal(roundingAwayFromZero(5.1), 6)
28
+ * assert.equal(roundingAwayFromZero(-5.1), -6)
29
+ * ```
30
+ */ function roundingAwayFromZero(value) {
31
+ return value > 0 ? Math.ceil(value) : Math.floor(value);
32
+ }
18
33
  /**
19
34
  * Округляем el.scrollLeft
20
35
  * https://github.com/VKCOM/VKUI/pull/2445
21
36
  */ var roundUpElementScrollLeft = function(el) {
22
- return Math.ceil(el.scrollLeft);
37
+ return roundingAwayFromZero(el.scrollLeft);
23
38
  };
24
39
  /**
25
40
  * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll
@@ -27,19 +42,24 @@ import { ScrollArrow } from "../ScrollArrow/ScrollArrow";
27
42
  * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла
28
43
  */ var SCROLL_ONE_FRAME_TIME = 250;
29
44
  function doScroll(param) {
30
- var scrollElement = param.scrollElement, getScrollPosition = param.getScrollPosition, animationQueue = param.animationQueue, onScrollToRightBorder = param.onScrollToRightBorder, onScrollEnd = param.onScrollEnd, onScrollStart = param.onScrollStart, initialScrollWidth = param.initialScrollWidth, _param_scrollAnimationDuration = param.scrollAnimationDuration, scrollAnimationDuration = _param_scrollAnimationDuration === void 0 ? SCROLL_ONE_FRAME_TIME : _param_scrollAnimationDuration;
45
+ var scrollElement = param.scrollElement, getScrollPosition = param.getScrollPosition, animationQueue = param.animationQueue, onScrollToEndBorder = param.onScrollToEndBorder, onScrollEnd = param.onScrollEnd, onScrollStart = param.onScrollStart, initialScrollWidth = param.initialScrollWidth, _param_scrollAnimationDuration = param.scrollAnimationDuration, scrollAnimationDuration = _param_scrollAnimationDuration === void 0 ? SCROLL_ONE_FRAME_TIME : _param_scrollAnimationDuration, textDirection = param.textDirection;
31
46
  if (!scrollElement || !getScrollPosition) {
32
47
  return;
33
48
  }
34
49
  /**
35
- * максимальное значение сдвига влево
36
- */ var maxLeft = initialScrollWidth - scrollElement.offsetWidth;
37
- var startLeft = roundUpElementScrollLeft(scrollElement);
38
- var endLeft = getScrollPosition(startLeft);
50
+ * крайнее значение сдвига
51
+ */ var extremeScrollLeft = (textDirection === "ltr" ? 1 : -1) * (initialScrollWidth - scrollElement.offsetWidth);
52
+ var startScrollLeft = roundUpElementScrollLeft(scrollElement);
53
+ var endScrollLeft = getScrollPosition(startScrollLeft);
39
54
  onScrollStart();
40
- if (endLeft >= maxLeft) {
41
- onScrollToRightBorder();
42
- endLeft = maxLeft;
55
+ /**
56
+ * Если окончание прокрутки вышло за ноль
57
+ */ if (startScrollLeft * endScrollLeft < 0) {
58
+ endScrollLeft = 0;
59
+ }
60
+ if (Math.abs(endScrollLeft) >= Math.abs(extremeScrollLeft)) {
61
+ onScrollToEndBorder();
62
+ endScrollLeft = extremeScrollLeft;
43
63
  }
44
64
  var startTime = now();
45
65
  (function scroll() {
@@ -50,9 +70,10 @@ function doScroll(param) {
50
70
  var time = now();
51
71
  var elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);
52
72
  var value = easeInOutSine(elapsed);
53
- var currentLeft = startLeft + (endLeft - startLeft) * value;
54
- scrollElement.scrollLeft = Math.ceil(currentLeft);
55
- if (roundUpElementScrollLeft(scrollElement) !== Math.max(0, endLeft) && elapsed !== 1) {
73
+ var currentScrollLeft = startScrollLeft + (endScrollLeft - startScrollLeft) * value;
74
+ scrollElement.scrollLeft = roundingAwayFromZero(currentScrollLeft);
75
+ var scrollEnd = textDirection === "ltr" ? Math.max(0, endScrollLeft) : Math.min(0, endScrollLeft);
76
+ if (roundUpElementScrollLeft(scrollElement) !== scrollEnd && elapsed !== 1) {
56
77
  requestAnimationFrame(scroll);
57
78
  return;
58
79
  }
@@ -79,8 +100,11 @@ function doScroll(param) {
79
100
  ]);
80
101
  var _React_useState = _sliced_to_array(React.useState(false), 2), canScrollLeft = _React_useState[0], setCanScrollLeft = _React_useState[1];
81
102
  var _React_useState1 = _sliced_to_array(React.useState(false), 2), canScrollRight = _React_useState1[0], setCanScrollRight = _React_useState1[1];
103
+ var _useDirection = _sliced_to_array(useDirection(), 2), directionRef = _useDirection[0], tmp = _useDirection[1], textDirection = tmp === void 0 ? "ltr" : tmp;
104
+ var setCanScrollStart = textDirection === "ltr" ? setCanScrollLeft : setCanScrollRight;
105
+ var setCanScrollEnd = textDirection === "ltr" ? setCanScrollRight : setCanScrollLeft;
82
106
  var isCustomScrollingRef = React.useRef(false);
83
- var scrollerRef = useExternRef(getRef);
107
+ var scrollerRef = useExternRef(getRef, directionRef);
84
108
  var animationQueue = React.useRef([]);
85
109
  var hasPointer = useAdaptivityHasPointer();
86
110
  var scrollTo = React.useCallback(function(getScrollPosition) {
@@ -91,8 +115,8 @@ function doScroll(param) {
91
115
  scrollElement: scrollElement,
92
116
  getScrollPosition: getScrollPosition,
93
117
  animationQueue: animationQueue.current,
94
- onScrollToRightBorder: function() {
95
- return setCanScrollRight(false);
118
+ onScrollToEndBorder: function() {
119
+ return setCanScrollEnd(false);
96
120
  },
97
121
  onScrollEnd: function() {
98
122
  return isCustomScrollingRef.current = false;
@@ -101,15 +125,18 @@ function doScroll(param) {
101
125
  return isCustomScrollingRef.current = true;
102
126
  },
103
127
  initialScrollWidth: (scrollElement === null || scrollElement === void 0 ? void 0 : (_scrollElement_firstElementChild = scrollElement.firstElementChild) === null || _scrollElement_firstElementChild === void 0 ? void 0 : _scrollElement_firstElementChild.scrollWidth) || 0,
104
- scrollAnimationDuration: scrollAnimationDuration
128
+ scrollAnimationDuration: scrollAnimationDuration,
129
+ textDirection: textDirection
105
130
  });
106
131
  });
107
132
  if (animationQueue.current.length === 1) {
108
133
  animationQueue.current[0]();
109
134
  }
110
135
  }, [
136
+ scrollerRef,
111
137
  scrollAnimationDuration,
112
- scrollerRef
138
+ textDirection,
139
+ setCanScrollEnd
113
140
  ]);
114
141
  var scrollToLeft = React.useCallback(function() {
115
142
  var getScrollPosition = getScrollToLeft !== null && getScrollToLeft !== void 0 ? getScrollToLeft : function(i) {
@@ -134,13 +161,15 @@ function doScroll(param) {
134
161
  var calculateArrowsVisibility = React.useCallback(function() {
135
162
  if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {
136
163
  var scrollElement = scrollerRef.current;
137
- setCanScrollLeft(scrollElement.scrollLeft > 0);
138
- setCanScrollRight(roundUpElementScrollLeft(scrollElement) + scrollElement.offsetWidth < scrollElement.scrollWidth);
164
+ setCanScrollStart(scrollElement.scrollLeft !== 0);
165
+ setCanScrollEnd(Math.abs(roundUpElementScrollLeft(scrollElement)) + scrollElement.offsetWidth < scrollElement.scrollWidth);
139
166
  }
140
167
  }, [
168
+ showArrows,
141
169
  hasPointer,
142
170
  scrollerRef,
143
- showArrows
171
+ setCanScrollStart,
172
+ setCanScrollEnd
144
173
  ]);
145
174
  var scrollEvent = useEventListener("scroll", calculateArrowsVisibility);
146
175
  React.useEffect(function addScrollerRefToScrollEvent() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { easeInOutSine } from '../../lib/fx';\nimport { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToRightBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate\n */\n initialScrollWidth: number;\n}\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при клике на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при клике на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n arrowSize?: 'm' | 'l';\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n showArrows?: boolean | 'always';\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n}\n\n/**\n * timing method\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => Math.ceil(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToRightBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * максимальное значение сдвига влево\n */\n const maxLeft = initialScrollWidth - scrollElement.offsetWidth;\n\n let startLeft = roundUpElementScrollLeft(scrollElement);\n let endLeft = getScrollPosition(startLeft);\n\n onScrollStart();\n\n if (endLeft >= maxLeft) {\n onScrollToRightBorder();\n endLeft = maxLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n if (!scrollElement) {\n onScrollEnd();\n return;\n }\n\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentLeft = startLeft + (endLeft - startLeft) * value;\n scrollElement.scrollLeft = Math.ceil(currentLeft);\n\n if (roundUpElementScrollLeft(scrollElement) !== Math.max(0, endLeft) && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/HorizontalScroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'l',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n ...restProps\n}: HorizontalScrollProps) => {\n const [canScrollLeft, setCanScrollLeft] = React.useState(false);\n const [canScrollRight, setCanScrollRight] = React.useState(false);\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToRightBorder: () => setCanScrollRight(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollAnimationDuration, scrollerRef],\n );\n\n const scrollToLeft = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToRight = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n\n setCanScrollLeft(scrollElement.scrollLeft > 0);\n setCanScrollRight(\n roundUpElementScrollLeft(scrollElement) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [hasPointer, scrollerRef, showArrows]);\n\n const scrollEvent = useEventListener('scroll', calculateArrowsVisibility);\n React.useEffect(\n function addScrollerRefToScrollEvent() {\n if (!scrollerRef.current) {\n return noop;\n }\n\n scrollEvent.add(scrollerRef.current);\n return scrollEvent.remove;\n },\n [scrollEvent, scrollerRef],\n );\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n /**\n * Прокрутка с помощью любого колеса мыши\n */\n const onwheel = React.useCallback(\n (e: WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n e.preventDefault();\n },\n [scrollerRef],\n );\n\n const wheelEvent = useEventListener('wheel', onwheel);\n React.useEffect(\n function addScrollerRefToWheelEvent() {\n if (!scrollerRef.current || !scrollOnAnyWheel) {\n return noop;\n }\n\n wheelEvent.add(scrollerRef.current);\n\n return wheelEvent.remove;\n },\n [wheelEvent, scrollerRef, scrollOnAnyWheel],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['HorizontalScroll'],\n 'vkuiInternalHorizontalScroll',\n showArrows === 'always' && styles['HorizontalScroll--withConstArrows'],\n )}\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowLeft'],\n )}\n onClick={scrollToLeft}\n />\n )}\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowRight'],\n )}\n onClick={scrollToRight}\n />\n )}\n <div className={styles['HorizontalScroll__in']} ref={scrollerRef}>\n <div className={styles['HorizontalScroll__in-wrapper']}>{children}</div>\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","noop","useAdaptivityHasPointer","useEventListener","useExternRef","easeInOutSine","RootComponent","ScrollArrow","now","performance","Date","roundUpElementScrollLeft","el","Math","ceil","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToRightBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","maxLeft","offsetWidth","startLeft","endLeft","startTime","scroll","time","elapsed","min","value","currentLeft","max","requestAnimationFrame","shift","length","HorizontalScroll","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","restProps","useState","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","isCustomScrollingRef","useRef","scrollerRef","hasPointer","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToLeft","i","scrollToRight","calculateArrowsVisibility","scrollEvent","useEffect","addScrollerRefToScrollEvent","add","remove","onwheel","e","scrollBy","left","deltaX","deltaY","behavior","preventDefault","wheelEvent","addScrollerRefToWheelEvent","baseClassName","onMouseEnter","undefined","size","offsetY","direction","className","onClick","div","ref"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useDirection } from '../../hooks/useDirection';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { easeInOutSine } from '../../lib/fx';\nimport { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToEndBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate\n */\n initialScrollWidth: number;\n textDirection: 'ltr' | 'rtl';\n}\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при клике на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при клике на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n arrowSize?: 'm' | 'l';\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n showArrows?: boolean | 'always';\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n}\n\n/**\n * timing method\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округление к большему по модулю\n *\n * ## Пример\n *\n * ```ts\n * import { strict as assert } from 'node:assert';\n *\n * assert.equal(roundingAwayFromZero(5.1), 6)\n * assert.equal(roundingAwayFromZero(-5.1), -6)\n * ```\n */\nfunction roundingAwayFromZero(value: number): number {\n return value > 0 ? Math.ceil(value) : Math.floor(value);\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => roundingAwayFromZero(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToEndBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n textDirection,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * крайнее значение сдвига\n */\n const extremeScrollLeft =\n (textDirection === 'ltr' ? 1 : -1) * (initialScrollWidth - scrollElement.offsetWidth);\n\n let startScrollLeft = roundUpElementScrollLeft(scrollElement);\n let endScrollLeft = getScrollPosition(startScrollLeft);\n\n onScrollStart();\n\n /**\n * Если окончание прокрутки вышло за ноль\n */\n if (startScrollLeft * endScrollLeft < 0) {\n endScrollLeft = 0;\n }\n\n if (Math.abs(endScrollLeft) >= Math.abs(extremeScrollLeft)) {\n onScrollToEndBorder();\n endScrollLeft = extremeScrollLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n if (!scrollElement) {\n onScrollEnd();\n return;\n }\n\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentScrollLeft = startScrollLeft + (endScrollLeft - startScrollLeft) * value;\n scrollElement.scrollLeft = roundingAwayFromZero(currentScrollLeft);\n\n const scrollEnd =\n textDirection === 'ltr' ? Math.max(0, endScrollLeft) : Math.min(0, endScrollLeft);\n if (roundUpElementScrollLeft(scrollElement) !== scrollEnd && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/HorizontalScroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'l',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n ...restProps\n}: HorizontalScrollProps) => {\n const [canScrollLeft, setCanScrollLeft] = React.useState(false);\n const [canScrollRight, setCanScrollRight] = React.useState(false);\n const [directionRef, textDirection = 'ltr'] = useDirection<HTMLDivElement>();\n\n const setCanScrollStart = textDirection === 'ltr' ? setCanScrollLeft : setCanScrollRight;\n const setCanScrollEnd = textDirection === 'ltr' ? setCanScrollRight : setCanScrollLeft;\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef, directionRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToEndBorder: () => setCanScrollEnd(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n textDirection,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollerRef, scrollAnimationDuration, textDirection, setCanScrollEnd],\n );\n\n const scrollToLeft = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToRight = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n\n setCanScrollStart(scrollElement.scrollLeft !== 0);\n setCanScrollEnd(\n Math.abs(roundUpElementScrollLeft(scrollElement)) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [showArrows, hasPointer, scrollerRef, setCanScrollStart, setCanScrollEnd]);\n\n const scrollEvent = useEventListener('scroll', calculateArrowsVisibility);\n React.useEffect(\n function addScrollerRefToScrollEvent() {\n if (!scrollerRef.current) {\n return noop;\n }\n\n scrollEvent.add(scrollerRef.current);\n return scrollEvent.remove;\n },\n [scrollEvent, scrollerRef],\n );\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n /**\n * Прокрутка с помощью любого колеса мыши\n */\n const onwheel = React.useCallback(\n (e: WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n e.preventDefault();\n },\n [scrollerRef],\n );\n\n const wheelEvent = useEventListener('wheel', onwheel);\n React.useEffect(\n function addScrollerRefToWheelEvent() {\n if (!scrollerRef.current || !scrollOnAnyWheel) {\n return noop;\n }\n\n wheelEvent.add(scrollerRef.current);\n\n return wheelEvent.remove;\n },\n [wheelEvent, scrollerRef, scrollOnAnyWheel],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['HorizontalScroll'],\n 'vkuiInternalHorizontalScroll',\n showArrows === 'always' && styles['HorizontalScroll--withConstArrows'],\n )}\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowLeft'],\n )}\n onClick={scrollToLeft}\n />\n )}\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowRight'],\n )}\n onClick={scrollToRight}\n />\n )}\n <div className={styles['HorizontalScroll__in']} ref={scrollerRef}>\n <div className={styles['HorizontalScroll__in-wrapper']}>{children}</div>\n </div>\n </RootComponent>\n );\n};\n"],"names":["React","classNames","noop","useAdaptivityHasPointer","useDirection","useEventListener","useExternRef","easeInOutSine","RootComponent","ScrollArrow","now","performance","Date","roundingAwayFromZero","value","Math","ceil","floor","roundUpElementScrollLeft","el","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToEndBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","textDirection","extremeScrollLeft","offsetWidth","startScrollLeft","endScrollLeft","abs","startTime","scroll","time","elapsed","min","currentScrollLeft","scrollEnd","max","requestAnimationFrame","shift","length","HorizontalScroll","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","restProps","useState","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","directionRef","setCanScrollStart","setCanScrollEnd","isCustomScrollingRef","useRef","scrollerRef","hasPointer","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToLeft","i","scrollToRight","calculateArrowsVisibility","scrollEvent","useEffect","addScrollerRefToScrollEvent","add","remove","onwheel","e","scrollBy","left","deltaX","deltaY","behavior","preventDefault","wheelEvent","addScrollerRefToWheelEvent","baseClassName","onMouseEnter","undefined","size","offsetY","direction","className","onClick","div","ref"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import * as React from 'react';
2
- import { HasRef } from '../../types';
2
+ import { HasRef, HasRootRef } from '../../types';
3
3
  import { PanelHeaderProps } from '../PanelHeader/PanelHeader';
4
- export interface ModalPageHeaderProps extends React.HTMLAttributes<HTMLDivElement>, Omit<PanelHeaderProps, 'fixed' | 'shadow'>, HasRef<HTMLDivElement> {
4
+ export interface ModalPageHeaderProps extends React.HTMLAttributes<HTMLDivElement>, Omit<PanelHeaderProps, 'fixed' | 'shadow'>, HasRef<HTMLDivElement>, HasRootRef<HTMLDivElement> {
5
5
  }
6
6
  /**
7
7
  * @see https://vkcom.github.io/VKUI/#/ModalPageHeader
8
8
  */
9
- export declare const ModalPageHeader: ({ children, separator, getRef, className, typographyProps, ...restProps }: ModalPageHeaderProps) => React.JSX.Element;
9
+ export declare const ModalPageHeader: ({ children, separator, getRef, getRootRef, className, typographyProps, ...restProps }: ModalPageHeaderProps) => React.JSX.Element;
10
10
  //# sourceMappingURL=ModalPageHeader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModalPageHeader.d.ts","sourceRoot":"","sources":["../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAe,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAI3E,MAAM,WAAW,oBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC,EAC1C,MAAM,CAAC,cAAc,CAAC;CAAG;AAE7B;;GAEG;AACH,eAAO,MAAM,eAAe,8EAOzB,oBAAoB,sBAgCtB,CAAC"}
1
+ {"version":3,"file":"ModalPageHeader.d.ts","sourceRoot":"","sources":["../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAe,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAI3E,MAAM,WAAW,oBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC,EAC1C,MAAM,CAAC,cAAc,CAAC,EACtB,UAAU,CAAC,cAAc,CAAC;CAAG;AAEjC;;GAEG;AACH,eAAO,MAAM,eAAe,0FAQzB,oBAAoB,sBAiCtB,CAAC"}
@@ -4,6 +4,7 @@ import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_
4
4
  import * as React from "react";
5
5
  import { classNames } from "@vkontakte/vkjs";
6
6
  import { useAdaptivityWithJSMediaQueries } from "../../hooks/useAdaptivityWithJSMediaQueries";
7
+ import { useExternRef } from "../../hooks/useExternRef";
7
8
  import { usePlatform } from "../../hooks/usePlatform";
8
9
  import { Platform } from "../../lib/platform";
9
10
  import { ModalPageContext } from "../ModalPage/ModalPageContext";
@@ -12,10 +13,11 @@ import { Separator } from "../Separator/Separator";
12
13
  /**
13
14
  * @see https://vkcom.github.io/VKUI/#/ModalPageHeader
14
15
  */ export var ModalPageHeader = function(_param) {
15
- var children = _param.children, _param_separator = _param.separator, separator = _param_separator === void 0 ? true : _param_separator, getRef = _param.getRef, className = _param.className, typographyProps = _param.typographyProps, restProps = _object_without_properties(_param, [
16
+ var children = _param.children, _param_separator = _param.separator, separator = _param_separator === void 0 ? true : _param_separator, getRef = _param.getRef, getRootRef = _param.getRootRef, className = _param.className, typographyProps = _param.typographyProps, restProps = _object_without_properties(_param, [
16
17
  "children",
17
18
  "separator",
18
19
  "getRef",
20
+ "getRootRef",
19
21
  "className",
20
22
  "typographyProps"
21
23
  ]);
@@ -23,9 +25,10 @@ import { Separator } from "../Separator/Separator";
23
25
  var hasSeparator = separator && platform === Platform.VKCOM;
24
26
  var isDesktop = useAdaptivityWithJSMediaQueries().isDesktop;
25
27
  var labelId = React.useContext(ModalPageContext).labelId;
28
+ var modalPageHeaderRef = useExternRef(getRef, getRootRef);
26
29
  return /*#__PURE__*/ React.createElement("div", {
27
30
  className: classNames("vkuiModalPageHeader", platform !== Platform.VKCOM && "vkuiModalPageHeader--withGaps", isDesktop && "vkuiModalPageHeader--desktop"),
28
- ref: getRef
31
+ ref: modalPageHeaderRef
29
32
  }, /*#__PURE__*/ React.createElement(PanelHeader, _object_spread_props(_object_spread({
30
33
  className: classNames("vkuiInternalModalPageHeader__in", className),
31
34
  typographyProps: _object_spread({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasRef } from '../../types';\nimport { ModalPageContext } from '../ModalPage/ModalPageContext';\nimport { PanelHeader, PanelHeaderProps } from '../PanelHeader/PanelHeader';\nimport { Separator } from '../Separator/Separator';\nimport styles from './ModalPageHeader.module.css';\n\nexport interface ModalPageHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<PanelHeaderProps, 'fixed' | 'shadow'>,\n HasRef<HTMLDivElement> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPageHeader\n */\nexport const ModalPageHeader = ({\n children,\n separator = true,\n getRef,\n className,\n typographyProps,\n ...restProps\n}: ModalPageHeaderProps) => {\n const platform = usePlatform();\n const hasSeparator = separator && platform === Platform.VKCOM;\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { labelId } = React.useContext(ModalPageContext);\n\n return (\n <div\n className={classNames(\n styles['ModalPageHeader'],\n platform !== Platform.VKCOM && styles['ModalPageHeader--withGaps'],\n isDesktop && styles['ModalPageHeader--desktop'],\n )}\n ref={getRef}\n >\n <PanelHeader\n className={classNames('vkuiInternalModalPageHeader__in', className)}\n typographyProps={{\n Component: 'h2',\n id: labelId,\n ...typographyProps,\n }}\n {...restProps}\n fixed={false}\n separator={false}\n transparent\n >\n {children}\n </PanelHeader>\n {hasSeparator && <Separator wide />}\n </div>\n );\n};\n"],"names":["React","classNames","useAdaptivityWithJSMediaQueries","usePlatform","Platform","ModalPageContext","PanelHeader","Separator","ModalPageHeader","children","separator","getRef","className","typographyProps","restProps","platform","hasSeparator","VKCOM","isDesktop","labelId","useContext","div","ref","Component","id","fixed","transparent","wide"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,+BAA+B,QAAQ,8CAA8C;AAC9F,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,QAAQ,QAAQ,qBAAqB;AAE9C,SAASC,gBAAgB,QAAQ,gCAAgC;AACjE,SAASC,WAAW,QAA0B,6BAA6B;AAC3E,SAASC,SAAS,QAAQ,yBAAyB;AAQnD;;CAEC,GACD,OAAO,IAAMC,kBAAkB;QAC7BC,kBAAAA,oCACAC,WAAAA,0CAAY,yBACZC,gBAAAA,QACAC,mBAAAA,WACAC,yBAAAA,iBACGC;QALHL;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWZ;IACjB,IAAMa,eAAeN,aAAaK,aAAaX,SAASa,KAAK;IAC7D,IAAM,AAAEC,YAAchB,kCAAdgB;IACR,IAAM,AAAEC,UAAYnB,MAAMoB,UAAU,CAACf,kBAA7Bc;IAER,qBACE,oBAACE;QACCT,WAAWX,kCAETc,aAAaX,SAASa,KAAK,qCAC3BC;QAEFI,KAAKX;qBAEL,oBAACL;QACCM,WAAWX,WAAW,mCAAmCW;QACzDC,iBAAiB;YACfU,WAAW;YACXC,IAAIL;WACDN;OAEDC;QACJW,OAAO;QACPf,WAAW;QACXgB,aAAAA;QAECjB,WAEFO,8BAAgB,oBAACT;QAAUoB,MAAAA;;AAGlC,EAAE"}
1
+ {"version":3,"sources":["../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasRef, HasRootRef } from '../../types';\nimport { ModalPageContext } from '../ModalPage/ModalPageContext';\nimport { PanelHeader, PanelHeaderProps } from '../PanelHeader/PanelHeader';\nimport { Separator } from '../Separator/Separator';\nimport styles from './ModalPageHeader.module.css';\n\nexport interface ModalPageHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<PanelHeaderProps, 'fixed' | 'shadow'>,\n HasRef<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPageHeader\n */\nexport const ModalPageHeader = ({\n children,\n separator = true,\n getRef, // TODO [>=6]: remove\n getRootRef,\n className,\n typographyProps,\n ...restProps\n}: ModalPageHeaderProps) => {\n const platform = usePlatform();\n const hasSeparator = separator && platform === Platform.VKCOM;\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { labelId } = React.useContext(ModalPageContext);\n const modalPageHeaderRef = useExternRef(getRef, getRootRef);\n\n return (\n <div\n className={classNames(\n styles['ModalPageHeader'],\n platform !== Platform.VKCOM && styles['ModalPageHeader--withGaps'],\n isDesktop && styles['ModalPageHeader--desktop'],\n )}\n ref={modalPageHeaderRef}\n >\n <PanelHeader\n className={classNames('vkuiInternalModalPageHeader__in', className)}\n typographyProps={{\n Component: 'h2',\n id: labelId,\n ...typographyProps,\n }}\n {...restProps}\n fixed={false}\n separator={false}\n transparent\n >\n {children}\n </PanelHeader>\n {hasSeparator && <Separator wide />}\n </div>\n );\n};\n"],"names":["React","classNames","useAdaptivityWithJSMediaQueries","useExternRef","usePlatform","Platform","ModalPageContext","PanelHeader","Separator","ModalPageHeader","children","separator","getRef","getRootRef","className","typographyProps","restProps","platform","hasSeparator","VKCOM","isDesktop","labelId","useContext","modalPageHeaderRef","div","ref","Component","id","fixed","transparent","wide"],"mappings":";;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,+BAA+B,QAAQ,8CAA8C;AAC9F,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,WAAW,QAAQ,0BAA0B;AACtD,SAASC,QAAQ,QAAQ,qBAAqB;AAE9C,SAASC,gBAAgB,QAAQ,gCAAgC;AACjE,SAASC,WAAW,QAA0B,6BAA6B;AAC3E,SAASC,SAAS,QAAQ,yBAAyB;AASnD;;CAEC,GACD,OAAO,IAAMC,kBAAkB;QAC7BC,kBAAAA,oCACAC,WAAAA,0CAAY,yBACZC,gBAAAA,QACAC,oBAAAA,YACAC,mBAAAA,WACAC,yBAAAA,iBACGC;QANHN;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWb;IACjB,IAAMc,eAAeP,aAAaM,aAAaZ,SAASc,KAAK;IAC7D,IAAM,AAAEC,YAAclB,kCAAdkB;IACR,IAAM,AAAEC,UAAYrB,MAAMsB,UAAU,CAAChB,kBAA7Be;IACR,IAAME,qBAAqBpB,aAAaS,QAAQC;IAEhD,qBACE,oBAACW;QACCV,WAAWb,kCAETgB,aAAaZ,SAASc,KAAK,qCAC3BC;QAEFK,KAAKF;qBAEL,oBAAChB;QACCO,WAAWb,WAAW,mCAAmCa;QACzDC,iBAAiB;YACfW,WAAW;YACXC,IAAIN;WACDN;OAEDC;QACJY,OAAO;QACPjB,WAAW;QACXkB,aAAAA;QAECnB,WAEFQ,8BAAgB,oBAACV;QAAUsB,MAAAA;;AAGlC,EAAE"}
@@ -434,7 +434,7 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
434
434
  }
435
435
  modalState.translateY = translateY;
436
436
  modalState.translateYCurrent = translateY;
437
- modalState.collapsed = translateY > 0 && translateY < shiftYEndPercent;
437
+ modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);
438
438
  modalState.expanded = translateY === 0;
439
439
  modalState.hidden = translateY === 100;
440
440
  if (modalState.hidden) {
@@ -624,6 +624,7 @@ function initPageModal(modalState) {
624
624
  var expandedRange;
625
625
  var collapsedRange;
626
626
  var hiddenRange;
627
+ var hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);
627
628
  if (modalState.expandable) {
628
629
  var _modalState_settlingHeight;
629
630
  translateYFrom = 100 - ((_modalState_settlingHeight = modalState.settlingHeight) !== null && _modalState_settlingHeight !== void 0 ? _modalState_settlingHeight : 0);
@@ -633,15 +634,15 @@ function initPageModal(modalState) {
633
634
  0,
634
635
  shiftHalf
635
636
  ];
636
- collapsedRange = [
637
+ collapsedRange = hasCollapsedState ? [
637
638
  shiftHalf,
638
639
  translateYFrom + visiblePart / 4
639
- ];
640
+ ] : undefined;
640
641
  hiddenRange = [
641
642
  translateYFrom + visiblePart / 4,
642
643
  100
643
644
  ];
644
- collapsed = translateYFrom > 0;
645
+ collapsed = hasCollapsedState && translateYFrom > 0;
645
646
  expanded = translateYFrom <= 0;
646
647
  translateY = translateYFrom;
647
648
  } else {
@@ -656,10 +657,7 @@ function initPageModal(modalState) {
656
657
  translateY,
657
658
  translateY + 25
658
659
  ];
659
- collapsedRange = [
660
- translateY + 25,
661
- translateY + 25
662
- ];
660
+ collapsedRange = undefined;
663
661
  hiddenRange = [
664
662
  translateY + 25,
665
663
  translateY + 100
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { setTransformStyle } from '../../lib/styles';\nimport { transitionEvent } from '../../lib/supportEvents';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport { ModalRootWithDOMProps, ModalsStateEntry, ModalType, TranslateRange } from './types';\nimport { ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private documentScrolling = false;\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === Platform.IOS ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const { enteringModal } = this.props;\n const enteringState = this.props.getModalState(enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.props.onEntered(enteringModal);\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n this.setMaskOpacity(enteringState, 1);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === ModalType.PAGE) {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === ModalType.PAGE;\n\n const prevIsPage = !!prevModalState && prevModalState.type === ModalType.PAGE;\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = translateY > 0 && translateY < shiftYEndPercent;\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n this.maskElementRef.current.style.transitionDelay =\n opacity && this.props.delayEnter ? `${this.timeout}ms` : '';\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.hasCustomPanelHeaderAfter &&\n styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === ModalType.PAGE;\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n getRootRef={(e) => {\n const modalState = this.props.getModalState(modalId);\n if (modalState) {\n modalState.modalElement = e;\n }\n }}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case ModalType.PAGE:\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case ModalType.CARD:\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement, bottomInset } = modalState;\n const contentElementHeight = (contentElement?.firstElementChild as HTMLElement).scrollHeight;\n const bottomInsetHeight = bottomInset?.offsetHeight || 0;\n const contentHeight = contentElementHeight + bottomInsetHeight;\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) ||\n modalState.settlingHeight === 100 ||\n modalState.expanded;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange;\n let hiddenRange: TranslateRange;\n\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = [shiftHalf, translateYFrom + visiblePart / 4];\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = [translateY + 25, translateY + 25];\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["React","classNames","clamp","withContext","withPlatform","withDOM","getNavId","Platform","setTransformStyle","transitionEvent","rubber","warnOnce","ConfigProviderContext","FocusTrap","Touch","TouchRootContext","ModalRootContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","ModalType","withModalManager","warn","numberInRange","number","range","rangeTranslate","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalHeight","modalState","getModalState","activeModal","type","PAGE","enteringModal","waitTransitionFinish","requestAnimationFrame","checkPageContentHeight","onTouchMove","e","exitingModal","onPageTouchMove","CARD","onCardTouchMove","onTouchEnd","onPageTouchEnd","onCardTouchEnd","onScroll","target","contentElement","contains","contentScrolled","contentScrollStopTimeout","clearTimeout","setTimeout","state","touchDown","dragging","modalOpenedLog","registerModal","id","data","Object","assign","onClose","onExit","isInsideModal","timeout","platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","closeModal","enteringState","onEnter","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeElement","focus","enabled","passive","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","includes","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","eventHandler","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","forceOpacity","history","opacity","toString","render","Provider","value","className","configProvider","hasCustomPanelHeaderAfter","onMove","onEnd","div","onClick","ref","map","Modal","modalId","_modalState","isPage","key","getRootRef","restoreFocus","Component","ModalRootTouch","initModal","initCardModal","process","env","NODE_ENV","bottomInset","contentElementHeight","firstElementChild","scrollHeight","bottomInsetHeight","contentHeight","prevTranslateY","clientHeight","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { setTransformStyle } from '../../lib/styles';\nimport { transitionEvent } from '../../lib/supportEvents';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport { ModalRootWithDOMProps, ModalsStateEntry, ModalType, TranslateRange } from './types';\nimport { ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private documentScrolling = false;\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === Platform.IOS ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const { enteringModal } = this.props;\n const enteringState = this.props.getModalState(enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.props.onEntered(enteringModal);\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n this.setMaskOpacity(enteringState, 1);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === ModalType.PAGE) {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === ModalType.PAGE;\n\n const prevIsPage = !!prevModalState && prevModalState.type === ModalType.PAGE;\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n this.maskElementRef.current.style.transitionDelay =\n opacity && this.props.delayEnter ? `${this.timeout}ms` : '';\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.hasCustomPanelHeaderAfter &&\n styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === ModalType.PAGE;\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n getRootRef={(e) => {\n const modalState = this.props.getModalState(modalId);\n if (modalState) {\n modalState.modalElement = e;\n }\n }}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case ModalType.PAGE:\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case ModalType.CARD:\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement, bottomInset } = modalState;\n const contentElementHeight = (contentElement?.firstElementChild as HTMLElement).scrollHeight;\n const bottomInsetHeight = bottomInset?.offsetHeight || 0;\n const contentHeight = contentElementHeight + bottomInsetHeight;\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) ||\n modalState.settlingHeight === 100 ||\n modalState.expanded;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange | undefined;\n let hiddenRange: TranslateRange;\n\n const hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = hasCollapsedState ? [shiftHalf, translateYFrom + visiblePart / 4] : undefined;\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = hasCollapsedState && translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = undefined;\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["React","classNames","clamp","withContext","withPlatform","withDOM","getNavId","Platform","setTransformStyle","transitionEvent","rubber","warnOnce","ConfigProviderContext","FocusTrap","Touch","TouchRootContext","ModalRootContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","ModalType","withModalManager","warn","numberInRange","number","range","rangeTranslate","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalHeight","modalState","getModalState","activeModal","type","PAGE","enteringModal","waitTransitionFinish","requestAnimationFrame","checkPageContentHeight","onTouchMove","e","exitingModal","onPageTouchMove","CARD","onCardTouchMove","onTouchEnd","onPageTouchEnd","onCardTouchEnd","onScroll","target","contentElement","contains","contentScrolled","contentScrollStopTimeout","clearTimeout","setTimeout","state","touchDown","dragging","modalOpenedLog","registerModal","id","data","Object","assign","onClose","onExit","isInsideModal","timeout","platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","closeModal","enteringState","onEnter","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeElement","focus","enabled","passive","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","includes","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","eventHandler","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","forceOpacity","history","opacity","toString","render","Provider","value","className","configProvider","hasCustomPanelHeaderAfter","onMove","onEnd","div","onClick","ref","map","Modal","modalId","_modalState","isPage","key","getRootRef","restoreFocus","Component","ModalRootTouch","initModal","initCardModal","process","env","NODE_ENV","bottomInset","contentElementHeight","firstElementChild","scrollHeight","bottomInsetHeight","contentHeight","prevTranslateY","clientHeight","hasCollapsedState","Boolean","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { HasRef } from '../../types';
3
- export interface VisuallyHiddenInputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRef<HTMLInputElement> {
2
+ import { HasRef, HasRootRef } from '../../types';
3
+ export interface VisuallyHiddenInputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRootRef<HTMLInputElement>, HasRef<HTMLInputElement> {
4
4
  }
5
5
  /**
6
6
  * @deprecated v5.4.0
@@ -8,5 +8,5 @@ export interface VisuallyHiddenInputProps extends React.InputHTMLAttributes<HTML
8
8
  * Компонент устарел и будет удален в v6. Используйте
9
9
  * `<VisuallyHidden Component="input" />`
10
10
  */
11
- export declare const VisuallyHiddenInput: ({ getRef, className, ...restProps }: VisuallyHiddenInputProps) => React.JSX.Element;
11
+ export declare const VisuallyHiddenInput: ({ getRef, className, getRootRef, ...restProps }: VisuallyHiddenInputProps) => React.JSX.Element;
12
12
  //# sourceMappingURL=VisuallyHiddenInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VisuallyHiddenInput.d.ts","sourceRoot":"","sources":["../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,MAAM,WAAW,wBACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,MAAM,CAAC,gBAAgB,CAAC;CAAG;AAC/B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,wCAI7B,wBAAwB,sBAc1B,CAAC"}
1
+ {"version":3,"file":"VisuallyHiddenInput.d.ts","sourceRoot":"","sources":["../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,WAAW,wBACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,UAAU,CAAC,gBAAgB,CAAC,EAC5B,MAAM,CAAC,gBAAgB,CAAC;CAAG;AAC/B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,oDAK7B,wBAAwB,sBAe1B,CAAC"}