@tamagui/sheet 2.3.3 → 2.4.0-1783099846627
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 +1 -1
- package/dist/cjs/SheetImplementationCustom.cjs +42 -29
- package/dist/cjs/SheetImplementationCustom.native.js +46 -33
- package/dist/cjs/SheetImplementationCustom.native.js.map +1 -1
- package/dist/cjs/SheetScrollView.cjs +64 -22
- package/dist/cjs/SheetScrollView.native.js +66 -23
- package/dist/cjs/SheetScrollView.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/setupGestureHandler.cjs +7 -4
- package/dist/cjs/setupGestureHandler.native.js +9 -4
- package/dist/cjs/setupGestureHandler.native.js.map +1 -1
- package/dist/cjs/useGestureHandlerPan.cjs +61 -8
- package/dist/cjs/useGestureHandlerPan.native.js +64 -8
- package/dist/cjs/useGestureHandlerPan.native.js.map +1 -1
- package/dist/cjs/useSheetScrollViewGestures.cjs +13 -3
- package/dist/esm/SheetImplementationCustom.mjs +43 -32
- package/dist/esm/SheetImplementationCustom.mjs.map +1 -1
- package/dist/esm/SheetImplementationCustom.native.js +47 -36
- package/dist/esm/SheetImplementationCustom.native.js.map +1 -1
- package/dist/esm/SheetScrollView.mjs +64 -22
- package/dist/esm/SheetScrollView.mjs.map +1 -1
- package/dist/esm/SheetScrollView.native.js +66 -23
- package/dist/esm/SheetScrollView.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/setupGestureHandler.mjs +7 -4
- package/dist/esm/setupGestureHandler.mjs.map +1 -1
- package/dist/esm/setupGestureHandler.native.js +9 -4
- package/dist/esm/setupGestureHandler.native.js.map +1 -1
- package/dist/esm/useGestureHandlerPan.mjs +62 -9
- package/dist/esm/useGestureHandlerPan.mjs.map +1 -1
- package/dist/esm/useGestureHandlerPan.native.js +65 -9
- package/dist/esm/useGestureHandlerPan.native.js.map +1 -1
- package/dist/esm/useSheetScrollViewGestures.mjs +13 -3
- package/dist/esm/useSheetScrollViewGestures.mjs.map +1 -1
- package/dist/jsx/SheetImplementationCustom.mjs +43 -32
- package/dist/jsx/SheetImplementationCustom.mjs.map +1 -1
- package/dist/jsx/SheetImplementationCustom.native.js +46 -33
- package/dist/jsx/SheetImplementationCustom.native.js.map +1 -1
- package/dist/jsx/SheetScrollView.mjs +64 -22
- package/dist/jsx/SheetScrollView.mjs.map +1 -1
- package/dist/jsx/SheetScrollView.native.js +66 -23
- package/dist/jsx/SheetScrollView.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/setupGestureHandler.mjs +7 -4
- package/dist/jsx/setupGestureHandler.mjs.map +1 -1
- package/dist/jsx/setupGestureHandler.native.js +9 -4
- package/dist/jsx/setupGestureHandler.native.js.map +1 -1
- package/dist/jsx/useGestureHandlerPan.mjs +62 -9
- package/dist/jsx/useGestureHandlerPan.mjs.map +1 -1
- package/dist/jsx/useGestureHandlerPan.native.js +64 -8
- package/dist/jsx/useGestureHandlerPan.native.js.map +1 -1
- package/dist/jsx/useSheetScrollViewGestures.mjs +13 -3
- package/dist/jsx/useSheetScrollViewGestures.mjs.map +1 -1
- package/package.json +20 -20
- package/src/SheetImplementationCustom.tsx +79 -47
- package/src/SheetScrollView.tsx +61 -13
- package/src/gestureState.ts +22 -2
- package/src/index.ts +4 -0
- package/src/setupGestureHandler.ts +12 -3
- package/src/types.tsx +3 -0
- package/src/useGestureHandlerPan.tsx +64 -10
- package/src/useSheetScrollViewGestures.ts +17 -2
- package/types/SheetImplementationCustom.d.ts.map +1 -1
- package/types/SheetScrollView.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/setupGestureHandler.d.ts.map +1 -1
- package/types/types.d.ts +1 -0
- package/types/types.d.ts.map +1 -1
- package/types/useGestureHandlerPan.d.ts.map +1 -1
- package/types/useSheetScrollViewGestures.d.ts +2 -1
- package/types/useSheetScrollViewGestures.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","useGestureHandlerPan_exports","useGestureHandlerPan","module","exports","import_constants","require","import_react","import_gestureState","import_keyboardAvoidance","AT_TOP_THRESHOLD","config","positions","frameSize","setPosition","animateTo","stopSpring","scrollBridge","setIsDragging","getCurrentPosition","resisted","disableDrag","isShowingInnerSheet","setAnimatedPosition","scrollGestureRef","gestureHandlerEnabled","isGestureHandlerEnabled","panGestureRef","useRef","_config_snapPointsMode","releaseConfigRef","dismissOnSnapToBottom","snapPointsMode","isKeyboardVisible","_config_snapPointsMode1","current","gestureStateRef","startY","lastPanTranslationY","accumulatedOffset","prevTranslationY","scrollEngaged","frozenPositions","frozenMinY","frozenIsKeyboardVisible","panStarted","onStart","useCallback","onEnd","closestPoint","animationOverride","
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","useGestureHandlerPan_exports","useGestureHandlerPan","module","exports","import_constants","require","import_react","import_gestureState","import_keyboardAvoidance","AT_TOP_THRESHOLD","SCROLL_HANDOFF_THRESHOLD","config","positions","frameSize","setPosition","animateTo","stopSpring","scrollBridge","setIsDragging","getCurrentPosition","resisted","disableDrag","isShowingInnerSheet","setAnimatedPosition","scrollGestureRef","gestureHandlerEnabled","isGestureHandlerEnabled","panGestureRef","useRef","_config_snapPointsMode","releaseConfigRef","dismissOnSnapToBottom","snapPointsMode","isKeyboardVisible","_config_snapPointsMode1","current","gestureStateRef","startY","lastPanTranslationY","accumulatedOffset","prevTranslationY","scrollEngaged","frozenPositions","frozenMinY","frozenIsKeyboardVisible","panStarted","startedBelowTop","upwardDragAfterTop","scrollUnlockedAfterTop","keepScrollLockedAfterEnd","unlockScrollTimer","useEffect","clearTimeout","onStart","useCallback","onEnd","closestPoint","animationOverride","keepScrollLocked","arguments","length","setParentDragging","lockScrollAtTop","_scrollBridge_setScrollEnabled","setScrollEnabled","setTimeout","_scrollBridge_setScrollEnabled2","_scrollBridge_setScrollEnabled1","panGesture","useMemo","Gesture","getGestureHandlerState","minY","gs","gesture","Pan","withRef","activeOffsetY","failOffsetX","shouldCancelWhenOutside","onBegin","pauseKeyboardHandler","pos","atTop","currentScrollY","y","initialPosition","onChange","event","translationY","isSwipingDown","deltaY","scrollY","currentPos","isCurrentlyAtTop","nodeIsScrolling","panHandles","hasScrollableContent","Math","max","lockTo","newPosition","paneY","velocityY","scrollLockY","snapPositions","snapMinY","velocity","projectedEnd","releaseConfig","getSheetReleasePosition","currentPosition","isWeb","onFinalize"],"sources":["../../src/useGestureHandlerPan.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -2,7 +2,8 @@ import { useEffect, useRef } from "react";
|
|
|
2
2
|
function useSheetScrollViewGestures({
|
|
3
3
|
scrollRef,
|
|
4
4
|
scrollBridge,
|
|
5
|
-
hasScrollableContent
|
|
5
|
+
hasScrollableContent,
|
|
6
|
+
onManualScroll
|
|
6
7
|
}) {
|
|
7
8
|
const state = useRef({
|
|
8
9
|
startY: 0,
|
|
@@ -13,6 +14,10 @@ function useSheetScrollViewGestures({
|
|
|
13
14
|
dys: [],
|
|
14
15
|
scrollYAtGestureStart: 0
|
|
15
16
|
});
|
|
17
|
+
const onManualScrollRef = useRef(onManualScroll);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
onManualScrollRef.current = onManualScroll;
|
|
20
|
+
}, [onManualScroll]);
|
|
16
21
|
useEffect(() => {
|
|
17
22
|
if (!scrollRef.current) return;
|
|
18
23
|
const controller = new AbortController();
|
|
@@ -29,6 +34,11 @@ function useSheetScrollViewGestures({
|
|
|
29
34
|
const enableScroll = () => {
|
|
30
35
|
node.style.overflowY = originalOverflow;
|
|
31
36
|
};
|
|
37
|
+
const setScrollTop = nextScrollY => {
|
|
38
|
+
if (node.scrollTop === nextScrollY) return;
|
|
39
|
+
node.scrollTop = nextScrollY;
|
|
40
|
+
onManualScrollRef.current?.(node, nextScrollY);
|
|
41
|
+
};
|
|
32
42
|
const handleTouchStart = e => {
|
|
33
43
|
const touch = e.touches[0];
|
|
34
44
|
if (!touch) return;
|
|
@@ -57,7 +67,7 @@ function useSheetScrollViewGestures({
|
|
|
57
67
|
if (dy === 0) return;
|
|
58
68
|
const isDraggingDown = dy > 0;
|
|
59
69
|
const currentScrollY = node.scrollTop;
|
|
60
|
-
const isPaneAtTop = scrollBridge.paneY <= scrollBridge.paneMinY + 5;
|
|
70
|
+
const isPaneAtTop = scrollBridge.isAtTop ?? scrollBridge.paneY <= scrollBridge.paneMinY + 5;
|
|
61
71
|
scrollBridge.y = currentScrollY;
|
|
62
72
|
let shouldPanOwn = false;
|
|
63
73
|
if (!isPaneAtTop) {
|
|
@@ -97,7 +107,7 @@ function useSheetScrollViewGestures({
|
|
|
97
107
|
const maxScrollY = node.scrollHeight - node.clientHeight;
|
|
98
108
|
const newScrollY = Math.max(0, Math.min(maxScrollY, currentScrollY + scrollDelta));
|
|
99
109
|
if (newScrollY !== currentScrollY) {
|
|
100
|
-
|
|
110
|
+
setScrollTop(newScrollY);
|
|
101
111
|
scrollBridge.y = newScrollY;
|
|
102
112
|
if (newScrollY > 0) scrollBridge.scrollStartY = -1;
|
|
103
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","useSheetScrollViewGestures","scrollRef","scrollBridge","hasScrollableContent","state","startY","lastY","owner","hadPanOwner","panDragOffset","dys","scrollYAtGestureStart","current","controller","AbortController","node","getScrollableNode","style","overscrollBehavior","originalOverflow","disableScroll","overflowY","enableScroll","handleTouchStart","e","touch","touches","currentScrollY","
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useSheetScrollViewGestures","scrollRef","scrollBridge","hasScrollableContent","onManualScroll","state","startY","lastY","owner","hadPanOwner","panDragOffset","dys","scrollYAtGestureStart","onManualScrollRef","current","controller","AbortController","node","getScrollableNode","style","overscrollBehavior","originalOverflow","disableScroll","overflowY","enableScroll","setScrollTop","nextScrollY","scrollTop","handleTouchStart","e","touch","touches","currentScrollY","pageY","scrollStartY","scrollNodeTouched","handleTouchMove","s","dy","isDraggingDown","isPaneAtTop","isAtTop","paneY","paneMinY","y","shouldPanOwn","newOwner","startPanDrag","setParentDragging","scrollLock","cancelable","preventDefault","drag","push","length","slice","isTrusted","scrollDelta","maxScrollY","scrollHeight","clientHeight","newScrollY","Math","max","min","handleTouchEnd","vy","recentDys","dist","reduce","a","b","release","dragAt","snapToPosition","addEventListener","signal","passive","abort"],"sources":["../../src/useSheetScrollViewGestures.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/sheet",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0-1783099846627",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -54,27 +54,27 @@
|
|
|
54
54
|
"clean": "tamagui-build clean"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@tamagui/adapt": "2.
|
|
58
|
-
"@tamagui/animate-presence": "2.
|
|
59
|
-
"@tamagui/animations-react-native": "2.
|
|
60
|
-
"@tamagui/compose-refs": "2.
|
|
61
|
-
"@tamagui/constants": "2.
|
|
62
|
-
"@tamagui/core": "2.
|
|
63
|
-
"@tamagui/create-context": "2.
|
|
64
|
-
"@tamagui/helpers": "2.
|
|
65
|
-
"@tamagui/native": "2.
|
|
66
|
-
"@tamagui/portal": "2.
|
|
67
|
-
"@tamagui/remove-scroll": "2.
|
|
68
|
-
"@tamagui/scroll-view": "2.
|
|
69
|
-
"@tamagui/stacks": "2.
|
|
70
|
-
"@tamagui/use-constant": "2.
|
|
71
|
-
"@tamagui/use-controllable-state": "2.
|
|
72
|
-
"@tamagui/use-did-finish-ssr": "2.
|
|
73
|
-
"@tamagui/use-keyboard-visible": "2.
|
|
74
|
-
"@tamagui/z-index-stack": "2.
|
|
57
|
+
"@tamagui/adapt": "2.4.0-1783099846627",
|
|
58
|
+
"@tamagui/animate-presence": "2.4.0-1783099846627",
|
|
59
|
+
"@tamagui/animations-react-native": "2.4.0-1783099846627",
|
|
60
|
+
"@tamagui/compose-refs": "2.4.0-1783099846627",
|
|
61
|
+
"@tamagui/constants": "2.4.0-1783099846627",
|
|
62
|
+
"@tamagui/core": "2.4.0-1783099846627",
|
|
63
|
+
"@tamagui/create-context": "2.4.0-1783099846627",
|
|
64
|
+
"@tamagui/helpers": "2.4.0-1783099846627",
|
|
65
|
+
"@tamagui/native": "2.4.0-1783099846627",
|
|
66
|
+
"@tamagui/portal": "2.4.0-1783099846627",
|
|
67
|
+
"@tamagui/remove-scroll": "2.4.0-1783099846627",
|
|
68
|
+
"@tamagui/scroll-view": "2.4.0-1783099846627",
|
|
69
|
+
"@tamagui/stacks": "2.4.0-1783099846627",
|
|
70
|
+
"@tamagui/use-constant": "2.4.0-1783099846627",
|
|
71
|
+
"@tamagui/use-controllable-state": "2.4.0-1783099846627",
|
|
72
|
+
"@tamagui/use-did-finish-ssr": "2.4.0-1783099846627",
|
|
73
|
+
"@tamagui/use-keyboard-visible": "2.4.0-1783099846627",
|
|
74
|
+
"@tamagui/z-index-stack": "2.4.0-1783099846627"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
|
-
"@tamagui/build": "2.
|
|
77
|
+
"@tamagui/build": "2.4.0-1783099846627",
|
|
78
78
|
"react": ">=19",
|
|
79
79
|
"react-native": "0.83.2",
|
|
80
80
|
"react-native-gesture-handler": "~2.30.0",
|
|
@@ -207,6 +207,26 @@ export const SheetImplementationCustom = React.forwardRef<View, SheetProps>(
|
|
|
207
207
|
// height would mismatch).
|
|
208
208
|
const isWebKbSheet = isWeb && hasFit && moveOnKeyboardChange
|
|
209
209
|
|
|
210
|
+
// NATIVE keyboard frame freeze. native fit sheets feed keyboardOccludedHeight
|
|
211
|
+
// into the ScrollView as scrollable tail padding so content can clear the
|
|
212
|
+
// keyboard. but that padding grows the fit content, which grows the frame,
|
|
213
|
+
// which grows the occluded height — a feedback loop that balloons the sheet
|
|
214
|
+
// to the full-screen cap. web breaks the loop by freezing geometry against
|
|
215
|
+
// effScreenSize; native has no such freeze, so we pin the ScrollView to the
|
|
216
|
+
// frame height measured while the keyboard was closed (preKeyboardFrameSize)
|
|
217
|
+
// via keyboardStableFrameHeight below. unlike web, the native keyboard is an
|
|
218
|
+
// overlay that never shrinks the measured screen, so screenSize stays live.
|
|
219
|
+
const isNativeKbFitSheet = !isWeb && hasFit && Boolean(moveOnKeyboardChange)
|
|
220
|
+
|
|
221
|
+
// snapshot the fit frame height while the keyboard is closed, so the pin above
|
|
222
|
+
// holds the pre-keyboard viewport rather than a mid-feedback-loop value.
|
|
223
|
+
const preKeyboardFrameSize = React.useRef(0)
|
|
224
|
+
React.useEffect(() => {
|
|
225
|
+
if (isNativeKbFitSheet && open && !isKeyboardVisible && frameSize > 0) {
|
|
226
|
+
preKeyboardFrameSize.current = frameSize
|
|
227
|
+
}
|
|
228
|
+
}, [isNativeKbFitSheet, open, isKeyboardVisible, frameSize])
|
|
229
|
+
|
|
210
230
|
// the space the snap positions are built against. WEB: the stable layout
|
|
211
231
|
// viewport (document.documentElement.clientHeight), which the soft keyboard
|
|
212
232
|
// never shrinks (unlike the measured screenSize / visualViewport). NATIVE:
|
|
@@ -307,10 +327,13 @@ export const SheetImplementationCustom = React.forwardRef<View, SheetProps>(
|
|
|
307
327
|
// smaller; this override keeps it at the full height so the frame translates
|
|
308
328
|
// with the keyboard but never resizes. 0 = no override (use the consumer maxHeight).
|
|
309
329
|
const keyboardStableFrameHeight =
|
|
310
|
-
isWebKbSheet && isKeyboardVisible && frameSize > 0
|
|
330
|
+
isWebKbSheet && isKeyboardVisible && frameSize > 0
|
|
331
|
+
? frameSize
|
|
332
|
+
: isNativeKbFitSheet && isKeyboardVisible && preKeyboardFrameSize.current > 0
|
|
333
|
+
? preKeyboardFrameSize.current
|
|
334
|
+
: 0
|
|
311
335
|
|
|
312
|
-
const { useAnimatedNumber, useAnimatedNumberStyle
|
|
313
|
-
animationDriver
|
|
336
|
+
const { useAnimatedNumber, useAnimatedNumberStyle } = animationDriver
|
|
314
337
|
const AnimatedView = (animationDriver.View ?? TamaguiView) as typeof Animated.View
|
|
315
338
|
|
|
316
339
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -346,42 +369,52 @@ export const SheetImplementationCustom = React.forwardRef<View, SheetProps>(
|
|
|
346
369
|
// safety fallback timer for sheet close opacity
|
|
347
370
|
const opacityFallbackTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null)
|
|
348
371
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
if (
|
|
364
|
-
scrollBridge.
|
|
365
|
-
|
|
366
|
-
// this preemptively sets scroll state before any gestures start
|
|
367
|
-
if (nowAtTop) {
|
|
368
|
-
// if scroll drifted during drag (e.g. fast swipe from position 1),
|
|
369
|
-
// reset it to 0 before enabling free scroll
|
|
370
|
-
if (scrollBridge.y > 0) {
|
|
371
|
-
scrollBridge.forceScrollTo?.(0)
|
|
372
|
-
scrollBridge.y = 0
|
|
373
|
-
}
|
|
374
|
-
scrollBridge.scrollLockY = undefined
|
|
375
|
-
scrollBridge.setScrollEnabled?.(true)
|
|
376
|
-
} else {
|
|
377
|
-
scrollBridge.scrollLockY = 0
|
|
378
|
-
scrollBridge.setScrollEnabled?.(false)
|
|
379
|
-
}
|
|
372
|
+
const syncAnimatedPosition = useEvent((value: number) => {
|
|
373
|
+
at.current = value
|
|
374
|
+
scrollBridge.paneY = value
|
|
375
|
+
|
|
376
|
+
// update isAtTop for scroll enable/disable. activePositions[0] is the
|
|
377
|
+
// top snap point (keyboard-adjusted minY).
|
|
378
|
+
const minY = activePositions[0]
|
|
379
|
+
const wasAtTop = scrollBridge.isAtTop
|
|
380
|
+
const nowAtTop = value <= minY + 5
|
|
381
|
+
if (wasAtTop === nowAtTop) return
|
|
382
|
+
|
|
383
|
+
scrollBridge.isAtTop = nowAtTop
|
|
384
|
+
if (nowAtTop) {
|
|
385
|
+
if (scrollBridge.lockScrollAtTop) {
|
|
386
|
+
if (scrollBridge.y > 0) {
|
|
387
|
+
scrollBridge.forceScrollTo?.(0)
|
|
388
|
+
scrollBridge.y = 0
|
|
380
389
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
390
|
+
scrollBridge.scrollLockY = 0
|
|
391
|
+
scrollBridge.setScrollEnabled?.(false, 0)
|
|
392
|
+
return
|
|
393
|
+
}
|
|
394
|
+
// if scroll drifted during drag (e.g. fast swipe from position 1),
|
|
395
|
+
// reset it to 0 before enabling free scroll.
|
|
396
|
+
if (scrollBridge.y > 0) {
|
|
397
|
+
scrollBridge.forceScrollTo?.(0)
|
|
398
|
+
scrollBridge.y = 0
|
|
399
|
+
}
|
|
400
|
+
scrollBridge.scrollLockY = undefined
|
|
401
|
+
scrollBridge.setScrollEnabled?.(true)
|
|
402
|
+
} else {
|
|
403
|
+
scrollBridge.scrollLockY = 0
|
|
404
|
+
scrollBridge.setScrollEnabled?.(false)
|
|
405
|
+
}
|
|
406
|
+
})
|
|
407
|
+
|
|
408
|
+
const setAnimatedPositionDirect = useEvent((value: number) => {
|
|
409
|
+
syncAnimatedPosition(value)
|
|
410
|
+
animatedNumber.setValue(value, { type: 'direct' })
|
|
411
|
+
})
|
|
412
|
+
|
|
413
|
+
const getAnimatedPosition = useEvent(() => {
|
|
414
|
+
const value = animatedNumber.getValue()
|
|
415
|
+
syncAnimatedPosition(value)
|
|
416
|
+
return value
|
|
417
|
+
})
|
|
385
418
|
|
|
386
419
|
function stopSpring() {
|
|
387
420
|
animatedNumber.stop()
|
|
@@ -422,6 +455,7 @@ export const SheetImplementationCustom = React.forwardRef<View, SheetProps>(
|
|
|
422
455
|
}
|
|
423
456
|
|
|
424
457
|
const animationCompleteCallback = () => {
|
|
458
|
+
syncAnimatedPosition(toValue)
|
|
425
459
|
if (opacityFallbackTimer.current) {
|
|
426
460
|
clearTimeout(opacityFallbackTimer.current)
|
|
427
461
|
opacityFallbackTimer.current = null
|
|
@@ -485,6 +519,7 @@ export const SheetImplementationCustom = React.forwardRef<View, SheetProps>(
|
|
|
485
519
|
duration: 0,
|
|
486
520
|
},
|
|
487
521
|
() => {
|
|
522
|
+
syncAnimatedPosition(screenSize)
|
|
488
523
|
// imperfect but struggling to render properly here
|
|
489
524
|
setTimeout(() => {
|
|
490
525
|
setDisableAnimation(false)
|
|
@@ -678,7 +713,7 @@ export const SheetImplementationCustom = React.forwardRef<View, SheetProps>(
|
|
|
678
713
|
const grant = () => {
|
|
679
714
|
setPanning(true)
|
|
680
715
|
stopSpring()
|
|
681
|
-
startY =
|
|
716
|
+
startY = getAnimatedPosition()
|
|
682
717
|
}
|
|
683
718
|
|
|
684
719
|
let isExternalDrag = false
|
|
@@ -700,7 +735,7 @@ export const SheetImplementationCustom = React.forwardRef<View, SheetProps>(
|
|
|
700
735
|
grant()
|
|
701
736
|
}
|
|
702
737
|
const to = dy + startY
|
|
703
|
-
|
|
738
|
+
setAnimatedPositionDirect(resisted(to, minY))
|
|
704
739
|
}
|
|
705
740
|
|
|
706
741
|
scrollBridge.release = release
|
|
@@ -733,7 +768,7 @@ export const SheetImplementationCustom = React.forwardRef<View, SheetProps>(
|
|
|
733
768
|
scrollBridge.setParentDragging(true)
|
|
734
769
|
}
|
|
735
770
|
|
|
736
|
-
|
|
771
|
+
setAnimatedPositionDirect(to)
|
|
737
772
|
},
|
|
738
773
|
onPanResponderEnd: finish,
|
|
739
774
|
onPanResponderTerminate: finish,
|
|
@@ -799,15 +834,12 @@ export const SheetImplementationCustom = React.forwardRef<View, SheetProps>(
|
|
|
799
834
|
stopSpring,
|
|
800
835
|
scrollBridge,
|
|
801
836
|
setIsDragging,
|
|
802
|
-
getCurrentPosition:
|
|
837
|
+
getCurrentPosition: getAnimatedPosition,
|
|
803
838
|
resisted,
|
|
804
839
|
disableDrag,
|
|
805
840
|
isShowingInnerSheet,
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
at.current = val
|
|
809
|
-
animatedNumber.setValue(val, { type: 'direct' })
|
|
810
|
-
},
|
|
841
|
+
// directly set the animated value for smooth dragging
|
|
842
|
+
setAnimatedPosition: setAnimatedPositionDirect,
|
|
811
843
|
dismissOnSnapToBottom,
|
|
812
844
|
snapPointsMode,
|
|
813
845
|
isKeyboardVisible,
|
package/src/SheetScrollView.tsx
CHANGED
|
@@ -72,6 +72,7 @@ export const SheetScrollView = React.forwardRef<
|
|
|
72
72
|
maxHeight: screenSize || undefined,
|
|
73
73
|
}
|
|
74
74
|
: { flex: 1 }
|
|
75
|
+
const contentContainerStyle = hasFit ? undefined : { minHeight: '100%' as const }
|
|
75
76
|
|
|
76
77
|
// when the keyboard is open, pin the scroll view to the sheet's pre-keyboard
|
|
77
78
|
// frame height (frozenFrameHeight), overriding any consumer maxHeight. on web
|
|
@@ -90,16 +91,28 @@ export const SheetScrollView = React.forwardRef<
|
|
|
90
91
|
|
|
91
92
|
// RNGH scroll locking state
|
|
92
93
|
const currentScrollOffset = useRef(0)
|
|
94
|
+
const lastEmittedScrollOffset = useRef(0)
|
|
93
95
|
const lockedScrollY = useRef(0)
|
|
94
96
|
const focusedInputScrollFrame = useRef(0)
|
|
95
97
|
|
|
96
98
|
const setScrollEnabled = (next: boolean, lockTo?: number) => {
|
|
97
99
|
if (!next) {
|
|
98
|
-
const lockY = lockTo ?? currentScrollOffset.current
|
|
100
|
+
const lockY = lockTo ?? scrollBridge.scrollLockY ?? currentScrollOffset.current
|
|
101
|
+
if (scrollBridge.enabled === false && scrollBridge.scrollLockY === lockY) {
|
|
102
|
+
return
|
|
103
|
+
}
|
|
104
|
+
scrollBridge.enabled = false
|
|
99
105
|
lockedScrollY.current = lockY
|
|
100
106
|
scrollBridge.scrollLockY = lockY
|
|
101
|
-
|
|
107
|
+
if (currentScrollOffset.current !== lockY) {
|
|
108
|
+
scrollRef.current?.scrollTo?.({ x: 0, y: lockY, animated: false })
|
|
109
|
+
currentScrollOffset.current = lockY
|
|
110
|
+
}
|
|
102
111
|
} else {
|
|
112
|
+
if (scrollBridge.enabled === true && scrollBridge.scrollLockY === undefined) {
|
|
113
|
+
return
|
|
114
|
+
}
|
|
115
|
+
scrollBridge.enabled = true
|
|
103
116
|
lockedScrollY.current = currentScrollOffset.current
|
|
104
117
|
scrollBridge.scrollLockY = undefined
|
|
105
118
|
}
|
|
@@ -107,8 +120,36 @@ export const SheetScrollView = React.forwardRef<
|
|
|
107
120
|
|
|
108
121
|
const forceScrollTo = (y: number) => {
|
|
109
122
|
scrollRef.current?.scrollTo?.({ x: 0, y, animated: false })
|
|
123
|
+
currentScrollOffset.current = y
|
|
110
124
|
}
|
|
111
125
|
|
|
126
|
+
const emitManualScroll = React.useCallback(
|
|
127
|
+
(node: HTMLElement, y: number) => {
|
|
128
|
+
currentScrollOffset.current = y
|
|
129
|
+
scrollBridge.y = y
|
|
130
|
+
if (y > 0) scrollBridge.scrollStartY = -1
|
|
131
|
+
lastEmittedScrollOffset.current = y
|
|
132
|
+
onScroll?.({
|
|
133
|
+
nativeEvent: {
|
|
134
|
+
contentOffset: {
|
|
135
|
+
x: node.scrollLeft,
|
|
136
|
+
y,
|
|
137
|
+
},
|
|
138
|
+
contentSize: {
|
|
139
|
+
height: node.scrollHeight,
|
|
140
|
+
width: node.scrollWidth,
|
|
141
|
+
},
|
|
142
|
+
layoutMeasurement: {
|
|
143
|
+
height: node.offsetHeight,
|
|
144
|
+
width: node.offsetWidth,
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
timeStamp: Date.now(),
|
|
148
|
+
} as any)
|
|
149
|
+
},
|
|
150
|
+
[onScroll, scrollBridge]
|
|
151
|
+
)
|
|
152
|
+
|
|
112
153
|
const scrollFocusedInputClearOfKeyboard = React.useCallback(() => {
|
|
113
154
|
if (!isWeb || !hasFit || !isKeyboardVisible || keyboardOccludedHeight <= 0) {
|
|
114
155
|
return
|
|
@@ -206,6 +247,7 @@ export const SheetScrollView = React.forwardRef<
|
|
|
206
247
|
hasScrollableContent,
|
|
207
248
|
scrollEnabled,
|
|
208
249
|
setScrollEnabled,
|
|
250
|
+
onManualScroll: emitManualScroll,
|
|
209
251
|
})
|
|
210
252
|
|
|
211
253
|
// content wrapper for measuring height
|
|
@@ -259,25 +301,30 @@ export const SheetScrollView = React.forwardRef<
|
|
|
259
301
|
animated: false,
|
|
260
302
|
})
|
|
261
303
|
}
|
|
304
|
+
currentScrollOffset.current = scrollBridge.scrollLockY
|
|
262
305
|
scrollBridge.y = scrollBridge.scrollLockY
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
...e
|
|
267
|
-
|
|
268
|
-
...e.nativeEvent
|
|
269
|
-
|
|
306
|
+
if (lastEmittedScrollOffset.current !== scrollBridge.scrollLockY) {
|
|
307
|
+
lastEmittedScrollOffset.current = scrollBridge.scrollLockY
|
|
308
|
+
onScroll?.({
|
|
309
|
+
...e,
|
|
310
|
+
nativeEvent: {
|
|
311
|
+
...e.nativeEvent,
|
|
312
|
+
contentOffset: {
|
|
313
|
+
...e.nativeEvent.contentOffset,
|
|
314
|
+
y: scrollBridge.scrollLockY,
|
|
315
|
+
},
|
|
270
316
|
},
|
|
271
|
-
}
|
|
272
|
-
}
|
|
317
|
+
})
|
|
318
|
+
}
|
|
273
319
|
return
|
|
274
320
|
}
|
|
275
321
|
|
|
276
322
|
scrollBridge.y = y
|
|
277
323
|
if (y > 0) scrollBridge.scrollStartY = -1
|
|
324
|
+
lastEmittedScrollOffset.current = y
|
|
278
325
|
onScroll?.(e)
|
|
279
326
|
}}
|
|
280
|
-
contentContainerStyle={
|
|
327
|
+
contentContainerStyle={contentContainerStyle}
|
|
281
328
|
bounces={false}
|
|
282
329
|
keyboardShouldPersistTaps="always"
|
|
283
330
|
keyboardDismissMode="none"
|
|
@@ -306,9 +353,10 @@ export const SheetScrollView = React.forwardRef<
|
|
|
306
353
|
currentScrollOffset.current = y
|
|
307
354
|
scrollBridge.y = y
|
|
308
355
|
if (y > 0) scrollBridge.scrollStartY = -1
|
|
356
|
+
lastEmittedScrollOffset.current = y
|
|
309
357
|
onScroll?.(e)
|
|
310
358
|
}}
|
|
311
|
-
contentContainerStyle={
|
|
359
|
+
contentContainerStyle={contentContainerStyle}
|
|
312
360
|
{...gestureProps}
|
|
313
361
|
{...props}
|
|
314
362
|
{...keyboardFrozenOverride}
|
package/src/gestureState.ts
CHANGED
|
@@ -7,16 +7,36 @@ import { getGestureHandler, type GestureState } from '@tamagui/native'
|
|
|
7
7
|
|
|
8
8
|
export type { GestureState as GestureHandlerState } from '@tamagui/native'
|
|
9
9
|
|
|
10
|
+
const SHEET_GESTURE_STATE_KEY = '__tamagui_sheet_gesture_state__'
|
|
11
|
+
|
|
12
|
+
function getSheetGestureHandlerState(): GestureState {
|
|
13
|
+
const g = globalThis as typeof globalThis & {
|
|
14
|
+
[SHEET_GESTURE_STATE_KEY]?: GestureState
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return g[SHEET_GESTURE_STATE_KEY] ?? getGestureHandler().state
|
|
18
|
+
}
|
|
19
|
+
|
|
10
20
|
// backward compat helpers
|
|
11
21
|
export function isGestureHandlerEnabled(): boolean {
|
|
12
|
-
return
|
|
22
|
+
return getSheetGestureHandlerState().enabled
|
|
13
23
|
}
|
|
14
24
|
|
|
15
25
|
export function getGestureHandlerState(): GestureState {
|
|
16
|
-
return
|
|
26
|
+
return getSheetGestureHandlerState()
|
|
17
27
|
}
|
|
18
28
|
|
|
19
29
|
export function setGestureHandlerState(updates: Partial<GestureState>): void {
|
|
30
|
+
const g = globalThis as typeof globalThis & {
|
|
31
|
+
[SHEET_GESTURE_STATE_KEY]?: GestureState
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const sheetState = g[SHEET_GESTURE_STATE_KEY]
|
|
35
|
+
if (sheetState) {
|
|
36
|
+
Object.assign(sheetState, updates)
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
|
|
20
40
|
getGestureHandler().set(updates)
|
|
21
41
|
}
|
|
22
42
|
|
package/src/index.ts
CHANGED
|
@@ -9,3 +9,7 @@ export * from './SheetScrollView'
|
|
|
9
9
|
export * from './nativeSheet'
|
|
10
10
|
export * from './types'
|
|
11
11
|
export * from './contexts'
|
|
12
|
+
export {
|
|
13
|
+
getGestureHandlerState as unstable_getSheetGestureHandlerState,
|
|
14
|
+
isGestureHandlerEnabled as unstable_isSheetGestureHandlerEnabled,
|
|
15
|
+
} from './gestureState'
|
|
@@ -4,8 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
import { getGestureHandler } from '@tamagui/native'
|
|
6
6
|
|
|
7
|
+
import type { GestureState } from '@tamagui/native'
|
|
8
|
+
|
|
9
|
+
const SHEET_GESTURE_STATE_KEY = '__tamagui_sheet_gesture_state__'
|
|
10
|
+
|
|
7
11
|
export function isGestureHandlerEnabled(): boolean {
|
|
8
|
-
|
|
12
|
+
const g = globalThis as typeof globalThis & {
|
|
13
|
+
[SHEET_GESTURE_STATE_KEY]?: GestureState
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return g[SHEET_GESTURE_STATE_KEY]?.enabled ?? getGestureHandler().isEnabled
|
|
9
17
|
}
|
|
10
18
|
|
|
11
19
|
export interface SetupGestureHandlerConfig {
|
|
@@ -24,11 +32,12 @@ export function setupGestureHandler(config: SetupGestureHandlerConfig): void {
|
|
|
24
32
|
const { Gesture, GestureDetector, ScrollView } = config
|
|
25
33
|
|
|
26
34
|
if (Gesture && GestureDetector) {
|
|
27
|
-
|
|
35
|
+
g[SHEET_GESTURE_STATE_KEY] = {
|
|
28
36
|
enabled: true,
|
|
29
37
|
Gesture,
|
|
30
38
|
GestureDetector,
|
|
31
39
|
ScrollView: ScrollView || null,
|
|
32
|
-
|
|
40
|
+
RootView: null,
|
|
41
|
+
} satisfies GestureState
|
|
33
42
|
}
|
|
34
43
|
}
|
package/src/types.tsx
CHANGED
|
@@ -126,6 +126,9 @@ export type ScrollBridge = {
|
|
|
126
126
|
_lastTouchY?: number
|
|
127
127
|
// scroll lock position for forcing scroll back when pan handles
|
|
128
128
|
scrollLockY?: number
|
|
129
|
+
// keep scroll locked while a drag that started below the top snap is still
|
|
130
|
+
// deciding whether to hand off into content scrolling.
|
|
131
|
+
lockScrollAtTop?: boolean
|
|
129
132
|
// force scroll to position (compensates for async setNativeProps)
|
|
130
133
|
forceScrollTo?: (y: number) => void
|
|
131
134
|
// whether sheet is at top position (for scroll enable/disable)
|