From 6e696cb524b66cc192ae33a05dc8cfdfacfda741 Mon Sep 17 00:00:00 2001 From: Johannes Klein Date: Fri, 1 Aug 2025 12:11:13 +0200 Subject: [PATCH] Update to react-native 0.77 (#3026) * Upgrade helper changes JS side * Upgrade helper Android * Upgrade helper iOS side * Update project.pbxproj * Create react-native-modal+14.0.0-rc.1.patch * BackHandler.removeEventListener is deprecated * Update react-native-modal * Update .flowconfig * Update package-lock.json * Update Podfile.lock * Update Podfile.lock from main * Replace toBeVisible with toBeOnTheScreen This is not recommended by react-navigation, because even though toBeOnTheScreen makes sure the components are in the tree it does not mean they are visible to the user. For example, in terms of navigation a previous screen is still i the tree but not visible to the user in the app. I spent around a day trying to figure out why the isVisible check stopped working, and still have no clear answer. Testing in the actual app shows that all of those flows are still working as expected, so it is a test-environment-only problem. My suggestion would be to re-visit this problem after we have updated RN to latest, and testing related libraries to latest versions. --- .flowconfig | 34 + android/build.gradle | 4 +- ios/Podfile.lock | 1137 ++++++++--------- .../project.pbxproj | 146 --- ios/iNaturalistReactNative/AppDelegate.mm | 2 + .../INatMobileReactNativeTests.m | 66 - ios/iNaturalistReactNativeTests/Info.plist | 24 - metro.config.js | 2 +- package-lock.json | 566 +++----- package.json | 15 +- patches/react-native-modal+14.0.0-rc.1.patch | 19 + .../StandardCamera/hooks/useBackPress.ts | 4 +- src/components/ObsEdit/ObsEditHeader.js | 4 +- tests/integration/PhotoDeletion.test.js | 12 +- tests/integration/PhotoImport.test.js | 12 +- .../SuggestionsWithSyncedObs.test.js | 24 +- .../SuggestionsWithUnsyncedObs.test.js | 27 +- tests/integration/navigation/AICamera.test.js | 12 +- tests/integration/navigation/Explore.test.js | 71 +- .../navigation/MediaViewer.test.js | 74 +- .../navigation/MyObservations.test.js | 9 +- tests/integration/navigation/ObsEdit.test.js | 9 +- .../navigation/PhotoLibrary.test.js | 12 +- .../navigation/SoundRecorder.test.js | 6 +- .../navigation/StandardCamera.test.js | 12 +- .../navigation/Suggestions.test.js | 12 +- .../navigation/TaxonDetails.test.js | 63 +- 27 files changed, 1060 insertions(+), 1318 deletions(-) delete mode 100644 ios/iNaturalistReactNativeTests/INatMobileReactNativeTests.m delete mode 100644 ios/iNaturalistReactNativeTests/Info.plist create mode 100644 patches/react-native-modal+14.0.0-rc.1.patch diff --git a/.flowconfig b/.flowconfig index fe0ae97a7..e270edebc 100644 --- a/.flowconfig +++ b/.flowconfig @@ -54,6 +54,40 @@ node_modules/react-native/Libraries/polyfills/.* .*/node_modules/react-native/Libraries/Animated/nodes/AnimatedObject.js .*/node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js .*/node_modules/react-native/src/private/animated/NativeAnimatedHelper.js +.*/node_modules/hermes-parser/dist/traverse/getVisitorKeys.js.flow +.*/node_modules/react-native/Libraries/Animated/NativeAnimatedAllowlist.js +.*/node_modules/react-native/Libraries/Components/ActivityIndicator/ActivityIndicator.js +.*/node_modules/react-native/Libraries/Components/Button.js +.*/node_modules/react-native/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +.*/node_modules/react-native/Libraries/Components/Pressable/Pressable.js +.*/node_modules/react-native/Libraries/Components/SafeAreaView/SafeAreaView.js +.*/node_modules/react-native/Libraries/Components/ScrollView/ScrollView.js +.*/node_modules/react-native/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +.*/node_modules/react-native/Libraries/Components/Switch/Switch.js +.*/node_modules/react-native/Libraries/Components/TextInput/TextInput.flow.js +.*/node_modules/react-native/Libraries/Components/TextInput/TextInput.js +.*/node_modules/react-native/Libraries/Components/Touchable/BoundingDimensions.js +.*/node_modules/react-native/Libraries/Components/Touchable/Position.js +.*/node_modules/react-native/Libraries/Components/Touchable/TouchableBounce.js +.*/node_modules/react-native/Libraries/Components/Touchable/TouchableHighlight.js +.*/node_modules/react-native/Libraries/Components/Touchable/TouchableOpacity.js +.*/node_modules/react-native/Libraries/Components/View/View.js +.*/node_modules/react-native/Libraries/Debugging/DebuggingOverlay.js +.*/node_modules/react-native/Libraries/Image/ImageTypes.flow.js +.*/node_modules/react-native/Libraries/Interaction/InteractionManager.js +.*/node_modules/react-native/Libraries/Lists/SectionList.js +.*/node_modules/react-native/Libraries/Lists/SectionListModern.js +.*/node_modules/react-native/Libraries/ReactNative/AppContainer.js +.*/node_modules/react-native/Libraries/ReactNative/getCachedComponentWithDebugName.js +.*/node_modules/react-native/Libraries/ReactNative/renderApplication.js +.*/node_modules/react-native/Libraries/Text/Text.js +.*/node_modules/react-native/node_modules/@react-native/virtualized-lists/Lists/VirtualizedSectionList.js +.*/node_modules/react-native/src/private/animated/useAnimatedPropsMemo.js +.*/node_modules/react-native/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +.*/node_modules/react-native/src/private/debugging/ReactDevToolsSettingsManager.js.flow +.*/node_modules/react-native/src/private/featureflags/ReactNativeFeatureFlagsBase.js +.*/node_modules/react-native/src/private/webapis/intersectionobserver/IntersectionObserver.js +.*/node_modules/react-native/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js [untyped] .*/node_modules/@react-native-community/cli/.*/.* diff --git a/android/build.gradle b/android/build.gradle index a72069e73..8fc4f1f3e 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,8 +8,8 @@ buildscript { minSdkVersion = 24 compileSdkVersion = 35 targetSdkVersion = 34 - ndkVersion = "26.1.10909125" - kotlinVersion = "1.9.25" + ndkVersion = "27.1.12297006" + kotlinVersion = "2.0.21" // This specifies which tensorflow-lite version to use for our vision-plugin. tensorflowVersion = "2.14.0" } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index fe4572429..1a9debdac 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -18,7 +18,7 @@ PODS: - React-Core - FasterImage/NukeUI (1.4.3): - React-Core - - FBLazyVector (0.76.9) + - FBLazyVector (0.77.2) - fmt (11.0.2) - glog (0.3.5) - GoogleSignIn (7.1.0): @@ -29,58 +29,58 @@ PODS: - AppAuth/Core (~> 1.7) - GTMSessionFetcher/Core (< 4.0, >= 3.3) - GTMSessionFetcher/Core (3.5.0) - - hermes-engine (0.76.9): - - hermes-engine/Pre-built (= 0.76.9) - - hermes-engine/Pre-built (0.76.9) + - hermes-engine (0.77.2): + - hermes-engine/Pre-built (= 0.77.2) + - hermes-engine/Pre-built (0.77.2) - MMKV (2.2.2): - MMKVCore (~> 2.2.2) - MMKVCore (2.2.2) - Mute (0.6.1) - - RCT-Folly (2024.10.14.00): + - RCT-Folly (2024.11.18.00): - boost - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly/Default (= 2024.10.14.00) - - RCT-Folly/Default (2024.10.14.00): + - RCT-Folly/Default (= 2024.11.18.00) + - RCT-Folly/Default (2024.11.18.00): - boost - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCT-Folly/Fabric (2024.10.14.00): + - RCT-Folly/Fabric (2024.11.18.00): - boost - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - - RCTDeprecation (0.76.9) - - RCTRequired (0.76.9) - - RCTTypeSafety (0.76.9): - - FBLazyVector (= 0.76.9) - - RCTRequired (= 0.76.9) - - React-Core (= 0.76.9) - - React (0.76.9): - - React-Core (= 0.76.9) - - React-Core/DevSupport (= 0.76.9) - - React-Core/RCTWebSocket (= 0.76.9) - - React-RCTActionSheet (= 0.76.9) - - React-RCTAnimation (= 0.76.9) - - React-RCTBlob (= 0.76.9) - - React-RCTImage (= 0.76.9) - - React-RCTLinking (= 0.76.9) - - React-RCTNetwork (= 0.76.9) - - React-RCTSettings (= 0.76.9) - - React-RCTText (= 0.76.9) - - React-RCTVibration (= 0.76.9) - - React-callinvoker (0.76.9) - - React-Core (0.76.9): + - RCTDeprecation (0.77.2) + - RCTRequired (0.77.2) + - RCTTypeSafety (0.77.2): + - FBLazyVector (= 0.77.2) + - RCTRequired (= 0.77.2) + - React-Core (= 0.77.2) + - React (0.77.2): + - React-Core (= 0.77.2) + - React-Core/DevSupport (= 0.77.2) + - React-Core/RCTWebSocket (= 0.77.2) + - React-RCTActionSheet (= 0.77.2) + - React-RCTAnimation (= 0.77.2) + - React-RCTBlob (= 0.77.2) + - React-RCTImage (= 0.77.2) + - React-RCTLinking (= 0.77.2) + - React-RCTNetwork (= 0.77.2) + - React-RCTSettings (= 0.77.2) + - React-RCTText (= 0.77.2) + - React-RCTVibration (= 0.77.2) + - React-callinvoker (0.77.2) + - React-Core (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.76.9) + - React-Core/Default (= 0.77.2) - React-cxxreact - React-featureflags - React-hermes @@ -92,10 +92,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.76.9): + - React-Core/CoreModulesHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -109,10 +109,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.76.9): + - React-Core/Default (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-cxxreact - React-featureflags @@ -125,13 +125,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.76.9): + - React-Core/DevSupport (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.76.9) - - React-Core/RCTWebSocket (= 0.76.9) + - React-Core/Default (= 0.77.2) + - React-Core/RCTWebSocket (= 0.77.2) - React-cxxreact - React-featureflags - React-hermes @@ -143,10 +143,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.76.9): + - React-Core/RCTActionSheetHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -160,10 +160,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.76.9): + - React-Core/RCTAnimationHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -177,10 +177,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.76.9): + - React-Core/RCTBlobHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -194,10 +194,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.76.9): + - React-Core/RCTImageHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -211,10 +211,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.76.9): + - React-Core/RCTLinkingHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -228,10 +228,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.76.9): + - React-Core/RCTNetworkHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -245,10 +245,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.76.9): + - React-Core/RCTSettingsHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -262,10 +262,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.76.9): + - React-Core/RCTTextHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -279,10 +279,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.76.9): + - React-Core/RCTVibrationHeaders (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -296,12 +296,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.76.9): + - React-Core/RCTWebSocket (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTDeprecation - - React-Core/Default (= 0.76.9) + - React-Core/Default (= 0.77.2) - React-cxxreact - React-featureflags - React-hermes @@ -313,112 +313,86 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.76.9): + - React-CoreModules (0.77.2): - DoubleConversion - - fast_float - - fmt - - RCT-Folly - - RCTTypeSafety - - React-Core/CoreModulesHeaders - - React-jsi + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - RCT-Folly (= 2024.11.18.00) + - RCTTypeSafety (= 0.77.2) + - React-Core/CoreModulesHeaders (= 0.77.2) + - React-jsi (= 0.77.2) - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage - - ReactCodegen + - React-RCTFBReactNativeSpec + - React-RCTImage (= 0.77.2) - ReactCommon - - SocketRocket - - React-cxxreact (0.76.9): + - SocketRocket (= 0.7.1) + - React-cxxreact (0.77.2): - boost - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.77.2) + - React-debug (= 0.77.2) + - React-jsi (= 0.77.2) + - React-jsinspector + - React-logger (= 0.77.2) + - React-perflogger (= 0.77.2) + - React-runtimeexecutor (= 0.77.2) + - React-timing (= 0.77.2) + - React-debug (0.77.2) + - React-defaultsnativemodule (0.77.2): - hermes-engine - RCT-Folly - - React-callinvoker - - React-debug - - React-jsi - - React-jsinspector - - React-logger - - React-perflogger - - React-runtimeexecutor - - React-timing - - React-debug (0.76.9) - - React-defaultsnativemodule (0.76.9): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.10.14.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - React-domnativemodule - - React-Fabric - - React-featureflags - React-featureflagsnativemodule - - React-graphics - React-idlecallbacksnativemodule - - React-ImageManager + - React-jsi + - React-jsiexecutor - React-microtasksnativemodule - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - React-domnativemodule (0.76.9): - - DoubleConversion - - glog + - React-RCTFBReactNativeSpec + - React-domnativemodule (0.77.2): - hermes-engine - - RCT-Folly (= 2024.10.14.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug + - RCT-Folly - React-Fabric - React-FabricComponents - - React-featureflags - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.76.9): + - React-Fabric (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.76.9) - - React-Fabric/attributedstring (= 0.76.9) - - React-Fabric/componentregistry (= 0.76.9) - - React-Fabric/componentregistrynative (= 0.76.9) - - React-Fabric/components (= 0.76.9) - - React-Fabric/core (= 0.76.9) - - React-Fabric/dom (= 0.76.9) - - React-Fabric/imagemanager (= 0.76.9) - - React-Fabric/leakchecker (= 0.76.9) - - React-Fabric/mounting (= 0.76.9) - - React-Fabric/observers (= 0.76.9) - - React-Fabric/scheduler (= 0.76.9) - - React-Fabric/telemetry (= 0.76.9) - - React-Fabric/templateprocessor (= 0.76.9) - - React-Fabric/uimanager (= 0.76.9) + - React-Fabric/animations (= 0.77.2) + - React-Fabric/attributedstring (= 0.77.2) + - React-Fabric/componentregistry (= 0.77.2) + - React-Fabric/componentregistrynative (= 0.77.2) + - React-Fabric/components (= 0.77.2) + - React-Fabric/core (= 0.77.2) + - React-Fabric/dom (= 0.77.2) + - React-Fabric/imagemanager (= 0.77.2) + - React-Fabric/leakchecker (= 0.77.2) + - React-Fabric/mounting (= 0.77.2) + - React-Fabric/observers (= 0.77.2) + - React-Fabric/scheduler (= 0.77.2) + - React-Fabric/telemetry (= 0.77.2) + - React-Fabric/templateprocessor (= 0.77.2) + - React-Fabric/uimanager (= 0.77.2) - React-featureflags - React-graphics - React-jsi @@ -428,13 +402,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.76.9): + - React-Fabric/animations (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -449,13 +423,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.76.9): + - React-Fabric/attributedstring (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -470,13 +444,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.76.9): + - React-Fabric/componentregistry (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -491,13 +465,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.76.9): + - React-Fabric/componentregistrynative (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -512,21 +486,21 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.76.9): + - React-Fabric/components (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.76.9) - - React-Fabric/components/root (= 0.76.9) - - React-Fabric/components/view (= 0.76.9) + - React-Fabric/components/legacyviewmanagerinterop (= 0.77.2) + - React-Fabric/components/root (= 0.77.2) + - React-Fabric/components/view (= 0.77.2) - React-featureflags - React-graphics - React-jsi @@ -536,13 +510,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.76.9): + - React-Fabric/components/legacyviewmanagerinterop (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -557,13 +531,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.76.9): + - React-Fabric/components/root (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -578,13 +552,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.76.9): + - React-Fabric/components/view (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -600,13 +574,13 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.76.9): + - React-Fabric/core (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -621,13 +595,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.76.9): + - React-Fabric/dom (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -642,13 +616,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.76.9): + - React-Fabric/imagemanager (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -663,13 +637,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.76.9): + - React-Fabric/leakchecker (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -684,13 +658,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.76.9): + - React-Fabric/mounting (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -705,19 +679,19 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.76.9): + - React-Fabric/observers (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.76.9) + - React-Fabric/observers/events (= 0.77.2) - React-featureflags - React-graphics - React-jsi @@ -727,13 +701,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.76.9): + - React-Fabric/observers/events (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -748,13 +722,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.76.9): + - React-Fabric/scheduler (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -771,13 +745,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.76.9): + - React-Fabric/telemetry (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -792,13 +766,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.76.9): + - React-Fabric/templateprocessor (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -813,19 +787,19 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.76.9): + - React-Fabric/uimanager (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.76.9) + - React-Fabric/uimanager/consistency (= 0.77.2) - React-featureflags - React-graphics - React-jsi @@ -836,13 +810,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.76.9): + - React-Fabric/uimanager/consistency (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -858,21 +832,21 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.76.9): + - React-FabricComponents (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.76.9) - - React-FabricComponents/textlayoutmanager (= 0.76.9) + - React-FabricComponents/components (= 0.77.2) + - React-FabricComponents/textlayoutmanager (= 0.77.2) - React-featureflags - React-graphics - React-jsi @@ -881,31 +855,30 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.76.9): + - React-FabricComponents/components (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.76.9) - - React-FabricComponents/components/iostextinput (= 0.76.9) - - React-FabricComponents/components/modal (= 0.76.9) - - React-FabricComponents/components/rncore (= 0.76.9) - - React-FabricComponents/components/safeareaview (= 0.76.9) - - React-FabricComponents/components/scrollview (= 0.76.9) - - React-FabricComponents/components/text (= 0.76.9) - - React-FabricComponents/components/textinput (= 0.76.9) - - React-FabricComponents/components/unimplementedview (= 0.76.9) + - React-FabricComponents/components/inputaccessory (= 0.77.2) + - React-FabricComponents/components/iostextinput (= 0.77.2) + - React-FabricComponents/components/modal (= 0.77.2) + - React-FabricComponents/components/rncore (= 0.77.2) + - React-FabricComponents/components/safeareaview (= 0.77.2) + - React-FabricComponents/components/scrollview (= 0.77.2) + - React-FabricComponents/components/text (= 0.77.2) + - React-FabricComponents/components/textinput (= 0.77.2) + - React-FabricComponents/components/unimplementedview (= 0.77.2) - React-featureflags - React-graphics - React-jsi @@ -914,16 +887,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.76.9): + - React-FabricComponents/components/inputaccessory (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -938,16 +910,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.76.9): + - React-FabricComponents/components/iostextinput (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -962,16 +933,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.76.9): + - React-FabricComponents/components/modal (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -986,16 +956,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.76.9): + - React-FabricComponents/components/rncore (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1010,16 +979,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.76.9): + - React-FabricComponents/components/safeareaview (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1034,16 +1002,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.76.9): + - React-FabricComponents/components/scrollview (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1058,16 +1025,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.76.9): + - React-FabricComponents/components/text (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1082,16 +1048,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.76.9): + - React-FabricComponents/components/textinput (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1106,16 +1071,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.76.9): + - React-FabricComponents/components/unimplementedview (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1130,16 +1094,15 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.76.9): + - React-FabricComponents/textlayoutmanager (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1154,95 +1117,68 @@ PODS: - React-rendererdebug - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.76.9): + - React-FabricImage (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety + - RCT-Folly/Fabric (= 2024.11.18.00) + - RCTRequired (= 0.77.2) + - RCTTypeSafety (= 0.77.2) - React-Fabric + - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor + - React-jsiexecutor (= 0.77.2) - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.76.9) - - React-featureflagsnativemodule (0.76.9): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.10.14.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - Yoga - - React-graphics (0.76.9): - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly/Fabric - - React-jsi - - React-jsiexecutor - - React-utils - - React-hermes (0.76.9): - - DoubleConversion - - fast_float - - fmt - - glog + - React-featureflags (0.77.2) + - React-featureflagsnativemodule (0.77.2): - hermes-engine - RCT-Folly - - React-cxxreact + - React-featureflags - React-jsi - React-jsiexecutor - - React-jsinspector - - React-perflogger - - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.76.9): + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - React-graphics (0.77.2): - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - glog + - RCT-Folly/Fabric (= 2024.11.18.00) + - React-jsi + - React-jsiexecutor + - React-utils + - React-hermes (0.77.2): + - DoubleConversion + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.77.2) + - React-jsi + - React-jsiexecutor (= 0.77.2) + - React-jsinspector + - React-perflogger (= 0.77.2) + - React-runtimeexecutor + - React-idlecallbacksnativemodule (0.77.2): + - hermes-engine + - RCT-Folly + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec - React-runtimescheduler - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - Yoga - - React-ImageManager (0.76.9): + - React-ImageManager (0.77.2): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1251,74 +1187,62 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.76.9): + - React-jserrorhandler (0.77.2): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - React-cxxreact - React-debug + - React-featureflags - React-jsi - - React-jsi (0.76.9): + - ReactCommon/turbomodule/bridging + - React-jsi (0.77.2): - boost - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly - - React-jsiexecutor (0.76.9): + - RCT-Folly (= 2024.11.18.00) + - React-jsiexecutor (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly - - React-cxxreact - - React-jsi + - RCT-Folly (= 2024.11.18.00) + - React-cxxreact (= 0.77.2) + - React-jsi (= 0.77.2) - React-jsinspector - - React-perflogger - - React-jsinspector (0.76.9): + - React-perflogger (= 0.77.2) + - React-jsinspector (0.77.2): - DoubleConversion - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - React-featureflags + - React-jsi + - React-perflogger (= 0.77.2) + - React-runtimeexecutor (= 0.77.2) + - React-jsitracing (0.77.2): + - React-jsi + - React-logger (0.77.2): + - glog + - React-Mapbuffer (0.77.2): + - glog + - React-debug + - React-microtasksnativemodule (0.77.2): - hermes-engine - RCT-Folly - - React-featureflags - React-jsi - - React-perflogger - - React-runtimeexecutor - - React-jsitracing (0.76.9): - - React-jsi - - React-logger (0.76.9): - - glog - - React-Mapbuffer (0.76.9): - - glog - - React-debug - - React-microtasksnativemodule (0.76.9): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.10.14.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging + - React-jsiexecutor + - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - - Yoga - react-native-cameraroll (7.8.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1347,7 +1271,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1381,7 +1305,7 @@ PODS: - glog - hermes-engine - MMKV (>= 1.3.3) - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1414,7 +1338,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1438,7 +1362,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1459,7 +1383,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1476,8 +1400,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-nativeconfig (0.76.9) - - React-NativeModulesApple (0.76.9): + - React-nativeconfig (0.77.2) + - React-NativeModulesApple (0.77.2): - glog - hermes-engine - React-callinvoker @@ -1488,25 +1412,26 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.76.9): + - React-perflogger (0.77.2): - DoubleConversion - - RCT-Folly (= 2024.10.14.00) - - React-performancetimeline (0.76.9): - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) + - React-performancetimeline (0.77.2): + - RCT-Folly (= 2024.11.18.00) - React-cxxreact + - React-featureflags - React-timing - - React-RCTActionSheet (0.76.9): - - React-Core/RCTActionSheetHeaders (= 0.76.9) - - React-RCTAnimation (0.76.9): - - RCT-Folly (= 2024.10.14.00) + - React-RCTActionSheet (0.77.2): + - React-Core/RCTActionSheetHeaders (= 0.77.2) + - React-RCTAnimation (0.77.2): + - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders - React-jsi - React-NativeModulesApple - - ReactCodegen + - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTAppDelegate (0.76.9): - - RCT-Folly (= 2024.10.14.00) + - React-RCTAppDelegate (0.77.2): + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1520,6 +1445,7 @@ PODS: - React-nativeconfig - React-NativeModulesApple - React-RCTFabric + - React-RCTFBReactNativeSpec - React-RCTImage - React-RCTNetwork - React-rendererdebug @@ -1528,26 +1454,25 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - ReactCodegen - ReactCommon - - React-RCTBlob (0.76.9): + - React-RCTBlob (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi - React-jsinspector - React-NativeModulesApple + - React-RCTFBReactNativeSpec - React-RCTNetwork - - ReactCodegen - ReactCommon - - React-RCTFabric (0.76.9): + - React-RCTFabric (0.77.2): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - React-Core - React-debug - React-Fabric @@ -1567,63 +1492,74 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.76.9): - - RCT-Folly (= 2024.10.14.00) + - React-RCTFBReactNativeSpec (0.77.2): + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - ReactCommon + - React-RCTImage (0.77.2): + - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTImageHeaders - React-jsi - React-NativeModulesApple + - React-RCTFBReactNativeSpec - React-RCTNetwork - - ReactCodegen - ReactCommon - - React-RCTLinking (0.76.9): - - React-Core/RCTLinkingHeaders (= 0.76.9) - - React-jsi (= 0.76.9) + - React-RCTLinking (0.77.2): + - React-Core/RCTLinkingHeaders (= 0.77.2) + - React-jsi (= 0.77.2) - React-NativeModulesApple - - ReactCodegen + - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.76.9) - - React-RCTNetwork (0.76.9): - - RCT-Folly (= 2024.10.14.00) + - ReactCommon/turbomodule/core (= 0.77.2) + - React-RCTNetwork (0.77.2): + - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders - React-jsi - React-NativeModulesApple - - ReactCodegen + - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTSettings (0.76.9): - - RCT-Folly (= 2024.10.14.00) + - React-RCTSettings (0.77.2): + - RCT-Folly (= 2024.11.18.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - - ReactCodegen + - React-RCTFBReactNativeSpec - ReactCommon - - React-RCTText (0.76.9): - - React-Core/RCTTextHeaders (= 0.76.9) + - React-RCTText (0.77.2): + - React-Core/RCTTextHeaders (= 0.77.2) - Yoga - - React-RCTVibration (0.76.9): - - RCT-Folly (= 2024.10.14.00) + - React-RCTVibration (0.77.2): + - RCT-Folly (= 2024.11.18.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - - ReactCodegen + - React-RCTFBReactNativeSpec - ReactCommon - - React-rendererconsistency (0.76.9) - - React-rendererdebug (0.76.9): + - React-rendererconsistency (0.77.2) + - React-rendererdebug (0.77.2): - DoubleConversion - - fast_float - - fmt - - RCT-Folly + - fast_float (= 6.1.4) + - fmt (= 11.0.2) + - RCT-Folly (= 2024.11.18.00) - React-debug - - React-rncore (0.76.9) - - React-RuntimeApple (0.76.9): + - React-rncore (0.77.2) + - React-RuntimeApple (0.77.2): - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - React-callinvoker - React-Core/Default - React-CoreModules - React-cxxreact + - React-featureflags - React-jserrorhandler - React-jsi - React-jsiexecutor @@ -1631,16 +1567,18 @@ PODS: - React-Mapbuffer - React-NativeModulesApple - React-RCTFabric + - React-RCTFBReactNativeSpec - React-RuntimeCore - React-runtimeexecutor - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.76.9): + - React-RuntimeCore (0.77.2): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - React-cxxreact + - React-Fabric - React-featureflags - React-jserrorhandler - React-jsi @@ -1650,11 +1588,11 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.76.9): - - React-jsi (= 0.76.9) - - React-RuntimeHermes (0.76.9): + - React-runtimeexecutor (0.77.2): + - React-jsi (= 0.77.2) + - React-RuntimeHermes (0.77.2): - hermes-engine - - RCT-Folly/Fabric (= 2024.10.14.00) + - RCT-Folly/Fabric (= 2024.11.18.00) - React-featureflags - React-hermes - React-jsi @@ -1663,10 +1601,10 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.76.9): + - React-runtimescheduler (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - React-callinvoker - React-cxxreact - React-debug @@ -1678,14 +1616,16 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.76.9) - - React-utils (0.76.9): + - React-timing (0.77.2) + - React-utils (0.77.2): - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - React-debug - - React-jsi (= 0.76.9) - - ReactCodegen (0.76.9): + - React-jsi (= 0.77.2) + - ReactAppDependencyProvider (0.77.2): + - ReactCodegen + - ReactCodegen (0.77.2): - DoubleConversion - glog - hermes-engine @@ -1701,53 +1641,54 @@ PODS: - React-jsi - React-jsiexecutor - React-NativeModulesApple + - React-RCTAppDelegate - React-rendererdebug - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.76.9): - - ReactCommon/turbomodule (= 0.76.9) - - ReactCommon/turbomodule (0.76.9): + - ReactCommon (0.77.2): + - ReactCommon/turbomodule (= 0.77.2) + - ReactCommon/turbomodule (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly - - React-callinvoker - - React-cxxreact - - React-jsi - - React-logger - - React-perflogger - - ReactCommon/turbomodule/bridging (= 0.76.9) - - ReactCommon/turbomodule/core (= 0.76.9) - - ReactCommon/turbomodule/bridging (0.76.9): + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.77.2) + - React-cxxreact (= 0.77.2) + - React-jsi (= 0.77.2) + - React-logger (= 0.77.2) + - React-perflogger (= 0.77.2) + - ReactCommon/turbomodule/bridging (= 0.77.2) + - ReactCommon/turbomodule/core (= 0.77.2) + - ReactCommon/turbomodule/bridging (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly - - React-callinvoker - - React-cxxreact - - React-jsi (= 0.76.9) - - React-logger - - React-perflogger - - ReactCommon/turbomodule/core (0.76.9): + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.77.2) + - React-cxxreact (= 0.77.2) + - React-jsi (= 0.77.2) + - React-logger (= 0.77.2) + - React-perflogger (= 0.77.2) + - ReactCommon/turbomodule/core (0.77.2): - DoubleConversion - - fast_float - - fmt + - fast_float (= 6.1.4) + - fmt (= 11.0.2) - glog - hermes-engine - - RCT-Folly - - React-callinvoker - - React-cxxreact - - React-debug (= 0.76.9) - - React-featureflags (= 0.76.9) - - React-jsi - - React-logger - - React-perflogger - - React-utils (= 0.76.9) + - RCT-Folly (= 2024.11.18.00) + - React-callinvoker (= 0.77.2) + - React-cxxreact (= 0.77.2) + - React-debug (= 0.77.2) + - React-featureflags (= 0.77.2) + - React-jsi (= 0.77.2) + - React-logger (= 0.77.2) + - React-perflogger (= 0.77.2) + - React-utils (= 0.77.2) - ReactNativeExceptionHandler (2.10.10): - React-Core - RealmJS (20.1.0): @@ -1768,7 +1709,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1791,7 +1732,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1819,7 +1760,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1844,7 +1785,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1868,7 +1809,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1891,7 +1832,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1915,7 +1856,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1938,7 +1879,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1966,7 +1907,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.10.14.00) + - RCT-Folly (= 2024.11.18.00) - RCTRequired - RCTTypeSafety - React-Core @@ -2072,6 +2013,7 @@ DEPENDENCIES: - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) @@ -2088,6 +2030,7 @@ DEPENDENCIES: - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactAppDependencyProvider (from `build/generated/ios`) - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - ReactNativeExceptionHandler (from `../node_modules/react-native-exception-handler`) @@ -2144,7 +2087,7 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2024-11-12-RNv0.76.2-5b4aa20c719830dcf5684832b89a6edb95ac3d64 + :tag: hermes-2024-11-25-RNv0.77.0-d4f25d534ab744866448b36ca3bf3d97c08e638c RCT-Folly: :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTDeprecation: @@ -2265,6 +2208,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Blob" React-RCTFabric: :path: "../node_modules/react-native/React" + React-RCTFBReactNativeSpec: + :path: "../node_modules/react-native/React" React-RCTImage: :path: "../node_modules/react-native/Libraries/Image" React-RCTLinking: @@ -2297,6 +2242,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/react/timing" React-utils: :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactAppDependencyProvider: + :path: build/generated/ios ReactCodegen: :path: build/generated/ios ReactCommon: @@ -2350,51 +2297,51 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73 - boost: 1dca942403ed9342f98334bf4c3621f011aa7946 + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 BVLinearGradient: cb006ba232a1f3e4f341bb62c42d1098c284da70 - DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 + DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 FasterImage: 5215480384883bb4a4a7f5655d4d1f8354e96987 - FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45 - fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6 - glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a + FBLazyVector: 4c16dde959a9d6b24f2aa32cb87cb919a1ace3f3 + fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd + glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 GoogleSignIn: d4281ab6cf21542b1cfaff85c191f230b399d2db GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 - hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11 + hermes-engine: 8eb265241fa1d7095d3a40d51fd90f7dce68217c MMKV: b4802ebd5a7c68fc0c4a5ccb4926fbdfb62d68e0 MMKVCore: a255341a3746955f50da2ad9121b18cb2b346e61 Mute: 20135a96076f140cc82bfc8b810e2d6150d8ec7e - RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17 - RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83 - RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716 - RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f - React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d - React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea - React-Core: a68cea3e762814e60ecc3fa521c7f14c36c99245 - React-CoreModules: d81b1eaf8066add66299bab9d23c9f00c9484c7c - React-cxxreact: 984f8b1feeca37181d4e95301fcd6f5f6501c6ab - React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964 - React-defaultsnativemodule: 21f216e8db975897eb32b5f13247f5bbfaa97f41 - React-domnativemodule: 19270ad4b8d33312838d257f24731a0026809d49 - React-Fabric: f6dade7007533daeb785ba5925039d83f343be4b - React-FabricComponents: b0655cc3e1b5ae12a4a1119aa7d8308f0ad33520 - React-FabricImage: 9b157c4c01ac2bf433f834f0e1e5fe234113a576 - React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c - React-featureflagsnativemodule: 3a8731d8fd9f755be57e00d9fa8a7f92aa77e87d - React-graphics: 68969e4e49d73f89da7abef4116c9b5f466aa121 - React-hermes: ac0bcba26a5d288ebc99b500e1097da2d0297ddf - React-idlecallbacksnativemodule: 9a2c5b5c174c0c476f039bedc1b9497a8272133e - React-ImageManager: e906eec93a9eb6102a06576b89d48d80a4683020 - React-jserrorhandler: ac5dde01104ff444e043cad8f574ca02756e20d6 - React-jsi: 496fa2b9d63b726aeb07d0ac800064617d71211d - React-jsiexecutor: dd22ab48371b80f37a0a30d0e8915b6d0f43a893 - React-jsinspector: 4629ac376f5765e684d19064f2093e55c97fd086 - React-jsitracing: 7a1c9cd484248870cf660733cd3b8114d54c035f - React-logger: c4052eb941cca9a097ef01b59543a656dc088559 - React-Mapbuffer: 33546a3ebefbccb8770c33a1f8a5554fa96a54de - React-microtasksnativemodule: 5c3d795318c22ab8df55100e50b151384a4a60b3 - react-native-cameraroll: cc109bdbdb3331e41df1e95f8681429cc317a3e2 + RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 + RCTDeprecation: 85b72250b63cfb54f29ca96ceb108cb9ef3c2079 + RCTRequired: 567cb8f5d42b990331bfd93faad1d8999b1c1736 + RCTTypeSafety: 5e57924492a5e0a762654f814dd018953274eca9 + React: 53c9bd6f974c5dd019ee466e46477eb679149c38 + React-callinvoker: d6484472c1c742917b51338525336d6a74ab8a9f + React-Core: 4ddb741e08144902ce4e0e66b7c67c6f2dc5bfc7 + React-CoreModules: 0a31ca662ac169edd0c210efd324e19b3012d7ed + React-cxxreact: f8ecc64ebf8b795c550ae8b65ba4908ffe7350d0 + React-debug: bcb3ad3ac30170b3dad4a35b4b85db17ff9553b2 + React-defaultsnativemodule: 6f82446e1c372d904fd06f7c405fcb04f76e3d24 + React-domnativemodule: 6af75363e305253251475a82df996cde8a53e066 + React-Fabric: 0a8ef32ba4f8516c89d89126434ead8c0c564da1 + React-FabricComponents: 7c69a91400e6c1766ad9d44b7fa73871559ead30 + React-FabricImage: dc71846e7a8b0825890faacf88a2a1cf771c7108 + React-featureflags: 1d15b368330ec96edc02e68cdae0f266efad5ebe + React-featureflagsnativemodule: 45f51f78d54579087e1233dc8bae31e2536c4208 + React-graphics: 235f82ac0ca6b4533049e10baf202f521804baef + React-hermes: 104bc85f9903f1caa91db6b09a5f97ceda6c50af + React-idlecallbacksnativemodule: 47f766f119cccd4486081f88ebc30e3046130ce0 + React-ImageManager: 0190f64acb02be89d57764f608989297409eba30 + React-jserrorhandler: 30f3a3a2e54ac2528bf93b59f764a8ae1bcd88eb + React-jsi: 0a6dd1eafe243a6c19c5207103aa0fba3c45a46d + React-jsiexecutor: 9aba4e775cc17d9c4311caf1bf2158a570380a9a + React-jsinspector: 6982d464d92181217de063cebc4a992d99d85b7f + React-jsitracing: a6569c6c0dadecdce4821f87a420b409a19e42d3 + React-logger: 592d84bed2e04db64c0b3725f9970b437473f3d3 + React-Mapbuffer: 595c88852c1dcb1c4faafad88148de8690a70aae + React-microtasksnativemodule: b56986b155ae82e9bcb1d1c0ca8726bac52dbb6e + react-native-cameraroll: 4626e88dacb252ebbbba6e162bf7e92fe892c292 react-native-config: ea75335a7cca1d3326de1da384227e580a7c082e react-native-exif-reader: d871d62023d532e33cc230ede6e2ba9cbfe220e2 react-native-geocoder-reborn: a3c3d8460910309e750609c373b6887ec6f67a8f @@ -2405,44 +2352,46 @@ SPEC CHECKSUMS: react-native-keep-awake: 03b74eebe4f2bb5e8478fc8f420651a92463b6f8 react-native-mail: 6e83813066984b26403d3fdfe79ac7bb31857e3c react-native-maps: 85da55259d35bd50b5161d2ec0ee153d454158cc - react-native-mmkv: f0574e88f254d13d1a87cf6d38c36bc5d3910d49 + react-native-mmkv: a6e08ad1b51b84af075f91798f8a92c878472265 react-native-netinfo: 2e3c27627db7d49ba412bfab25834e679db41e21 react-native-orientation-locker: dbd3f6ddbe9e62389cb0807dc2af63f6c36dec36 react-native-render-html: 5afc4751f1a98621b3009432ef84c47019dcb2bd react-native-restart: 0bc732f4461709022a742bb29bcccf6bbc5b4863 react-native-safe-area-context: 827032edf27079702cbd006f11dc79451a2d744b react-native-sensitive-info: ee358bf2b901ac3d04f63ff637b31daee44ea87f - react-native-slider: 1a4b42f71aea07eee94d7327fddce0db5f25feca + react-native-slider: 782148f71677e18db743131d85eecaf93948b478 react-native-volume-manager: d9d2863a2374420af89c89662333ea6adf506988 - react-native-webview: ab7d17cb9fd64af9f4a9e3936248364995518f74 - react-native-worklets-core: bfbf1cce2251a85a23d739e46a77682a29fc8889 - React-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678 - React-NativeModulesApple: cebca2e5320a3d66e123cade23bd90a167ffce5e - React-perflogger: 72e653eb3aba9122f9e57cf012d22d2486f33358 - React-performancetimeline: cd6a9374a72001165995d2ab632f672df04076dc - React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342 - React-RCTAnimation: 395ab53fd064dff81507c15efb781c8684d9a585 - React-RCTAppDelegate: 1e5b43833e3e36e9fa34eec20be98174bc0e14a2 - React-RCTBlob: 13311e554c1a367de063c10ee7c5e6573b2dd1d6 - React-RCTFabric: bd906861a4e971e21d8df496c2d8f3ca6956f840 - React-RCTImage: 1b1f914bcc12187c49ba5d949dac38c2eb9f5cc8 - React-RCTLinking: 4ac7c42beb65e36fba0376f3498f3cd8dd0be7fa - React-RCTNetwork: 938902773add4381e84426a7aa17a2414f5f94f7 - React-RCTSettings: e848f1ba17a7a18479cf5a31d28145f567da8223 - React-RCTText: 7e98fafdde7d29e888b80f0b35544e0cb07913cf - React-RCTVibration: cd7d80affd97dc7afa62f9acd491419558b64b78 - React-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6 - React-rendererdebug: aa181c36dd6cf5b35511d1ed875d6638fd38f0ec - React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74 - React-RuntimeApple: d033becbbd1eba6f9f6e3af6f1893030ce203edd - React-RuntimeCore: 38af280bb678e66ba000a3c3d42920b2a138eebb - React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899 - React-RuntimeHermes: 37aad735ff21ca6de2d8450a96de1afe9f86c385 - React-runtimescheduler: 8ec34cc885281a34696ea16c4fd86892d631f38d - React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9 - React-utils: ed818f19ab445000d6b5c4efa9d462449326cc9f - ReactCodegen: f853a20cc9125c5521c8766b4b49375fec20648b - ReactCommon: 300d8d9c5cb1a6cd79a67cf5d8f91e4d477195f9 + react-native-webview: 3772c8537fd6d7869791820a7b154fb546bcef7b + react-native-worklets-core: 5281a88dd187663e9d3cd58e54ab5c99e29d671a + React-nativeconfig: ecf4dc92c40b97e2b3f0c619938f78bfd6507b08 + React-NativeModulesApple: f457bbfb30fb3bc41979b1a87b99d292d7340d39 + React-perflogger: 1111b5feb064c4cc83df88fb403efda54b387951 + React-performancetimeline: f04d09d6c0da5c31c9c3a10afe6fcfdaddbb8624 + React-RCTActionSheet: 150cfe1df4275db2251a2a4a1b22be3294e94ef7 + React-RCTAnimation: 1de976f7a660429c39e20a81a728eb0102226f9b + React-RCTAppDelegate: 4d0243b352cd6c12744ffaa1b7e6aa90eaa3c291 + React-RCTBlob: 27c8f8fa6cb47cd4cb422d74d015722f01835493 + React-RCTFabric: fd2345f7a3c1415f988df0640d0e525d62fa4932 + React-RCTFBReactNativeSpec: e7554dd3838a0d17e2e361e737ede98dfe2ebc9c + React-RCTImage: 148afd89e4de0c36b87df0d1e8c0007fa89fb055 + React-RCTLinking: 389458d08b891fa0a03e4c2cee545ebff341d06f + React-RCTNetwork: a78572948341ef0f9438b2d1cd685be564256518 + React-RCTSettings: 484e4ec805ff8ab6c0af21fe90f415a8fae89f43 + React-RCTText: 0d6fbf6ebe6eaa749bc7d672ba01a3e96553e941 + React-RCTVibration: 4baa58b79be7062096e0f0b7575d4f0507952449 + React-rendererconsistency: 5f7773101a5d744d37967faabdb1b259c8f0b481 + React-rendererdebug: d6da0f1dd47e4a087396ec7e7c37d2f0a469d2bd + React-rncore: 679835b31b637897cfd0b2ede7f9c206b9a688ff + React-RuntimeApple: 532438b9b2a0438639ebfae26117a23615b89d09 + React-RuntimeCore: 8cb8fa729bf409730fc38a019556afc02e45989b + React-runtimeexecutor: e6e7af01f9989f931289250ee9060604bc0f0144 + React-RuntimeHermes: 825d11cbef3dac839016830bdb93d815492bbe94 + React-runtimescheduler: a3560dd66614edaf2f2fb90697474802f8bdd358 + React-timing: d9adb125887c734222f455da146e2ff1a7b2b9c1 + React-utils: 5642285f8379e4d024f1f158ffcc77d9c52c877c + ReactAppDependencyProvider: f334cebc0beed0a72490492e978007082c03d533 + ReactCodegen: 6f764a42662ad6379fd3fbb9c09baff6e4797b20 + ReactCommon: 7763e59534d58e15f8f22121cdfe319040e08888 ReactNativeExceptionHandler: a23922ca00122b050ae9412f960061791c232c47 RealmJS: 9fd51c849eb552ade9f7b11db42a319b4f6cab4c RNAppleAuthentication: 8d313d93fe2238d6b7ff0a39c67ebcf298d96653 @@ -2451,22 +2400,22 @@ SPEC CHECKSUMS: RNCPicker: da0f1c9411208c1ca52bc98383db54a06e0a3862 RNDateTimePicker: 392bdc0d6863b5de2fe9b957c82c25b6a038db29 RNDeviceInfo: 538b62f03991eb4a2a15cf6fec5fff6bb5edc34e - RNFlashList: 490b55e0e9e01b30e7a289aa0543f0aee659d6b8 + RNFlashList: e2981ad152fadf10f3b05e56cba9888317d85458 RNFS: 89de7d7f4c0f6bafa05343c578f61118c8282ed8 - RNGestureHandler: 873293eddd5c833779f6100823ac2445660249fe + RNGestureHandler: 6d231bf41166c01b8234f0b7b24d73d82e44ef4c RNGoogleSignin: ba93c1137f8d5cebdd39b04f493fd212ddf5ecd6 RNLocalize: 080849cb8a824d9f759b8a5ae00c8321d46dbed0 RNPermissions: f14c20f4eb7a20fff611ad9f467da7bb5872ac4f - RNReanimated: b70669b09feeb350b82b1bc6ab5e63a95238433b - RNScreens: c3cd5d303c8d87c9476bfea7b84db1e54e609fa6 + RNReanimated: 9314062225482de1f3359245705191e9aacfe85c + RNScreens: 9ef996b6041d0960a4794a845f7d0808b171b4ef RNShareMenu: e1cdfa3b9af89416afc75a80377cfd0de4f30ded RNStoreReview: 613c43e9132998ed41a65946e20c223c91b36464 - RNSVG: df335373ea2cb29876864e6a2ea8c86aad305838 - RNVectorIcons: 4330d8f8f8f4184f436e0c08ae9950431ffe466e + RNSVG: 4a789b2408851b376e3055c3798ce310a35d0fe7 + RNVectorIcons: f7a99433a71f4b38891c14c64b21fc521d064392 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 VisionCamera: 1470a7fa013e22de7481640a4d9c597ad6f13919 VisionCameraPluginInatVision: ad9a001b70676d2f9b0ea22f60c04d5fed3d3a52 - Yoga: 40f19fff64dce86773bf8b602c7070796c007970 + Yoga: 6f65362b9e599b5a80e079df91843ea27b4d1afa PODFILE CHECKSUM: 3877bea0ea18a99bd3e08a1a6dc6ff4eb7c6dd77 diff --git a/ios/iNaturalistReactNative.xcodeproj/project.pbxproj b/ios/iNaturalistReactNative.xcodeproj/project.pbxproj index e8d0f0b37..f87f9208f 100644 --- a/ios/iNaturalistReactNative.xcodeproj/project.pbxproj +++ b/ios/iNaturalistReactNative.xcodeproj/project.pbxproj @@ -7,13 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 00E356F31AD99517003FC87E /* iNaturalistReactNativeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* iNaturalistReactNativeTests.m */; }; 085DD3205807404CAFC32228 /* Lato-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3A9BAF07FCF24F668E2EF5AB /* Lato-Medium.ttf */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 191A91132CD1916800ECC774 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 191A91122CD1916800ECC774 /* InfoPlist.xcstrings */; }; - 191A91142CD1916800ECC774 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 191A91122CD1916800ECC774 /* InfoPlist.xcstrings */; }; 191A91152CD1916800ECC774 /* InfoPlist.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 191A91122CD1916800ECC774 /* InfoPlist.xcstrings */; }; 1956B4912A7C3C1E00BBBDE4 /* link-inat-model-files.sh in Resources */ = {isa = PBXBuildFile; fileRef = 1956B4902A7C3C1E00BBBDE4 /* link-inat-model-files.sh */; }; 197A169D2A7C2567001A03DC /* cvmodel.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 197A169B2A7C2567001A03DC /* cvmodel.mlmodel */; }; @@ -28,7 +26,6 @@ 8B65ED3529F575C10054CCEF /* iNaturalistReactNative-ShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 8B65ED2B29F575C10054CCEF /* iNaturalistReactNative-ShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 8B65ED3B29F575FE0054CCEF /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B65ED3A29F575FE0054CCEF /* ShareViewController.swift */; }; 8F1AC6772BC1B610002F994B /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 8F1AC6762BC1B610002F994B /* PrivacyInfo.xcprivacy */; }; - 8F1AC6782BC1B610002F994B /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 8F1AC6762BC1B610002F994B /* PrivacyInfo.xcprivacy */; }; 8F1AC6792BC1B610002F994B /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 8F1AC6762BC1B610002F994B /* PrivacyInfo.xcprivacy */; }; 8F346E4A2CF6912700CED7B4 /* geomodel.mlmodel in Sources */ = {isa = PBXBuildFile; fileRef = 8F346E492CF6912700CED7B4 /* geomodel.mlmodel */; }; A124BFAECECB80521E10569D /* libPods-iNaturalistReactNative-ShareExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 958625FE96E0ECACF1B4B978 /* libPods-iNaturalistReactNative-ShareExtension.a */; }; @@ -38,13 +35,6 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 13B07F861A680F5B00A75B9A; - remoteInfo = iNaturalistReactNative; - }; 8B65ED3329F575C10054CCEF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; @@ -70,9 +60,6 @@ /* Begin PBXFileReference section */ 00752F4ADC554701A45A848A /* Lato-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Lato-Bold.ttf"; path = "../assets/fonts/Lato-Bold.ttf"; sourceTree = ""; }; - 00E356EE1AD99517003FC87E /* iNaturalistReactNativeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iNaturalistReactNativeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 00E356F21AD99517003FC87E /* iNaturalistReactNativeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iNaturalistReactNativeTests.m; sourceTree = ""; }; 06E20E5358FDFF430DB96A37 /* Pods-iNaturalistReactNative.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iNaturalistReactNative.debug.xcconfig"; path = "Target Support Files/Pods-iNaturalistReactNative/Pods-iNaturalistReactNative.debug.xcconfig"; sourceTree = ""; }; 0972395C34134C71A54A2A5D /* INatIcon.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = INatIcon.ttf; path = ../assets/fonts/INatIcon.ttf; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* iNaturalistReactNative.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iNaturalistReactNative.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -111,13 +98,6 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 00E356EB1AD99517003FC87E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -138,23 +118,6 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 00E356EF1AD99517003FC87E /* iNaturalistReactNativeTests */ = { - isa = PBXGroup; - children = ( - 00E356F21AD99517003FC87E /* iNaturalistReactNativeTests.m */, - 00E356F01AD99517003FC87E /* Supporting Files */, - ); - path = iNaturalistReactNativeTests; - sourceTree = ""; - }; - 00E356F01AD99517003FC87E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 00E356F11AD99517003FC87E /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; 13B07FAE1A68108700A75B9A /* iNaturalistReactNative */ = { isa = PBXGroup; children = ( @@ -217,7 +180,6 @@ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, 13B07FAE1A68108700A75B9A /* iNaturalistReactNative */, 832341AE1AAA6A7D00B99B32 /* Libraries */, - 00E356EF1AD99517003FC87E /* iNaturalistReactNativeTests */, 8B65ED2C29F575C10054CCEF /* iNaturalistReactNative-ShareExtension */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, @@ -234,7 +196,6 @@ isa = PBXGroup; children = ( 13B07F961A680F5B00A75B9A /* iNaturalistReactNative.app */, - 00E356EE1AD99517003FC87E /* iNaturalistReactNativeTests.xctest */, 8B65ED2B29F575C10054CCEF /* iNaturalistReactNative-ShareExtension.appex */, ); name = Products; @@ -269,24 +230,6 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 00E356ED1AD99517003FC87E /* iNaturalistReactNativeTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "iNaturalistReactNativeTests" */; - buildPhases = ( - 00E356EA1AD99517003FC87E /* Sources */, - 00E356EB1AD99517003FC87E /* Frameworks */, - 00E356EC1AD99517003FC87E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 00E356F51AD99517003FC87E /* PBXTargetDependency */, - ); - name = iNaturalistReactNativeTests; - productName = iNaturalistReactNativeTests; - productReference = 00E356EE1AD99517003FC87E /* iNaturalistReactNativeTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; 13B07F861A680F5B00A75B9A /* iNaturalistReactNative */ = { isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "iNaturalistReactNative" */; @@ -338,10 +281,6 @@ LastSwiftUpdateCheck = 1420; LastUpgradeCheck = 1210; TargetAttributes = { - 00E356ED1AD99517003FC87E = { - CreatedOnToolsVersion = 6.2; - TestTargetID = 13B07F861A680F5B00A75B9A; - }; 13B07F861A680F5B00A75B9A = { LastSwiftMigration = 1340; }; @@ -366,22 +305,12 @@ projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* iNaturalistReactNative */, - 00E356ED1AD99517003FC87E /* iNaturalistReactNativeTests */, 8B65ED2A29F575C10054CCEF /* iNaturalistReactNative-ShareExtension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 00E356EC1AD99517003FC87E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 191A91142CD1916800ECC774 /* InfoPlist.xcstrings in Resources */, - 8F1AC6782BC1B610002F994B /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F8E1A680F5B00A75B9A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -529,14 +458,6 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 00E356EA1AD99517003FC87E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 00E356F31AD99517003FC87E /* iNaturalistReactNativeTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 13B07F871A680F5B00A75B9A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -559,11 +480,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 13B07F861A680F5B00A75B9A /* iNaturalistReactNative */; - targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; - }; 8B65ED3429F575C10054CCEF /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 8B65ED2A29F575C10054CCEF /* iNaturalistReactNative-ShareExtension */; @@ -583,59 +499,6 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 00E356F61AD99517003FC87E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = N5J7L4P93Z; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = iNaturalistReactNativeTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iNaturalistReactNative.app/iNaturalistReactNative"; - }; - name = Debug; - }; - 00E356F71AD99517003FC87E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = N5J7L4P93Z; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "i386 arm64"; - INFOPLIST_FILE = iNaturalistReactNativeTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "-lc++", - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/iNaturalistReactNative.app/iNaturalistReactNative"; - }; - name = Release; - }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 06E20E5358FDFF430DB96A37 /* Pods-iNaturalistReactNative.debug.xcconfig */; @@ -1142,15 +1005,6 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "iNaturalistReactNativeTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 00E356F61AD99517003FC87E /* Debug */, - 00E356F71AD99517003FC87E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "iNaturalistReactNative" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/ios/iNaturalistReactNative/AppDelegate.mm b/ios/iNaturalistReactNative/AppDelegate.mm index deb56e2b7..21dc775b4 100644 --- a/ios/iNaturalistReactNative/AppDelegate.mm +++ b/ios/iNaturalistReactNative/AppDelegate.mm @@ -1,6 +1,7 @@ #import "AppDelegate.h" #import +#import #import #import @@ -29,6 +30,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.moduleName = @"iNaturalistReactNative"; + self.dependencyProvider = [RCTAppDependencyProvider new]; // You can add your custom initial props in the dictionary below. // They will be passed down to the ViewController used by React Native. self.initialProps = @{}; diff --git a/ios/iNaturalistReactNativeTests/INatMobileReactNativeTests.m b/ios/iNaturalistReactNativeTests/INatMobileReactNativeTests.m deleted file mode 100644 index b40dbe5da..000000000 --- a/ios/iNaturalistReactNativeTests/INatMobileReactNativeTests.m +++ /dev/null @@ -1,66 +0,0 @@ -#import -#import - -#import -#import - -#define TIMEOUT_SECONDS 600 -#define TEXT_TO_LOOK_FOR @"Welcome to React" - -@interface iNaturalistReactNativeTests : XCTestCase - -@end - -@implementation iNaturalistReactNativeTests - -- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test -{ - if (test(view)) { - return YES; - } - for (UIView *subview in [view subviews]) { - if ([self findSubviewInView:subview matching:test]) { - return YES; - } - } - return NO; -} - -- (void)testRendersWelcomeScreen -{ - UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; - NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; - BOOL foundElement = NO; - - __block NSString *redboxError = nil; -#ifdef DEBUG - RCTSetLogFunction( - ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { - if (level >= RCTLogLevelError) { - redboxError = message; - } - }); -#endif - - while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { - [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - - foundElement = [self findSubviewInView:vc.view - matching:^BOOL(UIView *view) { - if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { - return YES; - } - return NO; - }]; - } - -#ifdef DEBUG - RCTSetLogFunction(RCTDefaultLogFunction); -#endif - - XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); - XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); -} - -@end \ No newline at end of file diff --git a/ios/iNaturalistReactNativeTests/Info.plist b/ios/iNaturalistReactNativeTests/Info.plist deleted file mode 100644 index fc6c6388a..000000000 --- a/ios/iNaturalistReactNativeTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0.8 - CFBundleSignature - ???? - CFBundleVersion - 174 - - diff --git a/metro.config.js b/metro.config.js index 42b5136fc..34c8a12e6 100644 --- a/metro.config.js +++ b/metro.config.js @@ -21,7 +21,7 @@ const localPackagePaths = [ * Metro configuration * https://facebook.github.io/metro/docs/configuration * - * @type {import('metro-config').MetroConfig} + * @type {import('@react-native/metro-config').MetroConfig} */ const config = { transformer: { diff --git a/package-lock.json b/package-lock.json index 7ec9d81cf..bc5c7a0fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-i18next": "^14.1.0", - "react-native": "0.76.9", + "react-native": "0.77.2", "react-native-animated-dots-carousel": "^2.0.0", "react-native-audio-recorder-player": "^3.6.7", "react-native-bouncy-checkbox": "^3.0.7", @@ -75,7 +75,7 @@ "react-native-mail": "github:chirag04/react-native-mail", "react-native-maps": "^1.13.0", "react-native-mmkv": "^2.12.2", - "react-native-modal": "^13.0.1", + "react-native-modal": "^14.0.0-rc.1", "react-native-modal-datetime-picker": "^18.0.0", "react-native-open-maps": "^0.4.3", "react-native-orientation-locker": "github:wonday/react-native-orientation-locker", @@ -114,14 +114,14 @@ "@react-native-community/cli": "15.0.1", "@react-native-community/cli-platform-android": "15.0.1", "@react-native-community/cli-platform-ios": "15.0.1", - "@react-native/babel-preset": "0.76.9", - "@react-native/eslint-config": "0.76.9", - "@react-native/metro-config": "0.76.9", - "@react-native/typescript-config": "0.76.9", + "@react-native/babel-preset": "0.77.2", + "@react-native/eslint-config": "0.77.2", + "@react-native/metro-config": "0.77.2", + "@react-native/typescript-config": "0.77.2", "@tanstack/eslint-plugin-query": "^5.28.11", "@testing-library/jest-native": "^5.4.3", "@testing-library/react-native": "^12.4.5", - "@types/jest": "^29.5.12", + "@types/jest": "^29.5.13", "@types/jsrsasign": "^10.5.15", "@types/lodash": "^4.17.14", "@types/markdown-it": "^14.1.2", @@ -130,7 +130,6 @@ "@types/react-test-renderer": "^18.0.7", "@types/sanitize-html": "^2.13.0", "@typescript-eslint/eslint-plugin": "^8.32.1", - "babel-jest": "^29.6.3", "babel-plugin-module-resolver": "^5.0.0", "babel-plugin-transform-inline-environment-variables": "^0.4.4", "babel-plugin-transform-remove-console": "^6.9.4", @@ -676,22 +675,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-export-default-from": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz", @@ -706,39 +689,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", @@ -2102,15 +2052,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", - "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-syntax-jsx": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-typescript": "^7.24.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -4592,28 +4542,29 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.9.tgz", - "integrity": "sha512-pN0Ws5xsjWOZ8P37efh0jqHHQmq+oNGKT4AyAoKRpxBDDDmlAmpaYjer9Qz7PpDKF+IUyRjF/+rBsM50a8JcUg==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.77.2.tgz", + "integrity": "sha512-AcEhFjndzBWVVhaHaASk36vhA83iDVkQbFYb0D0vATzjuJ67vhhHVLae0+JtHl5jhghotUFDg4Vj/1QbZNDyyQ==", "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.9.tgz", - "integrity": "sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.77.2.tgz", + "integrity": "sha512-2PShbsfsa4NZS+Zt0y2tl1AoWza5podKFmPE5qcYjJoN915VoH3BRkiTVlSpYNKmdvs31o1aQuXAMQDTh7DZ/g==", "dependencies": { - "@react-native/codegen": "0.76.9" + "@babel/traverse": "^7.25.3", + "@react-native/codegen": "0.77.2" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.9.tgz", - "integrity": "sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.77.2.tgz", + "integrity": "sha512-If6X4I0z6W5aVzqZS4JOrN7sh08w1QzEL8Q66i3g0wI8K8ZK+V+/ARlEmboy14VtcOYlmmjXEqSCv+Z2o9cuKg==", "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-proposal-export-default-from": "^7.24.7", @@ -4656,8 +4607,8 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.76.9", - "babel-plugin-syntax-hermes-parser": "^0.25.1", + "@react-native/babel-plugin-codegen": "0.77.2", + "babel-plugin-syntax-hermes-parser": "0.25.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" }, @@ -4669,16 +4620,15 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.9.tgz", - "integrity": "sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.77.2.tgz", + "integrity": "sha512-uJSGm9Sp9K5XAhb17cty6iOc2lZpORQKMpS61/B3gYwe9LNz9TJpcfq1L2+3Mv6lppqsulOH9+fslapo0OTfSQ==", "dependencies": { "@babel/parser": "^7.25.3", "glob": "^7.1.1", - "hermes-parser": "0.23.1", + "hermes-parser": "0.25.1", "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", + "jscodeshift": "^17.0.0", "nullthrows": "^1.1.1", "yargs": "^17.6.2" }, @@ -4710,19 +4660,18 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.9.tgz", - "integrity": "sha512-08jx8ixCjjd4jNQwNpP8yqrjrDctN2qvPPlf6ebz1OJQk8e1sbUl3wVn1zhhMvWrYcaraDnatPb5uCPq+dn3NQ==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.77.2.tgz", + "integrity": "sha512-Dc93eXHhzhnRy+vF3wOdM8C4dplLpT7ItpUpYrDeA1ffHUImwWpcupB6vpX9+l3UaaJ1cPfdxTjB2d1ACVKOaA==", "dependencies": { - "@react-native/dev-middleware": "0.76.9", - "@react-native/metro-babel-transformer": "0.76.9", + "@react-native/dev-middleware": "0.77.2", + "@react-native/metro-babel-transformer": "0.77.2", "chalk": "^4.0.0", - "execa": "^5.1.1", + "debug": "^2.2.0", "invariant": "^2.2.4", - "metro": "^0.81.0", - "metro-config": "^0.81.0", - "metro-core": "^0.81.0", - "node-fetch": "^2.2.0", + "metro": "^0.81.3", + "metro-config": "^0.81.3", + "metro-core": "^0.81.3", "readline": "^1.3.0", "semver": "^7.1.3" }, @@ -4783,6 +4732,19 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/@react-native/community-cli-plugin/node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -4795,20 +4757,20 @@ } }, "node_modules/@react-native/debugger-frontend": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.9.tgz", - "integrity": "sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.77.2.tgz", + "integrity": "sha512-MRLjQLJr9C0M/TggoycEgYR7lUEZph4cg5PhUwBoNyRquV7lGHqMKNkfMBYBT09cuwKn9O+cFvQOmMNVqsPLxw==", "engines": { "node": ">=18" } }, "node_modules/@react-native/dev-middleware": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.9.tgz", - "integrity": "sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.77.2.tgz", + "integrity": "sha512-LBK0kY4XxE4vHVHJ3TwBGXmjl2ad9dsbbwnVgXwYNL/mkkWb2MHlmgHj6xlCMe1gtLtem2TpEF17TKg50ykPJw==", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.76.9", + "@react-native/debugger-frontend": "0.77.2", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", @@ -4817,7 +4779,7 @@ "nullthrows": "^1.1.1", "open": "^7.0.3", "selfsigned": "^2.4.1", - "serve-static": "^1.13.1", + "serve-static": "^1.16.2", "ws": "^6.2.3" }, "engines": { @@ -4861,14 +4823,14 @@ } }, "node_modules/@react-native/eslint-config": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.76.9.tgz", - "integrity": "sha512-qPAF8o01NQBOfpr+oaVXRABC/GEqNs378cUBNsqQjXpVHJtF13cbMF+2YEpp4zKfv3JSWtdrHd3oAK0UF86O4Q==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/eslint-config/-/eslint-config-0.77.2.tgz", + "integrity": "sha512-buxBnJU0YLxdkUqn85ZG7BoCjSEjia4HMcnl4X81UQSLM8Z0xCL01QeqHhxxfhYFFkiHwsJILBgHEZizx/hsdQ==", "dev": true, "dependencies": { "@babel/core": "^7.25.2", "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.76.9", + "@react-native/eslint-plugin": "0.77.2", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint-config-prettier": "^8.5.0", @@ -5182,38 +5144,38 @@ } }, "node_modules/@react-native/eslint-plugin": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.76.9.tgz", - "integrity": "sha512-8tIIbICmbsYBUy/Zxl7FF9O0OfQa2ycBUHOWiAN16l7fR9CEyfqM3wY5gcJFPTB9gafGfOR/44876S/vhzNdCQ==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/eslint-plugin/-/eslint-plugin-0.77.2.tgz", + "integrity": "sha512-52kD16gqvb1rwD99ivNy+PnFnL1hCfBTIOrmFnZk4Lx7gatNJvAPq/u8ONGmrk73sPRoVxuinKWYirS1kB0UdQ==", "dev": true, "engines": { "node": ">=18" } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.9.tgz", - "integrity": "sha512-uGzp3dL4GfNDz+jOb8Nik1Vrfq1LHm0zESizrGhHACFiFlUSflVAnWuUAjlZlz5XfLhzGVvunG4Vdrpw8CD2ng==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.77.2.tgz", + "integrity": "sha512-M3kU6xnn/06CGdezd31wn64v/BuKdw19K3GjOcRe1L+zKYEeezRovEVgzCNsXLcNtXUfJvmrIN4uYnqmgrJGfg==", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.9.tgz", - "integrity": "sha512-s6z6m8cK4SMjIX1hm8LT187aQ6//ujLrjzDBogqDCYXRbfjbAYovw5as/v2a2rhUIyJbS3UjokZm3W0H+Oh/RQ==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.77.2.tgz", + "integrity": "sha512-qwKeYqRANL8CKzeVWOdhRZJ7LBqqoiXR+cb5yGwVKQxqesrx5Y7gYyq6GP1zRMnhv9iQAY7Rwub8TvDxi2YP6Q==", "engines": { "node": ">=18" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.9.tgz", - "integrity": "sha512-HGq11347UHNiO/NvVbAO35hQCmH8YZRs7in7nVq7SL99pnpZK4WXwLdAXmSuwz5uYqOuwnKYDlpadz8fkE94Mg==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.77.2.tgz", + "integrity": "sha512-vSG1/d5peUo50aqaBbNnVGE5QxQTSY3j0OWmixfJqiX11wwO3tR2niKxH8OjB3WuSsROgJzosMe9kMsQJQ3ONA==", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.76.9", - "hermes-parser": "0.23.1", + "@react-native/babel-preset": "0.77.2", + "hermes-parser": "0.25.1", "nullthrows": "^1.1.1" }, "engines": { @@ -5224,29 +5186,29 @@ } }, "node_modules/@react-native/metro-config": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.76.9.tgz", - "integrity": "sha512-LWsj7mUfujALUa+iGuEGzW4BqtuHa8zI3zS2T+uIjy2vI40+hRoP70iPOEiesNwVQTq/uSZELbe3HAo4WaX5gA==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/metro-config/-/metro-config-0.77.2.tgz", + "integrity": "sha512-BEyqSB3rbf5jlyuUttes+FuvSJwBW8iSZdz7/W0ZOUeRysCaUXCqBZKvNEy/OlSBoJhZnyDRHpuV/4Z7/OEkjw==", "dev": true, "dependencies": { - "@react-native/js-polyfills": "0.76.9", - "@react-native/metro-babel-transformer": "0.76.9", - "metro-config": "^0.81.0", - "metro-runtime": "^0.81.0" + "@react-native/js-polyfills": "0.77.2", + "@react-native/metro-babel-transformer": "0.77.2", + "metro-config": "^0.81.3", + "metro-runtime": "^0.81.3" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/normalize-colors": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.9.tgz", - "integrity": "sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==" + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.77.2.tgz", + "integrity": "sha512-knKStQKX4KM8GkieeayotcSTO7I7PIZxwI71nhK/zBeRPqhDTJMNJQh5TnZJ63fO1Y+EZclWkRIKEj+aFRsssw==" }, "node_modules/@react-native/typescript-config": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.76.9.tgz", - "integrity": "sha512-68xGswpZOrCvDd1Wu6H7ZdluIDmNbN0Uq8RVnm+IQMnYx90fVHL+iNW4hClgoY/TIcsWnQQL6shES4n/1kz/fg==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/typescript-config/-/typescript-config-0.77.2.tgz", + "integrity": "sha512-eLhPKyI/6YfxkmY9MLItWMj+q/SLukXzJXL3mw8CIdQfI0S3r3Ok9oX4BvOowGmy7zINaeDwTcgOVtVKLRHS/w==", "dev": true }, "node_modules/@react-native/virtualized-lists": { @@ -6217,9 +6179,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -7561,9 +7523,9 @@ "license": "MIT" }, "node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", "dependencies": { "tslib": "^2.0.1" }, @@ -7651,14 +7613,6 @@ "node": ">= 0.4" } }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -7868,19 +7822,6 @@ "hermes-parser": "0.25.1" } }, - "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-estree": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==" - }, - "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", - "dependencies": { - "hermes-estree": "0.25.1" - } - }, "node_modules/babel-plugin-transform-flow-enums": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", @@ -8932,6 +8873,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "devOptional": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -11227,6 +11169,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "devOptional": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -11630,9 +11573,9 @@ "license": "MIT" }, "node_modules/flow-parser": { - "version": "0.274.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.274.1.tgz", - "integrity": "sha512-36beNwzemgBeQafXqMOajET0iMWVF0AcW5zQi6Dy1B/GurBFCj3s4aT2DQbd4yhMt9onvR1eFhfIEDZ49pvBmQ==", + "version": "0.274.2", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.274.2.tgz", + "integrity": "sha512-kCjoA1h5j+Ttu/9fekY9XzeKPG8SvNtxigiCkezmDIOlcKr+d9LysczrPylEeSYINE3sLlX45W5vT2CroD6sWA==", "engines": { "node": ">=0.4.0" } @@ -11866,6 +11809,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "devOptional": true, "engines": { "node": ">=10" }, @@ -12110,16 +12054,16 @@ } }, "node_modules/hermes-estree": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz", - "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==" + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==" }, "node_modules/hermes-parser": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz", - "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", "dependencies": { - "hermes-estree": "0.23.1" + "hermes-estree": "0.25.1" } }, "node_modules/hoist-non-react-statics": { @@ -12202,6 +12146,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "devOptional": true, "engines": { "node": ">=10.17.0" } @@ -12792,6 +12737,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "devOptional": true, "engines": { "node": ">=8" }, @@ -12910,7 +12856,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "devOptional": true }, "node_modules/isobject": { "version": "3.0.1", @@ -14514,90 +14461,73 @@ "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==" }, "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-17.3.0.tgz", + "integrity": "sha512-LjFrGOIORqXBU+jwfC9nbkjmQfFldtMIoS6d9z2LG/lkmyNXsJAySPT+2SWXJEoE68/bCWcxKpXH37npftgmow==", "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", + "@babel/core": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/preset-flow": "^7.24.7", + "@babel/preset-typescript": "^7.24.7", + "@babel/register": "^7.24.6", "flow-parser": "0.*", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", + "micromatch": "^4.0.7", "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" + "picocolors": "^1.0.1", + "recast": "^0.23.11", + "tmp": "^0.2.3", + "write-file-atomic": "^5.0.1" }, "bin": { "jscodeshift": "bin/jscodeshift.js" }, + "engines": { + "node": ">=16" + }, "peerDependencies": { "@babel/preset-env": "^7.1.6" + }, + "peerDependenciesMeta": { + "@babel/preset-env": { + "optional": true + } } }, - "node_modules/jscodeshift/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/jscodeshift/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jscodeshift/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/jscodeshift/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=14.14" } }, - "node_modules/jscodeshift/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jscodeshift/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dependencies": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/jsesc": { @@ -15321,19 +15251,6 @@ "node": ">=18.18" } }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==" - }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", - "dependencies": { - "hermes-estree": "0.25.1" - } - }, "node_modules/metro-cache": { "version": "0.81.5", "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.81.5.tgz", @@ -15654,19 +15571,6 @@ "ms": "2.0.0" } }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==" - }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", - "dependencies": { - "hermes-estree": "0.25.1" - } - }, "node_modules/metro/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -15727,6 +15631,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "devOptional": true, "engines": { "node": ">=6" } @@ -15784,6 +15689,8 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "optional": true, "dependencies": { "minimist": "^1.2.6" }, @@ -16045,17 +15952,6 @@ "node": ">=10" } }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, "node_modules/node-downloader-helper": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.9.tgz", @@ -16072,6 +15968,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -16159,6 +16056,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "devOptional": true, "dependencies": { "path-key": "^3.0.0" }, @@ -16355,6 +16253,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "devOptional": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -16781,6 +16680,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "devOptional": true, "engines": { "node": ">=8" } @@ -17418,10 +17318,9 @@ } }, "node_modules/react-devtools-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.2.tgz", - "integrity": "sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==", - "license": "MIT", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.3.tgz", + "integrity": "sha512-4be9IVco12d/4D7NpZgNjffbYIo/MAk4f5eBJR8PpKyiR7tgwe29liQbxyqDov5Ybc2crGABZyYAmdeU6NowKg==", "dependencies": { "shell-quote": "^1.6.1", "ws": "^7" @@ -17478,23 +17377,23 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.9.tgz", - "integrity": "sha512-+LRwecWmTDco7OweGsrECIqJu0iyrREd6CTCgC/uLLYipiHvk+MH9nd6drFtCw/6Blz6eoKTcH9YTTJusNtrWg==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.77.2.tgz", + "integrity": "sha512-TE9JXsuiuWL/dmYvSvlLJQFEzZowQPzcn/9vU7vhTTJzNLnUtA33aMNoSU14Y8XikUUwmjYahRe71zjFJp6Kmw==", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.76.9", - "@react-native/codegen": "0.76.9", - "@react-native/community-cli-plugin": "0.76.9", - "@react-native/gradle-plugin": "0.76.9", - "@react-native/js-polyfills": "0.76.9", - "@react-native/normalize-colors": "0.76.9", - "@react-native/virtualized-lists": "0.76.9", + "@react-native/assets-registry": "0.77.2", + "@react-native/codegen": "0.77.2", + "@react-native/community-cli-plugin": "0.77.2", + "@react-native/gradle-plugin": "0.77.2", + "@react-native/js-polyfills": "0.77.2", + "@react-native/normalize-colors": "0.77.2", + "@react-native/virtualized-lists": "0.77.2", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "^0.23.1", + "babel-plugin-syntax-hermes-parser": "0.25.1", "base64-js": "^1.5.1", "chalk": "^4.0.0", "commander": "^12.0.0", @@ -17505,13 +17404,12 @@ "jest-environment-node": "^29.6.3", "jsc-android": "^250231.0.0", "memoize-one": "^5.0.0", - "metro-runtime": "^0.81.0", - "metro-source-map": "^0.81.0", - "mkdirp": "^0.5.1", + "metro-runtime": "^0.81.3", + "metro-source-map": "^0.81.3", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", - "react-devtools-core": "^5.3.1", + "react-devtools-core": "^6.0.1", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.24.0-canary-efb381bbf-20230505", @@ -17552,11 +17450,11 @@ } }, "node_modules/react-native-animatable": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/react-native-animatable/-/react-native-animatable-1.3.3.tgz", - "integrity": "sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-native-animatable/-/react-native-animatable-1.4.0.tgz", + "integrity": "sha512-DZwaDVWm2NBvBxf7I0wXKXLKb/TxDnkV53sWhCvei1pRyTX3MVFpkvdYBknNBqPrxYuAIlPxEp7gJOidIauUkw==", "dependencies": { - "prop-types": "^15.7.2" + "prop-types": "^15.8.1" } }, "node_modules/react-native-animated-dots-carousel": { @@ -17875,16 +17773,15 @@ } }, "node_modules/react-native-modal": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/react-native-modal/-/react-native-modal-13.0.1.tgz", - "integrity": "sha512-UB+mjmUtf+miaG/sDhOikRfBOv0gJdBU2ZE1HtFWp6UixW9jCk/bhGdHUgmZljbPpp0RaO/6YiMmQSSK3kkMaw==", + "version": "14.0.0-rc.1", + "resolved": "https://registry.npmjs.org/react-native-modal/-/react-native-modal-14.0.0-rc.1.tgz", + "integrity": "sha512-v5pvGyx1FlmBzdHyPqBsYQyS2mIJhVmuXyNo5EarIzxicKhuoul6XasXMviGcXboEUT0dTYWs88/VendojPiVw==", "dependencies": { - "prop-types": "^15.6.2", - "react-native-animatable": "1.3.3" + "react-native-animatable": "1.4.0" }, "peerDependencies": { "react": "*", - "react-native": ">=0.65.0" + "react-native": ">=0.70.0" } }, "node_modules/react-native-modal-datetime-picker": { @@ -18241,9 +18138,9 @@ } }, "node_modules/react-native/node_modules/@react-native/virtualized-lists": { - "version": "0.76.9", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.9.tgz", - "integrity": "sha512-2neUfZKuqMK2LzfS8NyOWOyWUJOWgDym5fUph6fN9qF+LNPjAvnc4Zr9+o+59qjNu/yXwQgVMWNU4+8WJuPVWw==", + "version": "0.77.2", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.77.2.tgz", + "integrity": "sha512-d0kzoidY3x4jvWwrH4xH4a2/APb+0QhtOMgkxh7vJa4b5b6decQzMt7F86h0y30auR+MrcJnYlObRJIDC0VWaQ==", "dependencies": { "invariant": "^2.2.4", "nullthrows": "^1.1.1" @@ -18276,14 +18173,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-native/node_modules/babel-plugin-syntax-hermes-parser": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz", - "integrity": "sha512-uNLD0tk2tLUjGFdmCk+u/3FEw2o+BAwW4g+z2QVlxJrzZYOOPADroEcNtTPt5lNiScctaUmnsTkVEnOwZUOLhA==", - "dependencies": { - "hermes-parser": "0.23.1" - } - }, "node_modules/react-native/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -18506,13 +18395,14 @@ } }, "node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "version": "0.23.11", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", + "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", "dependencies": { - "ast-types": "0.15.2", + "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" }, "engines": { @@ -19207,6 +19097,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "devOptional": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -19218,6 +19109,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "devOptional": true, "engines": { "node": ">=8" } @@ -19718,6 +19610,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "devOptional": true, "engines": { "node": ">=6" } @@ -20016,17 +19909,6 @@ "url": "https://paypal.me/kozjak" } }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", @@ -20036,38 +19918,6 @@ "node": ">=4" } }, - "node_modules/temp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/tempfile": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", @@ -20197,6 +20047,11 @@ "dev": true, "license": "MIT" }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -20868,6 +20723,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "devOptional": true, "dependencies": { "isexe": "^2.0.0" }, diff --git a/package.json b/package.json index 0bf146ffb..ed05c853d 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-i18next": "^14.1.0", - "react-native": "0.76.9", + "react-native": "0.77.2", "react-native-animated-dots-carousel": "^2.0.0", "react-native-audio-recorder-player": "^3.6.7", "react-native-bouncy-checkbox": "^3.0.7", @@ -109,7 +109,7 @@ "react-native-mail": "github:chirag04/react-native-mail", "react-native-maps": "^1.13.0", "react-native-mmkv": "^2.12.2", - "react-native-modal": "^13.0.1", + "react-native-modal": "^14.0.0-rc.1", "react-native-modal-datetime-picker": "^18.0.0", "react-native-open-maps": "^0.4.3", "react-native-orientation-locker": "github:wonday/react-native-orientation-locker", @@ -148,14 +148,14 @@ "@react-native-community/cli": "15.0.1", "@react-native-community/cli-platform-android": "15.0.1", "@react-native-community/cli-platform-ios": "15.0.1", - "@react-native/babel-preset": "0.76.9", - "@react-native/eslint-config": "0.76.9", - "@react-native/metro-config": "0.76.9", - "@react-native/typescript-config": "0.76.9", + "@react-native/babel-preset": "0.77.2", + "@react-native/eslint-config": "0.77.2", + "@react-native/metro-config": "0.77.2", + "@react-native/typescript-config": "0.77.2", "@tanstack/eslint-plugin-query": "^5.28.11", "@testing-library/jest-native": "^5.4.3", "@testing-library/react-native": "^12.4.5", - "@types/jest": "^29.5.12", + "@types/jest": "^29.5.13", "@types/jsrsasign": "^10.5.15", "@types/lodash": "^4.17.14", "@types/markdown-it": "^14.1.2", @@ -164,7 +164,6 @@ "@types/react-test-renderer": "^18.0.7", "@types/sanitize-html": "^2.13.0", "@typescript-eslint/eslint-plugin": "^8.32.1", - "babel-jest": "^29.6.3", "babel-plugin-module-resolver": "^5.0.0", "babel-plugin-transform-inline-environment-variables": "^0.4.4", "babel-plugin-transform-remove-console": "^6.9.4", diff --git a/patches/react-native-modal+14.0.0-rc.1.patch b/patches/react-native-modal+14.0.0-rc.1.patch new file mode 100644 index 000000000..c6dd9f446 --- /dev/null +++ b/patches/react-native-modal+14.0.0-rc.1.patch @@ -0,0 +1,19 @@ +diff --git a/node_modules/react-native-modal/dist/modal.js b/node_modules/react-native-modal/dist/modal.js +index 74edee4..042e1db 100644 +--- a/node_modules/react-native-modal/dist/modal.js ++++ b/node_modules/react-native-modal/dist/modal.js +@@ -515,8 +515,13 @@ export class ReactNativeModal extends React.Component { + if (this.state.isSwipeable) { + panHandlers = { ...this.panResponder.panHandlers }; + if (useNativeDriver) { ++ const translateTransform = this.state.pan.getTranslateTransform(); + panPosition = { +- transform: this.state.pan.getTranslateTransform(), ++ transform: translateTransform.map(transform => { ++ const key = Object.keys(transform)[0]; ++ const value = transform[key]; ++ return { [key]: typeof value === 'object' && value !== null && '_value' in value ? value._value : value }; ++ }), + }; + } + else { diff --git a/src/components/Camera/StandardCamera/hooks/useBackPress.ts b/src/components/Camera/StandardCamera/hooks/useBackPress.ts index d57ba3beb..46d48e133 100644 --- a/src/components/Camera/StandardCamera/hooks/useBackPress.ts +++ b/src/components/Camera/StandardCamera/hooks/useBackPress.ts @@ -43,9 +43,9 @@ const useBackPress = ( shouldShowDiscardSheet: boolean ) => { return true; }; - BackHandler.addEventListener( "hardwareBackPress", onBackPress ); + const backHandler = BackHandler.addEventListener( "hardwareBackPress", onBackPress ); - return ( ) => BackHandler.removeEventListener( "hardwareBackPress", onBackPress ); + return ( ) => backHandler.remove( ); }, [handleBackButtonPress] ) ); diff --git a/src/components/ObsEdit/ObsEditHeader.js b/src/components/ObsEdit/ObsEditHeader.js index abc0d1816..286017f48 100644 --- a/src/components/ObsEdit/ObsEditHeader.js +++ b/src/components/ObsEdit/ObsEditHeader.js @@ -130,9 +130,9 @@ const ObsEditHeader = ( { return true; }; - BackHandler.addEventListener( "hardwareBackPress", onBackPress ); + const backHandler = BackHandler.addEventListener( "hardwareBackPress", onBackPress ); - return ( ) => BackHandler.removeEventListener( "hardwareBackPress", onBackPress ); + return ( ) => backHandler.remove( ); }, [handleBackButtonPress] ) ); diff --git a/tests/integration/PhotoDeletion.test.js b/tests/integration/PhotoDeletion.test.js index e4af3fd6e..46b003ee0 100644 --- a/tests/integration/PhotoDeletion.test.js +++ b/tests/integration/PhotoDeletion.test.js @@ -112,7 +112,8 @@ describe( "Photo Deletion", ( ) => { // Make sure we're on ObsEdit const evidenceTitle = await screen.findByText( "EVIDENCE" ); await waitFor( ( ) => { - expect( evidenceTitle ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( evidenceTitle ).toBeOnTheScreen( ); } ); const saveButton = await screen.findByText( "SAVE" ); await actor.press( saveButton ); @@ -125,13 +126,15 @@ describe( "Photo Deletion", ( ) => { async function expectNoPhotosInStandardCamera() { const noPhotoText = await screen.findByText( "Photos you take will appear here" ); - expect( noPhotoText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( noPhotoText ).toBeOnTheScreen( ); } async function viewPhotoFromObsEdit() { const evidenceItem = await screen.findByLabelText( "Select or drag media" ); await waitFor( ( ) => { - expect( evidenceItem ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( evidenceItem ).toBeOnTheScreen( ); } ); await actor.press( evidenceItem ); } @@ -139,7 +142,8 @@ describe( "Photo Deletion", ( ) => { async function expectObsEditToHaveNoPhotos() { // Make sure we're on ObsEdit const evidenceTitle = await screen.findByText( "EVIDENCE" ); - expect( evidenceTitle ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( evidenceTitle ).toBeOnTheScreen( ); // Confirm there is no evidence const evidenceItems = screen.queryAllByLabelText( "Select or drag media" ); expect( evidenceItems.length ).toEqual( 0 ); diff --git a/tests/integration/PhotoImport.test.js b/tests/integration/PhotoImport.test.js index 6540c0369..c6980f0e0 100644 --- a/tests/integration/PhotoImport.test.js +++ b/tests/integration/PhotoImport.test.js @@ -110,7 +110,8 @@ describe( "Photo Import", ( ) => { async function groupPhotosIntoObservation() { const groupPhotosText = await screen.findByText( /Group Photos/ ); - expect( groupPhotosText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( groupPhotosText ).toBeOnTheScreen( ); const path = "file://document/directory/path/galleryPhotos/"; const firstUri = `${path}${mockImageLibraryResponseMultiplePhotos.assets[0].fileName}`; const secondUri = `${path}${mockImageLibraryResponseMultiplePhotos.assets[1].fileName}`; @@ -134,11 +135,13 @@ describe( "Photo Import", ( ) => { async function saveObservationWithPhoto() { // Make sure we're on ObsEdit const evidenceTitle = await screen.findByText( "EVIDENCE" ); - expect( evidenceTitle ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( evidenceTitle ).toBeOnTheScreen( ); const localFilePath = `file://document/directory/path/photoUploads/${mockFileName}`; const photoEvidence = await screen.findByTestId( `EvidenceList.${localFilePath}` ); - expect( photoEvidence ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( photoEvidence ).toBeOnTheScreen( ); const saveButton = await screen.findByText( "SAVE" ); await actor.press( saveButton ); const okButton = await screen.findByText( "OK" ); @@ -148,7 +151,8 @@ describe( "Photo Import", ( ) => { await screen.findByText( /Upload \d observation/ ); const obsGridItems = await screen.findAllByTestId( /MyObservations\.obsGridItem\..*/ ); await waitFor( () => { - expect( obsGridItems[0] ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( obsGridItems[0] ).toBeOnTheScreen( ); }, { timeout: 3_000, interval: 500 } ); } diff --git a/tests/integration/SuggestionsWithSyncedObs.test.js b/tests/integration/SuggestionsWithSyncedObs.test.js index 4c44ea886..e85bd41e8 100644 --- a/tests/integration/SuggestionsWithSyncedObs.test.js +++ b/tests/integration/SuggestionsWithSyncedObs.test.js @@ -168,7 +168,8 @@ afterEach( ( ) => { // const { observations } = await setupAppWithSignedInUser( ); // await navigateToTaxonSearchForObservation( observations[0] ); // const searchInput = await screen.findByLabelText( "Search for a taxon" ); -// expect( searchInput ).toBeVisible( ); +// We used toBeVisible here but the update to RN0.77 broke this expectation +// expect( searchInput ).toBeOnTheScreen( ); // await act( // async ( ) => actor.type( // searchInput, @@ -261,24 +262,30 @@ describe( "Suggestions", ( ) => { const topTaxonResultButton = await screen.findByTestId( `SuggestionsList.taxa.${taxonId}.checkmark` ); - expect( topTaxonResultButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( topTaxonResultButton ).toBeOnTheScreen( ); await actor.press( topTaxonResultButton ); const activityTabBtn = await screen.findByText( /ACTIVITY/ ); - expect( activityTabBtn ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( activityTabBtn ).toBeOnTheScreen( ); await actor.press( activityTabBtn ); const activityTab = await screen.findByTestId( "ActivityTab" ); - expect( activityTab ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( activityTab ).toBeOnTheScreen( ); // open bottom sheet const bottomSheetText = await screen.findByText( /Would you like to suggest the following identification/ ); - expect( bottomSheetText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( bottomSheetText ).toBeOnTheScreen( ); const confirmButton = await screen.findByTestId( "SuggestIDSheet.cvSuggestionsButton" ); - expect( confirmButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( confirmButton ).toBeOnTheScreen( ); await actor.press( confirmButton ); // Wait for the actual identification we created to appear const taxonNameInIdent = await within( activityTab ).findByText( topSuggestion.taxon.name ); - expect( taxonNameInIdent ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( taxonNameInIdent ).toBeOnTheScreen( ); expect( inatjs.identifications.create ).toHaveBeenCalledWith( { fields: Identification.ID_FIELDS, identification: { @@ -307,7 +314,8 @@ describe( "Suggestions", ( ) => { `MyObservations.obsGridItem.${observations[0].uuid}` ); await waitFor( ( ) => { - expect( observationGridItem ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( observationGridItem ).toBeOnTheScreen( ); }, { timeout: 3000, interval: 500 } ); const savedObservation = global.mockRealms[__filename] .objectForPrimaryKey( "Observation", observations[0].uuid ); diff --git a/tests/integration/SuggestionsWithUnsyncedObs.test.js b/tests/integration/SuggestionsWithUnsyncedObs.test.js index 74345da29..9b680bf8d 100644 --- a/tests/integration/SuggestionsWithUnsyncedObs.test.js +++ b/tests/integration/SuggestionsWithUnsyncedObs.test.js @@ -200,7 +200,8 @@ const navigateToSuggestionsViaAICamera = async ( ) => { const takePhotoButton = await screen.findByLabelText( /Take photo/ ); await actor.press( takePhotoButton ); const addIDButton = await screen.findByText( /ADD AN ID/ ); - expect( addIDButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( addIDButton ).toBeOnTheScreen( ); }; const setupAppWithSignedInUser = async hasLocation => { @@ -267,9 +268,11 @@ describe( "from ObsEdit with human observation", ( ) => { const humanResultButton = await screen.findByTestId( `SuggestionsList.taxa.${humanSuggestion.taxon.id}.checkmark` ); - expect( humanResultButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( humanResultButton ).toBeOnTheScreen( ); const human = screen.getByText( /Homo sapiens/ ); - expect( human ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( human ).toBeOnTheScreen( ); const nonHumanSuggestion = screen.queryByText( /Primum/ ); expect( nonHumanSuggestion ).toBeFalsy( ); } @@ -293,7 +296,8 @@ describe( "from ObsEdit with human observation", ( ) => { const { observations } = await setupAppWithSignedInUser( true ); await navigateToSuggestionsForObservationViaObsEdit( observations[0] ); const ignoreLocationButton = await screen.findByText( /IGNORE LOCATION/ ); - expect( ignoreLocationButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( ignoreLocationButton ).toBeOnTheScreen( ); } ); } ); @@ -330,7 +334,8 @@ describe( "from AICamera directly", ( ) => { // expect( inatjs.computervision.score_image ).toHaveBeenCalled( ); // } ); // const ignoreLocationButton = screen.queryByText( /IGNORE LOCATION/ ); - // expect( ignoreLocationButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + // expect( ignoreLocationButton ).toBeOnTheScreen( ); // await actor.press( ignoreLocationButton ); // await waitFor( ( ) => { // expect( inatjs.computervision.score_image ).toHaveBeenCalledWith( @@ -342,7 +347,8 @@ describe( "from AICamera directly", ( ) => { // ); // } ); // const useLocationButton = await screen.findByText( /USE LOCATION/ ); - // expect( useLocationButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + // expect( useLocationButton ).toBeOnTheScreen( ); // } ); } ); @@ -377,7 +383,8 @@ describe( "from AICamera directly", ( ) => { await navigateToSuggestionsViaAICamera( ); await waitFor( ( ) => { global.timeTravel( ); - expect( screen.getByText( /IMPROVE THESE SUGGESTIONS/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( /IMPROVE THESE SUGGESTIONS/ ) ).toBeOnTheScreen( ); } ); const ignoreLocationButton = screen.queryByText( /IGNORE LOCATION/ ); expect( ignoreLocationButton ).toBeFalsy( ); @@ -435,12 +442,14 @@ describe( "from AICamera directly", ( ) => { const notConfidentText = await screen.findByText( /not confident enough to make a top ID suggestion/ ); await waitFor( ( ) => { - expect( notConfidentText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( notConfidentText ).toBeOnTheScreen( ); } ); const otherSuggestion = await screen.findByTestId( `SuggestionsList.taxa.${mockModelResultNoConfidence.predictions[1].taxon_id}.checkmark` ); - expect( otherSuggestion ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( otherSuggestion ).toBeOnTheScreen( ); } ); it( "should only show top human suggestion if human predicted offline", async ( ) => { diff --git a/tests/integration/navigation/AICamera.test.js b/tests/integration/navigation/AICamera.test.js index 105aa608e..76fb75409 100644 --- a/tests/integration/navigation/AICamera.test.js +++ b/tests/integration/navigation/AICamera.test.js @@ -134,7 +134,8 @@ const takePhotoAndNavToSuggestions = async ( ) => { const takePhotoButton = await screen.findByLabelText( /Take photo/ ); await actor.press( takePhotoButton ); const addIDButton = await screen.findByText( /ADD AN ID/ ); - expect( addIDButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( addIDButton ).toBeOnTheScreen( ); }; const navToObsEditWithTopSuggestion = async ( ) => { @@ -143,7 +144,8 @@ const navToObsEditWithTopSuggestion = async ( ) => { ); await actor.press( topTaxonResultButton ); const evidenceList = await screen.findByTestId( "EvidenceList.DraggableFlatList" ); - expect( evidenceList ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( evidenceList ).toBeOnTheScreen( ); // one photo from AICamera expect( evidenceList.props.data.length ).toEqual( 1 ); }; @@ -153,7 +155,8 @@ describe( "AICamera navigation with advanced user layout", ( ) => { it( "should return to MyObs when close button tapped", async ( ) => { renderApp( ); await navToAICamera( ); - expect( await screen.findByText( /Loading iNaturalist's AI Camera/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByText( /Loading iNaturalist's AI Camera/ ) ).toBeOnTheScreen( ); const closeButton = await screen.findByLabelText( /Close/ ); await actor.press( closeButton ); expect( @@ -188,7 +191,8 @@ describe( "AICamera navigation with advanced user layout", ( ) => { await takePhotoAndNavToSuggestions( ); await navToObsEditWithTopSuggestion( ); const obsEditBackButton = screen.getByTestId( "ObsEdit.BackButton" ); - expect( obsEditBackButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( obsEditBackButton ).toBeOnTheScreen( ); } ); // TODO: we can't test back behavior as reliably in React Navigation 7; diff --git a/tests/integration/navigation/Explore.test.js b/tests/integration/navigation/Explore.test.js index f81dd0ee0..2b8f626a4 100644 --- a/tests/integration/navigation/Explore.test.js +++ b/tests/integration/navigation/Explore.test.js @@ -98,7 +98,8 @@ const actor = userEvent.setup( ); async function navigateToObsDetails( ) { await waitFor( ( ) => { global.timeTravel( ); - expect( screen.getByText( /OBSERVATION/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( /OBSERVATION/ ) ).toBeOnTheScreen( ); } ); const firstObservation = await screen.findByTestId( `ObsPressable.${mockObservations[0].uuid}` @@ -108,7 +109,8 @@ async function navigateToObsDetails( ) { async function navigateToRootExplore( ) { const emptyScreen = await screen.findByText( /Use iNaturalist to identify any living thing/ ); - await waitFor( ( ) => expect( emptyScreen ).toBeVisible( ) ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + await waitFor( ( ) => expect( emptyScreen ).toBeOnTheScreen( ) ); const tabBar = await screen.findByTestId( "CustomTabBar" ); const exploreButton = await within( tabBar ).findByText( "Explore" ); await actor.press( exploreButton ); @@ -116,19 +118,22 @@ async function navigateToRootExplore( ) { const landOnObservationsView = async ( ) => { const observationsViewIcon = await screen.findByLabelText( /Observations View/ ); - expect( observationsViewIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( observationsViewIcon ).toBeOnTheScreen( ); }; const switchToSpeciesView = async ( ) => { const observationsViewIcon = await screen.findByLabelText( /Observations View/ ); - expect( observationsViewIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( observationsViewIcon ).toBeOnTheScreen( ); await actor.press( observationsViewIcon ); const speciesRadioButton = await screen.findByText( "Species" ); await actor.press( speciesRadioButton ); const confirmButton = await screen.findByText( /EXPLORE SPECIES/ ); await actor.press( confirmButton ); const speciesViewIcon = await screen.findByLabelText( /Species View/ ); - expect( speciesViewIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( speciesViewIcon ).toBeOnTheScreen( ); }; describe( "logged in", ( ) => { @@ -165,12 +170,15 @@ describe( "logged in", ( ) => { api_token: TEST_JWT } ); const defaultGlobalLocation = await screen.findByText( /Worldwide/ ); - expect( defaultGlobalLocation ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( defaultGlobalLocation ).toBeOnTheScreen( ); const observationsViewIcon = await screen.findByLabelText( /Observations View/ ); - expect( observationsViewIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( observationsViewIcon ).toBeOnTheScreen( ); const backButton = screen.queryByTestId( "Explore.BackButton" ); await actor.press( backButton ); - expect( exploreButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( exploreButton ).toBeOnTheScreen( ); } ); } ); @@ -201,9 +209,11 @@ describe( "logged in", ( ) => { api_token: TEST_JWT } ); const defaultGlobalLocation = await screen.findByText( /Worldwide/ ); - expect( defaultGlobalLocation ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( defaultGlobalLocation ).toBeOnTheScreen( ); const observationsViewIcon = await screen.findByLabelText( /Observations View/ ); - expect( observationsViewIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( observationsViewIcon ).toBeOnTheScreen( ); const backButton = await screen.findByTestId( "Explore.BackButton" ); await actor.press( backButton ); const journalPostsButton = await screen.findByText( /JOURNAL POSTS/ ); @@ -239,9 +249,11 @@ describe( "logged in", ( ) => { api_token: TEST_JWT } ); const defaultGlobalLocation = await screen.findByText( /Worldwide/ ); - expect( defaultGlobalLocation ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( defaultGlobalLocation ).toBeOnTheScreen( ); const speciesViewIcon = await screen.findByLabelText( /Species View/ ); - expect( speciesViewIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( speciesViewIcon ).toBeOnTheScreen( ); const backButton = await screen.findByTestId( "Explore.BackButton" ); await actor.press( backButton ); const journalPostsButton = await screen.findByText( /JOURNAL POSTS/ ); @@ -262,12 +274,15 @@ describe( "logged in", ( ) => { const taxonDetailsExploreButton = await screen.findByLabelText( /See observations of this taxon in explore/ ); await actor.press( taxonDetailsExploreButton ); const defaultGlobalLocation = await screen.findByText( /Worldwide/ ); - expect( defaultGlobalLocation ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( defaultGlobalLocation ).toBeOnTheScreen( ); const observationsIcon = await screen.findByLabelText( /Observations View/ ); - expect( observationsIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( observationsIcon ).toBeOnTheScreen( ); const backButton = screen.queryByTestId( "Explore.BackButton" ); await actor.press( backButton ); - expect( taxonDetailsExploreButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( taxonDetailsExploreButton ).toBeOnTheScreen( ); } ); it( "should navigate from UserProfile to Explore and back to UserProfile", async ( ) => { @@ -280,18 +295,23 @@ describe( "logged in", ( ) => { await navigateToRootExplore( ); await landOnObservationsView( ); const headerCount = await screen.findByText( /1 Observation/ ); - expect( headerCount ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( headerCount ).toBeOnTheScreen( ); const gridView = await screen.findByTestId( "SegmentedButton.grid" ); await actor.press( gridView ); const firstObservation = screen.queryByTestId( `ObsPressable.${mockObservations[0].uuid}` ); await waitFor( ( ) => { - expect( firstObservation ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( firstObservation ).toBeOnTheScreen( ); }, { timeout: 10_000 } ); await actor.press( firstObservation ); await waitFor( ( ) => { - expect( screen.getByTestId( `ObsDetails.${mockObservations[0].uuid}` ) ).toBeVisible( ); + expect( + screen.getByTestId( `ObsDetails.${mockObservations[0].uuid}` ) + // We used toBeVisible here but the update to RN0.77 broke this expectation + ).toBeOnTheScreen( ); }, { timeout: 10_000 } ); const userProfileButton = await screen.findByLabelText( `User ${mockUser.login}` ); await actor.press( userProfileButton ); @@ -304,10 +324,12 @@ describe( "logged in", ( ) => { api_token: TEST_JWT } ); const observationsViewIcon = await screen.findByLabelText( /Observations View/ ); - expect( observationsViewIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( observationsViewIcon ).toBeOnTheScreen( ); const backButton = screen.queryByTestId( "Explore.BackButton" ); await actor.press( backButton ); - expect( observationsButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( observationsButton ).toBeOnTheScreen( ); } ); } ); @@ -324,7 +346,8 @@ describe( "logged in", ( ) => { await navigateToRootExplore( ); await landOnObservationsView( ); const defaultNearbyLocationText = await screen.findByText( /Nearby/ ); - expect( defaultNearbyLocationText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( defaultNearbyLocationText ).toBeOnTheScreen( ); const backButton = screen.queryByTestId( "Explore.BackButton" ); expect( backButton ).toBeFalsy( ); } ); @@ -342,9 +365,11 @@ describe( "logged in", ( ) => { // renderApp( ); // await navigateToRootExplore( ); // const speciesViewIcon = await screen.findByLabelText( /Species View/ ); - // expect( speciesViewIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + // expect( speciesViewIcon ).toBeOnTheScreen( ); // const nearbyText = await screen.findByText( /Nearby/ ); - // expect( nearbyText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + // expect( nearbyText ).toBeOnTheScreen( ); // } ); } ); } ); diff --git a/tests/integration/navigation/MediaViewer.test.js b/tests/integration/navigation/MediaViewer.test.js index 54572efbe..63563f716 100644 --- a/tests/integration/navigation/MediaViewer.test.js +++ b/tests/integration/navigation/MediaViewer.test.js @@ -117,7 +117,8 @@ describe( "MediaViewer navigation", ( ) => { await act( async ( ) => actor.press( obsEditPhotos[0] ) ); expect( await screen.findByTestId( `CustomImageZoom.${observation.observationPhotos[0].photo.url}` ) - ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + ).toBeOnTheScreen( ); } ); it( "should not show the first photo when second tapped", async ( ) => { @@ -127,7 +128,8 @@ describe( "MediaViewer navigation", ( ) => { await act( async ( ) => actor.press( obsEditPhotos[1] ) ); expect( await screen.findByTestId( `CustomImageZoom.${observation.observationPhotos[1].photo.url}` ) - ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + ).toBeOnTheScreen( ); expect( screen.queryByTestId( `CustomImageZoom.${observation.observationPhotos[0].photo.url}` ) ).toBeFalsy( ); @@ -140,7 +142,8 @@ describe( "MediaViewer navigation", ( ) => { await act( async ( ) => actor.press( obsEditPhotos[0] ) ); const deleteButtons = await screen.findAllByLabelText( "Delete photo" ); expect( deleteButtons.length ).toEqual( observation.observationPhotos.length ); - expect( deleteButtons[0] ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( deleteButtons[0] ).toBeOnTheScreen( ); } ); } ); @@ -163,7 +166,7 @@ describe( "MediaViewer navigation", ( ) => { const photo = await findAndPressByLabelText( "View photo" ); await actor.press( photo ); - expect( await screen.findByTestId( /CustomImageZoom/ ) ).toBeTruthy( ); + expect( await screen.findByTestId( /CustomImageZoom/ ) ).toBeOnTheScreen(); } ); // Haven't figured these out b/c I would need the URL of newly-created @@ -176,7 +179,8 @@ describe( "MediaViewer navigation", ( ) => { navigateToCamera( ); await findAndPressByLabelText( "Take photo" ); await findAndPressByLabelText( "View photo" ); - expect( await screen.findByLabelText( "Delete photo" ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByLabelText( "Delete photo" ) ).toBeOnTheScreen( ); } ); } ); @@ -196,19 +200,22 @@ describe( "MediaViewer navigation", ( ) => { `MyObservations.obsGridItem.${observation.uuid}` ); await actor.press( observationGridItem ); - expect( await screen.findByTestId( `ObsDetails.${observation.uuid}` ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByTestId( `ObsDetails.${observation.uuid}` ) ).toBeOnTheScreen( ); } it( "should show the first photo when tapped", async ( ) => { await navigateToObsDetail( ); const photos = await screen.findAllByTestId( "ObsMedia.photo" ); - expect( photos[0] ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( photos[0] ).toBeOnTheScreen( ); await act( async ( ) => actor.press( photos[0] ) ); expect( await screen.findByTestId( `CustomImageZoom.${observation.observation_photos[0].photo.url}` ) - ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + ).toBeOnTheScreen( ); } ); // Not sure why this was working. Both photos might technically @@ -222,22 +229,26 @@ describe( "MediaViewer navigation", ( ) => { // await screen.findByTestId( // `CustomImageZoom.${observation.observation_photos[1].photo.url}` // ) - // ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + // ).toBeOnTheScreen( ); // expect( // screen.queryByTestId( `CustomImageZoom.${observation.observation_photos[0].photo.url}` ) - // ).not.toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + // ).not.toBeOnTheScreen( ); // } ); it( "should not show delete button", async ( ) => { await navigateToObsDetail( ); const photos = await screen.findAllByTestId( "ObsMedia.photo" ); - expect( photos[0] ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( photos[0] ).toBeOnTheScreen( ); await act( async ( ) => actor.press( photos[0] ) ); expect( await screen.findByTestId( `CustomImageZoom.${observation.observation_photos[0].photo.url}` ) - ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + ).toBeOnTheScreen( ); expect( screen.queryByLabelText( "Delete photo" ) ).toBeFalsy( ); } ); } ); @@ -269,36 +280,42 @@ describe( "MediaViewer navigation", ( ) => { `MyObservations.obsGridItem.${observation.uuid}` ); await actor.press( observationGridItem ); - expect( await screen.findByTestId( `ObsDetails.${observation.uuid}` ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByTestId( `ObsDetails.${observation.uuid}` ) ).toBeOnTheScreen( ); const displayedTaxon = await screen.findByText( taxon.name ); await act( async ( ) => actor.press( displayedTaxon ) ); - expect( await screen.findByTestId( `TaxonDetails.${taxon.id}` ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByTestId( `TaxonDetails.${taxon.id}` ) ).toBeOnTheScreen( ); } it( "should show the first photo when tapped", async ( ) => { await navigateToTaxonDetail( ); const photoId = taxon.taxonPhotos[0].photo.id; const photo = await screen.findByTestId( `TaxonDetails.photo.${photoId}` ); - expect( photo ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( photo ).toBeOnTheScreen( ); await act( async ( ) => actor.press( photo ) ); expect( await screen.findByTestId( `CustomImageZoom.${taxon.taxonPhotos[0].photo.url}` ) - ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + ).toBeOnTheScreen( ); } ); it( "should not show delete button", async ( ) => { await navigateToTaxonDetail( ); const photoId = taxon.taxonPhotos[0].photo.id; const photo = await screen.findByTestId( `TaxonDetails.photo.${photoId}` ); - expect( photo ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( photo ).toBeOnTheScreen( ); await act( async ( ) => actor.press( photo ) ); expect( await screen.findByTestId( `CustomImageZoom.${taxon.taxonPhotos[0].photo.url}` ) - ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + ).toBeOnTheScreen( ); expect( screen.queryByLabelText( "Delete photo" ) ).toBeFalsy( ); } ); } ); @@ -321,7 +338,8 @@ describe( "MediaViewer navigation", ( ) => { `MyObservations.obsGridItem.${observation.uuid}` ); await actor.press( observationGridItem ); - expect( await screen.findByTestId( `ObsDetails.${observation.uuid}` ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByTestId( `ObsDetails.${observation.uuid}` ) ).toBeOnTheScreen( ); const suggestButton = await screen.findByTestId( "ObsDetail.cvSuggestionsButton" ); @@ -329,11 +347,13 @@ describe( "MediaViewer navigation", ( ) => { const firstPhoto = await screen.findByTestId( `ObsPhotoSelectionList.${defaultSelectedPhoto}` ); - expect( firstPhoto ).toBeVisible(); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( firstPhoto ).toBeOnTheScreen(); const secondPhoto = await screen.findByTestId( `ObsPhotoSelectionList.${defaultUnselectedPhoto}` ); - expect( secondPhoto ).toBeVisible(); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( secondPhoto ).toBeOnTheScreen(); } it( "should show the selected photo when tapped", async () => { @@ -341,13 +361,15 @@ describe( "MediaViewer navigation", ( ) => { const firstPhoto = await screen.findByTestId( `ObsPhotoSelectionList.${defaultSelectedPhoto}` ); - expect( firstPhoto ).toBeVisible(); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( firstPhoto ).toBeOnTheScreen(); await act( async () => actor.press( firstPhoto ) ); expect( await screen.findByTestId( `CustomImageZoom.${defaultSelectedPhoto}` ) - ).toBeVisible(); + // We used toBeVisible here but the update to RN0.77 broke this expectation + ).toBeOnTheScreen(); } ); it( "should not show the currently not selected photo when tapped", async () => { @@ -355,7 +377,8 @@ describe( "MediaViewer navigation", ( ) => { const secondPhoto = await screen.findByTestId( `ObsPhotoSelectionList.${defaultUnselectedPhoto}` ); - expect( secondPhoto ).toBeVisible(); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( secondPhoto ).toBeOnTheScreen(); await act( async () => actor.press( secondPhoto ) ); expect( screen.queryByTestId( @@ -374,7 +397,8 @@ describe( "MediaViewer navigation", ( ) => { await screen.findByTestId( `CustomImageZoom.${defaultSelectedPhoto}` ) - ).toBeVisible(); + // We used toBeVisible here but the update to RN0.77 broke this expectation + ).toBeOnTheScreen(); expect( screen.queryByLabelText( "Delete photo" ) ).toBeFalsy(); } ); } ); diff --git a/tests/integration/navigation/MyObservations.test.js b/tests/integration/navigation/MyObservations.test.js index 2b7951d4c..9d31259dc 100644 --- a/tests/integration/navigation/MyObservations.test.js +++ b/tests/integration/navigation/MyObservations.test.js @@ -93,7 +93,8 @@ beforeEach( ( ) => { const checkToolbarResetWithUnsyncedObs = ( ) => waitFor( ( ) => { const toolbarText = screen.getByText( /Upload 3 observations/ ); - expect( toolbarText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( toolbarText ).toBeOnTheScreen(); } ); const writeObservationsToRealm = ( observations, message ) => { @@ -109,13 +110,15 @@ const pressIndividualUpload = observation => { const uploadIcon = screen.getByTestId( `UploadIcon.start.${observation.uuid}` ); - expect( uploadIcon ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( uploadIcon ).toBeOnTheScreen( ); actor.press( uploadIcon ); }; const waitForDisplayedText = async ( text, timeout = 1000 ) => { await waitFor( ( ) => { - expect( screen.getByText( text ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( text ) ).toBeOnTheScreen( ); }, { timeout } ); }; diff --git a/tests/integration/navigation/ObsEdit.test.js b/tests/integration/navigation/ObsEdit.test.js index ce7057037..bada2a80e 100644 --- a/tests/integration/navigation/ObsEdit.test.js +++ b/tests/integration/navigation/ObsEdit.test.js @@ -66,7 +66,8 @@ const navigateToObsEditViaGroupPhotos = async ( ) => { ); await waitFor( ( ) => { global.timeTravel( ); - expect( screen.getByText( /OBSERVATIONS/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( /OBSERVATIONS/ ) ).toBeOnTheScreen( ); } ); const tabBar = await screen.findByTestId( "CustomTabBar" ); const addObsButton = await within( tabBar ).findByLabelText( "Add observations" ); @@ -82,7 +83,8 @@ const navigateToObsEditViaGroupPhotos = async ( ) => { await actor.press( importObservationsText ); await waitFor( ( ) => { const obsEditTitleText = screen.getByText( /2 Observations/ ); - expect( obsEditTitleText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( obsEditTitleText ).toBeOnTheScreen( ); }, { timeout: 3_000, interval: 500 } ); }; @@ -239,7 +241,8 @@ describe( "ObsEdit", ( ) => { await navigateToObsEditViaGroupPhotos( ); await uploadObsEditObservation( ); const uploadStatus = await screen.findByText( /1 uploaded/ ); - expect( uploadStatus ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( uploadStatus ).toBeOnTheScreen( ); const newTitle = await screen.findByText( /New Observation/ ); expect( newTitle ).toBeTruthy( ); } ); diff --git a/tests/integration/navigation/PhotoLibrary.test.js b/tests/integration/navigation/PhotoLibrary.test.js index 4d2001df6..ebb2c60f9 100644 --- a/tests/integration/navigation/PhotoLibrary.test.js +++ b/tests/integration/navigation/PhotoLibrary.test.js @@ -60,7 +60,8 @@ const actor = userEvent.setup( ); const navigateToPhotoImporter = async ( ) => { await waitFor( ( ) => { - expect( screen.getByText( /Use iNaturalist to identify/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( /Use iNaturalist to identify/ ) ).toBeOnTheScreen( ); } ); const tabBar = await screen.findByTestId( "CustomTabBar" ); const addObsButton = await within( tabBar ).findByLabelText( "Add observations" ); @@ -89,7 +90,8 @@ describe( "PhotoLibrary navigation", ( ) => { const groupPhotosText = await screen.findByText( /Group Photos/ ); await waitFor( ( ) => { // user should land on GroupPhotos - expect( groupPhotosText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( groupPhotosText ).toBeOnTheScreen( ); } ); } ); @@ -103,7 +105,8 @@ describe( "PhotoLibrary navigation", ( ) => { await navigateToPhotoImporter( ); const obsEditText = await screen.findByText( /New Observation/ ); await waitFor( () => { - expect( obsEditText ).toBeVisible(); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( obsEditText ).toBeOnTheScreen(); } ); } ); } ); @@ -124,7 +127,8 @@ describe( "PhotoLibrary navigation when suggestions screen is preferred next scr await navigateToPhotoImporter(); const addAnIDText = await screen.findByText( /Add an ID Later/ ); await waitFor( () => { - expect( addAnIDText ).toBeVisible(); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( addAnIDText ).toBeOnTheScreen(); } ); } ); } ); diff --git a/tests/integration/navigation/SoundRecorder.test.js b/tests/integration/navigation/SoundRecorder.test.js index 20762c2e9..18e100ab0 100644 --- a/tests/integration/navigation/SoundRecorder.test.js +++ b/tests/integration/navigation/SoundRecorder.test.js @@ -51,7 +51,8 @@ describe( "SoundRecorder navigation", ( ) => { renderApp( ); await waitFor( ( ) => { global.timeTravel( ); - expect( screen.getByText( /Use iNaturalist to identify/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( /Use iNaturalist to identify/ ) ).toBeOnTheScreen( ); } ); const tabBar = await screen.findByTestId( "CustomTabBar" ); const addObsButton = await within( tabBar ).findByLabelText( "Add observations" ); @@ -61,7 +62,8 @@ describe( "SoundRecorder navigation", ( ) => { const mediaNavButtons = await screen.findByTestId( "MediaNavButtons" ); const closeButton = await within( mediaNavButtons ).findByLabelText( "Close" ); await actor.press( closeButton ); - expect( await screen.findByText( /Use iNaturalist to identify/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByText( /Use iNaturalist to identify/ ) ).toBeOnTheScreen( ); } ); } ); } ); diff --git a/tests/integration/navigation/StandardCamera.test.js b/tests/integration/navigation/StandardCamera.test.js index 8c8decb3a..f9221ef18 100644 --- a/tests/integration/navigation/StandardCamera.test.js +++ b/tests/integration/navigation/StandardCamera.test.js @@ -54,7 +54,8 @@ jest.mock( "sharedHelpers/fetchAccurateUserLocation", () => ( { const navigateToCamera = async ( ) => { await waitFor( ( ) => { - expect( screen.getByText( /Use iNaturalist to identify/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( /Use iNaturalist to identify/ ) ).toBeOnTheScreen( ); } ); const tabBar = await screen.findByTestId( "CustomTabBar" ); const addObsButton = await within( tabBar ).findByLabelText( "Add observations" ); @@ -80,7 +81,8 @@ describe( "StandardCamera navigation with advanced user layout", ( ) => { const closeButton = await within( cameraNavButtons ).findByLabelText( "Close" ); await actor.press( closeButton ); await waitFor( ( ) => { - expect( screen.getByText( /Use iNaturalist to identify/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( /Use iNaturalist to identify/ ) ).toBeOnTheScreen( ); } ); } ); } ); @@ -93,7 +95,8 @@ describe( "StandardCamera navigation with advanced user layout", ( ) => { const checkmarkButton = await screen.findByLabelText( "View suggestions" ); await actor.press( checkmarkButton ); await waitFor( ( ) => { - expect( screen.getByText( /New Observation/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( /New Observation/ ) ).toBeOnTheScreen( ); } ); } ); @@ -114,7 +117,8 @@ describe( "StandardCamera navigation with advanced user layout", ( ) => { const checkmarkButton = await screen.findByLabelText( "View suggestions" ); await actor.press( checkmarkButton ); await waitFor( ( ) => { - expect( screen.getByText( /ADD AN ID/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( screen.getByText( /ADD AN ID/ ) ).toBeOnTheScreen( ); } ); } ); } ); diff --git a/tests/integration/navigation/Suggestions.test.js b/tests/integration/navigation/Suggestions.test.js index d90f7b5a1..73686eca3 100644 --- a/tests/integration/navigation/Suggestions.test.js +++ b/tests/integration/navigation/Suggestions.test.js @@ -163,7 +163,8 @@ describe( "Suggestions", ( ) => { const addIDButton = await screen.findByText( /ADD AN ID/ ); await waitFor( ( ) => { global.timeTravel( ); - expect( addIDButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( addIDButton ).toBeOnTheScreen( ); } ); } @@ -197,7 +198,8 @@ describe( "Suggestions", ( ) => { expect( topTaxonResultButton ).toBeTruthy( ); await actor.press( topTaxonResultButton ); expect( await screen.findByText( "EVIDENCE" ) ).toBeTruthy( ); - expect( await screen.findByText( /Obscured/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByText( /Obscured/ ) ).toBeOnTheScreen( ); } ); @@ -317,7 +319,8 @@ describe( "Suggestions", ( ) => { await renderAppWithObservations( observations, __filename ); await navigateToSuggestionsViaCameraForObservation( observations[0] ); const locationPermissionsButton = screen.queryByText( /IMPROVE THESE SUGGESTIONS/ ); - expect( locationPermissionsButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( locationPermissionsButton ).toBeOnTheScreen( ); } ); } ); @@ -349,7 +352,8 @@ describe( "Suggestions", ( ) => { expect( taxonResultButton ).toBeTruthy( ); await actor.press( taxonResultButton ); expect( await screen.findByText( "EVIDENCE" ) ).toBeTruthy( ); - expect( await screen.findByText( /Obscured/ ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByText( /Obscured/ ) ).toBeOnTheScreen( ); } ); } ); diff --git a/tests/integration/navigation/TaxonDetails.test.js b/tests/integration/navigation/TaxonDetails.test.js index 333b4770c..989ffab7c 100644 --- a/tests/integration/navigation/TaxonDetails.test.js +++ b/tests/integration/navigation/TaxonDetails.test.js @@ -99,18 +99,21 @@ describe( "TaxonDetails", ( ) => { async function expectToBeOnSuggestions( ) { const topIdTitle = await screen.findByText( "TOP ID SUGGESTION" ); - expect( topIdTitle ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( topIdTitle ).toBeOnTheScreen( ); } async function navigateToTaxonDetailsFromSuggestions( ) { await expectToBeOnSuggestions( ); const suggestedTaxonName = await screen.findByText( topSuggestion.taxon.name ); - expect( suggestedTaxonName ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( suggestedTaxonName ).toBeOnTheScreen( ); await actor.press( suggestedTaxonName ); const taxonDetailsScreen = await screen.findByTestId( `TaxonDetails.${topSuggestion.taxon.id}` ); - expect( taxonDetailsScreen ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( taxonDetailsScreen ).toBeOnTheScreen( ); } // navigate to ObsDetails -> Suggest ID -> Suggestions -> TaxonDetails @@ -120,7 +123,8 @@ describe( "TaxonDetails", ( ) => { ); await actor.press( observationGridItem ); const suggestIdButton = await screen.findByText( /SUGGEST ID/ ); - expect( suggestIdButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( suggestIdButton ).toBeOnTheScreen( ); await actor.press( suggestIdButton ); return navigateToTaxonDetailsFromSuggestions( ); } @@ -132,7 +136,8 @@ describe( "TaxonDetails", ( ) => { ); await actor.press( observationGridItem ); const editButton = await screen.findByLabelText( /Edit/ ); - expect( editButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( editButton ).toBeOnTheScreen( ); await actor.press( editButton ); const observationTaxonName = await screen.findByText( observation.taxon.name ); await actor.press( observationTaxonName ); @@ -146,7 +151,8 @@ describe( "TaxonDetails", ( ) => { ); await actor.press( observationGridItem ); const editButton = await screen.findByLabelText( /Edit/ ); - expect( editButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( editButton ).toBeOnTheScreen( ); await actor.press( editButton ); const observationTaxonName = await screen.findByText( observation.taxon.name ); await actor.press( observationTaxonName ); @@ -159,13 +165,15 @@ describe( "TaxonDetails", ( ) => { const searchedTaxon = mockTaxaList[0]; await waitFor( async ( ) => { - expect( await screen.findByText( searchedTaxon.name ) ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( await screen.findByText( searchedTaxon.name ) ).toBeOnTheScreen( ); } ); const searchedTaxonName = await screen.findByText( searchedTaxon.name ); await actor.press( searchedTaxonName ); const taxonDetailsScreen = await screen.findByTestId( `TaxonDetails.${searchedTaxon.id}` ); - expect( taxonDetailsScreen ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( taxonDetailsScreen ).toBeOnTheScreen( ); return mockTaxaList[0]; } @@ -174,7 +182,8 @@ describe( "TaxonDetails", ( ) => { await navigateToTaxonDetailsViaObsEdit( observation ); // navigate to an ancestor taxon details page const ancestorTaxonName = await screen.findByText( topSuggestion.taxon.ancestors[0].name ); - expect( ancestorTaxonName ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( ancestorTaxonName ).toBeOnTheScreen( ); inatjs.taxa.fetch.mockResolvedValue( makeResponse( [topSuggestion.taxon.ancestors[0]] ) ); await actor.press( ancestorTaxonName ); } @@ -192,7 +201,8 @@ describe( "TaxonDetails", ( ) => { await navigateToTaxonDetailsViaSuggestId( observations[0] ); // make sure we're on TaxonDetails const selectTaxonButton = screen.getByText( /SELECT THIS TAXON/ ); - expect( selectTaxonButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( selectTaxonButton ).toBeOnTheScreen( ); await actor.press( selectTaxonButton ); // return to ObsDetails screen expect( await screen.findByTestId( `ObsDetails.${observations[0].uuid}` ) ).toBeTruthy( ); @@ -200,9 +210,11 @@ describe( "TaxonDetails", ( ) => { const bottomSheetText = await screen.findByText( /Would you like to suggest the following identification/ ); - expect( bottomSheetText ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( bottomSheetText ).toBeOnTheScreen( ); const selectedTaxonName = await screen.findByText( taxon.name ); - expect( selectedTaxonName ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( selectedTaxonName ).toBeOnTheScreen( ); const { currentObservation } = useStore.getState( ); expect( currentObservation.owners_identification_from_vision ).toBeTruthy( ); } @@ -221,13 +233,16 @@ describe( "TaxonDetails", ( ) => { await navigateToTaxonDetailsViaObsEdit( observations[0] ); // make sure we're on TaxonDetails const selectTaxonButton = screen.getByText( /SELECT THIS TAXON/ ); - expect( selectTaxonButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( selectTaxonButton ).toBeOnTheScreen( ); await actor.press( selectTaxonButton ); // return to ObsEdit screen const obsEditBackButton = screen.getByTestId( "ObsEdit.BackButton" ); - expect( obsEditBackButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( obsEditBackButton ).toBeOnTheScreen( ); const selectedTaxonName = await screen.findByText( taxon.name ); - expect( selectedTaxonName ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( selectedTaxonName ).toBeOnTheScreen( ); const { currentObservation } = useStore.getState( ); expect( currentObservation.owners_identification_from_vision ).toBeTruthy( ); } @@ -245,14 +260,17 @@ describe( "TaxonDetails", ( ) => { const searchedTaxon = await navigateToTaxonDetailsViaTaxonSearch( observations[0] ); // make sure we're on TaxonDetails const selectTaxonButton = screen.getByText( /SELECT THIS TAXON/ ); - expect( selectTaxonButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( selectTaxonButton ).toBeOnTheScreen( ); await actor.press( selectTaxonButton ); // return to ObsEdit screen const obsEditBackButton = screen.getByTestId( "ObsEdit.BackButton" ); - expect( obsEditBackButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( obsEditBackButton ).toBeOnTheScreen( ); // We just chose searchedTaxon, so that name should be visible on ObsEdit const selectedTaxonName = await screen.findByText( searchedTaxon.name ); - expect( selectedTaxonName ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( selectedTaxonName ).toBeOnTheScreen( ); const { currentObservation } = useStore.getState( ); expect( currentObservation.owners_identification_from_vision ).toBeFalsy( ); } @@ -272,15 +290,18 @@ describe( "TaxonDetails", ( ) => { await navigateToTaxonDetailsViaTaxonDetails( observations[0] ); // make sure we're on TaxonDetails ancestor screen const selectTaxonButton = screen.getByText( /SELECT THIS TAXON/ ); - expect( selectTaxonButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( selectTaxonButton ).toBeOnTheScreen( ); await actor.press( selectTaxonButton ); // return to ObsEdit screen const obsEditBackButton = screen.getByTestId( "ObsEdit.BackButton" ); - expect( obsEditBackButton ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( obsEditBackButton ).toBeOnTheScreen( ); // selected taxon const ancestorTaxonName = await screen.findByText( taxon.ancestors[0].name ); - expect( ancestorTaxonName ).toBeVisible( ); + // We used toBeVisible here but the update to RN0.77 broke this expectation + expect( ancestorTaxonName ).toBeOnTheScreen( ); const { currentObservation } = useStore.getState( ); expect( currentObservation.owners_identification_from_vision ).toBeFalsy( ); }