react-native-screen-transitions 3.3.0-beta.2 → 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.
Files changed (119) hide show
  1. package/README.md +95 -31
  2. package/lib/commonjs/shared/animation/snap-to.js +17 -10
  3. package/lib/commonjs/shared/animation/snap-to.js.map +1 -1
  4. package/lib/commonjs/shared/components/create-transition-aware-component.js +20 -18
  5. package/lib/commonjs/shared/components/create-transition-aware-component.js.map +1 -1
  6. package/lib/commonjs/shared/components/screen-container.js +68 -9
  7. package/lib/commonjs/shared/components/screen-container.js.map +1 -1
  8. package/lib/commonjs/shared/constants.js +8 -1
  9. package/lib/commonjs/shared/constants.js.map +1 -1
  10. package/lib/commonjs/shared/hooks/gestures/use-build-gestures.js +49 -39
  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 +110 -61
  13. package/lib/commonjs/shared/hooks/gestures/use-screen-gesture-handlers.js.map +1 -1
  14. package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js +67 -70
  15. package/lib/commonjs/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
  16. package/lib/commonjs/shared/providers/gestures.provider.js +113 -25
  17. package/lib/commonjs/shared/providers/gestures.provider.js.map +1 -1
  18. package/lib/commonjs/shared/types/ownership.types.js +71 -0
  19. package/lib/commonjs/shared/types/ownership.types.js.map +1 -0
  20. package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js +72 -128
  21. package/lib/commonjs/shared/utils/gesture/check-gesture-activation.js.map +1 -1
  22. package/lib/commonjs/shared/utils/gesture/compute-claimed-directions.js +81 -0
  23. package/lib/commonjs/shared/utils/gesture/compute-claimed-directions.js.map +1 -0
  24. package/lib/commonjs/shared/utils/gesture/determine-snap-target.js +1 -1
  25. package/lib/commonjs/shared/utils/gesture/determine-snap-target.js.map +1 -1
  26. package/lib/commonjs/shared/utils/gesture/find-collapse-target.js +48 -0
  27. package/lib/commonjs/shared/utils/gesture/find-collapse-target.js.map +1 -0
  28. package/lib/commonjs/shared/utils/gesture/resolve-ownership.js +87 -0
  29. package/lib/commonjs/shared/utils/gesture/resolve-ownership.js.map +1 -0
  30. package/lib/commonjs/shared/utils/gesture/velocity.js +16 -5
  31. package/lib/commonjs/shared/utils/gesture/velocity.js.map +1 -1
  32. package/lib/module/shared/animation/snap-to.js +16 -10
  33. package/lib/module/shared/animation/snap-to.js.map +1 -1
  34. package/lib/module/shared/components/create-transition-aware-component.js +20 -18
  35. package/lib/module/shared/components/create-transition-aware-component.js.map +1 -1
  36. package/lib/module/shared/components/screen-container.js +68 -10
  37. package/lib/module/shared/components/screen-container.js.map +1 -1
  38. package/lib/module/shared/constants.js +7 -0
  39. package/lib/module/shared/constants.js.map +1 -1
  40. package/lib/module/shared/hooks/gestures/use-build-gestures.js +49 -39
  41. package/lib/module/shared/hooks/gestures/use-build-gestures.js.map +1 -1
  42. package/lib/module/shared/hooks/gestures/use-screen-gesture-handlers.js +112 -63
  43. package/lib/module/shared/hooks/gestures/use-screen-gesture-handlers.js.map +1 -1
  44. package/lib/module/shared/hooks/gestures/use-scroll-registry.js +68 -70
  45. package/lib/module/shared/hooks/gestures/use-scroll-registry.js.map +1 -1
  46. package/lib/module/shared/providers/gestures.provider.js +113 -25
  47. package/lib/module/shared/providers/gestures.provider.js.map +1 -1
  48. package/lib/module/shared/types/ownership.types.js +67 -0
  49. package/lib/module/shared/types/ownership.types.js.map +1 -0
  50. package/lib/module/shared/utils/gesture/check-gesture-activation.js +70 -126
  51. package/lib/module/shared/utils/gesture/check-gesture-activation.js.map +1 -1
  52. package/lib/module/shared/utils/gesture/compute-claimed-directions.js +77 -0
  53. package/lib/module/shared/utils/gesture/compute-claimed-directions.js.map +1 -0
  54. package/lib/module/shared/utils/gesture/determine-snap-target.js +1 -1
  55. package/lib/module/shared/utils/gesture/determine-snap-target.js.map +1 -1
  56. package/lib/module/shared/utils/gesture/find-collapse-target.js +44 -0
  57. package/lib/module/shared/utils/gesture/find-collapse-target.js.map +1 -0
  58. package/lib/module/shared/utils/gesture/resolve-ownership.js +83 -0
  59. package/lib/module/shared/utils/gesture/resolve-ownership.js.map +1 -0
  60. package/lib/module/shared/utils/gesture/velocity.js +16 -5
  61. package/lib/module/shared/utils/gesture/velocity.js.map +1 -1
  62. package/lib/typescript/shared/animation/snap-to.d.ts.map +1 -1
  63. package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
  64. package/lib/typescript/shared/components/screen-container.d.ts.map +1 -1
  65. package/lib/typescript/shared/constants.d.ts +6 -0
  66. package/lib/typescript/shared/constants.d.ts.map +1 -1
  67. package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts +15 -3
  68. package/lib/typescript/shared/hooks/gestures/use-build-gestures.d.ts.map +1 -1
  69. package/lib/typescript/shared/hooks/gestures/use-screen-gesture-handlers.d.ts +52 -2
  70. package/lib/typescript/shared/hooks/gestures/use-screen-gesture-handlers.d.ts.map +1 -1
  71. package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts +11 -6
  72. package/lib/typescript/shared/hooks/gestures/use-scroll-registry.d.ts.map +1 -1
  73. package/lib/typescript/shared/hooks/use-backdrop-pointer-events.d.ts +1 -1
  74. package/lib/typescript/shared/hooks/use-backdrop-pointer-events.d.ts.map +1 -1
  75. package/lib/typescript/shared/providers/gestures.provider.d.ts +28 -3
  76. package/lib/typescript/shared/providers/gestures.provider.d.ts.map +1 -1
  77. package/lib/typescript/shared/types/ownership.types.d.ts +52 -0
  78. package/lib/typescript/shared/types/ownership.types.d.ts.map +1 -0
  79. package/lib/typescript/shared/types/screen.types.d.ts +22 -1
  80. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  81. package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts +23 -19
  82. package/lib/typescript/shared/utils/gesture/check-gesture-activation.d.ts.map +1 -1
  83. package/lib/typescript/shared/utils/gesture/compute-claimed-directions.d.ts +23 -0
  84. package/lib/typescript/shared/utils/gesture/compute-claimed-directions.d.ts.map +1 -0
  85. package/lib/typescript/shared/utils/gesture/determine-snap-target.d.ts +5 -1
  86. package/lib/typescript/shared/utils/gesture/determine-snap-target.d.ts.map +1 -1
  87. package/lib/typescript/shared/utils/gesture/find-collapse-target.d.ts +17 -0
  88. package/lib/typescript/shared/utils/gesture/find-collapse-target.d.ts.map +1 -0
  89. package/lib/typescript/shared/utils/gesture/resolve-ownership.d.ts +36 -0
  90. package/lib/typescript/shared/utils/gesture/resolve-ownership.d.ts.map +1 -0
  91. package/lib/typescript/shared/utils/gesture/velocity.d.ts.map +1 -1
  92. package/package.json +121 -120
  93. package/src/shared/animation/snap-to.ts +17 -11
  94. package/src/shared/components/create-transition-aware-component.tsx +28 -25
  95. package/src/shared/components/screen-container.tsx +79 -12
  96. package/src/shared/constants.ts +7 -0
  97. package/src/shared/hooks/gestures/use-build-gestures.tsx +80 -44
  98. package/src/shared/hooks/gestures/use-screen-gesture-handlers.ts +147 -71
  99. package/src/shared/hooks/gestures/use-scroll-registry.tsx +94 -86
  100. package/src/shared/hooks/use-backdrop-pointer-events.ts +1 -1
  101. package/src/shared/providers/gestures.provider.tsx +168 -25
  102. package/src/shared/types/ownership.types.ts +77 -0
  103. package/src/shared/types/screen.types.ts +24 -1
  104. package/src/shared/utils/gesture/check-gesture-activation.ts +82 -116
  105. package/src/shared/utils/gesture/compute-claimed-directions.ts +93 -0
  106. package/src/shared/utils/gesture/determine-snap-target.ts +6 -2
  107. package/src/shared/utils/gesture/find-collapse-target.ts +42 -0
  108. package/src/shared/utils/gesture/resolve-ownership.ts +110 -0
  109. package/src/shared/utils/gesture/velocity.ts +16 -6
  110. package/src/shared/__tests__/bounds.store.test.ts +0 -394
  111. package/src/shared/__tests__/derivations.test.ts +0 -156
  112. package/src/shared/__tests__/determine-dismissal.test.ts +0 -111
  113. package/src/shared/__tests__/determine-snap-target.test.ts +0 -268
  114. package/src/shared/__tests__/geometry.test.ts +0 -130
  115. package/src/shared/__tests__/gesture-activation.test.ts +0 -471
  116. package/src/shared/__tests__/gesture.velocity.test.ts +0 -131
  117. package/src/shared/__tests__/history.store.test.ts +0 -550
  118. package/src/shared/__tests__/sync-routes-with-removed.test.ts +0 -137
  119. package/src/shared/__tests__/validate-snap-points.test.ts +0 -125
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
 
3
+ /** biome-ignore-all lint/style/noNonNullAssertion: <Options always exist> */
3
4
  import { runOnUI } from "react-native-reanimated";
4
5
  import { DefaultSnapSpec } from "../configs/specs";
5
6
  import { AnimationStore } from "../stores/animation.store";
6
7
  import { HistoryStore } from "../stores/history.store";
7
8
  import { animateToProgress } from "../utils/animation/animate-to-progress";
9
+ import { logger } from "../utils/logger";
8
10
 
9
11
  /**
10
12
  * Programmatically snap the currently focused screen to a specific snap point.
@@ -23,22 +25,26 @@ import { animateToProgress } from "../utils/animation/animate-to-progress";
23
25
  * ```
24
26
  */
25
27
  export function snapTo(index) {
26
- const recent = HistoryStore.getMostRecent();
27
- if (!recent) {
28
- console.warn("snapTo: No screen in history");
28
+ // Find the most recent screen that has snapPoints defined.
29
+ // This handles cases where parent screens (e.g., expo-router) register after
30
+ // ComponentStack screens, but the ComponentStack is what we want to snap.
31
+ const allHistory = HistoryStore.toArray();
32
+ const screenWithSnapPoints = allHistory.filter(entry => {
33
+ const sp = entry.descriptor.options?.snapPoints;
34
+ return sp && sp.length > 0;
35
+ }).pop(); // Last item is most recent (toArray returns oldest-first)
36
+
37
+ if (!screenWithSnapPoints) {
38
+ logger.warn("snapTo: No screens with snapPoints in history");
29
39
  return;
30
40
  }
31
41
  const {
32
42
  descriptor
33
- } = recent;
34
- const snapPoints = descriptor.options?.snapPoints;
35
- if (!snapPoints || snapPoints.length === 0) {
36
- console.warn("snapTo: No snapPoints defined on current screen");
37
- return;
38
- }
43
+ } = screenWithSnapPoints;
44
+ const snapPoints = descriptor.options.snapPoints;
39
45
  const sorted = [...snapPoints].sort((a, b) => a - b);
40
46
  if (index < 0 || index >= sorted.length) {
41
- console.warn(`snapTo: index ${index} out of bounds (0-${sorted.length - 1})`);
47
+ logger.warn(`snapTo: index ${index} out of bounds (0-${sorted.length - 1})`);
42
48
  return;
43
49
  }
44
50
  const targetProgress = sorted[index];
@@ -1 +1 @@
1
- {"version":3,"names":["runOnUI","DefaultSnapSpec","AnimationStore","HistoryStore","animateToProgress","snapTo","index","recent","getMostRecent","console","warn","descriptor","snapPoints","options","length","sorted","sort","a","b","targetProgress","animations","getAll","route","key","target","spec","open","transitionSpec","expand","close","collapse"],"sourceRoot":"../../../../src","sources":["shared/animation/snap-to.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,yBAAyB;AACjD,SAASC,eAAe,QAAQ,kBAAkB;AAClD,SAASC,cAAc,QAAQ,2BAA2B;AAC1D,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,iBAAiB,QAAQ,wCAAwC;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAACC,KAAa,EAAQ;EAC3C,MAAMC,MAAM,GAAGJ,YAAY,CAACK,aAAa,CAAC,CAAC;EAE3C,IAAI,CAACD,MAAM,EAAE;IACZE,OAAO,CAACC,IAAI,CAAC,8BAA8B,CAAC;IAC5C;EACD;EAEA,MAAM;IAAEC;EAAW,CAAC,GAAGJ,MAAM;EAC7B,MAAMK,UAAU,GAAGD,UAAU,CAACE,OAAO,EAAED,UAAU;EAEjD,IAAI,CAACA,UAAU,IAAIA,UAAU,CAACE,MAAM,KAAK,CAAC,EAAE;IAC3CL,OAAO,CAACC,IAAI,CAAC,iDAAiD,CAAC;IAC/D;EACD;EAEA,MAAMK,MAAM,GAAG,CAAC,GAAGH,UAAU,CAAC,CAACI,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC;EAEpD,IAAIZ,KAAK,GAAG,CAAC,IAAIA,KAAK,IAAIS,MAAM,CAACD,MAAM,EAAE;IACxCL,OAAO,CAACC,IAAI,CACX,iBAAiBJ,KAAK,qBAAqBS,MAAM,CAACD,MAAM,GAAG,CAAC,GAC7D,CAAC;IACD;EACD;EAEA,MAAMK,cAAc,GAAGJ,MAAM,CAACT,KAAK,CAAC;EACpC,MAAMc,UAAU,GAAGlB,cAAc,CAACmB,MAAM,CAACV,UAAU,CAACW,KAAK,CAACC,GAAG,CAAC;EAE9DvB,OAAO,CAAC,MAAM;IACb,SAAS;;IACTI,iBAAiB,CAAC;MACjBoB,MAAM,EAAEL,cAAc;MACtBC,UAAU;MACVK,IAAI,EAAE;QACLC,IAAI,EAAEf,UAAU,CAACE,OAAO,CAACc,cAAc,EAAEC,MAAM,IAAI3B,eAAe;QAClE4B,KAAK,EAAElB,UAAU,CAACE,OAAO,CAACc,cAAc,EAAEG,QAAQ,IAAI7B;MACvD;IACD,CAAC,CAAC;EACH,CAAC,CAAC,CAAC,CAAC;AACL","ignoreList":[]}
1
+ {"version":3,"names":["runOnUI","DefaultSnapSpec","AnimationStore","HistoryStore","animateToProgress","logger","snapTo","index","allHistory","toArray","screenWithSnapPoints","filter","entry","sp","descriptor","options","snapPoints","length","pop","warn","sorted","sort","a","b","targetProgress","animations","getAll","route","key","target","spec","open","transitionSpec","expand","close","collapse"],"sourceRoot":"../../../../src","sources":["shared/animation/snap-to.ts"],"mappings":";;AAAA;AACA,SAASA,OAAO,QAAQ,yBAAyB;AACjD,SAASC,eAAe,QAAQ,kBAAkB;AAClD,SAASC,cAAc,QAAQ,2BAA2B;AAC1D,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,iBAAiB,QAAQ,wCAAwC;AAC1E,SAASC,MAAM,QAAQ,iBAAiB;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAACC,KAAa,EAAQ;EAC3C;EACA;EACA;EACA,MAAMC,UAAU,GAAGL,YAAY,CAACM,OAAO,CAAC,CAAC;EACzC,MAAMC,oBAAoB,GAAGF,UAAU,CACrCG,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;IAC1BL,MAAM,CAACc,IAAI,CAAC,+CAA+C,CAAC;IAC5D;EACD;EAEA,MAAM;IAAEL;EAAW,CAAC,GAAGJ,oBAAoB;EAC3C,MAAMM,UAAU,GAAGF,UAAU,CAACC,OAAO,CAAEC,UAAW;EAElD,MAAMI,MAAM,GAAG,CAAC,GAAGJ,UAAU,CAAC,CAACK,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC;EAEpD,IAAIhB,KAAK,GAAG,CAAC,IAAIA,KAAK,IAAIa,MAAM,CAACH,MAAM,EAAE;IACxCZ,MAAM,CAACc,IAAI,CACV,iBAAiBZ,KAAK,qBAAqBa,MAAM,CAACH,MAAM,GAAG,CAAC,GAC7D,CAAC;IACD;EACD;EAEA,MAAMO,cAAc,GAAGJ,MAAM,CAACb,KAAK,CAAC;EACpC,MAAMkB,UAAU,GAAGvB,cAAc,CAACwB,MAAM,CAACZ,UAAU,CAACa,KAAK,CAACC,GAAG,CAAC;EAE9D5B,OAAO,CAAC,MAAM;IACb,SAAS;;IACTI,iBAAiB,CAAC;MACjByB,MAAM,EAAEL,cAAc;MACtBC,UAAU;MACVK,IAAI,EAAE;QACLC,IAAI,EAAEjB,UAAU,CAACC,OAAO,CAACiB,cAAc,EAAEC,MAAM,IAAIhC,eAAe;QAClEiC,KAAK,EAAEpB,UAAU,CAACC,OAAO,CAACiB,cAAc,EAAEG,QAAQ,IAAIlC;MACvD;IACD,CAAC,CAAC;EACH,CAAC,CAAC,CAAC,CAAC;AACL","ignoreList":[]}
@@ -7,7 +7,6 @@ import { GestureDetector } from "react-native-gesture-handler";
7
7
  import Animated, { runOnUI, useAnimatedRef } from "react-native-reanimated";
8
8
  import { useAssociatedStyles } from "../hooks/animation/use-associated-style";
9
9
  import { useScrollRegistry } from "../hooks/gestures/use-scroll-registry";
10
- import { useGestureContext } from "../providers/gestures.provider";
11
10
  import { RegisterBoundsProvider } from "../providers/register-bounds.provider";
12
11
  import { jsx as _jsx } from "react/jsx-runtime";
13
12
  export function createTransitionAwareComponent(Wrapped, options = {}) {
@@ -16,34 +15,37 @@ export function createTransitionAwareComponent(Wrapped, options = {}) {
16
15
  } = options;
17
16
  const AnimatedComponent = Animated.createAnimatedComponent(Wrapped);
18
17
  const ScrollableInner = /*#__PURE__*/forwardRef((props, ref) => {
19
- const {
20
- nativeGesture
21
- } = useGestureContext();
18
+ // Determine scroll direction from the horizontal prop (standard ScrollView API)
19
+ const scrollDirection = props.horizontal ? "horizontal" : "vertical";
20
+
21
+ // Get scroll handlers and the gesture owner's nativeGesture for this axis
22
22
  const {
23
23
  scrollHandler,
24
24
  onContentSizeChange,
25
25
  onLayout,
26
- onTouchStart,
27
- onTouchEnd
26
+ nativeGesture
28
27
  } = useScrollRegistry({
29
28
  onScroll: props.onScroll,
30
29
  onContentSizeChange: props.onContentSizeChange,
31
30
  onLayout: props.onLayout,
32
- onTouchStart: props.onTouchStart,
33
- onTouchEnd: props.onTouchEnd
31
+ direction: scrollDirection
34
32
  });
33
+ const scrollableComponent = /*#__PURE__*/_jsx(AnimatedComponent, {
34
+ ...props,
35
+ ref: ref,
36
+ onScroll: scrollHandler,
37
+ onContentSizeChange: onContentSizeChange,
38
+ onLayout: onLayout,
39
+ scrollEventThrottle: props.scrollEventThrottle || 16
40
+ });
41
+
42
+ // If no gesture owner found for this axis, render without GestureDetector
43
+ if (!nativeGesture) {
44
+ return scrollableComponent;
45
+ }
35
46
  return /*#__PURE__*/_jsx(GestureDetector, {
36
47
  gesture: nativeGesture,
37
- children: /*#__PURE__*/_jsx(AnimatedComponent, {
38
- ...props,
39
- ref: ref,
40
- onScroll: scrollHandler,
41
- onContentSizeChange: onContentSizeChange,
42
- onLayout: onLayout,
43
- onTouchStart: onTouchStart,
44
- onTouchEnd: onTouchEnd,
45
- scrollEventThrottle: props.scrollEventThrottle || 16
46
- })
48
+ children: scrollableComponent
47
49
  });
48
50
  });
49
51
  const Inner = /*#__PURE__*/forwardRef((props, _) => {
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","memo","GestureDetector","Animated","runOnUI","useAnimatedRef","useAssociatedStyles","useScrollRegistry","useGestureContext","RegisterBoundsProvider","jsx","_jsx","createTransitionAwareComponent","Wrapped","options","isScrollable","AnimatedComponent","createAnimatedComponent","ScrollableInner","props","ref","nativeGesture","scrollHandler","onContentSizeChange","onLayout","onTouchStart","onTouchEnd","onScroll","gesture","children","scrollEventThrottle","Inner","_","style","sharedBoundTag","styleId","onPress","rest","animatedRef","associatedStyles","id","captureActiveOnPress","handleInitialLayout","collapsable"],"sourceRoot":"../../../../src","sources":["shared/components/create-transition-aware-component.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","memo","GestureDetector","Animated","runOnUI","useAnimatedRef","useAssociatedStyles","useScrollRegistry","RegisterBoundsProvider","jsx","_jsx","createTransitionAwareComponent","Wrapped","options","isScrollable","AnimatedComponent","createAnimatedComponent","ScrollableInner","props","ref","scrollDirection","horizontal","scrollHandler","onContentSizeChange","onLayout","nativeGesture","onScroll","direction","scrollableComponent","scrollEventThrottle","gesture","children","Inner","_","style","sharedBoundTag","styleId","onPress","rest","animatedRef","associatedStyles","id","captureActiveOnPress","handleInitialLayout","collapsable"],"sourceRoot":"../../../../src","sources":["shared/components/create-transition-aware-component.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,13 +1,21 @@
1
1
  "use strict";
2
2
 
3
+ /** biome-ignore-all lint/style/noNonNullAssertion: <Screen gesture is under the gesture context, so this will always exist.> */
3
4
  import { StackActions } from "@react-navigation/native";
4
5
  import { memo, useCallback } from "react";
5
6
  import { Pressable, StyleSheet, View } from "react-native";
6
- import Animated, { useAnimatedStyle } from "react-native-reanimated";
7
+ import { GestureDetector } from "react-native-gesture-handler";
8
+ import Animated, { runOnUI, useAnimatedStyle } from "react-native-reanimated";
9
+ import { DefaultSnapSpec } from "../configs/specs";
7
10
  import { NO_STYLES } from "../constants";
8
11
  import { useBackdropPointerEvents } from "../hooks/use-backdrop-pointer-events";
12
+ import { useGestureContext } from "../providers/gestures.provider";
9
13
  import { useKeys } from "../providers/screen/keys.provider";
10
14
  import { useScreenStyles } from "../providers/screen/styles.provider";
15
+ import { AnimationStore } from "../stores/animation.store";
16
+ import { GestureStore } from "../stores/gesture.store";
17
+ import { animateToProgress } from "../utils/animation/animate-to-progress";
18
+ import { findCollapseTarget } from "../utils/gesture/find-collapse-target";
11
19
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
20
  export const ScreenContainer = /*#__PURE__*/memo(({
13
21
  children
@@ -22,10 +30,57 @@ export const ScreenContainer = /*#__PURE__*/memo(({
22
30
  pointerEvents,
23
31
  backdropBehavior
24
32
  } = useBackdropPointerEvents();
25
- const isDismissable = backdropBehavior === "dismiss";
33
+ const gestureContext = useGestureContext();
34
+ const isBackdropActive = backdropBehavior === "dismiss" || backdropBehavior === "collapse";
35
+ const handleDismiss = useCallback(() => {
36
+ const state = current.navigation.getState();
37
+ current.navigation.dispatch({
38
+ ...StackActions.pop(),
39
+ source: current.route.key,
40
+ target: state.key
41
+ });
42
+ }, [current]);
26
43
  const handleBackdropPress = useCallback(() => {
27
- current.navigation.dispatch(StackActions.pop());
28
- }, [current.navigation]);
44
+ if (backdropBehavior === "dismiss") {
45
+ handleDismiss();
46
+ return;
47
+ }
48
+ if (backdropBehavior === "collapse") {
49
+ const snapPoints = current.options.snapPoints;
50
+ const canDismiss = current.options.gestureEnabled !== false;
51
+
52
+ // No snap points → fallback to dismiss
53
+ if (!snapPoints || snapPoints.length === 0) {
54
+ handleDismiss();
55
+ return;
56
+ }
57
+ const animations = AnimationStore.getAll(current.route.key);
58
+ const gestures = GestureStore.getRouteGestures(current.route.key);
59
+ const transitionSpec = current.options.transitionSpec;
60
+ runOnUI(() => {
61
+ "worklet";
62
+
63
+ const {
64
+ target,
65
+ shouldDismiss
66
+ } = findCollapseTarget(animations.progress.value, snapPoints, canDismiss);
67
+
68
+ // If already dismissing, skip
69
+ if (gestures.isDismissing.value) return;
70
+ gestures.isDismissing.value = shouldDismiss ? 1 : 0;
71
+ const spec = shouldDismiss ? transitionSpec : {
72
+ open: transitionSpec?.expand ?? DefaultSnapSpec,
73
+ close: transitionSpec?.collapse ?? DefaultSnapSpec
74
+ };
75
+ animateToProgress({
76
+ target,
77
+ spec,
78
+ animations,
79
+ onAnimationFinish: shouldDismiss ? handleDismiss : undefined
80
+ });
81
+ })();
82
+ }
83
+ }, [backdropBehavior, current, handleDismiss]);
29
84
  const animatedContentStyle = useAnimatedStyle(() => {
30
85
  "worklet";
31
86
 
@@ -41,15 +96,18 @@ export const ScreenContainer = /*#__PURE__*/memo(({
41
96
  pointerEvents: pointerEvents,
42
97
  children: [/*#__PURE__*/_jsx(Pressable, {
43
98
  style: StyleSheet.absoluteFillObject,
44
- pointerEvents: isDismissable ? "auto" : "none",
45
- onPress: isDismissable ? handleBackdropPress : undefined,
99
+ pointerEvents: isBackdropActive ? "auto" : "none",
100
+ onPress: isBackdropActive ? handleBackdropPress : undefined,
46
101
  children: /*#__PURE__*/_jsx(Animated.View, {
47
102
  style: [StyleSheet.absoluteFillObject, animatedBackdropStyle]
48
103
  })
49
- }), /*#__PURE__*/_jsx(Animated.View, {
50
- style: [styles.content, animatedContentStyle],
51
- pointerEvents: isDismissable ? "box-none" : pointerEvents,
52
- children: children
104
+ }), /*#__PURE__*/_jsx(GestureDetector, {
105
+ gesture: gestureContext.panGesture,
106
+ children: /*#__PURE__*/_jsx(Animated.View, {
107
+ style: [styles.content, animatedContentStyle],
108
+ pointerEvents: isBackdropActive ? "box-none" : pointerEvents,
109
+ children: children
110
+ })
53
111
  })]
54
112
  });
55
113
  });
@@ -1 +1 @@
1
- {"version":3,"names":["StackActions","memo","useCallback","Pressable","StyleSheet","View","Animated","useAnimatedStyle","NO_STYLES","useBackdropPointerEvents","useKeys","useScreenStyles","jsx","_jsx","jsxs","_jsxs","ScreenContainer","children","stylesMap","current","pointerEvents","backdropBehavior","isDismissable","handleBackdropPress","navigation","dispatch","pop","animatedContentStyle","value","contentStyle","animatedBackdropStyle","backdropStyle","overlayStyle","style","styles","container","absoluteFillObject","onPress","undefined","content","create","flex"],"sourceRoot":"../../../../src","sources":["shared/components/screen-container.tsx"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,0BAA0B;AACvD,SAASC,IAAI,EAAEC,WAAW,QAAQ,OAAO;AACzC,SAASC,SAAS,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC1D,OAAOC,QAAQ,IAAIC,gBAAgB,QAAQ,yBAAyB;AACpE,SAASC,SAAS,QAAQ,cAAc;AACxC,SAASC,wBAAwB,QAAQ,sCAAsC;AAC/E,SAASC,OAAO,QAAQ,mCAAmC;AAC3D,SAASC,eAAe,QAAQ,qCAAqC;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAMtE,OAAO,MAAMC,eAAe,gBAAGf,IAAI,CAAC,CAAC;EAAEgB;AAAgB,CAAC,KAAK;EAC5D,MAAM;IAAEC;EAAU,CAAC,GAAGP,eAAe,CAAC,CAAC;EACvC,MAAM;IAAEQ;EAAQ,CAAC,GAAGT,OAAO,CAAC,CAAC;EAC7B,MAAM;IAAEU,aAAa;IAAEC;EAAiB,CAAC,GAAGZ,wBAAwB,CAAC,CAAC;EAEtE,MAAMa,aAAa,GAAGD,gBAAgB,KAAK,SAAS;EAEpD,MAAME,mBAAmB,GAAGrB,WAAW,CAAC,MAAM;IAC7CiB,OAAO,CAACK,UAAU,CAACC,QAAQ,CAACzB,YAAY,CAAC0B,GAAG,CAAC,CAAC,CAAC;EAChD,CAAC,EAAE,CAACP,OAAO,CAACK,UAAU,CAAC,CAAC;EAExB,MAAMG,oBAAoB,GAAGpB,gBAAgB,CAAC,MAAM;IACnD,SAAS;;IACT,OAAOW,SAAS,CAACU,KAAK,CAACC,YAAY,IAAIrB,SAAS;EACjD,CAAC,CAAC;EAEF,MAAMsB,qBAAqB,GAAGvB,gBAAgB,CAAC,MAAM;IACpD,SAAS;;IACT,OACCW,SAAS,CAACU,KAAK,CAACG,aAAa,IAAIb,SAAS,CAACU,KAAK,CAACI,YAAY,IAAIxB,SAAS;EAE5E,CAAC,CAAC;EAEF,oBACCO,KAAA,CAACV,IAAI;IAAC4B,KAAK,EAAEC,MAAM,CAACC,SAAU;IAACf,aAAa,EAAEA,aAAc;IAAAH,QAAA,gBAC3DJ,IAAA,CAACV,SAAS;MACT8B,KAAK,EAAE7B,UAAU,CAACgC,kBAAmB;MACrChB,aAAa,EAAEE,aAAa,GAAG,MAAM,GAAG,MAAO;MAC/Ce,OAAO,EAAEf,aAAa,GAAGC,mBAAmB,GAAGe,SAAU;MAAArB,QAAA,eAEzDJ,IAAA,CAACP,QAAQ,CAACD,IAAI;QACb4B,KAAK,EAAE,CAAC7B,UAAU,CAACgC,kBAAkB,EAAEN,qBAAqB;MAAE,CAC9D;IAAC,CACQ,CAAC,eACZjB,IAAA,CAACP,QAAQ,CAACD,IAAI;MACb4B,KAAK,EAAE,CAACC,MAAM,CAACK,OAAO,EAAEZ,oBAAoB,CAAE;MAC9CP,aAAa,EAAEE,aAAa,GAAG,UAAU,GAAGF,aAAc;MAAAH,QAAA,EAEzDA;IAAQ,CACK,CAAC;EAAA,CACX,CAAC;AAET,CAAC,CAAC;AAEF,MAAMiB,MAAM,GAAG9B,UAAU,CAACoC,MAAM,CAAC;EAChCL,SAAS,EAAE;IACVM,IAAI,EAAE;EACP,CAAC;EACDF,OAAO,EAAE;IACRE,IAAI,EAAE;EACP;AACD,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["StackActions","memo","useCallback","Pressable","StyleSheet","View","GestureDetector","Animated","runOnUI","useAnimatedStyle","DefaultSnapSpec","NO_STYLES","useBackdropPointerEvents","useGestureContext","useKeys","useScreenStyles","AnimationStore","GestureStore","animateToProgress","findCollapseTarget","jsx","_jsx","jsxs","_jsxs","ScreenContainer","children","stylesMap","current","pointerEvents","backdropBehavior","gestureContext","isBackdropActive","handleDismiss","state","navigation","getState","dispatch","pop","source","route","key","target","handleBackdropPress","snapPoints","options","canDismiss","gestureEnabled","length","animations","getAll","gestures","getRouteGestures","transitionSpec","shouldDismiss","progress","value","isDismissing","spec","open","expand","close","collapse","onAnimationFinish","undefined","animatedContentStyle","contentStyle","animatedBackdropStyle","backdropStyle","overlayStyle","style","styles","container","absoluteFillObject","onPress","gesture","panGesture","content","create","flex"],"sourceRoot":"../../../../src","sources":["shared/components/screen-container.tsx"],"mappings":"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","ignoreList":[]}
@@ -84,6 +84,7 @@ export const FULLSCREEN_DIMENSIONS = dimensions => {
84
84
  * Default gesture config
85
85
  */
86
86
  export const GESTURE_VELOCITY_IMPACT = 0.3;
87
+ export const SNAP_VELOCITY_IMPACT = 0.1;
87
88
  export const DEFAULT_GESTURE_DIRECTION = "horizontal";
88
89
  export const DEFAULT_GESTURE_DRIVES_PROGRESS = true;
89
90
  export const DEFAULT_GESTURE_ACTIVATION_AREA = "screen";
@@ -95,4 +96,10 @@ export const FALSE = 0;
95
96
  * Small value for floating-point comparisons to handle animation/interpolation imprecision
96
97
  */
97
98
  export const EPSILON = 1e-5;
99
+
100
+ /**
101
+ * Threshold for snapping animations to target when "close enough" (1% of range).
102
+ * Prevents micro-jitter/oscillation near animation endpoints.
103
+ */
104
+ export const ANIMATION_SNAP_THRESHOLD = 0.01;
98
105
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","MASK_STYLE_ID","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","OS","TRUE","FALSE","EPSILON"],"sourceRoot":"../../../src","sources":["shared/constants.ts"],"mappings":";;AACA,SAASA,QAAQ,QAAQ,cAAc;AAOvC;AACA;AACA;AACA,OAAO,MAAMC,aAAa,GAAG,cAAc;AAC3C,OAAO,MAAMC,kBAAkB,GAAG,iBAAiB;;AAEnD;AACA;AACA;AACA,OAAO,MAAMC,SAAS,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;AACA,OAAO,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;AACA,OAAO,MAAMM,+BAAsD,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;AACA,OAAO,MAAMQ,yBAAyB,GAAGnB,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1D,OAAO,MAAMmB,6BAA6B,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;AACF,OAAO,MAAMC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,CAAU;AAC1C,OAAO,MAAMC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAU;AAEzC,OAAO,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;AACA,OAAO,MAAMO,uBAAuB,GAAG,GAAG;AAC1C,OAAO,MAAMC,yBAAyB,GAAG,YAAY;AACrD,OAAO,MAAMC,+BAA+B,GAAG,IAAI;AACnD,OAAO,MAAMC,+BAA+C,GAAG,QAAQ;AAEvE,OAAO,MAAMC,MAAM,GAAG1C,QAAQ,CAAC2C,EAAE,KAAK,KAAK;AAE3C,OAAO,MAAMC,IAAI,GAAG,CAAC;AACrB,OAAO,MAAMC,KAAK,GAAG,CAAC;;AAEtB;AACA;AACA;AACA,OAAO,MAAMC,OAAO,GAAG,IAAI","ignoreList":[]}
1
+ {"version":3,"names":["Platform","MASK_STYLE_ID","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","OS","TRUE","FALSE","EPSILON","ANIMATION_SNAP_THRESHOLD"],"sourceRoot":"../../../src","sources":["shared/constants.ts"],"mappings":";;AACA,SAASA,QAAQ,QAAQ,cAAc;AAOvC;AACA;AACA;AACA,OAAO,MAAMC,aAAa,GAAG,cAAc;AAC3C,OAAO,MAAMC,kBAAkB,GAAG,iBAAiB;;AAEnD;AACA;AACA;AACA,OAAO,MAAMC,SAAS,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;AACA,OAAO,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;AACA,OAAO,MAAMM,+BAAsD,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;AACA,OAAO,MAAMQ,yBAAyB,GAAGnB,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC1D,OAAO,MAAMmB,6BAA6B,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;AACF,OAAO,MAAMC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,CAAU;AAC1C,OAAO,MAAMC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAU;AAEzC,OAAO,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;AACA,OAAO,MAAMO,uBAAuB,GAAG,GAAG;AAC1C,OAAO,MAAMC,oBAAoB,GAAG,GAAG;AACvC,OAAO,MAAMC,yBAAyB,GAAG,YAAY;AACrD,OAAO,MAAMC,+BAA+B,GAAG,IAAI;AACnD,OAAO,MAAMC,+BAA+C,GAAG,QAAQ;AAEvE,OAAO,MAAMC,MAAM,GAAG3C,QAAQ,CAAC4C,EAAE,KAAK,KAAK;AAE3C,OAAO,MAAMC,IAAI,GAAG,CAAC;AACrB,OAAO,MAAMC,KAAK,GAAG,CAAC;;AAEtB;AACA;AACA;AACA,OAAO,MAAMC,OAAO,GAAG,IAAI;;AAE3B;AACA;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,GAAG,IAAI","ignoreList":[]}
@@ -5,10 +5,43 @@ import { useCallback, useMemo, useRef } from "react";
5
5
  import { Gesture } from "react-native-gesture-handler";
6
6
  import { useKeys } from "../../providers/screen/keys.provider";
7
7
  import { GestureStore } from "../../stores/gesture.store";
8
+ import { claimsAnyDirection } from "../../utils/gesture/compute-claimed-directions";
9
+ import { resolveOwnership } from "../../utils/gesture/resolve-ownership";
8
10
  import { useScreenGestureHandlers } from "./use-screen-gesture-handlers";
11
+ const DIRECTIONS = ["vertical", "vertical-inverted", "horizontal", "horizontal-inverted"];
12
+
13
+ /**
14
+ * Finds ancestor pan gestures that we shadow (claim the same direction).
15
+ * Used to block ancestors when child claims priority.
16
+ */
17
+ function findShadowedAncestorPanGestures(selfClaims, ancestorContext, isIsolated) {
18
+ const shadowedGestures = [];
19
+ let ancestor = ancestorContext;
20
+ while (ancestor) {
21
+ if (ancestor.isIsolated !== isIsolated) break;
22
+ const shadowsAncestor = DIRECTIONS.some(dir => selfClaims[dir] && ancestor?.claimedDirections?.[dir]);
23
+ if (shadowsAncestor && ancestor.panGesture) {
24
+ shadowedGestures.push(ancestor.panGesture);
25
+ }
26
+ ancestor = ancestor.ancestorContext;
27
+ }
28
+ return shadowedGestures;
29
+ }
30
+ /**
31
+ * Builds the Pan gesture for screen dismissal.
32
+ *
33
+ * Handles shadowing: when child claims same direction as ancestor,
34
+ * child's pan blocks ancestor's pan via `blocksExternalGesture()`.
35
+ *
36
+ * ScrollView coordination is handled separately by useScrollRegistry,
37
+ * which creates its own Native gesture per ScrollView.
38
+ */
9
39
  export const useBuildGestures = ({
10
40
  scrollConfig,
11
- ancestorContext
41
+ ancestorContext,
42
+ claimedDirections,
43
+ childDirectionClaims,
44
+ isIsolated
12
45
  }) => {
13
46
  const {
14
47
  current
@@ -17,33 +50,21 @@ export const useBuildGestures = ({
17
50
  const isFirstScreen = useMemo(() => {
18
51
  return navState.routes.findIndex(r => r.key === current.route.key) === 0;
19
52
  }, [navState.routes, current.route.key]);
20
-
21
- // Ref for external gesture coordination (e.g., swipeable lists)
22
53
  const panGestureRef = useRef(undefined);
23
54
  const gestureAnimationValues = GestureStore.getRouteGestures(current.route.key);
24
55
  const {
25
56
  snapPoints
26
57
  } = current.options;
27
-
28
- // Dismiss gesture is controlled by gestureEnabled (disabled for first screen)
29
58
  const canDismiss = Boolean(isFirstScreen ? false : current.options.gestureEnabled);
30
-
31
- // Snap navigation works independently - enabled when snap points exist
32
- // This matches iOS native sheet behavior where gestureEnabled: false
33
- // disables dismiss but you can still drag between detents
34
59
  const hasSnapPoints = Array.isArray(snapPoints) && snapPoints.length > 0;
35
60
  const gestureEnabled = canDismiss || hasSnapPoints;
61
+ const ownershipStatus = useMemo(() => resolveOwnership(claimedDirections, ancestorContext ?? null), [claimedDirections, ancestorContext]);
62
+ const selfClaimsAny = claimsAnyDirection(claimedDirections);
36
63
  const handleDismiss = useCallback(() => {
37
- // If an ancestor navigator is already dismissing, skip this dismiss to
38
- // avoid racing with the ancestor
39
- if (ancestorContext?.gestureAnimationValues.isDismissing?.value) {
40
- return;
41
- }
64
+ if (ancestorContext?.gestureAnimationValues.isDismissing?.value) return;
42
65
  const state = current.navigation.getState();
43
66
  const routeStillPresent = state.routes.some(route => route.key === current.route.key);
44
- if (!routeStillPresent) {
45
- return;
46
- }
67
+ if (!routeStillPresent) return;
47
68
  current.navigation.dispatch({
48
69
  ...StackActions.pop(),
49
70
  source: current.route.key,
@@ -60,38 +81,27 @@ export const useBuildGestures = ({
60
81
  scrollConfig,
61
82
  canDismiss,
62
83
  handleDismiss,
63
- ancestorIsDismissing: ancestorContext?.gestureAnimationValues.isDismissing
84
+ ownershipStatus,
85
+ ancestorIsDismissing: ancestorContext?.gestureAnimationValues.isDismissing,
86
+ claimedDirections,
87
+ ancestorContext,
88
+ childDirectionClaims
64
89
  });
65
90
  return useMemo(() => {
66
91
  const panGesture = Gesture.Pan().withRef(panGestureRef).enabled(gestureEnabled).manualActivation(true).onTouchesDown(onTouchesDown).onTouchesMove(onTouchesMove).onStart(onStart).onUpdate(onUpdate).onEnd(onEnd);
67
92
 
68
- // Native gesture setup depends on whether this screen has gestures
69
- let nativeGesture;
70
- if (gestureEnabled) {
71
- // This screen has gestures - set up normal pan/native relationship
72
- nativeGesture = Gesture.Native().requireExternalGestureToFail(panGesture);
73
- panGesture.blocksExternalGesture(nativeGesture);
74
- } else {
75
- // This screen has no gestures
76
- // Find nearest ancestor with gestureEnabled=true (attached pan)
77
- let activePanAncestor = ancestorContext;
78
- while (activePanAncestor && !activePanAncestor.gestureEnabled) {
79
- activePanAncestor = activePanAncestor.ancestorContext;
80
- }
81
- if (activePanAncestor?.panGesture) {
82
- // Found an ancestor with enabled pan - wait for it
83
- nativeGesture = Gesture.Native().requireExternalGestureToFail(activePanAncestor.panGesture);
84
- } else {
85
- // No ancestor with enabled pan - plain native
86
- nativeGesture = Gesture.Native();
93
+ // Block shadowed ancestor pan gestures when we claim same directions
94
+ if (selfClaimsAny) {
95
+ const shadowedAncestorGestures = findShadowedAncestorPanGestures(claimedDirections, ancestorContext, isIsolated);
96
+ for (const ancestorPan of shadowedAncestorGestures) {
97
+ panGesture.blocksExternalGesture(ancestorPan);
87
98
  }
88
99
  }
89
100
  return {
90
101
  panGesture,
91
102
  panGestureRef,
92
- nativeGesture,
93
103
  gestureAnimationValues
94
104
  };
95
- }, [gestureEnabled, onTouchesDown, onTouchesMove, onStart, onUpdate, onEnd, gestureAnimationValues, ancestorContext]);
105
+ }, [gestureEnabled, selfClaimsAny, claimedDirections, onTouchesDown, onTouchesMove, onStart, onUpdate, onEnd, gestureAnimationValues, ancestorContext, isIsolated]);
96
106
  };
97
107
  //# sourceMappingURL=use-build-gestures.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["StackActions","useCallback","useMemo","useRef","Gesture","useKeys","GestureStore","useScreenGestureHandlers","useBuildGestures","scrollConfig","ancestorContext","current","navState","navigation","getState","isFirstScreen","routes","findIndex","r","key","route","panGestureRef","undefined","gestureAnimationValues","getRouteGestures","snapPoints","options","canDismiss","Boolean","gestureEnabled","hasSnapPoints","Array","isArray","length","handleDismiss","isDismissing","value","state","routeStillPresent","some","dispatch","pop","source","target","onTouchesDown","onTouchesMove","onStart","onUpdate","onEnd","ancestorIsDismissing","panGesture","Pan","withRef","enabled","manualActivation","nativeGesture","Native","requireExternalGestureToFail","blocksExternalGesture","activePanAncestor"],"sourceRoot":"../../../../../src","sources":["shared/hooks/gestures/use-build-gestures.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["StackActions","useCallback","useMemo","useRef","Gesture","useKeys","GestureStore","claimsAnyDirection","resolveOwnership","useScreenGestureHandlers","DIRECTIONS","findShadowedAncestorPanGestures","selfClaims","ancestorContext","isIsolated","shadowedGestures","ancestor","shadowsAncestor","some","dir","claimedDirections","panGesture","push","useBuildGestures","scrollConfig","childDirectionClaims","current","navState","navigation","getState","isFirstScreen","routes","findIndex","r","key","route","panGestureRef","undefined","gestureAnimationValues","getRouteGestures","snapPoints","options","canDismiss","Boolean","gestureEnabled","hasSnapPoints","Array","isArray","length","ownershipStatus","selfClaimsAny","handleDismiss","isDismissing","value","state","routeStillPresent","dispatch","pop","source","target","onTouchesDown","onTouchesMove","onStart","onUpdate","onEnd","ancestorIsDismissing","Pan","withRef","enabled","manualActivation","shadowedAncestorGestures","ancestorPan","blocksExternalGesture"],"sourceRoot":"../../../../../src","sources":["shared/hooks/gestures/use-build-gestures.tsx"],"mappings":"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","ignoreList":[]}