react-native-screen-transitions 3.0.0-beta.1 → 3.0.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/hooks/bounds/use-bound-registry.js +21 -0
- package/lib/commonjs/shared/hooks/bounds/use-bound-registry.js.map +1 -1
- package/lib/module/shared/hooks/bounds/use-bound-registry.js +22 -1
- package/lib/module/shared/hooks/bounds/use-bound-registry.js.map +1 -1
- package/lib/typescript/shared/hooks/bounds/use-bound-registry.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/shared/hooks/bounds/use-bound-registry.tsx +32 -1
|
@@ -110,6 +110,27 @@ const useBoundsRegistry = ({
|
|
|
110
110
|
children: children
|
|
111
111
|
});
|
|
112
112
|
}, [IS_ROOT, sharedBoundTag, ROOT_SIGNAL]);
|
|
113
|
+
const prevNextRef = (0, _react.useRef)(next);
|
|
114
|
+
/**
|
|
115
|
+
* Measure non-pressable elements when the screen goes from focused to blurred
|
|
116
|
+
* (or when a new `next` descriptor appears) so we capture final bounds
|
|
117
|
+
* right before the transition starts.
|
|
118
|
+
*/
|
|
119
|
+
(0, _react.useLayoutEffect)(() => {
|
|
120
|
+
if (!sharedBoundTag || onPress) return;
|
|
121
|
+
const hadNext = !!prevNextRef.current;
|
|
122
|
+
const hasNext = !!next;
|
|
123
|
+
if (!hadNext && hasNext) {
|
|
124
|
+
(0, _reactNativeReanimated.runOnUI)(maybeMeasureAndStore)({});
|
|
125
|
+
}
|
|
126
|
+
prevNextRef.current = next;
|
|
127
|
+
}, [next, sharedBoundTag, onPress, maybeMeasureAndStore]);
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Signal child shared elements (nested under this provider) to refresh their
|
|
131
|
+
* measurements when the root updates, while preventing them from marking
|
|
132
|
+
* themselves active during that sync.
|
|
133
|
+
*/
|
|
113
134
|
(0, _reactNativeReanimated.useAnimatedReaction)(() => ROOT_MEASUREMENT_SIGNAL?.updateSignal.value, current => {
|
|
114
135
|
"worklet";
|
|
115
136
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNativeReanimated","_keys","_boundStore","_isBoundsEqual","_styles","_useStableCallback","_interopRequireDefault","_useStableCallbackValue","_jsxRuntime","e","__esModule","default","MeasurementUpdateContext","createContext","useBoundsRegistry","sharedBoundTag","animatedRef","style","onPress","previous","current","next","useKeys","preparedStyles","useMemo","prepareStyleForBounds","ROOT_MEASUREMENT_SIGNAL","useContext","ROOT_SIGNAL","useSharedValue","IS_ROOT","emitUpdate","useStableCallbackValue","value","maybeMeasureAndStore","skipMarkingActive","measured","measure","console","warn","key","route","isBoundsEqual","BoundStore","setRouteActive","runOnJS","setBounds","hasMeasuredOnLayout","handleInitialLayout","prevKey","prevBounds","getBounds","captureActiveOnPress","useStableCallback","runOnUI","MeasurementSyncProvider","Fragment","children","jsx","Provider","updateSignal","useAnimatedReaction","undefined","exports"],"sourceRoot":"../../../../../src","sources":["shared/hooks/bounds/use-bound-registry.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeReanimated","_keys","_boundStore","_isBoundsEqual","_styles","_useStableCallback","_interopRequireDefault","_useStableCallbackValue","_jsxRuntime","e","__esModule","default","MeasurementUpdateContext","createContext","useBoundsRegistry","sharedBoundTag","animatedRef","style","onPress","previous","current","next","useKeys","preparedStyles","useMemo","prepareStyleForBounds","ROOT_MEASUREMENT_SIGNAL","useContext","ROOT_SIGNAL","useSharedValue","IS_ROOT","emitUpdate","useStableCallbackValue","value","maybeMeasureAndStore","skipMarkingActive","measured","measure","console","warn","key","route","isBoundsEqual","BoundStore","setRouteActive","runOnJS","setBounds","hasMeasuredOnLayout","handleInitialLayout","prevKey","prevBounds","getBounds","captureActiveOnPress","useStableCallback","runOnUI","MeasurementSyncProvider","Fragment","children","jsx","Provider","updateSignal","prevNextRef","useRef","useLayoutEffect","hadNext","hasNext","useAnimatedReaction","undefined","exports"],"sourceRoot":"../../../../../src","sources":["shared/hooks/bounds/use-bound-registry.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { createContext, Fragment, useContext, useMemo } from "react";
|
|
3
|
+
import { createContext, Fragment, useContext, useLayoutEffect, useMemo, useRef } from "react";
|
|
4
4
|
import { measure, runOnJS, runOnUI, useAnimatedReaction, useSharedValue } from "react-native-reanimated";
|
|
5
5
|
import { useKeys } from "../../providers/keys";
|
|
6
6
|
import { BoundStore } from "../../stores/bound-store";
|
|
@@ -105,6 +105,27 @@ export const useBoundsRegistry = ({
|
|
|
105
105
|
children: children
|
|
106
106
|
});
|
|
107
107
|
}, [IS_ROOT, sharedBoundTag, ROOT_SIGNAL]);
|
|
108
|
+
const prevNextRef = useRef(next);
|
|
109
|
+
/**
|
|
110
|
+
* Measure non-pressable elements when the screen goes from focused to blurred
|
|
111
|
+
* (or when a new `next` descriptor appears) so we capture final bounds
|
|
112
|
+
* right before the transition starts.
|
|
113
|
+
*/
|
|
114
|
+
useLayoutEffect(() => {
|
|
115
|
+
if (!sharedBoundTag || onPress) return;
|
|
116
|
+
const hadNext = !!prevNextRef.current;
|
|
117
|
+
const hasNext = !!next;
|
|
118
|
+
if (!hadNext && hasNext) {
|
|
119
|
+
runOnUI(maybeMeasureAndStore)({});
|
|
120
|
+
}
|
|
121
|
+
prevNextRef.current = next;
|
|
122
|
+
}, [next, sharedBoundTag, onPress, maybeMeasureAndStore]);
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Signal child shared elements (nested under this provider) to refresh their
|
|
126
|
+
* measurements when the root updates, while preventing them from marking
|
|
127
|
+
* themselves active during that sync.
|
|
128
|
+
*/
|
|
108
129
|
useAnimatedReaction(() => ROOT_MEASUREMENT_SIGNAL?.updateSignal.value, current => {
|
|
109
130
|
"worklet";
|
|
110
131
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","Fragment","useContext","useMemo","measure","runOnJS","runOnUI","useAnimatedReaction","useSharedValue","useKeys","BoundStore","isBoundsEqual","prepareStyleForBounds","useStableCallback","useStableCallbackValue","jsx","_jsx","MeasurementUpdateContext","useBoundsRegistry","sharedBoundTag","animatedRef","style","onPress","previous","current","next","preparedStyles","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":["shared/hooks/bounds/use-bound-registry.tsx"],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"names":["createContext","Fragment","useContext","useLayoutEffect","useMemo","useRef","measure","runOnJS","runOnUI","useAnimatedReaction","useSharedValue","useKeys","BoundStore","isBoundsEqual","prepareStyleForBounds","useStableCallback","useStableCallbackValue","jsx","_jsx","MeasurementUpdateContext","useBoundsRegistry","sharedBoundTag","animatedRef","style","onPress","previous","current","next","preparedStyles","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","prevNextRef","hadNext","hasNext","undefined"],"sourceRoot":"../../../../../src","sources":["shared/hooks/bounds/use-bound-registry.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-bound-registry.d.ts","sourceRoot":"","sources":["../../../../../src/shared/hooks/bounds/use-bound-registry.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-bound-registry.d.ts","sourceRoot":"","sources":["../../../../../src/shared/hooks/bounds/use-bound-registry.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACN,KAAK,WAAW,EAIhB,KAAK,UAAU,EAGf,MAAM,yBAAyB,CAAC;AASjC,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;;;8GAoFD;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;CAiDpD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createContext,
|
|
3
|
+
Fragment,
|
|
4
|
+
useContext,
|
|
5
|
+
useLayoutEffect,
|
|
6
|
+
useMemo,
|
|
7
|
+
useRef,
|
|
8
|
+
} from "react";
|
|
2
9
|
import type { View } from "react-native";
|
|
3
10
|
import {
|
|
4
11
|
type AnimatedRef,
|
|
@@ -132,6 +139,30 @@ export const useBoundsRegistry = ({
|
|
|
132
139
|
);
|
|
133
140
|
}, [IS_ROOT, sharedBoundTag, ROOT_SIGNAL]);
|
|
134
141
|
|
|
142
|
+
const prevNextRef = useRef(next);
|
|
143
|
+
/**
|
|
144
|
+
* Measure non-pressable elements when the screen goes from focused to blurred
|
|
145
|
+
* (or when a new `next` descriptor appears) so we capture final bounds
|
|
146
|
+
* right before the transition starts.
|
|
147
|
+
*/
|
|
148
|
+
useLayoutEffect(() => {
|
|
149
|
+
if (!sharedBoundTag || onPress) return;
|
|
150
|
+
|
|
151
|
+
const hadNext = !!prevNextRef.current;
|
|
152
|
+
const hasNext = !!next;
|
|
153
|
+
|
|
154
|
+
if (!hadNext && hasNext) {
|
|
155
|
+
runOnUI(maybeMeasureAndStore)({});
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
prevNextRef.current = next;
|
|
159
|
+
}, [next, sharedBoundTag, onPress, maybeMeasureAndStore]);
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Signal child shared elements (nested under this provider) to refresh their
|
|
163
|
+
* measurements when the root updates, while preventing them from marking
|
|
164
|
+
* themselves active during that sync.
|
|
165
|
+
*/
|
|
135
166
|
useAnimatedReaction(
|
|
136
167
|
() => ROOT_MEASUREMENT_SIGNAL?.updateSignal.value,
|
|
137
168
|
(current) => {
|