react-native 0.83.0-nightly-20251029-3f971d931 → 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 (98) 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 +24 -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 -4
  16. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +19 -1
  17. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +31 -1
  18. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +7 -1
  19. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +9 -3
  20. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +34 -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 +7 -1
  23. package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +109 -0
  24. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  25. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt +6 -0
  26. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt +160 -2
  27. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BlendModeHelper.kt +14 -1
  28. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolver.kt +11 -1
  29. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverBinding.kt +12 -0
  30. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt +16 -0
  31. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/FloatUtil.kt +33 -0
  32. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderColors.kt +5 -5
  33. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BoxShadow.kt +1 -1
  34. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +12 -3
  35. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +9 -0
  36. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +15 -1
  37. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/view/ReactVirtualView.kt +16 -5
  38. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimental.kt +17 -5
  39. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +43 -1
  40. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +10 -1
  41. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +7 -0
  42. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +1 -0
  43. package/ReactAndroid/src/main/jni/react/tracing/OnLoad.cpp +16 -0
  44. package/ReactAndroid/src/main/jni/react/tracing/PerformanceTracerCxxInterop.cpp +241 -0
  45. package/ReactAndroid/src/main/jni/react/tracing/PerformanceTracerCxxInterop.h +63 -0
  46. package/ReactApple/RCTSwiftUI/RCTSwiftUIContainerView.swift +18 -0
  47. package/ReactApple/RCTSwiftUIWrapper/RCTSwiftUIContainerViewWrapper.h +2 -0
  48. package/ReactApple/RCTSwiftUIWrapper/RCTSwiftUIContainerViewWrapper.m +10 -0
  49. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  50. package/ReactCommon/jsc/JSCRuntime.cpp +1 -0
  51. package/ReactCommon/jsinspector-modern/HostTarget.cpp +14 -0
  52. package/ReactCommon/jsinspector-modern/HostTarget.h +22 -0
  53. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +5 -0
  54. package/ReactCommon/jsinspector-modern/InspectorFlags.h +6 -0
  55. package/ReactCommon/jsinspector-modern/PerfMonitorV2.cpp +29 -0
  56. package/ReactCommon/jsinspector-modern/PerfMonitorV2.h +38 -0
  57. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +1 -4
  58. package/ReactCommon/jsinspector-modern/RuntimeTargetConsole.cpp +10 -1
  59. package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
  60. package/ReactCommon/jsinspector-modern/tracing/ConsoleTimeStamp.cpp +22 -0
  61. package/ReactCommon/jsinspector-modern/tracing/ConsoleTimeStamp.h +4 -0
  62. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.cpp +62 -10
  63. package/ReactCommon/jsinspector-modern/tracing/PerformanceTracer.h +31 -1
  64. package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
  65. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +13 -1
  66. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +16 -1
  67. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +105 -51
  68. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +8 -2
  69. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +15 -3
  70. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +28 -1
  71. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSCanary.h +1 -5
  72. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +4 -1
  73. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +16 -1
  74. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +7 -1
  75. package/ReactCommon/react/performance/cdpmetrics/CdpMetricsReporter.h +4 -4
  76. package/ReactCommon/react/performance/cdpmetrics/CdpPerfIssuesReporter.cpp +60 -0
  77. package/ReactCommon/react/performance/cdpmetrics/CdpPerfIssuesReporter.h +37 -0
  78. package/ReactCommon/react/performance/timeline/PerformanceEntryReporter.cpp +26 -15
  79. package/ReactCommon/react/performance/timeline/PerformanceEntryReporter.h +6 -5
  80. package/ReactCommon/react/performance/timeline/PerformanceEntryReporterListeners.h +10 -2
  81. package/ReactCommon/react/performance/timeline/tests/PerformanceObserverTest.cpp +6 -2
  82. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +13 -3
  83. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +5 -2
  84. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp +14 -46
  85. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.h +7 -21
  86. package/ReactCommon/react/renderer/components/image/ImageShadowNode.cpp +18 -0
  87. package/ReactCommon/react/renderer/core/ShadowNode.cpp +1 -1
  88. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +12 -4
  89. package/ReactCommon/react/renderer/scheduler/Scheduler.h +2 -0
  90. package/flow/bom.js.flow +1 -0
  91. package/package.json +9 -9
  92. package/sdks/hermes-engine/version.properties +1 -1
  93. package/src/private/featureflags/ReactNativeFeatureFlags.js +18 -9
  94. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +4 -1
  95. package/types_generated/Libraries/Network/XMLHttpRequest.d.ts +1 -2
  96. package/types_generated/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.d.ts +9 -10
  97. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +0 -152
  98. 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-20251029-3f971d931';
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-20251029-3f971d931",
27
+ RCTVersionPrerelease: @"nightly-20251101-693e9628e",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -254,6 +254,7 @@ protected:
254
254
  methodMap_["enableImmediateUpdateModeForContentOffsetChanges"] = MethodMetadata {.argCount = 0, .invoker = __enableImmediateUpdateModeForContentOffsetChanges};
255
255
  methodMap_["enableImperativeFocus"] = MethodMetadata {.argCount = 0, .invoker = __enableImperativeFocus};
256
256
  methodMap_["enableInteropViewManagerClassLookUpOptimizationIOS"] = MethodMetadata {.argCount = 0, .invoker = __enableInteropViewManagerClassLookUpOptimizationIOS};
257
+ methodMap_["enableKeyEvents"] = MethodMetadata {.argCount = 0, .invoker = __enableKeyEvents};
257
258
  methodMap_["enableLayoutAnimationsOnAndroid"] = MethodMetadata {.argCount = 0, .invoker = __enableLayoutAnimationsOnAndroid};
258
259
  methodMap_["enableLayoutAnimationsOnIOS"] = MethodMetadata {.argCount = 0, .invoker = __enableLayoutAnimationsOnIOS};
259
260
  methodMap_["enableMainQueueCoordinatorOnIOS"] = MethodMetadata {.argCount = 0, .invoker = __enableMainQueueCoordinatorOnIOS};
@@ -270,6 +271,7 @@ protected:
270
271
  methodMap_["enableViewRecyclingForScrollView"] = MethodMetadata {.argCount = 0, .invoker = __enableViewRecyclingForScrollView};
271
272
  methodMap_["enableViewRecyclingForText"] = MethodMetadata {.argCount = 0, .invoker = __enableViewRecyclingForText};
272
273
  methodMap_["enableViewRecyclingForView"] = MethodMetadata {.argCount = 0, .invoker = __enableViewRecyclingForView};
274
+ methodMap_["enableVirtualViewClippingWithoutScrollViewClipping"] = MethodMetadata {.argCount = 0, .invoker = __enableVirtualViewClippingWithoutScrollViewClipping};
273
275
  methodMap_["enableVirtualViewContainerStateExperimental"] = MethodMetadata {.argCount = 0, .invoker = __enableVirtualViewContainerStateExperimental};
274
276
  methodMap_["enableVirtualViewDebugFeatures"] = MethodMetadata {.argCount = 0, .invoker = __enableVirtualViewDebugFeatures};
275
277
  methodMap_["enableVirtualViewRenderState"] = MethodMetadata {.argCount = 0, .invoker = __enableVirtualViewRenderState};
@@ -280,6 +282,7 @@ protected:
280
282
  methodMap_["fuseboxNetworkInspectionEnabled"] = MethodMetadata {.argCount = 0, .invoker = __fuseboxNetworkInspectionEnabled};
281
283
  methodMap_["hideOffscreenVirtualViewsOnIOS"] = MethodMetadata {.argCount = 0, .invoker = __hideOffscreenVirtualViewsOnIOS};
282
284
  methodMap_["overrideBySynchronousMountPropsAtMountingAndroid"] = MethodMetadata {.argCount = 0, .invoker = __overrideBySynchronousMountPropsAtMountingAndroid};
285
+ methodMap_["perfIssuesEnabled"] = MethodMetadata {.argCount = 0, .invoker = __perfIssuesEnabled};
283
286
  methodMap_["perfMonitorV2Enabled"] = MethodMetadata {.argCount = 0, .invoker = __perfMonitorV2Enabled};
284
287
  methodMap_["preparedTextCacheSize"] = MethodMetadata {.argCount = 0, .invoker = __preparedTextCacheSize};
285
288
  methodMap_["preventShadowTreeCommitExhaustion"] = MethodMetadata {.argCount = 0, .invoker = __preventShadowTreeCommitExhaustion};
@@ -524,6 +527,13 @@ private:
524
527
  return bridging::callFromJs<bool>(rt, &T::enableInteropViewManagerClassLookUpOptimizationIOS, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
525
528
  }
526
529
 
530
+ static jsi::Value __enableKeyEvents(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
531
+ static_assert(
532
+ bridging::getParameterCount(&T::enableKeyEvents) == 1,
533
+ "Expected enableKeyEvents(...) to have 1 parameters");
534
+ return bridging::callFromJs<bool>(rt, &T::enableKeyEvents, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
535
+ }
536
+
527
537
  static jsi::Value __enableLayoutAnimationsOnAndroid(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
528
538
  static_assert(
529
539
  bridging::getParameterCount(&T::enableLayoutAnimationsOnAndroid) == 1,
@@ -636,6 +646,13 @@ private:
636
646
  return bridging::callFromJs<bool>(rt, &T::enableViewRecyclingForView, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
637
647
  }
638
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
+
639
656
  static jsi::Value __enableVirtualViewContainerStateExperimental(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
640
657
  static_assert(
641
658
  bridging::getParameterCount(&T::enableVirtualViewContainerStateExperimental) == 1,
@@ -706,6 +723,13 @@ private:
706
723
  return bridging::callFromJs<bool>(rt, &T::overrideBySynchronousMountPropsAtMountingAndroid, static_cast<NativeReactNativeFeatureFlagsCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
707
724
  }
708
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
+
709
733
  static jsi::Value __perfMonitorV2Enabled(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
710
734
  static_assert(
711
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-20251029-3f971d931
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;
@@ -1344,7 +1344,6 @@ public class SurfaceMountingManager {
1344
1344
  final boolean mIsRoot;
1345
1345
  @Nullable ViewManager mViewManager = null;
1346
1346
  @Nullable ReactStylesDiffMap mCurrentProps = null;
1347
- @Nullable ReadableMap mCurrentLocalData = null;
1348
1347
  @Nullable StateWrapper mStateWrapper = null;
1349
1348
  @Nullable EventEmitterWrapper mEventEmitter = null;
1350
1349
 
@@ -1374,8 +1373,6 @@ public class SurfaceMountingManager {
1374
1373
  + mIsRoot
1375
1374
  + " - props: "
1376
1375
  + mCurrentProps
1377
- + " - localData: "
1378
- + mCurrentLocalData
1379
1376
  + " - viewManager: "
1380
1377
  + mViewManager
1381
1378
  + " - isLayoutOnly: "
@@ -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<<28000f9d4a36207875619060f2fa5713>>
7
+ * @generated SignedSource<<d8dc8c3a2efe8b7e870546e5749ef5ad>>
8
8
  */
9
9
 
10
10
  /**
@@ -210,6 +210,12 @@ public object ReactNativeFeatureFlags {
210
210
  @JvmStatic
211
211
  public fun enableInteropViewManagerClassLookUpOptimizationIOS(): Boolean = accessor.enableInteropViewManagerClassLookUpOptimizationIOS()
212
212
 
213
+ /**
214
+ * Enables key up/down/press events to be sent to JS from components
215
+ */
216
+ @JvmStatic
217
+ public fun enableKeyEvents(): Boolean = accessor.enableKeyEvents()
218
+
213
219
  /**
214
220
  * When enabled, LayoutAnimations API will animate state changes on Android.
215
221
  */
@@ -306,6 +312,12 @@ public object ReactNativeFeatureFlags {
306
312
  @JvmStatic
307
313
  public fun enableViewRecyclingForView(): Boolean = accessor.enableViewRecyclingForView()
308
314
 
315
+ /**
316
+ * Set clipping to drawingRect of ScrollView.
317
+ */
318
+ @JvmStatic
319
+ public fun enableVirtualViewClippingWithoutScrollViewClipping(): Boolean = accessor.enableVirtualViewClippingWithoutScrollViewClipping()
320
+
309
321
  /**
310
322
  * Enables the experimental version of `VirtualViewContainerState`.
311
323
  */
@@ -366,6 +378,12 @@ public object ReactNativeFeatureFlags {
366
378
  @JvmStatic
367
379
  public fun overrideBySynchronousMountPropsAtMountingAndroid(): Boolean = accessor.overrideBySynchronousMountPropsAtMountingAndroid()
368
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
+
369
387
  /**
370
388
  * Enable the V2 in-app Performance Monitor. This flag is global and should not be changed across React Host lifetimes.
371
389
  */