react-native 0.83.0-nightly-20250926-2b5938c90 → 0.83.0-nightly-20250928-fb09b3764

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 (56) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
  3. package/React/Base/RCTVersion.m +1 -1
  4. package/ReactAndroid/gradle.properties +1 -1
  5. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.kt +37 -9
  6. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.kt +87 -50
  7. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt +18 -0
  8. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt +15 -3
  9. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  10. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt +0 -8
  11. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +3 -3
  12. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java +1 -3
  13. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +1 -6
  14. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +2 -2
  15. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.kt +1 -3
  16. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +45 -47
  17. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.h +3 -0
  18. package/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultComponentsRegistry.cpp +7 -6
  19. package/ReactAndroid/src/main/res/devsupport/values/strings.xml +2 -0
  20. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  21. package/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.h +1 -1
  22. package/ReactCommon/react/renderer/components/view/FilterPropsConversions.h +7 -4
  23. package/ReactCommon/react/renderer/components/view/PointerEvent.cpp +40 -21
  24. package/ReactCommon/react/renderer/components/view/TouchEvent.cpp +6 -4
  25. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +8 -7
  26. package/ReactCommon/react/renderer/components/view/conversions.h +64 -48
  27. package/ReactCommon/react/renderer/components/view/tests/LayoutTest.cpp +1 -1
  28. package/ReactCommon/react/renderer/components/view/tests/ViewTest.cpp +13 -13
  29. package/ReactCommon/react/renderer/core/LayoutConstraints.cpp +4 -2
  30. package/ReactCommon/react/renderer/core/LayoutConstraints.h +3 -3
  31. package/ReactCommon/react/renderer/core/LayoutMetrics.cpp +14 -14
  32. package/ReactCommon/react/renderer/core/LayoutMetrics.h +22 -15
  33. package/ReactCommon/react/renderer/core/LayoutableShadowNode.cpp +4 -4
  34. package/ReactCommon/react/renderer/core/RawProps.cpp +2 -1
  35. package/ReactCommon/react/renderer/core/graphicsConversions.h +22 -10
  36. package/ReactCommon/react/renderer/core/propsConversions.h +1 -1
  37. package/ReactCommon/react/renderer/core/tests/ComponentDescriptorTest.cpp +32 -26
  38. package/ReactCommon/react/renderer/core/tests/ConcreteShadowNodeTest.cpp +4 -1
  39. package/ReactCommon/react/renderer/core/tests/FindNodeAtPointTest.cpp +53 -50
  40. package/ReactCommon/react/renderer/core/tests/LayoutableShadowNodeTest.cpp +95 -95
  41. package/ReactCommon/react/renderer/core/tests/ShadowNodeFamilyTest.cpp +4 -1
  42. package/ReactCommon/react/renderer/core/tests/ShadowNodeTest.cpp +57 -48
  43. package/ReactCommon/react/renderer/core/tests/benchmarks/RawPropsBenchmark.cpp +4 -2
  44. package/ReactCommon/react/renderer/css/CSSColor.h +1 -1
  45. package/ReactCommon/react/renderer/css/CSSLength.h +3 -2
  46. package/package.json +8 -8
  47. package/sdks/hermes-engine/version.properties +1 -1
  48. package/sdks/hermesc/osx-bin/hermes +0 -0
  49. package/sdks/hermesc/osx-bin/hermesc +0 -0
  50. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  51. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NoSuchNativeViewException.kt +0 -34
  52. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/YogaNodePool.kt +0 -34
  53. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactRawTextManager.kt +0 -54
  54. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactRawTextShadowNode.kt +0 -38
  55. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactVirtualTextShadowNode.kt +0 -34
  56. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactVirtualTextViewManager.kt +0 -54
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
29
29
  static major: number = 0;
30
30
  static minor: number = 83;
31
31
  static patch: number = 0;
32
- static prerelease: string | null = 'nightly-20250926-2b5938c90';
32
+ static prerelease: string | null = 'nightly-20250928-fb09b3764';
33
33
 
34
34
  static getVersionString(): string {
35
35
  return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
@@ -373,7 +373,7 @@ export type GradientValue = {
373
373
  direction?: string | undefined;
374
374
  colorStops: ReadonlyArray<{
375
375
  color: ColorValue | null;
376
- positions?: ReadonlyArray<string[]> | undefined;
376
+ positions?: ReadonlyArray<string> | undefined;
377
377
  }>;
378
378
  };
379
379
 
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(83),
26
26
  RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"nightly-20250926-2b5938c90",
27
+ RCTVersionPrerelease: @"nightly-20250928-fb09b3764",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.83.0-nightly-20250926-2b5938c90
1
+ VERSION_NAME=0.83.0-nightly-20250928-fb09b3764
2
2
  react.internal.publishingGroup=com.facebook.react
3
3
  react.internal.hermesPublishingGroup=com.facebook.hermes
4
4
 
@@ -20,21 +20,49 @@ import kotlin.jvm.JvmStatic
20
20
  @DoNotStrip
21
21
  public open class ReadableNativeArray protected constructor() : NativeArray(), ReadableArray {
22
22
 
23
- private val localArray: Array<Any?> by
24
- lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
25
- jniPassCounter++
26
- importArray()
23
+ private var localArrayStorage: Array<Any?>? = null
24
+ private val localArray: Array<Any?>
25
+ get() {
26
+ var localArray = localArrayStorage
27
+ if (localArray != null) {
28
+ return localArray
27
29
  }
28
30
 
31
+ synchronized(this) {
32
+ // Check again with the lock held to prevent duplicate construction
33
+ localArray = localArrayStorage
34
+ if (localArray == null) {
35
+ localArray = importArray()
36
+ localArrayStorage = localArray
37
+ jniPassCounter++
38
+ }
39
+ return localArray
40
+ }
41
+ }
42
+
29
43
  private external fun importArray(): Array<Any?>
30
44
 
31
- private val localTypeArray: Array<ReadableType> by
32
- lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
33
- jniPassCounter++
34
- val tempArray = importTypeArray()
35
- Arrays.copyOf(tempArray, tempArray.size, Array<ReadableType>::class.java)
45
+ private var localTypeArrayStorage: Array<ReadableType>? = null
46
+ private val localTypeArray: Array<ReadableType>
47
+ get() {
48
+ var localTypeArray = localTypeArrayStorage
49
+ if (localTypeArray != null) {
50
+ return localTypeArray
36
51
  }
37
52
 
53
+ synchronized(this) {
54
+ // Check again with the lock held to prevent duplicate construction
55
+ localTypeArray = localTypeArrayStorage
56
+ if (localTypeArray == null) {
57
+ val tempArray = importTypeArray()
58
+ localTypeArray = Arrays.copyOf(tempArray, tempArray.size, Array<ReadableType>::class.java)
59
+ localTypeArrayStorage = localTypeArray
60
+ jniPassCounter++
61
+ }
62
+ return localTypeArray
63
+ }
64
+ }
65
+
38
66
  private external fun importTypeArray(): Array<Any>
39
67
 
40
68
  override fun size(): Int = localArray.size
@@ -17,33 +17,77 @@ import com.facebook.proguard.annotations.DoNotStripAny
17
17
  */
18
18
  @DoNotStripAny
19
19
  public open class ReadableNativeMap protected constructor() : NativeMap(), ReadableMap {
20
- private val keys: Array<String> by
21
- lazy(LazyThreadSafetyMode.SYNCHRONIZED) { importKeys().also { jniPassCounter++ } }
22
-
23
- private val localMap: HashMap<String, Any?> by
24
- lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
25
- val length = keys.size
26
- val res = HashMap<String, Any?>(length)
27
- val values = importValues()
28
- jniPassCounter++
29
- for (i in 0 until length) {
30
- res[keys[i]] = values[i]
20
+ private var keysStorage: Array<String>? = null
21
+ private val keys: Array<String>
22
+ get() {
23
+ var keys = keysStorage
24
+ if (keys != null) {
25
+ return keys
26
+ }
27
+
28
+ synchronized(this) {
29
+ // Check again with the lock held to prevent duplicate construction
30
+ keys = keysStorage
31
+ if (keys == null) {
32
+ keys = importKeys()
33
+ keysStorage = keys
34
+ jniPassCounter++
31
35
  }
32
- res
36
+ return keys
37
+ }
38
+ }
39
+
40
+ private var localMapStorage: Map<String, Any?>? = null
41
+ private val localMap: Map<String, Any?>
42
+ get() {
43
+ var localMap = localMapStorage
44
+ if (localMap != null) {
45
+ return localMap
33
46
  }
34
47
 
35
- private val localTypeMap: HashMap<String, ReadableType> by
36
- lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
37
- val length = keys.size
38
- val res = HashMap<String, ReadableType>(length)
39
- val types = importTypes()
40
- jniPassCounter++
41
- for (i in 0 until length) {
42
- res[keys[i]] = types[i] as ReadableType
48
+ synchronized(this) {
49
+ // Check again with the lock held to prevent duplicate construction
50
+ localMap = localMapStorage
51
+ if (localMap == null) {
52
+ val keys = keys
53
+ val length = keys.size
54
+ localMap = HashMap<String, Any?>()
55
+ val values = importValues()
56
+ for (i in 0 until length) {
57
+ localMap[keys[i]] = values[i]
58
+ }
59
+ localMapStorage = localMap
60
+ jniPassCounter++
43
61
  }
44
- res
62
+ return localMap
63
+ }
64
+ }
65
+
66
+ private var localTypeMapStorage: Map<String, ReadableType>? = null
67
+ private val localTypeMap: Map<String, ReadableType>
68
+ get() {
69
+ var localTypeMap = localTypeMapStorage
70
+ if (localTypeMap != null) {
71
+ return localTypeMap
45
72
  }
46
73
 
74
+ synchronized(this) {
75
+ // Check again with the lock held to prevent duplicate construction
76
+ localTypeMap = localTypeMapStorage
77
+ if (localTypeMap == null) {
78
+ val keys = keys
79
+ localTypeMap = HashMap<String, ReadableType>()
80
+ val types = importTypes()
81
+ for (i in 0 until keys.size) {
82
+ localTypeMap[keys[i]] = types[i] as ReadableType
83
+ }
84
+ localTypeMapStorage = localTypeMap
85
+ jniPassCounter++
86
+ }
87
+ return localTypeMap
88
+ }
89
+ }
90
+
47
91
  private external fun importKeys(): Array<String>
48
92
 
49
93
  private external fun importValues(): Array<Any>
@@ -76,7 +120,7 @@ public open class ReadableNativeMap protected constructor() : NativeMap(), Reada
76
120
  private inline fun <reified T> getValue(name: String, type: Class<T>): T =
77
121
  checkInstance(name, getValue(name), type)
78
122
 
79
- private fun getNullableValue(name: String): Any? = localMap.get(name)
123
+ private fun getNullableValue(name: String): Any? = localMap[name]
80
124
 
81
125
  private inline fun <reified T> getNullableValue(name: String, type: Class<T>): T? {
82
126
  val res = getNullableValue(name)
@@ -110,36 +154,29 @@ public open class ReadableNativeMap protected constructor() : NativeMap(), Reada
110
154
  override fun getDynamic(name: String): Dynamic = DynamicFromMap.create(this, name)
111
155
 
112
156
  override val entryIterator: Iterator<Map.Entry<String, Any>>
113
- get() =
114
- synchronized(this) {
115
- val iteratorKeys = keys
116
- val iteratorValues = importValues()
117
- jniPassCounter++
118
- return object : Iterator<Map.Entry<String, Any>> {
119
- var currentIndex = 0
120
-
121
- override fun hasNext(): Boolean {
122
- return currentIndex < iteratorKeys.size
123
- }
124
-
125
- override fun next(): Map.Entry<String, Any> {
126
- val index = currentIndex++
127
- return object : MutableMap.MutableEntry<String, Any> {
128
- override val key: String
129
- get() = iteratorKeys[index]
130
-
131
- override val value: Any
132
- get() = iteratorValues[index]
133
-
134
- override fun setValue(newValue: Any): Any {
135
- throw UnsupportedOperationException(
136
- "Can't set a value while iterating over a ReadableNativeMap"
137
- )
138
- }
139
- }
140
- }
157
+ get() {
158
+ val iteratorKeys = keys
159
+ val iteratorValues = importValues()
160
+ jniPassCounter++
161
+ return object : Iterator<Map.Entry<String, Any>> {
162
+ var currentIndex = 0
163
+
164
+ override fun hasNext(): Boolean {
165
+ return currentIndex < iteratorKeys.size
166
+ }
167
+
168
+ override fun next(): Map.Entry<String, Any> {
169
+ val index = currentIndex++
170
+ return object : Map.Entry<String, Any> {
171
+ override val key: String
172
+ get() = iteratorKeys[index]
173
+
174
+ override val value: Any
175
+ get() = iteratorValues[index]
141
176
  }
142
177
  }
178
+ }
179
+ }
143
180
 
144
181
  override fun keySetIterator(): ReadableMapKeySetIterator {
145
182
  val iteratorKeys = keys
@@ -398,6 +398,24 @@ public abstract class DevSupportManagerBase(
398
398
  }
399
399
  }
400
400
 
401
+ if (ReactNativeFeatureFlags.perfMonitorV2Enabled()) {
402
+ val isConnected = isPackagerConnected
403
+
404
+ val togglePerfMonitorItemString =
405
+ if (perfMonitorOverlayManager?.isEnabled == true)
406
+ applicationContext.getString(R.string.catalyst_performance_disable)
407
+ else applicationContext.getString(R.string.catalyst_performance_enable)
408
+
409
+ if (!isConnected) {
410
+ disabledItemKeys.add(togglePerfMonitorItemString)
411
+ }
412
+
413
+ options[togglePerfMonitorItemString] =
414
+ if (perfMonitorOverlayManager?.isEnabled == true)
415
+ DevOptionHandler { perfMonitorOverlayManager?.disable() }
416
+ else DevOptionHandler { perfMonitorOverlayManager?.enable() }
417
+ }
418
+
401
419
  options[applicationContext.getString(R.string.catalyst_change_bundle_location)] =
402
420
  DevOptionHandler {
403
421
  val context = reactInstanceDevHelper.currentActivity
@@ -15,23 +15,35 @@ internal class PerfMonitorOverlayManager(
15
15
  private val onRequestOpenDevTools: () -> Unit,
16
16
  ) : PerfMonitorUpdateListener {
17
17
  private var enabled: Boolean = false
18
+
19
+ /** Whether the Perf Monitor overlay is currently enabled. */
20
+ val isEnabled: Boolean
21
+ get() = enabled
22
+
18
23
  private var view: PerfMonitorOverlayView? = null
19
24
  private var tracingState: TracingState = TracingState.ENABLEDINCDPMODE
20
25
 
21
26
  /** Enable the Perf Monitor overlay. */
22
27
  fun enable() {
28
+ if (enabled) {
29
+ return
30
+ }
31
+
23
32
  enabled = true
24
33
  UiThreadUtil.runOnUiThread {
25
34
  val context = devHelper.currentActivity ?: return@runOnUiThread
26
- view = PerfMonitorOverlayView(context, ::handleRecordingButtonPress)
35
+ if (view == null) {
36
+ view = PerfMonitorOverlayView(context, ::handleRecordingButtonPress)
37
+ }
38
+ view?.show()
27
39
  }
28
40
  }
29
41
 
30
42
  /** Disable the Perf Monitor overlay. Will remain hidden when updates are received. */
31
43
  fun disable() {
32
- UiThreadUtil.runOnUiThread { view?.hide() }
33
- view = null
34
44
  enabled = false
45
+
46
+ UiThreadUtil.runOnUiThread { view?.hide() }
35
47
  }
36
48
 
37
49
  /** Start background trace recording. */
@@ -15,6 +15,6 @@ public object ReactNativeVersion {
15
15
  "major" to 0,
16
16
  "minor" to 83,
17
17
  "patch" to 0,
18
- "prerelease" to "nightly-20250926-2b5938c90"
18
+ "prerelease" to "nightly-20250928-fb09b3764"
19
19
  )
20
20
  }
@@ -147,12 +147,10 @@ constructor(private val config: MainPackageConfig? = null) :
147
147
  FrescoBasedReactTextInlineImageViewManager(),
148
148
  ReactImageManager(),
149
149
  ReactModalHostManager(),
150
- com.facebook.react.views.text.ReactRawTextManager(),
151
150
  ReactTextInputManager(),
152
151
  if (ReactNativeFeatureFlags.enablePreparedTextLayout()) PreparedLayoutTextViewManager()
153
152
  else ReactTextViewManager(),
154
153
  ReactViewManager(),
155
- com.facebook.react.views.text.ReactVirtualTextViewManager(),
156
154
  ReactUnimplementedViewManager(),
157
155
  )
158
156
 
@@ -184,8 +182,6 @@ constructor(private val config: MainPackageConfig? = null) :
184
182
  ReactImageManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactImageManager() },
185
183
  ReactModalHostManager.REACT_CLASS to
186
184
  ModuleSpec.viewManagerSpec { ReactModalHostManager() },
187
- com.facebook.react.views.text.ReactRawTextManager.REACT_CLASS to
188
- ModuleSpec.viewManagerSpec { com.facebook.react.views.text.ReactRawTextManager() },
189
185
  ReactTextInputManager.REACT_CLASS to
190
186
  ModuleSpec.viewManagerSpec { ReactTextInputManager() },
191
187
  ReactTextViewManager.REACT_CLASS to
@@ -195,10 +191,6 @@ constructor(private val config: MainPackageConfig? = null) :
195
191
  else ReactTextViewManager()
196
192
  },
197
193
  ReactViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactViewManager() },
198
- com.facebook.react.views.text.ReactVirtualTextViewManager.REACT_CLASS to
199
- ModuleSpec.viewManagerSpec {
200
- com.facebook.react.views.text.ReactVirtualTextViewManager()
201
- },
202
194
  ReactUnimplementedViewManager.REACT_CLASS to
203
195
  ModuleSpec.viewManagerSpec { ReactUnimplementedViewManager() },
204
196
  )
@@ -706,14 +706,14 @@ public class NativeViewHierarchyManager {
706
706
  UiThreadUtil.assertOnUiThread();
707
707
  View v = mTagsToViews.get(tag);
708
708
  if (v == null) {
709
- throw new NoSuchNativeViewException("No native view for " + tag + " currently exists");
709
+ throw new IllegalViewOperationException("No native view for " + tag + " currently exists");
710
710
  }
711
711
 
712
712
  View rootView = (View) RootViewUtil.getRootView(v);
713
713
  // It is possible that the RootView can't be found because this view is no longer on the screen
714
714
  // and has been removed by clipping
715
715
  if (rootView == null) {
716
- throw new NoSuchNativeViewException("Native view " + tag + " is no longer on screen");
716
+ throw new IllegalViewOperationException("Native view " + tag + " is no longer on screen");
717
717
  }
718
718
  computeBoundingBox(rootView, outputBuffer);
719
719
  int rootX = outputBuffer[0];
@@ -773,7 +773,7 @@ public class NativeViewHierarchyManager {
773
773
  UiThreadUtil.assertOnUiThread();
774
774
  View v = mTagsToViews.get(tag);
775
775
  if (v == null) {
776
- throw new NoSuchNativeViewException("No native view for " + tag + " currently exists");
776
+ throw new IllegalViewOperationException("No native view for " + tag + " currently exists");
777
777
  }
778
778
 
779
779
  v.getLocationOnScreen(outputBuffer);
@@ -106,8 +106,7 @@ public class ReactShadowNodeImpl implements ReactShadowNode<ReactShadowNodeImpl>
106
106
  public ReactShadowNodeImpl() {
107
107
  mDefaultPadding = new Spacing(0f);
108
108
  if (!isVirtual()) {
109
- YogaNode node = YogaNodePool.get().acquire();
110
- mYogaNode = node == null ? YogaNodeFactory.create(sYogaConfig) : node;
109
+ mYogaNode = YogaNodeFactory.create(sYogaConfig);
111
110
  mYogaNode.setData(this);
112
111
  Arrays.fill(mPadding, YogaConstants.UNDEFINED);
113
112
  } else {
@@ -1101,7 +1100,6 @@ public class ReactShadowNodeImpl implements ReactShadowNode<ReactShadowNodeImpl>
1101
1100
  public void dispose() {
1102
1101
  if (mYogaNode != null) {
1103
1102
  mYogaNode.reset();
1104
- YogaNodePool.get().release(mYogaNode);
1105
1103
  }
1106
1104
  }
1107
1105
 
@@ -219,7 +219,6 @@ public class UIManagerModule extends ReactContextBaseJavaModule
219
219
  ReactApplicationContext reactApplicationContext = getReactApplicationContext();
220
220
  reactApplicationContext.unregisterComponentCallbacks(mMemoryTrimCallback);
221
221
  reactApplicationContext.unregisterComponentCallbacks(mViewManagerRegistry);
222
- YogaNodePool.get().clear();
223
222
  ViewManagerPropertyUpdater.clear();
224
223
  }
225
224
 
@@ -815,11 +814,7 @@ public class UIManagerModule extends ReactContextBaseJavaModule
815
814
  private static class MemoryTrimCallback implements ComponentCallbacks2 {
816
815
 
817
816
  @Override
818
- public void onTrimMemory(int level) {
819
- if (level >= TRIM_MEMORY_MODERATE) {
820
- YogaNodePool.get().clear();
821
- }
822
- }
817
+ public void onTrimMemory(int level) {}
823
818
 
824
819
  @Override
825
820
  public void onConfigurationChanged(Configuration newConfig) {}
@@ -418,7 +418,7 @@ public class UIViewOperationQueue {
418
418
  public void execute() {
419
419
  try {
420
420
  mNativeViewHierarchyManager.measure(mReactTag, mMeasureBuffer);
421
- } catch (NoSuchNativeViewException e) {
421
+ } catch (IllegalViewOperationException e) {
422
422
  // Invoke with no args to signal failure and to allow JS to clean up the callback
423
423
  // handle.
424
424
  mCallback.invoke();
@@ -448,7 +448,7 @@ public class UIViewOperationQueue {
448
448
  public void execute() {
449
449
  try {
450
450
  mNativeViewHierarchyManager.measureInWindow(mReactTag, mMeasureBuffer);
451
- } catch (NoSuchNativeViewException e) {
451
+ } catch (IllegalViewOperationException e) {
452
452
  // Invoke with no args to signal failure and to allow JS to clean up the callback
453
453
  // handle.
454
454
  mCallback.invoke();
@@ -523,9 +523,7 @@ public constructor(
523
523
  val child: ReactShadowNode<*> = textShadowNode.getChildAt(i)
524
524
 
525
525
  @Suppress("DEPRECATION")
526
- if (child is ReactRawTextShadowNode) {
527
- child.text?.let { sb.append(apply(it, textAttributes.textTransform)) }
528
- } else if (child is ReactBaseTextShadowNode) {
526
+ if (child is ReactBaseTextShadowNode) {
529
527
  buildSpannedFromShadowNode(
530
528
  child,
531
529
  sb,
@@ -32,54 +32,52 @@ namespace facebook::react::CoreComponentsRegistry {
32
32
  std::shared_ptr<const ComponentDescriptorProviderRegistry>
33
33
  sharedProviderRegistry() {
34
34
  static auto providerRegistry =
35
- []() -> std::shared_ptr<ComponentDescriptorProviderRegistry> {
36
- auto providerRegistry =
37
- std::make_shared<ComponentDescriptorProviderRegistry>();
38
-
39
- providerRegistry->add(concreteComponentDescriptorProvider<
40
- AndroidProgressBarComponentDescriptor>());
41
- providerRegistry->add(concreteComponentDescriptorProvider<
42
- AndroidSwipeRefreshLayoutComponentDescriptor>());
43
- providerRegistry->add(concreteComponentDescriptorProvider<
44
- ActivityIndicatorViewComponentDescriptor>());
45
- providerRegistry->add(concreteComponentDescriptorProvider<
46
- AndroidTextInputComponentDescriptor>());
47
- providerRegistry->add(
48
- concreteComponentDescriptorProvider<ViewComponentDescriptor>());
49
- providerRegistry->add(
50
- concreteComponentDescriptorProvider<ImageComponentDescriptor>());
51
- providerRegistry->add(concreteComponentDescriptorProvider<
52
- ModalHostViewComponentDescriptor>());
53
- providerRegistry->add(concreteComponentDescriptorProvider<
54
- AndroidSwitchComponentDescriptor>());
55
- providerRegistry->add(
56
- concreteComponentDescriptorProvider<SafeAreaViewComponentDescriptor>());
57
- providerRegistry->add(
58
- concreteComponentDescriptorProvider<TextComponentDescriptor>());
59
- providerRegistry->add(
60
- concreteComponentDescriptorProvider<RawTextComponentDescriptor>());
61
- providerRegistry->add(
62
- concreteComponentDescriptorProvider<ScrollViewComponentDescriptor>());
63
- providerRegistry->add(
64
- concreteComponentDescriptorProvider<
65
- AndroidHorizontalScrollContentViewComponentDescriptor>());
66
- providerRegistry->add(
67
- concreteComponentDescriptorProvider<ParagraphComponentDescriptor>());
68
- providerRegistry->add(concreteComponentDescriptorProvider<
69
- AndroidDrawerLayoutComponentDescriptor>());
70
- providerRegistry->add(concreteComponentDescriptorProvider<
71
- DebuggingOverlayComponentDescriptor>());
72
- providerRegistry->add(concreteComponentDescriptorProvider<
73
- LayoutConformanceComponentDescriptor>());
74
- providerRegistry->add(
75
- concreteComponentDescriptorProvider<VirtualViewComponentDescriptor>());
76
- providerRegistry->add(concreteComponentDescriptorProvider<
77
- VirtualViewExperimentalComponentDescriptor>());
78
-
79
- return providerRegistry;
80
- }();
81
-
35
+ std::make_shared<ComponentDescriptorProviderRegistry>();
82
36
  return providerRegistry;
83
37
  }
84
38
 
39
+ void addCoreComponents(
40
+ std::shared_ptr<const ComponentDescriptorProviderRegistry>
41
+ providerRegistry) {
42
+ providerRegistry->add(concreteComponentDescriptorProvider<
43
+ AndroidProgressBarComponentDescriptor>());
44
+ providerRegistry->add(concreteComponentDescriptorProvider<
45
+ AndroidSwipeRefreshLayoutComponentDescriptor>());
46
+ providerRegistry->add(concreteComponentDescriptorProvider<
47
+ ActivityIndicatorViewComponentDescriptor>());
48
+ providerRegistry->add(concreteComponentDescriptorProvider<
49
+ AndroidTextInputComponentDescriptor>());
50
+ providerRegistry->add(
51
+ concreteComponentDescriptorProvider<ViewComponentDescriptor>());
52
+ providerRegistry->add(
53
+ concreteComponentDescriptorProvider<ImageComponentDescriptor>());
54
+ providerRegistry->add(
55
+ concreteComponentDescriptorProvider<ModalHostViewComponentDescriptor>());
56
+ providerRegistry->add(
57
+ concreteComponentDescriptorProvider<AndroidSwitchComponentDescriptor>());
58
+ providerRegistry->add(
59
+ concreteComponentDescriptorProvider<SafeAreaViewComponentDescriptor>());
60
+ providerRegistry->add(
61
+ concreteComponentDescriptorProvider<TextComponentDescriptor>());
62
+ providerRegistry->add(
63
+ concreteComponentDescriptorProvider<RawTextComponentDescriptor>());
64
+ providerRegistry->add(
65
+ concreteComponentDescriptorProvider<ScrollViewComponentDescriptor>());
66
+ providerRegistry->add(
67
+ concreteComponentDescriptorProvider<
68
+ AndroidHorizontalScrollContentViewComponentDescriptor>());
69
+ providerRegistry->add(
70
+ concreteComponentDescriptorProvider<ParagraphComponentDescriptor>());
71
+ providerRegistry->add(concreteComponentDescriptorProvider<
72
+ AndroidDrawerLayoutComponentDescriptor>());
73
+ providerRegistry->add(concreteComponentDescriptorProvider<
74
+ DebuggingOverlayComponentDescriptor>());
75
+ providerRegistry->add(concreteComponentDescriptorProvider<
76
+ LayoutConformanceComponentDescriptor>());
77
+ providerRegistry->add(
78
+ concreteComponentDescriptorProvider<VirtualViewComponentDescriptor>());
79
+ providerRegistry->add(concreteComponentDescriptorProvider<
80
+ VirtualViewExperimentalComponentDescriptor>());
81
+ }
82
+
85
83
  } // namespace facebook::react::CoreComponentsRegistry
@@ -14,4 +14,7 @@ namespace facebook::react::CoreComponentsRegistry {
14
14
  std::shared_ptr<const ComponentDescriptorProviderRegistry>
15
15
  sharedProviderRegistry();
16
16
 
17
+ void addCoreComponents(
18
+ std::shared_ptr<const ComponentDescriptorProviderRegistry> registry);
19
+
17
20
  } // namespace facebook::react::CoreComponentsRegistry
@@ -36,18 +36,19 @@ void DefaultComponentsRegistry::setRegistryRunction(
36
36
  .flavor = nullptr};
37
37
 
38
38
  auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();
39
- if (registerCodegenComponentDescriptorsFromEntryPoint) {
40
- registerCodegenComponentDescriptorsFromEntryPoint(providerRegistry);
41
- } else {
42
- LOG(WARNING)
43
- << "Codegen component descriptors were not configured from JNI_OnLoad";
44
- }
45
39
  if (registerComponentDescriptorsFromEntryPoint) {
46
40
  registerComponentDescriptorsFromEntryPoint(providerRegistry);
47
41
  } else {
48
42
  LOG(WARNING)
49
43
  << "Custom component descriptors were not configured from JNI_OnLoad";
50
44
  }
45
+ if (registerCodegenComponentDescriptorsFromEntryPoint) {
46
+ registerCodegenComponentDescriptorsFromEntryPoint(providerRegistry);
47
+ } else {
48
+ LOG(WARNING)
49
+ << "Codegen component descriptors were not configured from JNI_OnLoad";
50
+ }
51
+ CoreComponentsRegistry::addCoreComponents(providerRegistry);
51
52
 
52
53
  auto registry = providerRegistry->createComponentDescriptorRegistry(params);
53
54
  auto& mutableRegistry = const_cast<ComponentDescriptorRegistry&>(*registry);
@@ -13,6 +13,8 @@
13
13
  <string name="catalyst_performance_background" project="catalyst" translatable="false">Finish performance trace</string>
14
14
  <string name="catalyst_performance_disabled" project="catalyst" translatable="false">Start performance trace</string>
15
15
  <string name="catalyst_performance_cdp" project="catalyst" translatable="false">Performance tracing disabled</string>
16
+ <string name="catalyst_performance_enable" project="catalyst" translatable="false">Show performance overlay</string>
17
+ <string name="catalyst_performance_disable" project="catalyst" translatable="false">Hide performance overlay</string>
16
18
  <string name="catalyst_debug_open_disabled" project="catalyst" translatable="false">Connect to the bundler to debug JavaScript</string>
17
19
  <string name="catalyst_debug_connecting" project="catalyst" translatable="false">Connecting to debugger...</string>
18
20
  <string name="catalyst_debug_error" project="catalyst" translatable="false">Failed to connect to debugger!</string>
@@ -22,7 +22,7 @@ constexpr struct {
22
22
  int32_t Major = 0;
23
23
  int32_t Minor = 83;
24
24
  int32_t Patch = 0;
25
- std::string_view Prerelease = "nightly-20250926-2b5938c90";
25
+ std::string_view Prerelease = "nightly-20250928-fb09b3764";
26
26
  } ReactNativeVersion;
27
27
 
28
28
  } // namespace facebook::react
@@ -14,7 +14,7 @@
14
14
 
15
15
  namespace facebook::react {
16
16
 
17
- class HostPlatformScrollViewProps final : public BaseScrollViewProps {
17
+ class HostPlatformScrollViewProps : public BaseScrollViewProps {
18
18
  public:
19
19
  HostPlatformScrollViewProps() = default;
20
20
  HostPlatformScrollViewProps(