Fix bsky logo appearing during screen back transition
This commit is contained in:
@@ -31,3 +31,112 @@ index 76bb694854b29d7f779f38244cd48113b429ea1f..fd402ac938862e8d39c5467c1b5c86c4
|
||||
startTransitionRecursive(child)
|
||||
}
|
||||
}
|
||||
diff --git a/ios/RNSScreen.mm b/ios/RNSScreen.mm
|
||||
index 9b66012dc8db1e3af0cb5457f8dad86e7f2fe5e3..a7f1f613c291de8421f6f117c06d35ba34a2d908 100644
|
||||
--- a/ios/RNSScreen.mm
|
||||
+++ b/ios/RNSScreen.mm
|
||||
@@ -1,4 +1,5 @@
|
||||
#import <UIKit/UIKit.h>
|
||||
+#import <objc/runtime.h>
|
||||
|
||||
#import "RNSModalScreen.h"
|
||||
#import "RNSScreen.h"
|
||||
@@ -1180,9 +1181,82 @@ - (BOOL)hasHeaderConfig
|
||||
return _config != nil;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * PATCH (secure-snapshot): content protected by an isSecureTextEntry canvas
|
||||
+ * (per-view capture protection, e.g. expo-privacy-sensitive) is stripped from
|
||||
+ * the render-server snapshot RNSScreen takes for JS-driven pops, so the user
|
||||
+ * sees the hidden fallback (the GrowthHack butterfly) during the transition.
|
||||
+ * The capture-exclusion flag is only consulted for layers INSIDE a captured
|
||||
+ * subtree, so a snapshot rooted BELOW the flagged canvas still includes the
|
||||
+ * content.
|
||||
+ *
|
||||
+ * By the time setViewToSnapshot runs, the screen's children are already
|
||||
+ * unmounted (only the pixels survive on the render server), so the secure
|
||||
+ * subtrees must be captured HERE - before the transaction's mutations apply,
|
||||
+ * while the subtree is intact. The overlays are stashed on the screen view
|
||||
+ * and composited over the main snapshot in setViewToSnapshot, each re-wrapped
|
||||
+ * in a fresh secure canvas so real captures (screenshots/recordings) taken
|
||||
+ * during the transition still exclude them.
|
||||
+ */
|
||||
+static void RNSCollectPrivacySensitiveViews(UIView *view, NSMutableArray<UIView *> *out)
|
||||
+{
|
||||
+ // Swift classes are namespaced in the ObjC runtime ("Module.ClassName")
|
||||
+ if ([NSStringFromClass([view class]) hasSuffix:@"ExpoPrivacySensitiveView"]) {
|
||||
+ [out addObject:view];
|
||||
+ return;
|
||||
+ }
|
||||
+ for (UIView *subview in view.subviews) {
|
||||
+ RNSCollectPrivacySensitiveViews(subview, out);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static UIView *_Nullable RNSMakeSecureCanvas(void)
|
||||
+{
|
||||
+ UITextField *field = [UITextField new];
|
||||
+ field.secureTextEntry = YES;
|
||||
+ field.userInteractionEnabled = NO;
|
||||
+ UIView *canvas = (UIView *)field.layer.sublayers.firstObject.delegate;
|
||||
+ if (![canvas isKindOfClass:[UIView class]]) {
|
||||
+ return nil;
|
||||
+ }
|
||||
+ canvas.clipsToBounds = NO;
|
||||
+ canvas.backgroundColor = UIColor.clearColor;
|
||||
+ // retain the field alongside the canvas in case the capture exclusion ever
|
||||
+ // depends on the owning field staying alive
|
||||
+ objc_setAssociatedObject(canvas, "RNSSecureCanvasField", field, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||
+ return canvas;
|
||||
+}
|
||||
+
|
||||
+static char RNSSecureOverlaysKey;
|
||||
+
|
||||
- (void)willBeUnmountedInUpcomingTransaction
|
||||
{
|
||||
_markedForUnmountInCurrentTransaction = YES;
|
||||
+
|
||||
+ NSMutableArray<UIView *> *sensitiveViews = [NSMutableArray new];
|
||||
+ RNSCollectPrivacySensitiveViews(self, sensitiveViews);
|
||||
+ NSMutableArray<UIView *> *overlays = [NSMutableArray new];
|
||||
+ for (UIView *sensitiveView in sensitiveViews) {
|
||||
+ UIView *canvas = sensitiveView.subviews.firstObject;
|
||||
+ for (UIView *content in canvas.subviews) {
|
||||
+ UIView *pieceSnapshot = [content snapshotViewAfterScreenUpdates:NO];
|
||||
+ if (pieceSnapshot == nil) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ CGRect frameInScreen = [content convertRect:content.bounds toView:self];
|
||||
+ UIView *secureWrap = RNSMakeSecureCanvas();
|
||||
+ if (secureWrap != nil) {
|
||||
+ secureWrap.frame = frameInScreen;
|
||||
+ pieceSnapshot.frame = secureWrap.bounds;
|
||||
+ [secureWrap addSubview:pieceSnapshot];
|
||||
+ [overlays addObject:secureWrap];
|
||||
+ } else {
|
||||
+ pieceSnapshot.frame = frameInScreen;
|
||||
+ [overlays addObject:pieceSnapshot];
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ objc_setAssociatedObject(self, &RNSSecureOverlaysKey, overlays.count > 0 ? overlays : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||
}
|
||||
|
||||
+ (react::ComponentDescriptorProvider)componentDescriptorProvider
|
||||
@@ -1999,6 +2073,15 @@ - (void)setViewToSnapshot
|
||||
auto afterUpdates = self.screenView.snapshotAfterUpdates;
|
||||
UIView *snapshot = [self.view snapshotViewAfterScreenUpdates:afterUpdates];
|
||||
snapshot.frame = self.view.frame;
|
||||
+
|
||||
+ // PATCH (secure-snapshot): composite the secure-content overlays captured
|
||||
+ // in willBeUnmountedInUpcomingTransaction (see comment there)
|
||||
+ NSArray<UIView *> *overlays = objc_getAssociatedObject(self.screenView, &RNSSecureOverlaysKey);
|
||||
+ for (UIView *overlay in overlays) {
|
||||
+ [snapshot addSubview:overlay];
|
||||
+ }
|
||||
+ objc_setAssociatedObject(self.screenView, &RNSSecureOverlaysKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||
+
|
||||
[self.view removeFromSuperview];
|
||||
self.view = snapshot;
|
||||
[superView addSubview:snapshot];
|
||||
|
||||
@@ -13,3 +13,35 @@ The patch transitions a RecyclerView as a single unit without recursively transi
|
||||
Related issues:
|
||||
- https://github.com/callstack/react-native-pager-view/issues/1005
|
||||
- https://github.com/software-mansion/react-native-screens/issues/2461
|
||||
|
||||
## iOS: composite secure-view content into JS-pop transition snapshots
|
||||
|
||||
Fixes the GrowthHack Follow button flashing to the butterfly logo during
|
||||
JS-driven pops (custom back button, programmatic `goBack()`).
|
||||
|
||||
For a JS-driven pop, React unmounts the screen before the native dismiss
|
||||
animation runs, so `RNSScreen setViewToSnapshot` freezes the screen with
|
||||
`snapshotViewAfterScreenUpdates:`. That is a render-server capture, and the
|
||||
render server excludes `isSecureTextEntry` canvas layers from every capture -
|
||||
the mechanism expo-privacy-sensitive borrows - so the Follow button is
|
||||
stripped from the frozen frame and the butterfly behind it shows for the
|
||||
whole pop animation. Native-first pops (swipe-back, native header back) are
|
||||
unaffected because they animate the live views and never snapshot.
|
||||
|
||||
The exclusion flag is only consulted for layers inside the captured subtree,
|
||||
so a snapshot rooted below the flagged canvas still includes the content. By
|
||||
`setViewToSnapshot` time the screen's children are already unmounted (only
|
||||
the rendered pixels survive on the render server), so the patch captures the
|
||||
secure subtrees in `willBeUnmountedInUpcomingTransaction` - before the
|
||||
transaction's mutations apply - stashes them on the screen view via an
|
||||
associated object, and composites them over the main snapshot at their
|
||||
converted frames. Each overlay is re-wrapped in a fresh secure canvas so
|
||||
screenshots/recordings taken during the transition still exclude it.
|
||||
|
||||
Known limitation: capturing AVPlayer-backed content this way is racy (the
|
||||
frozen video is sometimes blank); the overlay still covers the hidden
|
||||
fallback either way. Plain views (the Follow button) capture reliably.
|
||||
|
||||
Verified in a minimal repro (Expo 57 / RN 0.86 / RNS 4.26 / New Arch) at
|
||||
~/work/rns-secure-pop-repro: zero fallback frames across recorded JS pops
|
||||
with the patch, ~700ms of visible fallback without it.
|
||||
|
||||
Generated
+12
-12
@@ -231,7 +231,7 @@ patchedDependencies:
|
||||
react-native-drawer-layout@4.2.3: 74f2c043cc22ab87054f219e7c7373a509b779b18bfa79d27e7d051d73355130
|
||||
react-native-keyboard-controller@1.21.9: ac52bf7502ff3ad34a8594b5e1a916b96bf87a2523b6abc87c31f03607d52271
|
||||
react-native-pager-view@6.8.0: c8316acd33c9aef6531e8c272c2bfab7bd02af1255969eeaab2bad5ab48531cc
|
||||
react-native-screens@4.26.2: ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c
|
||||
react-native-screens@4.26.2: 64db79e069eed40559b3621792683842e9785a55a8617d138459817cf27b1926
|
||||
react-native-svg@15.15.4: ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310
|
||||
react-native@0.86.0: 239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06
|
||||
|
||||
@@ -346,13 +346,13 @@ importers:
|
||||
version: 2.2.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))
|
||||
'@react-navigation/bottom-tabs':
|
||||
specifier: ^7.15.5
|
||||
version: 7.16.0(e010b3b7e876375fdd4841f6f289d0a2)
|
||||
version: 7.16.0(b84f2744bb45878bbf4b7905dbd795ed)
|
||||
'@react-navigation/native':
|
||||
specifier: ^7.1.33
|
||||
version: 7.2.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
'@react-navigation/native-stack':
|
||||
specifier: ^7.14.4
|
||||
version: 7.15.0(e010b3b7e876375fdd4841f6f289d0a2)
|
||||
version: 7.15.0(b84f2744bb45878bbf4b7905dbd795ed)
|
||||
'@sentry/react-native':
|
||||
specifier: ~8.18.0
|
||||
version: 8.18.0(@expo/env@2.4.2(supports-color@8.1.1))(dotenv@16.6.1)(expo@57.0.8)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
@@ -670,7 +670,7 @@ importers:
|
||||
version: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-screens:
|
||||
specifier: 4.26.2
|
||||
version: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
version: 4.26.2(patch_hash=64db79e069eed40559b3621792683842e9785a55a8617d138459817cf27b1926)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-scroll-forwarder:
|
||||
specifier: link:./modules/react-native-scroll-forwarder
|
||||
version: link:modules/react-native-scroll-forwarder
|
||||
@@ -715,7 +715,7 @@ importers:
|
||||
version: 2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
sonner-native:
|
||||
specifier: 0.26.4
|
||||
version: 0.26.4(a1115538eb9b7f01f00730be61406201)
|
||||
version: 0.26.4(6d731ba3ee1df1ed81210cada156b13a)
|
||||
tippy.js:
|
||||
specifier: ^6.3.7
|
||||
version: 6.3.7
|
||||
@@ -13111,7 +13111,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@types/react': 19.2.18
|
||||
|
||||
'@react-navigation/bottom-tabs@7.16.0(e010b3b7e876375fdd4841f6f289d0a2)':
|
||||
'@react-navigation/bottom-tabs@7.16.0(b84f2744bb45878bbf4b7905dbd795ed)':
|
||||
dependencies:
|
||||
'@react-navigation/elements': 2.9.17(6eb0e0bcf95273feb037f25c3e10784e)
|
||||
'@react-navigation/native': 7.2.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
@@ -13119,7 +13119,7 @@ snapshots:
|
||||
react: 19.2.3
|
||||
react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)
|
||||
react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-screens: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-screens: 4.26.2(patch_hash=64db79e069eed40559b3621792683842e9785a55a8617d138459817cf27b1926)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
sf-symbols-typescript: 2.2.0
|
||||
transitivePeerDependencies:
|
||||
- '@react-native-masked-view/masked-view'
|
||||
@@ -13146,7 +13146,7 @@ snapshots:
|
||||
use-latest-callback: 0.2.6(react@19.2.3)
|
||||
use-sync-external-store: 1.6.0(react@19.2.3)
|
||||
|
||||
'@react-navigation/native-stack@7.15.0(e010b3b7e876375fdd4841f6f289d0a2)':
|
||||
'@react-navigation/native-stack@7.15.0(b84f2744bb45878bbf4b7905dbd795ed)':
|
||||
dependencies:
|
||||
'@react-navigation/elements': 2.9.17(6eb0e0bcf95273feb037f25c3e10784e)
|
||||
'@react-navigation/native': 7.2.4(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
@@ -13154,7 +13154,7 @@ snapshots:
|
||||
react: 19.2.3
|
||||
react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)
|
||||
react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-screens: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-screens: 4.26.2(patch_hash=64db79e069eed40559b3621792683842e9785a55a8617d138459817cf27b1926)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
sf-symbols-typescript: 2.2.0
|
||||
warn-once: 0.1.1
|
||||
transitivePeerDependencies:
|
||||
@@ -18552,7 +18552,7 @@ snapshots:
|
||||
react: 19.2.3
|
||||
react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)
|
||||
|
||||
react-native-screens@4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3):
|
||||
react-native-screens@4.26.2(patch_hash=64db79e069eed40559b3621792683842e9785a55a8617d138459817cf27b1926)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3):
|
||||
dependencies:
|
||||
react: 19.2.3
|
||||
react-freeze: 1.0.4(react@19.2.3)
|
||||
@@ -19164,14 +19164,14 @@ snapshots:
|
||||
dependencies:
|
||||
atomic-sleep: 1.0.0
|
||||
|
||||
sonner-native@0.26.4(a1115538eb9b7f01f00730be61406201):
|
||||
sonner-native@0.26.4(6d731ba3ee1df1ed81210cada156b13a):
|
||||
dependencies:
|
||||
react: 19.2.3
|
||||
react-native: 0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1)
|
||||
react-native-gesture-handler: 2.32.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-reanimated: 4.6.0(92d1a74bc123f334ae9968fa1c80814f)
|
||||
react-native-safe-area-context: 5.7.0(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-screens: 4.26.2(patch_hash=ba3295d44434a729f143a6b2c24e4a9b2f911ab200b2bc47e46cdfeaa1536f7c)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-screens: 4.26.2(patch_hash=64db79e069eed40559b3621792683842e9785a55a8617d138459817cf27b1926)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-svg: 15.15.4(patch_hash=ae309e9542214f5ae54935e253dedd236765feedac7be343f81d532d7fe09310)(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)
|
||||
react-native-worklets: 0.12.1(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(react-native@0.86.0(patch_hash=239208992c380d6785576d1fae2e3f60f60f509d7b09d56bf552be29d6c42a06)(@babel/core@7.29.0(supports-color@8.1.1))(@react-native/jest-preset@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1))(@react-native/metro-config@0.86.0(@babel/core@7.29.0(supports-color@8.1.1))(supports-color@8.1.1))(@types/react@19.2.18)(react@19.2.3)(supports-color@8.1.1))(react@19.2.3)(supports-color@8.1.1)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user