react-native-screen-transitions 2.3.3 → 2.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -7
- package/lib/commonjs/components/controllers/screen-lifecycle.js +5 -8
- package/lib/commonjs/components/controllers/screen-lifecycle.js.map +1 -1
- package/lib/commonjs/components/create-transition-aware-component.js +2 -2
- package/lib/commonjs/components/create-transition-aware-component.js.map +1 -1
- package/lib/commonjs/hooks/bounds/use-bound-registry.js +11 -9
- package/lib/commonjs/hooks/bounds/use-bound-registry.js.map +1 -1
- package/lib/module/components/controllers/screen-lifecycle.js +5 -8
- package/lib/module/components/controllers/screen-lifecycle.js.map +1 -1
- package/lib/module/components/create-transition-aware-component.js +2 -2
- package/lib/module/components/create-transition-aware-component.js.map +1 -1
- package/lib/module/hooks/bounds/use-bound-registry.js +11 -9
- package/lib/module/hooks/bounds/use-bound-registry.js.map +1 -1
- package/lib/typescript/components/controllers/screen-lifecycle.d.ts.map +1 -1
- package/lib/typescript/hooks/bounds/use-bound-registry.d.ts +1 -1
- package/lib/typescript/hooks/bounds/use-bound-registry.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/controllers/screen-lifecycle.tsx +5 -7
- package/src/components/create-transition-aware-component.tsx +2 -2
- package/src/hooks/bounds/use-bound-registry.tsx +21 -17
package/README.md
CHANGED
|
@@ -146,16 +146,28 @@ Ready-made presets for common shared-element patterns. These leverage the bounds
|
|
|
146
146
|
|
|
147
147
|
Other presets: `SharedAppleMusic()`, `SharedXImage()`.
|
|
148
148
|
|
|
149
|
-
|
|
149
|
+
#### 🎭 Masked View Setup (Required for SharedIGImage & SharedAppleMusic)
|
|
150
150
|
|
|
151
|
-
|
|
152
|
-
- Install the mask package:
|
|
153
|
-
- Expo: `npx expo install @react-native-masked-view/masked-view`
|
|
154
|
-
- Bare RN: `npm i @react-native-masked-view/masked-view` (then iOS: `cd ios && pod install`)
|
|
155
|
-
- `Transition.MaskedView` lazy-loads the native mask and falls back to a plain `View` if missing, but the mask is required for the full shared effect.
|
|
151
|
+
> **⚠️ Important**: These presets require native code and **will not work in Expo Go**. You must use a development build.
|
|
156
152
|
|
|
157
|
-
|
|
153
|
+
**1. Install the dependency**
|
|
154
|
+
```bash
|
|
155
|
+
# Expo projects
|
|
156
|
+
npx expo install @react-native-masked-view/masked-view
|
|
157
|
+
|
|
158
|
+
# Bare React Native
|
|
159
|
+
npm install @react-native-masked-view/masked-view
|
|
160
|
+
cd ios && pod install # iOS only
|
|
161
|
+
```
|
|
158
162
|
|
|
163
|
+
**2. Create a development build** (if using Expo)
|
|
164
|
+
```bash
|
|
165
|
+
npx expo run:ios
|
|
166
|
+
# or
|
|
167
|
+
npx expo run:android
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**3. Wrap your destination screen**
|
|
159
171
|
```tsx
|
|
160
172
|
export default function PostScreen() {
|
|
161
173
|
return (
|
|
@@ -166,6 +178,10 @@ export default function PostScreen() {
|
|
|
166
178
|
}
|
|
167
179
|
```
|
|
168
180
|
|
|
181
|
+
> **💡 Fallback behavior**: `Transition.MaskedView` will fall back to a plain `View` if the masked view library is missing, but this breaks the shared element effect and may cause errors like "bounds is not a function".
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
169
185
|
### Navigator-level custom animations
|
|
170
186
|
|
|
171
187
|
Instead of presets, you can define a custom transition directly on the screen’s options.
|
|
@@ -23,15 +23,12 @@ const ScreenLifecycleController = ({
|
|
|
23
23
|
const handleBeforeRemove = (0, _useStableCallback.default)(e => {
|
|
24
24
|
const key = current.navigation.getParent()?.getState().key;
|
|
25
25
|
const requestedDismissOnNavigator = _navigatorDismissState.NavigatorDismissState.get(key);
|
|
26
|
+
const isEnabled = current.options.enableTransitions;
|
|
27
|
+
const isRequestedDismissOnNavigator = requestedDismissOnNavigator;
|
|
28
|
+
const isFirstScreen = current.navigation.getState().index === 0;
|
|
26
29
|
|
|
27
|
-
//
|
|
28
|
-
if (
|
|
29
|
-
(0, _resetStoresForScreen.resetStoresForScreen)(current);
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Don't run e.preventDefault when this is the first screen of the stack
|
|
34
|
-
if (current.navigation.getState().index === 0) {
|
|
30
|
+
// If transitions are disabled, or the dismissal was on the local root, or this is the first screen of the stack, reset the stores
|
|
31
|
+
if (!isEnabled || isRequestedDismissOnNavigator || isFirstScreen) {
|
|
35
32
|
(0, _resetStoresForScreen.resetStoresForScreen)(current);
|
|
36
33
|
return;
|
|
37
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_useParentGestureRegistry","_useStableCallback","_interopRequireDefault","_keys","_animations","_navigatorDismissState","_resetStoresForScreen","_startScreenTransition","e","__esModule","default","ScreenLifecycleController","children","current","useKeys","animations","Animations","getAll","route","key","handleBeforeRemove","useStableCallback","navigation","getParent","getState","requestedDismissOnNavigator","NavigatorDismissState","get","
|
|
1
|
+
{"version":3,"names":["_react","require","_useParentGestureRegistry","_useStableCallback","_interopRequireDefault","_keys","_animations","_navigatorDismissState","_resetStoresForScreen","_startScreenTransition","e","__esModule","default","ScreenLifecycleController","children","current","useKeys","animations","Animations","getAll","route","key","handleBeforeRemove","useStableCallback","navigation","getParent","getState","requestedDismissOnNavigator","NavigatorDismissState","get","isEnabled","options","enableTransitions","isRequestedDismissOnNavigator","isFirstScreen","index","resetStoresForScreen","preventDefault","onAnimationFinish","finished","dispatch","data","action","requestAnimationFrame","startScreenTransition","target","spec","transitionSpec","handleInitialize","useEffect","unsubscribe","addListener","useLayoutEffect","useParentGestureRegistry","exports"],"sourceRoot":"../../../../src","sources":["components/controllers/screen-lifecycle.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,yBAAA,GAAAD,OAAA;AACA,IAAAE,kBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,sBAAA,GAAAN,OAAA;AACA,IAAAO,qBAAA,GAAAP,OAAA;AACA,IAAAQ,sBAAA,GAAAR,OAAA;AAAsF,SAAAG,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAM/E,MAAMG,yBAAyB,GAAGA,CAAC;EACzCC;AACqB,CAAC,KAAK;EAC3B,MAAM;IAAEC;EAAQ,CAAC,GAAG,IAAAC,aAAO,EAAC,CAAC;EAE7B,MAAMC,UAAU,GAAGC,sBAAU,CAACC,MAAM,CAACJ,OAAO,CAACK,KAAK,CAACC,GAAG,CAAC;EAEvD,MAAMC,kBAAkB,GAAG,IAAAC,0BAAiB,EAAEb,CAAM,IAAK;IACxD,MAAMW,GAAG,GAAGN,OAAO,CAACS,UAAU,CAACC,SAAS,CAAC,CAAC,EAAEC,QAAQ,CAAC,CAAC,CAACL,GAAG;IAC1D,MAAMM,2BAA2B,GAAGC,4CAAqB,CAACC,GAAG,CAACR,GAAG,CAAC;IAElE,MAAMS,SAAS,GAAGf,OAAO,CAACgB,OAAO,CAACC,iBAAiB;IACnD,MAAMC,6BAA6B,GAAGN,2BAA2B;IACjE,MAAMO,aAAa,GAAGnB,OAAO,CAACS,UAAU,CAACE,QAAQ,CAAC,CAAC,CAACS,KAAK,KAAK,CAAC;;IAE/D;IACA,IAAI,CAACL,SAAS,IAAIG,6BAA6B,IAAIC,aAAa,EAAE;MACjE,IAAAE,0CAAoB,EAACrB,OAAO,CAAC;MAC7B;IACD;IAEAL,CAAC,CAAC2B,cAAc,CAAC,CAAC;IAClB,MAAMC,iBAAiB,GAAIC,QAAiB,IAAK;MAChD,IAAIA,QAAQ,EAAE;QACbxB,OAAO,CAACS,UAAU,CAACgB,QAAQ,CAAC9B,CAAC,CAAC+B,IAAI,CAACC,MAAM,CAAC;;QAE1C;QACAC,qBAAqB,CAAC,MAAM;UAC3B,IAAAP,0CAAoB,EAACrB,OAAO,CAAC;QAC9B,CAAC,CAAC;MACH;IACD,CAAC;IAED,IAAA6B,4CAAqB,EAAC;MACrBC,MAAM,EAAE,OAAO;MACfC,IAAI,EAAE/B,OAAO,CAACgB,OAAO,CAACgB,cAAc;MACpCT,iBAAiB;MACjBrB;IACD,CAAC,CAAC;EACH,CAAC,CAAC;EAEF,MAAM+B,gBAAgB,GAAG,IAAAzB,0BAAiB,EAAC,MAAM;IAChD,IAAAqB,4CAAqB,EAAC;MACrBC,MAAM,EAAE,MAAM;MACdC,IAAI,EAAE/B,OAAO,CAACgB,OAAO,CAACgB,cAAc;MACpC9B;IACD,CAAC,CAAC;EACH,CAAC,CAAC;EAEF,IAAAgC,gBAAS,EAAC,MAAM;IACf,MAAMC,WAAW,GAAGnC,OAAO,CAACS,UAAU,CAAC2B,WAAW,CACjD,cAAc,EACd7B,kBACD,CAAC;IAED,OAAO4B,WAAW;EACnB,CAAC,EAAE,CAACnC,OAAO,CAACS,UAAU,EAAEF,kBAAkB,CAAC,CAAC;EAE5C,IAAA8B,sBAAe,EAACJ,gBAAgB,EAAE,EAAE,CAAC;;EAErC;EACA,IAAAK,kDAAwB,EAAC,CAAC;EAE1B,OAAOvC,QAAQ;AAChB,CAAC;AAACwC,OAAA,CAAAzC,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
|
@@ -60,7 +60,7 @@ function createTransitionAwareComponent(Wrapped, options = {}) {
|
|
|
60
60
|
style
|
|
61
61
|
});
|
|
62
62
|
const {
|
|
63
|
-
|
|
63
|
+
handleInitialLayout,
|
|
64
64
|
captureActiveOnPress,
|
|
65
65
|
MeasurementSyncProvider
|
|
66
66
|
} = (0, _useBoundRegistry.useBoundsRegistry)({
|
|
@@ -75,7 +75,7 @@ function createTransitionAwareComponent(Wrapped, options = {}) {
|
|
|
75
75
|
ref: animatedRef,
|
|
76
76
|
style: [style, associatedStyles],
|
|
77
77
|
onPress: captureActiveOnPress,
|
|
78
|
-
onLayout: (0, _reactNativeReanimated.runOnUI)(
|
|
78
|
+
onLayout: (0, _reactNativeReanimated.runOnUI)(handleInitialLayout),
|
|
79
79
|
collapsable: !sharedBoundTag,
|
|
80
80
|
children: children
|
|
81
81
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_interopRequireWildcard","_useAssociatedStyle","_useBoundRegistry","_useScrollRegistry","_gestures","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","createTransitionAwareComponent","Wrapped","options","isScrollable","AnimatedComponent","Animated","createAnimatedComponent","ScrollableInner","forwardRef","props","ref","nativeGesture","useGestureContext","scrollHandler","onContentSizeChange","onLayout","useScrollRegistry","onScroll","jsx","GestureDetector","gesture","children","scrollEventThrottle","Inner","_","style","sharedBoundTag","styleId","onPress","rest","animatedRef","useAnimatedRef","associatedStyles","useAssociatedStyles","id","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_interopRequireWildcard","_useAssociatedStyle","_useBoundRegistry","_useScrollRegistry","_gestures","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","createTransitionAwareComponent","Wrapped","options","isScrollable","AnimatedComponent","Animated","createAnimatedComponent","ScrollableInner","forwardRef","props","ref","nativeGesture","useGestureContext","scrollHandler","onContentSizeChange","onLayout","useScrollRegistry","onScroll","jsx","GestureDetector","gesture","children","scrollEventThrottle","Inner","_","style","sharedBoundTag","styleId","onPress","rest","animatedRef","useAnimatedRef","associatedStyles","useAssociatedStyles","id","handleInitialLayout","captureActiveOnPress","MeasurementSyncProvider","useBoundsRegistry","runOnUI","collapsable","memo"],"sourceRoot":"../../../src","sources":["components/create-transition-aware-component.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,12 +22,12 @@ const useBoundsRegistry = ({
|
|
|
22
22
|
}) => {
|
|
23
23
|
const {
|
|
24
24
|
previous,
|
|
25
|
-
current
|
|
25
|
+
current,
|
|
26
|
+
next
|
|
26
27
|
} = (0, _keys.useKeys)();
|
|
27
28
|
const ROOT_MEASUREMENT_SIGNAL = (0, _react.useContext)(MeasurementUpdateContext);
|
|
28
29
|
const ROOT_SIGNAL = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
29
30
|
const IS_ROOT = !ROOT_MEASUREMENT_SIGNAL;
|
|
30
|
-
const hasMeasured = (0, _reactNativeReanimated.useSharedValue)(false);
|
|
31
31
|
const emitUpdate = (0, _react.useCallback)(() => {
|
|
32
32
|
"worklet";
|
|
33
33
|
|
|
@@ -39,7 +39,8 @@ const useBoundsRegistry = ({
|
|
|
39
39
|
}) => {
|
|
40
40
|
"worklet";
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
// Currently, there's no necessity to measure when the current route is blurred ( could potentially change in the future )
|
|
43
|
+
if (!sharedBoundTag || next) return;
|
|
43
44
|
const measured = (0, _reactNativeReanimated.measure)(animatedRef);
|
|
44
45
|
if (!measured) {
|
|
45
46
|
console.warn(`[react-native-screen-transitions] measure() returned null for sharedBoundTag="${sharedBoundTag}"`);
|
|
@@ -64,12 +65,13 @@ const useBoundsRegistry = ({
|
|
|
64
65
|
_bounds.Bounds.setRouteActive(key, sharedBoundTag);
|
|
65
66
|
}
|
|
66
67
|
if (onPress) (0, _reactNativeReanimated.runOnJS)(onPress)();
|
|
67
|
-
}, [sharedBoundTag, animatedRef, current.route.key, style, emitUpdate]);
|
|
68
|
-
const
|
|
68
|
+
}, [sharedBoundTag, animatedRef, current.route.key, style, emitUpdate, next]);
|
|
69
|
+
const hasMeasuredOnLayout = (0, _reactNativeReanimated.useSharedValue)(false);
|
|
70
|
+
const handleInitialLayout = (0, _react.useCallback)(() => {
|
|
69
71
|
"worklet";
|
|
70
72
|
|
|
71
73
|
const prevKey = previous?.route.key;
|
|
72
|
-
if (!sharedBoundTag ||
|
|
74
|
+
if (!sharedBoundTag || hasMeasuredOnLayout.value || !prevKey) {
|
|
73
75
|
return;
|
|
74
76
|
}
|
|
75
77
|
const prevBounds = _bounds.Bounds.getBounds(prevKey)?.[sharedBoundTag];
|
|
@@ -79,9 +81,9 @@ const useBoundsRegistry = ({
|
|
|
79
81
|
skipMarkingActive: true
|
|
80
82
|
});
|
|
81
83
|
// Should not measure again while in transition
|
|
82
|
-
|
|
84
|
+
hasMeasuredOnLayout.value = true;
|
|
83
85
|
}
|
|
84
|
-
}, [maybeMeasureAndStore, sharedBoundTag, previous?.route.key,
|
|
86
|
+
}, [maybeMeasureAndStore, sharedBoundTag, previous?.route.key, hasMeasuredOnLayout]);
|
|
85
87
|
const captureActiveOnPress = (0, _useStableCallback.default)(() => {
|
|
86
88
|
if (!sharedBoundTag) {
|
|
87
89
|
if (onPress) onPress();
|
|
@@ -118,7 +120,7 @@ const useBoundsRegistry = ({
|
|
|
118
120
|
});
|
|
119
121
|
});
|
|
120
122
|
return {
|
|
121
|
-
|
|
123
|
+
handleInitialLayout,
|
|
122
124
|
captureActiveOnPress,
|
|
123
125
|
MeasurementSyncProvider
|
|
124
126
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNativeReanimated","_keys","_bounds","_flattenStyles","_isBoundsEqual","_useStableCallback","_interopRequireDefault","_jsxRuntime","e","__esModule","default","MeasurementUpdateContext","createContext","useBoundsRegistry","sharedBoundTag","animatedRef","style","onPress","previous","current","useKeys","ROOT_MEASUREMENT_SIGNAL","useContext","ROOT_SIGNAL","useSharedValue","IS_ROOT","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeReanimated","_keys","_bounds","_flattenStyles","_isBoundsEqual","_useStableCallback","_interopRequireDefault","_jsxRuntime","e","__esModule","default","MeasurementUpdateContext","createContext","useBoundsRegistry","sharedBoundTag","animatedRef","style","onPress","previous","current","next","useKeys","ROOT_MEASUREMENT_SIGNAL","useContext","ROOT_SIGNAL","useSharedValue","IS_ROOT","emitUpdate","useCallback","value","maybeMeasureAndStore","skipMarkingActive","measured","measure","console","warn","key","route","isBoundsEqual","Bounds","setRouteActive","runOnJS","setBounds","flattenStyle","hasMeasuredOnLayout","handleInitialLayout","prevKey","prevBounds","getBounds","captureActiveOnPress","useStableCallback","runOnUI","MeasurementSyncProvider","useMemo","Fragment","children","jsx","Provider","updateSignal","useAnimatedReaction","undefined","exports"],"sourceRoot":"../../../../src","sources":["hooks/bounds/use-bound-registry.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,15 +18,12 @@ export const ScreenLifecycleController = ({
|
|
|
18
18
|
const handleBeforeRemove = useStableCallback(e => {
|
|
19
19
|
const key = current.navigation.getParent()?.getState().key;
|
|
20
20
|
const requestedDismissOnNavigator = NavigatorDismissState.get(key);
|
|
21
|
+
const isEnabled = current.options.enableTransitions;
|
|
22
|
+
const isRequestedDismissOnNavigator = requestedDismissOnNavigator;
|
|
23
|
+
const isFirstScreen = current.navigation.getState().index === 0;
|
|
21
24
|
|
|
22
|
-
//
|
|
23
|
-
if (
|
|
24
|
-
resetStoresForScreen(current);
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Don't run e.preventDefault when this is the first screen of the stack
|
|
29
|
-
if (current.navigation.getState().index === 0) {
|
|
25
|
+
// If transitions are disabled, or the dismissal was on the local root, or this is the first screen of the stack, reset the stores
|
|
26
|
+
if (!isEnabled || isRequestedDismissOnNavigator || isFirstScreen) {
|
|
30
27
|
resetStoresForScreen(current);
|
|
31
28
|
return;
|
|
32
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useLayoutEffect","useParentGestureRegistry","useStableCallback","useKeys","Animations","NavigatorDismissState","resetStoresForScreen","startScreenTransition","ScreenLifecycleController","children","current","animations","getAll","route","key","handleBeforeRemove","e","navigation","getParent","getState","requestedDismissOnNavigator","get","index","preventDefault","onAnimationFinish","finished","dispatch","data","action","requestAnimationFrame","target","spec","
|
|
1
|
+
{"version":3,"names":["useEffect","useLayoutEffect","useParentGestureRegistry","useStableCallback","useKeys","Animations","NavigatorDismissState","resetStoresForScreen","startScreenTransition","ScreenLifecycleController","children","current","animations","getAll","route","key","handleBeforeRemove","e","navigation","getParent","getState","requestedDismissOnNavigator","get","isEnabled","options","enableTransitions","isRequestedDismissOnNavigator","isFirstScreen","index","preventDefault","onAnimationFinish","finished","dispatch","data","action","requestAnimationFrame","target","spec","transitionSpec","handleInitialize","unsubscribe","addListener"],"sourceRoot":"../../../../src","sources":["components/controllers/screen-lifecycle.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,eAAe,QAAQ,OAAO;AAClD,SAASC,wBAAwB,QAAQ,kDAAkD;AAC3F,OAAOC,iBAAiB,MAAM,iCAAiC;AAC/D,SAASC,OAAO,QAAQ,sBAAsB;AAC9C,SAASC,UAAU,QAAQ,yBAAyB;AACpD,SAASC,qBAAqB,QAAQ,sCAAsC;AAC5E,SAASC,oBAAoB,QAAQ,4CAA4C;AACjF,SAASC,qBAAqB,QAAQ,+CAA+C;AAMrF,OAAO,MAAMC,yBAAyB,GAAGA,CAAC;EACzCC;AACqB,CAAC,KAAK;EAC3B,MAAM;IAAEC;EAAQ,CAAC,GAAGP,OAAO,CAAC,CAAC;EAE7B,MAAMQ,UAAU,GAAGP,UAAU,CAACQ,MAAM,CAACF,OAAO,CAACG,KAAK,CAACC,GAAG,CAAC;EAEvD,MAAMC,kBAAkB,GAAGb,iBAAiB,CAAEc,CAAM,IAAK;IACxD,MAAMF,GAAG,GAAGJ,OAAO,CAACO,UAAU,CAACC,SAAS,CAAC,CAAC,EAAEC,QAAQ,CAAC,CAAC,CAACL,GAAG;IAC1D,MAAMM,2BAA2B,GAAGf,qBAAqB,CAACgB,GAAG,CAACP,GAAG,CAAC;IAElE,MAAMQ,SAAS,GAAGZ,OAAO,CAACa,OAAO,CAACC,iBAAiB;IACnD,MAAMC,6BAA6B,GAAGL,2BAA2B;IACjE,MAAMM,aAAa,GAAGhB,OAAO,CAACO,UAAU,CAACE,QAAQ,CAAC,CAAC,CAACQ,KAAK,KAAK,CAAC;;IAE/D;IACA,IAAI,CAACL,SAAS,IAAIG,6BAA6B,IAAIC,aAAa,EAAE;MACjEpB,oBAAoB,CAACI,OAAO,CAAC;MAC7B;IACD;IAEAM,CAAC,CAACY,cAAc,CAAC,CAAC;IAClB,MAAMC,iBAAiB,GAAIC,QAAiB,IAAK;MAChD,IAAIA,QAAQ,EAAE;QACbpB,OAAO,CAACO,UAAU,CAACc,QAAQ,CAACf,CAAC,CAACgB,IAAI,CAACC,MAAM,CAAC;;QAE1C;QACAC,qBAAqB,CAAC,MAAM;UAC3B5B,oBAAoB,CAACI,OAAO,CAAC;QAC9B,CAAC,CAAC;MACH;IACD,CAAC;IAEDH,qBAAqB,CAAC;MACrB4B,MAAM,EAAE,OAAO;MACfC,IAAI,EAAE1B,OAAO,CAACa,OAAO,CAACc,cAAc;MACpCR,iBAAiB;MACjBlB;IACD,CAAC,CAAC;EACH,CAAC,CAAC;EAEF,MAAM2B,gBAAgB,GAAGpC,iBAAiB,CAAC,MAAM;IAChDK,qBAAqB,CAAC;MACrB4B,MAAM,EAAE,MAAM;MACdC,IAAI,EAAE1B,OAAO,CAACa,OAAO,CAACc,cAAc;MACpC1B;IACD,CAAC,CAAC;EACH,CAAC,CAAC;EAEFZ,SAAS,CAAC,MAAM;IACf,MAAMwC,WAAW,GAAG7B,OAAO,CAACO,UAAU,CAACuB,WAAW,CACjD,cAAc,EACdzB,kBACD,CAAC;IAED,OAAOwB,WAAW;EACnB,CAAC,EAAE,CAAC7B,OAAO,CAACO,UAAU,EAAEF,kBAAkB,CAAC,CAAC;EAE5Cf,eAAe,CAACsC,gBAAgB,EAAE,EAAE,CAAC;;EAErC;EACArC,wBAAwB,CAAC,CAAC;EAE1B,OAAOQ,QAAQ;AAChB,CAAC","ignoreList":[]}
|
|
@@ -55,7 +55,7 @@ export function createTransitionAwareComponent(Wrapped, options = {}) {
|
|
|
55
55
|
style
|
|
56
56
|
});
|
|
57
57
|
const {
|
|
58
|
-
|
|
58
|
+
handleInitialLayout,
|
|
59
59
|
captureActiveOnPress,
|
|
60
60
|
MeasurementSyncProvider
|
|
61
61
|
} = useBoundsRegistry({
|
|
@@ -70,7 +70,7 @@ export function createTransitionAwareComponent(Wrapped, options = {}) {
|
|
|
70
70
|
ref: animatedRef,
|
|
71
71
|
style: [style, associatedStyles],
|
|
72
72
|
onPress: captureActiveOnPress,
|
|
73
|
-
onLayout: runOnUI(
|
|
73
|
+
onLayout: runOnUI(handleInitialLayout),
|
|
74
74
|
collapsable: !sharedBoundTag,
|
|
75
75
|
children: children
|
|
76
76
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","memo","GestureDetector","Animated","runOnUI","useAnimatedRef","useAssociatedStyles","useBoundsRegistry","useScrollRegistry","useGestureContext","jsx","_jsx","createTransitionAwareComponent","Wrapped","options","isScrollable","AnimatedComponent","createAnimatedComponent","ScrollableInner","props","ref","nativeGesture","scrollHandler","onContentSizeChange","onLayout","onScroll","gesture","children","scrollEventThrottle","Inner","_","style","sharedBoundTag","styleId","onPress","rest","animatedRef","associatedStyles","id","
|
|
1
|
+
{"version":3,"names":["forwardRef","memo","GestureDetector","Animated","runOnUI","useAnimatedRef","useAssociatedStyles","useBoundsRegistry","useScrollRegistry","useGestureContext","jsx","_jsx","createTransitionAwareComponent","Wrapped","options","isScrollable","AnimatedComponent","createAnimatedComponent","ScrollableInner","props","ref","nativeGesture","scrollHandler","onContentSizeChange","onLayout","onScroll","gesture","children","scrollEventThrottle","Inner","_","style","sharedBoundTag","styleId","onPress","rest","animatedRef","associatedStyles","id","handleInitialLayout","captureActiveOnPress","MeasurementSyncProvider","collapsable"],"sourceRoot":"../../../src","sources":["components/create-transition-aware-component.tsx"],"mappings":";;AACA,SAA6BA,UAAU,EAAEC,IAAI,QAAQ,OAAO;AAE5D,SAASC,eAAe,QAAQ,8BAA8B;AAC9D,OAAOC,QAAQ,IAAIC,OAAO,EAAEC,cAAc,QAAQ,yBAAyB;AAC3E,SAASC,mBAAmB,QAAQ,yCAAyC;AAC7E,SAASC,iBAAiB,QAAQ,oCAAoC;AACtE,SAASC,iBAAiB,QAAQ,uCAAuC;AACzE,SAASC,iBAAiB,QAAQ,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQ1D,OAAO,SAASC,8BAA8BA,CAC7CC,OAAyB,EACzBC,OAA8C,GAAG,CAAC,CAAC,EAClD;EACD,MAAM;IAAEC,YAAY,GAAG;EAAM,CAAC,GAAGD,OAAO;EAExC,MAAME,iBAAiB,GAAGb,QAAQ,CAACc,uBAAuB,CAACJ,OAAO,CAAC;EAEnE,MAAMK,eAAe,gBAAGlB,UAAU,CAGhC,CAACmB,KAAU,EAAEC,GAAG,KAAK;IACtB,MAAM;MAAEC;IAAc,CAAC,GAAGZ,iBAAiB,CAAC,CAAC;IAC7C,MAAM;MAAEa,aAAa;MAAEC,mBAAmB;MAAEC;IAAS,CAAC,GAAGhB,iBAAiB,CAAC;MAC1EiB,QAAQ,EAAEN,KAAK,CAACM,QAAQ;MACxBF,mBAAmB,EAAEJ,KAAK,CAACI,mBAAmB;MAC9CC,QAAQ,EAAEL,KAAK,CAACK;IACjB,CAAC,CAAC;IAEF,oBACCb,IAAA,CAACT,eAAe;MAACwB,OAAO,EAAEL,aAAc;MAAAM,QAAA,eACvChB,IAAA,CAACK,iBAAiB;QAAA,GACZG,KAAK;QACVC,GAAG,EAAEA,GAAI;QACTK,QAAQ,EAAEH,aAAc;QACxBC,mBAAmB,EAAEA,mBAAoB;QACzCC,QAAQ,EAAEA,QAAS;QACnBI,mBAAmB,EAAET,KAAK,CAACS,mBAAmB,IAAI;MAAG,CACrD;IAAC,CACc,CAAC;EAEpB,CAAC,CAAC;EAEF,MAAMC,KAAK,gBAAG7B,UAAU,CAGtB,CAACmB,KAAK,EAAEW,CAAC,KAAK;IACf,MAAM;MAAEH,QAAQ;MAAEI,KAAK;MAAEC,cAAc;MAAEC,OAAO;MAAEC,OAAO;MAAE,GAAGC;IAAK,CAAC,GACnEhB,KAAY;IAEb,MAAMiB,WAAW,GAAG/B,cAAc,CAAO,CAAC;IAE1C,MAAM;MAAEgC;IAAiB,CAAC,GAAG/B,mBAAmB,CAAC;MAChDgC,EAAE,EAAEN,cAAc,IAAIC,OAAO;MAC7BF;IACD,CAAC,CAAC;IAEF,MAAM;MACLQ,mBAAmB;MACnBC,oBAAoB;MACpBC;IACD,CAAC,GAAGlC,iBAAiB,CAAC;MACrByB,cAAc;MACdI,WAAW;MACXL,KAAK;MACLG;IACD,CAAC,CAAC;IAEF,oBACCvB,IAAA,CAAC8B,uBAAuB;MAAAd,QAAA,eACvBhB,IAAA,CAACK,iBAAiB;QAAA,GACZmB,IAAI;QACTf,GAAG,EAAEgB,WAAY;QACjBL,KAAK,EAAE,CAACA,KAAK,EAAEM,gBAAgB,CAAE;QACjCH,OAAO,EAAEM,oBAAqB;QAC9BhB,QAAQ,EAAEpB,OAAO,CAACmC,mBAAmB,CAAE;QACvCG,WAAW,EAAE,CAACV,cAAe;QAAAL,QAAA,EAE5BA;MAAQ,CACS;IAAC,CACI,CAAC;EAE5B,CAAC,CAAC;EAEF,IAAIZ,YAAY,EAAE;IACjB,oBAAOd,IAAI,CAACiB,eAAe,CAAC;EAM7B;EAEA,oBAAOjB,IAAI,CAAC4B,KAAK,CAAC;AAMnB","ignoreList":[]}
|
|
@@ -17,12 +17,12 @@ export const useBoundsRegistry = ({
|
|
|
17
17
|
}) => {
|
|
18
18
|
const {
|
|
19
19
|
previous,
|
|
20
|
-
current
|
|
20
|
+
current,
|
|
21
|
+
next
|
|
21
22
|
} = useKeys();
|
|
22
23
|
const ROOT_MEASUREMENT_SIGNAL = useContext(MeasurementUpdateContext);
|
|
23
24
|
const ROOT_SIGNAL = useSharedValue(0);
|
|
24
25
|
const IS_ROOT = !ROOT_MEASUREMENT_SIGNAL;
|
|
25
|
-
const hasMeasured = useSharedValue(false);
|
|
26
26
|
const emitUpdate = useCallback(() => {
|
|
27
27
|
"worklet";
|
|
28
28
|
|
|
@@ -34,7 +34,8 @@ export const useBoundsRegistry = ({
|
|
|
34
34
|
}) => {
|
|
35
35
|
"worklet";
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
// Currently, there's no necessity to measure when the current route is blurred ( could potentially change in the future )
|
|
38
|
+
if (!sharedBoundTag || next) return;
|
|
38
39
|
const measured = measure(animatedRef);
|
|
39
40
|
if (!measured) {
|
|
40
41
|
console.warn(`[react-native-screen-transitions] measure() returned null for sharedBoundTag="${sharedBoundTag}"`);
|
|
@@ -59,12 +60,13 @@ export const useBoundsRegistry = ({
|
|
|
59
60
|
Bounds.setRouteActive(key, sharedBoundTag);
|
|
60
61
|
}
|
|
61
62
|
if (onPress) runOnJS(onPress)();
|
|
62
|
-
}, [sharedBoundTag, animatedRef, current.route.key, style, emitUpdate]);
|
|
63
|
-
const
|
|
63
|
+
}, [sharedBoundTag, animatedRef, current.route.key, style, emitUpdate, next]);
|
|
64
|
+
const hasMeasuredOnLayout = useSharedValue(false);
|
|
65
|
+
const handleInitialLayout = useCallback(() => {
|
|
64
66
|
"worklet";
|
|
65
67
|
|
|
66
68
|
const prevKey = previous?.route.key;
|
|
67
|
-
if (!sharedBoundTag ||
|
|
69
|
+
if (!sharedBoundTag || hasMeasuredOnLayout.value || !prevKey) {
|
|
68
70
|
return;
|
|
69
71
|
}
|
|
70
72
|
const prevBounds = Bounds.getBounds(prevKey)?.[sharedBoundTag];
|
|
@@ -74,9 +76,9 @@ export const useBoundsRegistry = ({
|
|
|
74
76
|
skipMarkingActive: true
|
|
75
77
|
});
|
|
76
78
|
// Should not measure again while in transition
|
|
77
|
-
|
|
79
|
+
hasMeasuredOnLayout.value = true;
|
|
78
80
|
}
|
|
79
|
-
}, [maybeMeasureAndStore, sharedBoundTag, previous?.route.key,
|
|
81
|
+
}, [maybeMeasureAndStore, sharedBoundTag, previous?.route.key, hasMeasuredOnLayout]);
|
|
80
82
|
const captureActiveOnPress = useStableCallback(() => {
|
|
81
83
|
if (!sharedBoundTag) {
|
|
82
84
|
if (onPress) onPress();
|
|
@@ -113,7 +115,7 @@ export const useBoundsRegistry = ({
|
|
|
113
115
|
});
|
|
114
116
|
});
|
|
115
117
|
return {
|
|
116
|
-
|
|
118
|
+
handleInitialLayout,
|
|
117
119
|
captureActiveOnPress,
|
|
118
120
|
MeasurementSyncProvider
|
|
119
121
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","Fragment","useCallback","useContext","useMemo","measure","runOnJS","runOnUI","useAnimatedReaction","useSharedValue","useKeys","Bounds","flattenStyle","isBoundsEqual","useStableCallback","jsx","_jsx","MeasurementUpdateContext","useBoundsRegistry","sharedBoundTag","animatedRef","style","onPress","previous","current","ROOT_MEASUREMENT_SIGNAL","ROOT_SIGNAL","IS_ROOT","
|
|
1
|
+
{"version":3,"names":["createContext","Fragment","useCallback","useContext","useMemo","measure","runOnJS","runOnUI","useAnimatedReaction","useSharedValue","useKeys","Bounds","flattenStyle","isBoundsEqual","useStableCallback","jsx","_jsx","MeasurementUpdateContext","useBoundsRegistry","sharedBoundTag","animatedRef","style","onPress","previous","current","next","ROOT_MEASUREMENT_SIGNAL","ROOT_SIGNAL","IS_ROOT","emitUpdate","value","maybeMeasureAndStore","skipMarkingActive","measured","console","warn","key","route","setRouteActive","setBounds","hasMeasuredOnLayout","handleInitialLayout","prevKey","prevBounds","getBounds","captureActiveOnPress","MeasurementSyncProvider","children","Provider","updateSignal","undefined"],"sourceRoot":"../../../../src","sources":["hooks/bounds/use-bound-registry.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-lifecycle.d.ts","sourceRoot":"","sources":["../../../../src/components/controllers/screen-lifecycle.tsx"],"names":[],"mappings":"AASA,UAAU,oBAAoB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,eAAO,MAAM,yBAAyB,GAAI,eAEvC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"screen-lifecycle.d.ts","sourceRoot":"","sources":["../../../../src/components/controllers/screen-lifecycle.tsx"],"names":[],"mappings":"AASA,UAAU,oBAAoB;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,eAAO,MAAM,yBAAyB,GAAI,eAEvC,oBAAoB,8BA8DtB,CAAC"}
|
|
@@ -7,7 +7,7 @@ interface BoundMeasurerHookProps {
|
|
|
7
7
|
onPress?: ((...args: unknown[]) => void) | undefined;
|
|
8
8
|
}
|
|
9
9
|
export declare const useBoundsRegistry: ({ sharedBoundTag, animatedRef, style, onPress, }: BoundMeasurerHookProps) => {
|
|
10
|
-
|
|
10
|
+
handleInitialLayout: () => void;
|
|
11
11
|
captureActiveOnPress: () => void;
|
|
12
12
|
MeasurementSyncProvider: import("react").ExoticComponent<import("react").FragmentProps> | (({ children }: {
|
|
13
13
|
children: React.ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-bound-registry.d.ts","sourceRoot":"","sources":["../../../../src/hooks/bounds/use-bound-registry.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACN,KAAK,WAAW,EAIhB,KAAK,UAAU,EAGf,MAAM,yBAAyB,CAAC;AAQjC,UAAU,sBAAsB;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"use-bound-registry.d.ts","sourceRoot":"","sources":["../../../../src/hooks/bounds/use-bound-registry.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACN,KAAK,WAAW,EAIhB,KAAK,UAAU,EAGf,MAAM,yBAAyB,CAAC;AAQjC,UAAU,sBAAsB;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACrD;AAcD,eAAO,MAAM,iBAAiB,GAAI,kDAK/B,sBAAsB;;;8GAyFD;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;CAyBpD,CAAC"}
|
package/package.json
CHANGED
|
@@ -22,14 +22,12 @@ export const ScreenLifecycleController = ({
|
|
|
22
22
|
const key = current.navigation.getParent()?.getState().key;
|
|
23
23
|
const requestedDismissOnNavigator = NavigatorDismissState.get(key);
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
25
|
+
const isEnabled = current.options.enableTransitions;
|
|
26
|
+
const isRequestedDismissOnNavigator = requestedDismissOnNavigator;
|
|
27
|
+
const isFirstScreen = current.navigation.getState().index === 0;
|
|
30
28
|
|
|
31
|
-
//
|
|
32
|
-
if (
|
|
29
|
+
// If transitions are disabled, or the dismissal was on the local root, or this is the first screen of the stack, reset the stores
|
|
30
|
+
if (!isEnabled || isRequestedDismissOnNavigator || isFirstScreen) {
|
|
33
31
|
resetStoresForScreen(current);
|
|
34
32
|
return;
|
|
35
33
|
}
|
|
@@ -62,7 +62,7 @@ export function createTransitionAwareComponent<P extends object>(
|
|
|
62
62
|
});
|
|
63
63
|
|
|
64
64
|
const {
|
|
65
|
-
|
|
65
|
+
handleInitialLayout,
|
|
66
66
|
captureActiveOnPress,
|
|
67
67
|
MeasurementSyncProvider,
|
|
68
68
|
} = useBoundsRegistry({
|
|
@@ -79,7 +79,7 @@ export function createTransitionAwareComponent<P extends object>(
|
|
|
79
79
|
ref={animatedRef}
|
|
80
80
|
style={[style, associatedStyles]}
|
|
81
81
|
onPress={captureActiveOnPress}
|
|
82
|
-
onLayout={runOnUI(
|
|
82
|
+
onLayout={runOnUI(handleInitialLayout)}
|
|
83
83
|
collapsable={!sharedBoundTag}
|
|
84
84
|
>
|
|
85
85
|
{children}
|
|
@@ -25,11 +25,15 @@ import useStableCallback from "../use-stable-callback";
|
|
|
25
25
|
interface BoundMeasurerHookProps {
|
|
26
26
|
sharedBoundTag?: string;
|
|
27
27
|
animatedRef: AnimatedRef<View>;
|
|
28
|
-
|
|
29
28
|
style: StyleProps;
|
|
30
29
|
onPress?: ((...args: unknown[]) => void) | undefined;
|
|
31
30
|
}
|
|
32
31
|
|
|
32
|
+
interface MaybeMeasureAndStoreParams {
|
|
33
|
+
onPress?: ((...args: unknown[]) => void) | undefined;
|
|
34
|
+
skipMarkingActive?: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
33
37
|
interface MeasurementUpdateContextType {
|
|
34
38
|
updateSignal: SharedValue<number>;
|
|
35
39
|
}
|
|
@@ -43,12 +47,11 @@ export const useBoundsRegistry = ({
|
|
|
43
47
|
style,
|
|
44
48
|
onPress,
|
|
45
49
|
}: BoundMeasurerHookProps) => {
|
|
46
|
-
const { previous, current } = useKeys();
|
|
50
|
+
const { previous, current, next } = useKeys();
|
|
47
51
|
|
|
48
52
|
const ROOT_MEASUREMENT_SIGNAL = useContext(MeasurementUpdateContext);
|
|
49
53
|
const ROOT_SIGNAL = useSharedValue(0);
|
|
50
54
|
const IS_ROOT = !ROOT_MEASUREMENT_SIGNAL;
|
|
51
|
-
const hasMeasured = useSharedValue(false);
|
|
52
55
|
|
|
53
56
|
const emitUpdate = useCallback(() => {
|
|
54
57
|
"worklet";
|
|
@@ -56,15 +59,10 @@ export const useBoundsRegistry = ({
|
|
|
56
59
|
}, [IS_ROOT, ROOT_SIGNAL]);
|
|
57
60
|
|
|
58
61
|
const maybeMeasureAndStore = useCallback(
|
|
59
|
-
({
|
|
60
|
-
onPress,
|
|
61
|
-
skipMarkingActive,
|
|
62
|
-
}: {
|
|
63
|
-
onPress?: () => void;
|
|
64
|
-
skipMarkingActive?: boolean;
|
|
65
|
-
}) => {
|
|
62
|
+
({ onPress, skipMarkingActive }: MaybeMeasureAndStoreParams) => {
|
|
66
63
|
"worklet";
|
|
67
|
-
|
|
64
|
+
// Currently, there's no necessity to measure when the current route is blurred ( could potentially change in the future )
|
|
65
|
+
if (!sharedBoundTag || next) return;
|
|
68
66
|
|
|
69
67
|
const measured = measure(animatedRef);
|
|
70
68
|
|
|
@@ -95,14 +93,15 @@ export const useBoundsRegistry = ({
|
|
|
95
93
|
|
|
96
94
|
if (onPress) runOnJS(onPress)();
|
|
97
95
|
},
|
|
98
|
-
[sharedBoundTag, animatedRef, current.route.key, style, emitUpdate],
|
|
96
|
+
[sharedBoundTag, animatedRef, current.route.key, style, emitUpdate, next],
|
|
99
97
|
);
|
|
100
98
|
|
|
101
|
-
const
|
|
99
|
+
const hasMeasuredOnLayout = useSharedValue(false);
|
|
100
|
+
const handleInitialLayout = useCallback(() => {
|
|
102
101
|
"worklet";
|
|
103
102
|
|
|
104
103
|
const prevKey = previous?.route.key;
|
|
105
|
-
if (!sharedBoundTag ||
|
|
104
|
+
if (!sharedBoundTag || hasMeasuredOnLayout.value || !prevKey) {
|
|
106
105
|
return;
|
|
107
106
|
}
|
|
108
107
|
|
|
@@ -112,9 +111,14 @@ export const useBoundsRegistry = ({
|
|
|
112
111
|
// Should skip mark active if we are in a transition
|
|
113
112
|
maybeMeasureAndStore({ skipMarkingActive: true });
|
|
114
113
|
// Should not measure again while in transition
|
|
115
|
-
|
|
114
|
+
hasMeasuredOnLayout.value = true;
|
|
116
115
|
}
|
|
117
|
-
}, [
|
|
116
|
+
}, [
|
|
117
|
+
maybeMeasureAndStore,
|
|
118
|
+
sharedBoundTag,
|
|
119
|
+
previous?.route.key,
|
|
120
|
+
hasMeasuredOnLayout,
|
|
121
|
+
]);
|
|
118
122
|
|
|
119
123
|
const captureActiveOnPress = useStableCallback(() => {
|
|
120
124
|
if (!sharedBoundTag) {
|
|
@@ -152,7 +156,7 @@ export const useBoundsRegistry = ({
|
|
|
152
156
|
);
|
|
153
157
|
|
|
154
158
|
return {
|
|
155
|
-
|
|
159
|
+
handleInitialLayout,
|
|
156
160
|
captureActiveOnPress,
|
|
157
161
|
MeasurementSyncProvider,
|
|
158
162
|
};
|