react-native 0.83.0-nightly-20251030-26ad9492b → 0.83.0-nightly-20251101-693e9628e

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 (86) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +5 -2
  3. package/Libraries/LogBox/UI/AnsiHighlight.js +4 -1
  4. package/Libraries/Network/XMLHttpRequest.js +1 -39
  5. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +20 -82
  6. package/React/Base/RCTVersion.m +1 -1
  7. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +16 -0
  8. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +12 -1
  9. package/React/Views/RCTBorderDrawing.m +6 -2
  10. package/ReactAndroid/api/ReactAndroid.api +2 -0
  11. package/ReactAndroid/gradle.properties +1 -1
  12. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayManager.kt +12 -0
  13. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +35 -7
  14. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorUpdateListener.kt +4 -0
  15. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +1 -1
  16. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +13 -1
  17. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +21 -1
  18. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +5 -1
  19. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +6 -2
  20. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +23 -1
  21. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android.kt +1 -3
  22. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +5 -1
  23. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  24. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt +6 -0
  25. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt +160 -2
  26. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BlendModeHelper.kt +14 -1
  27. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolver.kt +11 -1
  28. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverBinding.kt +12 -0
  29. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt +16 -0
  30. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/FloatUtil.kt +33 -0
  31. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +12 -3
  32. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +9 -0
  33. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/view/ReactVirtualView.kt +16 -5
  34. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimental.kt +17 -5
  35. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +29 -1
  36. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +7 -1
  37. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +7 -0
  38. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +1 -0
  39. package/ReactApple/RCTSwiftUI/RCTSwiftUIContainerView.swift +18 -0
  40. package/ReactApple/RCTSwiftUIWrapper/RCTSwiftUIContainerViewWrapper.h +2 -0
  41. package/ReactApple/RCTSwiftUIWrapper/RCTSwiftUIContainerViewWrapper.m +10 -0
  42. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  43. package/ReactCommon/jsc/JSCRuntime.cpp +1 -0
  44. package/ReactCommon/jsinspector-modern/HostTarget.cpp +14 -0
  45. package/ReactCommon/jsinspector-modern/HostTarget.h +22 -0
  46. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +5 -0
  47. package/ReactCommon/jsinspector-modern/InspectorFlags.h +6 -0
  48. package/ReactCommon/jsinspector-modern/PerfMonitorV2.cpp +29 -0
  49. package/ReactCommon/jsinspector-modern/PerfMonitorV2.h +38 -0
  50. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +1 -4
  51. package/ReactCommon/jsinspector-modern/RuntimeTargetConsole.cpp +10 -1
  52. package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
  53. package/ReactCommon/jsinspector-modern/tracing/ConsoleTimeStamp.cpp +22 -0
  54. package/ReactCommon/jsinspector-modern/tracing/ConsoleTimeStamp.h +4 -0
  55. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +10 -1
  56. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h +3 -1
  57. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
  58. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +9 -1
  59. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +11 -1
  60. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +71 -35
  61. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +6 -2
  62. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +10 -2
  63. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +19 -1
  64. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSCanary.h +1 -5
  65. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +3 -1
  66. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +11 -1
  67. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +5 -1
  68. package/ReactCommon/react/performance/cdpmetrics/CdpMetricsReporter.h +4 -4
  69. package/ReactCommon/react/performance/cdpmetrics/CdpPerfIssuesReporter.cpp +60 -0
  70. package/ReactCommon/react/performance/cdpmetrics/CdpPerfIssuesReporter.h +37 -0
  71. package/ReactCommon/react/performance/timeline/PerformanceEntryReporter.cpp +26 -15
  72. package/ReactCommon/react/performance/timeline/PerformanceEntryReporter.h +6 -5
  73. package/ReactCommon/react/performance/timeline/PerformanceEntryReporterListeners.h +10 -2
  74. package/ReactCommon/react/performance/timeline/tests/PerformanceObserverTest.cpp +6 -2
  75. package/ReactCommon/react/renderer/core/ShadowNode.cpp +1 -1
  76. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +12 -4
  77. package/ReactCommon/react/renderer/scheduler/Scheduler.h +2 -0
  78. package/flow/bom.js.flow +1 -0
  79. package/package.json +9 -9
  80. package/sdks/hermes-engine/version.properties +1 -1
  81. package/src/private/featureflags/ReactNativeFeatureFlags.js +12 -8
  82. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -1
  83. package/types_generated/Libraries/Network/XMLHttpRequest.d.ts +1 -2
  84. package/types_generated/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.d.ts +9 -10
  85. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +0 -152
  86. package/types_generated/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.d.ts +0 -28
@@ -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-20251030-26ad9492b';
32
+ static prerelease: string | null = 'nightly-20251101-693e9628e';
33
33
 
34
34
  static getVersionString(): string {
35
35
  return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
@@ -30,8 +30,11 @@ class RCTDeviceEventEmitterImpl extends EventEmitter<RCTDeviceEventDefinitions>
30
30
  ...args: RCTDeviceEventDefinitions[TEvent]
31
31
  ): void {
32
32
  beginEvent(() => `RCTDeviceEventEmitter.emit#${eventType}`);
33
- super.emit(eventType, ...args);
34
- endEvent();
33
+ try {
34
+ super.emit(eventType, ...args);
35
+ } finally {
36
+ endEvent();
37
+ }
35
38
  }
36
39
  }
37
40
  const RCTDeviceEventEmitter: IEventEmitter<RCTDeviceEventDefinitions> =
@@ -87,7 +87,7 @@ export default function Ansi({
87
87
  <View style={styles.container}>
88
88
  {parsedLines.map((items, i) => (
89
89
  <View style={styles.line} key={i}>
90
- <Text>
90
+ <Text style={styles.text}>
91
91
  {items.map((bundle, key) => {
92
92
  const textStyle =
93
93
  bundle.fg && COLORS[bundle.fg]
@@ -122,4 +122,7 @@ const styles = StyleSheet.create({
122
122
  line: {
123
123
  flexDirection: 'row',
124
124
  },
125
+ text: {
126
+ flexGrow: 1,
127
+ },
125
128
  });
@@ -14,7 +14,6 @@ import type {
14
14
  EventCallback,
15
15
  EventListener,
16
16
  } from '../../src/private/webapis/dom/events/EventTarget';
17
- import type Performance from '../../src/private/webapis/performance/Performance';
18
17
  import type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';
19
18
 
20
19
  import Event from '../../src/private/webapis/dom/events/Event';
@@ -34,13 +33,7 @@ const RCTNetworking = require('./RCTNetworking').default;
34
33
  const base64 = require('base64-js');
35
34
  const invariant = require('invariant');
36
35
 
37
- const PERFORMANCE_TRACK_NAME = 'Network (JS-initiated only)';
38
- const PERFORMANCE_TRACK_GROUP = 'Chrome DevTools Temp Compat';
39
-
40
- declare var performance: Performance;
41
-
42
36
  const DEBUG_NETWORK_SEND_DELAY: false = false; // Set to a number of milliseconds when debugging
43
- const LABEL_FOR_MISSING_URL_FOR_PROFILING = 'Unknown URL';
44
37
 
45
38
  export type NativeResponseType = 'base64' | 'blob' | 'text';
46
39
  export type ResponseType =
@@ -141,7 +134,6 @@ class XMLHttpRequest extends EventTarget {
141
134
  static DONE: number = DONE;
142
135
 
143
136
  static _interceptor: ?XHRInterceptor = null;
144
- static _profiling: boolean = false;
145
137
 
146
138
  UNSENT: number = UNSENT;
147
139
  OPENED: number = OPENED;
@@ -182,10 +174,6 @@ class XMLHttpRequest extends EventTarget {
182
174
  XMLHttpRequest._interceptor = interceptor;
183
175
  }
184
176
 
185
- static enableProfiling(enableProfiling: boolean): void {
186
- XMLHttpRequest._profiling = enableProfiling;
187
- }
188
-
189
177
  constructor() {
190
178
  super();
191
179
  this._reset();
@@ -389,23 +377,12 @@ class XMLHttpRequest extends EventTarget {
389
377
  return;
390
378
  }
391
379
 
392
- const start = XMLHttpRequest._profiling ? performance.now() : undefined;
393
-
394
380
  if (!this._response) {
395
381
  this._response = responseText;
396
382
  } else {
397
383
  this._response += responseText;
398
384
  }
399
385
 
400
- if (XMLHttpRequest._profiling) {
401
- console.timeStamp(
402
- 'Incremental Data: ' + this._getMeasureURL(),
403
- start,
404
- undefined,
405
- PERFORMANCE_TRACK_NAME,
406
- PERFORMANCE_TRACK_GROUP,
407
- );
408
- }
409
386
  XMLHttpRequest._interceptor &&
410
387
  XMLHttpRequest._interceptor.dataReceived(requestId, responseText);
411
388
 
@@ -450,16 +427,7 @@ class XMLHttpRequest extends EventTarget {
450
427
  this._clearSubscriptions();
451
428
  this._requestId = null;
452
429
  this.setReadyState(this.DONE);
453
- if (XMLHttpRequest._profiling && this._startTime != null) {
454
- const start = this._startTime;
455
- console.timeStamp(
456
- this._getMeasureURL(),
457
- start,
458
- undefined,
459
- PERFORMANCE_TRACK_NAME,
460
- PERFORMANCE_TRACK_GROUP,
461
- );
462
- }
430
+
463
431
  if (error) {
464
432
  XMLHttpRequest._interceptor &&
465
433
  XMLHttpRequest._interceptor.loadingFailed(requestId, error);
@@ -729,12 +697,6 @@ class XMLHttpRequest extends EventTarget {
729
697
  super.addEventListener(type, listener);
730
698
  }
731
699
 
732
- _getMeasureURL(): string {
733
- return (
734
- this._trackingName ?? this._url ?? LABEL_FOR_MISSING_URL_FOR_PROFILING
735
- );
736
- }
737
-
738
700
  /*
739
701
  * `on<event>` event handling (without JS prototype magic).
740
702
  */
@@ -13,124 +13,62 @@
13
13
  * instances and get some data from them (like their instance handle / fiber).
14
14
  */
15
15
 
16
- import type ReactNativeDocumentT from '../../../src/private/webapis/dom/nodes/ReactNativeDocument';
17
- import typeof * as ReactNativeDocumentModuleT from '../../../src/private/webapis/dom/nodes/ReactNativeDocument';
18
- import type ReactNativeElementT from '../../../src/private/webapis/dom/nodes/ReactNativeElement';
19
- import type ReadOnlyTextT from '../../../src/private/webapis/dom/nodes/ReadOnlyText';
20
- import typeof * as RendererProxyT from '../../ReactNative/RendererProxy';
21
16
  import type {
22
17
  InternalInstanceHandle,
23
18
  Node,
24
19
  ViewConfig,
25
20
  } from '../../Renderer/shims/ReactNativeTypes';
26
21
  import type {RootTag} from '../RootTag';
27
- import type ReactFabricHostComponentT from './ReactFabricHostComponent';
28
22
 
29
- import * as ReactNativeFeatureFlags from '../../../src/private/featureflags/ReactNativeFeatureFlags';
23
+ import ReactNativeDocument, {
24
+ createReactNativeDocument,
25
+ } from '../../../src/private/webapis/dom/nodes/ReactNativeDocument';
26
+ import ReactNativeElement from '../../../src/private/webapis/dom/nodes/ReactNativeElement';
27
+ import ReadOnlyText from '../../../src/private/webapis/dom/nodes/ReadOnlyText';
28
+ import * as RendererProxy from '../../ReactNative/RendererProxy';
30
29
 
31
30
  export opaque type PublicRootInstance = mixed;
32
31
 
33
- // Lazy loaded to avoid evaluating the module when using the legacy renderer.
34
- let ReactNativeDocumentModuleObject: ?ReactNativeDocumentModuleT;
35
- let ReactFabricHostComponentClass: Class<ReactFabricHostComponentT>;
36
- let ReactNativeElementClass: Class<ReactNativeElementT>;
37
- let ReadOnlyTextClass: Class<ReadOnlyTextT>;
38
- let RendererProxy: RendererProxyT;
39
-
40
- function getReactNativeDocumentModule(): ReactNativeDocumentModuleT {
41
- if (ReactNativeDocumentModuleObject == null) {
42
- // We initialize this lazily to avoid a require cycle.
43
- ReactNativeDocumentModuleObject = require('../../../src/private/webapis/dom/nodes/ReactNativeDocument');
44
- }
45
-
46
- return ReactNativeDocumentModuleObject;
47
- }
48
-
49
- function getReactNativeElementClass(): Class<ReactNativeElementT> {
50
- if (ReactNativeElementClass == null) {
51
- ReactNativeElementClass =
52
- require('../../../src/private/webapis/dom/nodes/ReactNativeElement').default;
53
- }
54
- return ReactNativeElementClass;
55
- }
56
-
57
- function getReactFabricHostComponentClass(): Class<ReactFabricHostComponentT> {
58
- if (ReactFabricHostComponentClass == null) {
59
- ReactFabricHostComponentClass =
60
- require('./ReactFabricHostComponent').default;
61
- }
62
- return ReactFabricHostComponentClass;
63
- }
64
-
65
- function getReadOnlyTextClass(): Class<ReadOnlyTextT> {
66
- if (ReadOnlyTextClass == null) {
67
- ReadOnlyTextClass =
68
- require('../../../src/private/webapis/dom/nodes/ReadOnlyText').default;
69
- }
70
- return ReadOnlyTextClass;
71
- }
72
-
73
32
  export function createPublicRootInstance(rootTag: RootTag): PublicRootInstance {
74
- if (ReactNativeFeatureFlags.enableAccessToHostTreeInFabric()) {
75
- const ReactNativeDocumentModule = getReactNativeDocumentModule();
76
-
77
- // $FlowExpectedError[incompatible-return]
78
- return ReactNativeDocumentModule.createReactNativeDocument(rootTag);
79
- }
80
-
81
33
  // $FlowExpectedError[incompatible-return]
82
- return null;
34
+ return createReactNativeDocument(rootTag);
83
35
  }
84
36
 
85
37
  export function createPublicInstance(
86
38
  tag: number,
87
39
  viewConfig: ViewConfig,
88
40
  internalInstanceHandle: InternalInstanceHandle,
89
- ownerDocument: ReactNativeDocumentT,
90
- ): ReactFabricHostComponentT | ReactNativeElementT {
91
- if (ReactNativeFeatureFlags.enableAccessToHostTreeInFabric()) {
92
- const ReactNativeElement = getReactNativeElementClass();
93
- return new ReactNativeElement(
94
- tag,
95
- viewConfig,
96
- internalInstanceHandle,
97
- ownerDocument,
98
- );
99
- } else {
100
- const ReactFabricHostComponent = getReactFabricHostComponentClass();
101
- return new ReactFabricHostComponent(
102
- tag,
103
- viewConfig,
104
- internalInstanceHandle,
105
- );
106
- }
41
+ ownerDocument: ReactNativeDocument,
42
+ ): ReactNativeElement {
43
+ return new ReactNativeElement(
44
+ tag,
45
+ viewConfig,
46
+ internalInstanceHandle,
47
+ ownerDocument,
48
+ );
107
49
  }
108
50
 
109
51
  export function createPublicTextInstance(
110
52
  internalInstanceHandle: InternalInstanceHandle,
111
- ownerDocument: ReactNativeDocumentT,
112
- ): ReadOnlyTextT {
113
- const ReadOnlyText = getReadOnlyTextClass();
53
+ ownerDocument: ReactNativeDocument,
54
+ ): ReadOnlyText {
114
55
  return new ReadOnlyText(internalInstanceHandle, ownerDocument);
115
56
  }
116
57
 
117
58
  export function getNativeTagFromPublicInstance(
118
- publicInstance: ReactFabricHostComponentT | ReactNativeElementT,
59
+ publicInstance: ReactNativeElement,
119
60
  ): number {
120
61
  return publicInstance.__nativeTag;
121
62
  }
122
63
 
123
64
  export function getNodeFromPublicInstance(
124
- publicInstance: ReactFabricHostComponentT | ReactNativeElementT,
65
+ publicInstance: ReactNativeElement,
125
66
  ): ?Node {
126
67
  // Avoid loading ReactFabric if using an instance from the legacy renderer.
127
68
  if (publicInstance.__internalInstanceHandle == null) {
128
69
  return null;
129
70
  }
130
71
 
131
- if (RendererProxy == null) {
132
- RendererProxy = require('../../ReactNative/RendererProxy');
133
- }
134
72
  return RendererProxy.getNodeFromInternalInstanceHandle(
135
73
  // $FlowExpectedError[incompatible-type] __internalInstanceHandle is always an InternalInstanceHandle from React when we get here.
136
74
  publicInstance.__internalInstanceHandle,
@@ -138,7 +76,7 @@ export function getNodeFromPublicInstance(
138
76
  }
139
77
 
140
78
  export function getInternalInstanceHandleFromPublicInstance(
141
- publicInstance: ReactFabricHostComponentT | ReactNativeElementT,
79
+ publicInstance: ReactNativeElement,
142
80
  ): InternalInstanceHandle {
143
81
  // TODO(T174762768): Remove this once OSS versions of renderers will be synced.
144
82
  // $FlowExpectedError[prop-missing] Keeping this for backwards-compatibility with the renderers versions in open source.
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(83),
26
26
  RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"nightly-20251030-26ad9492b",
27
+ RCTVersionPrerelease: @"nightly-20251101-693e9628e",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -271,6 +271,7 @@ protected:
271
271
  methodMap_["enableViewRecyclingForScrollView"] = MethodMetadata {.argCount = 0, .invoker = __enableViewRecyclingForScrollView};
272
272
  methodMap_["enableViewRecyclingForText"] = MethodMetadata {.argCount = 0, .invoker = __enableViewRecyclingForText};
273
273
  methodMap_["enableViewRecyclingForView"] = MethodMetadata {.argCount = 0, .invoker = __enableViewRecyclingForView};
274
+ methodMap_["enableVirtualViewClippingWithoutScrollViewClipping"] = MethodMetadata {.argCount = 0, .invoker = __enableVirtualViewClippingWithoutScrollViewClipping};
274
275
  methodMap_["enableVirtualViewContainerStateExperimental"] = MethodMetadata {.argCount = 0, .invoker = __enableVirtualViewContainerStateExperimental};
275
276
  methodMap_["enableVirtualViewDebugFeatures"] = MethodMetadata {.argCount = 0, .invoker = __enableVirtualViewDebugFeatures};
276
277
  methodMap_["enableVirtualViewRenderState"] = MethodMetadata {.argCount = 0, .invoker = __enableVirtualViewRenderState};
@@ -281,6 +282,7 @@ protected:
281
282
  methodMap_["fuseboxNetworkInspectionEnabled"] = MethodMetadata {.argCount = 0, .invoker = __fuseboxNetworkInspectionEnabled};
282
283
  methodMap_["hideOffscreenVirtualViewsOnIOS"] = MethodMetadata {.argCount = 0, .invoker = __hideOffscreenVirtualViewsOnIOS};
283
284
  methodMap_["overrideBySynchronousMountPropsAtMountingAndroid"] = MethodMetadata {.argCount = 0, .invoker = __overrideBySynchronousMountPropsAtMountingAndroid};
285
+ methodMap_["perfIssuesEnabled"] = MethodMetadata {.argCount = 0, .invoker = __perfIssuesEnabled};
284
286
  methodMap_["perfMonitorV2Enabled"] = MethodMetadata {.argCount = 0, .invoker = __perfMonitorV2Enabled};
285
287
  methodMap_["preparedTextCacheSize"] = MethodMetadata {.argCount = 0, .invoker = __preparedTextCacheSize};
286
288
  methodMap_["preventShadowTreeCommitExhaustion"] = MethodMetadata {.argCount = 0, .invoker = __preventShadowTreeCommitExhaustion};
@@ -644,6 +646,13 @@ private:
644
646
  return bridging::callFromJs<bool>(rt, &T::enableViewRecyclingForView, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
645
647
  }
646
648
 
649
+ static jsi::Value __enableVirtualViewClippingWithoutScrollViewClipping(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
650
+ static_assert(
651
+ bridging::getParameterCount(&T::enableVirtualViewClippingWithoutScrollViewClipping) == 1,
652
+ "Expected enableVirtualViewClippingWithoutScrollViewClipping(...) to have 1 parameters");
653
+ return bridging::callFromJs<bool>(rt, &T::enableVirtualViewClippingWithoutScrollViewClipping, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
654
+ }
655
+
647
656
  static jsi::Value __enableVirtualViewContainerStateExperimental(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
648
657
  static_assert(
649
658
  bridging::getParameterCount(&T::enableVirtualViewContainerStateExperimental) == 1,
@@ -714,6 +723,13 @@ private:
714
723
  return bridging::callFromJs<bool>(rt, &T::overrideBySynchronousMountPropsAtMountingAndroid, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
715
724
  }
716
725
 
726
+ static jsi::Value __perfIssuesEnabled(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
727
+ static_assert(
728
+ bridging::getParameterCount(&T::perfIssuesEnabled) == 1,
729
+ "Expected perfIssuesEnabled(...) to have 1 parameters");
730
+ return bridging::callFromJs<bool>(rt, &T::perfIssuesEnabled, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
731
+ }
732
+
717
733
  static jsi::Value __perfMonitorV2Enabled(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
718
734
  static_assert(
719
735
  bridging::getParameterCount(&T::perfMonitorV2Enabled) == 1,
@@ -1088,6 +1088,16 @@ static RCTBorderStyle RCTBorderStyleFromOutlineStyle(OutlineStyle outlineStyle)
1088
1088
  Float saturation = std::get<Float>(primitive.parameters);
1089
1089
  [_swiftUIWrapper updateSaturation:@(saturation)];
1090
1090
  }
1091
+ } else if (primitive.type == FilterType::Contrast) {
1092
+ if (_swiftUIWrapper != nullptr) {
1093
+ Float contrast = std::get<Float>(primitive.parameters);
1094
+ [_swiftUIWrapper updateContrast:@(contrast)];
1095
+ }
1096
+ } else if (primitive.type == FilterType::HueRotate) {
1097
+ if (_swiftUIWrapper != nullptr) {
1098
+ Float hueRotateDegrees = std::get<Float>(primitive.parameters);
1099
+ [_swiftUIWrapper updateHueRotate:@(hueRotateDegrees)];
1100
+ }
1091
1101
  }
1092
1102
  }
1093
1103
  }
@@ -1545,7 +1555,8 @@ static NSString *RCTRecursiveAccessibilityLabel(UIView *view)
1545
1555
  if (!_props->filter.empty()) {
1546
1556
  for (const auto &primitive : _props->filter) {
1547
1557
  if (primitive.type == FilterType::Blur || primitive.type == FilterType::Grayscale ||
1548
- primitive.type == FilterType::DropShadow || primitive.type == FilterType::Saturate) {
1558
+ primitive.type == FilterType::DropShadow || primitive.type == FilterType::Saturate ||
1559
+ primitive.type == FilterType::Contrast || primitive.type == FilterType::HueRotate) {
1549
1560
  return YES;
1550
1561
  }
1551
1562
  }
@@ -247,8 +247,12 @@ static UIImage *RCTGetSolidBorderImage(
247
247
 
248
248
  const CGSize size = makeStretchable ? (CGSize){
249
249
  // 1pt for the middle stretchable area along each axis
250
- edgeInsets.left + 1 + edgeInsets.right,
251
- edgeInsets.top + 1 + edgeInsets.bottom
250
+ // we also need to round the edge insets to avoid border bleeding
251
+ // this is because if the size is decimal, when calculating the unit
252
+ // rectangle for CALayer.contentsCenter we encounter rounding errors
253
+ // which causes visual glitches
254
+ ceil(edgeInsets.left) + 1 + ceil(edgeInsets.right),
255
+ ceil(edgeInsets.top) + 1 + ceil(edgeInsets.bottom),
252
256
  } : viewSize;
253
257
 
254
258
  UIGraphicsImageRenderer *const imageRenderer =
@@ -5651,6 +5651,7 @@ public class com/facebook/react/views/scroll/ReactHorizontalScrollView : android
5651
5651
  public fun pageScroll (I)Z
5652
5652
  public fun reactSmoothScrollTo (II)V
5653
5653
  public fun requestChildFocus (Landroid/view/View;Landroid/view/View;)V
5654
+ protected fun requestChildFocusWithoutScroll (Landroid/view/View;Landroid/view/View;)V
5654
5655
  protected fun restoreScrollTo (II)V
5655
5656
  public fun scrollTo (II)V
5656
5657
  public fun scrollToPreservingMomentum (II)V
@@ -5791,6 +5792,7 @@ public class com/facebook/react/views/scroll/ReactScrollView : android/widget/Sc
5791
5792
  public fun onTouchEvent (Landroid/view/MotionEvent;)Z
5792
5793
  public fun reactSmoothScrollTo (II)V
5793
5794
  public fun requestChildFocus (Landroid/view/View;Landroid/view/View;)V
5795
+ protected fun requestChildFocusWithoutScroll (Landroid/view/View;Landroid/view/View;)V
5794
5796
  public fun scrollTo (II)V
5795
5797
  public fun scrollToPreservingMomentum (II)V
5796
5798
  public fun setBackgroundColor (I)V
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.83.0-nightly-20251030-26ad9492b
1
+ VERSION_NAME=0.83.0-nightly-20251101-693e9628e
2
2
  react.internal.publishingGroup=com.facebook.react
3
3
  react.internal.hermesPublishingGroup=com.facebook.hermes
4
4
 
@@ -22,6 +22,7 @@ internal class PerfMonitorOverlayManager(
22
22
 
23
23
  private var view: PerfMonitorOverlayView? = null
24
24
  private var tracingState: TracingState = TracingState.ENABLEDINCDPMODE
25
+ private var perfIssueCount: Int = 0
25
26
 
26
27
  /** Enable the Perf Monitor overlay. */
27
28
  fun enable() {
@@ -72,8 +73,19 @@ internal class PerfMonitorOverlayManager(
72
73
 
73
74
  override fun onRecordingStateChanged(state: TracingState) {
74
75
  tracingState = state
76
+ if (state != TracingState.DISABLED) {
77
+ perfIssueCount = 0
78
+ }
75
79
  UiThreadUtil.runOnUiThread {
76
80
  view?.updateRecordingState(state)
81
+ view?.updatePerfIssueCount(perfIssueCount)
82
+ view?.show()
83
+ }
84
+ }
85
+
86
+ override fun onPerfIssueAdded(name: String) {
87
+ UiThreadUtil.runOnUiThread {
88
+ view?.updatePerfIssueCount(++perfIssueCount)
77
89
  view?.show()
78
90
  }
79
91
  }
@@ -30,9 +30,11 @@ internal class PerfMonitorOverlayView(
30
30
  private val onButtonPress: () -> Unit,
31
31
  ) {
32
32
  private val dialog: Dialog
33
+ private lateinit var statusIndicator: TextView
33
34
  private lateinit var statusLabel: TextView
34
35
  private lateinit var tooltipLabel: TextView
35
- private lateinit var statusIndicator: TextView
36
+ private lateinit var issuesContainer: LinearLayout
37
+ private lateinit var issueCountLabel: TextView
36
38
 
37
39
  init {
38
40
  DisplayMetricsHolder.initDisplayMetricsIfNotInitialized(context)
@@ -70,6 +72,11 @@ internal class PerfMonitorOverlayView(
70
72
  dialog.show()
71
73
  }
72
74
 
75
+ fun updatePerfIssueCount(count: Int) {
76
+ issueCountLabel.text = count.toString()
77
+ issuesContainer.visibility = if (count == 0) LinearLayout.GONE else LinearLayout.VISIBLE
78
+ }
79
+
73
80
  private fun createToolbarDialog(): Dialog {
74
81
  statusIndicator =
75
82
  TextView(context).apply {
@@ -85,11 +92,7 @@ internal class PerfMonitorOverlayView(
85
92
  val textContainer =
86
93
  LinearLayout(context).apply {
87
94
  orientation = LinearLayout.VERTICAL
88
- layoutParams =
89
- LinearLayout.LayoutParams(
90
- LinearLayout.LayoutParams.WRAP_CONTENT,
91
- LinearLayout.LayoutParams.WRAP_CONTENT,
92
- )
95
+ setPadding(dpToPx(2f).toInt(), 0, 0, 0)
93
96
  }
94
97
  statusLabel =
95
98
  TextView(context).apply {
@@ -106,10 +109,35 @@ internal class PerfMonitorOverlayView(
106
109
  textContainer.addView(statusLabel)
107
110
  textContainer.addView(tooltipLabel)
108
111
 
112
+ issuesContainer =
113
+ LinearLayout(context).apply {
114
+ setPadding(dpToPx(8f).toInt(), 0, 0, 0)
115
+ visibility = LinearLayout.GONE
116
+ }
117
+ issueCountLabel =
118
+ TextView(context).apply {
119
+ textSize = TEXT_SIZE_PRIMARY
120
+ setTextColor(Color.WHITE)
121
+ typeface = TYPEFACE_BOLD
122
+ val alertDrawable =
123
+ context.getDrawable(android.R.drawable.ic_dialog_alert)?.apply {
124
+ setBounds(
125
+ 0,
126
+ 1,
127
+ dpToPx(TEXT_SIZE_PRIMARY).toInt(),
128
+ dpToPx(TEXT_SIZE_PRIMARY).toInt() + 1,
129
+ )
130
+ }
131
+ setCompoundDrawables(alertDrawable, null, null, null)
132
+ compoundDrawablePadding = dpToPx(6f).toInt()
133
+ }
134
+ issuesContainer.addView(issueCountLabel)
135
+
109
136
  val containerLayout = createInnerLayout()
110
137
  containerLayout.setOnClickListener { onButtonPress() }
111
138
  containerLayout.addView(statusIndicator)
112
139
  containerLayout.addView(textContainer)
140
+ containerLayout.addView(issuesContainer)
113
141
 
114
142
  val dialog =
115
143
  createAnchoredDialog(dpToPx(12f), dpToPx(12f)).apply { setContentView(containerLayout) }
@@ -175,7 +203,7 @@ internal class PerfMonitorOverlayView(
175
203
  showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
176
204
  dividerDrawable =
177
205
  object : ColorDrawable(Color.TRANSPARENT) {
178
- override fun getIntrinsicWidth(): Int = dpToPx(8f).toInt()
206
+ override fun getIntrinsicWidth(): Int = dpToPx(10f).toInt()
179
207
  }
180
208
  }
181
209
  }
@@ -4,6 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
+
7
8
  package com.facebook.react.devsupport.perfmonitor
8
9
 
9
10
  import com.facebook.react.devsupport.interfaces.TracingState
@@ -12,4 +13,7 @@ import com.facebook.react.devsupport.interfaces.TracingState
12
13
  internal interface PerfMonitorUpdateListener {
13
14
  /** Called when the recording state of the background performance trace has changed. */
14
15
  fun onRecordingStateChanged(state: TracingState)
16
+
17
+ /** Called when a new Performance Issue is added. */
18
+ fun onPerfIssueAdded(name: String)
15
19
  }
@@ -80,7 +80,7 @@ public class SurfaceMountingManager {
80
80
  // These are all non-null, until StopSurface is called
81
81
  private ConcurrentHashMap<Integer, ViewState> mTagToViewState =
82
82
  new ConcurrentHashMap<>(); // any thread
83
- private Queue<MountItem> mOnViewAttachMountItems = new ArrayDeque<>();
83
+ private final Queue<MountItem> mOnViewAttachMountItems = new ArrayDeque<>();
84
84
  private JSResponderHandler mJSResponderHandler;
85
85
  private ViewManagerRegistry mViewManagerRegistry;
86
86
  private RootViewManager mRootViewManager;
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<3ea1ee77358d99334a7c40bed44f2d90>>
7
+ * @generated SignedSource<<d8dc8c3a2efe8b7e870546e5749ef5ad>>
8
8
  */
9
9
 
10
10
  /**
@@ -312,6 +312,12 @@ public object ReactNativeFeatureFlags {
312
312
  @JvmStatic
313
313
  public fun enableViewRecyclingForView(): Boolean = accessor.enableViewRecyclingForView()
314
314
 
315
+ /**
316
+ * Set clipping to drawingRect of ScrollView.
317
+ */
318
+ @JvmStatic
319
+ public fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean = accessor.enableVirtualViewClippingWithoutScrollViewClipping()
320
+
315
321
  /**
316
322
  * Enables the experimental version of `VirtualViewContainerState`.
317
323
  */
@@ -372,6 +378,12 @@ public object ReactNativeFeatureFlags {
372
378
  @JvmStatic
373
379
  public fun overrideBySynchronousMountPropsAtMountingAndroid(): Boolean = accessor.overrideBySynchronousMountPropsAtMountingAndroid()
374
380
 
381
+ /**
382
+ * Enable reporting Performance Issues (`detail.rnPerfIssue`). Displayed in the V2 Performance Monitor and the "Performance Issues" sub-panel in DevTools.
383
+ */
384
+ @JvmStatic
385
+ public fun perfIssuesEnabled(): Boolean = accessor.perfIssuesEnabled()
386
+
375
387
  /**
376
388
  * Enable the V2 in-app Performance Monitor. This flag is global and should not be changed across React Host lifetimes.
377
389
  */
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<007a5a1235a999716b382ffd4ca23158>>
7
+ * @generated SignedSource<<447ccc7271b71b0208a2297b7eba5995>>
8
8
  */
9
9
 
10
10
  /**
@@ -67,6 +67,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
67
67
  private var enableViewRecyclingForScrollViewCache: Boolean? = null
68
68
  private var enableViewRecyclingForTextCache: Boolean? = null
69
69
  private var enableViewRecyclingForViewCache: Boolean? = null
70
+ private var enableVirtualViewClippingWithoutScrollViewClippingCache: Boolean? = null
70
71
  private var enableVirtualViewContainerStateExperimentalCache: Boolean? = null
71
72
  private var enableVirtualViewDebugFeaturesCache: Boolean? = null
72
73
  private var enableVirtualViewRenderStateCache: Boolean? = null
@@ -77,6 +78,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
77
78
  private var fuseboxNetworkInspectionEnabledCache: Boolean? = null
78
79
  private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null
79
80
  private var overrideBySynchronousMountPropsAtMountingAndroidCache: Boolean? = null
81
+ private var perfIssuesEnabledCache: Boolean? = null
80
82
  private var perfMonitorV2EnabledCache: Boolean? = null
81
83
  private var preparedTextCacheSizeCache: Double? = null
82
84
  private var preventShadowTreeCommitExhaustionCache: Boolean? = null
@@ -525,6 +527,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
525
527
  return cached
526
528
  }
527
529
 
530
+ override fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean {
531
+ var cached = enableVirtualViewClippingWithoutScrollViewClippingCache
532
+ if (cached == null) {
533
+ cached = ReactNativeFeatureFlagsCxxInterop.enableVirtualViewClippingWithoutScrollViewClipping()
534
+ enableVirtualViewClippingWithoutScrollViewClippingCache = cached
535
+ }
536
+ return cached
537
+ }
538
+
528
539
  override fun enableVirtualViewContainerStateExperimental(): Boolean {
529
540
  var cached = enableVirtualViewContainerStateExperimentalCache
530
541
  if (cached == null) {
@@ -615,6 +626,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
615
626
  return cached
616
627
  }
617
628
 
629
+ override fun perfIssuesEnabled(): Boolean {
630
+ var cached = perfIssuesEnabledCache
631
+ if (cached == null) {
632
+ cached = ReactNativeFeatureFlagsCxxInterop.perfIssuesEnabled()
633
+ perfIssuesEnabledCache = cached
634
+ }
635
+ return cached
636
+ }
637
+
618
638
  override fun perfMonitorV2Enabled(): Boolean {
619
639
  var cached = perfMonitorV2EnabledCache
620
640
  if (cached == null) {
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @generated SignedSource<<8a775646d455cdb6d017fd08aee3e807>>
7
+ * @generated SignedSource<<d6403b67e269ad80ef3e2389ac923c8a>>
8
8
  */
9
9
 
10
10
  /**
@@ -122,6 +122,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
122
122
 
123
123
  @DoNotStrip @JvmStatic public external fun enableViewRecyclingForView(): Boolean
124
124
 
125
+ @DoNotStrip @JvmStatic public external fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean
126
+
125
127
  @DoNotStrip @JvmStatic public external fun enableVirtualViewContainerStateExperimental(): Boolean
126
128
 
127
129
  @DoNotStrip @JvmStatic public external fun enableVirtualViewDebugFeatures(): Boolean
@@ -142,6 +144,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
142
144
 
143
145
  @DoNotStrip @JvmStatic public external fun overrideBySynchronousMountPropsAtMountingAndroid(): Boolean
144
146
 
147
+ @DoNotStrip @JvmStatic public external fun perfIssuesEnabled(): Boolean
148
+
145
149
  @DoNotStrip @JvmStatic public external fun perfMonitorV2Enabled(): Boolean
146
150
 
147
151
  @DoNotStrip @JvmStatic public external fun preparedTextCacheSize(): Double