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.
Files changed (152) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/shared/components/create-transition-aware-component.js +8 -2
  3. package/lib/commonjs/shared/components/create-transition-aware-component.js.map +1 -1
  4. package/lib/commonjs/shared/components/{root-transition-aware.js → screen-container.js} +28 -12
  5. package/lib/commonjs/shared/components/screen-container.js.map +1 -0
  6. package/lib/commonjs/shared/configs/presets.js +3 -3
  7. package/lib/commonjs/shared/configs/presets.js.map +1 -1
  8. package/lib/commonjs/shared/configs/specs.js +6 -1
  9. package/lib/commonjs/shared/configs/specs.js.map +1 -1
  10. package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js +36 -188
  11. package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js.map +1 -1
  12. package/lib/commonjs/shared/hooks/gestures/use-screen-gesture-handlers.js +334 -0
  13. package/lib/commonjs/shared/hooks/gestures/use-screen-gesture-handlers.js.map +1 -0
  14. package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js +47 -4
  15. package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
  16. package/lib/commonjs/shared/hooks/lifecycle/use-close-transition.js +3 -3
  17. package/lib/commonjs/shared/hooks/lifecycle/use-close-transition.js.map +1 -1
  18. package/lib/commonjs/shared/hooks/lifecycle/use-open-transition.js +25 -3
  19. package/lib/commonjs/shared/hooks/lifecycle/use-open-transition.js.map +1 -1
  20. package/lib/commonjs/shared/hooks/navigation/use-screen-state.js +61 -2
  21. package/lib/commonjs/shared/hooks/navigation/use-screen-state.js.map +1 -1
  22. package/lib/commonjs/shared/hooks/use-backdrop-pointer-events.js +32 -0
  23. package/lib/commonjs/shared/hooks/use-backdrop-pointer-events.js.map +1 -0
  24. package/lib/commonjs/shared/providers/gestures.provider.js +4 -2
  25. package/lib/commonjs/shared/providers/gestures.provider.js.map +1 -1
  26. package/lib/commonjs/shared/providers/screen/screen-composer.js +2 -2
  27. package/lib/commonjs/shared/providers/screen/screen-composer.js.map +1 -1
  28. package/lib/commonjs/shared/providers/screen/styles.provider.js +41 -32
  29. package/lib/commonjs/shared/providers/screen/styles.provider.js.map +1 -1
  30. package/lib/commonjs/shared/utils/animation/{start-screen-transition.js → animate-to-progress.js} +11 -7
  31. package/lib/commonjs/shared/utils/animation/animate-to-progress.js.map +1 -0
  32. package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js +71 -0
  33. package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js.map +1 -1
  34. package/lib/commonjs/shared/utils/gesture/determine-snap-target.js +56 -0
  35. package/lib/commonjs/shared/utils/gesture/determine-snap-target.js.map +1 -0
  36. package/lib/commonjs/shared/utils/gesture/validate-snap-points.js +31 -0
  37. package/lib/commonjs/shared/utils/gesture/validate-snap-points.js.map +1 -0
  38. package/lib/commonjs/shared/utils/gesture/velocity.js +11 -0
  39. package/lib/commonjs/shared/utils/gesture/velocity.js.map +1 -1
  40. package/lib/module/shared/components/create-transition-aware-component.js +8 -2
  41. package/lib/module/shared/components/create-transition-aware-component.js.map +1 -1
  42. package/lib/module/shared/components/screen-container.js +64 -0
  43. package/lib/module/shared/components/screen-container.js.map +1 -0
  44. package/lib/module/shared/configs/presets.js +3 -3
  45. package/lib/module/shared/configs/presets.js.map +1 -1
  46. package/lib/module/shared/configs/specs.js +5 -0
  47. package/lib/module/shared/configs/specs.js.map +1 -1
  48. package/lib/module/shared/hooks/gestures/use-build-gestures.js +36 -187
  49. package/lib/module/shared/hooks/gestures/use-build-gestures.js.map +1 -1
  50. package/lib/module/shared/hooks/gestures/use-screen-gesture-handlers.js +328 -0
  51. package/lib/module/shared/hooks/gestures/use-screen-gesture-handlers.js.map +1 -0
  52. package/lib/module/shared/hooks/gestures/use-scroll-registry.js +47 -4
  53. package/lib/module/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
  54. package/lib/module/shared/hooks/lifecycle/use-close-transition.js +3 -3
  55. package/lib/module/shared/hooks/lifecycle/use-close-transition.js.map +1 -1
  56. package/lib/module/shared/hooks/lifecycle/use-open-transition.js +25 -3
  57. package/lib/module/shared/hooks/lifecycle/use-open-transition.js.map +1 -1
  58. package/lib/module/shared/hooks/navigation/use-screen-state.js +63 -4
  59. package/lib/module/shared/hooks/navigation/use-screen-state.js.map +1 -1
  60. package/lib/module/shared/hooks/use-backdrop-pointer-events.js +28 -0
  61. package/lib/module/shared/hooks/use-backdrop-pointer-events.js.map +1 -0
  62. package/lib/module/shared/providers/gestures.provider.js +4 -2
  63. package/lib/module/shared/providers/gestures.provider.js.map +1 -1
  64. package/lib/module/shared/providers/screen/screen-composer.js +2 -2
  65. package/lib/module/shared/providers/screen/screen-composer.js.map +1 -1
  66. package/lib/module/shared/providers/screen/styles.provider.js +41 -32
  67. package/lib/module/shared/providers/screen/styles.provider.js.map +1 -1
  68. package/lib/module/shared/utils/animation/{start-screen-transition.js → animate-to-progress.js} +9 -5
  69. package/lib/module/shared/utils/animation/animate-to-progress.js.map +1 -0
  70. package/lib/module/shared/utils/gesture/check-gesture-activation.js +70 -0
  71. package/lib/module/shared/utils/gesture/check-gesture-activation.js.map +1 -1
  72. package/lib/module/shared/utils/gesture/determine-snap-target.js +52 -0
  73. package/lib/module/shared/utils/gesture/determine-snap-target.js.map +1 -0
  74. package/lib/module/shared/utils/gesture/validate-snap-points.js +26 -0
  75. package/lib/module/shared/utils/gesture/validate-snap-points.js.map +1 -0
  76. package/lib/module/shared/utils/gesture/velocity.js +11 -0
  77. package/lib/module/shared/utils/gesture/velocity.js.map +1 -1
  78. package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
  79. package/lib/typescript/shared/components/screen-container.d.ts +6 -0
  80. package/lib/typescript/shared/components/screen-container.d.ts.map +1 -0
  81. package/lib/typescript/shared/configs/specs.d.ts +1 -0
  82. package/lib/typescript/shared/configs/specs.d.ts.map +1 -1
  83. package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts +1 -1
  84. package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts.map +1 -1
  85. package/lib/typescript/shared/hooks/gestures/use-screen-gesture-handlers.d.ts +34 -0
  86. package/lib/typescript/shared/hooks/gestures/use-screen-gesture-handlers.d.ts.map +1 -0
  87. package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts +5 -1
  88. package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts.map +1 -1
  89. package/lib/typescript/shared/hooks/lifecycle/use-open-transition.d.ts.map +1 -1
  90. package/lib/typescript/shared/hooks/navigation/use-screen-state.d.ts +14 -0
  91. package/lib/typescript/shared/hooks/navigation/use-screen-state.d.ts.map +1 -1
  92. package/lib/typescript/shared/hooks/use-backdrop-pointer-events.d.ts +15 -0
  93. package/lib/typescript/shared/hooks/use-backdrop-pointer-events.d.ts.map +1 -0
  94. package/lib/typescript/shared/providers/gestures.provider.d.ts +1 -0
  95. package/lib/typescript/shared/providers/gestures.provider.d.ts.map +1 -1
  96. package/lib/typescript/shared/providers/screen/styles.provider.d.ts.map +1 -1
  97. package/lib/typescript/shared/types/animation.types.d.ts +28 -2
  98. package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
  99. package/lib/typescript/shared/types/screen.types.d.ts +26 -0
  100. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  101. package/lib/typescript/shared/utils/animation/animate-to-progress.d.ts +19 -0
  102. package/lib/typescript/shared/utils/animation/animate-to-progress.d.ts.map +1 -0
  103. package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts +24 -0
  104. package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts.map +1 -1
  105. package/lib/typescript/shared/utils/gesture/determine-snap-target.d.ts +26 -0
  106. package/lib/typescript/shared/utils/gesture/determine-snap-target.d.ts.map +1 -0
  107. package/lib/typescript/shared/utils/gesture/validate-snap-points.d.ts +13 -0
  108. package/lib/typescript/shared/utils/gesture/validate-snap-points.d.ts.map +1 -0
  109. package/lib/typescript/shared/utils/gesture/velocity.d.ts +1 -0
  110. package/lib/typescript/shared/utils/gesture/velocity.d.ts.map +1 -1
  111. package/package.json +29 -2
  112. package/src/shared/__tests__/determine-snap-target.test.ts +268 -0
  113. package/src/shared/__tests__/gesture-activation.test.ts +247 -0
  114. package/src/shared/__tests__/validate-snap-points.test.ts +125 -0
  115. package/src/shared/components/create-transition-aware-component.tsx +11 -1
  116. package/src/shared/components/screen-container.tsx +65 -0
  117. package/src/shared/configs/presets.ts +3 -3
  118. package/src/shared/configs/specs.ts +6 -0
  119. package/src/shared/hooks/gestures/use-build-gestures.tsx +33 -253
  120. package/src/shared/hooks/gestures/use-screen-gesture-handlers.ts +436 -0
  121. package/src/shared/hooks/gestures/use-scroll-registry.tsx +52 -1
  122. package/src/shared/hooks/lifecycle/use-close-transition.ts +3 -3
  123. package/src/shared/hooks/lifecycle/use-open-transition.ts +27 -3
  124. package/src/shared/hooks/navigation/use-screen-state.tsx +106 -2
  125. package/src/shared/hooks/use-backdrop-pointer-events.ts +32 -0
  126. package/src/shared/providers/gestures.provider.tsx +3 -2
  127. package/src/shared/providers/screen/screen-composer.tsx +2 -2
  128. package/src/shared/providers/screen/styles.provider.tsx +40 -34
  129. package/src/shared/types/animation.types.ts +29 -2
  130. package/src/shared/types/screen.types.ts +29 -0
  131. package/src/shared/utils/animation/{start-screen-transition.ts → animate-to-progress.ts} +19 -7
  132. package/src/shared/utils/gesture/check-gesture-activation.ts +78 -0
  133. package/src/shared/utils/gesture/determine-snap-target.ts +75 -0
  134. package/src/shared/utils/gesture/validate-snap-points.ts +37 -0
  135. package/src/shared/utils/gesture/velocity.ts +10 -0
  136. package/lib/commonjs/shared/components/root-transition-aware.js.map +0 -1
  137. package/lib/commonjs/shared/hooks/use-stack-pointer-events.js +0 -23
  138. package/lib/commonjs/shared/hooks/use-stack-pointer-events.js.map +0 -1
  139. package/lib/commonjs/shared/utils/animation/start-screen-transition.js.map +0 -1
  140. package/lib/module/shared/components/root-transition-aware.js +0 -48
  141. package/lib/module/shared/components/root-transition-aware.js.map +0 -1
  142. package/lib/module/shared/hooks/use-stack-pointer-events.js +0 -20
  143. package/lib/module/shared/hooks/use-stack-pointer-events.js.map +0 -1
  144. package/lib/module/shared/utils/animation/start-screen-transition.js.map +0 -1
  145. package/lib/typescript/shared/components/root-transition-aware.d.ts +0 -6
  146. package/lib/typescript/shared/components/root-transition-aware.d.ts.map +0 -1
  147. package/lib/typescript/shared/hooks/use-stack-pointer-events.d.ts +0 -10
  148. package/lib/typescript/shared/hooks/use-stack-pointer-events.d.ts.map +0 -1
  149. package/lib/typescript/shared/utils/animation/start-screen-transition.d.ts +0 -13
  150. package/lib/typescript/shared/utils/animation/start-screen-transition.d.ts.map +0 -1
  151. package/src/shared/components/root-transition-aware.tsx +0 -49
  152. 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":"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","ignoreList":[]}
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 { startScreenTransition } from "../../utils/animation/start-screen-transition";
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
- startScreenTransition({
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
- startScreenTransition({
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","startScreenTransition","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
+ {"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 { startScreenTransition } from "../../utils/animation/start-screen-transition";
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
- startScreenTransition({
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","startScreenTransition","useHighRefreshRate","useOpenTransition","current","animations","activateHighRefreshRate","deactivateHighRefreshRate","target","spec","options","transitionSpec","onAnimationFinish"],"sourceRoot":"../../../../../src","sources":["shared/hooks/lifecycle/use-open-transition.ts"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,OAAO;AAGvC,SAASC,qBAAqB,QAAQ,+CAA+C;AACrF,SAASC,kBAAkB,QAAQ,oCAAoC;;AAEvE;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAChCC,OAAuB,EACvBC,UAA6B,EAC5B;EACD,MAAM;IAAEC,uBAAuB;IAAEC;EAA0B,CAAC,GAC3DL,kBAAkB,CAACE,OAAO,CAAC;;EAE5B;EACAJ,eAAe,CAAC,MAAM;IACrBM,uBAAuB,CAAC,CAAC;IACzBL,qBAAqB,CAAC;MACrBO,MAAM,EAAE,MAAM;MACdC,IAAI,EAAEL,OAAO,CAACM,OAAO,CAACC,cAAc;MACpCN,UAAU;MACVO,iBAAiB,EAAEL;IACpB,CAAC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IAAED,uBAAuB;IAAEC;EAA0B,CAAC;AAC9D","ignoreList":[]}
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
- }), [index, focusedScene, routes, focusedIndex, current.navigation, current.route]);
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