react-native-screen-transitions 3.7.0-beta.0 → 3.7.0-beta.2
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/lib/commonjs/shared/components/activity/helpers.js +1 -1
- package/lib/commonjs/shared/components/activity/helpers.js.map +1 -1
- package/lib/commonjs/shared/components/activity/variants/activity-screen.js +4 -3
- package/lib/commonjs/shared/components/activity/variants/activity-screen.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +10 -1
- package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +20 -0
- package/lib/commonjs/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -0
- package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js +2 -13
- package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/ownership/shadowing-claims.js +18 -0
- package/lib/commonjs/shared/providers/screen/gestures/ownership/shadowing-claims.js.map +1 -0
- package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +47 -1
- package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +12 -3
- package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +23 -20
- package/lib/commonjs/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -1
- package/lib/module/shared/components/activity/helpers.js +1 -1
- package/lib/module/shared/components/activity/helpers.js.map +1 -1
- package/lib/module/shared/components/activity/variants/activity-screen.js +4 -3
- package/lib/module/shared/components/activity/variants/activity-screen.js.map +1 -1
- package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +10 -1
- package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
- package/lib/module/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
- package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js +15 -0
- package/lib/module/shared/providers/screen/animation/helpers/read-screen-animation-revisions.js.map +1 -0
- package/lib/module/shared/providers/screen/animation/use-screen-animation.js +1 -12
- package/lib/module/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/ownership/shadowing-claims.js +13 -0
- package/lib/module/shared/providers/screen/gestures/ownership/shadowing-claims.js.map +1 -0
- package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js +49 -3
- package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +1 -1
- package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +12 -3
- package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js +23 -20
- package/lib/module/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.js.map +1 -1
- package/lib/module/shared/types/animation.types.js.map +1 -1
- package/lib/typescript/blank-stack/types.d.ts +10 -9
- package/lib/typescript/blank-stack/types.d.ts.map +1 -1
- package/lib/typescript/shared/components/activity/helpers.d.ts.map +1 -1
- package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts.map +1 -1
- package/lib/typescript/shared/index.d.ts +1 -1
- package/lib/typescript/shared/index.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts +1 -1
- package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts +3 -0
- package/lib/typescript/shared/providers/screen/animation/helpers/read-screen-animation-revisions.d.ts.map +1 -0
- package/lib/typescript/shared/providers/screen/animation/use-screen-animation.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/gestures/ownership/shadowing-claims.d.ts +8 -0
- package/lib/typescript/shared/providers/screen/gestures/ownership/shadowing-claims.d.ts.map +1 -0
- package/lib/typescript/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.d.ts.map +1 -1
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts +2 -3
- package/lib/typescript/shared/providers/stack/helpers/managed-stack-state/helpers/types.d.ts.map +1 -1
- package/lib/typescript/shared/types/animation.types.d.ts +14 -0
- package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
- package/lib/typescript/shared/types/index.d.ts +1 -1
- package/lib/typescript/shared/types/index.d.ts.map +1 -1
- package/lib/typescript/shared/types/screen.types.d.ts +15 -14
- package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/blank-stack/types.ts +10 -9
- package/src/shared/components/activity/helpers.ts +1 -1
- package/src/shared/components/activity/variants/activity-screen.tsx +4 -3
- package/src/shared/index.ts +3 -0
- package/src/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.ts +14 -0
- package/src/shared/providers/screen/animation/helpers/pipeline.ts +4 -1
- package/src/shared/providers/screen/animation/helpers/read-screen-animation-revisions.ts +25 -0
- package/src/shared/providers/screen/animation/use-screen-animation.tsx +1 -21
- package/src/shared/providers/screen/gestures/ownership/shadowing-claims.ts +18 -0
- package/src/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.ts +64 -3
- package/src/shared/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +15 -1
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.ts +38 -24
- package/src/shared/providers/stack/helpers/managed-stack-state/helpers/types.ts +2 -3
- package/src/shared/types/animation.types.ts +18 -0
- package/src/shared/types/index.ts +3 -0
- package/src/shared/types/screen.types.ts +15 -14
package/src/shared/providers/stack/helpers/managed-stack-state/helpers/build-managed-stack-state.ts
CHANGED
|
@@ -59,11 +59,10 @@ const resolveStableDescriptorSource = <
|
|
|
59
59
|
};
|
|
60
60
|
|
|
61
61
|
const getSceneActivity = ({
|
|
62
|
-
|
|
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 (
|
|
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 ===
|
|
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
|
|
112
|
+
const nonClosingIndices = getNonClosingSceneIndices(routes, closingRouteKeys);
|
|
102
113
|
|
|
103
|
-
|
|
114
|
+
const topNonClosingIndex =
|
|
115
|
+
nonClosingIndices[nonClosingIndices.length - 1] ?? -1;
|
|
104
116
|
|
|
105
|
-
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
topIsClosing,
|
|
136
|
+
activeIndex,
|
|
137
|
+
inertIndex,
|
|
124
138
|
};
|
|
125
139
|
};
|
|
126
140
|
|
|
@@ -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,
|
|
@@ -46,27 +46,28 @@ export type BackdropBehavior = "block" | "passthrough" | "dismiss" | "collapse";
|
|
|
46
46
|
/**
|
|
47
47
|
* Controls how an inactive screen is retained after it is no longer active.
|
|
48
48
|
*
|
|
49
|
-
* - `
|
|
50
|
-
* keep inactive screen mounted,
|
|
51
|
-
*
|
|
52
|
-
*
|
|
49
|
+
* - `hide`
|
|
50
|
+
* keep inactive screen mounted, pause/freeze inactive work where supported,
|
|
51
|
+
* and hide inactive paint/native presentation after safe paint
|
|
52
|
+
* RNS: activityState=0, visible=false, shouldFreeze=true
|
|
53
|
+
* React Activity: mode="hidden" with paint hidden
|
|
53
54
|
*
|
|
54
|
-
* - `
|
|
55
|
-
* keep last painted UI visible but
|
|
56
|
-
* RNS: activityState=1, visible=true,
|
|
55
|
+
* - `pause`
|
|
56
|
+
* keep last painted UI visible but pause/freeze inactive work where supported
|
|
57
|
+
* RNS: activityState=1, visible=true, shouldFreeze=true
|
|
57
58
|
* React Activity: mode="hidden" with paint preserved
|
|
58
59
|
*
|
|
59
|
-
* - `detach`
|
|
60
|
-
* remove inactive screen from native/view presentation after safe paint
|
|
61
|
-
* RNS: activityState=0, visible=false
|
|
62
|
-
* React Activity: mode="hidden" + display none, or equivalent
|
|
63
|
-
*
|
|
64
60
|
* - `unmount`
|
|
65
|
-
*
|
|
61
|
+
* remove React subtree when the inactive screen is safe to remove
|
|
66
62
|
* RNS native: only after safe paint for non-nested screens
|
|
67
63
|
* web: return null
|
|
64
|
+
*
|
|
65
|
+
* - `keep`
|
|
66
|
+
* keep inactive screen mounted, attached, visible, not interactive, and running
|
|
67
|
+
* RNS: activityState=1, visible=true
|
|
68
|
+
* React Activity: mode="visible"
|
|
68
69
|
*/
|
|
69
|
-
export type InactiveBehavior = "
|
|
70
|
+
export type InactiveBehavior = "hide" | "pause" | "unmount" | "keep";
|
|
70
71
|
|
|
71
72
|
export type TransitionAwareProps<T extends object> = AnimatedProps<T> & {
|
|
72
73
|
/**
|