react-native 0.74.0-rc.1 → 0.74.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/Libraries/AppDelegate/RCTAppDelegate.h +5 -8
  2. package/Libraries/AppDelegate/RCTAppDelegate.mm +57 -131
  3. package/Libraries/AppDelegate/RCTRootViewFactory.h +123 -0
  4. package/Libraries/AppDelegate/RCTRootViewFactory.mm +253 -0
  5. package/Libraries/Components/View/ReactNativeStyleAttributes.js +1 -0
  6. package/Libraries/Core/ReactNativeVersion.js +1 -1
  7. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  8. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +4 -0
  9. package/Libraries/StyleSheet/StyleSheetTypes.js +3 -0
  10. package/React/Base/RCTConvert.h +3 -0
  11. package/React/Base/RCTConvert.mm +9 -0
  12. package/React/Base/RCTVersion.m +1 -1
  13. package/React/CoreModules/RCTRedBox.mm +7 -1
  14. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +32 -0
  15. package/React/Views/RCTCursor.h +13 -0
  16. package/React/Views/RCTView.h +3 -0
  17. package/React/Views/RCTView.m +30 -0
  18. package/React/Views/RCTViewManager.m +2 -0
  19. package/ReactAndroid/api/ReactAndroid.api +9 -56
  20. package/ReactAndroid/build.gradle.kts +26 -0
  21. package/ReactAndroid/cmake-utils/ReactNative-application.cmake +6 -0
  22. package/ReactAndroid/gradle.properties +1 -1
  23. package/ReactAndroid/src/main/java/com/facebook/react/CoreModulesPackage.java +1 -2
  24. package/ReactAndroid/src/main/java/com/facebook/react/DebugCorePackage.java +1 -2
  25. package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java +1 -2
  26. package/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt +9 -0
  27. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +5 -0
  28. package/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.java +3 -3
  29. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.java +1 -1
  30. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.java +1 -2
  31. package/ReactAndroid/src/main/java/com/facebook/react/bridge/queue/MessageQueueThreadHandler.java +0 -11
  32. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHostDelegate.kt +1 -1
  33. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt +11 -6
  34. package/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleInteropUtils.java +1 -1
  35. package/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.java +1 -1
  36. package/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManagerDelegate.java +1 -1
  37. package/ReactAndroid/src/main/java/com/facebook/react/module/model/ReactModuleInfo.java +10 -0
  38. package/ReactAndroid/src/main/java/com/facebook/react/module/processing/ReactModuleSpecProcessor.java +2 -2
  39. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.java +1 -1
  40. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java +1 -1
  41. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
  42. package/ReactAndroid/src/main/java/com/facebook/react/runtime/CoreReactPackage.java +1 -2
  43. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +32 -0
  44. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +1 -5
  45. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/interfaces/TurboModule.kt +10 -11
  46. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +0 -2
  47. package/ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.cpp +0 -1
  48. package/ReactAndroid/src/main/jni/react/jni/JMessageQueueThread.h +0 -4
  49. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  50. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.h +1 -1
  51. package/ReactCommon/react/nativemodule/samples/platform/android/NativeSampleTurboModuleSpec.java +1 -1
  52. package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +9 -0
  53. package/ReactCommon/react/renderer/components/view/BaseViewProps.h +2 -0
  54. package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +1 -1
  55. package/ReactCommon/react/renderer/components/view/conversions.h +22 -0
  56. package/ReactCommon/react/renderer/components/view/primitives.h +2 -0
  57. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.h +6 -2
  58. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +16 -4
  59. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +37 -6
  60. package/index.js +0 -5
  61. package/package.json +3 -3
  62. package/scripts/codegen/generate-artifacts-executor.js +1 -5
  63. package/sdks/hermes-engine/hermes-utils.rb +4 -3
  64. package/sdks/hermesc/osx-bin/hermes +0 -0
  65. package/sdks/hermesc/osx-bin/hermesc +0 -0
  66. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  67. package/template/package.json +3 -3
  68. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.android.js +0 -69
  69. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.d.ts +0 -24
  70. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.js +0 -33
  71. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroidNativeComponent.js +0 -13
  72. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultBindingsInstaller.kt +0 -20
  73. package/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/interfaces/TurboModule.kt +0 -19
  74. package/ReactAndroid/src/main/java/com/facebook/react/views/popupmenu/PopupMenuSelectionEvent.kt +0 -38
  75. package/ReactAndroid/src/main/java/com/facebook/react/views/popupmenu/ReactPopupMenuContainer.kt +0 -49
  76. package/ReactAndroid/src/main/java/com/facebook/react/views/popupmenu/ReactPopupMenuManager.kt +0 -54
  77. package/src/private/specs/components/PopupMenuAndroidNativeComponent.js +0 -47
@@ -10,8 +10,6 @@ package com.facebook.react.bridge.queue;
10
10
  import android.os.Handler;
11
11
  import android.os.Looper;
12
12
  import android.os.Message;
13
- import com.facebook.common.logging.FLog;
14
- import com.facebook.react.common.ReactConstants;
15
13
 
16
14
  /** Handler that can catch and dispatch Exceptions to an Exception handler. */
17
15
  public class MessageQueueThreadHandler extends Handler {
@@ -28,15 +26,6 @@ public class MessageQueueThreadHandler extends Handler {
28
26
  try {
29
27
  super.dispatchMessage(msg);
30
28
  } catch (Exception e) {
31
- if (e instanceof NullPointerException) {
32
- FLog.e(
33
- ReactConstants.TAG,
34
- "Caught NullPointerException when dispatching message in MessageQueueThreadHandler. This is likely caused by runnable"
35
- + "(msg.callback) being nulled in Android Handler after dispatching and before handling (see T170239922 for more details)."
36
- + "Currently we observe that it only happen once which is during initialisation. Due to fixing probably involve Android "
37
- + "System code, we decide to ignore here for now and print an error message for debugging purpose in case this cause more serious issues in future.");
38
- return;
39
- }
40
29
  mExceptionHandler.handleException(e);
41
30
  }
42
31
  }
@@ -43,7 +43,7 @@ public class DefaultReactHostDelegate(
43
43
  override val jsBundleLoader: JSBundleLoader,
44
44
  override val reactPackages: List<ReactPackage> = emptyList(),
45
45
  override val jsRuntimeFactory: JSRuntimeFactory = HermesInstance(),
46
- override val bindingsInstaller: BindingsInstaller = DefaultBindingsInstaller(),
46
+ override val bindingsInstaller: BindingsInstaller? = null,
47
47
  private val reactNativeConfig: ReactNativeConfig = ReactNativeConfig.DEFAULT_CONFIG,
48
48
  private val exceptionHandler: (Exception) -> Unit = {},
49
49
  override val turboModuleManagerDelegateBuilder: ReactPackageTurboModuleManagerDelegate.Builder
@@ -49,13 +49,18 @@ protected constructor(
49
49
  DefaultComponentsRegistry.register(componentFactory)
50
50
 
51
51
  val viewManagerRegistry =
52
- ViewManagerRegistry(
53
- object : ViewManagerResolver {
54
- override fun getViewManager(viewManagerName: String) =
55
- reactInstanceManager.createViewManager(viewManagerName)
52
+ if (lazyViewManagersEnabled) {
53
+ ViewManagerRegistry(
54
+ object : ViewManagerResolver {
55
+ override fun getViewManager(viewManagerName: String) =
56
+ reactInstanceManager.createViewManager(viewManagerName)
56
57
 
57
- override fun getViewManagerNames() = reactInstanceManager.viewManagerNames
58
- })
58
+ override fun getViewManagerNames() = reactInstanceManager.viewManagerNames
59
+ })
60
+ } else {
61
+ ViewManagerRegistry(
62
+ reactInstanceManager.getOrCreateViewManagers(reactApplicationContext))
63
+ }
59
64
 
60
65
  FabricUIManagerProviderImpl(
61
66
  componentFactory, ReactNativeConfig.DEFAULT_CONFIG, viewManagerRegistry)
@@ -18,7 +18,7 @@ import com.facebook.react.bridge.ReadableArray;
18
18
  import com.facebook.react.bridge.ReadableMap;
19
19
  import com.facebook.react.bridge.WritableArray;
20
20
  import com.facebook.react.bridge.WritableMap;
21
- import com.facebook.react.internal.turbomodule.core.interfaces.TurboModule;
21
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
22
22
  import java.lang.reflect.Method;
23
23
  import java.util.ArrayList;
24
24
  import java.util.HashSet;
@@ -19,12 +19,12 @@ import com.facebook.react.bridge.NativeModule;
19
19
  import com.facebook.react.bridge.ReactNoCrashSoftException;
20
20
  import com.facebook.react.bridge.ReactSoftExceptionLogger;
21
21
  import com.facebook.react.bridge.RuntimeExecutor;
22
- import com.facebook.react.internal.turbomodule.core.interfaces.TurboModule;
23
22
  import com.facebook.react.internal.turbomodule.core.interfaces.TurboModuleRegistry;
24
23
  import com.facebook.react.turbomodule.core.CallInvokerHolderImpl;
25
24
  import com.facebook.react.turbomodule.core.NativeMethodCallInvokerHolderImpl;
26
25
  import com.facebook.react.turbomodule.core.interfaces.CallInvokerHolder;
27
26
  import com.facebook.react.turbomodule.core.interfaces.NativeMethodCallInvokerHolder;
27
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
28
28
  import java.util.ArrayList;
29
29
  import java.util.Collection;
30
30
  import java.util.HashMap;
@@ -12,7 +12,7 @@ import com.facebook.infer.annotation.Nullsafe;
12
12
  import com.facebook.jni.HybridData;
13
13
  import com.facebook.proguard.annotations.DoNotStrip;
14
14
  import com.facebook.react.bridge.NativeModule;
15
- import com.facebook.react.internal.turbomodule.core.interfaces.TurboModule;
15
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
16
16
  import java.util.ArrayList;
17
17
  import java.util.List;
18
18
 
@@ -7,6 +7,8 @@
7
7
 
8
8
  package com.facebook.react.module.model;
9
9
 
10
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
11
+
10
12
  /**
11
13
  * Data holder class holding native module specifications. {@link ReactModuleSpecProcessor} creates
12
14
  * these so Java modules don't have to be instantiated at React Native start up.
@@ -80,4 +82,12 @@ public class ReactModuleInfo {
80
82
  public boolean isTurboModule() {
81
83
  return mIsTurboModule;
82
84
  }
85
+
86
+ /**
87
+ * Checks if the passed class is a TurboModule. Useful to populate the parameter [isTurboModule]
88
+ * in the constructor of ReactModuleInfo.
89
+ */
90
+ public static boolean classIsTurboModule(Class<?> clazz) {
91
+ return TurboModule.class.isAssignableFrom(clazz);
92
+ }
83
93
  }
@@ -161,13 +161,13 @@ public class ReactModuleSpecProcessor extends ProcessorBase {
161
161
  builder.addStatement("$T map = new $T()", MAP_TYPE, INSTANTIATED_MAP_TYPE);
162
162
 
163
163
  String turboModuleInterfaceCanonicalName =
164
- "com.facebook.react.internal.turbomodule.core.interfaces.TurboModule";
164
+ "com.facebook.react.turbomodule.core.interfaces.TurboModule";
165
165
  TypeMirror turboModuleInterface =
166
166
  mElements.getTypeElement(turboModuleInterfaceCanonicalName).asType();
167
167
 
168
168
  if (turboModuleInterface == null) {
169
169
  throw new RuntimeException(
170
- "com.facebook.react.internal.turbomodule.core.interfaces.TurboModule interface not found.");
170
+ "com.facebook.react.turbomodule.core.interfaces.TurboModule interface not found.");
171
171
  }
172
172
 
173
173
  for (String nativeModule : nativeModules) {
@@ -19,12 +19,12 @@ import com.facebook.react.bridge.ReactApplicationContext;
19
19
  import com.facebook.react.bridge.ReactContext;
20
20
  import com.facebook.react.bridge.ReactContextBaseJavaModule;
21
21
  import com.facebook.react.common.ReactConstants;
22
- import com.facebook.react.internal.turbomodule.core.interfaces.TurboModule;
23
22
  import com.facebook.react.module.annotations.ReactModule;
24
23
  import com.facebook.react.modules.common.ModuleDataCleaner;
25
24
  import com.facebook.react.modules.network.CookieJarContainer;
26
25
  import com.facebook.react.modules.network.ForwardingCookieHandler;
27
26
  import com.facebook.react.modules.network.OkHttpClientProvider;
27
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
28
28
  import java.util.HashSet;
29
29
  import okhttp3.JavaNetCookieJar;
30
30
  import okhttp3.OkHttpClient;
@@ -18,8 +18,8 @@ import androidx.annotation.Nullable;
18
18
  import com.facebook.fbreact.specs.NativePlatformConstantsAndroidSpec;
19
19
  import com.facebook.react.bridge.ReactApplicationContext;
20
20
  import com.facebook.react.common.build.ReactBuildConfig;
21
- import com.facebook.react.internal.turbomodule.core.interfaces.TurboModule;
22
21
  import com.facebook.react.module.annotations.ReactModule;
22
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
23
23
  import java.util.HashMap;
24
24
  import java.util.Map;
25
25
 
@@ -18,5 +18,5 @@ public class ReactNativeVersion {
18
18
  "major", 0,
19
19
  "minor", 74,
20
20
  "patch", 0,
21
- "prerelease", "rc.1");
21
+ "prerelease", "rc.3");
22
22
  }
@@ -14,7 +14,6 @@ import com.facebook.react.bridge.NativeModule;
14
14
  import com.facebook.react.bridge.ReactApplicationContext;
15
15
  import com.facebook.react.devsupport.LogBoxModule;
16
16
  import com.facebook.react.devsupport.interfaces.DevSupportManager;
17
- import com.facebook.react.internal.turbomodule.core.interfaces.TurboModule;
18
17
  import com.facebook.react.module.annotations.ReactModule;
19
18
  import com.facebook.react.module.annotations.ReactModuleList;
20
19
  import com.facebook.react.module.model.ReactModuleInfo;
@@ -103,7 +102,7 @@ class CoreReactPackage extends TurboReactPackage {
103
102
  reactModule.canOverrideExistingModule(),
104
103
  reactModule.needsEagerInit(),
105
104
  reactModule.isCxxModule(),
106
- TurboModule.class.isAssignableFrom(moduleClass)));
105
+ ReactModuleInfo.classIsTurboModule(moduleClass)));
107
106
  }
108
107
  }
109
108
  return () -> reactModuleInfoMap;
@@ -15,6 +15,7 @@ import static java.lang.Boolean.TRUE;
15
15
 
16
16
  import android.app.Activity;
17
17
  import android.content.Context;
18
+ import android.content.Intent;
18
19
  import android.os.Bundle;
19
20
  import androidx.annotation.NonNull;
20
21
  import androidx.annotation.Nullable;
@@ -600,6 +601,37 @@ public class ReactHostImpl implements ReactHost {
600
601
  return null;
601
602
  }
602
603
 
604
+ /**
605
+ * To be called when the host activity receives an activity result.
606
+ *
607
+ * @param activity The host activity
608
+ */
609
+ @ThreadConfined(UI)
610
+ @Override
611
+ public void onActivityResult(
612
+ Activity activity, int requestCode, int resultCode, @Nullable Intent data) {
613
+ final String method =
614
+ "onActivityResult(activity = \""
615
+ + activity
616
+ + "\", requestCode = \""
617
+ + requestCode
618
+ + "\", resultCode = \""
619
+ + resultCode
620
+ + "\", data = \""
621
+ + data
622
+ + "\")";
623
+ log(method);
624
+
625
+ ReactContext currentContext = getCurrentReactContext();
626
+ if (currentContext != null) {
627
+ currentContext.onActivityResult(activity, requestCode, resultCode, data);
628
+ }
629
+ ReactSoftExceptionLogger.logSoftException(
630
+ TAG,
631
+ new ReactNoCrashSoftException(
632
+ "Tried to access onActivityResult while context is not ready"));
633
+ }
634
+
603
635
  @Nullable
604
636
  JavaScriptContextHolder getJavaScriptContextHolder() {
605
637
  final ReactInstance reactInstance = mReactInstanceTaskRef.get().getResult();
@@ -15,7 +15,6 @@ import com.facebook.react.animated.NativeAnimatedModule;
15
15
  import com.facebook.react.bridge.ModuleSpec;
16
16
  import com.facebook.react.bridge.NativeModule;
17
17
  import com.facebook.react.bridge.ReactApplicationContext;
18
- import com.facebook.react.internal.turbomodule.core.interfaces.TurboModule;
19
18
  import com.facebook.react.module.annotations.ReactModule;
20
19
  import com.facebook.react.module.annotations.ReactModuleList;
21
20
  import com.facebook.react.module.model.ReactModuleInfo;
@@ -47,7 +46,6 @@ import com.facebook.react.uimanager.ViewManager;
47
46
  import com.facebook.react.views.drawer.ReactDrawerLayoutManager;
48
47
  import com.facebook.react.views.image.ReactImageManager;
49
48
  import com.facebook.react.views.modal.ReactModalHostManager;
50
- import com.facebook.react.views.popupmenu.ReactPopupMenuManager;
51
49
  import com.facebook.react.views.progressbar.ReactProgressBarViewManager;
52
50
  import com.facebook.react.views.scroll.ReactHorizontalScrollContainerViewManager;
53
51
  import com.facebook.react.views.scroll.ReactHorizontalScrollViewManager;
@@ -171,7 +169,6 @@ public class MainReactPackage extends TurboReactPackage implements ViewManagerOn
171
169
  viewManagers.add(new ReactScrollViewManager());
172
170
  viewManagers.add(new ReactSwitchManager());
173
171
  viewManagers.add(new SwipeRefreshLayoutManager());
174
- viewManagers.add(new ReactPopupMenuManager());
175
172
 
176
173
  // Native equivalents
177
174
  viewManagers.add(new FrescoBasedReactTextInlineImageViewManager());
@@ -213,7 +210,6 @@ public class MainReactPackage extends TurboReactPackage implements ViewManagerOn
213
210
  appendMap(viewManagers, ReactSwitchManager.REACT_CLASS, ReactSwitchManager::new);
214
211
  appendMap(
215
212
  viewManagers, SwipeRefreshLayoutManager.REACT_CLASS, SwipeRefreshLayoutManager::new);
216
- appendMap(viewManagers, ReactPopupMenuManager.REACT_CLASS, ReactPopupMenuManager::new);
217
213
  appendMap(
218
214
  viewManagers,
219
215
  FrescoBasedReactTextInlineImageViewManager.REACT_CLASS,
@@ -300,7 +296,7 @@ public class MainReactPackage extends TurboReactPackage implements ViewManagerOn
300
296
  reactModule.canOverrideExistingModule(),
301
297
  reactModule.needsEagerInit(),
302
298
  reactModule.isCxxModule(),
303
- TurboModule.class.isAssignableFrom(moduleClass)));
299
+ ReactModuleInfo.classIsTurboModule(moduleClass)));
304
300
  }
305
301
  }
306
302
  return () -> reactModuleInfoMap;
@@ -6,15 +6,14 @@
6
6
  */
7
7
 
8
8
  package com.facebook.react.turbomodule.core.interfaces
9
+ /** All turbo modules should inherit from this interface */
10
+ public interface TurboModule {
11
+ /** Initialize the TurboModule. */
12
+ public fun initialize()
9
13
 
10
- import com.facebook.react.common.annotations.DeprecatedInNewArchitecture
11
-
12
- /**
13
- * This interface was introduced for backward compatibility purposes. This interface will be
14
- * deprecated as part of the deprecation and removal of ReactModuleInfoProvider in the near future.
15
- *
16
- * See description of https://github.com/facebook/react-native/pull/41412 for more context.
17
- */
18
- @DeprecatedInNewArchitecture
19
- public interface TurboModule :
20
- com.facebook.react.internal.turbomodule.core.interfaces.TurboModule {}
14
+ /**
15
+ * Called during the turn down process of ReactHost. This method is called before React Native is
16
+ * stopped. Override this method to clean up resources used by the TurboModule.
17
+ */
18
+ public fun invalidate()
19
+ }
@@ -67,8 +67,6 @@ CoreComponentsRegistry::sharedProviderRegistry() {
67
67
  AndroidDrawerLayoutComponentDescriptor>());
68
68
  providerRegistry->add(concreteComponentDescriptorProvider<
69
69
  DebuggingOverlayComponentDescriptor>());
70
- providerRegistry->add(concreteComponentDescriptorProvider<
71
- AndroidPopupMenuComponentDescriptor>());
72
70
 
73
71
  return providerRegistry;
74
72
  }();
@@ -10,7 +10,6 @@
10
10
  #include <condition_variable>
11
11
  #include <mutex>
12
12
 
13
- #include <fb/log.h>
14
13
  #include <fbjni/NativeRunnable.h>
15
14
  #include <fbjni/fbjni.h>
16
15
  #include <jsi/jsi.h>
@@ -42,10 +42,6 @@ class JMessageQueueThread : public MessageQueueThread {
42
42
  */
43
43
  void quitSynchronous() override;
44
44
 
45
- JavaMessageQueueThread::javaobject jobj() {
46
- return m_jobj.get();
47
- }
48
-
49
45
  private:
50
46
  jni::global_ref<JavaMessageQueueThread::javaobject> m_jobj;
51
47
  };
@@ -18,7 +18,7 @@ constexpr struct {
18
18
  int32_t Major = 0;
19
19
  int32_t Minor = 74;
20
20
  int32_t Patch = 0;
21
- std::string_view Prerelease = "rc.1";
21
+ std::string_view Prerelease = "rc.3";
22
22
  } ReactNativeVersion;
23
23
 
24
24
  } // namespace facebook::react
@@ -19,7 +19,7 @@ namespace facebook::react {
19
19
 
20
20
  struct JTurboModule : jni::JavaClass<JTurboModule> {
21
21
  static auto constexpr kJavaDescriptor =
22
- "Lcom/facebook/react/internal/turbomodule/core/interfaces/TurboModule;";
22
+ "Lcom/facebook/react/turbomodule/core/interfaces/TurboModule;";
23
23
  };
24
24
 
25
25
  class JSI_EXPORT JavaTurboModule : public TurboModule {
@@ -19,7 +19,7 @@ import com.facebook.react.bridge.ReadableMap;
19
19
  import com.facebook.react.bridge.WritableArray;
20
20
  import com.facebook.react.bridge.WritableMap;
21
21
  import com.facebook.react.common.build.ReactBuildConfig;
22
- import com.facebook.react.internal.turbomodule.core.interfaces.TurboModule;
22
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
23
23
  import java.util.Arrays;
24
24
  import java.util.HashSet;
25
25
  import java.util.Map;
@@ -140,6 +140,14 @@ BaseViewProps::BaseViewProps(
140
140
  "shadowRadius",
141
141
  sourceProps.shadowRadius,
142
142
  {})),
143
+ cursor(
144
+ CoreFeatures::enablePropIteratorSetter ? sourceProps.cursor
145
+ : convertRawProp(
146
+ context,
147
+ rawProps,
148
+ "cursor",
149
+ sourceProps.cursor,
150
+ {})),
143
151
  transform(
144
152
  CoreFeatures::enablePropIteratorSetter ? sourceProps.transform
145
153
  : convertRawProp(
@@ -281,6 +289,7 @@ void BaseViewProps::setProp(
281
289
  RAW_SET_PROP_SWITCH_CASE_BASIC(collapsable);
282
290
  RAW_SET_PROP_SWITCH_CASE_BASIC(removeClippedSubviews);
283
291
  RAW_SET_PROP_SWITCH_CASE_BASIC(experimental_layoutConformance);
292
+ RAW_SET_PROP_SWITCH_CASE_BASIC(cursor);
284
293
  // events field
285
294
  VIEW_EVENT_CASE(PointerEnter);
286
295
  VIEW_EVENT_CASE(PointerEnterCapture);
@@ -52,6 +52,8 @@ class BaseViewProps : public YogaStylableProps, public AccessibilityProps {
52
52
  Float shadowOpacity{};
53
53
  Float shadowRadius{3};
54
54
 
55
+ Cursor cursor{};
56
+
55
57
  // Transform
56
58
  Transform transform{};
57
59
  TransformOrigin transformOrigin{};
@@ -60,7 +60,7 @@ void ViewShadowNode::initialize() noexcept {
60
60
  viewProps.accessibilityElementsHidden ||
61
61
  viewProps.accessibilityViewIsModal ||
62
62
  viewProps.importantForAccessibility != ImportantForAccessibility::Auto ||
63
- viewProps.removeClippedSubviews ||
63
+ viewProps.removeClippedSubviews || viewProps.cursor != Cursor::Auto ||
64
64
  HostPlatformViewTraitsInitializer::formsStackingContext(viewProps);
65
65
 
66
66
  bool formsView = formsStackingContext ||
@@ -705,6 +705,28 @@ inline void fromRawValue(
705
705
  react_native_expect(false);
706
706
  }
707
707
 
708
+ inline void fromRawValue(
709
+ const PropsParserContext& context,
710
+ const RawValue& value,
711
+ Cursor& result) {
712
+ result = Cursor::Auto;
713
+ react_native_expect(value.hasType<std::string>());
714
+ if (!value.hasType<std::string>()) {
715
+ return;
716
+ }
717
+ auto stringValue = (std::string)value;
718
+ if (stringValue == "auto") {
719
+ result = Cursor::Auto;
720
+ return;
721
+ }
722
+ if (stringValue == "pointer") {
723
+ result = Cursor::Pointer;
724
+ return;
725
+ }
726
+ LOG(ERROR) << "Could not parse Cursor:" << stringValue;
727
+ react_native_expect(false);
728
+ }
729
+
708
730
  inline void fromRawValue(
709
731
  const PropsParserContext& /*context*/,
710
732
  const RawValue& value,
@@ -91,6 +91,8 @@ enum class BorderCurve : uint8_t { Circular, Continuous };
91
91
 
92
92
  enum class BorderStyle : uint8_t { Solid, Dotted, Dashed };
93
93
 
94
+ enum class Cursor : uint8_t { Auto, Pointer };
95
+
94
96
  enum class LayoutConformance : uint8_t { Undefined, Classic, Strict };
95
97
 
96
98
  template <typename T>
@@ -52,6 +52,10 @@ typedef std::shared_ptr<facebook::react::JSRuntimeFactory> (^RCTHostJSEngineProv
52
52
 
53
53
  @property (nonatomic, weak, nullable) id<RCTHostRuntimeDelegate> runtimeDelegate;
54
54
 
55
+ @property (nonatomic, readonly) RCTSurfacePresenter *surfacePresenter;
56
+
57
+ @property (nonatomic, readonly) RCTModuleRegistry *moduleRegistry;
58
+
55
59
  - (void)start;
56
60
 
57
61
  - (void)callFunctionOnJSModule:(NSString *)moduleName method:(NSString *)method args:(NSArray *)args;
@@ -64,11 +68,11 @@ typedef std::shared_ptr<facebook::react::JSRuntimeFactory> (^RCTHostJSEngineProv
64
68
 
65
69
  - (RCTFabricSurface *)createSurfaceWithModuleName:(NSString *)moduleName initialProperties:(NSDictionary *)properties;
66
70
 
67
- - (RCTSurfacePresenter *)getSurfacePresenter;
71
+ - (RCTSurfacePresenter *)getSurfacePresenter __attribute__((deprecated("Use `surfacePresenter` property instead.")));
68
72
 
69
73
  // Native module API
70
74
 
71
- - (RCTModuleRegistry *)getModuleRegistry;
75
+ - (RCTModuleRegistry *)getModuleRegistry __attribute__((deprecated("Use `moduleRegistry` property instead.")));
72
76
 
73
77
  @end
74
78
 
@@ -212,7 +212,7 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
212
212
  mode:(DisplayMode)displayMode
213
213
  initialProperties:(NSDictionary *)properties
214
214
  {
215
- RCTFabricSurface *surface = [[RCTFabricSurface alloc] initWithSurfacePresenter:[self getSurfacePresenter]
215
+ RCTFabricSurface *surface = [[RCTFabricSurface alloc] initWithSurfacePresenter:self.surfacePresenter
216
216
  moduleName:moduleName
217
217
  initialProperties:properties];
218
218
  surface.surfaceHandler.setDisplayMode(displayMode);
@@ -235,16 +235,28 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
235
235
  return [self createSurfaceWithModuleName:moduleName mode:DisplayMode::Visible initialProperties:properties];
236
236
  }
237
237
 
238
- - (RCTModuleRegistry *)getModuleRegistry
238
+ - (RCTModuleRegistry *)moduleRegistry
239
239
  {
240
240
  return _moduleRegistry;
241
241
  }
242
242
 
243
- - (RCTSurfacePresenter *)getSurfacePresenter
243
+ // Deprecated
244
+ - (RCTModuleRegistry *)getModuleRegistry
245
+ {
246
+ return self.moduleRegistry;
247
+ }
248
+
249
+ - (RCTSurfacePresenter *)surfacePresenter
244
250
  {
245
251
  return [_instance surfacePresenter];
246
252
  }
247
253
 
254
+ // Deprecated
255
+ - (RCTSurfacePresenter *)getSurfacePresenter
256
+ {
257
+ return self.surfacePresenter;
258
+ }
259
+
248
260
  - (void)callFunctionOnJSModule:(NSString *)moduleName method:(NSString *)method args:(NSArray *)args
249
261
  {
250
262
  [_instance callFunctionOnJSModule:moduleName method:method args:args];
@@ -276,7 +288,7 @@ class RCTHostPageTargetDelegate : public facebook::react::jsinspector_modern::Pa
276
288
  [_hostDelegate hostDidStart:self];
277
289
 
278
290
  for (RCTFabricSurface *surface in [self _getAttachedSurfaces]) {
279
- [surface resetWithSurfacePresenter:[self getSurfacePresenter]];
291
+ [surface resetWithSurfacePresenter:self.surfacePresenter];
280
292
  }
281
293
  }
282
294
 
@@ -28,6 +28,8 @@
28
28
  #import <React/RCTLogBox.h>
29
29
  #import <React/RCTModuleData.h>
30
30
  #import <React/RCTPerformanceLogger.h>
31
+ #import <React/RCTRedBox.h>
32
+ #import <React/RCTReloadCommand.h>
31
33
  #import <React/RCTSurfacePresenter.h>
32
34
  #import <ReactCommon/RCTTurboModuleManager.h>
33
35
  #import <ReactCommon/RuntimeExecutor.h>
@@ -122,10 +124,17 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
122
124
  }];
123
125
  }
124
126
 
125
- [[NSNotificationCenter defaultCenter] addObserver:self
126
- selector:@selector(_notifyEventDispatcherObserversOfEvent_DEPRECATED:)
127
- name:@"RCTNotifyEventDispatcherObserversOfEvent_DEPRECATED"
128
- object:nil];
127
+ NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
128
+
129
+ [defaultCenter addObserver:self
130
+ selector:@selector(_notifyEventDispatcherObserversOfEvent_DEPRECATED:)
131
+ name:@"RCTNotifyEventDispatcherObserversOfEvent_DEPRECATED"
132
+ object:nil];
133
+
134
+ [defaultCenter addObserver:self
135
+ selector:@selector(didReceiveReloadCommand)
136
+ name:RCTTriggerReloadCommandNotification
137
+ object:nil];
129
138
 
130
139
  [self _start];
131
140
  }
@@ -389,6 +398,24 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
389
398
  }
390
399
  }
391
400
 
401
+ - (void)handleBundleLoadingError:(NSError *)error
402
+ {
403
+ if (!_valid) {
404
+ return;
405
+ }
406
+
407
+ RCTRedBox *redBox = [_turboModuleManager moduleForName:"RedBox"];
408
+
409
+ RCTExecuteOnMainQueue(^{
410
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTJavaScriptDidFailToLoadNotification
411
+ object:self
412
+ userInfo:@{@"error" : error}];
413
+ [redBox showErrorMessage:[error localizedDescription]];
414
+
415
+ RCTFatal(error);
416
+ });
417
+ }
418
+
392
419
  - (void)_loadJSBundle:(NSURL *)sourceURL
393
420
  {
394
421
  #if RCT_DEV_MENU && __has_include(<React/RCTDevLoadingViewProtocol.h>)
@@ -420,8 +447,7 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
420
447
  }
421
448
 
422
449
  if (error) {
423
- // TODO(T91461138): Properly address bundle loading errors.
424
- RCTLogError(@"RCTInstance: Error while loading bundle: %@", error);
450
+ [strongSelf handleBundleLoadingError:error];
425
451
  [strongSelf invalidate];
426
452
  return;
427
453
  }
@@ -490,4 +516,9 @@ void RCTInstanceSetRuntimeDiagnosticFlags(NSString *flags)
490
516
  isFatal:errorMap.getBool(JSErrorHandlerKey::kIsFatal)];
491
517
  }
492
518
 
519
+ - (void)didReceiveReloadCommand
520
+ {
521
+ [self _loadJSBundle:[_bridgeModuleDecorator.bundleManager bundleURL]];
522
+ }
523
+
493
524
  @end
package/index.js CHANGED
@@ -27,7 +27,6 @@ import typeof Clipboard from './Libraries/Components/Clipboard/Clipboard';
27
27
  import typeof DrawerLayoutAndroid from './Libraries/Components/DrawerAndroid/DrawerLayoutAndroid';
28
28
  import typeof Keyboard from './Libraries/Components/Keyboard/Keyboard';
29
29
  import typeof KeyboardAvoidingView from './Libraries/Components/Keyboard/KeyboardAvoidingView';
30
- import typeof PopupMenuAndroid from './Libraries/Components/PopupMenuAndroid/PopupMenuAndroid';
31
30
  import typeof Pressable from './Libraries/Components/Pressable/Pressable';
32
31
  import typeof ProgressBarAndroid from './Libraries/Components/ProgressBarAndroid/ProgressBarAndroid';
33
32
  import typeof RefreshControl from './Libraries/Components/RefreshControl/RefreshControl';
@@ -135,10 +134,6 @@ module.exports = {
135
134
  return require('./Libraries/Components/Keyboard/KeyboardAvoidingView')
136
135
  .default;
137
136
  },
138
- get PopupMenuAndroid(): PopupMenuAndroid {
139
- return require('./Libraries/Components/PopupMenuAndroid/PopupMenuAndroid')
140
- .default;
141
- },
142
137
  get Modal(): Modal {
143
138
  return require('./Libraries/Modal/Modal');
144
139
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.74.0-rc.1",
3
+ "version": "0.74.0-rc.3",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -102,8 +102,8 @@
102
102
  "@react-native-community/cli-platform-android": "13.6.1",
103
103
  "@react-native-community/cli-platform-ios": "13.6.1",
104
104
  "@react-native/assets-registry": "0.74.0",
105
- "@react-native/codegen": "0.74.1",
106
- "@react-native/community-cli-plugin": "0.74.2",
105
+ "@react-native/codegen": "0.74.2",
106
+ "@react-native/community-cli-plugin": "0.74.5",
107
107
  "@react-native/gradle-plugin": "0.74.1",
108
108
  "@react-native/js-polyfills": "0.74.0",
109
109
  "@react-native/normalize-colors": "0.74.1",
@@ -283,11 +283,7 @@ function findLibrariesFromReactNativeConfig(projectRoot) {
283
283
  return [];
284
284
  }
285
285
 
286
- return extractLibrariesFromJSON(
287
- configFile,
288
- configFile.name,
289
- codegenConfigFileDir,
290
- );
286
+ return extractLibrariesFromJSON(configFile, codegenConfigFileDir);
291
287
  });
292
288
  }
293
289