react-native-screen-transitions 3.11.3 → 3.12.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.
- package/lib/commonjs/blank-stack/components/stack-view.js +1 -2
- package/lib/commonjs/blank-stack/components/stack-view.js.map +1 -1
- package/lib/commonjs/component-stack/components/stack-view.js +1 -2
- package/lib/commonjs/component-stack/components/stack-view.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.native.js +2 -3
- package/lib/commonjs/native-stack/views/NativeStackView.native.js.map +1 -1
- package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js +1 -1
- package/lib/commonjs/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -1
- package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +7 -4
- package/lib/commonjs/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
- package/lib/commonjs/shared/components/overlay/helpers/create-overlay-interpolator-frame.js +30 -0
- package/lib/commonjs/shared/components/overlay/helpers/create-overlay-interpolator-frame.js.map +1 -0
- package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js +40 -22
- package/lib/commonjs/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
- package/lib/commonjs/shared/components/overlay/helpers/retain-ready-overlay-resources.js +21 -0
- package/lib/commonjs/shared/components/overlay/helpers/retain-ready-overlay-resources.js.map +1 -0
- package/lib/commonjs/shared/components/overlay/helpers/run-overlay-slot-interpolator.js +41 -0
- package/lib/commonjs/shared/components/overlay/helpers/run-overlay-slot-interpolator.js.map +1 -0
- package/lib/commonjs/shared/components/overlay/hooks/use-overlay-slot.js +85 -0
- package/lib/commonjs/shared/components/overlay/hooks/use-overlay-slot.js.map +1 -0
- package/lib/commonjs/shared/components/overlay/variations/float-overlay.js +14 -65
- package/lib/commonjs/shared/components/overlay/variations/float-overlay.js.map +1 -1
- package/lib/commonjs/shared/components/overlay/variations/overlay-host.js +89 -16
- package/lib/commonjs/shared/components/overlay/variations/overlay-host.js.map +1 -1
- package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +4 -1
- package/lib/commonjs/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/animation/animation.provider.js +10 -7
- package/lib/commonjs/shared/providers/screen/animation/animation.provider.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +6 -8
- package/lib/commonjs/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js +8 -2
- package/lib/commonjs/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/gestures.provider.js +9 -5
- package/lib/commonjs/shared/providers/screen/gestures/gestures.provider.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js +1 -3
- package/lib/commonjs/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/gestures/ownership/{use-walk-up-and-register-shadowing-claims.js → gesture-ownership-bridge.js} +36 -50
- package/lib/commonjs/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +1 -0
- package/lib/commonjs/shared/providers/screen/styles/constants.js +1 -0
- package/lib/commonjs/shared/providers/screen/styles/constants.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/styles/helpers/transition-visual-state.js +20 -1
- package/lib/commonjs/shared/providers/screen/styles/helpers/transition-visual-state.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js +14 -15
- package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +34 -11
- package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
- package/lib/commonjs/shared/providers/screen/styles/slot.provider.js +18 -29
- package/lib/commonjs/shared/providers/screen/styles/slot.provider.js.map +1 -1
- package/lib/commonjs/shared/providers/stack/blank-stack-state/helpers/resolve-presented-index.js +18 -0
- package/lib/commonjs/shared/providers/stack/blank-stack-state/helpers/resolve-presented-index.js.map +1 -0
- package/lib/commonjs/shared/providers/stack/blank-stack.provider.js +2 -1
- package/lib/commonjs/shared/providers/stack/blank-stack.provider.js.map +1 -1
- package/lib/commonjs/shared/utils/create-provider.js +119 -10
- package/lib/commonjs/shared/utils/create-provider.js.map +1 -1
- package/lib/module/blank-stack/components/stack-view.js +1 -2
- package/lib/module/blank-stack/components/stack-view.js.map +1 -1
- package/lib/module/component-stack/components/stack-view.js +1 -2
- package/lib/module/component-stack/components/stack-view.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.native.js +2 -3
- package/lib/module/native-stack/views/NativeStackView.native.js.map +1 -1
- package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js +1 -1
- package/lib/module/shared/adapters/with-screen-transitions/stack-layout.js.map +1 -1
- package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +7 -4
- package/lib/module/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
- package/lib/module/shared/components/overlay/helpers/create-overlay-interpolator-frame.js +25 -0
- package/lib/module/shared/components/overlay/helpers/create-overlay-interpolator-frame.js.map +1 -0
- package/lib/module/shared/components/overlay/helpers/get-active-overlay.js +37 -21
- package/lib/module/shared/components/overlay/helpers/get-active-overlay.js.map +1 -1
- package/lib/module/shared/components/overlay/helpers/retain-ready-overlay-resources.js +17 -0
- package/lib/module/shared/components/overlay/helpers/retain-ready-overlay-resources.js.map +1 -0
- package/lib/module/shared/components/overlay/helpers/run-overlay-slot-interpolator.js +36 -0
- package/lib/module/shared/components/overlay/helpers/run-overlay-slot-interpolator.js.map +1 -0
- package/lib/module/shared/components/overlay/hooks/use-overlay-slot.js +80 -0
- package/lib/module/shared/components/overlay/hooks/use-overlay-slot.js.map +1 -0
- package/lib/module/shared/components/overlay/variations/float-overlay.js +15 -66
- package/lib/module/shared/components/overlay/variations/float-overlay.js.map +1 -1
- package/lib/module/shared/components/overlay/variations/overlay-host.js +90 -18
- package/lib/module/shared/components/overlay/variations/overlay-host.js.map +1 -1
- package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js +4 -1
- package/lib/module/shared/components/screen-lifecycle/hooks/use-close-transition-intent.js.map +1 -1
- package/lib/module/shared/providers/screen/animation/animation.provider.js +10 -7
- package/lib/module/shared/providers/screen/animation/animation.provider.js.map +1 -1
- package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js +6 -8
- package/lib/module/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.js.map +1 -1
- package/lib/module/shared/providers/screen/animation/use-screen-animation.js +8 -2
- package/lib/module/shared/providers/screen/animation/use-screen-animation.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/gestures.provider.js +10 -6
- package/lib/module/shared/providers/screen/gestures/gestures.provider.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js +1 -3
- package/lib/module/shared/providers/screen/gestures/hooks/use-screen-gesture-config.js.map +1 -1
- package/lib/module/shared/providers/screen/gestures/ownership/{use-walk-up-and-register-shadowing-claims.js → gesture-ownership-bridge.js} +35 -49
- package/lib/module/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.js.map +1 -0
- package/lib/module/shared/providers/screen/styles/constants.js +1 -0
- package/lib/module/shared/providers/screen/styles/constants.js.map +1 -1
- package/lib/module/shared/providers/screen/styles/helpers/transition-visual-state.js +18 -0
- package/lib/module/shared/providers/screen/styles/helpers/transition-visual-state.js.map +1 -1
- package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js +14 -15
- package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -1
- package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +35 -12
- package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
- package/lib/module/shared/providers/screen/styles/slot.provider.js +19 -30
- package/lib/module/shared/providers/screen/styles/slot.provider.js.map +1 -1
- package/lib/module/shared/providers/stack/blank-stack-state/helpers/resolve-presented-index.js +14 -0
- package/lib/module/shared/providers/stack/blank-stack-state/helpers/resolve-presented-index.js.map +1 -0
- package/lib/module/shared/providers/stack/blank-stack.provider.js +2 -1
- package/lib/module/shared/providers/stack/blank-stack.provider.js.map +1 -1
- package/lib/module/shared/types/animation.types.js.map +1 -1
- package/lib/module/shared/utils/create-provider.js +119 -10
- package/lib/module/shared/utils/create-provider.js.map +1 -1
- package/lib/typescript/blank-stack/components/stack-view.d.ts.map +1 -1
- package/lib/typescript/blank-stack/types.d.ts +1 -1
- package/lib/typescript/blank-stack/types.d.ts.map +1 -1
- package/lib/typescript/component-stack/components/stack-view.d.ts.map +1 -1
- package/lib/typescript/component-stack/types.d.ts +1 -1
- package/lib/typescript/component-stack/types.d.ts.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +1 -1
- package/lib/typescript/native-stack/types.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.native.d.ts.map +1 -1
- package/lib/typescript/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts.map +1 -1
- package/lib/typescript/shared/components/overlay/helpers/create-overlay-interpolator-frame.d.ts +7 -0
- package/lib/typescript/shared/components/overlay/helpers/create-overlay-interpolator-frame.d.ts.map +1 -0
- package/lib/typescript/shared/components/overlay/helpers/get-active-overlay.d.ts +17 -7
- package/lib/typescript/shared/components/overlay/helpers/get-active-overlay.d.ts.map +1 -1
- package/lib/typescript/shared/components/overlay/helpers/retain-ready-overlay-resources.d.ts +11 -0
- package/lib/typescript/shared/components/overlay/helpers/retain-ready-overlay-resources.d.ts.map +1 -0
- package/lib/typescript/shared/components/overlay/helpers/run-overlay-slot-interpolator.d.ts +8 -0
- package/lib/typescript/shared/components/overlay/helpers/run-overlay-slot-interpolator.d.ts.map +1 -0
- package/lib/typescript/shared/components/overlay/hooks/use-overlay-slot.d.ts +15 -0
- package/lib/typescript/shared/components/overlay/hooks/use-overlay-slot.d.ts.map +1 -0
- package/lib/typescript/shared/components/overlay/variations/float-overlay.d.ts +1 -1
- package/lib/typescript/shared/components/overlay/variations/float-overlay.d.ts.map +1 -1
- package/lib/typescript/shared/components/overlay/variations/overlay-host.d.ts +7 -6
- package/lib/typescript/shared/components/overlay/variations/overlay-host.d.ts.map +1 -1
- package/lib/typescript/shared/components/screen-lifecycle/hooks/use-close-transition-intent.d.ts.map +1 -1
- package/lib/typescript/shared/index.d.ts +12 -12
- package/lib/typescript/shared/index.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/animation/animation.provider.d.ts +4 -0
- package/lib/typescript/shared/providers/screen/animation/animation.provider.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.d.ts +4 -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/use-screen-animation.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/gestures/gestures.provider.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts +2 -2
- package/lib/typescript/shared/providers/screen/gestures/hooks/use-screen-gesture-config.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts +3 -0
- package/lib/typescript/shared/providers/screen/gestures/ownership/gesture-ownership-bridge.d.ts.map +1 -0
- package/lib/typescript/shared/providers/screen/styles/constants.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/styles/helpers/transition-visual-state.d.ts +7 -0
- package/lib/typescript/shared/providers/screen/styles/helpers/transition-visual-state.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts +1 -1
- package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
- package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts +5 -5
- package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts.map +1 -1
- package/lib/typescript/shared/providers/stack/blank-stack-state/helpers/resolve-presented-index.d.ts +3 -0
- package/lib/typescript/shared/providers/stack/blank-stack-state/helpers/resolve-presented-index.d.ts.map +1 -0
- package/lib/typescript/shared/providers/stack/blank-stack.provider.d.ts.map +1 -1
- package/lib/typescript/shared/types/animation.types.d.ts +8 -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/overlay.types.d.ts +26 -11
- package/lib/typescript/shared/types/overlay.types.d.ts.map +1 -1
- package/lib/typescript/shared/types/screen.types.d.ts +2 -2
- package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
- package/lib/typescript/shared/utils/create-provider.d.ts +21 -6
- package/lib/typescript/shared/utils/create-provider.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/blank-stack/components/stack-view.tsx +1 -4
- package/src/blank-stack/types.ts +8 -2
- package/src/component-stack/components/stack-view.tsx +1 -4
- package/src/component-stack/types.ts +8 -2
- package/src/native-stack/types.ts +8 -2
- package/src/native-stack/views/NativeStackView.native.tsx +3 -9
- package/src/shared/adapters/with-screen-transitions/stack-layout.tsx +1 -1
- package/src/shared/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.ts +9 -4
- package/src/shared/components/overlay/helpers/create-overlay-interpolator-frame.ts +29 -0
- package/src/shared/components/overlay/helpers/get-active-overlay.ts +62 -20
- package/src/shared/components/overlay/helpers/retain-ready-overlay-resources.ts +38 -0
- package/src/shared/components/overlay/helpers/run-overlay-slot-interpolator.ts +48 -0
- package/src/shared/components/overlay/hooks/use-overlay-slot.ts +103 -0
- package/src/shared/components/overlay/variations/float-overlay.tsx +22 -64
- package/src/shared/components/overlay/variations/overlay-host.tsx +135 -28
- package/src/shared/components/screen-lifecycle/hooks/use-close-transition-intent.ts +5 -1
- package/src/shared/index.ts +1 -0
- package/src/shared/providers/screen/animation/animation.provider.tsx +24 -11
- package/src/shared/providers/screen/animation/helpers/accessors/use-build-transition-accessor.ts +15 -9
- package/src/shared/providers/screen/animation/use-screen-animation.tsx +12 -2
- package/src/shared/providers/screen/gestures/gestures.provider.tsx +18 -7
- package/src/shared/providers/screen/gestures/hooks/use-screen-gesture-config.ts +4 -4
- package/src/shared/providers/screen/gestures/ownership/{use-walk-up-and-register-shadowing-claims.ts → gesture-ownership-bridge.tsx} +44 -54
- package/src/shared/providers/screen/styles/constants.ts +1 -0
- package/src/shared/providers/screen/styles/helpers/transition-visual-state.ts +26 -0
- package/src/shared/providers/screen/styles/hooks/slot-resolvers.tsx +17 -5
- package/src/shared/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +51 -12
- package/src/shared/providers/screen/styles/slot.provider.tsx +46 -70
- package/src/shared/providers/stack/blank-stack-state/helpers/resolve-presented-index.ts +22 -0
- package/src/shared/providers/stack/blank-stack.provider.tsx +6 -1
- package/src/shared/types/animation.types.ts +8 -0
- package/src/shared/types/index.ts +1 -1
- package/src/shared/types/overlay.types.ts +41 -14
- package/src/shared/types/screen.types.ts +2 -2
- package/src/shared/utils/create-provider.tsx +221 -19
- package/lib/commonjs/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +0 -1
- package/lib/commonjs/shared/providers/screen/styles/components/floating-overlay-layer.js +0 -28
- package/lib/commonjs/shared/providers/screen/styles/components/floating-overlay-layer.js.map +0 -1
- package/lib/commonjs/shared/providers/screen/styles/stores/slot-references.store.js +0 -53
- package/lib/commonjs/shared/providers/screen/styles/stores/slot-references.store.js.map +0 -1
- package/lib/module/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.js.map +0 -1
- package/lib/module/shared/providers/screen/styles/components/floating-overlay-layer.js +0 -24
- package/lib/module/shared/providers/screen/styles/components/floating-overlay-layer.js.map +0 -1
- package/lib/module/shared/providers/screen/styles/stores/slot-references.store.js +0 -47
- package/lib/module/shared/providers/screen/styles/stores/slot-references.store.js.map +0 -1
- package/lib/typescript/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.d.ts +0 -14
- package/lib/typescript/shared/providers/screen/gestures/ownership/use-walk-up-and-register-shadowing-claims.d.ts.map +0 -1
- package/lib/typescript/shared/providers/screen/styles/components/floating-overlay-layer.d.ts +0 -7
- package/lib/typescript/shared/providers/screen/styles/components/floating-overlay-layer.d.ts.map +0 -1
- package/lib/typescript/shared/providers/screen/styles/stores/slot-references.store.d.ts +0 -6
- package/lib/typescript/shared/providers/screen/styles/stores/slot-references.store.d.ts.map +0 -1
- package/src/shared/providers/screen/styles/components/floating-overlay-layer.tsx +0 -29
- package/src/shared/providers/screen/styles/stores/slot-references.store.ts +0 -72
|
@@ -54,13 +54,10 @@ const StackViewContent = memo(function StackViewContent() {
|
|
|
54
54
|
const routeKeys = useBlankStackStore(
|
|
55
55
|
(store) => store?.routeKeys ?? EMPTY_ROUTE_KEYS,
|
|
56
56
|
);
|
|
57
|
-
const shouldShowFloatOverlay = useBlankStackStore(
|
|
58
|
-
(store) => store?.shouldShowFloatOverlay ?? false,
|
|
59
|
-
);
|
|
60
57
|
|
|
61
58
|
return (
|
|
62
59
|
<Fragment>
|
|
63
|
-
|
|
60
|
+
<Overlay.Float />
|
|
64
61
|
|
|
65
62
|
{routeKeys.map((routeKey) => (
|
|
66
63
|
<ComponentSceneRow key={routeKey} routeKey={routeKey} />
|
|
@@ -74,8 +74,14 @@ type ComponentStackNavigationConfig = {};
|
|
|
74
74
|
*
|
|
75
75
|
* @deprecated Component stack is deprecated. Use blank stack instead.
|
|
76
76
|
*/
|
|
77
|
-
export type ComponentStackOverlayProps
|
|
78
|
-
|
|
77
|
+
export type ComponentStackOverlayProps<
|
|
78
|
+
ParamList extends ParamListBase = ParamListBase,
|
|
79
|
+
RouteName extends keyof ParamList = keyof ParamList,
|
|
80
|
+
NavigatorID extends string | undefined = undefined,
|
|
81
|
+
> = OverlayProps<
|
|
82
|
+
ComponentStackNavigationProp<ParamList, RouteName, NavigatorID>,
|
|
83
|
+
ParamList,
|
|
84
|
+
RouteName
|
|
79
85
|
>;
|
|
80
86
|
|
|
81
87
|
type ComponentStackScreenTransitionConfig = ScreenTransitionConfig & {
|
|
@@ -154,8 +154,14 @@ export type NativeStackHeaderLeftProps = NativeStackHeaderRightProps & {
|
|
|
154
154
|
* Props passed to overlay components in native-stack.
|
|
155
155
|
* Uses the shared OverlayProps type with native-stack's navigation type.
|
|
156
156
|
*/
|
|
157
|
-
export type NativeStackOverlayProps
|
|
158
|
-
|
|
157
|
+
export type NativeStackOverlayProps<
|
|
158
|
+
ParamList extends ParamListBase = ParamListBase,
|
|
159
|
+
RouteName extends keyof ParamList = keyof ParamList,
|
|
160
|
+
NavigatorID extends string | undefined = undefined,
|
|
161
|
+
> = OverlayProps<
|
|
162
|
+
NativeStackNavigationProp<ParamList, RouteName, NavigatorID>,
|
|
163
|
+
ParamList,
|
|
164
|
+
RouteName
|
|
159
165
|
>;
|
|
160
166
|
|
|
161
167
|
/**
|
|
@@ -482,14 +482,8 @@ const SceneView = ({
|
|
|
482
482
|
};
|
|
483
483
|
|
|
484
484
|
function NativeStackViewContent() {
|
|
485
|
-
const {
|
|
486
|
-
|
|
487
|
-
navigation,
|
|
488
|
-
descriptors,
|
|
489
|
-
scenes,
|
|
490
|
-
focusedIndex,
|
|
491
|
-
shouldShowFloatOverlay,
|
|
492
|
-
} = useDirectStackStore();
|
|
485
|
+
const { state, navigation, descriptors, scenes, focusedIndex } =
|
|
486
|
+
useDirectStackStore();
|
|
493
487
|
const { setNextDismissedKey } = useDismissedRouteError(state);
|
|
494
488
|
|
|
495
489
|
useInvalidPreventRemoveError(descriptors);
|
|
@@ -498,7 +492,7 @@ function NativeStackViewContent() {
|
|
|
498
492
|
|
|
499
493
|
return (
|
|
500
494
|
<>
|
|
501
|
-
|
|
495
|
+
<Overlay.Float />
|
|
502
496
|
<ScreenStack style={styles.container}>
|
|
503
497
|
{scenes.map((scene, index) => {
|
|
504
498
|
const { route, descriptor, isPreloaded } = scene;
|
|
@@ -182,7 +182,7 @@ function ScreenTransitionsStackContent({
|
|
|
182
182
|
return (
|
|
183
183
|
<ScreenTransitionsAdapterProvider value={adapterContextValue}>
|
|
184
184
|
<StackProvider value={stackContextValue}>
|
|
185
|
-
|
|
185
|
+
<Overlay.Float />
|
|
186
186
|
{children}
|
|
187
187
|
</StackProvider>
|
|
188
188
|
</ScreenTransitionsAdapterProvider>
|
|
@@ -24,12 +24,17 @@ interface UseBoundaryContentPortalAttachmentParams {
|
|
|
24
24
|
export const useBoundaryContentPortalAttachment = ({
|
|
25
25
|
boundaryId,
|
|
26
26
|
}: UseBoundaryContentPortalAttachmentParams) => {
|
|
27
|
-
const {
|
|
27
|
+
const { slotsMap } = useScreenSlots();
|
|
28
28
|
|
|
29
29
|
const currentScreenKey = useDescriptorsStore(
|
|
30
30
|
(s) => s.derivations.currentScreenKey,
|
|
31
31
|
);
|
|
32
|
+
const nextScreenKey = useDescriptorsStore((s) => s.derivations.nextScreenKey);
|
|
32
33
|
const sourcePairKey = useDescriptorsStore((s) => s.derivations.sourcePairKey);
|
|
34
|
+
const destinationSlots = useScreenSlots(nextScreenKey ?? currentScreenKey);
|
|
35
|
+
const unavailableInterpolatorReady = useSharedValue(0);
|
|
36
|
+
const interpolatorReady =
|
|
37
|
+
destinationSlots?.interpolatorReady ?? unavailableInterpolatorReady;
|
|
33
38
|
|
|
34
39
|
const activeReceiverScreenKey = useStack(resolveActiveHandoffReceiver);
|
|
35
40
|
const previousReceiverScreenKey = useStack(resolvePreviousHandoffReceiver);
|
|
@@ -85,7 +90,7 @@ export const useBoundaryContentPortalAttachment = ({
|
|
|
85
90
|
? link.destination.screenKey
|
|
86
91
|
: null;
|
|
87
92
|
|
|
88
|
-
const
|
|
93
|
+
const isInterpolatorReady = interpolatorReady.get();
|
|
89
94
|
const attachedScreenKey = attachedReceiverScreenKey.get();
|
|
90
95
|
|
|
91
96
|
const nextReceiverScreenKey = resolveHandoffAttachmentCandidate({
|
|
@@ -93,7 +98,7 @@ export const useBoundaryContentPortalAttachment = ({
|
|
|
93
98
|
activeReceiverScreenKey,
|
|
94
99
|
attachedReceiverScreenKey: attachedScreenKey,
|
|
95
100
|
hasActiveCloseFinished,
|
|
96
|
-
interpolatorReady: !!
|
|
101
|
+
interpolatorReady: !!isInterpolatorReady,
|
|
97
102
|
pairChangedDuringClose,
|
|
98
103
|
pairDestinationScreenKey: pairDestination,
|
|
99
104
|
previousReceiverScreenKey,
|
|
@@ -110,7 +115,7 @@ export const useBoundaryContentPortalAttachment = ({
|
|
|
110
115
|
|
|
111
116
|
const activatingPairDestination =
|
|
112
117
|
!!pairDestination &&
|
|
113
|
-
!!
|
|
118
|
+
!!isInterpolatorReady &&
|
|
114
119
|
nextReceiverScreenKey === pairDestination;
|
|
115
120
|
|
|
116
121
|
const canActivateReceiver =
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { updateDerivations } from "../../../providers/screen/animation/helpers/derivations";
|
|
2
|
+
import type { ScreenInterpolatorFrame } from "../../../providers/screen/animation/helpers/pipeline";
|
|
3
|
+
|
|
4
|
+
export const createOverlayInterpolatorFrame = ({
|
|
5
|
+
overlayFrame,
|
|
6
|
+
driverFrame,
|
|
7
|
+
previousOverlayFrame,
|
|
8
|
+
}: {
|
|
9
|
+
overlayFrame: ScreenInterpolatorFrame;
|
|
10
|
+
driverFrame: ScreenInterpolatorFrame;
|
|
11
|
+
previousOverlayFrame?: ScreenInterpolatorFrame;
|
|
12
|
+
}): ScreenInterpolatorFrame => {
|
|
13
|
+
"worklet";
|
|
14
|
+
const current = overlayFrame.current;
|
|
15
|
+
const driverIsCurrent = driverFrame.current.route.key === current.route.key;
|
|
16
|
+
const frame: ScreenInterpolatorFrame = {
|
|
17
|
+
...overlayFrame,
|
|
18
|
+
previous: previousOverlayFrame?.current,
|
|
19
|
+
current,
|
|
20
|
+
next: driverIsCurrent ? undefined : driverFrame.current,
|
|
21
|
+
layouts: current.layouts,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
updateDerivations(frame);
|
|
25
|
+
frame.stackProgress = frame.progress;
|
|
26
|
+
frame.logicallySettled = frame.active.settled;
|
|
27
|
+
|
|
28
|
+
return frame;
|
|
29
|
+
};
|
|
@@ -1,39 +1,81 @@
|
|
|
1
1
|
import type { StackScene } from "../../../hooks/navigation/use-stack";
|
|
2
2
|
import { isOverlayVisible } from "../../../utils/overlay/visibility";
|
|
3
3
|
|
|
4
|
+
export type FloatOverlayActivity = "active" | "inert" | "inactive" | "closing";
|
|
5
|
+
|
|
6
|
+
export type FloatOverlayEntry = {
|
|
7
|
+
scene: StackScene;
|
|
8
|
+
overlayIndex: number;
|
|
9
|
+
activity: FloatOverlayActivity;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type FloatOverlayTransitionEntry = FloatOverlayEntry & {
|
|
13
|
+
driverScene: StackScene;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
type OverlayCandidate = Omit<FloatOverlayEntry, "activity">;
|
|
17
|
+
|
|
18
|
+
const resolveOverlayActivity = (
|
|
19
|
+
scene: StackScene,
|
|
20
|
+
distanceFromTop: number,
|
|
21
|
+
): FloatOverlayActivity => {
|
|
22
|
+
if (distanceFromTop === 0 && scene.activity === "closing") {
|
|
23
|
+
return "closing";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (distanceFromTop === 0) {
|
|
27
|
+
return "active";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (distanceFromTop === 1) {
|
|
31
|
+
return "inert";
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return "inactive";
|
|
35
|
+
};
|
|
36
|
+
|
|
4
37
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
38
|
+
* Finds every visible floating-overlay checkpoint in stack order.
|
|
39
|
+
*
|
|
40
|
+
* The newest checkpoint owns the active overlay. Its immediate predecessor
|
|
41
|
+
* remains visible and inert; all older checkpoints are retained but inactive.
|
|
42
|
+
* This mirrors the screen activity window without making plain screens create
|
|
43
|
+
* a new overlay checkpoint.
|
|
8
44
|
*/
|
|
9
|
-
export function
|
|
45
|
+
export function getFloatOverlayStack(
|
|
10
46
|
scenes: StackScene[],
|
|
11
|
-
index: number,
|
|
12
47
|
transitionsAlwaysOn: boolean,
|
|
13
|
-
):
|
|
14
|
-
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// When navigating back, closing scenes are kept at the top of the local stack
|
|
19
|
-
// while the focused index already points to the destination screen. We need to
|
|
20
|
-
// start scanning from the actual top of the stack so the overlay can animate
|
|
21
|
-
// out together with its closing screen instead of disappearing immediately.
|
|
22
|
-
const startIndex = Math.max(index, scenes.length - 1);
|
|
48
|
+
): FloatOverlayEntry[] {
|
|
49
|
+
const candidates: OverlayCandidate[] = [];
|
|
23
50
|
|
|
24
|
-
for (let
|
|
25
|
-
const scene = scenes[
|
|
51
|
+
for (let index = 0; index < scenes.length; index += 1) {
|
|
52
|
+
const scene = scenes[index];
|
|
26
53
|
const options = scene?.descriptor?.options;
|
|
27
54
|
|
|
28
|
-
// Skip screens without enableTransitions (native-stack only)
|
|
29
55
|
if (!transitionsAlwaysOn && !options?.enableTransitions) {
|
|
30
56
|
continue;
|
|
31
57
|
}
|
|
32
58
|
|
|
33
59
|
if (isOverlayVisible(options)) {
|
|
34
|
-
|
|
60
|
+
candidates.push({ scene, overlayIndex: index });
|
|
35
61
|
}
|
|
36
62
|
}
|
|
37
63
|
|
|
38
|
-
|
|
64
|
+
const topIndex = candidates.length - 1;
|
|
65
|
+
return candidates.map((candidate, index) => ({
|
|
66
|
+
...candidate,
|
|
67
|
+
activity: resolveOverlayActivity(candidate.scene, topIndex - index),
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function getFloatOverlayTransitions(
|
|
72
|
+
overlayStack: FloatOverlayEntry[],
|
|
73
|
+
scenes: StackScene[],
|
|
74
|
+
): FloatOverlayTransitionEntry[] {
|
|
75
|
+
const topScene = scenes[scenes.length - 1];
|
|
76
|
+
|
|
77
|
+
return overlayStack.map((entry, index) => ({
|
|
78
|
+
...entry,
|
|
79
|
+
driverScene: overlayStack[index + 1]?.scene ?? topScene ?? entry.scene,
|
|
80
|
+
}));
|
|
39
81
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ScreenAnimationContextValue } from "../../../providers/screen/animation/animation.provider";
|
|
2
|
+
import type { ScreenSlotContextValue } from "../../../providers/screen/styles/slot.provider";
|
|
3
|
+
import type { FloatOverlayEntry } from "./get-active-overlay";
|
|
4
|
+
|
|
5
|
+
export type ReadyOverlayResources = {
|
|
6
|
+
overlayAnimationStore: ScreenAnimationContextValue;
|
|
7
|
+
driverScene: FloatOverlayEntry["scene"];
|
|
8
|
+
driverAnimationStore: ScreenAnimationContextValue;
|
|
9
|
+
driverSlots: ScreenSlotContextValue;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export function retainReadyOverlayResources(
|
|
13
|
+
previous: ReadyOverlayResources | null,
|
|
14
|
+
overlayAnimationStore: ScreenAnimationContextValue | null,
|
|
15
|
+
driverScene: FloatOverlayEntry["scene"],
|
|
16
|
+
driverAnimationStore: ScreenAnimationContextValue | null,
|
|
17
|
+
driverSlots: ScreenSlotContextValue | null,
|
|
18
|
+
): ReadyOverlayResources | null {
|
|
19
|
+
if (!overlayAnimationStore || !driverAnimationStore || !driverSlots) {
|
|
20
|
+
return previous;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (
|
|
24
|
+
previous?.overlayAnimationStore === overlayAnimationStore &&
|
|
25
|
+
previous.driverScene === driverScene &&
|
|
26
|
+
previous.driverAnimationStore === driverAnimationStore &&
|
|
27
|
+
previous.driverSlots === driverSlots
|
|
28
|
+
) {
|
|
29
|
+
return previous;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
overlayAnimationStore,
|
|
34
|
+
driverScene,
|
|
35
|
+
driverAnimationStore,
|
|
36
|
+
driverSlots,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ScreenInterpolatorFrame } from "../../../providers/screen/animation/helpers/pipeline";
|
|
2
|
+
import { createInterpolatorScope } from "../../../providers/screen/styles/helpers/create-interpolator-scope";
|
|
3
|
+
import { normalizeSlots } from "../../../providers/screen/styles/helpers/normalize-slots";
|
|
4
|
+
import { selectInterpolatorFrame } from "../../../providers/screen/styles/helpers/select-interpolator-frame";
|
|
5
|
+
import type {
|
|
6
|
+
NormalizedTransitionSlotStyle,
|
|
7
|
+
ScreenStyleInterpolator,
|
|
8
|
+
ScreenTransitionAccessor,
|
|
9
|
+
} from "../../../types/animation.types";
|
|
10
|
+
import { logger } from "../../../utils/logger";
|
|
11
|
+
|
|
12
|
+
export const runOverlaySlotInterpolator = ({
|
|
13
|
+
frame,
|
|
14
|
+
interpolator,
|
|
15
|
+
transition,
|
|
16
|
+
}: {
|
|
17
|
+
frame: ScreenInterpolatorFrame;
|
|
18
|
+
interpolator: ScreenStyleInterpolator | undefined;
|
|
19
|
+
transition: ScreenTransitionAccessor;
|
|
20
|
+
}): NormalizedTransitionSlotStyle | undefined => {
|
|
21
|
+
"worklet";
|
|
22
|
+
|
|
23
|
+
if (!interpolator) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
const raw = interpolator(
|
|
29
|
+
createInterpolatorScope({
|
|
30
|
+
frame,
|
|
31
|
+
selectedFrame: selectInterpolatorFrame(frame, false),
|
|
32
|
+
transition,
|
|
33
|
+
}),
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
if (!raw?.overlay) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return normalizeSlots({ overlay: raw.overlay }).overlay;
|
|
41
|
+
} catch (_) {
|
|
42
|
+
if (__DEV__) {
|
|
43
|
+
logger.warn("screenStyleInterpolator must be a worklet");
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { useWindowDimensions } from "react-native";
|
|
3
|
+
import {
|
|
4
|
+
type SharedValue,
|
|
5
|
+
useAnimatedProps,
|
|
6
|
+
useAnimatedStyle,
|
|
7
|
+
useDerivedValue,
|
|
8
|
+
} from "react-native-reanimated";
|
|
9
|
+
import { NO_PROPS, NO_STYLES } from "../../../constants";
|
|
10
|
+
import type { ScreenAnimationContextValue } from "../../../providers/screen/animation/animation.provider";
|
|
11
|
+
import { useBuildTransitionAccessor } from "../../../providers/screen/animation/helpers/accessors/use-build-transition-accessor";
|
|
12
|
+
import { collectInterpolatorSharedValues } from "../../../providers/screen/styles/helpers/collect-interpolator-shared-values";
|
|
13
|
+
import type {
|
|
14
|
+
NormalizedTransitionSlotStyle,
|
|
15
|
+
ScreenStyleInterpolator,
|
|
16
|
+
} from "../../../types/animation.types";
|
|
17
|
+
import { getVisibilityBlockOffset } from "../../../utils/visibility-block-offset";
|
|
18
|
+
import { createOverlayInterpolatorFrame } from "../helpers/create-overlay-interpolator-frame";
|
|
19
|
+
import { runOverlaySlotInterpolator } from "../helpers/run-overlay-slot-interpolator";
|
|
20
|
+
|
|
21
|
+
export const useOverlaySlot = ({
|
|
22
|
+
overlayAnimationStore,
|
|
23
|
+
driverAnimationStore,
|
|
24
|
+
previousOverlayAnimationStore,
|
|
25
|
+
driverInterpolator,
|
|
26
|
+
interpolatorReady,
|
|
27
|
+
isIncoming,
|
|
28
|
+
}: {
|
|
29
|
+
overlayAnimationStore: ScreenAnimationContextValue;
|
|
30
|
+
driverAnimationStore: ScreenAnimationContextValue;
|
|
31
|
+
previousOverlayAnimationStore?: ScreenAnimationContextValue;
|
|
32
|
+
driverInterpolator: ScreenStyleInterpolator | undefined;
|
|
33
|
+
interpolatorReady: SharedValue<number>;
|
|
34
|
+
isIncoming: boolean;
|
|
35
|
+
}) => {
|
|
36
|
+
const { height } = useWindowDimensions();
|
|
37
|
+
const transition = useBuildTransitionAccessor(driverAnimationStore);
|
|
38
|
+
|
|
39
|
+
const interpolatorSharedValues = useMemo(
|
|
40
|
+
() => collectInterpolatorSharedValues([driverInterpolator]),
|
|
41
|
+
[driverInterpolator],
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const overlaySlot = useDerivedValue<
|
|
45
|
+
NormalizedTransitionSlotStyle | undefined
|
|
46
|
+
>(() => {
|
|
47
|
+
"worklet";
|
|
48
|
+
overlayAnimationStore.screenInterpolatorPropsRevision.get();
|
|
49
|
+
driverAnimationStore.screenInterpolatorPropsRevision.get();
|
|
50
|
+
previousOverlayAnimationStore?.screenInterpolatorPropsRevision.get();
|
|
51
|
+
|
|
52
|
+
for (let index = 0; index < interpolatorSharedValues.length; index++) {
|
|
53
|
+
interpolatorSharedValues[index]?.get();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const frame = createOverlayInterpolatorFrame({
|
|
57
|
+
overlayFrame: overlayAnimationStore.screenInterpolatorProps.get(),
|
|
58
|
+
driverFrame: driverAnimationStore.screenInterpolatorProps.get(),
|
|
59
|
+
previousOverlayFrame:
|
|
60
|
+
previousOverlayAnimationStore?.screenInterpolatorProps.get(),
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
return runOverlaySlotInterpolator({
|
|
64
|
+
frame,
|
|
65
|
+
interpolator: driverInterpolator,
|
|
66
|
+
transition,
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const animatedStyle = useAnimatedStyle(() => {
|
|
71
|
+
"worklet";
|
|
72
|
+
const slot = overlaySlot.get();
|
|
73
|
+
if (!slot) {
|
|
74
|
+
return NO_STYLES;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (isIncoming && !interpolatorReady.get()) {
|
|
78
|
+
return {
|
|
79
|
+
transform: [{ translateY: getVisibilityBlockOffset(height) }],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return slot.style ?? NO_STYLES;
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const animatedProps = useAnimatedProps(() => {
|
|
87
|
+
"worklet";
|
|
88
|
+
const slotProps = overlaySlot.get()?.props;
|
|
89
|
+
if (!slotProps) {
|
|
90
|
+
return NO_PROPS;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const {
|
|
94
|
+
pointerEvents: _pointerEvents,
|
|
95
|
+
teleport: _teleport,
|
|
96
|
+
...props
|
|
97
|
+
} = slotProps;
|
|
98
|
+
|
|
99
|
+
return props;
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
return { animatedProps, animatedStyle };
|
|
103
|
+
};
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
import { useMemo } from "react";
|
|
2
|
-
import { snapDescriptorToIndex } from "../../../animation/snap-to";
|
|
3
1
|
import { useStack } from "../../../hooks/navigation/use-stack";
|
|
4
|
-
import { ScreenAnimationProvider } from "../../../providers/screen/animation";
|
|
5
|
-
import type { BaseDescriptor } from "../../../providers/screen/descriptors";
|
|
6
|
-
import { DescriptorsProvider } from "../../../providers/screen/descriptors";
|
|
7
|
-
import { ScreenOptionsProvider } from "../../../providers/screen/options";
|
|
8
|
-
import { ScreenSlotProvider } from "../../../providers/screen/styles";
|
|
9
|
-
import type { OverlayScreenState } from "../../../types/overlay.types";
|
|
10
2
|
|
|
11
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
getFloatOverlayStack,
|
|
5
|
+
getFloatOverlayTransitions,
|
|
6
|
+
} from "../helpers/get-active-overlay";
|
|
12
7
|
import { OverlayHost } from "./overlay-host";
|
|
13
8
|
|
|
14
9
|
/**
|
|
@@ -16,65 +11,28 @@ import { OverlayHost } from "./overlay-host";
|
|
|
16
11
|
* Gets routes and descriptors from stack context.
|
|
17
12
|
*/
|
|
18
13
|
export function FloatOverlay() {
|
|
19
|
-
const { scenes,
|
|
14
|
+
const { scenes, flags } = useStack();
|
|
20
15
|
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
[scenes, focusedIndex, flags.TRANSITIONS_ALWAYS_ON],
|
|
16
|
+
const overlayStack = getFloatOverlayStack(
|
|
17
|
+
scenes,
|
|
18
|
+
flags.TRANSITIONS_ALWAYS_ON,
|
|
25
19
|
);
|
|
26
|
-
|
|
27
|
-
const overlayData = useMemo(() => {
|
|
28
|
-
if (!activeOverlay) return null;
|
|
29
|
-
|
|
30
|
-
const { scene, overlayIndex } = activeOverlay;
|
|
31
|
-
const previous = scenes[overlayIndex - 1]?.descriptor;
|
|
32
|
-
const current = scene.descriptor;
|
|
33
|
-
const next = scenes[overlayIndex + 1]?.descriptor;
|
|
34
|
-
const focusedScene = scenes[focusedIndex] ?? scenes[scenes.length - 1];
|
|
35
|
-
const focusedDescriptor = focusedScene?.descriptor;
|
|
36
|
-
|
|
37
|
-
const overlayScreenState: OverlayScreenState<BaseDescriptor["navigation"]> =
|
|
38
|
-
{
|
|
39
|
-
index: routeKeys.indexOf(current.route.key),
|
|
40
|
-
options: focusedDescriptor?.options ?? {},
|
|
41
|
-
routes,
|
|
42
|
-
focusedRoute: focusedScene?.route ?? current.route,
|
|
43
|
-
focusedIndex,
|
|
44
|
-
meta: focusedDescriptor?.options?.meta,
|
|
45
|
-
navigation: current.navigation,
|
|
46
|
-
snapTo: (index: number) => {
|
|
47
|
-
snapDescriptorToIndex(current, index);
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
scene,
|
|
53
|
-
previous,
|
|
54
|
-
current,
|
|
55
|
-
next,
|
|
56
|
-
overlayScreenState,
|
|
57
|
-
};
|
|
58
|
-
}, [activeOverlay, scenes, focusedIndex, routeKeys, routes]);
|
|
59
|
-
|
|
60
|
-
if (!overlayData) {
|
|
20
|
+
if (overlayStack.length === 0) {
|
|
61
21
|
return null;
|
|
62
22
|
}
|
|
63
23
|
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
return (
|
|
67
|
-
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
</ScreenOptionsProvider>
|
|
78
|
-
</DescriptorsProvider>
|
|
24
|
+
const overlayTransitions = getFloatOverlayTransitions(overlayStack, scenes);
|
|
25
|
+
|
|
26
|
+
return overlayTransitions.map(
|
|
27
|
+
({ scene, activity, driverScene }, layerIndex) => (
|
|
28
|
+
<OverlayHost
|
|
29
|
+
key={scene.route.key}
|
|
30
|
+
scene={scene}
|
|
31
|
+
driverScene={driverScene}
|
|
32
|
+
previousOverlayScene={overlayTransitions[layerIndex - 1]?.scene}
|
|
33
|
+
activity={activity}
|
|
34
|
+
layerIndex={layerIndex}
|
|
35
|
+
/>
|
|
36
|
+
),
|
|
79
37
|
);
|
|
80
38
|
}
|