@hanzogui/sheet 7.3.0 → 8.0.0
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/.turbo/turbo-build.log +2 -0
- package/controller/index.cjs +2 -0
- package/controller/index.d.ts +5 -0
- package/controller/index.js +2 -0
- package/controller/index.native.cjs +2 -0
- package/controller/index.native.js +2 -0
- package/dist/cjs/GestureDetectorWrapper.native.js.map +1 -1
- package/dist/cjs/SheetImplementationCustom.cjs +137 -74
- package/dist/cjs/SheetImplementationCustom.native.js +162 -83
- package/dist/cjs/SheetImplementationCustom.native.js.map +1 -1
- package/dist/cjs/SheetScrollView.cjs +155 -34
- package/dist/cjs/SheetScrollView.native.js +160 -35
- package/dist/cjs/SheetScrollView.native.js.map +1 -1
- package/dist/cjs/createSheet.cjs +7 -3
- package/dist/cjs/createSheet.native.js +7 -3
- package/dist/cjs/createSheet.native.js.map +1 -1
- package/dist/cjs/gestureState.cjs +13 -2
- package/dist/cjs/gestureState.native.js +14 -2
- package/dist/cjs/gestureState.native.js.map +1 -1
- package/dist/cjs/index.cjs +12 -1
- package/dist/cjs/index.native.js +11 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/keyboardAvoidance.cjs +93 -0
- package/dist/cjs/keyboardAvoidance.native.js +99 -0
- package/dist/cjs/keyboardAvoidance.native.js.map +1 -0
- package/dist/cjs/nativeSheet.cjs +3 -0
- package/dist/cjs/nativeSheet.native.js +3 -0
- package/dist/cjs/nativeSheet.native.js.map +1 -1
- package/dist/cjs/setupGestureHandler.cjs +9 -6
- package/dist/cjs/setupGestureHandler.native.js +11 -6
- package/dist/cjs/setupGestureHandler.native.js.map +1 -1
- package/dist/cjs/useGestureHandlerPan.cjs +86 -18
- package/dist/cjs/useGestureHandlerPan.native.js +91 -18
- package/dist/cjs/useGestureHandlerPan.native.js.map +1 -1
- package/dist/cjs/useKeyboardControllerSheet.cjs +68 -6
- package/dist/cjs/useSafeAreaInsets.cjs +44 -0
- package/dist/cjs/useSafeAreaInsets.native.js +48 -0
- package/dist/cjs/useSafeAreaInsets.native.js.map +1 -0
- package/dist/cjs/useSheetProviderProps.cjs +1 -1
- package/dist/cjs/useSheetProviderProps.native.js +1 -1
- package/dist/cjs/useSheetProviderProps.native.js.map +1 -1
- package/dist/cjs/useSheetScrollViewGestures.cjs +30 -5
- package/dist/cjs/useSheetScrollViewGestures.native.js +4 -0
- package/dist/cjs/useSheetScrollViewGestures.native.js.map +1 -1
- package/dist/cjs/webViewport.cjs +75 -0
- package/dist/cjs/webViewport.native.js +81 -0
- package/dist/cjs/webViewport.native.js.map +1 -0
- package/dist/esm/GestureDetectorWrapper.mjs.map +1 -1
- package/dist/esm/GestureDetectorWrapper.native.js.map +1 -1
- package/dist/esm/SheetImplementationCustom.mjs +143 -84
- package/dist/esm/SheetImplementationCustom.mjs.map +1 -1
- package/dist/esm/SheetImplementationCustom.native.js +173 -102
- package/dist/esm/SheetImplementationCustom.native.js.map +1 -1
- package/dist/esm/SheetScrollView.mjs +157 -36
- package/dist/esm/SheetScrollView.mjs.map +1 -1
- package/dist/esm/SheetScrollView.native.js +162 -37
- package/dist/esm/SheetScrollView.native.js.map +1 -1
- package/dist/esm/createSheet.mjs +9 -6
- package/dist/esm/createSheet.mjs.map +1 -1
- package/dist/esm/createSheet.native.js +19 -15
- package/dist/esm/createSheet.native.js.map +1 -1
- package/dist/esm/gestureState.mjs +13 -2
- package/dist/esm/gestureState.mjs.map +1 -1
- package/dist/esm/gestureState.native.js +14 -2
- package/dist/esm/gestureState.native.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +2 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -0
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/keyboardAvoidance.mjs +66 -0
- package/dist/esm/keyboardAvoidance.mjs.map +1 -0
- package/dist/esm/keyboardAvoidance.native.js +69 -0
- package/dist/esm/keyboardAvoidance.native.js.map +1 -0
- package/dist/esm/nativeSheet.mjs +3 -0
- package/dist/esm/nativeSheet.mjs.map +1 -1
- package/dist/esm/nativeSheet.native.js +3 -0
- package/dist/esm/nativeSheet.native.js.map +1 -1
- package/dist/esm/setupGestureHandler.mjs +9 -6
- package/dist/esm/setupGestureHandler.mjs.map +1 -1
- package/dist/esm/setupGestureHandler.native.js +11 -6
- package/dist/esm/setupGestureHandler.native.js.map +1 -1
- package/dist/esm/useGestureHandlerPan.mjs +87 -19
- package/dist/esm/useGestureHandlerPan.mjs.map +1 -1
- package/dist/esm/useGestureHandlerPan.native.js +92 -19
- package/dist/esm/useGestureHandlerPan.native.js.map +1 -1
- package/dist/esm/useKeyboardControllerSheet.mjs +69 -7
- package/dist/esm/useKeyboardControllerSheet.mjs.map +1 -1
- package/dist/esm/useSafeAreaInsets.mjs +7 -0
- package/dist/esm/useSafeAreaInsets.mjs.map +1 -0
- package/dist/esm/useSafeAreaInsets.native.js +8 -0
- package/dist/esm/useSafeAreaInsets.native.js.map +1 -0
- package/dist/esm/useSheetProviderProps.mjs +1 -1
- package/dist/esm/useSheetProviderProps.mjs.map +1 -1
- package/dist/esm/useSheetProviderProps.native.js +1 -1
- package/dist/esm/useSheetProviderProps.native.js.map +1 -1
- package/dist/esm/useSheetScrollViewGestures.mjs +30 -5
- package/dist/esm/useSheetScrollViewGestures.mjs.map +1 -1
- package/dist/esm/useSheetScrollViewGestures.native.js +4 -0
- package/dist/esm/useSheetScrollViewGestures.native.js.map +1 -1
- package/dist/esm/webViewport.mjs +43 -0
- package/dist/esm/webViewport.mjs.map +1 -0
- package/dist/esm/webViewport.native.js +46 -0
- package/dist/esm/webViewport.native.js.map +1 -0
- package/dist/jsx/GestureDetectorWrapper.mjs.map +1 -1
- package/dist/jsx/GestureDetectorWrapper.native.js.map +1 -1
- package/dist/jsx/SheetImplementationCustom.mjs +143 -84
- package/dist/jsx/SheetImplementationCustom.mjs.map +1 -1
- package/dist/jsx/SheetImplementationCustom.native.js +162 -83
- package/dist/jsx/SheetImplementationCustom.native.js.map +1 -1
- package/dist/jsx/SheetScrollView.mjs +157 -36
- package/dist/jsx/SheetScrollView.mjs.map +1 -1
- package/dist/jsx/SheetScrollView.native.js +160 -35
- package/dist/jsx/SheetScrollView.native.js.map +1 -1
- package/dist/jsx/createSheet.mjs +9 -6
- package/dist/jsx/createSheet.mjs.map +1 -1
- package/dist/jsx/createSheet.native.js +7 -3
- package/dist/jsx/createSheet.native.js.map +1 -1
- package/dist/jsx/gestureState.mjs +13 -2
- package/dist/jsx/gestureState.mjs.map +1 -1
- package/dist/jsx/gestureState.native.js +14 -2
- package/dist/jsx/gestureState.native.js.map +1 -1
- package/dist/jsx/index.js +2 -0
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -0
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +11 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/keyboardAvoidance.mjs +66 -0
- package/dist/jsx/keyboardAvoidance.mjs.map +1 -0
- package/dist/jsx/keyboardAvoidance.native.js +99 -0
- package/dist/jsx/keyboardAvoidance.native.js.map +1 -0
- package/dist/jsx/nativeSheet.mjs +3 -0
- package/dist/jsx/nativeSheet.mjs.map +1 -1
- package/dist/jsx/nativeSheet.native.js +3 -0
- package/dist/jsx/nativeSheet.native.js.map +1 -1
- package/dist/jsx/setupGestureHandler.mjs +9 -6
- package/dist/jsx/setupGestureHandler.mjs.map +1 -1
- package/dist/jsx/setupGestureHandler.native.js +11 -6
- package/dist/jsx/setupGestureHandler.native.js.map +1 -1
- package/dist/jsx/useGestureHandlerPan.mjs +87 -19
- package/dist/jsx/useGestureHandlerPan.mjs.map +1 -1
- package/dist/jsx/useGestureHandlerPan.native.js +91 -18
- package/dist/jsx/useGestureHandlerPan.native.js.map +1 -1
- package/dist/jsx/useKeyboardControllerSheet.mjs +69 -7
- package/dist/jsx/useKeyboardControllerSheet.mjs.map +1 -1
- package/dist/jsx/useSafeAreaInsets.mjs +7 -0
- package/dist/jsx/useSafeAreaInsets.mjs.map +1 -0
- package/dist/jsx/useSafeAreaInsets.native.js +48 -0
- package/dist/jsx/useSafeAreaInsets.native.js.map +1 -0
- package/dist/jsx/useSheetProviderProps.mjs +1 -1
- package/dist/jsx/useSheetProviderProps.mjs.map +1 -1
- package/dist/jsx/useSheetProviderProps.native.js +1 -1
- package/dist/jsx/useSheetProviderProps.native.js.map +1 -1
- package/dist/jsx/useSheetScrollViewGestures.mjs +30 -5
- package/dist/jsx/useSheetScrollViewGestures.mjs.map +1 -1
- package/dist/jsx/useSheetScrollViewGestures.native.js +4 -0
- package/dist/jsx/useSheetScrollViewGestures.native.js.map +1 -1
- package/dist/jsx/webViewport.mjs +43 -0
- package/dist/jsx/webViewport.mjs.map +1 -0
- package/dist/jsx/webViewport.native.js +81 -0
- package/dist/jsx/webViewport.native.js.map +1 -0
- package/next.md +78 -0
- package/package.json +30 -48
- package/setup-gesture-handler/index.cjs +2 -0
- package/setup-gesture-handler/index.js +2 -0
- package/setup-gesture-handler/index.native.cjs +2 -0
- package/setup-gesture-handler/index.native.js +2 -0
- package/src/GestureDetectorWrapper.tsx +0 -3
- package/src/SheetImplementationCustom.tsx +387 -127
- package/src/SheetScrollView.tsx +195 -22
- package/src/createSheet.tsx +20 -7
- package/src/gestureState.ts +22 -2
- package/src/index.ts +4 -0
- package/src/keyboardAvoidance.ts +121 -0
- package/src/nativeSheet.tsx +8 -1
- package/src/setupGestureHandler.ts +14 -5
- package/src/types.tsx +20 -1
- package/src/useGestureHandlerPan.tsx +94 -35
- package/src/useKeyboardControllerSheet.ts +127 -10
- package/src/useSafeAreaInsets.native.ts +29 -0
- package/src/useSafeAreaInsets.ts +19 -0
- package/src/useSheetProviderProps.tsx +12 -1
- package/src/useSheetScrollViewGestures.native.ts +4 -0
- package/src/useSheetScrollViewGestures.ts +52 -5
- package/src/webViewport.ts +100 -0
- package/test/keyboardAvoidance.test.ts +269 -0
- package/tsconfig.json +57 -0
- package/types/GestureDetectorWrapper.d.ts +1 -1
- package/types/GestureDetectorWrapper.d.ts.map +1 -1
- package/types/GestureSheetContext.d.ts +1 -1
- package/types/GestureSheetContext.d.ts.map +1 -1
- package/types/Sheet.d.ts +6 -5
- package/types/Sheet.d.ts.map +1 -1
- package/types/SheetContext.d.ts +5 -2
- package/types/SheetContext.d.ts.map +1 -1
- package/types/SheetController.d.ts +1 -2
- package/types/SheetController.d.ts.map +1 -1
- package/types/SheetImplementationCustom.d.ts +1 -0
- package/types/SheetImplementationCustom.d.ts.map +1 -1
- package/types/SheetScrollView.d.ts.map +1 -1
- package/types/createSheet.d.ts +13 -12
- package/types/createSheet.d.ts.map +1 -1
- package/types/gestureState.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/keyboardAvoidance.d.ts +26 -0
- package/types/keyboardAvoidance.d.ts.map +1 -0
- package/types/nativeSheet.d.ts.map +1 -1
- package/types/setupGestureHandler.d.ts.map +1 -1
- package/types/types.d.ts +10 -1
- package/types/types.d.ts.map +1 -1
- package/types/useGestureHandlerPan.d.ts +4 -1
- package/types/useGestureHandlerPan.d.ts.map +1 -1
- package/types/useKeyboardControllerSheet.d.ts +14 -3
- package/types/useKeyboardControllerSheet.d.ts.map +1 -1
- package/types/useSafeAreaInsets.d.ts +10 -0
- package/types/useSafeAreaInsets.d.ts.map +1 -0
- package/types/useSafeAreaInsets.native.d.ts +20 -0
- package/types/useSafeAreaInsets.native.d.ts.map +1 -0
- package/types/useSheetProviderProps.d.ts +3 -0
- package/types/useSheetProviderProps.d.ts.map +1 -1
- package/types/useSheetScrollViewGestures.d.ts +2 -1
- package/types/useSheetScrollViewGestures.d.ts.map +1 -1
- package/types/useSheetScrollViewGestures.native.d.ts.map +1 -1
- package/types/webViewport.d.ts +36 -0
- package/types/webViewport.d.ts.map +1 -0
- package/LICENSE +0 -42
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { composeRefs } from "@hanzogui/compose-refs";
|
|
2
|
-
import { View } from "@hanzogui/core";
|
|
2
|
+
import { isWeb, View } from "@hanzogui/core";
|
|
3
3
|
import { ScrollView } from "@hanzogui/scroll-view";
|
|
4
4
|
import { useControllableState } from "@hanzogui/use-controllable-state";
|
|
5
5
|
import React, { useEffect, useRef, useState } from "react";
|
|
@@ -7,7 +7,8 @@ import { useGestureSheetContext } from "./GestureSheetContext.mjs";
|
|
|
7
7
|
import { getGestureHandlerState, isGestureHandlerEnabled } from "./gestureState.mjs";
|
|
8
8
|
import { useSheetContext } from "./SheetContext.mjs";
|
|
9
9
|
import { useSheetScrollViewGestures } from "./useSheetScrollViewGestures.mjs";
|
|
10
|
-
import {
|
|
10
|
+
import { getStableLayoutViewportHeight, getWebKeyboardBottomInset, getWebKeyboardResizeHeight, isEditableElement, MIN_KEYBOARD_HEIGHT } from "./webViewport.mjs";
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
12
|
const SHEET_SCROLL_VIEW_NAME = "SheetScrollView";
|
|
12
13
|
const SheetScrollView = React.forwardRef(({
|
|
13
14
|
__scopeSheet,
|
|
@@ -20,31 +21,66 @@ const SheetScrollView = React.forwardRef(({
|
|
|
20
21
|
const gestureContext = useGestureSheetContext();
|
|
21
22
|
const {
|
|
22
23
|
scrollBridge,
|
|
23
|
-
setHasScrollView
|
|
24
|
+
setHasScrollView,
|
|
25
|
+
hasFit,
|
|
26
|
+
screenSize
|
|
24
27
|
} = context;
|
|
28
|
+
const keyboardOccludedHeight = Math.max(0, context.keyboardOccludedHeight || 0);
|
|
29
|
+
const isKeyboardVisible = context.isKeyboardVisible === true || isWeb && getWebKeyboardResizeHeight() >= MIN_KEYBOARD_HEIGHT;
|
|
25
30
|
const [scrollEnabled] = useControllableState({
|
|
26
31
|
prop: scrollEnabledProp,
|
|
27
32
|
defaultProp: true
|
|
28
33
|
});
|
|
29
34
|
const scrollRef = React.useRef(null);
|
|
35
|
+
const [hasScrollableContent, setHasScrollableContent] = useState(true);
|
|
36
|
+
const parentHeight = useRef(0);
|
|
37
|
+
const contentHeight = useRef(0);
|
|
38
|
+
const frozenFrameHeight = Math.max(0, context.keyboardStableFrameHeight || 0);
|
|
39
|
+
const fitSizingStyle = hasFit ? {
|
|
40
|
+
flex: void 0,
|
|
41
|
+
height: void 0,
|
|
42
|
+
maxHeight: screenSize || void 0
|
|
43
|
+
} : {
|
|
44
|
+
flex: 1
|
|
45
|
+
};
|
|
46
|
+
const contentContainerStyle = hasFit ? void 0 : {
|
|
47
|
+
minHeight: "100%"
|
|
48
|
+
};
|
|
49
|
+
const keyboardFrozenOverride = hasFit && isKeyboardVisible && frozenFrameHeight > 0 ? {
|
|
50
|
+
height: frozenFrameHeight,
|
|
51
|
+
maxHeight: frozenFrameHeight
|
|
52
|
+
} : null;
|
|
30
53
|
const panGestureRef = gestureContext?.panGestureRef;
|
|
31
54
|
const {
|
|
32
55
|
ScrollView: RNGHScrollView
|
|
33
56
|
} = getGestureHandlerState();
|
|
34
57
|
const useRNGHScrollView = isGestureHandlerEnabled() && RNGHScrollView && panGestureRef;
|
|
35
58
|
const currentScrollOffset = useRef(0);
|
|
59
|
+
const lastEmittedScrollOffset = useRef(0);
|
|
36
60
|
const lockedScrollY = useRef(0);
|
|
61
|
+
const focusedInputScrollFrame = useRef(0);
|
|
37
62
|
const setScrollEnabled = (next, lockTo) => {
|
|
38
63
|
if (!next) {
|
|
39
|
-
const lockY = lockTo ?? currentScrollOffset.current;
|
|
64
|
+
const lockY = lockTo ?? scrollBridge.scrollLockY ?? currentScrollOffset.current;
|
|
65
|
+
if (scrollBridge.enabled === false && scrollBridge.scrollLockY === lockY) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
scrollBridge.enabled = false;
|
|
40
69
|
lockedScrollY.current = lockY;
|
|
41
70
|
scrollBridge.scrollLockY = lockY;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
71
|
+
if (currentScrollOffset.current !== lockY) {
|
|
72
|
+
scrollRef.current?.scrollTo?.({
|
|
73
|
+
x: 0,
|
|
74
|
+
y: lockY,
|
|
75
|
+
animated: false
|
|
76
|
+
});
|
|
77
|
+
currentScrollOffset.current = lockY;
|
|
78
|
+
}
|
|
47
79
|
} else {
|
|
80
|
+
if (scrollBridge.enabled === true && scrollBridge.scrollLockY === void 0) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
scrollBridge.enabled = true;
|
|
48
84
|
lockedScrollY.current = currentScrollOffset.current;
|
|
49
85
|
scrollBridge.scrollLockY = void 0;
|
|
50
86
|
}
|
|
@@ -55,7 +91,81 @@ const SheetScrollView = React.forwardRef(({
|
|
|
55
91
|
y,
|
|
56
92
|
animated: false
|
|
57
93
|
});
|
|
94
|
+
currentScrollOffset.current = y;
|
|
58
95
|
};
|
|
96
|
+
const emitManualScroll = React.useCallback((node, y) => {
|
|
97
|
+
currentScrollOffset.current = y;
|
|
98
|
+
scrollBridge.y = y;
|
|
99
|
+
if (y > 0) scrollBridge.scrollStartY = -1;
|
|
100
|
+
lastEmittedScrollOffset.current = y;
|
|
101
|
+
onScroll?.({
|
|
102
|
+
nativeEvent: {
|
|
103
|
+
contentOffset: {
|
|
104
|
+
x: node.scrollLeft,
|
|
105
|
+
y
|
|
106
|
+
},
|
|
107
|
+
contentSize: {
|
|
108
|
+
height: node.scrollHeight,
|
|
109
|
+
width: node.scrollWidth
|
|
110
|
+
},
|
|
111
|
+
layoutMeasurement: {
|
|
112
|
+
height: node.offsetHeight,
|
|
113
|
+
width: node.offsetWidth
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
timeStamp: Date.now()
|
|
117
|
+
});
|
|
118
|
+
}, [onScroll, scrollBridge]);
|
|
119
|
+
const scrollFocusedInputClearOfKeyboard = React.useCallback(() => {
|
|
120
|
+
if (!isWeb || !hasFit || !isKeyboardVisible || keyboardOccludedHeight <= 0) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const node = scrollRef.current?.getScrollableNode();
|
|
124
|
+
const active = document.activeElement;
|
|
125
|
+
if (!node || !active || !isEditableElement(active) || !node.contains(active)) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const keyboardHeight = Math.max(keyboardOccludedHeight, getWebKeyboardBottomInset());
|
|
129
|
+
if (keyboardHeight <= 0) return;
|
|
130
|
+
const activeRect = active.getBoundingClientRect();
|
|
131
|
+
const nodeRect = node.getBoundingClientRect();
|
|
132
|
+
const margin = 12;
|
|
133
|
+
const keyboardTop = getStableLayoutViewportHeight() - keyboardHeight;
|
|
134
|
+
const visibleTop = nodeRect.top + margin;
|
|
135
|
+
const visibleBottom = Math.min(nodeRect.bottom, keyboardTop) - margin;
|
|
136
|
+
let nextScrollTop = node.scrollTop;
|
|
137
|
+
if (activeRect.bottom > visibleBottom) {
|
|
138
|
+
nextScrollTop += Math.ceil(activeRect.bottom - visibleBottom);
|
|
139
|
+
} else if (activeRect.top < visibleTop) {
|
|
140
|
+
nextScrollTop -= Math.ceil(visibleTop - activeRect.top);
|
|
141
|
+
}
|
|
142
|
+
const maxScrollTop = Math.max(0, node.scrollHeight - node.clientHeight);
|
|
143
|
+
nextScrollTop = Math.max(0, Math.min(maxScrollTop, nextScrollTop));
|
|
144
|
+
if (nextScrollTop === node.scrollTop) return;
|
|
145
|
+
node.scrollTop = nextScrollTop;
|
|
146
|
+
currentScrollOffset.current = nextScrollTop;
|
|
147
|
+
scrollBridge.y = nextScrollTop;
|
|
148
|
+
if (nextScrollTop > 0) scrollBridge.scrollStartY = -1;
|
|
149
|
+
}, [hasFit, isKeyboardVisible, keyboardOccludedHeight, scrollBridge]);
|
|
150
|
+
const scheduleFocusedInputScroll = React.useCallback(() => {
|
|
151
|
+
if (!isWeb || !hasFit) return;
|
|
152
|
+
cancelAnimationFrame(focusedInputScrollFrame.current);
|
|
153
|
+
focusedInputScrollFrame.current = requestAnimationFrame(() => {
|
|
154
|
+
scrollFocusedInputClearOfKeyboard();
|
|
155
|
+
focusedInputScrollFrame.current = requestAnimationFrame(scrollFocusedInputClearOfKeyboard);
|
|
156
|
+
});
|
|
157
|
+
}, [hasFit, scrollFocusedInputClearOfKeyboard]);
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
if (!isWeb || !hasFit) return;
|
|
160
|
+
scheduleFocusedInputScroll();
|
|
161
|
+
window.addEventListener("focusin", scheduleFocusedInputScroll);
|
|
162
|
+
window.visualViewport?.addEventListener("resize", scheduleFocusedInputScroll);
|
|
163
|
+
return () => {
|
|
164
|
+
cancelAnimationFrame(focusedInputScrollFrame.current);
|
|
165
|
+
window.removeEventListener("focusin", scheduleFocusedInputScroll);
|
|
166
|
+
window.visualViewport?.removeEventListener("resize", scheduleFocusedInputScroll);
|
|
167
|
+
};
|
|
168
|
+
}, [hasFit, scheduleFocusedInputScroll]);
|
|
59
169
|
useEffect(() => {
|
|
60
170
|
setHasScrollView(true);
|
|
61
171
|
if (isGestureHandlerEnabled()) {
|
|
@@ -68,14 +178,14 @@ const SheetScrollView = React.forwardRef(({
|
|
|
68
178
|
scrollBridge.forceScrollTo = void 0;
|
|
69
179
|
};
|
|
70
180
|
}, []);
|
|
71
|
-
const [hasScrollableContent, setHasScrollableContent] = useState(true);
|
|
72
|
-
const parentHeight = useRef(0);
|
|
73
|
-
const contentHeight = useRef(0);
|
|
74
181
|
const updateScrollable = () => {
|
|
75
182
|
if (parentHeight.current && contentHeight.current) {
|
|
76
183
|
setHasScrollableContent(contentHeight.current > parentHeight.current);
|
|
77
184
|
}
|
|
78
185
|
};
|
|
186
|
+
const recordFitHeight = height => {
|
|
187
|
+
parentHeight.current = height;
|
|
188
|
+
};
|
|
79
189
|
useEffect(() => {
|
|
80
190
|
scrollBridge.hasScrollableContent = hasScrollableContent;
|
|
81
191
|
}, [hasScrollableContent]);
|
|
@@ -84,30 +194,36 @@ const SheetScrollView = React.forwardRef(({
|
|
|
84
194
|
scrollBridge,
|
|
85
195
|
hasScrollableContent,
|
|
86
196
|
scrollEnabled,
|
|
87
|
-
setScrollEnabled
|
|
197
|
+
setScrollEnabled,
|
|
198
|
+
onManualScroll: emitManualScroll
|
|
88
199
|
});
|
|
89
|
-
const contentWrapper = /* @__PURE__ */
|
|
200
|
+
const contentWrapper = /* @__PURE__ */jsxs(View, {
|
|
90
201
|
onLayout: e => {
|
|
91
202
|
const height = Math.floor(e.nativeEvent.layout.height);
|
|
92
203
|
if (height !== contentHeight.current) {
|
|
93
204
|
contentHeight.current = height;
|
|
94
205
|
updateScrollable();
|
|
206
|
+
if (keyboardOccludedHeight > 0) {
|
|
207
|
+
scheduleFocusedInputScroll();
|
|
208
|
+
}
|
|
95
209
|
}
|
|
96
210
|
},
|
|
97
|
-
children
|
|
211
|
+
children: [children, keyboardOccludedHeight > 0 && /* @__PURE__ */jsx(View, {
|
|
212
|
+
"data-sheet-keyboard-scroll-pad": true,
|
|
213
|
+
height: keyboardOccludedHeight,
|
|
214
|
+
width: "100%"
|
|
215
|
+
})]
|
|
98
216
|
});
|
|
99
217
|
if (useRNGHScrollView && RNGHScrollView && panGestureRef) {
|
|
100
218
|
const RNGHComponent = RNGHScrollView;
|
|
101
219
|
return /* @__PURE__ */jsx(RNGHComponent, {
|
|
102
220
|
ref: composeRefs(scrollRef, ref),
|
|
103
|
-
style:
|
|
104
|
-
flex: 1
|
|
105
|
-
},
|
|
221
|
+
style: fitSizingStyle,
|
|
106
222
|
scrollEventThrottle: 1,
|
|
107
223
|
scrollEnabled,
|
|
108
224
|
simultaneousHandlers: [panGestureRef],
|
|
109
225
|
onLayout: e => {
|
|
110
|
-
|
|
226
|
+
recordFitHeight(Math.ceil(e.nativeEvent.layout.height));
|
|
111
227
|
updateScrollable();
|
|
112
228
|
},
|
|
113
229
|
onScroll: e => {
|
|
@@ -123,40 +239,44 @@ const SheetScrollView = React.forwardRef(({
|
|
|
123
239
|
animated: false
|
|
124
240
|
});
|
|
125
241
|
}
|
|
242
|
+
currentScrollOffset.current = scrollBridge.scrollLockY;
|
|
126
243
|
scrollBridge.y = scrollBridge.scrollLockY;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
...e
|
|
131
|
-
|
|
132
|
-
...e.nativeEvent
|
|
133
|
-
|
|
244
|
+
if (lastEmittedScrollOffset.current !== scrollBridge.scrollLockY) {
|
|
245
|
+
lastEmittedScrollOffset.current = scrollBridge.scrollLockY;
|
|
246
|
+
onScroll?.({
|
|
247
|
+
...e,
|
|
248
|
+
nativeEvent: {
|
|
249
|
+
...e.nativeEvent,
|
|
250
|
+
contentOffset: {
|
|
251
|
+
...e.nativeEvent.contentOffset,
|
|
252
|
+
y: scrollBridge.scrollLockY
|
|
253
|
+
}
|
|
134
254
|
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
137
257
|
return;
|
|
138
258
|
}
|
|
139
259
|
scrollBridge.y = y;
|
|
140
260
|
if (y > 0) scrollBridge.scrollStartY = -1;
|
|
261
|
+
lastEmittedScrollOffset.current = y;
|
|
141
262
|
onScroll?.(e);
|
|
142
263
|
},
|
|
143
|
-
contentContainerStyle
|
|
144
|
-
minHeight: "100%"
|
|
145
|
-
},
|
|
264
|
+
contentContainerStyle,
|
|
146
265
|
bounces: false,
|
|
147
266
|
keyboardShouldPersistTaps: "always",
|
|
148
267
|
keyboardDismissMode: "none",
|
|
149
268
|
...props,
|
|
269
|
+
...keyboardFrozenOverride,
|
|
150
270
|
children: contentWrapper
|
|
151
271
|
});
|
|
152
272
|
}
|
|
153
273
|
return /* @__PURE__ */jsx(ScrollView, {
|
|
154
274
|
onLayout: e => {
|
|
155
|
-
|
|
275
|
+
recordFitHeight(Math.ceil(e.nativeEvent.layout.height));
|
|
156
276
|
updateScrollable();
|
|
157
277
|
},
|
|
158
278
|
ref: composeRefs(scrollRef, ref),
|
|
159
|
-
|
|
279
|
+
...fitSizingStyle,
|
|
160
280
|
scrollEventThrottle: 1,
|
|
161
281
|
className: "_ovs-contain",
|
|
162
282
|
scrollEnabled,
|
|
@@ -164,15 +284,16 @@ const SheetScrollView = React.forwardRef(({
|
|
|
164
284
|
const {
|
|
165
285
|
y
|
|
166
286
|
} = e.nativeEvent.contentOffset;
|
|
287
|
+
currentScrollOffset.current = y;
|
|
167
288
|
scrollBridge.y = y;
|
|
168
289
|
if (y > 0) scrollBridge.scrollStartY = -1;
|
|
290
|
+
lastEmittedScrollOffset.current = y;
|
|
169
291
|
onScroll?.(e);
|
|
170
292
|
},
|
|
171
|
-
contentContainerStyle
|
|
172
|
-
minHeight: "100%"
|
|
173
|
-
},
|
|
293
|
+
contentContainerStyle,
|
|
174
294
|
...gestureProps,
|
|
175
295
|
...props,
|
|
296
|
+
...keyboardFrozenOverride,
|
|
176
297
|
children: contentWrapper
|
|
177
298
|
});
|
|
178
299
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["composeRefs","View","ScrollView","useControllableState","React","useEffect","useRef","useState","useGestureSheetContext","getGestureHandlerState","isGestureHandlerEnabled","useSheetContext","useSheetScrollViewGestures","jsx","SHEET_SCROLL_VIEW_NAME","SheetScrollView","forwardRef","__scopeSheet","children","onScroll","scrollEnabled","scrollEnabledProp","props","ref","context","gestureContext","scrollBridge","setHasScrollView","prop","defaultProp","scrollRef","panGestureRef","RNGHScrollView","useRNGHScrollView","currentScrollOffset","lockedScrollY","setScrollEnabled","next","lockTo","lockY","current","scrollLockY","scrollTo","x","y","animated","forceScrollTo","hasScrollableContent","setHasScrollableContent","parentHeight","contentHeight","updateScrollable","gestureProps","contentWrapper","onLayout","e","height","Math","floor","nativeEvent","layout","RNGHComponent","style","flex","scrollEventThrottle","simultaneousHandlers","ceil","contentOffset","scrollStartY","contentContainerStyle","minHeight","bounces","keyboardShouldPersistTaps","keyboardDismissMode","className"],"sources":["../../src/SheetScrollView.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["composeRefs","isWeb","View","ScrollView","useControllableState","React","useEffect","useRef","useState","useGestureSheetContext","getGestureHandlerState","isGestureHandlerEnabled","useSheetContext","useSheetScrollViewGestures","getStableLayoutViewportHeight","getWebKeyboardBottomInset","getWebKeyboardResizeHeight","isEditableElement","MIN_KEYBOARD_HEIGHT","jsx","jsxs","SHEET_SCROLL_VIEW_NAME","SheetScrollView","forwardRef","__scopeSheet","children","onScroll","scrollEnabled","scrollEnabledProp","props","ref","context","gestureContext","scrollBridge","setHasScrollView","hasFit","screenSize","keyboardOccludedHeight","Math","max","isKeyboardVisible","prop","defaultProp","scrollRef","hasScrollableContent","setHasScrollableContent","parentHeight","contentHeight","frozenFrameHeight","keyboardStableFrameHeight","fitSizingStyle","flex","height","maxHeight","contentContainerStyle","minHeight","keyboardFrozenOverride","panGestureRef","RNGHScrollView","useRNGHScrollView","currentScrollOffset","lastEmittedScrollOffset","lockedScrollY","focusedInputScrollFrame","setScrollEnabled","next","lockTo","lockY","scrollLockY","current","enabled","scrollTo","x","y","animated","forceScrollTo","emitManualScroll","useCallback","node","scrollStartY","nativeEvent","contentOffset","scrollLeft","contentSize","scrollHeight","width","scrollWidth","layoutMeasurement","offsetHeight","offsetWidth","timeStamp","Date","now","scrollFocusedInputClearOfKeyboard","getScrollableNode","active","document","activeElement","contains","keyboardHeight","activeRect","getBoundingClientRect","nodeRect","margin","keyboardTop","visibleTop","top","visibleBottom","min","bottom","nextScrollTop","scrollTop","ceil","maxScrollTop","clientHeight","scheduleFocusedInputScroll","cancelAnimationFrame","requestAnimationFrame","window","addEventListener","visualViewport","removeEventListener","updateScrollable","recordFitHeight","gestureProps","onManualScroll","contentWrapper","onLayout","e","floor","layout","RNGHComponent","style","scrollEventThrottle","simultaneousHandlers","bounces","keyboardShouldPersistTaps","keyboardDismissMode","className"],"sources":["../../src/SheetScrollView.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -48,6 +48,7 @@ var import_GestureSheetContext = require("./GestureSheetContext.native.js");
|
|
|
48
48
|
var import_gestureState = require("./gestureState.native.js");
|
|
49
49
|
var import_SheetContext = require("./SheetContext.native.js");
|
|
50
50
|
var import_useSheetScrollViewGestures = require("./useSheetScrollViewGestures.native.js");
|
|
51
|
+
var import_webViewport = require("./webViewport.native.js");
|
|
51
52
|
var SHEET_SCROLL_VIEW_NAME = "SheetScrollView";
|
|
52
53
|
var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (param, ref) {
|
|
53
54
|
var {
|
|
@@ -61,32 +62,68 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
|
|
|
61
62
|
var gestureContext = (0, import_GestureSheetContext.useGestureSheetContext)();
|
|
62
63
|
var {
|
|
63
64
|
scrollBridge,
|
|
64
|
-
setHasScrollView
|
|
65
|
+
setHasScrollView,
|
|
66
|
+
hasFit,
|
|
67
|
+
screenSize
|
|
65
68
|
} = context;
|
|
69
|
+
var keyboardOccludedHeight = Math.max(0, context.keyboardOccludedHeight || 0);
|
|
70
|
+
var isKeyboardVisible = context.isKeyboardVisible === true || import_core.isWeb && (0, import_webViewport.getWebKeyboardResizeHeight)() >= import_webViewport.MIN_KEYBOARD_HEIGHT;
|
|
66
71
|
var [scrollEnabled] = (0, import_use_controllable_state.useControllableState)({
|
|
67
72
|
prop: scrollEnabledProp,
|
|
68
73
|
defaultProp: true
|
|
69
74
|
});
|
|
70
75
|
var scrollRef = import_react.default.useRef(null);
|
|
76
|
+
var [hasScrollableContent, setHasScrollableContent] = (0, import_react.useState)(true);
|
|
77
|
+
var parentHeight = (0, import_react.useRef)(0);
|
|
78
|
+
var contentHeight = (0, import_react.useRef)(0);
|
|
79
|
+
var frozenFrameHeight = Math.max(0, context.keyboardStableFrameHeight || 0);
|
|
80
|
+
var fitSizingStyle = hasFit ? {
|
|
81
|
+
flex: void 0,
|
|
82
|
+
height: void 0,
|
|
83
|
+
maxHeight: screenSize || void 0
|
|
84
|
+
} : {
|
|
85
|
+
flex: 1
|
|
86
|
+
};
|
|
87
|
+
var contentContainerStyle = hasFit ? void 0 : {
|
|
88
|
+
minHeight: "100%"
|
|
89
|
+
};
|
|
90
|
+
var keyboardFrozenOverride = hasFit && isKeyboardVisible && frozenFrameHeight > 0 ? {
|
|
91
|
+
height: frozenFrameHeight,
|
|
92
|
+
maxHeight: frozenFrameHeight
|
|
93
|
+
} : null;
|
|
71
94
|
var panGestureRef = gestureContext === null || gestureContext === void 0 ? void 0 : gestureContext.panGestureRef;
|
|
72
95
|
var {
|
|
73
96
|
ScrollView: RNGHScrollView
|
|
74
97
|
} = (0, import_gestureState.getGestureHandlerState)();
|
|
75
98
|
var useRNGHScrollView = (0, import_gestureState.isGestureHandlerEnabled)() && RNGHScrollView && panGestureRef;
|
|
76
99
|
var currentScrollOffset = (0, import_react.useRef)(0);
|
|
100
|
+
var lastEmittedScrollOffset = (0, import_react.useRef)(0);
|
|
77
101
|
var lockedScrollY = (0, import_react.useRef)(0);
|
|
102
|
+
var focusedInputScrollFrame = (0, import_react.useRef)(0);
|
|
78
103
|
var setScrollEnabled = function (next, lockTo) {
|
|
79
104
|
if (!next) {
|
|
80
|
-
var
|
|
81
|
-
var lockY = lockTo !== null && lockTo !== void 0 ? lockTo : currentScrollOffset.current;
|
|
105
|
+
var _ref;
|
|
106
|
+
var lockY = (_ref = lockTo !== null && lockTo !== void 0 ? lockTo : scrollBridge.scrollLockY) !== null && _ref !== void 0 ? _ref : currentScrollOffset.current;
|
|
107
|
+
if (scrollBridge.enabled === false && scrollBridge.scrollLockY === lockY) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
scrollBridge.enabled = false;
|
|
82
111
|
lockedScrollY.current = lockY;
|
|
83
112
|
scrollBridge.scrollLockY = lockY;
|
|
84
|
-
(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
113
|
+
if (currentScrollOffset.current !== lockY) {
|
|
114
|
+
var _scrollRef_current_scrollTo, _scrollRef_current;
|
|
115
|
+
(_scrollRef_current = scrollRef.current) === null || _scrollRef_current === void 0 ? void 0 : (_scrollRef_current_scrollTo = _scrollRef_current.scrollTo) === null || _scrollRef_current_scrollTo === void 0 ? void 0 : _scrollRef_current_scrollTo.call(_scrollRef_current, {
|
|
116
|
+
x: 0,
|
|
117
|
+
y: lockY,
|
|
118
|
+
animated: false
|
|
119
|
+
});
|
|
120
|
+
currentScrollOffset.current = lockY;
|
|
121
|
+
}
|
|
89
122
|
} else {
|
|
123
|
+
if (scrollBridge.enabled === true && scrollBridge.scrollLockY === void 0) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
scrollBridge.enabled = true;
|
|
90
127
|
lockedScrollY.current = currentScrollOffset.current;
|
|
91
128
|
scrollBridge.scrollLockY = void 0;
|
|
92
129
|
}
|
|
@@ -98,7 +135,84 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
|
|
|
98
135
|
y,
|
|
99
136
|
animated: false
|
|
100
137
|
});
|
|
138
|
+
currentScrollOffset.current = y;
|
|
101
139
|
};
|
|
140
|
+
var emitManualScroll = import_react.default.useCallback(function (node, y) {
|
|
141
|
+
currentScrollOffset.current = y;
|
|
142
|
+
scrollBridge.y = y;
|
|
143
|
+
if (y > 0) scrollBridge.scrollStartY = -1;
|
|
144
|
+
lastEmittedScrollOffset.current = y;
|
|
145
|
+
onScroll === null || onScroll === void 0 ? void 0 : onScroll({
|
|
146
|
+
nativeEvent: {
|
|
147
|
+
contentOffset: {
|
|
148
|
+
x: node.scrollLeft,
|
|
149
|
+
y
|
|
150
|
+
},
|
|
151
|
+
contentSize: {
|
|
152
|
+
height: node.scrollHeight,
|
|
153
|
+
width: node.scrollWidth
|
|
154
|
+
},
|
|
155
|
+
layoutMeasurement: {
|
|
156
|
+
height: node.offsetHeight,
|
|
157
|
+
width: node.offsetWidth
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
timeStamp: Date.now()
|
|
161
|
+
});
|
|
162
|
+
}, [onScroll, scrollBridge]);
|
|
163
|
+
var scrollFocusedInputClearOfKeyboard = import_react.default.useCallback(function () {
|
|
164
|
+
var _scrollRef_current;
|
|
165
|
+
if (!import_core.isWeb || !hasFit || !isKeyboardVisible || keyboardOccludedHeight <= 0) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
var node = (_scrollRef_current = scrollRef.current) === null || _scrollRef_current === void 0 ? void 0 : _scrollRef_current.getScrollableNode();
|
|
169
|
+
var active = document.activeElement;
|
|
170
|
+
if (!node || !active || !(0, import_webViewport.isEditableElement)(active) || !node.contains(active)) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
var keyboardHeight = Math.max(keyboardOccludedHeight, (0, import_webViewport.getWebKeyboardBottomInset)());
|
|
174
|
+
if (keyboardHeight <= 0) return;
|
|
175
|
+
var activeRect = active.getBoundingClientRect();
|
|
176
|
+
var nodeRect = node.getBoundingClientRect();
|
|
177
|
+
var margin = 12;
|
|
178
|
+
var keyboardTop = (0, import_webViewport.getStableLayoutViewportHeight)() - keyboardHeight;
|
|
179
|
+
var visibleTop = nodeRect.top + margin;
|
|
180
|
+
var visibleBottom = Math.min(nodeRect.bottom, keyboardTop) - margin;
|
|
181
|
+
var nextScrollTop = node.scrollTop;
|
|
182
|
+
if (activeRect.bottom > visibleBottom) {
|
|
183
|
+
nextScrollTop += Math.ceil(activeRect.bottom - visibleBottom);
|
|
184
|
+
} else if (activeRect.top < visibleTop) {
|
|
185
|
+
nextScrollTop -= Math.ceil(visibleTop - activeRect.top);
|
|
186
|
+
}
|
|
187
|
+
var maxScrollTop = Math.max(0, node.scrollHeight - node.clientHeight);
|
|
188
|
+
nextScrollTop = Math.max(0, Math.min(maxScrollTop, nextScrollTop));
|
|
189
|
+
if (nextScrollTop === node.scrollTop) return;
|
|
190
|
+
node.scrollTop = nextScrollTop;
|
|
191
|
+
currentScrollOffset.current = nextScrollTop;
|
|
192
|
+
scrollBridge.y = nextScrollTop;
|
|
193
|
+
if (nextScrollTop > 0) scrollBridge.scrollStartY = -1;
|
|
194
|
+
}, [hasFit, isKeyboardVisible, keyboardOccludedHeight, scrollBridge]);
|
|
195
|
+
var scheduleFocusedInputScroll = import_react.default.useCallback(function () {
|
|
196
|
+
if (!import_core.isWeb || !hasFit) return;
|
|
197
|
+
cancelAnimationFrame(focusedInputScrollFrame.current);
|
|
198
|
+
focusedInputScrollFrame.current = requestAnimationFrame(function () {
|
|
199
|
+
scrollFocusedInputClearOfKeyboard();
|
|
200
|
+
focusedInputScrollFrame.current = requestAnimationFrame(scrollFocusedInputClearOfKeyboard);
|
|
201
|
+
});
|
|
202
|
+
}, [hasFit, scrollFocusedInputClearOfKeyboard]);
|
|
203
|
+
(0, import_react.useEffect)(function () {
|
|
204
|
+
var _window_visualViewport;
|
|
205
|
+
if (!import_core.isWeb || !hasFit) return;
|
|
206
|
+
scheduleFocusedInputScroll();
|
|
207
|
+
window.addEventListener("focusin", scheduleFocusedInputScroll);
|
|
208
|
+
(_window_visualViewport = window.visualViewport) === null || _window_visualViewport === void 0 ? void 0 : _window_visualViewport.addEventListener("resize", scheduleFocusedInputScroll);
|
|
209
|
+
return function () {
|
|
210
|
+
var _window_visualViewport2;
|
|
211
|
+
cancelAnimationFrame(focusedInputScrollFrame.current);
|
|
212
|
+
window.removeEventListener("focusin", scheduleFocusedInputScroll);
|
|
213
|
+
(_window_visualViewport2 = window.visualViewport) === null || _window_visualViewport2 === void 0 ? void 0 : _window_visualViewport2.removeEventListener("resize", scheduleFocusedInputScroll);
|
|
214
|
+
};
|
|
215
|
+
}, [hasFit, scheduleFocusedInputScroll]);
|
|
102
216
|
(0, import_react.useEffect)(function () {
|
|
103
217
|
setHasScrollView(true);
|
|
104
218
|
if ((0, import_gestureState.isGestureHandlerEnabled)()) {
|
|
@@ -111,14 +225,14 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
|
|
|
111
225
|
scrollBridge.forceScrollTo = void 0;
|
|
112
226
|
};
|
|
113
227
|
}, []);
|
|
114
|
-
var [hasScrollableContent, setHasScrollableContent] = (0, import_react.useState)(true);
|
|
115
|
-
var parentHeight = (0, import_react.useRef)(0);
|
|
116
|
-
var contentHeight = (0, import_react.useRef)(0);
|
|
117
228
|
var updateScrollable = function () {
|
|
118
229
|
if (parentHeight.current && contentHeight.current) {
|
|
119
230
|
setHasScrollableContent(contentHeight.current > parentHeight.current);
|
|
120
231
|
}
|
|
121
232
|
};
|
|
233
|
+
var recordFitHeight = function (height) {
|
|
234
|
+
parentHeight.current = height;
|
|
235
|
+
};
|
|
122
236
|
(0, import_react.useEffect)(function () {
|
|
123
237
|
scrollBridge.hasScrollableContent = hasScrollableContent;
|
|
124
238
|
}, [hasScrollableContent]);
|
|
@@ -127,30 +241,36 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
|
|
|
127
241
|
scrollBridge,
|
|
128
242
|
hasScrollableContent,
|
|
129
243
|
scrollEnabled,
|
|
130
|
-
setScrollEnabled
|
|
244
|
+
setScrollEnabled,
|
|
245
|
+
onManualScroll: emitManualScroll
|
|
131
246
|
});
|
|
132
|
-
var contentWrapper = /* @__PURE__ */(0, import_jsx_runtime.
|
|
247
|
+
var contentWrapper = /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_core.View, {
|
|
133
248
|
onLayout: function (e) {
|
|
134
249
|
var height = Math.floor(e.nativeEvent.layout.height);
|
|
135
250
|
if (height !== contentHeight.current) {
|
|
136
251
|
contentHeight.current = height;
|
|
137
252
|
updateScrollable();
|
|
253
|
+
if (keyboardOccludedHeight > 0) {
|
|
254
|
+
scheduleFocusedInputScroll();
|
|
255
|
+
}
|
|
138
256
|
}
|
|
139
257
|
},
|
|
140
|
-
children
|
|
258
|
+
children: [children, keyboardOccludedHeight > 0 && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.View, {
|
|
259
|
+
"data-sheet-keyboard-scroll-pad": true,
|
|
260
|
+
height: keyboardOccludedHeight,
|
|
261
|
+
width: "100%"
|
|
262
|
+
})]
|
|
141
263
|
});
|
|
142
264
|
if (useRNGHScrollView && RNGHScrollView && panGestureRef) {
|
|
143
265
|
var RNGHComponent = RNGHScrollView;
|
|
144
266
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(RNGHComponent, {
|
|
145
267
|
ref: (0, import_compose_refs.composeRefs)(scrollRef, ref),
|
|
146
|
-
style:
|
|
147
|
-
flex: 1
|
|
148
|
-
},
|
|
268
|
+
style: fitSizingStyle,
|
|
149
269
|
scrollEventThrottle: 1,
|
|
150
270
|
scrollEnabled,
|
|
151
271
|
simultaneousHandlers: [panGestureRef],
|
|
152
272
|
onLayout: function (e) {
|
|
153
|
-
|
|
273
|
+
recordFitHeight(Math.ceil(e.nativeEvent.layout.height));
|
|
154
274
|
updateScrollable();
|
|
155
275
|
},
|
|
156
276
|
onScroll: function (e) {
|
|
@@ -167,40 +287,44 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
|
|
|
167
287
|
animated: false
|
|
168
288
|
});
|
|
169
289
|
}
|
|
290
|
+
currentScrollOffset.current = scrollBridge.scrollLockY;
|
|
170
291
|
scrollBridge.y = scrollBridge.scrollLockY;
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
...e
|
|
175
|
-
|
|
176
|
-
...e.nativeEvent
|
|
177
|
-
|
|
292
|
+
if (lastEmittedScrollOffset.current !== scrollBridge.scrollLockY) {
|
|
293
|
+
lastEmittedScrollOffset.current = scrollBridge.scrollLockY;
|
|
294
|
+
onScroll === null || onScroll === void 0 ? void 0 : onScroll({
|
|
295
|
+
...e,
|
|
296
|
+
nativeEvent: {
|
|
297
|
+
...e.nativeEvent,
|
|
298
|
+
contentOffset: {
|
|
299
|
+
...e.nativeEvent.contentOffset,
|
|
300
|
+
y: scrollBridge.scrollLockY
|
|
301
|
+
}
|
|
178
302
|
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
303
|
+
});
|
|
304
|
+
}
|
|
181
305
|
return;
|
|
182
306
|
}
|
|
183
307
|
scrollBridge.y = y;
|
|
184
308
|
if (y > 0) scrollBridge.scrollStartY = -1;
|
|
309
|
+
lastEmittedScrollOffset.current = y;
|
|
185
310
|
onScroll === null || onScroll === void 0 ? void 0 : onScroll(e);
|
|
186
311
|
},
|
|
187
|
-
contentContainerStyle
|
|
188
|
-
minHeight: "100%"
|
|
189
|
-
},
|
|
312
|
+
contentContainerStyle,
|
|
190
313
|
bounces: false,
|
|
191
314
|
keyboardShouldPersistTaps: "always",
|
|
192
315
|
keyboardDismissMode: "none",
|
|
193
316
|
...props,
|
|
317
|
+
...keyboardFrozenOverride,
|
|
194
318
|
children: contentWrapper
|
|
195
319
|
});
|
|
196
320
|
}
|
|
197
321
|
return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_scroll_view.ScrollView, {
|
|
198
322
|
onLayout: function (e) {
|
|
199
|
-
|
|
323
|
+
recordFitHeight(Math.ceil(e.nativeEvent.layout.height));
|
|
200
324
|
updateScrollable();
|
|
201
325
|
},
|
|
202
326
|
ref: (0, import_compose_refs.composeRefs)(scrollRef, ref),
|
|
203
|
-
|
|
327
|
+
...fitSizingStyle,
|
|
204
328
|
scrollEventThrottle: 1,
|
|
205
329
|
className: "_ovs-contain",
|
|
206
330
|
scrollEnabled,
|
|
@@ -208,15 +332,16 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
|
|
|
208
332
|
var {
|
|
209
333
|
y
|
|
210
334
|
} = e.nativeEvent.contentOffset;
|
|
335
|
+
currentScrollOffset.current = y;
|
|
211
336
|
scrollBridge.y = y;
|
|
212
337
|
if (y > 0) scrollBridge.scrollStartY = -1;
|
|
338
|
+
lastEmittedScrollOffset.current = y;
|
|
213
339
|
onScroll === null || onScroll === void 0 ? void 0 : onScroll(e);
|
|
214
340
|
},
|
|
215
|
-
contentContainerStyle
|
|
216
|
-
minHeight: "100%"
|
|
217
|
-
},
|
|
341
|
+
contentContainerStyle,
|
|
218
342
|
...gestureProps,
|
|
219
343
|
...props,
|
|
344
|
+
...keyboardFrozenOverride,
|
|
220
345
|
children: contentWrapper
|
|
221
346
|
});
|
|
222
347
|
});
|