react-native-screen-transitions 3.3.0-beta.3 → 3.3.0-beta.4
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 +95 -31
- package/lib/commonjs/shared/animation/snap-to.js +2 -0
- package/lib/commonjs/shared/animation/snap-to.js.map +1 -1
- package/lib/commonjs/shared/components/create-transition-aware-component.js +20 -18
- package/lib/commonjs/shared/components/create-transition-aware-component.js.map +1 -1
- package/lib/commonjs/shared/components/screen-container.js +59 -6
- package/lib/commonjs/shared/components/screen-container.js.map +1 -1
- package/lib/commonjs/shared/constants.js +8 -1
- package/lib/commonjs/shared/constants.js.map +1 -1
- package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js +49 -39
- package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js.map +1 -1
- package/lib/commonjs/shared/hooks/gestures/use-screen-gesture-handlers.js +110 -61
- package/lib/commonjs/shared/hooks/gestures/use-screen-gesture-handlers.js.map +1 -1
- package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js +67 -70
- package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
- package/lib/commonjs/shared/providers/gestures.provider.js +112 -5
- package/lib/commonjs/shared/providers/gestures.provider.js.map +1 -1
- package/lib/commonjs/shared/types/ownership.types.js +71 -0
- package/lib/commonjs/shared/types/ownership.types.js.map +1 -0
- package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js +72 -128
- package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js.map +1 -1
- package/lib/commonjs/shared/utils/gesture/compute-claimed-directions.js +81 -0
- package/lib/commonjs/shared/utils/gesture/compute-claimed-directions.js.map +1 -0
- package/lib/commonjs/shared/utils/gesture/determine-snap-target.js +1 -1
- package/lib/commonjs/shared/utils/gesture/determine-snap-target.js.map +1 -1
- package/lib/commonjs/shared/utils/gesture/find-collapse-target.js +48 -0
- package/lib/commonjs/shared/utils/gesture/find-collapse-target.js.map +1 -0
- package/lib/commonjs/shared/utils/gesture/resolve-ownership.js +87 -0
- package/lib/commonjs/shared/utils/gesture/resolve-ownership.js.map +1 -0
- package/lib/commonjs/shared/utils/gesture/velocity.js +16 -5
- package/lib/commonjs/shared/utils/gesture/velocity.js.map +1 -1
- package/lib/module/shared/animation/snap-to.js +1 -0
- package/lib/module/shared/animation/snap-to.js.map +1 -1
- package/lib/module/shared/components/create-transition-aware-component.js +20 -18
- package/lib/module/shared/components/create-transition-aware-component.js.map +1 -1
- package/lib/module/shared/components/screen-container.js +59 -7
- package/lib/module/shared/components/screen-container.js.map +1 -1
- package/lib/module/shared/constants.js +7 -0
- package/lib/module/shared/constants.js.map +1 -1
- package/lib/module/shared/hooks/gestures/use-build-gestures.js +49 -39
- package/lib/module/shared/hooks/gestures/use-build-gestures.js.map +1 -1
- package/lib/module/shared/hooks/gestures/use-screen-gesture-handlers.js +112 -63
- package/lib/module/shared/hooks/gestures/use-screen-gesture-handlers.js.map +1 -1
- package/lib/module/shared/hooks/gestures/use-scroll-registry.js +68 -70
- package/lib/module/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
- package/lib/module/shared/providers/gestures.provider.js +112 -5
- package/lib/module/shared/providers/gestures.provider.js.map +1 -1
- package/lib/module/shared/types/ownership.types.js +67 -0
- package/lib/module/shared/types/ownership.types.js.map +1 -0
- package/lib/module/shared/utils/gesture/check-gesture-activation.js +70 -126
- package/lib/module/shared/utils/gesture/check-gesture-activation.js.map +1 -1
- package/lib/module/shared/utils/gesture/compute-claimed-directions.js +77 -0
- package/lib/module/shared/utils/gesture/compute-claimed-directions.js.map +1 -0
- package/lib/module/shared/utils/gesture/determine-snap-target.js +1 -1
- package/lib/module/shared/utils/gesture/determine-snap-target.js.map +1 -1
- package/lib/module/shared/utils/gesture/find-collapse-target.js +44 -0
- package/lib/module/shared/utils/gesture/find-collapse-target.js.map +1 -0
- package/lib/module/shared/utils/gesture/resolve-ownership.js +83 -0
- package/lib/module/shared/utils/gesture/resolve-ownership.js.map +1 -0
- package/lib/module/shared/utils/gesture/velocity.js +16 -5
- package/lib/module/shared/utils/gesture/velocity.js.map +1 -1
- package/lib/typescript/shared/animation/snap-to.d.ts.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.map +1 -1
- package/lib/typescript/shared/constants.d.ts +6 -0
- package/lib/typescript/shared/constants.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts +15 -3
- 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 +52 -2
- package/lib/typescript/shared/hooks/gestures/use-screen-gesture-handlers.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts +11 -6
- package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts.map +1 -1
- package/lib/typescript/shared/hooks/use-backdrop-pointer-events.d.ts +1 -1
- package/lib/typescript/shared/hooks/use-backdrop-pointer-events.d.ts.map +1 -1
- package/lib/typescript/shared/providers/gestures.provider.d.ts +27 -2
- package/lib/typescript/shared/providers/gestures.provider.d.ts.map +1 -1
- package/lib/typescript/shared/types/ownership.types.d.ts +52 -0
- package/lib/typescript/shared/types/ownership.types.d.ts.map +1 -0
- package/lib/typescript/shared/types/screen.types.d.ts +22 -1
- package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
- package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts +23 -19
- package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts.map +1 -1
- package/lib/typescript/shared/utils/gesture/compute-claimed-directions.d.ts +23 -0
- package/lib/typescript/shared/utils/gesture/compute-claimed-directions.d.ts.map +1 -0
- package/lib/typescript/shared/utils/gesture/determine-snap-target.d.ts +5 -1
- package/lib/typescript/shared/utils/gesture/determine-snap-target.d.ts.map +1 -1
- package/lib/typescript/shared/utils/gesture/find-collapse-target.d.ts +17 -0
- package/lib/typescript/shared/utils/gesture/find-collapse-target.d.ts.map +1 -0
- package/lib/typescript/shared/utils/gesture/resolve-ownership.d.ts +36 -0
- package/lib/typescript/shared/utils/gesture/resolve-ownership.d.ts.map +1 -0
- package/lib/typescript/shared/utils/gesture/velocity.d.ts.map +1 -1
- package/package.json +121 -120
- package/src/shared/animation/snap-to.ts +1 -0
- package/src/shared/components/create-transition-aware-component.tsx +28 -25
- package/src/shared/components/screen-container.tsx +69 -7
- package/src/shared/constants.ts +7 -0
- package/src/shared/hooks/gestures/use-build-gestures.tsx +80 -44
- package/src/shared/hooks/gestures/use-screen-gesture-handlers.ts +147 -71
- package/src/shared/hooks/gestures/use-scroll-registry.tsx +94 -86
- package/src/shared/hooks/use-backdrop-pointer-events.ts +1 -1
- package/src/shared/providers/gestures.provider.tsx +166 -5
- package/src/shared/types/ownership.types.ts +77 -0
- package/src/shared/types/screen.types.ts +24 -1
- package/src/shared/utils/gesture/check-gesture-activation.ts +82 -116
- package/src/shared/utils/gesture/compute-claimed-directions.ts +93 -0
- package/src/shared/utils/gesture/determine-snap-target.ts +6 -2
- package/src/shared/utils/gesture/find-collapse-target.ts +42 -0
- package/src/shared/utils/gesture/resolve-ownership.ts +110 -0
- package/src/shared/utils/gesture/velocity.ts +16 -6
- package/src/shared/__tests__/bounds.store.test.ts +0 -394
- package/src/shared/__tests__/derivations.test.ts +0 -156
- package/src/shared/__tests__/determine-dismissal.test.ts +0 -111
- package/src/shared/__tests__/determine-snap-target.test.ts +0 -268
- package/src/shared/__tests__/geometry.test.ts +0 -130
- package/src/shared/__tests__/gesture-activation.test.ts +0 -471
- package/src/shared/__tests__/gesture.velocity.test.ts +0 -131
- package/src/shared/__tests__/history.store.test.ts +0 -550
- package/src/shared/__tests__/sync-routes-with-removed.test.ts +0 -137
- package/src/shared/__tests__/validate-snap-points.test.ts +0 -125
package/README.md
CHANGED
|
@@ -14,6 +14,22 @@ Customizable screen transitions for React Native. Build gesture-driven, shared e
|
|
|
14
14
|
- **Stack Progress** – Track animation progress across the entire stack
|
|
15
15
|
- **Ready-Made Presets** – Instagram, Apple Music, X (Twitter) style transitions included
|
|
16
16
|
|
|
17
|
+
## When to Use This Library
|
|
18
|
+
|
|
19
|
+
| Use Case | This Library | Alternative |
|
|
20
|
+
|----------|--------------|-------------|
|
|
21
|
+
| Custom transitions (slide, zoom, fade variations) | Yes | `@react-navigation/stack` works too |
|
|
22
|
+
| Shared element transitions | **Yes** | Limited options elsewhere |
|
|
23
|
+
| Multi-stop sheets (bottom, top, side) with snap points | **Yes** | Dedicated sheet libraries |
|
|
24
|
+
| Gesture-driven animations (drag to dismiss, elastic) | **Yes** | Requires custom implementation |
|
|
25
|
+
| Instagram/Apple Music/Twitter-style transitions | **Yes** | Custom implementation |
|
|
26
|
+
| Simple push/pop with platform defaults | Overkill | `@react-navigation/native-stack` |
|
|
27
|
+
| Maximum raw performance on low-end devices | Not ideal | `@react-navigation/native-stack` |
|
|
28
|
+
|
|
29
|
+
**Choose this library when** you need custom animations, shared elements, or gesture-driven transitions that go beyond platform defaults.
|
|
30
|
+
|
|
31
|
+
**Choose native-stack when** you want platform-native transitions with zero configuration and maximum performance on low-end Android devices.
|
|
32
|
+
|
|
17
33
|
## Installation
|
|
18
34
|
|
|
19
35
|
```bash
|
|
@@ -190,8 +206,10 @@ Control timing with spring configs:
|
|
|
190
206
|
options={{
|
|
191
207
|
screenStyleInterpolator: myInterpolator,
|
|
192
208
|
transitionSpec: {
|
|
193
|
-
open: { stiffness: 1000, damping: 500, mass: 3 },
|
|
194
|
-
close: { stiffness: 1000, damping: 500, mass: 3 },
|
|
209
|
+
open: { stiffness: 1000, damping: 500, mass: 3 }, // Screen enters
|
|
210
|
+
close: { stiffness: 1000, damping: 500, mass: 3 }, // Screen exits
|
|
211
|
+
expand: { stiffness: 300, damping: 30 }, // Snap point increases
|
|
212
|
+
collapse: { stiffness: 300, damping: 30 }, // Snap point decreases
|
|
195
213
|
},
|
|
196
214
|
}}
|
|
197
215
|
```
|
|
@@ -212,14 +230,17 @@ options={{
|
|
|
212
230
|
|
|
213
231
|
### Gesture Options
|
|
214
232
|
|
|
215
|
-
| Option | Description
|
|
216
|
-
| ------------------------- |
|
|
217
|
-
| `gestureEnabled` | Enable swipe-to-dismiss
|
|
218
|
-
| `gestureDirection` | Direction(s) for swipe gesture
|
|
219
|
-
| `gestureActivationArea` | Where gesture can start
|
|
220
|
-
| `gestureResponseDistance` | Pixel threshold for activation
|
|
221
|
-
| `gestureVelocityImpact` | How much velocity affects dismissal
|
|
222
|
-
| `
|
|
233
|
+
| Option | Description |
|
|
234
|
+
| ------------------------- | ------------------------------------------------------------------------ |
|
|
235
|
+
| `gestureEnabled` | Enable swipe-to-dismiss |
|
|
236
|
+
| `gestureDirection` | Direction(s) for swipe gesture |
|
|
237
|
+
| `gestureActivationArea` | Where gesture can start |
|
|
238
|
+
| `gestureResponseDistance` | Pixel threshold for activation |
|
|
239
|
+
| `gestureVelocityImpact` | How much velocity affects dismissal (default: 0.3) |
|
|
240
|
+
| `gestureDrivesProgress` | Whether gesture controls animation progress (default: true) |
|
|
241
|
+
| `snapVelocityImpact` | How much velocity affects snap targeting (default: 0.1, lower = iOS-like)|
|
|
242
|
+
| `expandViaScrollView` | Whether scroll-at-top expands snap sheets (default: true) |
|
|
243
|
+
| `backdropBehavior` | Touch handling for backdrop area |
|
|
223
244
|
|
|
224
245
|
### Gesture Direction
|
|
225
246
|
|
|
@@ -269,44 +290,64 @@ Gesture rules with scrollables:
|
|
|
269
290
|
|
|
270
291
|
---
|
|
271
292
|
|
|
272
|
-
##
|
|
293
|
+
## Snap Points
|
|
273
294
|
|
|
274
|
-
Create multi-stop bottom sheets
|
|
295
|
+
Create multi-stop sheets that snap to defined positions. Works with any gesture direction (bottom sheets, top sheets, side sheets):
|
|
275
296
|
|
|
276
297
|
### Basic Configuration
|
|
277
298
|
|
|
278
299
|
```tsx
|
|
300
|
+
// Bottom sheet (most common)
|
|
279
301
|
<Stack.Screen
|
|
280
302
|
name="Sheet"
|
|
281
303
|
options={{
|
|
282
304
|
gestureEnabled: true,
|
|
283
305
|
gestureDirection: "vertical",
|
|
284
|
-
snapPoints: [0.5, 1], // 50% and 100%
|
|
306
|
+
snapPoints: [0.5, 1], // 50% and 100% of screen
|
|
285
307
|
initialSnapIndex: 0, // Start at 50%
|
|
286
308
|
backdropBehavior: "dismiss", // Tap backdrop to dismiss
|
|
287
309
|
...Transition.Presets.SlideFromBottom(),
|
|
288
310
|
}}
|
|
289
311
|
/>
|
|
312
|
+
|
|
313
|
+
// Side sheet (same API, different direction)
|
|
314
|
+
<Stack.Screen
|
|
315
|
+
name="SidePanel"
|
|
316
|
+
options={{
|
|
317
|
+
gestureEnabled: true,
|
|
318
|
+
gestureDirection: "horizontal",
|
|
319
|
+
snapPoints: [0.3, 0.7, 1], // 30%, 70%, 100% of screen width
|
|
320
|
+
initialSnapIndex: 1,
|
|
321
|
+
...Transition.Presets.SlideFromRight(),
|
|
322
|
+
}}
|
|
323
|
+
/>
|
|
290
324
|
```
|
|
291
325
|
|
|
292
326
|
### Options
|
|
293
327
|
|
|
294
|
-
| Option | Description
|
|
295
|
-
| ------------------ |
|
|
296
|
-
| `snapPoints` | Array of fractions (0-1) where sheet can rest
|
|
297
|
-
| `initialSnapIndex` | Index of initial snap point (default: 0)
|
|
298
|
-
| `backdropBehavior` | Touch handling: `"block"`, `"passthrough"`, `"dismiss"`
|
|
328
|
+
| Option | Description |
|
|
329
|
+
| ------------------ | -------------------------------------------------------------------- |
|
|
330
|
+
| `snapPoints` | Array of fractions (0-1) where sheet can rest |
|
|
331
|
+
| `initialSnapIndex` | Index of initial snap point (default: 0) |
|
|
332
|
+
| `backdropBehavior` | Touch handling: `"block"`, `"passthrough"`, `"dismiss"`, `"collapse"`|
|
|
333
|
+
|
|
334
|
+
#### backdropBehavior Values
|
|
335
|
+
|
|
336
|
+
| Value | Description |
|
|
337
|
+
| --------------- | ---------------------------------------------------------------- |
|
|
338
|
+
| `"block"` | Backdrop catches all touches (default) |
|
|
339
|
+
| `"passthrough"` | Touches pass through to content behind |
|
|
340
|
+
| `"dismiss"` | Tapping backdrop dismisses the screen |
|
|
341
|
+
| `"collapse"` | Tapping backdrop collapses to next lower snap point, then dismisses |
|
|
299
342
|
|
|
300
343
|
### Programmatic Control
|
|
301
344
|
|
|
302
|
-
Control snap points from
|
|
345
|
+
Control snap points from anywhere in your app:
|
|
303
346
|
|
|
304
347
|
```tsx
|
|
305
|
-
import {
|
|
348
|
+
import { snapTo } from "react-native-screen-transitions";
|
|
306
349
|
|
|
307
350
|
function BottomSheet() {
|
|
308
|
-
const { snapTo } = useScreenState();
|
|
309
|
-
|
|
310
351
|
// Expand to full height (index 1)
|
|
311
352
|
const expand = () => snapTo(1);
|
|
312
353
|
|
|
@@ -471,19 +512,13 @@ function DetailScreen() {
|
|
|
471
512
|
|
|
472
513
|
### useScreenState
|
|
473
514
|
|
|
474
|
-
Get navigation state
|
|
515
|
+
Get navigation state without animation values:
|
|
475
516
|
|
|
476
517
|
```tsx
|
|
477
518
|
import { useScreenState } from "react-native-screen-transitions";
|
|
478
519
|
|
|
479
520
|
function DetailScreen() {
|
|
480
|
-
const {
|
|
481
|
-
index,
|
|
482
|
-
focusedRoute,
|
|
483
|
-
routes,
|
|
484
|
-
navigation,
|
|
485
|
-
snapTo, // Snap to index programmatically
|
|
486
|
-
} = useScreenState();
|
|
521
|
+
const { index, focusedRoute, routes, navigation } = useScreenState();
|
|
487
522
|
// ...
|
|
488
523
|
}
|
|
489
524
|
```
|
|
@@ -503,6 +538,33 @@ function MyComponent() {
|
|
|
503
538
|
}
|
|
504
539
|
```
|
|
505
540
|
|
|
541
|
+
### useScreenGesture
|
|
542
|
+
|
|
543
|
+
Coordinate your own pan gestures with the navigation gesture:
|
|
544
|
+
|
|
545
|
+
```tsx
|
|
546
|
+
import { useScreenGesture } from "react-native-screen-transitions";
|
|
547
|
+
import { Gesture, GestureDetector } from "react-native-gesture-handler";
|
|
548
|
+
|
|
549
|
+
function MyScreen() {
|
|
550
|
+
const screenGesture = useScreenGesture();
|
|
551
|
+
|
|
552
|
+
const myPanGesture = Gesture.Pan()
|
|
553
|
+
.simultaneousWithExternalGesture(screenGesture)
|
|
554
|
+
.onUpdate((e) => {
|
|
555
|
+
// Your gesture logic
|
|
556
|
+
});
|
|
557
|
+
|
|
558
|
+
return (
|
|
559
|
+
<GestureDetector gesture={myPanGesture}>
|
|
560
|
+
<View />
|
|
561
|
+
</GestureDetector>
|
|
562
|
+
);
|
|
563
|
+
}
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
Use this when you have custom pan gestures that need to work alongside screen dismiss gestures.
|
|
567
|
+
|
|
506
568
|
---
|
|
507
569
|
|
|
508
570
|
## Advanced Animation Props
|
|
@@ -513,6 +575,8 @@ The full `screenStyleInterpolator` receives these props:
|
|
|
513
575
|
| ---------------- | -------------------------------------------------------- |
|
|
514
576
|
| `progress` | Combined progress (0-2) |
|
|
515
577
|
| `stackProgress` | Accumulated progress across entire stack |
|
|
578
|
+
| `snapIndex` | Animated snap point index (-1 if no snap points) |
|
|
579
|
+
| `focused` | Whether this screen is the topmost in the stack |
|
|
516
580
|
| `current` | Current screen state |
|
|
517
581
|
| `previous` | Previous screen state |
|
|
518
582
|
| `next` | Next screen state |
|
|
@@ -586,7 +650,7 @@ All three stacks share the same animation API. Choose based on your needs:
|
|
|
586
650
|
|
|
587
651
|
### Blank Stack
|
|
588
652
|
|
|
589
|
-
The default choice.
|
|
653
|
+
The default choice. Uses `react-native-screens` for native screen containers, with animations powered by Reanimated worklets running on the UI thread (not the JS thread).
|
|
590
654
|
|
|
591
655
|
```tsx
|
|
592
656
|
import { createBlankStackNavigator } from "react-native-screen-transitions/blank-stack";
|
|
@@ -10,6 +10,8 @@ var _animation = require("../stores/animation.store");
|
|
|
10
10
|
var _history = require("../stores/history.store");
|
|
11
11
|
var _animateToProgress = require("../utils/animation/animate-to-progress");
|
|
12
12
|
var _logger = require("../utils/logger");
|
|
13
|
+
/** biome-ignore-all lint/style/noNonNullAssertion: <Options always exist> */
|
|
14
|
+
|
|
13
15
|
/**
|
|
14
16
|
* Programmatically snap the currently focused screen to a specific snap point.
|
|
15
17
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeReanimated","require","_specs","_animation","_history","_animateToProgress","_logger","snapTo","index","allHistory","HistoryStore","toArray","screenWithSnapPoints","filter","entry","sp","descriptor","options","snapPoints","length","pop","logger","warn","sorted","sort","a","b","targetProgress","animations","AnimationStore","getAll","route","key","runOnUI","animateToProgress","target","spec","open","transitionSpec","expand","DefaultSnapSpec","close","collapse"],"sourceRoot":"../../../../src","sources":["shared/animation/snap-to.ts"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"names":["_reactNativeReanimated","require","_specs","_animation","_history","_animateToProgress","_logger","snapTo","index","allHistory","HistoryStore","toArray","screenWithSnapPoints","filter","entry","sp","descriptor","options","snapPoints","length","pop","logger","warn","sorted","sort","a","b","targetProgress","animations","AnimationStore","getAll","route","key","runOnUI","animateToProgress","target","spec","open","transitionSpec","expand","DefaultSnapSpec","close","collapse"],"sourceRoot":"../../../../src","sources":["shared/animation/snap-to.ts"],"mappings":";;;;;;AACA,IAAAA,sBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AANA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASM,MAAMA,CAACC,KAAa,EAAQ;EAC3C;EACA;EACA;EACA,MAAMC,UAAU,GAAGC,qBAAY,CAACC,OAAO,CAAC,CAAC;EACzC,MAAMC,oBAAoB,GAAGH,UAAU,CACrCI,MAAM,CAAEC,KAAK,IAAK;IAClB,MAAMC,EAAE,GAAGD,KAAK,CAACE,UAAU,CAACC,OAAO,EAAEC,UAAU;IAC/C,OAAOH,EAAE,IAAIA,EAAE,CAACI,MAAM,GAAG,CAAC;EAC3B,CAAC,CAAC,CACDC,GAAG,CAAC,CAAC,CAAC,CAAC;;EAET,IAAI,CAACR,oBAAoB,EAAE;IAC1BS,cAAM,CAACC,IAAI,CAAC,+CAA+C,CAAC;IAC5D;EACD;EAEA,MAAM;IAAEN;EAAW,CAAC,GAAGJ,oBAAoB;EAC3C,MAAMM,UAAU,GAAGF,UAAU,CAACC,OAAO,CAAEC,UAAW;EAElD,MAAMK,MAAM,GAAG,CAAC,GAAGL,UAAU,CAAC,CAACM,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC;EAEpD,IAAIlB,KAAK,GAAG,CAAC,IAAIA,KAAK,IAAIe,MAAM,CAACJ,MAAM,EAAE;IACxCE,cAAM,CAACC,IAAI,CACV,iBAAiBd,KAAK,qBAAqBe,MAAM,CAACJ,MAAM,GAAG,CAAC,GAC7D,CAAC;IACD;EACD;EAEA,MAAMQ,cAAc,GAAGJ,MAAM,CAACf,KAAK,CAAC;EACpC,MAAMoB,UAAU,GAAGC,yBAAc,CAACC,MAAM,CAACd,UAAU,CAACe,KAAK,CAACC,GAAG,CAAC;EAE9D,IAAAC,8BAAO,EAAC,MAAM;IACb,SAAS;;IACT,IAAAC,oCAAiB,EAAC;MACjBC,MAAM,EAAER,cAAc;MACtBC,UAAU;MACVQ,IAAI,EAAE;QACLC,IAAI,EAAErB,UAAU,CAACC,OAAO,CAACqB,cAAc,EAAEC,MAAM,IAAIC,sBAAe;QAClEC,KAAK,EAAEzB,UAAU,CAACC,OAAO,CAACqB,cAAc,EAAEI,QAAQ,IAAIF;MACvD;IACD,CAAC,CAAC;EACH,CAAC,CAAC,CAAC,CAAC;AACL","ignoreList":[]}
|
|
@@ -9,7 +9,6 @@ var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
|
9
9
|
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
10
10
|
var _useAssociatedStyle = require("../hooks/animation/use-associated-style");
|
|
11
11
|
var _useScrollRegistry = require("../hooks/gestures/use-scroll-registry");
|
|
12
|
-
var _gestures = require("../providers/gestures.provider");
|
|
13
12
|
var _registerBounds = require("../providers/register-bounds.provider");
|
|
14
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
14
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -21,34 +20,37 @@ function createTransitionAwareComponent(Wrapped, options = {}) {
|
|
|
21
20
|
} = options;
|
|
22
21
|
const AnimatedComponent = _reactNativeReanimated.default.createAnimatedComponent(Wrapped);
|
|
23
22
|
const ScrollableInner = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
// Determine scroll direction from the horizontal prop (standard ScrollView API)
|
|
24
|
+
const scrollDirection = props.horizontal ? "horizontal" : "vertical";
|
|
25
|
+
|
|
26
|
+
// Get scroll handlers and the gesture owner's nativeGesture for this axis
|
|
27
27
|
const {
|
|
28
28
|
scrollHandler,
|
|
29
29
|
onContentSizeChange,
|
|
30
30
|
onLayout,
|
|
31
|
-
|
|
32
|
-
onTouchEnd
|
|
31
|
+
nativeGesture
|
|
33
32
|
} = (0, _useScrollRegistry.useScrollRegistry)({
|
|
34
33
|
onScroll: props.onScroll,
|
|
35
34
|
onContentSizeChange: props.onContentSizeChange,
|
|
36
35
|
onLayout: props.onLayout,
|
|
37
|
-
|
|
38
|
-
onTouchEnd: props.onTouchEnd
|
|
36
|
+
direction: scrollDirection
|
|
39
37
|
});
|
|
38
|
+
const scrollableComponent = /*#__PURE__*/(0, _jsxRuntime.jsx)(AnimatedComponent, {
|
|
39
|
+
...props,
|
|
40
|
+
ref: ref,
|
|
41
|
+
onScroll: scrollHandler,
|
|
42
|
+
onContentSizeChange: onContentSizeChange,
|
|
43
|
+
onLayout: onLayout,
|
|
44
|
+
scrollEventThrottle: props.scrollEventThrottle || 16
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// If no gesture owner found for this axis, render without GestureDetector
|
|
48
|
+
if (!nativeGesture) {
|
|
49
|
+
return scrollableComponent;
|
|
50
|
+
}
|
|
40
51
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
|
|
41
52
|
gesture: nativeGesture,
|
|
42
|
-
children:
|
|
43
|
-
...props,
|
|
44
|
-
ref: ref,
|
|
45
|
-
onScroll: scrollHandler,
|
|
46
|
-
onContentSizeChange: onContentSizeChange,
|
|
47
|
-
onLayout: onLayout,
|
|
48
|
-
onTouchStart: onTouchStart,
|
|
49
|
-
onTouchEnd: onTouchEnd,
|
|
50
|
-
scrollEventThrottle: props.scrollEventThrottle || 16
|
|
51
|
-
})
|
|
53
|
+
children: scrollableComponent
|
|
52
54
|
});
|
|
53
55
|
});
|
|
54
56
|
const Inner = /*#__PURE__*/(0, _react.forwardRef)((props, _) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_interopRequireWildcard","_useAssociatedStyle","_useScrollRegistry","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_interopRequireWildcard","_useAssociatedStyle","_useScrollRegistry","_registerBounds","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","createTransitionAwareComponent","Wrapped","options","isScrollable","AnimatedComponent","Animated","createAnimatedComponent","ScrollableInner","forwardRef","props","ref","scrollDirection","horizontal","scrollHandler","onContentSizeChange","onLayout","nativeGesture","useScrollRegistry","onScroll","direction","scrollableComponent","jsx","scrollEventThrottle","GestureDetector","gesture","children","Inner","_","style","sharedBoundTag","styleId","onPress","rest","animatedRef","useAnimatedRef","associatedStyles","useAssociatedStyles","id","RegisterBoundsProvider","captureActiveOnPress","handleInitialLayout","runOnUI","collapsable","memo"],"sourceRoot":"../../../../src","sources":["shared/components/create-transition-aware-component.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,13 +9,20 @@ var _react = require("react");
|
|
|
9
9
|
var _reactNative = require("react-native");
|
|
10
10
|
var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
11
11
|
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
12
|
+
var _specs = require("../configs/specs");
|
|
12
13
|
var _constants = require("../constants");
|
|
13
14
|
var _useBackdropPointerEvents = require("../hooks/use-backdrop-pointer-events");
|
|
14
15
|
var _gestures = require("../providers/gestures.provider");
|
|
15
16
|
var _keys = require("../providers/screen/keys.provider");
|
|
16
17
|
var _styles = require("../providers/screen/styles.provider");
|
|
18
|
+
var _animation = require("../stores/animation.store");
|
|
19
|
+
var _gesture = require("../stores/gesture.store");
|
|
20
|
+
var _animateToProgress = require("../utils/animation/animate-to-progress");
|
|
21
|
+
var _findCollapseTarget = require("../utils/gesture/find-collapse-target");
|
|
17
22
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
23
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
24
|
+
/** biome-ignore-all lint/style/noNonNullAssertion: <Screen gesture is under the gesture context, so this will always exist.> */
|
|
25
|
+
|
|
19
26
|
const ScreenContainer = exports.ScreenContainer = /*#__PURE__*/(0, _react.memo)(({
|
|
20
27
|
children
|
|
21
28
|
}) => {
|
|
@@ -30,10 +37,56 @@ const ScreenContainer = exports.ScreenContainer = /*#__PURE__*/(0, _react.memo)(
|
|
|
30
37
|
backdropBehavior
|
|
31
38
|
} = (0, _useBackdropPointerEvents.useBackdropPointerEvents)();
|
|
32
39
|
const gestureContext = (0, _gestures.useGestureContext)();
|
|
33
|
-
const
|
|
40
|
+
const isBackdropActive = backdropBehavior === "dismiss" || backdropBehavior === "collapse";
|
|
41
|
+
const handleDismiss = (0, _react.useCallback)(() => {
|
|
42
|
+
const state = current.navigation.getState();
|
|
43
|
+
current.navigation.dispatch({
|
|
44
|
+
..._native.StackActions.pop(),
|
|
45
|
+
source: current.route.key,
|
|
46
|
+
target: state.key
|
|
47
|
+
});
|
|
48
|
+
}, [current]);
|
|
34
49
|
const handleBackdropPress = (0, _react.useCallback)(() => {
|
|
35
|
-
|
|
36
|
-
|
|
50
|
+
if (backdropBehavior === "dismiss") {
|
|
51
|
+
handleDismiss();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (backdropBehavior === "collapse") {
|
|
55
|
+
const snapPoints = current.options.snapPoints;
|
|
56
|
+
const canDismiss = current.options.gestureEnabled !== false;
|
|
57
|
+
|
|
58
|
+
// No snap points → fallback to dismiss
|
|
59
|
+
if (!snapPoints || snapPoints.length === 0) {
|
|
60
|
+
handleDismiss();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const animations = _animation.AnimationStore.getAll(current.route.key);
|
|
64
|
+
const gestures = _gesture.GestureStore.getRouteGestures(current.route.key);
|
|
65
|
+
const transitionSpec = current.options.transitionSpec;
|
|
66
|
+
(0, _reactNativeReanimated.runOnUI)(() => {
|
|
67
|
+
"worklet";
|
|
68
|
+
|
|
69
|
+
const {
|
|
70
|
+
target,
|
|
71
|
+
shouldDismiss
|
|
72
|
+
} = (0, _findCollapseTarget.findCollapseTarget)(animations.progress.value, snapPoints, canDismiss);
|
|
73
|
+
|
|
74
|
+
// If already dismissing, skip
|
|
75
|
+
if (gestures.isDismissing.value) return;
|
|
76
|
+
gestures.isDismissing.value = shouldDismiss ? 1 : 0;
|
|
77
|
+
const spec = shouldDismiss ? transitionSpec : {
|
|
78
|
+
open: transitionSpec?.expand ?? _specs.DefaultSnapSpec,
|
|
79
|
+
close: transitionSpec?.collapse ?? _specs.DefaultSnapSpec
|
|
80
|
+
};
|
|
81
|
+
(0, _animateToProgress.animateToProgress)({
|
|
82
|
+
target,
|
|
83
|
+
spec,
|
|
84
|
+
animations,
|
|
85
|
+
onAnimationFinish: shouldDismiss ? handleDismiss : undefined
|
|
86
|
+
});
|
|
87
|
+
})();
|
|
88
|
+
}
|
|
89
|
+
}, [backdropBehavior, current, handleDismiss]);
|
|
37
90
|
const animatedContentStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
|
|
38
91
|
"worklet";
|
|
39
92
|
|
|
@@ -49,8 +102,8 @@ const ScreenContainer = exports.ScreenContainer = /*#__PURE__*/(0, _react.memo)(
|
|
|
49
102
|
pointerEvents: pointerEvents,
|
|
50
103
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
51
104
|
style: _reactNative.StyleSheet.absoluteFillObject,
|
|
52
|
-
pointerEvents:
|
|
53
|
-
onPress:
|
|
105
|
+
pointerEvents: isBackdropActive ? "auto" : "none",
|
|
106
|
+
onPress: isBackdropActive ? handleBackdropPress : undefined,
|
|
54
107
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
|
|
55
108
|
style: [_reactNative.StyleSheet.absoluteFillObject, animatedBackdropStyle]
|
|
56
109
|
})
|
|
@@ -58,7 +111,7 @@ const ScreenContainer = exports.ScreenContainer = /*#__PURE__*/(0, _react.memo)(
|
|
|
58
111
|
gesture: gestureContext.panGesture,
|
|
59
112
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
|
|
60
113
|
style: [styles.content, animatedContentStyle],
|
|
61
|
-
pointerEvents:
|
|
114
|
+
pointerEvents: isBackdropActive ? "box-none" : pointerEvents,
|
|
62
115
|
children: children
|
|
63
116
|
})
|
|
64
117
|
})]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_native","require","_react","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_interopRequireWildcard","_constants","_useBackdropPointerEvents","_gestures","_keys","_styles","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ScreenContainer","exports","memo","children","stylesMap","useScreenStyles","current","useKeys","pointerEvents","backdropBehavior","useBackdropPointerEvents","gestureContext","useGestureContext","
|
|
1
|
+
{"version":3,"names":["_native","require","_react","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_interopRequireWildcard","_specs","_constants","_useBackdropPointerEvents","_gestures","_keys","_styles","_animation","_gesture","_animateToProgress","_findCollapseTarget","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ScreenContainer","exports","memo","children","stylesMap","useScreenStyles","current","useKeys","pointerEvents","backdropBehavior","useBackdropPointerEvents","gestureContext","useGestureContext","isBackdropActive","handleDismiss","useCallback","state","navigation","getState","dispatch","StackActions","pop","source","route","key","target","handleBackdropPress","snapPoints","options","canDismiss","gestureEnabled","length","animations","AnimationStore","getAll","gestures","GestureStore","getRouteGestures","transitionSpec","runOnUI","shouldDismiss","findCollapseTarget","progress","value","isDismissing","spec","open","expand","DefaultSnapSpec","close","collapse","animateToProgress","onAnimationFinish","undefined","animatedContentStyle","useAnimatedStyle","contentStyle","NO_STYLES","animatedBackdropStyle","backdropStyle","overlayStyle","jsxs","View","style","styles","container","jsx","Pressable","StyleSheet","absoluteFillObject","onPress","GestureDetector","gesture","panGesture","content","create","flex"],"sourceRoot":"../../../../src","sources":["shared/components/screen-container.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.createScreenTransitionState = exports.TRUE = exports.NO_STYLES = exports.MASK_STYLE_ID = exports.IS_WEB = exports.GESTURE_VELOCITY_IMPACT = exports.FULLSCREEN_DIMENSIONS = exports.FALSE = exports.EXIT_RANGE = exports.EPSILON = exports.ENTER_RANGE = exports.EMPTY_BOUND_HELPER_RESULT_RAW = exports.EMPTY_BOUND_HELPER_RESULT = exports.DEFAULT_SCREEN_TRANSITION_STATE = exports.DEFAULT_GESTURE_DRIVES_PROGRESS = exports.DEFAULT_GESTURE_DIRECTION = exports.DEFAULT_GESTURE_ACTIVATION_AREA = exports.CONTAINER_STYLE_ID = void 0;
|
|
6
|
+
exports.createScreenTransitionState = exports.TRUE = exports.SNAP_VELOCITY_IMPACT = exports.NO_STYLES = exports.MASK_STYLE_ID = exports.IS_WEB = exports.GESTURE_VELOCITY_IMPACT = exports.FULLSCREEN_DIMENSIONS = exports.FALSE = exports.EXIT_RANGE = exports.EPSILON = exports.ENTER_RANGE = exports.EMPTY_BOUND_HELPER_RESULT_RAW = exports.EMPTY_BOUND_HELPER_RESULT = exports.DEFAULT_SCREEN_TRANSITION_STATE = exports.DEFAULT_GESTURE_DRIVES_PROGRESS = exports.DEFAULT_GESTURE_DIRECTION = exports.DEFAULT_GESTURE_ACTIVATION_AREA = exports.CONTAINER_STYLE_ID = exports.ANIMATION_SNAP_THRESHOLD = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
/**
|
|
9
9
|
* Masked view integration
|
|
@@ -90,6 +90,7 @@ const FULLSCREEN_DIMENSIONS = dimensions => {
|
|
|
90
90
|
*/
|
|
91
91
|
exports.FULLSCREEN_DIMENSIONS = FULLSCREEN_DIMENSIONS;
|
|
92
92
|
const GESTURE_VELOCITY_IMPACT = exports.GESTURE_VELOCITY_IMPACT = 0.3;
|
|
93
|
+
const SNAP_VELOCITY_IMPACT = exports.SNAP_VELOCITY_IMPACT = 0.1;
|
|
93
94
|
const DEFAULT_GESTURE_DIRECTION = exports.DEFAULT_GESTURE_DIRECTION = "horizontal";
|
|
94
95
|
const DEFAULT_GESTURE_DRIVES_PROGRESS = exports.DEFAULT_GESTURE_DRIVES_PROGRESS = true;
|
|
95
96
|
const DEFAULT_GESTURE_ACTIVATION_AREA = exports.DEFAULT_GESTURE_ACTIVATION_AREA = "screen";
|
|
@@ -101,4 +102,10 @@ const FALSE = exports.FALSE = 0;
|
|
|
101
102
|
* Small value for floating-point comparisons to handle animation/interpolation imprecision
|
|
102
103
|
*/
|
|
103
104
|
const EPSILON = exports.EPSILON = 1e-5;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Threshold for snapping animations to target when "close enough" (1% of range).
|
|
108
|
+
* Prevents micro-jitter/oscillation near animation endpoints.
|
|
109
|
+
*/
|
|
110
|
+
const ANIMATION_SNAP_THRESHOLD = exports.ANIMATION_SNAP_THRESHOLD = 0.01;
|
|
104
111
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","MASK_STYLE_ID","exports","CONTAINER_STYLE_ID","NO_STYLES","Object","freeze","DEFAULT_GESTURE_VALUES","x","y","normalizedX","normalizedY","isDismissing","isDragging","direction","createScreenTransitionState","route","meta","progress","closing","animating","entering","gesture","DEFAULT_SCREEN_TRANSITION_STATE","EMPTY_BOUND_HELPER_RESULT","EMPTY_BOUND_HELPER_RESULT_RAW","scaleX","scaleY","scale","translateX","translateY","width","height","ENTER_RANGE","EXIT_RANGE","FULLSCREEN_DIMENSIONS","dimensions","pageX","pageY","GESTURE_VELOCITY_IMPACT","DEFAULT_GESTURE_DIRECTION","DEFAULT_GESTURE_DRIVES_PROGRESS","DEFAULT_GESTURE_ACTIVATION_AREA","IS_WEB","Platform","OS","TRUE","FALSE","EPSILON"],"sourceRoot":"../../../src","sources":["shared/constants.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAOA;AACA;AACA;AACO,MAAMC,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,cAAc;AACpC,MAAME,kBAAkB,GAAAD,OAAA,CAAAC,kBAAA,GAAG,iBAAiB;;AAEnD;AACA;AACA;AACO,MAAMC,SAAS,GAAAF,OAAA,CAAAE,SAAA,GAAGC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;;AAE1C;AACA;AACA;AACA,MAAMC,sBAAsB,GAAG;EAC9BC,CAAC,EAAE,CAAC;EACJC,CAAC,EAAE,CAAC;EACJC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE,CAAC;EACdC,YAAY,EAAE,CAAC;EACfC,UAAU,EAAE,CAAC;EACbC,SAAS,EAAE;AACZ,CAAU;;AAEV;AACA;AACA;AACO,MAAMC,2BAA2B,GAAGA,CAC1CC,KAAqB,EACrBC,IAA8B,MACF;EAC5BC,QAAQ,EAAE,CAAC;EACXC,OAAO,EAAE,CAAC;EACVC,SAAS,EAAE,CAAC;EACZC,QAAQ,EAAE,CAAC;EACXC,OAAO,EAAE;IAAE,GAAGf;EAAuB,CAAC;EACtCS,KAAK;EACLC;AACD,CAAC,CAAC;;AAEF;AACA;AACA;AAFAf,OAAA,CAAAa,2BAAA,GAAAA,2BAAA;AAGO,MAAMQ,+BAAsD,GAAArB,OAAA,CAAAqB,+BAAA,GAClElB,MAAM,CAACC,MAAM,CAAC;EACbY,QAAQ,EAAE,CAAC;EACXC,OAAO,EAAE,CAAC;EACVC,SAAS,EAAE,CAAC;EACZC,QAAQ,EAAE,CAAC;EACXC,OAAO,EAAEf,sBAAsB;EAC/BS,KAAK,EAAE,CAAC;AACT,CAAC,CAAC;;AAEH;AACA;AACA;AACO,MAAMQ,yBAAyB,GAAAtB,OAAA,CAAAsB,yBAAA,GAAGnB,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;AACnD,MAAMmB,6BAA6B,GAAAvB,OAAA,CAAAuB,6BAAA,GAAGpB,MAAM,CAACC,MAAM,CAAC;EAC1DoB,MAAM,EAAE,CAAC;EACTC,MAAM,EAAE,CAAC;EACTC,KAAK,EAAE,CAAC;EACRC,UAAU,EAAE,CAAC;EACbC,UAAU,EAAE,CAAC;EACbC,KAAK,EAAE,CAAC;EACRC,MAAM,EAAE;AACT,CAAC,CAAC;AACK,MAAMC,WAAW,GAAA/B,OAAA,CAAA+B,WAAA,GAAG,CAAC,CAAC,EAAE,CAAC,CAAU;AACnC,MAAMC,UAAU,GAAAhC,OAAA,CAAAgC,UAAA,GAAG,CAAC,CAAC,EAAE,CAAC,CAAU;AAElC,MAAMC,qBAAqB,GACjCC,UAAkB,IACM;EACxB,SAAS;;EACT,OAAO;IACN5B,CAAC,EAAE,CAAC;IACJC,CAAC,EAAE,CAAC;IACJ4B,KAAK,EAAE,CAAC;IACRC,KAAK,EAAE,CAAC;IACRP,KAAK,EAAEK,UAAU,CAACL,KAAK;IACvBC,MAAM,EAAEI,UAAU,CAACJ;EACpB,CAAC;AACF,CAAC;;AAED;AACA;AACA;AAFA9B,OAAA,CAAAiC,qBAAA,GAAAA,qBAAA;AAGO,MAAMI,uBAAuB,GAAArC,OAAA,CAAAqC,uBAAA,GAAG,GAAG;AACnC,MAAMC,
|
|
1
|
+
{"version":3,"names":["_reactNative","require","MASK_STYLE_ID","exports","CONTAINER_STYLE_ID","NO_STYLES","Object","freeze","DEFAULT_GESTURE_VALUES","x","y","normalizedX","normalizedY","isDismissing","isDragging","direction","createScreenTransitionState","route","meta","progress","closing","animating","entering","gesture","DEFAULT_SCREEN_TRANSITION_STATE","EMPTY_BOUND_HELPER_RESULT","EMPTY_BOUND_HELPER_RESULT_RAW","scaleX","scaleY","scale","translateX","translateY","width","height","ENTER_RANGE","EXIT_RANGE","FULLSCREEN_DIMENSIONS","dimensions","pageX","pageY","GESTURE_VELOCITY_IMPACT","SNAP_VELOCITY_IMPACT","DEFAULT_GESTURE_DIRECTION","DEFAULT_GESTURE_DRIVES_PROGRESS","DEFAULT_GESTURE_ACTIVATION_AREA","IS_WEB","Platform","OS","TRUE","FALSE","EPSILON","ANIMATION_SNAP_THRESHOLD"],"sourceRoot":"../../../src","sources":["shared/constants.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,10 +9,43 @@ var _react = require("react");
|
|
|
9
9
|
var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
10
10
|
var _keys = require("../../providers/screen/keys.provider");
|
|
11
11
|
var _gesture = require("../../stores/gesture.store");
|
|
12
|
+
var _computeClaimedDirections = require("../../utils/gesture/compute-claimed-directions");
|
|
13
|
+
var _resolveOwnership = require("../../utils/gesture/resolve-ownership");
|
|
12
14
|
var _useScreenGestureHandlers = require("./use-screen-gesture-handlers");
|
|
15
|
+
const DIRECTIONS = ["vertical", "vertical-inverted", "horizontal", "horizontal-inverted"];
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Finds ancestor pan gestures that we shadow (claim the same direction).
|
|
19
|
+
* Used to block ancestors when child claims priority.
|
|
20
|
+
*/
|
|
21
|
+
function findShadowedAncestorPanGestures(selfClaims, ancestorContext, isIsolated) {
|
|
22
|
+
const shadowedGestures = [];
|
|
23
|
+
let ancestor = ancestorContext;
|
|
24
|
+
while (ancestor) {
|
|
25
|
+
if (ancestor.isIsolated !== isIsolated) break;
|
|
26
|
+
const shadowsAncestor = DIRECTIONS.some(dir => selfClaims[dir] && ancestor?.claimedDirections?.[dir]);
|
|
27
|
+
if (shadowsAncestor && ancestor.panGesture) {
|
|
28
|
+
shadowedGestures.push(ancestor.panGesture);
|
|
29
|
+
}
|
|
30
|
+
ancestor = ancestor.ancestorContext;
|
|
31
|
+
}
|
|
32
|
+
return shadowedGestures;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Builds the Pan gesture for screen dismissal.
|
|
36
|
+
*
|
|
37
|
+
* Handles shadowing: when child claims same direction as ancestor,
|
|
38
|
+
* child's pan blocks ancestor's pan via `blocksExternalGesture()`.
|
|
39
|
+
*
|
|
40
|
+
* ScrollView coordination is handled separately by useScrollRegistry,
|
|
41
|
+
* which creates its own Native gesture per ScrollView.
|
|
42
|
+
*/
|
|
13
43
|
const useBuildGestures = ({
|
|
14
44
|
scrollConfig,
|
|
15
|
-
ancestorContext
|
|
45
|
+
ancestorContext,
|
|
46
|
+
claimedDirections,
|
|
47
|
+
childDirectionClaims,
|
|
48
|
+
isIsolated
|
|
16
49
|
}) => {
|
|
17
50
|
const {
|
|
18
51
|
current
|
|
@@ -21,33 +54,21 @@ const useBuildGestures = ({
|
|
|
21
54
|
const isFirstScreen = (0, _react.useMemo)(() => {
|
|
22
55
|
return navState.routes.findIndex(r => r.key === current.route.key) === 0;
|
|
23
56
|
}, [navState.routes, current.route.key]);
|
|
24
|
-
|
|
25
|
-
// Ref for external gesture coordination (e.g., swipeable lists)
|
|
26
57
|
const panGestureRef = (0, _react.useRef)(undefined);
|
|
27
58
|
const gestureAnimationValues = _gesture.GestureStore.getRouteGestures(current.route.key);
|
|
28
59
|
const {
|
|
29
60
|
snapPoints
|
|
30
61
|
} = current.options;
|
|
31
|
-
|
|
32
|
-
// Dismiss gesture is controlled by gestureEnabled (disabled for first screen)
|
|
33
62
|
const canDismiss = Boolean(isFirstScreen ? false : current.options.gestureEnabled);
|
|
34
|
-
|
|
35
|
-
// Snap navigation works independently - enabled when snap points exist
|
|
36
|
-
// This matches iOS native sheet behavior where gestureEnabled: false
|
|
37
|
-
// disables dismiss but you can still drag between detents
|
|
38
63
|
const hasSnapPoints = Array.isArray(snapPoints) && snapPoints.length > 0;
|
|
39
64
|
const gestureEnabled = canDismiss || hasSnapPoints;
|
|
65
|
+
const ownershipStatus = (0, _react.useMemo)(() => (0, _resolveOwnership.resolveOwnership)(claimedDirections, ancestorContext ?? null), [claimedDirections, ancestorContext]);
|
|
66
|
+
const selfClaimsAny = (0, _computeClaimedDirections.claimsAnyDirection)(claimedDirections);
|
|
40
67
|
const handleDismiss = (0, _react.useCallback)(() => {
|
|
41
|
-
|
|
42
|
-
// avoid racing with the ancestor
|
|
43
|
-
if (ancestorContext?.gestureAnimationValues.isDismissing?.value) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
68
|
+
if (ancestorContext?.gestureAnimationValues.isDismissing?.value) return;
|
|
46
69
|
const state = current.navigation.getState();
|
|
47
70
|
const routeStillPresent = state.routes.some(route => route.key === current.route.key);
|
|
48
|
-
if (!routeStillPresent)
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
71
|
+
if (!routeStillPresent) return;
|
|
51
72
|
current.navigation.dispatch({
|
|
52
73
|
..._native.StackActions.pop(),
|
|
53
74
|
source: current.route.key,
|
|
@@ -64,39 +85,28 @@ const useBuildGestures = ({
|
|
|
64
85
|
scrollConfig,
|
|
65
86
|
canDismiss,
|
|
66
87
|
handleDismiss,
|
|
67
|
-
|
|
88
|
+
ownershipStatus,
|
|
89
|
+
ancestorIsDismissing: ancestorContext?.gestureAnimationValues.isDismissing,
|
|
90
|
+
claimedDirections,
|
|
91
|
+
ancestorContext,
|
|
92
|
+
childDirectionClaims
|
|
68
93
|
});
|
|
69
94
|
return (0, _react.useMemo)(() => {
|
|
70
95
|
const panGesture = _reactNativeGestureHandler.Gesture.Pan().withRef(panGestureRef).enabled(gestureEnabled).manualActivation(true).onTouchesDown(onTouchesDown).onTouchesMove(onTouchesMove).onStart(onStart).onUpdate(onUpdate).onEnd(onEnd);
|
|
71
96
|
|
|
72
|
-
//
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
panGesture.blocksExternalGesture(nativeGesture);
|
|
78
|
-
} else {
|
|
79
|
-
// This screen has no gestures
|
|
80
|
-
// Find nearest ancestor with gestureEnabled=true (attached pan)
|
|
81
|
-
let activePanAncestor = ancestorContext;
|
|
82
|
-
while (activePanAncestor && !activePanAncestor.gestureEnabled) {
|
|
83
|
-
activePanAncestor = activePanAncestor.ancestorContext;
|
|
84
|
-
}
|
|
85
|
-
if (activePanAncestor?.panGesture) {
|
|
86
|
-
// Found an ancestor with enabled pan - wait for it
|
|
87
|
-
nativeGesture = _reactNativeGestureHandler.Gesture.Native().requireExternalGestureToFail(activePanAncestor.panGesture);
|
|
88
|
-
} else {
|
|
89
|
-
// No ancestor with enabled pan - plain native
|
|
90
|
-
nativeGesture = _reactNativeGestureHandler.Gesture.Native();
|
|
97
|
+
// Block shadowed ancestor pan gestures when we claim same directions
|
|
98
|
+
if (selfClaimsAny) {
|
|
99
|
+
const shadowedAncestorGestures = findShadowedAncestorPanGestures(claimedDirections, ancestorContext, isIsolated);
|
|
100
|
+
for (const ancestorPan of shadowedAncestorGestures) {
|
|
101
|
+
panGesture.blocksExternalGesture(ancestorPan);
|
|
91
102
|
}
|
|
92
103
|
}
|
|
93
104
|
return {
|
|
94
105
|
panGesture,
|
|
95
106
|
panGestureRef,
|
|
96
|
-
nativeGesture,
|
|
97
107
|
gestureAnimationValues
|
|
98
108
|
};
|
|
99
|
-
}, [gestureEnabled, onTouchesDown, onTouchesMove, onStart, onUpdate, onEnd, gestureAnimationValues, ancestorContext]);
|
|
109
|
+
}, [gestureEnabled, selfClaimsAny, claimedDirections, onTouchesDown, onTouchesMove, onStart, onUpdate, onEnd, gestureAnimationValues, ancestorContext, isIsolated]);
|
|
100
110
|
};
|
|
101
111
|
exports.useBuildGestures = useBuildGestures;
|
|
102
112
|
//# sourceMappingURL=use-build-gestures.js.map
|