@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.
- package/dist/cjs/components/Alert/Alert.d.ts +3 -3
- package/dist/cjs/components/Alert/Alert.d.ts.map +1 -1
- package/dist/cjs/components/Alert/Alert.js +5 -3
- package/dist/cjs/components/Alert/Alert.js.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.js +1 -2
- package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts +4 -2
- package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js +17 -5
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/FormLayout/FormLayout.d.ts +3 -3
- package/dist/cjs/components/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/cjs/components/FormLayout/FormLayout.js +5 -2
- package/dist/cjs/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/cjs/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/cjs/components/Gallery/Gallery.js +3 -10
- package/dist/cjs/components/Gallery/Gallery.js.map +1 -1
- package/dist/cjs/components/Gallery/hooks.d.ts +2 -0
- package/dist/cjs/components/Gallery/hooks.d.ts.map +1 -0
- package/dist/cjs/components/Gallery/hooks.js +52 -0
- package/dist/cjs/components/Gallery/hooks.js.map +1 -0
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +49 -20
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +5 -2
- package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRoot.js +6 -8
- package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
- package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
- package/dist/cjs/hooks/useDirection.d.ts +39 -0
- package/dist/cjs/hooks/useDirection.d.ts.map +1 -0
- package/dist/cjs/hooks/useDirection.js +39 -0
- package/dist/cjs/hooks/useDirection.js.map +1 -0
- package/dist/cjs/lib/floating/adapters.d.ts +1 -1
- package/dist/cjs/lib/floating/adapters.d.ts.map +1 -1
- package/dist/cjs/lib/floating/adapters.js +1 -1
- package/dist/cjs/lib/floating/adapters.js.map +1 -1
- package/dist/cjs/lib/floating/index.d.ts +1 -1
- package/dist/cjs/lib/floating/index.d.ts.map +1 -1
- package/dist/cjs/lib/floating/index.js +1 -1
- package/dist/cjs/lib/floating/index.js.map +1 -1
- package/dist/cjs/lib/floating/types.d.ts +2 -2
- package/dist/cjs/lib/floating/types.d.ts.map +1 -1
- package/dist/components/Alert/Alert.d.ts +3 -3
- package/dist/components/Alert/Alert.d.ts.map +1 -1
- package/dist/components/Alert/Alert.js +5 -3
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.js +1 -2
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.d.ts +4 -2
- package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.js +17 -5
- package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/FormLayout/FormLayout.d.ts +3 -3
- package/dist/components/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/components/FormLayout/FormLayout.js +5 -2
- package/dist/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.js +3 -10
- package/dist/components/Gallery/Gallery.js.map +1 -1
- package/dist/components/Gallery/hooks.d.ts +2 -0
- package/dist/components/Gallery/hooks.d.ts.map +1 -0
- package/dist/components/Gallery/hooks.js +41 -0
- package/dist/components/Gallery/hooks.js.map +1 -0
- package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.js +49 -20
- package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
- package/dist/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/components/ModalPageHeader/ModalPageHeader.js +5 -2
- package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js +6 -8
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
- package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
- package/dist/components.css +6 -6
- package/dist/components.css.map +1 -1
- package/dist/components.js.tmp +3941 -2540
- package/dist/cssm/components/Alert/Alert.d.ts +3 -3
- package/dist/cssm/components/Alert/Alert.d.ts.map +1 -1
- package/dist/cssm/components/Alert/Alert.js +3 -2
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/Button/Button.module.css +3 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts +4 -2
- package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js +4 -2
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
- package/dist/cssm/components/FormLayout/FormLayout.d.ts +3 -3
- package/dist/cssm/components/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/cssm/components/FormLayout/FormLayout.js +4 -2
- package/dist/cssm/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.js +2 -7
- package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
- package/dist/cssm/components/Gallery/hooks.d.ts +2 -0
- package/dist/cssm/components/Gallery/hooks.d.ts.map +1 -0
- package/dist/cssm/components/Gallery/hooks.js +39 -0
- package/dist/cssm/components/Gallery/hooks.js.map +1 -0
- package/dist/cssm/components/Group/Group.module.css +2 -2
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +48 -19
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -4
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +4 -2
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.js +6 -8
- package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +7 -1
- package/dist/cssm/components/Snackbar/Snackbar.module.css +1 -1
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js +4 -2
- package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
- package/dist/cssm/hooks/useDirection.d.ts +39 -0
- package/dist/cssm/hooks/useDirection.d.ts.map +1 -0
- package/dist/cssm/hooks/useDirection.js +55 -0
- package/dist/cssm/hooks/useDirection.js.map +1 -0
- package/dist/cssm/lib/floating/adapters.d.ts +1 -1
- package/dist/cssm/lib/floating/adapters.d.ts.map +1 -1
- package/dist/cssm/lib/floating/adapters.js +1 -1
- package/dist/cssm/lib/floating/adapters.js.map +1 -1
- package/dist/cssm/lib/floating/index.d.ts +1 -1
- package/dist/cssm/lib/floating/index.d.ts.map +1 -1
- package/dist/cssm/lib/floating/index.js +1 -1
- package/dist/cssm/lib/floating/index.js.map +1 -1
- package/dist/cssm/lib/floating/types.d.ts +2 -2
- package/dist/cssm/lib/floating/types.d.ts.map +1 -1
- package/dist/cssm/lib/floating/types.js.map +1 -1
- package/dist/hooks/useDirection.d.ts +39 -0
- package/dist/hooks/useDirection.d.ts.map +1 -0
- package/dist/hooks/useDirection.js +56 -0
- package/dist/hooks/useDirection.js.map +1 -0
- package/dist/lib/floating/adapters.d.ts +1 -1
- package/dist/lib/floating/adapters.d.ts.map +1 -1
- package/dist/lib/floating/adapters.js +1 -1
- package/dist/lib/floating/adapters.js.map +1 -1
- package/dist/lib/floating/index.d.ts +1 -1
- package/dist/lib/floating/index.d.ts.map +1 -1
- package/dist/lib/floating/index.js +1 -1
- package/dist/lib/floating/index.js.map +1 -1
- package/dist/lib/floating/types.d.ts +2 -2
- package/dist/lib/floating/types.d.ts.map +1 -1
- package/dist/lib/floating/types.js.map +1 -1
- package/dist/vkui.css +6 -6
- package/dist/vkui.css.map +1 -1
- package/dist/vkui.js.tmp +3941 -2540
- package/package.json +2 -2
- package/src/components/Alert/Alert.tsx +10 -3
- package/src/components/Button/Button.module.css +3 -1
- package/src/components/CalendarRange/CalendarRange.tsx +0 -1
- package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
- package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
- package/src/components/CustomSelect/CustomSelect.tsx +5 -1
- package/src/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
- package/src/components/FormLayout/FormLayout.tsx +8 -3
- package/src/components/Gallery/Gallery.tsx +2 -6
- package/src/components/Gallery/hooks.ts +39 -0
- package/src/components/Group/Group.module.css +2 -2
- package/src/components/HorizontalScroll/HorizontalScroll.tsx +54 -20
- package/src/components/ModalPage/ModalPage.module.css +1 -4
- package/src/components/ModalPageHeader/ModalPageHeader.tsx +8 -4
- package/src/components/ModalRoot/ModalRoot.tsx +6 -5
- package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +6 -1
- package/src/components/Snackbar/Snackbar.module.css +1 -1
- package/src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx +6 -2
- package/src/hooks/useDirection.ts +63 -0
- package/src/lib/floating/adapters.ts +1 -1
- package/src/lib/floating/index.ts +1 -1
- 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
|
|
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,
|
|
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
|
|
37
|
-
var
|
|
38
|
-
var
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
|
54
|
-
scrollElement.scrollLeft =
|
|
55
|
-
|
|
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
|
-
|
|
95
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
138
|
-
|
|
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
|
-
|
|
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":";;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,IAAI,QAAQ,kBAAkB;AACnD,SAASC,uBAAuB,QAAQ,sCAAsC;AAC9E,SAASC,gBAAgB,QAAQ,+BAA+B;AAChE,SAASC,YAAY,QAAQ,2BAA2B;AACxD,SAASC,aAAa,QAAQ,eAAe;AAE7C,SAASC,aAAa,QAAQ,iCAAiC;AAC/D,SAASC,WAAW,QAAQ,6BAA6B;AA6CzD;;CAEC,GACD,SAASC;IACP,OAAOC,eAAeA,YAAYD,GAAG,GAAGC,YAAYD,GAAG,KAAKE,KAAKF,GAAG;AACtE;AAEA;;;CAGC,GACD,IAAMG,2BAA2B,SAACC;WAAoBC,KAAKC,IAAI,CAACF,GAAGG,UAAU;;AAE7E;;;;CAIC,GACD,IAAMC,wBAAwB;AAE9B,SAASC,SAAS,KASF;QARdC,gBADgB,MAChBA,eACAC,oBAFgB,MAEhBA,mBACAC,iBAHgB,MAGhBA,gBACAC,wBAJgB,MAIhBA,uBACAC,cALgB,MAKhBA,aACAC,gBANgB,MAMhBA,eACAC,qBAPgB,MAOhBA,qDAPgB,MAQhBC,yBAAAA,sEAA0BT;IAE1B,IAAI,CAACE,iBAAiB,CAACC,mBAAmB;QACxC;IACF;IAEA;;GAEC,GACD,IAAMO,UAAUF,qBAAqBN,cAAcS,WAAW;IAE9D,IAAIC,YAAYjB,yBAAyBO;IACzC,IAAIW,UAAUV,kBAAkBS;IAEhCL;IAEA,IAAIM,WAAWH,SAAS;QACtBL;QACAQ,UAAUH;IACZ;IAEA,IAAMI,YAAYtB;IAEjB,CAAA,SAASuB;QACR,IAAI,CAACb,eAAe;YAClBI;YACA;QACF;QAEA,IAAMU,OAAOxB;QACb,IAAMyB,UAAUpB,KAAKqB,GAAG,CAAC,AAACF,CAAAA,OAAOF,SAAQ,IAAKL,yBAAyB;QAEvE,IAAMU,QAAQ9B,cAAc4B;QAE5B,IAAMG,cAAcR,YAAY,AAACC,CAAAA,UAAUD,SAAQ,IAAKO;QACxDjB,cAAcH,UAAU,GAAGF,KAAKC,IAAI,CAACsB;QAErC,IAAIzB,yBAAyBO,mBAAmBL,KAAKwB,GAAG,CAAC,GAAGR,YAAYI,YAAY,GAAG;YACrFK,sBAAsBP;YACtB;QACF;QAEAT;QACAF,eAAemB,KAAK;QACpB,IAAInB,eAAeoB,MAAM,GAAG,GAAG;YAC7BpB,cAAc,CAAC,EAAE;QACnB;IACF,CAAA;AACF;AAEA;;CAEC,GACD,OAAO,IAAMqB,mBAAmB;QAC9BC,kBAAAA,UACAC,yBAAAA,iBACAC,0BAAAA,6CACAC,YAAAA,4CAAa,oDACbC,WAAAA,0CAAY,wBACZC,sBAAAA,sDACAtB,yBAAAA,sEAA0BT,wDAC1BgC,gBAAAA,yCACAC,kBAAAA,wDAAmB,iCAChBC;QATHR;QACAC;QACAC;QACAC;QACAC;QACAC;QACAtB;QACAuB;QACAC;;IAGA,IAA0ClD,mCAAAA,MAAMoD,QAAQ,CAAC,YAAlDC,gBAAmCrD,oBAApBsD,mBAAoBtD;IAC1C,IAA4CA,oCAAAA,MAAMoD,QAAQ,CAAC,YAApDG,iBAAqCvD,qBAArBwD,oBAAqBxD;IAE5C,IAAMyD,uBAAuBzD,MAAM0D,MAAM,CAAC;IAE1C,IAAMC,cAActD,aAAa4C;IAEjC,IAAM5B,iBAAiBrB,MAAM0D,MAAM,CAAiB,EAAE;IAEtD,IAAME,aAAazD;IAEnB,IAAM0D,WAAW7D,MAAM8D,WAAW,CAChC,SAAC1C;QACC,IAAMD,gBAAgBwC,YAAYI,OAAO;QAEzC1C,eAAe0C,OAAO,CAACC,IAAI,CAAC;gBAQJ7C;mBAPtBD,SAAS;gBACPC,eAAAA;gBACAC,mBAAAA;gBACAC,gBAAgBA,eAAe0C,OAAO;gBACtCzC,uBAAuB;2BAAMkC,kBAAkB;;gBAC/CjC,aAAa;2BAAOkC,qBAAqBM,OAAO,GAAG;;gBACnDvC,eAAe;2BAAOiC,qBAAqBM,OAAO,GAAG;;gBACrDtC,oBAAoBN,CAAAA,0BAAAA,qCAAAA,mCAAAA,cAAe8C,iBAAiB,cAAhC9C,uDAAAA,iCAAkC+C,WAAW,KAAI;gBACrExC,yBAAAA;YACF;;QAEF,IAAIL,eAAe0C,OAAO,CAACtB,MAAM,KAAK,GAAG;YACvCpB,eAAe0C,OAAO,CAAC,EAAE;QAC3B;IACF,GACA;QAACrC;QAAyBiC;KAAY;IAGxC,IAAMQ,eAAenE,MAAM8D,WAAW,CAAC;QACrC,IAAM1C,oBACJwB,4BAAAA,6BAAAA,kBAAoB,SAACwB;mBAAcA,IAAIT,YAAYI,OAAO,CAAEnC,WAAW;;QACzEiC,SAASzC;IACX,GAAG;QAACwB;QAAiBiB;QAAUF;KAAY;IAE3C,IAAMU,gBAAgBrE,MAAM8D,WAAW,CAAC;QACtC,IAAM1C,oBACJyB,6BAAAA,8BAAAA,mBAAqB,SAACuB;mBAAcA,IAAIT,YAAYI,OAAO,CAAEnC,WAAW;;QAC1EiC,SAASzC;IACX,GAAG;QAACyB;QAAkBgB;QAAUF;KAAY;IAE5C,IAAMW,4BAA4BtE,MAAM8D,WAAW,CAAC;QAClD,IAAIhB,cAAcc,cAAcD,YAAYI,OAAO,IAAI,CAACN,qBAAqBM,OAAO,EAAE;YACpF,IAAM5C,gBAAgBwC,YAAYI,OAAO;YAEzCT,iBAAiBnC,cAAcH,UAAU,GAAG;YAC5CwC,kBACE5C,yBAAyBO,iBAAiBA,cAAcS,WAAW,GACjET,cAAc+C,WAAW;QAE/B;IACF,GAAG;QAACN;QAAYD;QAAab;KAAW;IAExC,IAAMyB,cAAcnE,iBAAiB,UAAUkE;IAC/CtE,MAAMwE,SAAS,CACb,SAASC;QACP,IAAI,CAACd,YAAYI,OAAO,EAAE;YACxB,OAAO7D;QACT;QAEAqE,YAAYG,GAAG,CAACf,YAAYI,OAAO;QACnC,OAAOQ,YAAYI,MAAM;IAC3B,GACA;QAACJ;QAAaZ;KAAY;IAG5B3D,MAAMwE,SAAS,CAACF,2BAA2B;QAACA;QAA2B3B;KAAS;IAEhF;;GAEC,GACD,IAAMiC,UAAU5E,MAAM8D,WAAW,CAC/B,SAACe;QACClB,YAAYI,OAAO,CAAEe,QAAQ,CAAC;YAAEC,MAAMF,EAAEG,MAAM,GAAGH,EAAEI,MAAM;YAAEC,UAAU;QAAO;QAC5EL,EAAEM,cAAc;IAClB,GACA;QAACxB;KAAY;IAGf,IAAMyB,aAAahF,iBAAiB,SAASwE;IAC7C5E,MAAMwE,SAAS,CACb,SAASa;QACP,IAAI,CAAC1B,YAAYI,OAAO,IAAI,CAACb,kBAAkB;YAC7C,OAAOhD;QACT;QAEAkF,WAAWV,GAAG,CAACf,YAAYI,OAAO;QAElC,OAAOqB,WAAWT,MAAM;IAC1B,GACA;QAACS;QAAYzB;QAAaT;KAAiB;IAG7C,qBACE,oBAAC3C,uDACK4C;QACJmC,eAAerF,mCAEb,gCACA6C,eAAe;QAEjByC,cAAcjB;QAEbxB,cAAec,CAAAA,cAAcA,eAAe4B,SAAQ,KAAMnC,+BACzD,oBAAC7C;QACCiF,MAAM1C;QACN2C,SAAS1C;QACT2C,WAAU;QACVC,WAAW3F;QAIX4F,SAAS1B;QAGZrB,cAAec,CAAAA,cAAcA,eAAe4B,SAAQ,KAAMjC,gCACzD,oBAAC/C;QACCiF,MAAM1C;QACN2C,SAAS1C;QACT2C,WAAU;QACVC,WAAW3F;QAIX4F,SAASxB;sBAGb,oBAACyB;QAAIF,SAAS;QAAkCG,KAAKpC;qBACnD,oBAACmC;QAAIF,SAAS;OAA2CjD;AAIjE,EAAE"}
|
|
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;
|
|
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:
|
|
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={
|
|
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
|
|
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":";;;;;;;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,KAAK,QAAQ,qBAAqB;AAC3C,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAAmBC,OAAO,QAAQ,gBAAgB;AAClD,SAASC,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,iBAAiB,QAAQ,mBAAmB;AACrD,SAASC,eAAe,QAAQ,0BAA0B;AAC1D,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,qBAAqB,QAAQ,0CAA0C;AAChF,SAASC,SAAS,QAAQ,yBAAyB;AACnD,SAASC,KAAK,QAAoB,iBAAiB;AACnD,OAAOC,sBAAsB,wBAAwB;AACrD,SAASC,gBAAgB,QAAmC,qBAAqB;AACjF,SAASC,iCAAiC,QAAQ,cAAc;AAChE,SAAkDC,SAAS,QAAwB,UAAU;AAC7F,SAA+BC,gBAAgB,QAAQ,oBAAoB;AAG3E,IAAMC,OAAOT,SAAS;AAEtB,SAASU,cAAcC,MAAc,EAAEC,KAAiC;IACtE,IAAI,CAACA,OAAO;QACV,OAAO;IACT;IACA,OAAOD,UAAUC,KAAK,CAAC,EAAE,IAAID,UAAUC,KAAK,CAAC,EAAE;AACjD;AAEA,SAASC,eAAeF,MAAc;IACpC,OAAOpB,MAAMoB,QAAQ,GAAG;AAC1B;AAQA,IAAA,AAAMG,wCAqkBH,AArkBH;;cAAMA;+BAAAA;aAAAA,wBAIQC,KAAmD;gCAJ3DD;;kCAKIC;QAmBR,kDAAQC,qBAAoB;QAC5B,kDAAiBC,kBAAjB,KAAA;QACA,kDAAiBC,6BAAc7B,MAAM8B,SAAS;QAC9C,kDAAQC,sBAAyCC;QACjD,kDAAiBC,oBAAjB,KAAA;QACA,kDAAiBC,YAAjB,KAAA;QAGA,kDAAQC,kBAAiDH;QAyFzDI,kDAAAA,gBAAe,SAACC;YACd,IAAI,CAACA,OAAO;gBACV,OAAO;YACT;YACA,MAAOA,MAAMC,aAAa,CAAE;gBAC1BD,QAAQA,MAAMC,aAAa;YAC7B;YACA,IAAID,MAAME,cAAc,EAAE;gBACxBF,MAAME,cAAc;YACtB;YACA,OAAO;QACT;QA0BAC,kDAAAA,qBAAoB;YAClB,IAAMC,aAAa,MAAKf,KAAK,CAACgB,aAAa,CAAC,MAAKhB,KAAK,CAACiB,WAAW;YAElE,IAAIF,cAAcA,WAAWG,IAAI,KAAK1B,UAAU2B,IAAI,EAAE;gBACpD,IAAI,MAAKnB,KAAK,CAACoB,aAAa,EAAE;oBAC5B,MAAKC,oBAAoB,CAACN,YAAY;wBACpCO,sBAAsB;mCAAM,MAAKC,sBAAsB;;oBACzD;gBACF,OAAO;oBACLD,sBAAsB;+BAAM,MAAKC,sBAAsB;;gBACzD;YACF;QACF;QA4CAC,kDAAAA,eAAc,SAACC;YACb,IAAI,MAAKzB,KAAK,CAAC0B,YAAY,EAAE;gBAC3B;YACF;YACA,IAAMX,aAAa,MAAKf,KAAK,CAACgB,aAAa,CAAC,MAAKhB,KAAK,CAACiB,WAAW;YAClE,IAAI,CAACF,YAAY;gBACf;YACF;YAEA,IAAIA,WAAWG,IAAI,KAAK1B,UAAU2B,IAAI,EAAE;gBACtC,OAAO,MAAKQ,eAAe,CAACF,GAAGV;YACjC;YAEA,IAAIA,WAAWG,IAAI,KAAK1B,UAAUoC,IAAI,EAAE;gBACtC,OAAO,MAAKC,eAAe,CAACJ,GAAGV;YACjC;QACF;QA8EAe,kDAAAA,cAAa,SAACL;YACZ,IAAMV,aAAa,MAAKf,KAAK,CAACgB,aAAa,CAAC,MAAKhB,KAAK,CAACiB,WAAW;YAElE,IAAIF,CAAAA,uBAAAA,iCAAAA,WAAYG,IAAI,MAAK1B,UAAU2B,IAAI,EAAE;gBACvC,OAAO,MAAKY,cAAc,CAACN,GAAGV;YAChC;YAEA,IAAIA,CAAAA,uBAAAA,iCAAAA,WAAYG,IAAI,MAAK1B,UAAUoC,IAAI,EAAE;gBACvC,OAAO,MAAKI,cAAc,CAACP,GAAGV;YAChC;QACF;QAgHAkB,kDAAAA,YAAW,SAACR;gBASiCV;YAR3C,IAAME,cAAc,MAAKjB,KAAK,CAACiB,WAAW;YAE1C,IAAMiB,SAAST,EAAES,MAAM;YAEvB,IAAI,CAACjB,aAAa;gBAChB;YACF;YACA,IAAMF,aAAa,MAAKf,KAAK,CAACgB,aAAa,CAACC;YAC5C,IAAIF,CAAAA,uBAAAA,iCAAAA,WAAYG,IAAI,MAAK1B,UAAU2B,IAAI,KAAIJ,uBAAAA,kCAAAA,6BAAAA,WAAYoB,cAAc,cAA1BpB,iDAAAA,2BAA4BqB,QAAQ,CAACF,UAAS;gBACvFnB,WAAWsB,eAAe,GAAG;gBAE7B,IAAItB,WAAWuB,wBAAwB,EAAE;oBACvCC,aAAaxB,WAAWuB,wBAAwB;gBAClD;gBAEAvB,WAAWuB,wBAAwB,GAAGE,WAAW;oBAC/C,IAAIzB,WAAWsB,eAAe,EAAE;wBAC9BtB,WAAWsB,eAAe,GAAG;oBAC/B;gBACF,GAAG;YACL;QACF;QA9bE,MAAKI,KAAK,GAAG;YACXC,WAAW;YACXC,UAAU;YACVC,gBAAgB,EAAE;QACpB;QAEA,MAAK1C,cAAc,iBAAG5B,MAAM8B,SAAS;QAErC,MAAKG,gBAAgB,GAAG;YACtBO,mBAAmB,MAAKA,iBAAiB;YACzC+B,eAAe;oBAAGC,YAAAA,IAAOC;oBAAPD;;oBAAgC;uBAAdE,OAAOC,MAAM,CAAC,CAAA,4BAAA,MAAKjD,KAAK,CAACgB,aAAa,CAAC8B,iBAAzB,uCAAA,4BAAgC,CAAC,GAAGC;YAAI;YAC1FG,SAAS;uBAAM,MAAKlD,KAAK,CAACmD,MAAM;;YAChCC,eAAe;QACjB;QAEA,MAAK5C,QAAQ,GAAG,CAAC;;;kBArBfT;;YAkCAsD,KAAAA;iBAAJ;gBACE,OAAO,IAAI,CAACrD,KAAK,CAACsD,QAAQ,KAAKzE,SAAS0E,GAAG,GAAG,MAAM;YACtD;;;YAEIC,KAAAA;iBAAJ;gBACE,OAAO,IAAI,CAACxD,KAAK,CAACwD,QAAQ;YAC5B;;;YAEIC,KAAAA;iBAAJ;gBACE,OAAO,IAAI,CAACzD,KAAK,CAACyD,MAAM;YAC1B;;;YAEAC,KAAAA;mBAAAA,SAAAA;gBACE,OAAOpF,MAAMqF,QAAQ,CAACC,OAAO,CAAC,IAAI,CAAC5D,KAAK,CAAC6D,QAAQ;YACnD;;;YAEAC,KAAAA;mBAAAA,SAAAA;oBACE,0CAA0C;gBAC1C;iBAAA,eAAA,IAAI,CAACL,MAAM,cAAX,mCAAA,aAAaM,gBAAgB,CAAC,UAAU,IAAI,CAACjD,iBAAiB,EAAE;YAClE;;;YAEAkD,KAAAA;mBAAAA,SAAAA;gBACE,IAAI,CAACC,uBAAuB,CAAC;gBAC7B,IAAI,CAACR,MAAM,CAACS,mBAAmB,CAAC,UAAU,IAAI,CAACpD,iBAAiB,EAAE;YACpE;;;YAEAqD,KAAAA;mBAAAA,SAAAA,mBAAmBC,SAAuD;;gBACxE,4CAA4C;gBAC5C,IAAI,IAAI,CAACpE,KAAK,CAAC0B,YAAY,IAAI,IAAI,CAAC1B,KAAK,CAAC0B,YAAY,KAAK0C,UAAU1C,YAAY,EAAE;oBACjF,IAAI,CAAC2C,UAAU,CAAC,IAAI,CAACrE,KAAK,CAAC0B,YAAY;gBACzC;gBAEA,6CAA6C;gBAC7C,IAAI,IAAI,CAAC1B,KAAK,CAACoB,aAAa,IAAI,IAAI,CAACpB,KAAK,CAACoB,aAAa,KAAKgD,UAAUhD,aAAa,EAAE;oBACpF,IAAM,AAAEA,gBAAkB,IAAI,CAACpB,KAAK,CAA5BoB;oBACR,IAAMkD,gBAAgB,IAAI,CAACtE,KAAK,CAACgB,aAAa,CAACI;oBAC/C,IAAI,CAACpB,KAAK,CAACuE,OAAO;oBAClB,IAAI,CAAClD,oBAAoB,CAACiD,eAAe;wBACvC,IAAIA,0BAAAA,oCAAAA,cAAeE,YAAY,EAAE;4BAC/BF,cAAcE,YAAY,CAACC,KAAK,CAACC,eAAe,GAAG;wBACrD;wBACA,MAAK1E,KAAK,CAAC2E,SAAS,CAACvD;oBACvB;oBAEA,IAAIkD,0BAAAA,oCAAAA,cAAeE,YAAY,EAAE;wBAC/BF,cAAcE,YAAY,CAACC,KAAK,CAACC,eAAe,GAAG,IAAI,CAAC1E,KAAK,CAAC4E,UAAU,GACpE,AAAC,GAAe,OAAb,IAAI,CAACvB,OAAO,EAAC,QAChB;wBACJ,IAAI,CAACwB,gBAAgB,CAACP,eAAeA,cAAcQ,UAAU;wBAC7D,IAAI,CAACC,cAAc,CAACT,eAAe;oBACrC;gBACF;gBAEA,oBAAoB;gBACpB,IAAI,IAAI,CAACtE,KAAK,CAACiB,WAAW,IAAI,CAACmD,UAAUnD,WAAW,EAAE;oBACpD,IAAI,CAACR,cAAc,GAAG,IAAI,CAAC+C,QAAQ,CAACwB,aAAa;gBACnD;gBACA,IAAI,CAAC,IAAI,CAAChF,KAAK,CAACiB,WAAW,IAAI,CAAC,IAAI,CAACjB,KAAK,CAAC0B,YAAY,IAAI,IAAI,CAACjB,cAAc,EAAE;oBAC9E,IAAI,CAACA,cAAc,CAACwE,KAAK;oBACzB,IAAI,CAACxE,cAAc,GAAG;gBACxB;gBAEA,IAAI,CAACwD,uBAAuB,CAAC,CAAC,IAAI,CAACjE,KAAK,CAACiB,WAAW,IAAI,CAAC,IAAI,CAACjB,KAAK,CAAC0B,YAAY;YAClF;;;YAEA,8BAA8B,GAC9BuC,KAAAA;mBAAAA,SAAAA,wBAAwBiB,OAAgB;gBACtC,IAAI,IAAI,CAACjF,iBAAiB,KAAKiF,SAAS;oBACtC;gBACF;gBACA,IAAI,CAACjF,iBAAiB,GAAGiF;gBAEzB,IAAIA,SAAS;oBACX,qEAAqE;oBACrE,4EAA4E;oBAC5E,2CAA2C;oBAC3C,IAAI,CAACzB,MAAM,CAACS,mBAAmB,CAAC,aAAa,IAAI,CAACxD,YAAY,EAAE;wBAC9D,8EAA8E;wBAC9EyE,SAAS;oBACX;gBACF,OAAO;oBACL,IAAI,CAAC1B,MAAM,CAACM,gBAAgB,CAAC,aAAa,IAAI,CAACrD,YAAY,EAAE;wBAC3DyE,SAAS;oBACX;gBACF;YACF;;;YAeA5D,KAAAA;mBAAAA,SAAAA;gBACE,IAAMR,aAAa,IAAI,CAACf,KAAK,CAACgB,aAAa,CAAC,IAAI,CAAChB,KAAK,CAACiB,WAAW;gBAElE,IAAIF,CAAAA,uBAAAA,iCAAAA,WAAYG,IAAI,MAAK1B,UAAU2B,IAAI,KAAIJ,uBAAAA,iCAAAA,WAAYqE,YAAY,GAAE;oBACnE,IAAMC,iBAAiB,mBAAKtE;oBAC5BuE,cAAcvE;oBACd,IAAMwE,oBAAoB,mBAAKxE;oBAE/B,IAAIyE,cAAc;oBAElB,IAAIH,eAAeI,UAAU,KAAKF,kBAAkBE,UAAU,EAAE;wBAC9D,IAAIJ,eAAeK,cAAc,KAAKH,kBAAkBG,cAAc,EAAE;4BACtEF,cAAc;wBAChB;oBACF,OAAO;wBACLA,cAAc;oBAChB;oBAEA,IAAIA,aAAa;wBACf,IAAI,CAACX,gBAAgB,CAAC9D,YAAYA,WAAW+D,UAAU;oBACzD;gBACF;YACF;;;YAgBAT,KAAAA;mBAAAA,SAAAA,WAAWvB,EAAU;;gBACnB,wEAAwE;gBACxE,IAAI,CAAC6C,QAAQ,CAAC;oBAAEjD,WAAW;gBAAM;gBAEjC,IAAM2C,iBAAiB,IAAI,CAACrF,KAAK,CAACgB,aAAa,CAAC8B;gBAEhD,IAAI,CAACuC,gBAAgB;oBACnBvC,MAAMpD,KAAK,AAAC,+CAAiD,OAAHoD,IAAG,mBAAiB;oBAC9E;gBACF;gBACA,IAAI,CAAC,IAAI,CAACL,KAAK,CAACG,cAAc,CAACgD,MAAM,EAAE;oBACrC,IAAI,CAACD,QAAQ,CAAC,SAACE;+BAAe;4BAC5BjD,gBAAgB,AAAC,qBAAGiD,UAAUjD,cAAc,SAA5B;gCAA8BE;6BAAG;wBACnD;;gBACF;gBACA,IAAMgD,iBAAiB,IAAI,CAAC9F,KAAK,CAACgB,aAAa,CAAC,IAAI,CAAChB,KAAK,CAACiB,WAAW;gBACtE,IAAM8E,aAAa,CAAC,CAACD,kBAAkBA,eAAe5E,IAAI,KAAK1B,UAAU2B,IAAI;gBAE7E,IAAM6E,aAAa,CAAC,CAACX,kBAAkBA,eAAenE,IAAI,KAAK1B,UAAU2B,IAAI;gBAC7E,IAAI,CAACE,oBAAoB,CAACgE,gBAAgB;2BAAM,MAAKrF,KAAK,CAACiG,QAAQ,CAACnD;;oBAIjEuC,4BAAoCS,gCAEhCA;gBALP,IAAMI,gBACJF,cACAD,cACA,AAACV,CAAAA,CAAAA,6BAAAA,eAAeP,UAAU,cAAzBO,wCAAAA,6BAA6B,CAAA,KAAOS,CAAAA,CAAAA,iCAAAA,2BAAAA,qCAAAA,eAAgBJ,cAAc,cAA9BI,4CAAAA,iCAAkC,CAAA,KACvE,CAAC,IAAI,CAAC9F,KAAK,CAACmG,MAAM,GACd,AAACL,CAAAA,CAAAA,kCAAAA,2BAAAA,qCAAAA,eAAgBJ,cAAc,cAA9BI,6CAAAA,kCAAkC,CAAA,IAAK,KACxC;gBACN,IAAI,CAACjB,gBAAgB,CAACQ,gBAAgBa;gBAEtC,IAAI,CAACJ,gBAAgB;oBACnB,gCAAgC;oBAChC,IAAI,CAACf,cAAc,CAACM,gBAAgB;oBACpC,IAAI,CAACM,QAAQ,CAAC;wBAAE/C,gBAAgB,EAAE;oBAAC;oBACnCyC,eAAeP,UAAU,GAAGxE;gBAC9B,OAAO,IAAIwF,eAAehD,EAAE,IAAI,CAAC,IAAI,CAACL,KAAK,CAACG,cAAc,CAACwD,QAAQ,CAACN,eAAehD,EAAE,GAAG;oBACtFgD,eAAehB,UAAU,GAAGxE;oBAC5B,IAAI,CAACqF,QAAQ,CAAC,SAACE;+BAAe;4BAC5BjD,gBAAgB,AAAC,qBAAGiD,UAAUjD,cAAc,SAA5B;gCAA8BkD,eAAehD,EAAE;6BAAE;wBACnE;;gBACF;YACF;;;YAoBAnB,KAAAA;mBAAAA,SAAAA,gBAAgBhB,KAAiB,EAAEI,UAA4B;oBAWxDA,0BAyBHA;gBAnCF,IAAQsF,SAA0B1F,MAA1B0F,QAAQzF,gBAAkBD,MAAlBC;gBAChB,IAAMsB,SAAStB,cAAcsB,MAAM;gBAEnC,IAAI,CAACvB,MAAM2F,GAAG,EAAE;wBACV;oBAAJ,KAAI,4BAAA,IAAI,CAACnG,WAAW,CAACoG,OAAO,cAAxB,gDAAA,0BAA0BnE,QAAQ,CAACF,SAAS;wBAC9CtB,cAAcC,cAAc;oBAC9B;oBACA;gBACF;gBAEA,IAAI,GAACE,2BAAAA,WAAWyD,YAAY,cAAvBzD,+CAAAA,yBAAyBqB,QAAQ,CAACF,UAAS;oBAC9C,OAAOtB,cAAcC,cAAc;gBACrC;gBAEAD,cAAc4F,eAAe;gBAE7B,IAAQf,aAAqD1E,WAArD0E,YAAYpD,kBAAyCtB,WAAzCsB,iBAAiBoE,YAAwB1F,WAAxB0F,WAAWC,WAAa3F,WAAb2F;gBAEhD,IAAI,CAAC,IAAI,CAACjE,KAAK,CAACC,SAAS,EAAE;wBACe3B;wBAAAA;oBAAxCA,WAAW4F,0BAA0B,GAAG5F,CAAAA,wCAAAA,6BAAAA,WAAWoB,cAAc,cAAzBpB,iDAAAA,2BAA2B6F,SAAS,cAApC7F,kDAAAA,uCAAwC;oBAChF,IAAI,CAAC4E,QAAQ,CAAC;wBAAEjD,WAAW;oBAAK;gBAClC;gBAEA,IAAIL,iBAAiB;oBACnB;gBACF;gBAEA,IAAItB,WAAW8F,iBAAiB,KAAK,MAAM;oBACzC9F,WAAW8F,iBAAiB,GAAGR,SAAS;gBAC1C;gBAEA,IACE,CAACtF,WAAW0E,UAAU,IACtBgB,aACCC,YAAY3F,WAAW8F,iBAAiB,IAAI9F,WAAW4F,0BAA0B,KAAK,OACvF5F,4BAAAA,WAAW+F,aAAa,cAAxB/F,gDAAAA,0BAA0BqB,QAAQ,CAACF,UACnC;oBACAtB,cAAcC,cAAc;oBAE5B,IAAI,AAAC,CAAC4E,cAAcY,SAAS,KAAM,CAAC,IAAI,CAAC5C,MAAM,EAAE;wBAC/C;oBACF;oBAEA,CAAC,IAAI,CAAChB,KAAK,CAACE,QAAQ,IAAI,IAAI,CAACgD,QAAQ,CAAC;wBAAEhD,UAAU;oBAAK;oBAEvD,IAAMoE,gBAAgB,AAACV,SAAS,IAAI,CAAC5C,MAAM,CAACuD,WAAW,GAAI;oBAC3D,IAAMC,gBAAgBjI,OAAO+H,eAAe,IAAI,KAAK,IAAI,CAAC/G,KAAK,CAACsD,QAAQ,KAAKzE,SAAS0E,GAAG;oBAEzFxC,WAAWmG,kBAAkB,GAAGH;wBACehG;oBAA/CA,WAAWoG,iBAAiB,GAAGrH,eAAe,AAACiB,CAAAA,CAAAA,yBAAAA,WAAW+D,UAAU,cAArB/D,oCAAAA,yBAAyB,CAAA,IAAKkG;oBAE7E,IAAI,CAACpC,gBAAgB,CAAC9D,YAAYA,WAAWoG,iBAAiB;oBAC9D,IAAI,CAACpC,cAAc,CAAChE;gBACtB;YACF;;;YAEAc,KAAAA;mBAAAA,SAAAA,gBAAgBlB,KAAiB,EAAEI,UAA4B;oBAGzDA;gBAFJ,IAAQH,gBAA0BD,MAA1BC,eAAeyF,SAAW1F,MAAX0F;gBACvB,IAAMnE,SAAStB,cAAcsB,MAAM;gBACnC,KAAInB,2BAAAA,WAAWyD,YAAY,cAAvBzD,+CAAAA,yBAAyBqB,QAAQ,CAACF,SAAS;oBAC7C,IAAI,CAAC,IAAI,CAACO,KAAK,CAACC,SAAS,EAAE;wBACzB,IAAI,CAACiD,QAAQ,CAAC;4BAAEjD,WAAW;4BAAMC,UAAU;wBAAK;oBAClD;oBAEA,IAAMoE,gBAAgB,AAACV,SAAStF,WAAWyD,YAAY,CAAC4C,YAAY,GAAI;oBACxE,IAAMH,gBAAgBjI,OAAO+H,eAAe,IAAI,KAAK,IAAI,CAAC/G,KAAK,CAACsD,QAAQ,KAAKzE,SAAS0E,GAAG;oBAEzFxC,WAAWmG,kBAAkB,GAAGH;wBACYhG;oBAA5CA,WAAWoG,iBAAiB,GAAGE,KAAKC,GAAG,CAAC,GAAG,AAACvG,CAAAA,CAAAA,yBAAAA,WAAW+D,UAAU,cAArB/D,oCAAAA,yBAAyB,CAAA,IAAKkG;oBAE1E,IAAI,CAACpC,gBAAgB,CAAC9D,YAAYA,WAAWoG,iBAAiB;oBAC9D,IAAI,CAACpC,cAAc,CAAChE;gBACtB;YACF;;;YAcAgB,KAAAA;mBAAAA,SAAAA,eAAepB,KAAiB,EAAEI,UAA4B;;gBAC5D,IAAQwG,SAAmB5G,MAAnB4G,QAAQlB,SAAW1F,MAAX0F;gBAEhBtF,WAAWsB,eAAe,GAAG;gBAC7BtB,WAAW8F,iBAAiB,GAAG;gBAE/B,IAAIW;gBAEJ,IAAI,IAAI,CAAC/E,KAAK,CAACE,QAAQ,IAAI,IAAI,CAACc,MAAM,EAAE;oBACtC,IAAMgE,mBAAmB,AAAEF,CAAAA,SAASlB,MAAK,IAAK,IAAI,CAAC5C,MAAM,CAACuD,WAAW,GAAI;wBAExDjG;oBAAjB,IAAI+D,aAAa/D,CAAAA,gCAAAA,WAAWoG,iBAAiB,cAA5BpG,2CAAAA,gCAAgC;wBAK7CA;oBAJJ,IAAM2G,mBACJ,AAAC5C,aAAanE,MAAMgH,QAAQ,GAC5B,MACA,MACC,CAAA,AAAC5G,CAAAA,CAAAA,iCAAAA,WAAWmG,kBAAkB,cAA7BnG,4CAAAA,iCAAiC,CAAA,IAAK,IAAI,CAAC,IAAI,CAAA;oBACnD+D,aAAahF,eAAegF,aAAa4C;oBAEzC,IAAI3G,WAAW6G,cAAc,KAAK,KAAK;wBACrC,IAAIjI,cAAcmF,YAAY/D,WAAW8G,aAAa,GAAG;gCAC1C9G;gCAAAA;4BAAb+D,aAAa/D,CAAAA,8BAAAA,4BAAAA,WAAW8G,aAAa,cAAxB9G,gDAAAA,yBAA0B,CAAC,EAAE,cAA7BA,wCAAAA,6BAAiC;wBAChD,OAAO,IAAIpB,cAAcmF,YAAY/D,WAAW+G,cAAc,GAAG;gCAClD/G;4BAAb+D,aAAa/D,CAAAA,6BAAAA,WAAW2E,cAAc,cAAzB3E,wCAAAA,6BAA6B;wBAC5C,OAAO,IAAIpB,cAAcmF,YAAY/D,WAAWgH,WAAW,GAAG;4BAC5DjD,aAAa;wBACf,OAAO;gCACQ/D;4BAAb+D,aAAa/D,CAAAA,8BAAAA,WAAW2E,cAAc,cAAzB3E,yCAAAA,8BAA6B;wBAC5C;oBACF,OAAO;wBACL,IAAIpB,cAAcmF,YAAY;4BAAC;4BAAG;yBAAG,GAAG;4BACtCA,aAAa;wBACf,OAAO;4BACLA,aAAa;wBACf;oBACF;oBAEA,IAAIA,eAAe,OAAO2C,oBAAoB,IAAI;wBAChD3C,aAAa;oBACf;oBAEA/D,WAAW+D,UAAU,GAAGA;oBACxB/D,WAAWoG,iBAAiB,GAAGrC;oBAC/B/D,WAAW0F,SAAS,GAAG9G,cAAcmF,YAAY/D,WAAW+G,cAAc;oBAC1E/G,WAAW2F,QAAQ,GAAG5B,eAAe;oBACrC/D,WAAWiH,MAAM,GAAGlD,eAAe;oBAEnC,IAAI/D,WAAWiH,MAAM,EAAE;wBACrB,IAAI,CAAChI,KAAK,CAACmD,MAAM;oBACnB;oBAEAqE,mBAAmB;wBACjB,IAAI,CAACzG,WAAWiH,MAAM,EAAE;4BACtB,MAAKnD,gBAAgB,CAAC9D,YAAYA,WAAW+D,UAAU;wBACzD;wBAEA,MAAKC,cAAc,CAAChE;oBACtB;gBACF;gBAEA,IAAI,CAAC4E,QAAQ,CACX;oBACEjD,WAAW;oBACXC,UAAU;gBACZ,GACA6E;YAEJ;;;YAEAxF,KAAAA;mBAAAA,SAAAA,eAAe,KAAwB,EAAEjB,UAA4B;oBAAtD,AAAE4G,WAAF,MAAEA;;gBACf,IAAIH;gBAEJ,IAAI,IAAI,CAAC/E,KAAK,CAACE,QAAQ,EAAE;wBACN5B;oBAAjB,IAAI+D,aAAa/D,CAAAA,gCAAAA,WAAWoG,iBAAiB,cAA5BpG,2CAAAA,gCAAgC;wBAGPA;oBAD1C,IAAM2G,mBACJ,AAAC5C,aAAa6C,WAAY,MAAM,MAAO,CAAA,AAAC5G,CAAAA,CAAAA,iCAAAA,WAAWmG,kBAAkB,cAA7BnG,4CAAAA,iCAAiC,CAAA,IAAK,IAAI,CAAC,IAAI,CAAA;oBACzF+D,aAAauC,KAAKC,GAAG,CAAC,GAAGxC,aAAa4C;oBAEtC,IAAI5C,cAAc,IAAI;wBACpBA,aAAa;oBACf,OAAO;wBACLA,aAAa;oBACf;oBAEA/D,WAAW+D,UAAU,GAAGA;oBACxB/D,WAAWiH,MAAM,GAAGlD,eAAe;oBAEnC,IAAI/D,WAAWiH,MAAM,EAAE;wBACrB,IAAI,CAAChI,KAAK,CAACmD,MAAM;oBACnB;oBAEAqE,mBAAmB;wBACjB,IAAI,CAACzG,WAAWiH,MAAM,EAAE;4BACtB,MAAKnD,gBAAgB,CAAC9D,YAAYA,WAAW+D,UAAU;wBACzD;wBAEA,MAAKC,cAAc,CAAChE;oBACtB;gBACF;gBAEA,IAAI,CAAC4E,QAAQ,CACX;oBACEjD,WAAW;oBACXC,UAAU;gBACZ,GACA6E;YAEJ;;;YA0BAnG,KAAAA;mBAAAA,SAAAA,qBAAqBN,UAAwC,EAAEkH,YAAwB;gBACrF,IAAIlJ,gBAAgBmJ,SAAS,EAAE;wBAM7BnH;oBALA,IAAMoH,cAAc;4BAClBpH;wBAAAA,uBAAAA,kCAAAA,2BAAAA,WAAYyD,YAAY,cAAxBzD,+CAAAA,yBAA0BmD,mBAAmB,CAACnF,gBAAgBqJ,IAAI,EAAYD;wBAC9EF;oBACF;oBAEAlH,uBAAAA,kCAAAA,2BAAAA,WAAYyD,YAAY,cAAxBzD,+CAAAA,yBAA0BgD,gBAAgB,CAAChF,gBAAgBqJ,IAAI,EAAYD;gBAC7E,OAAO;oBACL3F,WAAWyF,cAAc,IAAI,CAAC5E,OAAO;gBACvC;YACF;;;YAEA;;;;;GAKC,GACDwB,KAAAA;mBAAAA,SAAAA,iBAAiB9D,UAA4B,EAAEsH,OAA2B;gBACxE,IAAMC,UAAU,AAAC,wBAAqC,OAAdvH,WAAW+B,EAAE;gBAErDyF,qBAAqB,IAAI,CAAC/H,QAAQ,CAAC8H,QAAQ;gBAE3C,IAAI,CAAC9H,QAAQ,CAAC8H,QAAQ,GAAGhH,sBAAsB;oBAC7CxC,kBAAkBiC,WAAWyD,YAAY,EAAE,AAAC,kBAAyB,OAAR6D,SAAQ;gBACvE;YACF;;;YAEA,0DAA0D,GAC1DtD,KAAAA;mBAAAA,SAAAA,eAAehE,UAA4B;oBAAEyH,eAAAA,iEAA8B;;oBAC5C;gBAA7B,IAAIA,iBAAiB,QAAQ,EAAA,sBAAA,IAAI,CAACxI,KAAK,CAACyI,OAAO,cAAlB,0CAAA,mBAAoB,CAAC,EAAE,MAAK1H,WAAW+B,EAAE,EAAE;oBACtE;gBACF;gBACA,IAAI,IAAI,CAACzC,kBAAkB,EAAE;oBAC3BkI,qBAAqB,IAAI,CAAClI,kBAAkB;gBAC9C;gBACA,IAAI,CAACA,kBAAkB,GAAGiB,sBAAsB;oBAC9C,IAAI,MAAKpB,cAAc,CAACqG,OAAO,EAAE;wBAC/B,6BAAkDxF,WAA1C+D,YAAAA,iDAAa,4DAA6B/D,WAA1BoG,mBAAAA,+DAAoB;wBAE5C,IAAMuB,UACJF,iBAAiB,OACb,IAAI,AAACrB,CAAAA,oBAAoBrC,UAAS,IAAM,CAAA,MAAMA,UAAS,KAAM,IAC7D0D;wBACN,MAAKtI,cAAc,CAACqG,OAAO,CAAC9B,KAAK,CAACiE,OAAO,GAAGlK,MAAMkK,SAAS,GAAG,KAAKC,QAAQ;wBAC3E,MAAKzI,cAAc,CAACqG,OAAO,CAAC9B,KAAK,CAACC,eAAe,GAC/CgE,WAAW,MAAK1I,KAAK,CAAC4E,UAAU,GAAG,AAAC,GAAe,OAAb,MAAKvB,OAAO,EAAC,QAAM;oBAC7D;gBACF;YACF;;;YAEAuF,KAAAA;mBAAAA,SAAAA;;oBAcY;gBAbV,IAAqD,cAAA,IAAI,CAAC5I,KAAK,EAAvDiB,cAA6C,YAA7CA,aAAaS,eAAgC,YAAhCA,cAAcN,gBAAkB,YAAlBA;gBACnC,IAAgC,cAAA,IAAI,CAACqB,KAAK,EAAlCC,YAAwB,YAAxBA,WAAWC,WAAa,YAAbA;gBAEnB,IAAI,CAAC1B,eAAe,CAACS,cAAc;oBACjC,OAAO;gBACT;gBAEA,qBACE,oBAACrC,iBAAiBwJ,QAAQ;oBAACC,OAAO;iCAChC,oBAACxJ,iBAAiBuJ,QAAQ;oBAACC,OAAO,IAAI,CAACvI,gBAAgB;iCACrD,oBAACnB;oBACC2J,WAAWxK,4BAET,EAAA,6BAAA,IAAI,CAACyB,KAAK,CAACgJ,cAAc,cAAzB,iDAAA,2BAA2BC,yBAAyB,qDAEpDvG,aACEnE,qCAAyC,mCAC3C,CAAC,CAAE6C,CAAAA,iBAAiBM,YAAW,KAC7BnD,uCAA2C;oBAE/C2K,QAAQ,IAAI,CAAC1H,WAAW;oBACxB2H,OAAO,IAAI,CAACrH,UAAU;oBACtBG,UAAU,IAAI,CAACA,QAAQ;iCAEvB,oBAACmH;oBACCL,SAAS;oBACTM,SAAS,IAAI,CAACrJ,KAAK,CAACmD,MAAM;oBAC1BmG,KAAK,IAAI,CAACpJ,cAAc;kCAE1B,oBAACkJ;oBAAIL,SAAS;oBAAiCO,KAAK,IAAI,CAACnJ,WAAW;mBACjE,IAAI,CAACuD,SAAS,GAAG6F,GAAG,CAAC,SAACC;oBACrB,IAAMC,UAAU7K,SAAS4K,MAAMxJ,KAAK,EAAEN;oBACtC,IAAMgK,cAAc,MAAK1J,KAAK,CAACgB,aAAa,CAACyI;oBAC7C,IAAI,AAACA,YAAYxI,eAAewI,YAAY/H,gBAAiB,CAACgI,aAAa;wBACzE,OAAO;oBACT;oBACA,IAAM3I,aAAa,mBAAK2I;oBAExB,IAAMC,SAAS5I,WAAWG,IAAI,KAAK1B,UAAU2B,IAAI;oBACjD,IAAMyI,MAAM,AAAC,SAAgB,OAARH;oBAErB,qBACE,oBAACtK;wBACCyK,KAAKA;wBACLC,YAAY,SAACpI;4BACX,IAAMV,aAAa,MAAKf,KAAK,CAACgB,aAAa,CAACyI;4BAC5C,IAAI1I,YAAY;gCACdA,WAAWqE,YAAY,GAAG3D;4BAC5B;wBACF;wBACAyB,SAAS,MAAKlD,KAAK,CAACmD,MAAM;wBAC1BE,SAAS,MAAKA,OAAO;wBACrB0F,WAAWxK,mCAGToE,YAAY,0CAEZgH,UAAU5I,WAAW0E,UAAU,IAAI,4CACnCkE,UAAU5I,WAAW0F,SAAS,IAAI;wBAEpCqD,cAAc;uBAEbN;gBAGP;YAMZ;;;WAlkBIzJ;EAAgCzB,MAAMyL,SAAS;AAqkBrD,OAAO,IAAMC,iBAAiBvL,YAC5BC,aACEC,QAA+Bc,iBAAiBwK,WAAWlK,4BAE7Db,uBACA,kBACA;AAEF;;CAEC,GACD,SAAS+K,UAAUlJ,UAA4B;IAC7C,OAAQA,WAAWG,IAAI;QACrB,KAAK1B,UAAU2B,IAAI;YACjBJ,WAAW6G,cAAc,GAAG7G,WAAW6G,cAAc,IAAIrI;YACzD,OAAO+F,cAAcvE;QACvB,KAAKvB,UAAUoC,IAAI;YACjB,OAAOsI,cAAcnJ;QACvB;YACEoJ,QAAQC,GAAG,CAACC,QAAQ,KAAK,iBACvB3K,KAAK,AAAC,qCAAoD,OAAhBqB,WAAWG,IAAI,EAAC,wBAAsB;IACtF;AACF;AAEA,SAASoE,cAAcvE,UAA4B;IACjD,IAAQoB,iBAAgCpB,WAAhCoB,gBAAgBmI,cAAgBvJ,WAAhBuJ;IACxB,IAAMC,uBAAuB,CAACpI,2BAAAA,qCAAAA,eAAgBqI,iBAAiB,AAAe,EAAEC,YAAY;IAC5F,IAAMC,oBAAoBJ,CAAAA,wBAAAA,kCAAAA,YAAalD,YAAY,KAAI;IACvD,IAAMuD,gBAAgBJ,uBAAuBG;IAC7C,IAAIE,iBAAiB7J,WAAW+D,UAAU;QAGvB3C;IADnBpB,WAAW0E,UAAU,GACnBkF,gBAAiBxI,CAAAA,CAAAA,+BAAAA,2BAAAA,qCAAAA,eAAgB0I,YAAY,cAA5B1I,0CAAAA,+BAAgC,CAAA,KACjDpB,WAAW6G,cAAc,KAAK,OAC9B7G,WAAW2F,QAAQ;IAErB,IAAID,YAAY;IAChB,IAAIC,WAAW;IACf,IAAIhB;IACJ,IAAIZ;IACJ,IAAI+C;IACJ,IAAIC;IACJ,IAAIC;IAEJ,IAAM+C,oBAAoBC,QAAQhK,WAAW0E,UAAU,IAAI1E,WAAW6G,cAAc,KAAK;IACzF,IAAI7G,WAAW0E,UAAU,EAAE;YACD1E;QAAxB2E,iBAAiB,MAAO3E,CAAAA,CAAAA,6BAAAA,WAAW6G,cAAc,cAAzB7G,wCAAAA,6BAA6B,CAAA;QAErD,IAAMiK,YAAYtF,iBAAiB;QACnC,IAAMuF,cAAc,MAAMvF;QAE1BmC,gBAAgB;YAAC;YAAGmD;SAAU;QAC9BlD,iBAAiBgD,oBAAoB;YAACE;YAAWtF,iBAAiBuF,cAAc;SAAE,GAAG3K;QACrFyH,cAAc;YAACrC,iBAAiBuF,cAAc;YAAG;SAAI;QAErDxE,YAAYqE,qBAAqBpF,iBAAiB;QAClDgB,WAAWhB,kBAAkB;QAC7BZ,aAAaY;IACf,OAAO;YACgB3E,2BAIFA,wCAAAA;YAJEA;QAArB,IAAMmK,eAAenK,CAAAA,0CAAAA,4BAAAA,WAAW+F,aAAa,cAAxB/F,gDAAAA,0BAA0BqG,YAAY,cAAtCrG,oDAAAA,yCAA0C;QAC/D,IAAMoK,SAASR,gBAAgBO;YAGZnK;QADnB2E,iBACE,MAAM,AAACyF,SAAUpK,CAAAA,CAAAA,uDAAAA,2BAAAA,WAAWyD,YAAY,cAAvBzD,gDAAAA,yCAAAA,yBAAyBqK,aAAa,cAAtCrK,6DAAAA,uCAAwCqG,YAAY,cAApDrG,iEAAAA,sDAAwD,CAAA,IAAM;QACjF+D,aAAaY;QAEbmC,gBAAgB;YAAC/C;YAAYA,aAAa;SAAG;QAC7CgD,iBAAiBxH;QACjByH,cAAc;YAACjD,aAAa;YAAIA,aAAa;SAAI;IACnD;IAEA,8GAA8G;IAC9G,IACE,AAAC/D,WAAW0E,UAAU,IAAIX,aAAc8F,CAAAA,2BAAAA,4BAAAA,iBAAkB,GAAE,KAC5D7J,WAAW6G,cAAc,KAAK,KAC9B;QACA9C,aAAa;IACf;IAEA,gDAAgD;IAChD,IAAIA,eAAe,GAAG;QACpB4B,WAAW;QACXD,YAAY;IACd;IAEA1F,WAAW8G,aAAa,GAAGA;IAC3B9G,WAAW+G,cAAc,GAAGA;IAC5B/G,WAAWgH,WAAW,GAAGA;IACzBhH,WAAW+D,UAAU,GAAGA;IACxB/D,WAAW2E,cAAc,GAAGA;IAC5B3E,WAAW0F,SAAS,GAAGA;IACvB1F,WAAW2F,QAAQ,GAAGA;AACxB;AAEA,SAASwD,cAAcnJ,UAA4B;IACjDA,WAAW+D,UAAU,GAAG;AAC1B"}
|
|
@@ -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;
|
|
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"}
|