react-native-screen-transitions 3.7.0-beta.1 → 3.7.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 (69) hide show
  1. package/lib/commonjs/shared/adapters/with-screen-transitions/options.js +37 -9
  2. package/lib/commonjs/shared/adapters/with-screen-transitions/options.js.map +1 -1
  3. package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +10 -1
  4. package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
  5. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  6. package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +20 -0
  7. package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -0
  8. package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js +2 -13
  9. package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
  10. package/lib/commonjs/shared/providers/screen/gestures/ownership/shadowing-claims.js +18 -0
  11. package/lib/commonjs/shared/providers/screen/gestures/ownership/shadowing-claims.js.map +1 -0
  12. package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +47 -1
  13. package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
  14. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +12 -3
  15. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  16. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +23 -20
  17. package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -1
  18. package/lib/module/shared/adapters/with-screen-transitions/options.js +37 -9
  19. package/lib/module/shared/adapters/with-screen-transitions/options.js.map +1 -1
  20. package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +10 -1
  21. package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
  22. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  23. package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +15 -0
  24. package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -0
  25. package/lib/module/shared/providers/screen/animation/use-screen-animation.js +1 -12
  26. package/lib/module/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
  27. package/lib/module/shared/providers/screen/gestures/ownership/shadowing-claims.js +13 -0
  28. package/lib/module/shared/providers/screen/gestures/ownership/shadowing-claims.js.map +1 -0
  29. package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +49 -3
  30. package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
  31. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +12 -3
  32. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  33. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +23 -20
  34. package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -1
  35. package/lib/module/shared/types/animation.types.js.map +1 -1
  36. package/lib/typescript/shared/adapters/with-screen-transitions/options.d.ts.map +1 -1
  37. package/lib/typescript/shared/index.d.ts +1 -1
  38. package/lib/typescript/shared/index.d.ts.map +1 -1
  39. package/lib/typescript/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts.map +1 -1
  40. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts +1 -1
  41. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  42. package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts +3 -0
  43. package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts.map +1 -0
  44. package/lib/typescript/shared/providers/screen/animation/use-screen-animation.d.ts.map +1 -1
  45. package/lib/typescript/shared/providers/screen/gestures/ownership/shadowing-claims.d.ts +8 -0
  46. package/lib/typescript/shared/providers/screen/gestures/ownership/shadowing-claims.d.ts.map +1 -0
  47. package/lib/typescript/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.d.ts.map +1 -1
  48. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  49. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts.map +1 -1
  50. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts +2 -3
  51. package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts.map +1 -1
  52. package/lib/typescript/shared/types/animation.types.d.ts +14 -0
  53. package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
  54. package/lib/typescript/shared/types/index.d.ts +1 -1
  55. package/lib/typescript/shared/types/index.d.ts.map +1 -1
  56. package/package.json +1 -1
  57. package/src/shared/adapters/with-screen-transitions/options.ts +86 -19
  58. package/src/shared/index.ts +3 -0
  59. package/src/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.ts +14 -0
  60. package/src/shared/providers/screen/animation/helpers/pipeline.ts +4 -1
  61. package/src/shared/providers/screen/animation/helpers/read-screen-animation-revisions.ts +25 -0
  62. package/src/shared/providers/screen/animation/use-screen-animation.tsx +1 -21
  63. package/src/shared/providers/screen/gestures/ownership/shadowing-claims.ts +18 -0
  64. package/src/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.ts +64 -3
  65. package/src/shared/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +15 -1
  66. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.ts +38 -24
  67. package/src/shared/providers/stack/helpers/managed-stack-state/helpers/types.ts +2 -3
  68. package/src/shared/types/animation.types.ts +18 -0
  69. package/src/shared/types/index.ts +3 -0
@@ -59,11 +59,10 @@ const resolveStableDescriptorSource = <
59
59
  };
60
60
 
61
61
  const getSceneActivity = ({
62
- focusedIndex,
62
+ activeIndex,
63
+ inertIndex,
63
64
  isClosing,
64
65
  sceneIndex,
65
- topIndex,
66
- topIsClosing,
67
66
  }: SceneActivityWindow & {
68
67
  isClosing: boolean;
69
68
  sceneIndex: number;
@@ -72,21 +71,33 @@ const getSceneActivity = ({
72
71
  return "closing";
73
72
  }
74
73
 
75
- if (topIsClosing) {
76
- return sceneIndex === focusedIndex ? "inert" : "inactive";
77
- }
78
-
79
- if (sceneIndex === topIndex) {
74
+ if (sceneIndex === activeIndex) {
80
75
  return "active";
81
76
  }
82
77
 
83
- if (sceneIndex === topIndex - 1) {
78
+ if (sceneIndex === inertIndex) {
84
79
  return "inert";
85
80
  }
86
81
 
87
82
  return "inactive";
88
83
  };
89
84
 
85
+ const getNonClosingSceneIndices = <TDescriptor extends BaseStackDescriptor>(
86
+ routes: ManagedRoutes<TDescriptor>,
87
+ closingRouteKeys: ReadonlySet<string>,
88
+ ) => {
89
+ const indices: number[] = [];
90
+
91
+ for (let index = 0; index < routes.length; index++) {
92
+ const route = routes[index];
93
+ if (route && !closingRouteKeys.has(route.key)) {
94
+ indices.push(index);
95
+ }
96
+ }
97
+
98
+ return indices;
99
+ };
100
+
90
101
  const getSceneActivityWindow = <
91
102
  TDescriptor extends BaseStackDescriptor,
92
103
  TNavigation extends BaseStackNavigation,
@@ -98,29 +109,32 @@ const getSceneActivityWindow = <
98
109
  TDescriptor,
99
110
  TNavigation
100
111
  >): SceneActivityWindow => {
101
- const focusedRouteKey = props.state.routes[props.state.index]?.key;
112
+ const nonClosingIndices = getNonClosingSceneIndices(routes, closingRouteKeys);
102
113
 
103
- let focusedIndex = routes.findIndex((route) => route.key === focusedRouteKey);
114
+ const topNonClosingIndex =
115
+ nonClosingIndices[nonClosingIndices.length - 1] ?? -1;
104
116
 
105
- if (focusedIndex === -1) {
117
+ const hasClosingRouteAboveActive =
118
+ topNonClosingIndex !== -1 && topNonClosingIndex < routes.length - 1;
119
+
120
+ const activeIndex = hasClosingRouteAboveActive ? -1 : topNonClosingIndex;
121
+ const inertIndex = hasClosingRouteAboveActive
122
+ ? topNonClosingIndex
123
+ : (nonClosingIndices[nonClosingIndices.length - 2] ?? -1);
124
+
125
+ const focusedRouteKey = props.state.routes[props.state.index]?.key;
126
+ if (
127
+ focusedRouteKey &&
128
+ !routes.some((route) => route.key === focusedRouteKey)
129
+ ) {
106
130
  throw new Error(
107
131
  `Focused route "${focusedRouteKey}" is missing from routes`,
108
132
  );
109
133
  }
110
134
 
111
- while (focusedIndex > 0 && closingRouteKeys.has(routes[focusedIndex]?.key)) {
112
- focusedIndex--;
113
- }
114
-
115
- const topIndex = routes.length - 1;
116
- const topRoute = routes[topIndex];
117
- const topIsClosing =
118
- topRoute !== undefined && closingRouteKeys.has(topRoute.key);
119
-
120
135
  return {
121
- focusedIndex,
122
- topIndex,
123
- topIsClosing,
136
+ activeIndex,
137
+ inertIndex,
124
138
  };
125
139
  };
126
140
 
@@ -51,7 +51,6 @@ export type ReconciledRoutes<TDescriptor extends BaseStackDescriptor> = {
51
51
  };
52
52
 
53
53
  export type SceneActivityWindow = {
54
- focusedIndex: number;
55
- topIndex: number;
56
- topIsClosing: boolean;
54
+ activeIndex: number;
55
+ inertIndex: number;
57
56
  };
@@ -176,6 +176,10 @@ export type ScreenTransitionDepthTarget = {
176
176
 
177
177
  export type ScreenTransitionTarget = ScreenTransitionDepthTarget;
178
178
 
179
+ export type ScreenTransitionAccessor = (
180
+ target?: ScreenTransitionTarget,
181
+ ) => ScreenInterpolationProps | null;
182
+
179
183
  export interface ScreenInterpolationProps {
180
184
  /**
181
185
  * Values for the screen that came before the current one in the navigation stack.
@@ -239,6 +243,20 @@ export interface ScreenInterpolationProps {
239
243
  */
240
244
  bounds: BoundsAccessor;
241
245
 
246
+ /**
247
+ * Resolves interpolation props for this screen's transition timeline or an
248
+ * ancestor/descendant transition timeline.
249
+ *
250
+ * Calling without a target returns the current transition.
251
+ * `transition({ depth: -1 })` returns the immediate parent transition.
252
+ * `transition({ depth: 1 })` returns the immediate child transition.
253
+ * `transition({ depth: 0 })` returns the current transition.
254
+ *
255
+ * When called from a returned transition scope, targets are resolved relative
256
+ * to that scope.
257
+ */
258
+ transition: ScreenTransitionAccessor;
259
+
242
260
  /**
243
261
  * The screen state that is currently driving the transition (either current or next, whichever is focused).
244
262
  */
@@ -4,8 +4,11 @@ export type {
4
4
  AnimationConfig,
5
5
  ScreenInterpolationProps,
6
6
  ScreenStyleInterpolator,
7
+ ScreenTransitionAccessor,
8
+ ScreenTransitionDepthTarget,
7
9
  ScreenTransitionOptions,
8
10
  ScreenTransitionState,
11
+ ScreenTransitionTarget,
9
12
  TransitionInterpolatedStyle,
10
13
  TransitionInterpolatorOptions,
11
14
  TransitionSlotStyle,