react-native-screen-transitions 3.2.0 → 3.3.0-beta.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/README.md +1 -1
- package/lib/commonjs/shared/components/create-transition-aware-component.js +8 -2
- package/lib/commonjs/shared/components/create-transition-aware-component.js.map +1 -1
- package/lib/commonjs/shared/components/{root-transition-aware.js → screen-container.js} +28 -12
- package/lib/commonjs/shared/components/screen-container.js.map +1 -0
- package/lib/commonjs/shared/configs/presets.js +3 -3
- package/lib/commonjs/shared/configs/presets.js.map +1 -1
- package/lib/commonjs/shared/configs/specs.js +6 -1
- package/lib/commonjs/shared/configs/specs.js.map +1 -1
- package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js +36 -188
- package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js.map +1 -1
- package/lib/commonjs/shared/hooks/gestures/use-screen-gesture-handlers.js +334 -0
- package/lib/commonjs/shared/hooks/gestures/use-screen-gesture-handlers.js.map +1 -0
- package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js +47 -4
- package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
- package/lib/commonjs/shared/hooks/lifecycle/use-close-transition.js +3 -3
- package/lib/commonjs/shared/hooks/lifecycle/use-close-transition.js.map +1 -1
- package/lib/commonjs/shared/hooks/lifecycle/use-open-transition.js +25 -3
- package/lib/commonjs/shared/hooks/lifecycle/use-open-transition.js.map +1 -1
- package/lib/commonjs/shared/hooks/navigation/use-screen-state.js +61 -2
- package/lib/commonjs/shared/hooks/navigation/use-screen-state.js.map +1 -1
- package/lib/commonjs/shared/hooks/use-backdrop-pointer-events.js +32 -0
- package/lib/commonjs/shared/hooks/use-backdrop-pointer-events.js.map +1 -0
- package/lib/commonjs/shared/providers/gestures.provider.js +4 -2
- package/lib/commonjs/shared/providers/gestures.provider.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/screen-composer.js +2 -2
- package/lib/commonjs/shared/providers/screen/screen-composer.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/styles.provider.js +41 -32
- package/lib/commonjs/shared/providers/screen/styles.provider.js.map +1 -1
- package/lib/commonjs/shared/utils/animation/{start-screen-transition.js → animate-to-progress.js} +11 -7
- package/lib/commonjs/shared/utils/animation/animate-to-progress.js.map +1 -0
- package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js +71 -0
- package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js.map +1 -1
- package/lib/commonjs/shared/utils/gesture/determine-snap-target.js +56 -0
- package/lib/commonjs/shared/utils/gesture/determine-snap-target.js.map +1 -0
- package/lib/commonjs/shared/utils/gesture/validate-snap-points.js +31 -0
- package/lib/commonjs/shared/utils/gesture/validate-snap-points.js.map +1 -0
- package/lib/commonjs/shared/utils/gesture/velocity.js +11 -0
- package/lib/commonjs/shared/utils/gesture/velocity.js.map +1 -1
- package/lib/module/shared/components/create-transition-aware-component.js +8 -2
- package/lib/module/shared/components/create-transition-aware-component.js.map +1 -1
- package/lib/module/shared/components/screen-container.js +64 -0
- package/lib/module/shared/components/screen-container.js.map +1 -0
- package/lib/module/shared/configs/presets.js +3 -3
- package/lib/module/shared/configs/presets.js.map +1 -1
- package/lib/module/shared/configs/specs.js +5 -0
- package/lib/module/shared/configs/specs.js.map +1 -1
- package/lib/module/shared/hooks/gestures/use-build-gestures.js +36 -187
- package/lib/module/shared/hooks/gestures/use-build-gestures.js.map +1 -1
- package/lib/module/shared/hooks/gestures/use-screen-gesture-handlers.js +328 -0
- package/lib/module/shared/hooks/gestures/use-screen-gesture-handlers.js.map +1 -0
- package/lib/module/shared/hooks/gestures/use-scroll-registry.js +47 -4
- package/lib/module/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
- package/lib/module/shared/hooks/lifecycle/use-close-transition.js +3 -3
- package/lib/module/shared/hooks/lifecycle/use-close-transition.js.map +1 -1
- package/lib/module/shared/hooks/lifecycle/use-open-transition.js +25 -3
- package/lib/module/shared/hooks/lifecycle/use-open-transition.js.map +1 -1
- package/lib/module/shared/hooks/navigation/use-screen-state.js +63 -4
- package/lib/module/shared/hooks/navigation/use-screen-state.js.map +1 -1
- package/lib/module/shared/hooks/use-backdrop-pointer-events.js +28 -0
- package/lib/module/shared/hooks/use-backdrop-pointer-events.js.map +1 -0
- package/lib/module/shared/providers/gestures.provider.js +4 -2
- package/lib/module/shared/providers/gestures.provider.js.map +1 -1
- package/lib/module/shared/providers/screen/screen-composer.js +2 -2
- package/lib/module/shared/providers/screen/screen-composer.js.map +1 -1
- package/lib/module/shared/providers/screen/styles.provider.js +41 -32
- package/lib/module/shared/providers/screen/styles.provider.js.map +1 -1
- package/lib/module/shared/utils/animation/{start-screen-transition.js → animate-to-progress.js} +9 -5
- package/lib/module/shared/utils/animation/animate-to-progress.js.map +1 -0
- package/lib/module/shared/utils/gesture/check-gesture-activation.js +70 -0
- package/lib/module/shared/utils/gesture/check-gesture-activation.js.map +1 -1
- package/lib/module/shared/utils/gesture/determine-snap-target.js +52 -0
- package/lib/module/shared/utils/gesture/determine-snap-target.js.map +1 -0
- package/lib/module/shared/utils/gesture/validate-snap-points.js +26 -0
- package/lib/module/shared/utils/gesture/validate-snap-points.js.map +1 -0
- package/lib/module/shared/utils/gesture/velocity.js +11 -0
- package/lib/module/shared/utils/gesture/velocity.js.map +1 -1
- package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
- package/lib/typescript/shared/components/screen-container.d.ts +6 -0
- package/lib/typescript/shared/components/screen-container.d.ts.map +1 -0
- package/lib/typescript/shared/configs/specs.d.ts +1 -0
- package/lib/typescript/shared/configs/specs.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts +1 -1
- package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/gestures/use-screen-gesture-handlers.d.ts +34 -0
- package/lib/typescript/shared/hooks/gestures/use-screen-gesture-handlers.d.ts.map +1 -0
- package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts +5 -1
- package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/lifecycle/use-open-transition.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/navigation/use-screen-state.d.ts +14 -0
- package/lib/typescript/shared/hooks/navigation/use-screen-state.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/use-backdrop-pointer-events.d.ts +15 -0
- package/lib/typescript/shared/hooks/use-backdrop-pointer-events.d.ts.map +1 -0
- package/lib/typescript/shared/providers/gestures.provider.d.ts +1 -0
- package/lib/typescript/shared/providers/gestures.provider.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/styles.provider.d.ts.map +1 -1
- package/lib/typescript/shared/types/animation.types.d.ts +28 -2
- package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
- package/lib/typescript/shared/types/screen.types.d.ts +26 -0
- package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
- package/lib/typescript/shared/utils/animation/animate-to-progress.d.ts +19 -0
- package/lib/typescript/shared/utils/animation/animate-to-progress.d.ts.map +1 -0
- package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts +24 -0
- package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts.map +1 -1
- package/lib/typescript/shared/utils/gesture/determine-snap-target.d.ts +26 -0
- package/lib/typescript/shared/utils/gesture/determine-snap-target.d.ts.map +1 -0
- package/lib/typescript/shared/utils/gesture/validate-snap-points.d.ts +13 -0
- package/lib/typescript/shared/utils/gesture/validate-snap-points.d.ts.map +1 -0
- package/lib/typescript/shared/utils/gesture/velocity.d.ts +1 -0
- package/lib/typescript/shared/utils/gesture/velocity.d.ts.map +1 -1
- package/package.json +29 -2
- package/src/shared/__tests__/determine-snap-target.test.ts +268 -0
- package/src/shared/__tests__/gesture-activation.test.ts +247 -0
- package/src/shared/__tests__/validate-snap-points.test.ts +125 -0
- package/src/shared/components/create-transition-aware-component.tsx +11 -1
- package/src/shared/components/screen-container.tsx +65 -0
- package/src/shared/configs/presets.ts +3 -3
- package/src/shared/configs/specs.ts +6 -0
- package/src/shared/hooks/gestures/use-build-gestures.tsx +33 -253
- package/src/shared/hooks/gestures/use-screen-gesture-handlers.ts +436 -0
- package/src/shared/hooks/gestures/use-scroll-registry.tsx +52 -1
- package/src/shared/hooks/lifecycle/use-close-transition.ts +3 -3
- package/src/shared/hooks/lifecycle/use-open-transition.ts +27 -3
- package/src/shared/hooks/navigation/use-screen-state.tsx +106 -2
- package/src/shared/hooks/use-backdrop-pointer-events.ts +32 -0
- package/src/shared/providers/gestures.provider.tsx +3 -2
- package/src/shared/providers/screen/screen-composer.tsx +2 -2
- package/src/shared/providers/screen/styles.provider.tsx +40 -34
- package/src/shared/types/animation.types.ts +29 -2
- package/src/shared/types/screen.types.ts +29 -0
- package/src/shared/utils/animation/{start-screen-transition.ts → animate-to-progress.ts} +19 -7
- package/src/shared/utils/gesture/check-gesture-activation.ts +78 -0
- package/src/shared/utils/gesture/determine-snap-target.ts +75 -0
- package/src/shared/utils/gesture/validate-snap-points.ts +37 -0
- package/src/shared/utils/gesture/velocity.ts +10 -0
- package/lib/commonjs/shared/components/root-transition-aware.js.map +0 -1
- package/lib/commonjs/shared/hooks/use-stack-pointer-events.js +0 -23
- package/lib/commonjs/shared/hooks/use-stack-pointer-events.js.map +0 -1
- package/lib/commonjs/shared/utils/animation/start-screen-transition.js.map +0 -1
- package/lib/module/shared/components/root-transition-aware.js +0 -48
- package/lib/module/shared/components/root-transition-aware.js.map +0 -1
- package/lib/module/shared/hooks/use-stack-pointer-events.js +0 -20
- package/lib/module/shared/hooks/use-stack-pointer-events.js.map +0 -1
- package/lib/module/shared/utils/animation/start-screen-transition.js.map +0 -1
- package/lib/typescript/shared/components/root-transition-aware.d.ts +0 -6
- package/lib/typescript/shared/components/root-transition-aware.d.ts.map +0 -1
- package/lib/typescript/shared/hooks/use-stack-pointer-events.d.ts +0 -10
- package/lib/typescript/shared/hooks/use-stack-pointer-events.d.ts.map +0 -1
- package/lib/typescript/shared/utils/animation/start-screen-transition.d.ts +0 -13
- package/lib/typescript/shared/utils/animation/start-screen-transition.d.ts.map +0 -1
- package/src/shared/components/root-transition-aware.tsx +0 -49
- package/src/shared/hooks/use-stack-pointer-events.ts +0 -15
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { useSharedValue } from "react-native-reanimated";
|
|
5
|
+
import { DefaultSnapSpec } from "../../configs/specs";
|
|
6
|
+
import { FALSE, TRUE } from "../../constants";
|
|
7
|
+
import { GestureOffsetState } from "../../types/gesture.types";
|
|
8
|
+
import { animateToProgress } from "../../utils/animation/animate-to-progress";
|
|
9
|
+
import { applyOffsetRules, checkScrollAwareActivation } from "../../utils/gesture/check-gesture-activation";
|
|
10
|
+
import { determineDismissal } from "../../utils/gesture/determine-dismissal";
|
|
11
|
+
import { determineSnapTarget } from "../../utils/gesture/determine-snap-target";
|
|
12
|
+
import { mapGestureToProgress } from "../../utils/gesture/map-gesture-to-progress";
|
|
13
|
+
import { resetGestureValues } from "../../utils/gesture/reset-gesture-values";
|
|
14
|
+
import { validateSnapPoints } from "../../utils/gesture/validate-snap-points";
|
|
15
|
+
import { velocity } from "../../utils/gesture/velocity";
|
|
16
|
+
import useStableCallbackValue from "../use-stable-callback-value";
|
|
17
|
+
export const useScreenGestureHandlers = ({
|
|
18
|
+
dimensions,
|
|
19
|
+
animations,
|
|
20
|
+
gestureAnimationValues,
|
|
21
|
+
gestureDirection,
|
|
22
|
+
gestureDrivesProgress,
|
|
23
|
+
gestureVelocityImpact,
|
|
24
|
+
scrollConfig,
|
|
25
|
+
gestureActivationArea,
|
|
26
|
+
gestureResponseDistance,
|
|
27
|
+
ancestorIsDismissing,
|
|
28
|
+
snapPoints: rawSnapPoints,
|
|
29
|
+
canDismiss,
|
|
30
|
+
transitionSpec,
|
|
31
|
+
handleDismiss
|
|
32
|
+
}) => {
|
|
33
|
+
const {
|
|
34
|
+
hasSnapPoints,
|
|
35
|
+
snapPoints,
|
|
36
|
+
minSnapPoint,
|
|
37
|
+
maxSnapPoint
|
|
38
|
+
} = useMemo(() => validateSnapPoints({
|
|
39
|
+
snapPoints: rawSnapPoints,
|
|
40
|
+
canDismiss
|
|
41
|
+
}), [rawSnapPoints, canDismiss]);
|
|
42
|
+
const directions = useMemo(() => {
|
|
43
|
+
const directionsArray = Array.isArray(gestureDirection) ? gestureDirection : [gestureDirection];
|
|
44
|
+
const isBidirectional = directionsArray.includes("bidirectional");
|
|
45
|
+
const hasHorizontalDirection = directionsArray.includes("horizontal") || directionsArray.includes("horizontal-inverted");
|
|
46
|
+
const isSnapAxisInverted = hasHorizontalDirection ? directionsArray.includes("horizontal-inverted") && !directionsArray.includes("horizontal") : directionsArray.includes("vertical-inverted") && !directionsArray.includes("vertical");
|
|
47
|
+
const enableBothVertical = isBidirectional || hasSnapPoints && !hasHorizontalDirection;
|
|
48
|
+
const enableBothHorizontal = isBidirectional || hasSnapPoints && hasHorizontalDirection;
|
|
49
|
+
return {
|
|
50
|
+
vertical: directionsArray.includes("vertical") || enableBothVertical,
|
|
51
|
+
verticalInverted: directionsArray.includes("vertical-inverted") || enableBothVertical,
|
|
52
|
+
horizontal: directionsArray.includes("horizontal") || enableBothHorizontal,
|
|
53
|
+
horizontalInverted: directionsArray.includes("horizontal-inverted") || enableBothHorizontal,
|
|
54
|
+
snapAxisInverted: hasSnapPoints && isSnapAxisInverted
|
|
55
|
+
};
|
|
56
|
+
}, [gestureDirection, hasSnapPoints]);
|
|
57
|
+
const snapAxis = directions.horizontal || directions.horizontalInverted ? "horizontal" : "vertical";
|
|
58
|
+
const initialTouch = useSharedValue({
|
|
59
|
+
x: 0,
|
|
60
|
+
y: 0
|
|
61
|
+
});
|
|
62
|
+
const gestureOffsetState = useSharedValue(GestureOffsetState.PENDING);
|
|
63
|
+
const gestureStartProgress = useSharedValue(1);
|
|
64
|
+
const onTouchesDown = useStableCallbackValue(e => {
|
|
65
|
+
"worklet";
|
|
66
|
+
|
|
67
|
+
const firstTouch = e.changedTouches[0];
|
|
68
|
+
initialTouch.value = {
|
|
69
|
+
x: firstTouch.x,
|
|
70
|
+
y: firstTouch.y
|
|
71
|
+
};
|
|
72
|
+
gestureOffsetState.value = GestureOffsetState.PENDING;
|
|
73
|
+
});
|
|
74
|
+
const onTouchesMove = useStableCallbackValue((e, manager) => {
|
|
75
|
+
"worklet";
|
|
76
|
+
|
|
77
|
+
// If an ancestor navigator is already dismissing via gesture, block new gestures here.
|
|
78
|
+
if (ancestorIsDismissing?.value) {
|
|
79
|
+
gestureOffsetState.set(GestureOffsetState.FAILED);
|
|
80
|
+
manager.fail();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const touch = e.changedTouches[0];
|
|
84
|
+
const {
|
|
85
|
+
isSwipingDown,
|
|
86
|
+
isSwipingUp,
|
|
87
|
+
isSwipingRight,
|
|
88
|
+
isSwipingLeft
|
|
89
|
+
} = applyOffsetRules({
|
|
90
|
+
touch,
|
|
91
|
+
directions,
|
|
92
|
+
manager,
|
|
93
|
+
dimensions,
|
|
94
|
+
gestureOffsetState,
|
|
95
|
+
initialTouch: initialTouch.value,
|
|
96
|
+
activationArea: gestureActivationArea,
|
|
97
|
+
responseDistance: gestureResponseDistance
|
|
98
|
+
});
|
|
99
|
+
if (gestureOffsetState.value === GestureOffsetState.FAILED) {
|
|
100
|
+
manager.fail();
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Keep pending until thresholds are met; no eager activation.
|
|
105
|
+
if (gestureAnimationValues.isDragging?.value) {
|
|
106
|
+
manager.activate();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const recognizedDirection = isSwipingDown || isSwipingUp || isSwipingRight || isSwipingLeft;
|
|
110
|
+
const scrollCfg = scrollConfig.value;
|
|
111
|
+
const isTouchingScrollView = scrollCfg?.isTouched ?? false;
|
|
112
|
+
if (!isTouchingScrollView) {
|
|
113
|
+
// Early return if gesture hasn't met activation criteria
|
|
114
|
+
const canActivate = recognizedDirection && gestureOffsetState.value === GestureOffsetState.PASSED && !gestureAnimationValues.isDismissing?.value;
|
|
115
|
+
if (!canActivate) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (isSwipingDown) {
|
|
119
|
+
gestureAnimationValues.direction.set("vertical");
|
|
120
|
+
} else if (isSwipingUp) {
|
|
121
|
+
gestureAnimationValues.direction.set("vertical-inverted");
|
|
122
|
+
} else if (isSwipingRight) {
|
|
123
|
+
gestureAnimationValues.direction.set("horizontal");
|
|
124
|
+
} else if (isSwipingLeft) {
|
|
125
|
+
gestureAnimationValues.direction.set("horizontal-inverted");
|
|
126
|
+
}
|
|
127
|
+
manager.activate();
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Touch IS on ScrollView - apply scroll-aware rules
|
|
132
|
+
const scrollX = scrollCfg?.x ?? 0;
|
|
133
|
+
const scrollY = scrollCfg?.y ?? 0;
|
|
134
|
+
const maxScrollX = scrollCfg?.contentWidth ? scrollCfg.contentWidth - scrollCfg.layoutWidth : 0;
|
|
135
|
+
const maxScrollY = scrollCfg?.contentHeight ? scrollCfg.contentHeight - scrollCfg.layoutHeight : 0;
|
|
136
|
+
|
|
137
|
+
// Snap mode: determine if sheet can still expand
|
|
138
|
+
const canExpandMore = hasSnapPoints && animations.progress.value < maxSnapPoint - 0.01;
|
|
139
|
+
const {
|
|
140
|
+
shouldActivate,
|
|
141
|
+
direction: activatedDirection
|
|
142
|
+
} = checkScrollAwareActivation({
|
|
143
|
+
swipeInfo: {
|
|
144
|
+
isSwipingDown,
|
|
145
|
+
isSwipingUp,
|
|
146
|
+
isSwipingRight,
|
|
147
|
+
isSwipingLeft
|
|
148
|
+
},
|
|
149
|
+
directions,
|
|
150
|
+
scrollX,
|
|
151
|
+
scrollY,
|
|
152
|
+
maxScrollX,
|
|
153
|
+
maxScrollY,
|
|
154
|
+
hasSnapPoints,
|
|
155
|
+
canExpandMore
|
|
156
|
+
});
|
|
157
|
+
if (recognizedDirection && !shouldActivate) {
|
|
158
|
+
manager.fail();
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (shouldActivate && gestureOffsetState.value === GestureOffsetState.PASSED && !gestureAnimationValues.isDismissing?.value) {
|
|
162
|
+
gestureAnimationValues.direction.value = activatedDirection;
|
|
163
|
+
manager.activate();
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
const onStart = useStableCallbackValue(() => {
|
|
168
|
+
"worklet";
|
|
169
|
+
|
|
170
|
+
gestureAnimationValues.isDragging.value = TRUE;
|
|
171
|
+
gestureAnimationValues.isDismissing.value = FALSE;
|
|
172
|
+
gestureStartProgress.value = animations.progress.value;
|
|
173
|
+
});
|
|
174
|
+
const onUpdate = useStableCallbackValue(event => {
|
|
175
|
+
"worklet";
|
|
176
|
+
|
|
177
|
+
const {
|
|
178
|
+
translationX,
|
|
179
|
+
translationY
|
|
180
|
+
} = event;
|
|
181
|
+
const {
|
|
182
|
+
width,
|
|
183
|
+
height
|
|
184
|
+
} = dimensions;
|
|
185
|
+
|
|
186
|
+
// Update gesture values (shared across all modes)
|
|
187
|
+
gestureAnimationValues.x.value = translationX;
|
|
188
|
+
gestureAnimationValues.y.value = translationY;
|
|
189
|
+
gestureAnimationValues.normalizedX.value = velocity.normalizeTranslation(translationX, width);
|
|
190
|
+
gestureAnimationValues.normalizedY.value = velocity.normalizeTranslation(translationY, height);
|
|
191
|
+
if (hasSnapPoints && gestureDrivesProgress) {
|
|
192
|
+
// Snap mode: bidirectional tracking on snap axis
|
|
193
|
+
const isHorizontal = snapAxis === "horizontal";
|
|
194
|
+
const translation = isHorizontal ? translationX : translationY;
|
|
195
|
+
const dimension = isHorizontal ? width : height;
|
|
196
|
+
|
|
197
|
+
// Map translation to progress delta:
|
|
198
|
+
// - Positive translation (down/right) = decrease progress (dismiss)
|
|
199
|
+
// - Negative translation (up/left) = increase progress (expand)
|
|
200
|
+
// Inverted directions flip this behavior
|
|
201
|
+
const baseSign = -1;
|
|
202
|
+
const sign = directions.snapAxisInverted ? -baseSign : baseSign;
|
|
203
|
+
const progressDelta = sign * translation / dimension;
|
|
204
|
+
|
|
205
|
+
// Use pre-computed bounds (minSnapPoint already accounts for canDismiss)
|
|
206
|
+
animations.progress.value = Math.max(minSnapPoint, Math.min(maxSnapPoint, gestureStartProgress.value + progressDelta));
|
|
207
|
+
} else if (gestureDrivesProgress) {
|
|
208
|
+
// Standard mode: find max progress across allowed directions
|
|
209
|
+
const axes = [{
|
|
210
|
+
enabled: directions.horizontal,
|
|
211
|
+
translation: translationX,
|
|
212
|
+
dimension: width,
|
|
213
|
+
sign: 1
|
|
214
|
+
}, {
|
|
215
|
+
enabled: directions.horizontalInverted,
|
|
216
|
+
translation: translationX,
|
|
217
|
+
dimension: width,
|
|
218
|
+
sign: -1
|
|
219
|
+
}, {
|
|
220
|
+
enabled: directions.vertical,
|
|
221
|
+
translation: translationY,
|
|
222
|
+
dimension: height,
|
|
223
|
+
sign: 1
|
|
224
|
+
}, {
|
|
225
|
+
enabled: directions.verticalInverted,
|
|
226
|
+
translation: translationY,
|
|
227
|
+
dimension: height,
|
|
228
|
+
sign: -1
|
|
229
|
+
}];
|
|
230
|
+
let maxProgress = 0;
|
|
231
|
+
for (const axis of axes) {
|
|
232
|
+
if (axis.enabled && axis.translation * axis.sign > 0) {
|
|
233
|
+
const progress = mapGestureToProgress(Math.abs(axis.translation), axis.dimension);
|
|
234
|
+
maxProgress = Math.max(maxProgress, progress);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
animations.progress.value = Math.max(0, Math.min(1, gestureStartProgress.value - maxProgress));
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
const onEnd = useStableCallbackValue(event => {
|
|
241
|
+
"worklet";
|
|
242
|
+
|
|
243
|
+
if (hasSnapPoints) {
|
|
244
|
+
const isHorizontal = snapAxis === "horizontal";
|
|
245
|
+
const axisVelocity = isHorizontal ? event.velocityX : event.velocityY;
|
|
246
|
+
const axisDimension = isHorizontal ? dimensions.width : dimensions.height;
|
|
247
|
+
|
|
248
|
+
// determineSnapTarget expects positive velocity = toward dismiss (decreasing progress)
|
|
249
|
+
// Positive velocity (down/right) = dismiss for non-inverted
|
|
250
|
+
// Inverted directions need velocity flipped
|
|
251
|
+
const snapVelocity = directions.snapAxisInverted ? -axisVelocity : axisVelocity;
|
|
252
|
+
const result = determineSnapTarget({
|
|
253
|
+
currentProgress: animations.progress.value,
|
|
254
|
+
snapPoints,
|
|
255
|
+
velocity: snapVelocity,
|
|
256
|
+
dimension: axisDimension,
|
|
257
|
+
canDismiss: canDismiss
|
|
258
|
+
});
|
|
259
|
+
const shouldDismiss = result.shouldDismiss;
|
|
260
|
+
const targetProgress = result.targetProgress;
|
|
261
|
+
const isSnapping = !shouldDismiss;
|
|
262
|
+
const spec = shouldDismiss ? transitionSpec?.close : transitionSpec?.open;
|
|
263
|
+
const effectiveSpec = isSnapping ? {
|
|
264
|
+
open: transitionSpec?.expand ?? DefaultSnapSpec,
|
|
265
|
+
close: transitionSpec?.collapse ?? DefaultSnapSpec
|
|
266
|
+
} : transitionSpec;
|
|
267
|
+
resetGestureValues({
|
|
268
|
+
spec,
|
|
269
|
+
gestures: gestureAnimationValues,
|
|
270
|
+
shouldDismiss,
|
|
271
|
+
event,
|
|
272
|
+
dimensions
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
// For snap transitions, velocity should match gesture direction
|
|
276
|
+
// Positive gesture velocity (down/right) = collapsing (negative progress velocity)
|
|
277
|
+
// Inverted directions flip this
|
|
278
|
+
const velocitySign = directions.snapAxisInverted ? 1 : -1;
|
|
279
|
+
const initialVelocity = velocitySign * velocity.normalize(axisVelocity, axisDimension);
|
|
280
|
+
animateToProgress({
|
|
281
|
+
target: targetProgress,
|
|
282
|
+
onAnimationFinish: shouldDismiss ? handleDismiss : undefined,
|
|
283
|
+
spec: effectiveSpec,
|
|
284
|
+
animations,
|
|
285
|
+
initialVelocity
|
|
286
|
+
});
|
|
287
|
+
} else {
|
|
288
|
+
// Standard mode: use determineDismissal
|
|
289
|
+
const result = determineDismissal({
|
|
290
|
+
event,
|
|
291
|
+
directions,
|
|
292
|
+
dimensions,
|
|
293
|
+
gestureVelocityImpact
|
|
294
|
+
});
|
|
295
|
+
const shouldDismiss = result.shouldDismiss;
|
|
296
|
+
const targetProgress = shouldDismiss ? 0 : gestureStartProgress.value;
|
|
297
|
+
resetGestureValues({
|
|
298
|
+
spec: shouldDismiss ? transitionSpec?.close : transitionSpec?.open,
|
|
299
|
+
gestures: gestureAnimationValues,
|
|
300
|
+
shouldDismiss,
|
|
301
|
+
event,
|
|
302
|
+
dimensions
|
|
303
|
+
});
|
|
304
|
+
const initialVelocity = velocity.calculateProgressVelocity({
|
|
305
|
+
animations,
|
|
306
|
+
shouldDismiss,
|
|
307
|
+
event,
|
|
308
|
+
dimensions,
|
|
309
|
+
directions
|
|
310
|
+
});
|
|
311
|
+
animateToProgress({
|
|
312
|
+
target: targetProgress,
|
|
313
|
+
onAnimationFinish: shouldDismiss ? handleDismiss : undefined,
|
|
314
|
+
spec: transitionSpec,
|
|
315
|
+
animations,
|
|
316
|
+
initialVelocity
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
return {
|
|
321
|
+
onTouchesDown,
|
|
322
|
+
onTouchesMove,
|
|
323
|
+
onStart,
|
|
324
|
+
onUpdate,
|
|
325
|
+
onEnd
|
|
326
|
+
};
|
|
327
|
+
};
|
|
328
|
+
//# sourceMappingURL=use-screen-gesture-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useSharedValue","DefaultSnapSpec","FALSE","TRUE","GestureOffsetState","animateToProgress","applyOffsetRules","checkScrollAwareActivation","determineDismissal","determineSnapTarget","mapGestureToProgress","resetGestureValues","validateSnapPoints","velocity","useStableCallbackValue","useScreenGestureHandlers","dimensions","animations","gestureAnimationValues","gestureDirection","gestureDrivesProgress","gestureVelocityImpact","scrollConfig","gestureActivationArea","gestureResponseDistance","ancestorIsDismissing","snapPoints","rawSnapPoints","canDismiss","transitionSpec","handleDismiss","hasSnapPoints","minSnapPoint","maxSnapPoint","directions","directionsArray","Array","isArray","isBidirectional","includes","hasHorizontalDirection","isSnapAxisInverted","enableBothVertical","enableBothHorizontal","vertical","verticalInverted","horizontal","horizontalInverted","snapAxisInverted","snapAxis","initialTouch","x","y","gestureOffsetState","PENDING","gestureStartProgress","onTouchesDown","e","firstTouch","changedTouches","value","onTouchesMove","manager","set","FAILED","fail","touch","isSwipingDown","isSwipingUp","isSwipingRight","isSwipingLeft","activationArea","responseDistance","isDragging","activate","recognizedDirection","scrollCfg","isTouchingScrollView","isTouched","canActivate","PASSED","isDismissing","direction","scrollX","scrollY","maxScrollX","contentWidth","layoutWidth","maxScrollY","contentHeight","layoutHeight","canExpandMore","progress","shouldActivate","activatedDirection","swipeInfo","onStart","onUpdate","event","translationX","translationY","width","height","normalizedX","normalizeTranslation","normalizedY","isHorizontal","translation","dimension","baseSign","sign","progressDelta","Math","max","min","axes","enabled","maxProgress","axis","abs","onEnd","axisVelocity","velocityX","velocityY","axisDimension","snapVelocity","result","currentProgress","shouldDismiss","targetProgress","isSnapping","spec","close","open","effectiveSpec","expand","collapse","gestures","velocitySign","initialVelocity","normalize","target","onAnimationFinish","undefined","calculateProgressVelocity"],"sourceRoot":"../../../../../src","sources":["shared/hooks/gestures/use-screen-gesture-handlers.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -36,7 +36,8 @@ export const useScrollRegistry = props => {
|
|
|
36
36
|
contentHeight: 0,
|
|
37
37
|
contentWidth: 0,
|
|
38
38
|
layoutHeight: 0,
|
|
39
|
-
layoutWidth: 0
|
|
39
|
+
layoutWidth: 0,
|
|
40
|
+
isTouched: true
|
|
40
41
|
};
|
|
41
42
|
}
|
|
42
43
|
v.x = event.contentOffset.x;
|
|
@@ -63,7 +64,8 @@ export const useScrollRegistry = props => {
|
|
|
63
64
|
layoutHeight: 0,
|
|
64
65
|
layoutWidth: 0,
|
|
65
66
|
contentWidth: width,
|
|
66
|
-
contentHeight: height
|
|
67
|
+
contentHeight: height,
|
|
68
|
+
isTouched: false
|
|
67
69
|
};
|
|
68
70
|
}
|
|
69
71
|
v.contentWidth = width;
|
|
@@ -91,7 +93,8 @@ export const useScrollRegistry = props => {
|
|
|
91
93
|
contentHeight: 0,
|
|
92
94
|
contentWidth: 0,
|
|
93
95
|
layoutHeight: height,
|
|
94
|
-
layoutWidth: width
|
|
96
|
+
layoutWidth: width,
|
|
97
|
+
isTouched: false
|
|
95
98
|
};
|
|
96
99
|
}
|
|
97
100
|
v.layoutHeight = height;
|
|
@@ -103,10 +106,50 @@ export const useScrollRegistry = props => {
|
|
|
103
106
|
ancestorConfig.modify(updateLayout);
|
|
104
107
|
}
|
|
105
108
|
});
|
|
109
|
+
const onTouchStart = useStableCallback(event => {
|
|
110
|
+
props.onTouchStart?.(event);
|
|
111
|
+
const setTouched = v => {
|
|
112
|
+
"worklet";
|
|
113
|
+
|
|
114
|
+
if (v === null) {
|
|
115
|
+
return {
|
|
116
|
+
x: 0,
|
|
117
|
+
y: 0,
|
|
118
|
+
contentHeight: 0,
|
|
119
|
+
contentWidth: 0,
|
|
120
|
+
layoutHeight: 0,
|
|
121
|
+
layoutWidth: 0,
|
|
122
|
+
isTouched: true
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
v.isTouched = true;
|
|
126
|
+
return v;
|
|
127
|
+
};
|
|
128
|
+
scrollConfig.modify(setTouched);
|
|
129
|
+
for (const ancestorConfig of ancestorScrollConfigs) {
|
|
130
|
+
ancestorConfig.modify(setTouched);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
const onTouchEnd = useStableCallback(event => {
|
|
134
|
+
props.onTouchEnd?.(event);
|
|
135
|
+
const clearTouched = v => {
|
|
136
|
+
"worklet";
|
|
137
|
+
|
|
138
|
+
if (v === null) return v;
|
|
139
|
+
v.isTouched = false;
|
|
140
|
+
return v;
|
|
141
|
+
};
|
|
142
|
+
scrollConfig.modify(clearTouched);
|
|
143
|
+
for (const ancestorConfig of ancestorScrollConfigs) {
|
|
144
|
+
ancestorConfig.modify(clearTouched);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
106
147
|
return {
|
|
107
148
|
scrollHandler,
|
|
108
149
|
onContentSizeChange,
|
|
109
|
-
onLayout
|
|
150
|
+
onLayout,
|
|
151
|
+
onTouchStart,
|
|
152
|
+
onTouchEnd
|
|
110
153
|
};
|
|
111
154
|
};
|
|
112
155
|
//# sourceMappingURL=use-scroll-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","useAnimatedScrollHandler","useGestureContext","useStableCallback","useScrollRegistry","props","context","scrollConfig","ancestorContext","ancestorScrollConfigs","configs","current","push","scrollHandler","onScroll","event","updateScrollPosition","v","x","contentOffset","y","contentHeight","contentWidth","layoutHeight","layoutWidth","modify","ancestorConfig","onContentSizeChange","width","height","updateContentSize","onLayout","nativeEvent","layout","updateLayout"],"sourceRoot":"../../../../../src","sources":["shared/hooks/gestures/use-scroll-registry.tsx"],"mappings":";;AAAA;;AAEA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,wBAAwB,QAAQ,yBAAyB;AAElE,SAASC,iBAAiB,QAAQ,mCAAmC;AACrE,OAAOC,iBAAiB,MAAM,wBAAwB;
|
|
1
|
+
{"version":3,"names":["useMemo","useAnimatedScrollHandler","useGestureContext","useStableCallback","useScrollRegistry","props","context","scrollConfig","ancestorContext","ancestorScrollConfigs","configs","current","push","scrollHandler","onScroll","event","updateScrollPosition","v","x","contentOffset","y","contentHeight","contentWidth","layoutHeight","layoutWidth","isTouched","modify","ancestorConfig","onContentSizeChange","width","height","updateContentSize","onLayout","nativeEvent","layout","updateLayout","onTouchStart","setTouched","onTouchEnd","clearTouched"],"sourceRoot":"../../../../../src","sources":["shared/hooks/gestures/use-scroll-registry.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@ import { useGestureContext } from "../../providers/gestures.provider";
|
|
|
6
6
|
import { useStackCoreContext } from "../../providers/stack/core.provider";
|
|
7
7
|
import { useManagedStackContext } from "../../providers/stack/managed.provider";
|
|
8
8
|
import { StackType } from "../../types/stack.types";
|
|
9
|
-
import {
|
|
9
|
+
import { animateToProgress } from "../../utils/animation/animate-to-progress";
|
|
10
10
|
import { resetStoresForScreen } from "../../utils/reset-stores-for-screen";
|
|
11
11
|
import { useSharedValueState } from "../reanimated/use-shared-value-state";
|
|
12
12
|
import useStableCallback from "../use-stable-callback";
|
|
@@ -37,7 +37,7 @@ const useManagedClose = ({
|
|
|
37
37
|
useAnimatedReaction(() => closingRouteKeysShared.value, keys => {
|
|
38
38
|
if (!keys?.includes(current.route.key)) return;
|
|
39
39
|
runOnJS(activate)();
|
|
40
|
-
|
|
40
|
+
animateToProgress({
|
|
41
41
|
target: "close",
|
|
42
42
|
spec: current.options.transitionSpec,
|
|
43
43
|
animations,
|
|
@@ -75,7 +75,7 @@ const useNativeStackClose = ({
|
|
|
75
75
|
}
|
|
76
76
|
e.preventDefault();
|
|
77
77
|
activate();
|
|
78
|
-
|
|
78
|
+
animateToProgress({
|
|
79
79
|
target: "close",
|
|
80
80
|
spec: current.options.transitionSpec,
|
|
81
81
|
animations,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useLayoutEffect","runOnJS","useAnimatedReaction","useDerivedValue","useGestureContext","useStackCoreContext","useManagedStackContext","StackType","
|
|
1
|
+
{"version":3,"names":["useLayoutEffect","runOnJS","useAnimatedReaction","useDerivedValue","useGestureContext","useStackCoreContext","useManagedStackContext","StackType","animateToProgress","resetStoresForScreen","useSharedValueState","useStableCallback","useManagedClose","current","animations","activate","deactivate","handleCloseRoute","closingRouteKeysShared","handleCloseEnd","finished","route","requestAnimationFrame","value","keys","includes","key","target","spec","options","transitionSpec","onAnimationFinish","useNativeStackClose","gestureCtx","isAncestorDismissingViaGesture","ancestorContext","gestureAnimationValues","isDismissing","handleBeforeRemove","e","isEnabled","enableTransitions","navigation","isFirstScreen","getState","index","closing","set","preventDefault","dispatch","data","action","addListener","useCloseTransition","flags","isNativeStack","STACK_TYPE","NATIVE","closeParams"],"sourceRoot":"../../../../../src","sources":["shared/hooks/lifecycle/use-close-transition.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useLayoutEffect } from "react";
|
|
4
|
-
import {
|
|
4
|
+
import { animateToProgress } from "../../utils/animation/animate-to-progress";
|
|
5
5
|
import { useHighRefreshRate } from "../animation/use-high-refresh-rate";
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Calculates the initial progress value based on snap points configuration.
|
|
9
|
+
*/
|
|
10
|
+
function getInitialProgress({
|
|
11
|
+
snapPoints,
|
|
12
|
+
initialSnapIndex
|
|
13
|
+
}) {
|
|
14
|
+
if (!snapPoints) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
const clampedIndex = Math.min(Math.max(0, initialSnapIndex), snapPoints.length - 1);
|
|
18
|
+
return snapPoints[clampedIndex];
|
|
19
|
+
}
|
|
20
|
+
|
|
7
21
|
/**
|
|
8
22
|
* Handles opening animation on mount.
|
|
9
23
|
* Returns activate/deactivate functions for high refresh rate.
|
|
@@ -16,9 +30,17 @@ export function useOpenTransition(current, animations) {
|
|
|
16
30
|
|
|
17
31
|
// biome-ignore lint/correctness/useExhaustiveDependencies: Must only run once on mount
|
|
18
32
|
useLayoutEffect(() => {
|
|
33
|
+
const {
|
|
34
|
+
snapPoints,
|
|
35
|
+
initialSnapIndex = 0
|
|
36
|
+
} = current.options;
|
|
37
|
+
const targetProgress = getInitialProgress({
|
|
38
|
+
snapPoints,
|
|
39
|
+
initialSnapIndex
|
|
40
|
+
});
|
|
19
41
|
activateHighRefreshRate();
|
|
20
|
-
|
|
21
|
-
target: "open",
|
|
42
|
+
animateToProgress({
|
|
43
|
+
target: targetProgress ?? "open",
|
|
22
44
|
spec: current.options.transitionSpec,
|
|
23
45
|
animations,
|
|
24
46
|
onAnimationFinish: deactivateHighRefreshRate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useLayoutEffect","
|
|
1
|
+
{"version":3,"names":["useLayoutEffect","animateToProgress","useHighRefreshRate","getInitialProgress","snapPoints","initialSnapIndex","undefined","clampedIndex","Math","min","max","length","useOpenTransition","current","animations","activateHighRefreshRate","deactivateHighRefreshRate","options","targetProgress","target","spec","transitionSpec","onAnimationFinish"],"sourceRoot":"../../../../../src","sources":["shared/hooks/lifecycle/use-open-transition.ts"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,OAAO;AAGvC,SAASC,iBAAiB,QAAQ,2CAA2C;AAC7E,SAASC,kBAAkB,QAAQ,oCAAoC;;AAEvE;AACA;AACA;AACA,SAASC,kBAAkBA,CAAC;EAC3BC,UAAU;EACVC;AAID,CAAC,EAAsB;EACtB,IAAI,CAACD,UAAU,EAAE;IAChB,OAAOE,SAAS;EACjB;EAEA,MAAMC,YAAY,GAAGC,IAAI,CAACC,GAAG,CAC5BD,IAAI,CAACE,GAAG,CAAC,CAAC,EAAEL,gBAAgB,CAAC,EAC7BD,UAAU,CAACO,MAAM,GAAG,CACrB,CAAC;EACD,OAAOP,UAAU,CAACG,YAAY,CAAC;AAChC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASK,iBAAiBA,CAChCC,OAAuB,EACvBC,UAA6B,EAC5B;EACD,MAAM;IAAEC,uBAAuB;IAAEC;EAA0B,CAAC,GAC3Dd,kBAAkB,CAACW,OAAO,CAAC;;EAE5B;EACAb,eAAe,CAAC,MAAM;IACrB,MAAM;MAAEI,UAAU;MAAEC,gBAAgB,GAAG;IAAE,CAAC,GAAGQ,OAAO,CAACI,OAAO;IAC5D,MAAMC,cAAc,GAAGf,kBAAkB,CAAC;MAAEC,UAAU;MAAEC;IAAiB,CAAC,CAAC;IAE3EU,uBAAuB,CAAC,CAAC;IACzBd,iBAAiB,CAAC;MACjBkB,MAAM,EAAED,cAAc,IAAI,MAAM;MAChCE,IAAI,EAAEP,OAAO,CAACI,OAAO,CAACI,cAAc;MACpCP,UAAU;MACVQ,iBAAiB,EAAEN;IACpB,CAAC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IAAED,uBAAuB;IAAEC;EAA0B,CAAC;AAC9D","ignoreList":[]}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { useMemo } from "react";
|
|
4
|
-
import { useDerivedValue } from "react-native-reanimated";
|
|
3
|
+
import { useCallback, useMemo } from "react";
|
|
4
|
+
import { runOnUI, useDerivedValue } from "react-native-reanimated";
|
|
5
|
+
import { DefaultSnapSpec } from "../../configs/specs";
|
|
5
6
|
import { useKeys } from "../../providers/screen/keys.provider";
|
|
7
|
+
import { AnimationStore } from "../../stores/animation.store";
|
|
8
|
+
import { animateToProgress } from "../../utils/animation/animate-to-progress";
|
|
6
9
|
import { useSharedValueState } from "../reanimated/use-shared-value-state";
|
|
7
10
|
import { useStack } from "./use-stack";
|
|
8
11
|
/**
|
|
@@ -28,6 +31,60 @@ export function useScreenState() {
|
|
|
28
31
|
const focusedScene = useMemo(() => {
|
|
29
32
|
return scenes[focusedIndex] ?? scenes[scenes.length - 1];
|
|
30
33
|
}, [scenes, focusedIndex]);
|
|
34
|
+
const currentOptions = current.options;
|
|
35
|
+
const snapPoints = currentOptions?.snapPoints;
|
|
36
|
+
const animations = useMemo(() => AnimationStore.getAll(current.route.key), [current.route.key]);
|
|
37
|
+
|
|
38
|
+
// Pre-sort snap points for the derived value (avoids sorting in worklet)
|
|
39
|
+
const sortedSnapPoints = useMemo(() => snapPoints ? [...snapPoints].sort((a, b) => a - b) : [], [snapPoints]);
|
|
40
|
+
const animatedSnapIndex = useDerivedValue(() => {
|
|
41
|
+
if (sortedSnapPoints.length === 0) {
|
|
42
|
+
return -1;
|
|
43
|
+
}
|
|
44
|
+
const progress = animations.progress.value;
|
|
45
|
+
|
|
46
|
+
// Below first snap point
|
|
47
|
+
if (progress <= sortedSnapPoints[0]) {
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Above last snap point
|
|
52
|
+
if (progress >= sortedSnapPoints[sortedSnapPoints.length - 1]) {
|
|
53
|
+
return sortedSnapPoints.length - 1;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Find segment and interpolate
|
|
57
|
+
for (let i = 0; i < sortedSnapPoints.length - 1; i++) {
|
|
58
|
+
if (progress <= sortedSnapPoints[i + 1]) {
|
|
59
|
+
const t = (progress - sortedSnapPoints[i]) / (sortedSnapPoints[i + 1] - sortedSnapPoints[i]);
|
|
60
|
+
return i + t;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return sortedSnapPoints.length - 1;
|
|
64
|
+
});
|
|
65
|
+
const snapTo = useCallback(targetIndex => {
|
|
66
|
+
if (!sortedSnapPoints || sortedSnapPoints.length === 0) {
|
|
67
|
+
console.warn("snapTo called but no snapPoints defined");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (targetIndex < 0 || targetIndex >= sortedSnapPoints.length) {
|
|
71
|
+
console.warn(`snapTo index ${targetIndex} out of bounds (0-${sortedSnapPoints.length - 1})`);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const targetProgress = sortedSnapPoints[targetIndex];
|
|
75
|
+
runOnUI(() => {
|
|
76
|
+
"worklet";
|
|
77
|
+
|
|
78
|
+
animateToProgress({
|
|
79
|
+
target: targetProgress,
|
|
80
|
+
animations,
|
|
81
|
+
spec: {
|
|
82
|
+
open: focusedScene.descriptor.options.transitionSpec?.expand ?? DefaultSnapSpec,
|
|
83
|
+
close: focusedScene.descriptor.options.transitionSpec?.collapse ?? DefaultSnapSpec
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
})();
|
|
87
|
+
}, [sortedSnapPoints, animations, focusedScene]);
|
|
31
88
|
return useMemo(() => ({
|
|
32
89
|
index,
|
|
33
90
|
options: focusedScene?.descriptor?.options ?? {},
|
|
@@ -35,7 +92,9 @@ export function useScreenState() {
|
|
|
35
92
|
focusedRoute: focusedScene?.route ?? current.route,
|
|
36
93
|
focusedIndex,
|
|
37
94
|
meta: focusedScene?.descriptor?.options?.meta,
|
|
38
|
-
navigation: current.navigation
|
|
39
|
-
|
|
95
|
+
navigation: current.navigation,
|
|
96
|
+
snapTo,
|
|
97
|
+
animatedSnapIndex
|
|
98
|
+
}), [index, focusedScene, routes, focusedIndex, current.navigation, current.route, snapTo, animatedSnapIndex]);
|
|
40
99
|
}
|
|
41
100
|
//# sourceMappingURL=use-screen-state.js.map
|