react-native-tvos 0.85.3-0 → 0.86.0-0

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 (675) hide show
  1. package/Libraries/Animated/AnimatedImplementation.js +6 -6
  2. package/Libraries/Animated/NativeAnimatedAllowlist.js +21 -0
  3. package/Libraries/Animated/components/AnimatedImage.js +3 -3
  4. package/Libraries/Animated/components/AnimatedText.js +3 -3
  5. package/Libraries/Animated/createAnimatedComponent.js +7 -7
  6. package/Libraries/Animated/nodes/AnimatedAddition.js +1 -1
  7. package/Libraries/Animated/nodes/AnimatedColor.js +7 -7
  8. package/Libraries/Animated/nodes/AnimatedDiffClamp.js +1 -1
  9. package/Libraries/Animated/nodes/AnimatedDivision.js +1 -1
  10. package/Libraries/Animated/nodes/AnimatedInterpolation.js +22 -24
  11. package/Libraries/Animated/nodes/AnimatedModulo.js +1 -1
  12. package/Libraries/Animated/nodes/AnimatedMultiplication.js +1 -1
  13. package/Libraries/Animated/nodes/AnimatedStyle.js +2 -2
  14. package/Libraries/Animated/nodes/AnimatedSubtraction.js +1 -1
  15. package/Libraries/Animated/nodes/AnimatedTracking.js +1 -1
  16. package/Libraries/Animated/nodes/AnimatedValue.js +2 -2
  17. package/Libraries/AppDelegate/RCTDefaultReactNativeFactoryDelegate.mm +4 -0
  18. package/Libraries/AppDelegate/RCTRootViewFactory.h +5 -5
  19. package/Libraries/AppDelegate/RCTRootViewFactory.mm +2 -2
  20. package/Libraries/AppState/AppState.js +1 -1
  21. package/Libraries/BatchedBridge/NativeModules.js +1 -1
  22. package/Libraries/Blob/RCTBlobCollector.h +1 -1
  23. package/Libraries/Blob/RCTBlobCollector.mm +14 -26
  24. package/Libraries/Blob/RCTBlobManager.mm +11 -3
  25. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +29 -23
  26. package/Libraries/Components/Keyboard/Keyboard.js +4 -2
  27. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -1
  28. package/Libraries/Components/LayoutConformance/LayoutConformance.js +1 -27
  29. package/Libraries/Components/Pressable/Pressable.d.ts +1 -0
  30. package/Libraries/Components/Pressable/Pressable.js +2 -2
  31. package/Libraries/Components/Pressable/useAndroidRippleForView.js +7 -8
  32. package/Libraries/Components/ScrollView/ScrollView.d.ts +1 -1
  33. package/Libraries/Components/ScrollView/ScrollView.js +4 -4
  34. package/Libraries/Components/ScrollView/ScrollViewCommands.js +2 -2
  35. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +2 -2
  36. package/Libraries/Components/Switch/Switch.js +1 -1
  37. package/Libraries/Components/TV/TVViewPropTypes.js +9 -0
  38. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +25 -1
  39. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +1 -1
  40. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +2 -2
  41. package/Libraries/Components/TextInput/TextInput.d.ts +24 -0
  42. package/Libraries/Components/TextInput/TextInput.flow.js +24 -0
  43. package/Libraries/Components/TextInput/TextInput.js +5 -5
  44. package/Libraries/Components/ToastAndroid/ToastAndroid.android.js +5 -5
  45. package/Libraries/Components/ToastAndroid/ToastAndroidFallback.js +5 -5
  46. package/Libraries/Components/Touchable/PooledClass.js +4 -4
  47. package/Libraries/Components/Touchable/Touchable.js +1 -1
  48. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +6 -10
  49. package/Libraries/Components/View/ReactNativeStyleAttributes.js +10 -2
  50. package/Libraries/Components/View/View.js +100 -91
  51. package/Libraries/Components/View/ViewPropTypes.js +3 -1
  52. package/Libraries/Core/Devtools/loadBundleFromServer.js +8 -0
  53. package/Libraries/Core/ExceptionsManager.js +2 -8
  54. package/Libraries/Core/InitializeCore.js +0 -13
  55. package/Libraries/Core/ReactFiberErrorDialog.js +3 -3
  56. package/Libraries/Core/ReactNativeVersion.js +2 -2
  57. package/Libraries/Core/ReactNativeVersionCheck.js +1 -1
  58. package/Libraries/Core/Timers/JSTimers.js +2 -2
  59. package/Libraries/Core/Timers/immediateShim.js +1 -1
  60. package/Libraries/Core/setUpBatchedBridge.js +1 -1
  61. package/Libraries/Core/setUpSegmentFetcher.js +1 -1
  62. package/Libraries/Debugging/DebuggingOverlayRegistry.js +1 -1
  63. package/Libraries/EventEmitter/NativeEventEmitter.js +9 -5
  64. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -2
  65. package/Libraries/Image/Image.android.js +15 -35
  66. package/Libraries/Image/RCTImageLoader.mm +4 -2
  67. package/Libraries/Image/RelativeImageStub.js +2 -2
  68. package/Libraries/LayoutAnimation/LayoutAnimation.js +12 -12
  69. package/Libraries/Linking/Linking.js +1 -1
  70. package/Libraries/Lists/FlatList.js +1 -1
  71. package/Libraries/LogBox/LogBox.js +2 -2
  72. package/Libraries/LogBox/LogBoxInspectorContainer.js +24 -2
  73. package/Libraries/LogBox/LogBoxNotificationContainer.js +27 -4
  74. package/Libraries/LogBox/UI/LogBoxButton.js +47 -33
  75. package/Libraries/LogBox/UI/LogBoxInspector.js +61 -1
  76. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +6 -0
  77. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +3 -1
  78. package/Libraries/LogBox/UI/LogBoxNotification.js +2 -0
  79. package/Libraries/Modal/Modal.js +12 -7
  80. package/Libraries/NativeAnimation/Nodes/RCTInterpolationAnimatedNode.mm +0 -2
  81. package/Libraries/NativeComponent/BaseViewConfig.android.js +15 -0
  82. package/Libraries/NativeComponent/BaseViewConfig.ios.js +17 -0
  83. package/Libraries/NativeComponent/NativeComponentRegistry.js +2 -2
  84. package/Libraries/NativeComponent/TVViewConfig.js +1 -0
  85. package/Libraries/NativeComponent/ViewConfigIgnore.js +4 -2
  86. package/Libraries/Network/RCTNetworking.android.js +1 -1
  87. package/Libraries/Network/RCTNetworking.ios.js +1 -1
  88. package/Libraries/Network/RCTNetworking.js.flow +1 -1
  89. package/Libraries/Network/RCTNetworking.mm +1 -2
  90. package/Libraries/Network/XMLHttpRequest.js +29 -12
  91. package/Libraries/Pressability/Pressability.js +2 -2
  92. package/Libraries/ReactNative/AppContainer-dev.js +2 -3
  93. package/Libraries/ReactNative/AppContainer-prod.js +1 -2
  94. package/Libraries/ReactNative/AppContainer.js +0 -1
  95. package/Libraries/ReactNative/AppRegistry.d.ts +1 -1
  96. package/Libraries/ReactNative/AppRegistry.flow.js +1 -2
  97. package/Libraries/ReactNative/AppRegistryImpl.js +16 -16
  98. package/Libraries/ReactNative/DeprecatedPerformanceLoggerStub.js +83 -0
  99. package/Libraries/ReactNative/FabricUIManager.js +6 -0
  100. package/Libraries/{Utilities → ReactNative}/IPerformanceLogger.d.ts +8 -5
  101. package/Libraries/{Utilities/IPerformanceLogger.js → ReactNative/IPerformanceLogger.flow.js} +12 -9
  102. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +14 -14
  103. package/Libraries/ReactNative/RendererImplementation.js +26 -143
  104. package/Libraries/ReactNative/RendererProxy.js +4 -15
  105. package/Libraries/ReactNative/renderApplication.js +33 -59
  106. package/Libraries/ReactNative/requireNativeComponent.js +3 -3
  107. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +5 -0
  108. package/Libraries/Renderer/shims/ReactNativeTypes.js +2 -32
  109. package/Libraries/Settings/Settings.ios.js +1 -1
  110. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +2 -2
  111. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +3 -3
  112. package/Libraries/StyleSheet/StyleSheet.js +1 -1
  113. package/Libraries/StyleSheet/StyleSheet.js.flow +2 -2
  114. package/Libraries/StyleSheet/StyleSheetExports.js +1 -1
  115. package/Libraries/StyleSheet/StyleSheetExports.js.flow +1 -1
  116. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +6 -8
  117. package/Libraries/StyleSheet/StyleSheetTypes.js +11 -11
  118. package/Libraries/StyleSheet/flattenStyle.js +1 -1
  119. package/Libraries/StyleSheet/private/_TransformStyle.js +1 -1
  120. package/Libraries/StyleSheet/processBackgroundImage.js +19 -9
  121. package/Libraries/StyleSheet/processBackgroundSize.js +7 -12
  122. package/Libraries/StyleSheet/processBoxShadow.js +9 -47
  123. package/Libraries/StyleSheet/processFilter.js +16 -8
  124. package/Libraries/StyleSheet/processTransformOrigin.js +10 -3
  125. package/Libraries/Text/Text.js +4 -4
  126. package/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm +16 -2
  127. package/Libraries/Text/TextNativeComponent.js +4 -4
  128. package/Libraries/TurboModule/RCTExport.js +1 -1
  129. package/Libraries/TurboModule/TurboModuleRegistry.js +3 -3
  130. package/Libraries/Types/CodegenTypes.js +7 -4
  131. package/Libraries/Types/ReactDevToolsTypes.js +1 -1
  132. package/Libraries/Utilities/BackHandler.android.js +11 -3
  133. package/Libraries/Utilities/BackHandler.d.ts +11 -1
  134. package/Libraries/Utilities/BackHandler.ios.js +3 -1
  135. package/Libraries/Utilities/BackHandler.js.flow +6 -1
  136. package/Libraries/Utilities/HardwareBackPressEvent.js +22 -0
  137. package/Libraries/Utilities/ReactNativeTestTools.js +4 -4
  138. package/Libraries/Utilities/binaryToBase64.js +1 -1
  139. package/Libraries/Utilities/codegenNativeCommands.js +2 -2
  140. package/Libraries/Utilities/codegenNativeComponent.js +4 -4
  141. package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +2 -2
  142. package/Libraries/Utilities/stringifySafe.js +1 -1
  143. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  144. package/Libraries/vendor/core/ErrorUtils.js +4 -4
  145. package/Libraries/vendor/emitter/EventEmitter.js +27 -13
  146. package/README.md +13 -1
  147. package/React/Base/RCTBundleURLProvider.h +19 -1
  148. package/React/Base/RCTBundleURLProvider.mm +82 -0
  149. package/React/Base/RCTDefines.h +1 -1
  150. package/React/Base/RCTMultipartDataTask.h +1 -1
  151. package/React/Base/RCTMultipartDataTask.m +0 -3
  152. package/React/Base/RCTRootView.h +4 -0
  153. package/React/Base/RCTRootViewDelegate.h +5 -2
  154. package/React/Base/RCTVersion.m +2 -2
  155. package/React/Base/Surface/RCTSurface.h +3 -0
  156. package/React/Base/Surface/RCTSurfaceDelegate.h +7 -3
  157. package/React/Base/Surface/RCTSurfaceRootView.mm +1 -1
  158. package/React/Base/Surface/RCTSurfaceView.mm +2 -1
  159. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +2 -0
  160. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h +0 -3
  161. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.mm +3 -1
  162. package/React/CoreModules/RCTDevMenuConfigurationDecorator.h +2 -2
  163. package/React/CoreModules/RCTRedBox2AnsiParser.mm +1 -1
  164. package/React/CoreModules/RCTWebSocketModule.mm +45 -6
  165. package/React/CxxLogUtils/RCTDefaultCxxLogFunction.mm +0 -1
  166. package/React/DevSupport/RCTInspectorDevServerHelper.mm +4 -0
  167. package/React/DevSupport/RCTPackagerConnection.mm +13 -11
  168. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +108 -43
  169. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.h +1 -0
  170. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.mm +1 -0
  171. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.h +1 -1
  172. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +35 -15
  173. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +2 -2
  174. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +70 -8
  175. package/React/Fabric/RCTConversions.h +14 -0
  176. package/React/Fabric/RCTScheduler.mm +18 -0
  177. package/React/Fabric/RCTSurfacePointerHandler.mm +8 -2
  178. package/React/Fabric/RCTSurfaceTouchHandler.mm +1 -0
  179. package/React/Fabric/Surface/RCTFabricSurface.mm +3 -0
  180. package/React/I18n/strings/pt.lproj/fbt_language_pack.bin +0 -0
  181. package/React/Modules/RCTUIManager.mm +1 -1
  182. package/React/Profiler/RCTProfile.h +5 -0
  183. package/React/Profiler/RCTProfile.m +2 -1
  184. package/React/Profiler/RCTProfileTrampoline-arm.S +1 -1
  185. package/React/Profiler/RCTProfileTrampoline-arm64.S +1 -1
  186. package/React/Profiler/RCTProfileTrampoline-i386.S +1 -1
  187. package/React/Profiler/RCTProfileTrampoline-x86_64.S +1 -1
  188. package/React/Tests/Mounting/RCTViewComponentViewTests.mm +186 -0
  189. package/React/Tests/Text/RCTAttributedTextUtilsTest.mm +5 -5
  190. package/React/Views/RCTLayout.m +4 -3
  191. package/React/Views/ScrollView/RCTScrollView.h +6 -2
  192. package/ReactAndroid/api/ReactAndroid.api +37 -27
  193. package/ReactAndroid/build.gradle.kts +28 -21
  194. package/ReactAndroid/gradle.properties +1 -1
  195. package/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.kt +2 -0
  196. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +1 -3
  197. package/ReactAndroid/src/main/java/com/facebook/react/ReactAndroidHWInputDeviceHelper.kt +2 -0
  198. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +40 -110
  199. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +32 -87
  200. package/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt +1 -0
  201. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.kt +9 -99
  202. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.kt +7 -28
  203. package/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.kt +2 -19
  204. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.kt +15 -23
  205. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +36 -0
  206. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJNISoLoader.kt +2 -0
  207. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJniCommonSoLoader.kt +2 -0
  208. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt +4 -0
  209. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultSoLoader.kt +2 -0
  210. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/FpsView.kt +2 -2
  211. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +2 -0
  212. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialogSurfaceDelegate.kt +15 -2
  213. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialogSurfaceDelegate.kt +1 -0
  214. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/DevSupportHttpClient.kt +9 -34
  215. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +9 -10
  216. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/InspectorNetworkRequestListener.kt +2 -0
  217. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +10 -10
  218. package/ReactAndroid/src/main/java/com/facebook/react/fabric/AnimationBackendChoreographer.kt +15 -13
  219. package/ReactAndroid/src/main/java/com/facebook/react/fabric/DevToolsReactPerfLogger.kt +4 -1
  220. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +139 -43
  221. package/ReactAndroid/src/main/java/com/facebook/react/fabric/ViewTransitionSnapshotManager.kt +223 -0
  222. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/EventEmitterWrapper.kt +25 -8
  223. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.kt +34 -1
  224. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.kt +104 -65
  225. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt +9 -1
  226. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.kt +172 -36
  227. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PreAllocateViewMountItem.kt +1 -1
  228. package/ReactAndroid/src/main/java/com/facebook/react/interfaces/ExtraWindowEventListener.kt +29 -0
  229. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +41 -29
  230. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +71 -51
  231. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +15 -11
  232. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +16 -12
  233. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +79 -57
  234. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +3 -3
  235. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Stable_Android.kt +1 -4
  236. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +15 -11
  237. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlagsDefaults.kt +5 -9
  238. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/rewrite_feature_flag_defaults.py +76 -0
  239. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/tests/test_rewrite_feature_flag_defaults.py +63 -0
  240. package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +1 -1
  241. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.kt +3 -0
  242. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobModule.kt +10 -5
  243. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobProvider.kt +1 -2
  244. package/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.kt +3 -0
  245. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/DeviceEventManagerModule.kt +2 -1
  246. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ReactChoreographer.kt +21 -20
  247. package/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.kt +63 -3
  248. package/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.kt +59 -62
  249. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +8 -0
  250. package/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.kt +45 -36
  251. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +2 -2
  252. package/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt +5 -2
  253. package/ReactAndroid/src/main/java/com/facebook/react/runtime/CoreReactPackage.kt +4 -0
  254. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +18 -5
  255. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImplDevHelper.kt +8 -1
  256. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt +21 -19
  257. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt +4 -0
  258. package/ReactAndroid/src/main/java/com/facebook/react/soloader/OpenSourceMergedSoMapping.kt +4 -0
  259. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt +77 -72
  260. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +7 -16
  261. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BlendModeHelper.kt +3 -2
  262. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt +3 -0
  263. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt +3 -1
  264. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +25 -0
  265. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.kt +2 -2
  266. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRootViewTagGenerator.kt +3 -2
  267. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/RootViewUtil.kt +17 -7
  268. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.kt +18 -0
  269. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.kt +20 -12
  270. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TransformHelper.kt +18 -24
  271. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIConstantsProviderBinding.kt +2 -0
  272. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +4 -0
  273. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.kt +11 -71
  274. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +10 -17
  275. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.kt +29 -30
  276. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/BackgroundImageDrawable.kt +5 -3
  277. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/InsetBoxShadowDrawable.kt +12 -13
  278. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.kt +1 -0
  279. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEvent.kt +1 -0
  280. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.kt +30 -0
  281. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/SynchronousEventReceiver.kt +28 -0
  282. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.kt +9 -9
  283. package/ReactAndroid/src/main/java/com/facebook/react/util/AndroidVersion.kt +27 -3
  284. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt +4 -0
  285. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/MaintainVisibleScrollPositionHelper.kt +1 -14
  286. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollContainerViewManager.kt +1 -22
  287. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +32 -24
  288. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollView.java +20 -21
  289. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +33 -24
  290. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt +60 -11
  291. package/ReactAndroid/src/main/java/com/facebook/react/views/text/FontMetricsUtil.kt +2 -3
  292. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +5 -162
  293. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.kt +1 -1
  294. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt +71 -97
  295. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomStyleSpan.kt +1 -4
  296. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/DrawCommandSpan.kt +1 -1
  297. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.kt +7 -13
  298. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.kt +40 -2
  299. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt +59 -20
  300. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +85 -20
  301. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +46 -65
  302. package/ReactAndroid/src/main/java/com/facebook/react/views/view/WindowUtil.kt +85 -13
  303. package/ReactAndroid/src/main/java/com/facebook/soloader/annotation/SoLoaderLibrary.kt +17 -0
  304. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.java +5 -1
  305. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIFinalizer.kt +30 -0
  306. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDisplay.java +3 -1
  307. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaExperimentalFeature.java +3 -1
  308. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGridTrackType.java +39 -0
  309. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaJustify.java +20 -12
  310. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +101 -0
  311. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIFinalizer.kt +33 -0
  312. package/ReactAndroid/src/main/jni/CMakeLists.txt +10 -1
  313. package/ReactAndroid/src/main/jni/react/fabric/ComponentFactory.cpp +0 -1
  314. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +0 -2
  315. package/ReactAndroid/src/main/jni/react/fabric/EventEmitterWrapper.cpp +26 -6
  316. package/ReactAndroid/src/main/jni/react/fabric/EventEmitterWrapper.h +3 -3
  317. package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp +47 -0
  318. package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.h +20 -6
  319. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +24 -1
  320. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h +6 -0
  321. package/ReactAndroid/src/main/jni/react/fabric/FocusOrderingHelper.cpp +0 -1
  322. package/ReactAndroid/src/main/jni/react/fabric/SurfaceHandlerBinding.cpp +1 -0
  323. package/ReactAndroid/src/main/jni/react/fabric/test_helper/FabricMountingManagerTestHelper.cpp +85 -0
  324. package/ReactAndroid/src/main/jni/react/fabric/test_helper/FabricMountingManagerTestHelper.h +46 -0
  325. package/ReactAndroid/src/main/jni/react/fabric/test_helper/OnLoad.cpp +16 -0
  326. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +97 -69
  327. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +21 -15
  328. package/ReactAndroid/src/main/jni/react/hermes/instrumentation/HermesSamplingProfiler.cpp +1 -1
  329. package/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp +0 -2
  330. package/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp +2 -1
  331. package/ReactAndroid/src/main/jni/react/reactnativeblob/BlobCollector.cpp +37 -30
  332. package/ReactAndroid/src/main/jni/react/reactnativeblob/BlobCollector.h +11 -8
  333. package/ReactAndroid/src/main/jni/react/reactnativeblob/CMakeLists.txt +2 -1
  334. package/ReactAndroid/src/main/jni/react/reactnativeblob/OnLoad.cpp +1 -1
  335. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +10 -0
  336. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +7 -0
  337. package/ReactAndroid/src/main/jni/react/tracing/CMakeLists.txt +28 -0
  338. package/ReactCommon/React-Fabric.podspec +7 -0
  339. package/ReactCommon/React-FabricComponents.podspec +1 -1
  340. package/ReactCommon/cxxreact/ReactNativeVersion.h +4 -4
  341. package/ReactCommon/jsc/JSCRuntime.cpp +9 -0
  342. package/ReactCommon/jserrorhandler/JsErrorHandler.cpp +1 -0
  343. package/ReactCommon/jserrorhandler/JsErrorHandler.h +1 -1
  344. package/ReactCommon/jsi/jsi/JSIDynamic.cpp +1 -0
  345. package/ReactCommon/jsi/jsi/decorator.h +93 -0
  346. package/ReactCommon/jsi/jsi/jsi-inl.h +97 -68
  347. package/ReactCommon/jsi/jsi/jsi.cpp +208 -27
  348. package/ReactCommon/jsi/jsi/jsi.h +553 -224
  349. package/ReactCommon/jsi/jsi/test/testlib.cpp +453 -0
  350. package/ReactCommon/jsiexecutor/jsireact/JSINativeModules.cpp +1 -1
  351. package/ReactCommon/jsinspector-modern/EmulationAgent.cpp +108 -0
  352. package/ReactCommon/jsinspector-modern/EmulationAgent.h +47 -0
  353. package/ReactCommon/jsinspector-modern/HostAgent.cpp +10 -1
  354. package/ReactCommon/jsinspector-modern/HostTarget.h +25 -0
  355. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +6 -2
  356. package/ReactCommon/jsinspector-modern/InspectorFlags.h +5 -2
  357. package/ReactCommon/jsinspector-modern/InspectorPackagerConnection.cpp +19 -2
  358. package/ReactCommon/jsinspector-modern/InspectorPackagerConnectionImpl.h +3 -0
  359. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +10 -0
  360. package/ReactCommon/jsinspector-modern/tracing/TracingCategory.h +0 -1
  361. package/ReactCommon/logger/react_native_log.cpp +0 -1
  362. package/ReactCommon/react/bridging/Array.h +1 -1
  363. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +29 -21
  364. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +35 -25
  365. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +168 -132
  366. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +18 -14
  367. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +28 -20
  368. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +61 -43
  369. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +3 -3
  370. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +9 -7
  371. package/ReactCommon/react/featureflags/rewrite_feature_flag_defaults.py +111 -0
  372. package/ReactCommon/react/featureflags/tests/test_rewrite_feature_flag_defaults.py +60 -0
  373. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.h +3 -9
  374. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +0 -1
  375. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  376. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
  377. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
  378. package/ReactCommon/react/nativemodule/fantomtestspecificmethods/NativeFantomTestSpecificMethods.cpp +2 -2
  379. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +35 -25
  380. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +15 -11
  381. package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp +3 -2
  382. package/ReactCommon/react/nativemodule/viewtransition/CMakeLists.txt +24 -0
  383. package/ReactCommon/react/nativemodule/viewtransition/NativeViewTransition.cpp +92 -0
  384. package/ReactCommon/react/nativemodule/viewtransition/NativeViewTransition.h +37 -0
  385. package/ReactCommon/react/nativemodule/viewtransition/React-viewtransitionnativemodule.podspec +58 -0
  386. package/ReactCommon/react/nativemodule/webperformance/NativePerformance.cpp +10 -1
  387. package/ReactCommon/react/networking/NetworkReporter.h +0 -1
  388. package/ReactCommon/react/performance/cdpmetrics/CdpPerfIssuesReporter.h +0 -1
  389. package/ReactCommon/react/performance/timeline/PerformanceEntry.h +1 -1
  390. package/ReactCommon/react/performance/timeline/tests/PerformanceEntryTest.cpp +62 -0
  391. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +24 -12
  392. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +1 -1
  393. package/ReactCommon/react/renderer/animationbackend/AnimatedPropSerializer.cpp +3 -0
  394. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.cpp +10 -3
  395. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +1 -0
  396. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +4 -0
  397. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.h +1 -1
  398. package/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.h +0 -1
  399. package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.cpp +8 -3
  400. package/ReactCommon/react/renderer/animations/tests/MutationComparatorTest.cpp +273 -0
  401. package/ReactCommon/react/renderer/animations/utils.h +12 -1
  402. package/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +1 -1
  403. package/ReactCommon/react/renderer/attributedstring/conversions.h +104 -3
  404. package/ReactCommon/react/renderer/components/image/conversions.h +2 -3
  405. package/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.h +0 -1
  406. package/ReactCommon/react/renderer/components/scrollview/conversions.h +0 -1
  407. package/ReactCommon/react/renderer/components/text/stateConversions.h +0 -1
  408. package/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +531 -21
  409. package/ReactCommon/react/renderer/components/view/AccessibilityProps.h +9 -0
  410. package/ReactCommon/react/renderer/components/view/BaseTouch.cpp +3 -2
  411. package/ReactCommon/react/renderer/components/view/BaseTouch.h +7 -0
  412. package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +15 -0
  413. package/ReactCommon/react/renderer/components/view/BaseViewProps.h +1 -0
  414. package/ReactCommon/react/renderer/components/view/PointerEvent.cpp +2 -0
  415. package/ReactCommon/react/renderer/components/view/PointerEvent.h +5 -0
  416. package/ReactCommon/react/renderer/components/view/TouchEvent.h +0 -2
  417. package/ReactCommon/react/renderer/components/view/TouchEventEmitter.cpp +23 -5
  418. package/ReactCommon/react/renderer/components/view/TouchEventEmitter.h +1 -0
  419. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +5 -0
  420. package/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp +33 -28
  421. package/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +0 -1
  422. package/ReactCommon/react/renderer/components/view/conversions.h +44 -28
  423. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +71 -5
  424. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.h +1 -0
  425. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/NativeDrawable.h +47 -16
  426. package/ReactCommon/react/renderer/components/view/platform/cxx/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +2 -2
  427. package/ReactCommon/react/renderer/{graphics/DoubleConversions.h → components/view/platform/tvos/react/renderer/components/view/HostPlatformTouch.h} +2 -4
  428. package/ReactCommon/react/renderer/components/view/platform/tvos/react/renderer/components/view/HostPlatformViewEventEmitter.h +14 -0
  429. package/ReactCommon/react/renderer/components/view/platform/tvos/react/renderer/components/view/HostPlatformViewProps.cpp +38 -0
  430. package/ReactCommon/react/renderer/components/view/platform/tvos/react/renderer/components/view/HostPlatformViewProps.h +29 -0
  431. package/ReactCommon/react/renderer/components/view/platform/tvos/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +30 -0
  432. package/ReactCommon/react/renderer/components/view/propsConversions.h +8 -2
  433. package/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp +86 -0
  434. package/ReactCommon/react/renderer/components/view/tests/ViewTest.cpp +34 -0
  435. package/ReactCommon/react/renderer/core/EventEmitter.cpp +67 -2
  436. package/ReactCommon/react/renderer/core/EventEmitter.h +25 -0
  437. package/ReactCommon/react/renderer/core/EventPipe.h +3 -1
  438. package/ReactCommon/react/renderer/core/EventQueueProcessor.cpp +18 -10
  439. package/ReactCommon/react/renderer/core/EventTarget.cpp +8 -5
  440. package/ReactCommon/react/renderer/core/LayoutContext.h +9 -2
  441. package/ReactCommon/react/renderer/core/LayoutMetrics.cpp +5 -3
  442. package/ReactCommon/react/renderer/core/LayoutPrimitives.h +1 -0
  443. package/ReactCommon/react/renderer/core/Props.cpp +20 -0
  444. package/ReactCommon/react/renderer/core/RawEvent.cpp +4 -2
  445. package/ReactCommon/react/renderer/core/RawEvent.h +6 -6
  446. package/ReactCommon/react/renderer/core/ShadowNode.h +2 -2
  447. package/ReactCommon/react/renderer/core/conversions.h +4 -0
  448. package/ReactCommon/react/renderer/core/graphicsConversions.h +4 -4
  449. package/ReactCommon/react/renderer/core/propsConversions.h +1 -1
  450. package/ReactCommon/react/renderer/core/tests/EventQueueProcessorTest.cpp +52 -3
  451. package/ReactCommon/react/renderer/core/tests/EventTargetTests.cpp +26 -0
  452. package/ReactCommon/react/renderer/css/tests/CSSValueParserTest.cpp +1 -1
  453. package/ReactCommon/react/renderer/debug/DebugStringConvertible.cpp +42 -26
  454. package/ReactCommon/react/renderer/debug/DebugStringConvertible.h +4 -2
  455. package/ReactCommon/react/renderer/debug/tests/DebugStringConvertibleTest.cpp +34 -3
  456. package/ReactCommon/react/renderer/graphics/BlendMode.h +5 -0
  457. package/ReactCommon/react/renderer/graphics/CMakeLists.txt +1 -0
  458. package/ReactCommon/react/renderer/graphics/ColorStop.h +3 -0
  459. package/ReactCommon/react/renderer/graphics/LinearGradient.h +3 -0
  460. package/ReactCommon/react/renderer/graphics/RadialGradient.h +4 -0
  461. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +1 -0
  462. package/ReactCommon/react/renderer/graphics/ValueUnit.cpp +1 -1
  463. package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageFetcher.cpp +0 -5
  464. package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageManager.cpp +2 -2
  465. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImagePrimitivesConversions.h +0 -4
  466. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm +5 -1
  467. package/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.cpp +12 -4
  468. package/ReactCommon/react/renderer/mounting/CMakeLists.txt +1 -0
  469. package/ReactCommon/react/renderer/mounting/Differentiator.cpp +307 -4
  470. package/ReactCommon/react/renderer/mounting/ShadowTree.cpp +27 -2
  471. package/ReactCommon/react/renderer/mounting/internal/LongestIncreasingSubsequence.h +95 -0
  472. package/ReactCommon/react/renderer/mounting/tests/DifferentiatorUnflattenTest.cpp +212 -0
  473. package/ReactCommon/react/renderer/mounting/tests/LongestIncreasingSubsequenceTest.cpp +154 -0
  474. package/ReactCommon/react/renderer/mounting/tests/ShadowTreeLifeCycleTest.cpp +314 -18
  475. package/ReactCommon/react/renderer/mounting/updateMountedFlag.cpp +38 -20
  476. package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +20 -22
  477. package/ReactCommon/react/renderer/scheduler/CMakeLists.txt +1 -0
  478. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +76 -3
  479. package/ReactCommon/react/renderer/scheduler/Scheduler.h +12 -0
  480. package/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +5 -0
  481. package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp +0 -7
  482. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mm +2 -1
  483. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +16 -1
  484. package/ReactCommon/react/renderer/uimanager/UIManager.h +8 -0
  485. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h +1 -0
  486. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +347 -5
  487. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.h +5 -3
  488. package/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +5 -0
  489. package/ReactCommon/react/renderer/uimanager/UIManagerViewTransitionDelegate.h +82 -0
  490. package/ReactCommon/react/renderer/viewtransition/CMakeLists.txt +22 -0
  491. package/ReactCommon/react/renderer/viewtransition/ViewTransitionModule.cpp +520 -0
  492. package/ReactCommon/react/renderer/viewtransition/ViewTransitionModule.h +161 -0
  493. package/ReactCommon/react/runtime/TimerManager.cpp +4 -2
  494. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +37 -0
  495. package/ReactCommon/react/timing/PrivacyInfo.xcprivacy +21 -0
  496. package/ReactCommon/react/timing/React-timing.podspec +2 -0
  497. package/ReactCommon/react/timing/primitives.h +33 -1
  498. package/ReactCommon/yoga/yoga/YGEnums.cpp +32 -0
  499. package/ReactCommon/yoga/yoga/YGEnums.h +20 -4
  500. package/ReactCommon/yoga/yoga/YGMacros.h +2 -0
  501. package/ReactCommon/yoga/yoga/YGNode.h +1 -1
  502. package/ReactCommon/yoga/yoga/YGNodeStyle.cpp +269 -0
  503. package/ReactCommon/yoga/yoga/YGNodeStyle.h +93 -1
  504. package/ReactCommon/yoga/yoga/algorithm/AbsoluteLayout.cpp +40 -9
  505. package/ReactCommon/yoga/yoga/algorithm/Align.h +12 -1
  506. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +106 -14
  507. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.h +22 -0
  508. package/ReactCommon/yoga/yoga/enums/Align.h +3 -1
  509. package/ReactCommon/yoga/yoga/enums/Display.h +2 -1
  510. package/ReactCommon/yoga/yoga/enums/ExperimentalFeature.h +2 -1
  511. package/ReactCommon/yoga/yoga/enums/GridTrackType.h +43 -0
  512. package/ReactCommon/yoga/yoga/enums/Justify.h +5 -1
  513. package/ReactCommon/yoga/yoga/event/event.cpp +2 -0
  514. package/ReactCommon/yoga/yoga/event/event.h +1 -0
  515. package/ReactCommon/yoga/yoga/node/Node.cpp +6 -1
  516. package/ReactCommon/yoga/yoga/node/Node.h +4 -4
  517. package/ReactCommon/yoga/yoga/style/GridLine.h +53 -0
  518. package/ReactCommon/yoga/yoga/style/GridTrack.h +63 -0
  519. package/ReactCommon/yoga/yoga/style/Style.h +261 -71
  520. package/ReactCommon/yoga/yoga/style/StyleSizeLength.h +7 -1
  521. package/ReactCommon/yoga/yoga/style/StyleValueHandle.h +8 -0
  522. package/ReactCommon/yoga/yoga/style/StyleValuePool.h +10 -0
  523. package/cli.js +1 -1
  524. package/flow/HermesInternalType.js +1 -1
  525. package/flow/bom.js.flow +95 -3
  526. package/flow/dom.js.flow +89 -89
  527. package/gradle/libs.versions.toml +3 -1
  528. package/index.js +30 -3
  529. package/index.js.flow +23 -1
  530. package/package.json +11 -11
  531. package/react-native.config.js +3 -3
  532. package/scripts/cocoapods/rncore.rb +65 -11
  533. package/scripts/cocoapods/rndependencies.rb +65 -11
  534. package/scripts/cocoapods/utils.rb +52 -0
  535. package/scripts/codegen/generate-artifacts-executor/generateCustomURLHandlers.js +1 -1
  536. package/scripts/codegen/generate-artifacts-executor/generateNativeCode.js +13 -4
  537. package/scripts/codegen/generate-artifacts-executor/generateRCTModuleProviders.js +1 -1
  538. package/scripts/codegen/generate-artifacts-executor/generateRCTThirdPartyComponents.js +1 -1
  539. package/scripts/codegen/generate-artifacts-executor/generateReactCodegenPodspec.js +17 -6
  540. package/scripts/codegen/generate-artifacts-executor/generateSchemaInfos.js +1 -1
  541. package/scripts/codegen/generate-artifacts-executor/generateUnstableModulesRequiringMainQueueSetupProvider.js +1 -1
  542. package/scripts/codegen/generate-artifacts-executor/index.js +2 -0
  543. package/scripts/codegen/generate-artifacts-executor/utils.js +1 -1
  544. package/scripts/codegen/generate-specs-cli-executor.js +1 -1
  545. package/scripts/generate-codegen-artifacts.js +20 -2
  546. package/scripts/generate-provider-cli.js +1 -1
  547. package/scripts/react_native_pods.rb +25 -2
  548. package/scripts/react_native_pods_utils/script_phases.rb +9 -3
  549. package/scripts/replace-rncore-version.js +20 -0
  550. package/scripts/xcode/with-environment.sh +7 -1
  551. package/sdks/.hermesv1version +1 -1
  552. package/sdks/.hermesversion +1 -1
  553. package/sdks/hermes-engine/hermes-utils.rb +92 -5
  554. package/sdks/hermes-engine/version.properties +2 -2
  555. package/src/private/animated/NativeAnimatedValidation.js +1 -1
  556. package/src/private/animated/createAnimatedPropsHook.js +2 -2
  557. package/src/private/components/virtualcollection/FlingConstants.js +21 -0
  558. package/src/private/components/virtualcollection/Virtual.js +62 -0
  559. package/src/private/components/virtualcollection/VirtualCollectionView.js +238 -0
  560. package/src/private/components/virtualcollection/column/VirtualColumn.js +43 -0
  561. package/src/private/components/virtualcollection/column/VirtualColumnGenerator.js +72 -0
  562. package/src/private/components/virtualcollection/debug/FlingItemOverlay.js +13 -0
  563. package/src/private/components/virtualcollection/dom/getScrollParent.js +43 -0
  564. package/src/private/components/virtualcollection/dom/isScrollableNode.js +22 -0
  565. package/src/private/components/virtualcollection/row/VirtualRow.js +43 -0
  566. package/src/private/components/virtualcollection/row/VirtualRowGenerator.js +72 -0
  567. package/src/private/devsupport/devmenu/elementinspector/getInspectorDataForViewAtPoint.js +2 -2
  568. package/src/private/devsupport/devmenu/elementinspector/useExternalInspection.js +1 -1
  569. package/src/private/devsupport/devmenu/specs/NativeDevMenu.js +1 -1
  570. package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsRuntimeSettingsModule.js +2 -2
  571. package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsSettingsManager.js +2 -2
  572. package/src/private/featureflags/ReactNativeFeatureFlags.js +41 -37
  573. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +3 -3
  574. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +9 -7
  575. package/src/private/renderer/errorhandling/ErrorHandlers.js +3 -3
  576. package/src/private/renderer/events/LegacySyntheticEvent.js +90 -0
  577. package/src/private/renderer/events/ReactNativeEventTypeMapping.js +103 -0
  578. package/src/private/renderer/events/ReactNativeResponder.js +687 -0
  579. package/src/private/renderer/events/ResponderEvent.js +40 -0
  580. package/src/private/renderer/events/ResponderTouchHistoryStore.js +258 -0
  581. package/src/private/renderer/events/dispatchNativeEvent.js +83 -0
  582. package/src/private/setup/setUpDOM.js +20 -0
  583. package/src/private/specs_DEPRECATED/components/ActivityIndicatorViewNativeComponent.js +2 -2
  584. package/src/private/specs_DEPRECATED/components/AndroidDrawerLayoutNativeComponent.js +2 -2
  585. package/src/private/specs_DEPRECATED/components/AndroidHorizontalScrollContentViewNativeComponent.js +2 -2
  586. package/src/private/specs_DEPRECATED/components/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
  587. package/src/private/specs_DEPRECATED/components/AndroidSwitchNativeComponent.js +2 -2
  588. package/src/private/specs_DEPRECATED/components/DebuggingOverlayNativeComponent.js +2 -2
  589. package/src/private/specs_DEPRECATED/components/ProgressBarAndroidNativeComponent.js +2 -2
  590. package/src/private/specs_DEPRECATED/components/PullToRefreshViewNativeComponent.js +2 -2
  591. package/src/private/specs_DEPRECATED/components/RCTInputAccessoryViewNativeComponent.js +2 -2
  592. package/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js +2 -2
  593. package/src/private/specs_DEPRECATED/components/RCTSafeAreaViewNativeComponent.js +2 -2
  594. package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +2 -2
  595. package/src/private/specs_DEPRECATED/components/UnimplementedNativeViewNativeComponent.js +2 -2
  596. package/src/private/specs_DEPRECATED/modules/NativeAccessibilityInfo.js +1 -1
  597. package/src/private/specs_DEPRECATED/modules/NativeAccessibilityManager.js +1 -1
  598. package/src/private/specs_DEPRECATED/modules/NativeActionSheetManager.js +1 -1
  599. package/src/private/specs_DEPRECATED/modules/NativeAlertManager.js +1 -1
  600. package/src/private/specs_DEPRECATED/modules/NativeAppState.js +1 -1
  601. package/src/private/specs_DEPRECATED/modules/NativeAppearance.js +1 -1
  602. package/src/private/specs_DEPRECATED/modules/NativeBlobModule.js +1 -1
  603. package/src/private/specs_DEPRECATED/modules/NativeClipboard.js +1 -1
  604. package/src/private/specs_DEPRECATED/modules/NativeDevLoadingView.js +1 -1
  605. package/src/private/specs_DEPRECATED/modules/NativeDevSettings.js +1 -1
  606. package/src/private/specs_DEPRECATED/modules/NativeDeviceEventManager.js +1 -1
  607. package/src/private/specs_DEPRECATED/modules/NativeDialogManagerAndroid.js +1 -1
  608. package/src/private/specs_DEPRECATED/modules/NativeFileReaderModule.js +2 -2
  609. package/src/private/specs_DEPRECATED/modules/NativeFrameRateLogger.js +1 -1
  610. package/src/private/specs_DEPRECATED/modules/NativeHeadlessJsTaskSupport.js +1 -1
  611. package/src/private/specs_DEPRECATED/modules/NativeI18nManager.js +1 -1
  612. package/src/private/specs_DEPRECATED/modules/NativeImageEditor.js +2 -2
  613. package/src/private/specs_DEPRECATED/modules/NativeImageLoaderAndroid.js +1 -1
  614. package/src/private/specs_DEPRECATED/modules/NativeImageLoaderIOS.js +1 -1
  615. package/src/private/specs_DEPRECATED/modules/NativeImageStoreAndroid.js +2 -2
  616. package/src/private/specs_DEPRECATED/modules/NativeImageStoreIOS.js +2 -2
  617. package/src/private/specs_DEPRECATED/modules/NativeIntentAndroid.js +1 -1
  618. package/src/private/specs_DEPRECATED/modules/NativeJSCHeapCapture.js +1 -1
  619. package/src/private/specs_DEPRECATED/modules/NativeKeyboardObserver.js +1 -1
  620. package/src/private/specs_DEPRECATED/modules/NativeLinkingManager.js +1 -1
  621. package/src/private/specs_DEPRECATED/modules/NativeLogBox.js +1 -1
  622. package/src/private/specs_DEPRECATED/modules/NativeModalManager.js +1 -1
  623. package/src/private/specs_DEPRECATED/modules/NativeNetworkingAndroid.js +1 -1
  624. package/src/private/specs_DEPRECATED/modules/NativeNetworkingIOS.js +1 -1
  625. package/src/private/specs_DEPRECATED/modules/NativePermissionsAndroid.js +1 -1
  626. package/src/private/specs_DEPRECATED/modules/NativePlatformConstantsAndroid.js +2 -2
  627. package/src/private/specs_DEPRECATED/modules/NativePlatformConstantsIOS.js +2 -2
  628. package/src/private/specs_DEPRECATED/modules/NativePushNotificationManagerIOS.js +2 -2
  629. package/src/private/specs_DEPRECATED/modules/NativeRedBox.js +1 -1
  630. package/src/private/specs_DEPRECATED/modules/NativeSampleTurboModule.js +2 -2
  631. package/src/private/specs_DEPRECATED/modules/NativeSegmentFetcher.js +1 -1
  632. package/src/private/specs_DEPRECATED/modules/NativeSettingsManager.js +2 -2
  633. package/src/private/specs_DEPRECATED/modules/NativeShareModule.js +1 -1
  634. package/src/private/specs_DEPRECATED/modules/NativeSoundManager.js +1 -1
  635. package/src/private/specs_DEPRECATED/modules/NativeTiming.js +1 -1
  636. package/src/private/specs_DEPRECATED/modules/NativeToastAndroid.js +1 -1
  637. package/src/private/specs_DEPRECATED/modules/NativeUIManager.js +1 -1
  638. package/src/private/specs_DEPRECATED/modules/NativeVibration.js +1 -1
  639. package/src/private/specs_DEPRECATED/modules/NativeWebSocketModule.js +2 -2
  640. package/src/private/styles/composeStyles.js +1 -1
  641. package/src/private/types/HostComponent.js +1 -1
  642. package/src/private/utilities/toExtendedError.js +1 -1
  643. package/src/private/viewtransition/specs/NativeViewTransition.js +33 -0
  644. package/src/private/webapis/dom/events/Event.js +10 -1
  645. package/src/private/webapis/dom/events/EventTarget.js +60 -18
  646. package/src/private/webapis/dom/events/internals/EventInternals.js +18 -1
  647. package/src/private/webapis/dom/events/internals/EventTargetInternals.js +12 -0
  648. package/src/private/webapis/dom/nodes/ReactNativeElement.js +24 -0
  649. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +4 -6
  650. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +70 -1
  651. package/src/private/webapis/dom/nodes/internals/NodeInternals.js +10 -0
  652. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +1 -1
  653. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +2 -2
  654. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +5 -9
  655. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +2 -2
  656. package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +2 -2
  657. package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +2 -2
  658. package/src/private/webapis/performance/internals/RawPerformanceEntry.js +1 -1
  659. package/src/private/webapis/performance/specs/NativePerformance.js +1 -1
  660. package/src/private/webapis/structuredClone/structuredClone.js +1 -1
  661. package/src/private/webapis/webidl/PlatformObjects.js +4 -4
  662. package/types/public/ReactNativeTVTypes.d.ts +9 -0
  663. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +0 -19669
  664. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +0 -11129
  665. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +0 -12930
  666. package/Libraries/Renderer/shims/ReactNative.js +0 -27
  667. package/Libraries/Utilities/GlobalPerformanceLogger.js +0 -24
  668. package/Libraries/Utilities/PerformanceLoggerContext.js +0 -33
  669. package/Libraries/Utilities/createPerformanceLogger.js +0 -329
  670. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaMethodWrapper.kt +0 -442
  671. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.kt +0 -31
  672. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollContainerLegacyView.kt +0 -47
  673. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIFinalizer.java +0 -31
  674. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIFinalizer.java +0 -35
  675. package/ReactCommon/react/renderer/graphics/DoubleConversions.cpp +0 -38
@@ -0,0 +1,62 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #include <gtest/gtest.h>
9
+
10
+ #include <algorithm>
11
+ #include <type_traits>
12
+ #include <vector>
13
+
14
+ #include "../PerformanceEntry.h"
15
+
16
+ using namespace facebook::react;
17
+
18
+ // Verify that PerformanceEntrySorter::operator() is const-qualified.
19
+ // Without const, std::stable_sort may fail to compile on toolchains where
20
+ // the comparator is passed through a const-qualified code path (e.g.
21
+ // libc++ __insertion_sort on NDK 19.x), causing SIGSEGV at runtime on
22
+ // others. See T263807207.
23
+ TEST(PerformanceEntry, SorterOperatorIsConst) {
24
+ static_assert(
25
+ std::is_invocable_v<
26
+ const PerformanceEntrySorter,
27
+ const PerformanceEntry&,
28
+ const PerformanceEntry&>,
29
+ "PerformanceEntrySorter::operator() must be const-qualified");
30
+ }
31
+
32
+ TEST(PerformanceEntry, SortEntriesByStartTimeThenDuration) {
33
+ auto t0 = HighResTimeStamp::now();
34
+ auto t1 = t0 + HighResDuration::fromMilliseconds(1);
35
+ auto t2 = t0 + HighResDuration::fromMilliseconds(2);
36
+
37
+ std::vector<PerformanceEntry> entries = {
38
+ PerformanceMark{{.name = "c", .startTime = t2}},
39
+ PerformanceMark{{.name = "a", .startTime = t0}},
40
+ PerformanceMeasure{
41
+ {.name = "b",
42
+ .startTime = t0,
43
+ .duration = HighResDuration::fromMilliseconds(5)}},
44
+ PerformanceMark{
45
+ {.name = "d", .startTime = t1, .duration = HighResDuration::zero()}},
46
+ };
47
+
48
+ std::stable_sort(entries.begin(), entries.end(), PerformanceEntrySorter{});
49
+
50
+ // Entries with same startTime are ordered by duration (ascending).
51
+ // "a" (t0, dur=0) < "b" (t0, dur=5) < "d" (t1, dur=0) < "c" (t2, dur=0)
52
+ ASSERT_EQ(4, entries.size());
53
+
54
+ auto getName = [](const PerformanceEntry& e) {
55
+ return std::visit([](const auto& x) { return x.name; }, e);
56
+ };
57
+
58
+ EXPECT_EQ("a", getName(entries[0]));
59
+ EXPECT_EQ("b", getName(entries[1]));
60
+ EXPECT_EQ("d", getName(entries[2]));
61
+ EXPECT_EQ("c", getName(entries[3]));
62
+ }
@@ -499,15 +499,23 @@ void NativeAnimatedNodesManager::handleAnimatedEvent(
499
499
  }
500
500
  }
501
501
 
502
- if (foundAtLeastOneDriver && !isEventAnimationInProgress_) {
503
- // There is an animation driver handling this event and
504
- // event driven animation has not been started yet.
505
- isEventAnimationInProgress_ = true;
506
- // Some platforms (e.g. iOS) have UI tick listener disable
507
- // when there are no active animations. Calling
508
- // `startRenderCallbackIfNeeded` will call platform specific code to
509
- // register UI tick listener.
510
- startRenderCallbackIfNeeded(false);
502
+ if (foundAtLeastOneDriver) {
503
+ // Process event-driven animation updates synchronously, matching the
504
+ // behavior of the Java NativeAnimatedNodesManager which calls
505
+ // updateNodes() for every event. Without this, only the first event
506
+ // in a scroll sequence is processed synchronously subsequent events
507
+ // just store the updated value and defer graph traversal + prop commit
508
+ // to the next choreographer frame, introducing 1-frame latency.
509
+ if (!isEventAnimationInProgress_) {
510
+ // There is an animation driver handling this event and
511
+ // event driven animation has not been started yet.
512
+ isEventAnimationInProgress_ = true;
513
+ // Some platforms (e.g. iOS) have UI tick listener disable
514
+ // when there are no active animations. Calling
515
+ // `startRenderCallbackIfNeeded` will call platform specific code to
516
+ // register UI tick listener.
517
+ startRenderCallbackIfNeeded(false);
518
+ }
511
519
  // Calling startOnRenderCallback_ will register a UI tick listener.
512
520
  // The UI ticker listener will not be called until the next frame.
513
521
  // That's why, in case this is called from the UI thread, we need to
@@ -555,9 +563,13 @@ void NativeAnimatedNodesManager::startRenderCallbackIfNeeded(bool isAsync) {
555
563
 
556
564
  if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) {
557
565
  if (auto animationBackend = animationBackend_.lock()) {
558
- animationBackendCallbackId_ =
559
- animationBackend->start([this](AnimationTimestamp timestamp) {
560
- return pullAnimationMutations(timestamp);
566
+ auto weak = weak_from_this();
567
+ animationBackendCallbackId_ = animationBackend->start(
568
+ [weak](AnimationTimestamp timestamp) -> AnimationMutations {
569
+ if (auto self = weak.lock()) {
570
+ return self->pullAnimationMutations(timestamp);
571
+ }
572
+ return {};
561
573
  });
562
574
  }
563
575
 
@@ -51,7 +51,7 @@ using AnimationEndCallback = AsyncCallback<EndResult>;
51
51
  template <>
52
52
  struct Bridging<EndResult> : NativeAnimatedTurboModuleEndResultBridging<EndResult> {};
53
53
 
54
- class NativeAnimatedNodesManager {
54
+ class NativeAnimatedNodesManager : public std::enable_shared_from_this<NativeAnimatedNodesManager> {
55
55
  public:
56
56
  using DirectManipulationCallback = std::function<void(Tag, const folly::dynamic &)>;
57
57
  using FabricCommitCallback = std::function<void(std::unordered_map<Tag, folly::dynamic> &)>;
@@ -530,6 +530,9 @@ void packMixBlendMode(
530
530
  case BlendMode::Luminosity:
531
531
  blendModeStr = "luminosity";
532
532
  break;
533
+ case BlendMode::PlusLighter:
534
+ blendModeStr = "plus-lighter";
535
+ break;
533
536
  default:
534
537
  throw std::runtime_error("Unknown blend mode");
535
538
  }
@@ -93,10 +93,17 @@ AnimatedPropsRegistry::getMap(SurfaceId surfaceId) {
93
93
 
94
94
  void AnimatedPropsRegistry::clear(SurfaceId surfaceId) {
95
95
  auto lock = std::lock_guard(mutex_);
96
+ if (auto it = surfaceContexts_.find(surfaceId);
97
+ it != surfaceContexts_.end()) {
98
+ auto& surfaceContext = it->second;
99
+ surfaceContext.families.clear();
100
+ surfaceContext.map.clear();
101
+ }
102
+ }
96
103
 
97
- auto& surfaceContext = surfaceContexts_[surfaceId];
98
- surfaceContext.families.clear();
99
- surfaceContext.map.clear();
104
+ void AnimatedPropsRegistry::clearOnSurfaceStop(SurfaceId surfaceId) {
105
+ auto lock = std::lock_guard(mutex_);
106
+ surfaceContexts_.erase(surfaceId);
100
107
  }
101
108
 
102
109
  } // namespace facebook::react
@@ -39,6 +39,7 @@ class AnimatedPropsRegistry {
39
39
  public:
40
40
  void update(const std::unordered_map<SurfaceId, SurfaceUpdates> &surfaceUpdates);
41
41
  void clear(SurfaceId surfaceId);
42
+ void clearOnSurfaceStop(SurfaceId surfaceId);
42
43
  std::pair<std::unordered_set<std::shared_ptr<const ShadowNodeFamily>> &, SnapshotMap &> getMap(SurfaceId surfaceId);
43
44
 
44
45
  private:
@@ -257,6 +257,10 @@ void AnimationBackend::clearRegistry(SurfaceId surfaceId) {
257
257
  animatedPropsRegistry_->clear(surfaceId);
258
258
  }
259
259
 
260
+ void AnimationBackend::clearRegistryOnSurfaceStop(SurfaceId surfaceId) {
261
+ animatedPropsRegistry_->clearOnSurfaceStop(surfaceId);
262
+ }
263
+
260
264
  void AnimationBackend::registerJSInvoker(
261
265
  std::shared_ptr<CallInvoker> jsInvoker) {
262
266
  if (!jsInvoker_) {
@@ -8,7 +8,6 @@
8
8
  #pragma once
9
9
 
10
10
  #include <ReactCommon/CallInvoker.h>
11
- #include <folly/dynamic.h>
12
11
  #include <react/renderer/core/ReactPrimitives.h>
13
12
  #include <react/renderer/uimanager/UIManager.h>
14
13
  #include <react/renderer/uimanager/UIManagerAnimationBackend.h>
@@ -56,6 +55,7 @@ class AnimationBackend : public UIManagerAnimationBackend {
56
55
  void synchronouslyUpdateProps(const std::unordered_map<Tag, AnimatedProps> &updates);
57
56
  void requestAsyncFlushForSurfaces(const std::set<SurfaceId> &surfaces);
58
57
  void clearRegistry(SurfaceId surfaceId) override;
58
+ void clearRegistryOnSurfaceStop(SurfaceId surfaceId) override;
59
59
  void registerJSInvoker(std::shared_ptr<CallInvoker> jsInvoker) override;
60
60
 
61
61
  void onAnimationFrame(AnimationTimestamp timestamp) override;
@@ -7,7 +7,6 @@
7
7
 
8
8
  #pragma once
9
9
 
10
- #include <folly/dynamic.h>
11
10
  #include <react/renderer/core/ReactPrimitives.h>
12
11
  #include <react/renderer/uimanager/UIManager.h>
13
12
  #include <react/renderer/uimanager/UIManagerCommitHook.h>
@@ -74,6 +74,10 @@ void LayoutAnimationDriver::animationMutationsForFrame(
74
74
  }
75
75
  }
76
76
 
77
+ // Record boundary: animation-frame Updates above this point carry
78
+ // parentTag from before any structural changes and must execute first.
79
+ auto animationUpdatesEnd = mutationsList.size();
80
+
77
81
  // Clear out finished animations
78
82
  for (auto it = inflightAnimations_.begin();
79
83
  it != inflightAnimations_.end();) {
@@ -99,10 +103,11 @@ void LayoutAnimationDriver::animationMutationsForFrame(
99
103
  }
100
104
  }
101
105
 
102
- // Final step: make sure that all operations execute in the proper order.
103
- // REMOVE operations with highest indices must operate first.
106
+ // Sort only the final mutations from completed animations.
107
+ // Animation-frame Updates must stay before structural mutations because
108
+ // they reference views by their pre-structural-change parentTag.
104
109
  std::stable_sort(
105
- mutationsList.begin(),
110
+ mutationsList.begin() + static_cast<ptrdiff_t>(animationUpdatesEnd),
106
111
  mutationsList.end(),
107
112
  &shouldFirstComeBeforeSecondMutation);
108
113
  }
@@ -0,0 +1,273 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #include <algorithm>
9
+ #include <vector>
10
+
11
+ #include <gtest/gtest.h>
12
+
13
+ #include <react/renderer/animations/utils.h>
14
+ #include <react/renderer/mounting/ShadowViewMutation.h>
15
+
16
+ namespace facebook::react {
17
+
18
+ namespace {
19
+
20
+ ShadowView makeShadowView(Tag tag) {
21
+ ShadowView sv{};
22
+ sv.tag = tag;
23
+ return sv;
24
+ }
25
+
26
+ } // namespace
27
+
28
+ // Verify strict weak ordering: irreflexivity
29
+ // comp(a, a) must be false
30
+ TEST(MutationComparatorTest, Irreflexivity) {
31
+ auto sv1 = makeShadowView(1);
32
+ auto sv2 = makeShadowView(2);
33
+
34
+ // Same-type mutations where the fallback path is exercised
35
+ auto update1 = ShadowViewMutation::UpdateMutation(sv1, sv2, /*parentTag=*/10);
36
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(update1, update1));
37
+
38
+ auto create1 = ShadowViewMutation::CreateMutation(sv1);
39
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(create1, create1));
40
+
41
+ auto insert1 =
42
+ ShadowViewMutation::InsertMutation(/*parentTag=*/10, sv1, /*index=*/0);
43
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(insert1, insert1));
44
+
45
+ auto remove1 =
46
+ ShadowViewMutation::RemoveMutation(/*parentTag=*/10, sv1, /*index=*/0);
47
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(remove1, remove1));
48
+
49
+ auto del1 = ShadowViewMutation::DeleteMutation(sv1);
50
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(del1, del1));
51
+ }
52
+
53
+ // Verify strict weak ordering: asymmetry
54
+ // If comp(a, b) then !comp(b, a)
55
+ TEST(MutationComparatorTest, Asymmetry) {
56
+ auto sv1 = makeShadowView(1);
57
+ auto sv2 = makeShadowView(2);
58
+ auto sv3 = makeShadowView(3);
59
+
60
+ // Two updates with same type but different parentTags (fallback path)
61
+ auto update1 = ShadowViewMutation::UpdateMutation(sv1, sv2, /*parentTag=*/10);
62
+ auto update2 = ShadowViewMutation::UpdateMutation(sv1, sv3, /*parentTag=*/20);
63
+
64
+ bool a_before_b = shouldFirstComeBeforeSecondMutation(update1, update2);
65
+ bool b_before_a = shouldFirstComeBeforeSecondMutation(update2, update1);
66
+
67
+ // Exactly one must be true (asymmetry)
68
+ EXPECT_NE(a_before_b, b_before_a);
69
+ }
70
+
71
+ // Verify strict weak ordering: transitivity
72
+ // If comp(a, b) and comp(b, c) then comp(a, c)
73
+ TEST(MutationComparatorTest, Transitivity) {
74
+ auto sv1 = makeShadowView(1);
75
+ auto sv2 = makeShadowView(2);
76
+ auto sv3 = makeShadowView(3);
77
+
78
+ auto update1 = ShadowViewMutation::UpdateMutation(sv1, sv1, /*parentTag=*/10);
79
+ auto update2 = ShadowViewMutation::UpdateMutation(sv1, sv1, /*parentTag=*/20);
80
+ auto update3 = ShadowViewMutation::UpdateMutation(sv1, sv1, /*parentTag=*/30);
81
+
82
+ bool a_b = shouldFirstComeBeforeSecondMutation(update1, update2);
83
+ bool b_c = shouldFirstComeBeforeSecondMutation(update2, update3);
84
+ bool a_c = shouldFirstComeBeforeSecondMutation(update1, update3);
85
+
86
+ if (a_b && b_c) {
87
+ EXPECT_TRUE(a_c) << "Transitivity violated: a<b and b<c but not a<c";
88
+ }
89
+ }
90
+
91
+ // Verify type-based ordering rules
92
+ TEST(MutationComparatorTest, TypeOrdering) {
93
+ auto sv1 = makeShadowView(1);
94
+ auto sv2 = makeShadowView(2);
95
+
96
+ auto create = ShadowViewMutation::CreateMutation(sv1);
97
+ auto insert =
98
+ ShadowViewMutation::InsertMutation(/*parentTag=*/10, sv1, /*index=*/0);
99
+ auto remove =
100
+ ShadowViewMutation::RemoveMutation(/*parentTag=*/10, sv1, /*index=*/0);
101
+ auto update = ShadowViewMutation::UpdateMutation(sv1, sv2, /*parentTag=*/10);
102
+ auto del = ShadowViewMutation::DeleteMutation(sv1);
103
+
104
+ // Delete always comes last
105
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(del, create));
106
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(del, insert));
107
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(del, remove));
108
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(create, del));
109
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(insert, del));
110
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(remove, del));
111
+
112
+ // Remove comes before Insert
113
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(remove, insert));
114
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(insert, remove));
115
+
116
+ // Create comes before Insert
117
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(create, insert));
118
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(insert, create));
119
+
120
+ // Remove comes before Update
121
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(remove, update));
122
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(update, remove));
123
+ }
124
+
125
+ // Verify removes on same parent are sorted by descending index
126
+ TEST(MutationComparatorTest, RemovesSameParentDescendingIndex) {
127
+ auto sv1 = makeShadowView(1);
128
+ auto sv2 = makeShadowView(2);
129
+
130
+ auto remove_idx0 =
131
+ ShadowViewMutation::RemoveMutation(/*parentTag=*/10, sv1, /*index=*/0);
132
+ auto remove_idx5 =
133
+ ShadowViewMutation::RemoveMutation(/*parentTag=*/10, sv2, /*index=*/5);
134
+
135
+ // Higher index should come first
136
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(remove_idx5, remove_idx0));
137
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(remove_idx0, remove_idx5));
138
+ }
139
+
140
+ // Verify the deterministic fallback uses parentTag, then child tags
141
+ TEST(MutationComparatorTest, DeterministicFallbackByParentTag) {
142
+ auto sv1 = makeShadowView(1);
143
+ auto sv2 = makeShadowView(2);
144
+
145
+ // Two updates with same type, different parentTags
146
+ auto update_p10 =
147
+ ShadowViewMutation::UpdateMutation(sv1, sv2, /*parentTag=*/10);
148
+ auto update_p20 =
149
+ ShadowViewMutation::UpdateMutation(sv1, sv2, /*parentTag=*/20);
150
+
151
+ // Lower parentTag comes first
152
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(update_p10, update_p20));
153
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(update_p20, update_p10));
154
+ }
155
+
156
+ TEST(MutationComparatorTest, DeterministicFallbackByNewChildTag) {
157
+ auto sv1 = makeShadowView(1);
158
+ auto sv2 = makeShadowView(2);
159
+ auto sv3 = makeShadowView(3);
160
+
161
+ // Same parentTag, different newChildShadowView tags
162
+ auto update_new2 =
163
+ ShadowViewMutation::UpdateMutation(sv1, sv2, /*parentTag=*/10);
164
+ auto update_new3 =
165
+ ShadowViewMutation::UpdateMutation(sv1, sv3, /*parentTag=*/10);
166
+
167
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(update_new2, update_new3));
168
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(update_new3, update_new2));
169
+ }
170
+
171
+ TEST(MutationComparatorTest, DeterministicFallbackByOldChildTag) {
172
+ auto sv1 = makeShadowView(1);
173
+ auto sv2 = makeShadowView(2);
174
+ auto sv3 = makeShadowView(3);
175
+
176
+ // Same parentTag, same newChildShadowView tag, different oldChildShadowView
177
+ // tags
178
+ auto update_old1 =
179
+ ShadowViewMutation::UpdateMutation(sv1, sv3, /*parentTag=*/10);
180
+ auto update_old2 =
181
+ ShadowViewMutation::UpdateMutation(sv2, sv3, /*parentTag=*/10);
182
+
183
+ EXPECT_TRUE(shouldFirstComeBeforeSecondMutation(update_old1, update_old2));
184
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(update_old2, update_old1));
185
+ }
186
+
187
+ // Verify equal mutations return false (stability)
188
+ TEST(MutationComparatorTest, EqualMutationsReturnFalse) {
189
+ auto sv1 = makeShadowView(1);
190
+ auto sv2 = makeShadowView(2);
191
+
192
+ auto update_a =
193
+ ShadowViewMutation::UpdateMutation(sv1, sv2, /*parentTag=*/10);
194
+ auto update_b =
195
+ ShadowViewMutation::UpdateMutation(sv1, sv2, /*parentTag=*/10);
196
+
197
+ // Two mutations with identical properties should return false (not less-than)
198
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(update_a, update_b));
199
+ EXPECT_FALSE(shouldFirstComeBeforeSecondMutation(update_b, update_a));
200
+ }
201
+
202
+ // Verify std::stable_sort doesn't crash with the comparator
203
+ // (the original bug was a SIGSEGV during sort)
204
+ TEST(MutationComparatorTest, StableSortDoesNotCrash) {
205
+ ShadowViewMutation::List mutations;
206
+
207
+ // Build a list with various mutation types and properties
208
+ for (int parent = 0; parent < 5; parent++) {
209
+ for (int child = 0; child < 10; child++) {
210
+ auto sv_old = makeShadowView(child);
211
+ auto sv_new = makeShadowView(child + 100);
212
+
213
+ mutations.push_back(
214
+ ShadowViewMutation::UpdateMutation(
215
+ sv_old, sv_new, /*parentTag=*/parent));
216
+ mutations.push_back(
217
+ ShadowViewMutation::InsertMutation(
218
+ /*parentTag=*/parent, sv_new, /*index=*/child));
219
+ mutations.push_back(
220
+ ShadowViewMutation::RemoveMutation(
221
+ /*parentTag=*/parent, sv_old, /*index=*/child));
222
+ }
223
+ }
224
+ mutations.push_back(ShadowViewMutation::CreateMutation(makeShadowView(999)));
225
+ mutations.push_back(ShadowViewMutation::DeleteMutation(makeShadowView(998)));
226
+
227
+ // This should not crash (the original bug was SIGSEGV here)
228
+ EXPECT_NO_FATAL_FAILURE(
229
+ std::stable_sort(
230
+ mutations.begin(),
231
+ mutations.end(),
232
+ &shouldFirstComeBeforeSecondMutation));
233
+
234
+ // Verify ordering invariants after sort
235
+ bool seen_delete = false;
236
+ for (const auto& m : mutations) {
237
+ if (m.type == ShadowViewMutation::Type::Delete) {
238
+ seen_delete = true;
239
+ } else if (seen_delete) {
240
+ FAIL() << "Non-delete mutation found after a delete mutation";
241
+ }
242
+ }
243
+ }
244
+
245
+ // Stress test: sort a large list of mutations with duplicates
246
+ TEST(MutationComparatorTest, StableSortLargeListWithDuplicates) {
247
+ ShadowViewMutation::List mutations;
248
+
249
+ // Create many mutations with overlapping properties to stress the comparator
250
+ for (int i = 0; i < 200; i++) {
251
+ auto sv = makeShadowView(i % 10); // Deliberately create duplicates
252
+ auto sv2 = makeShadowView((i + 1) % 10);
253
+ int parent = i % 5;
254
+
255
+ mutations.push_back(ShadowViewMutation::UpdateMutation(sv, sv2, parent));
256
+ if (i % 3 == 0) {
257
+ mutations.push_back(
258
+ ShadowViewMutation::InsertMutation(parent, sv, i % 20));
259
+ }
260
+ if (i % 4 == 0) {
261
+ mutations.push_back(
262
+ ShadowViewMutation::RemoveMutation(parent, sv, i % 20));
263
+ }
264
+ }
265
+
266
+ EXPECT_NO_FATAL_FAILURE(
267
+ std::stable_sort(
268
+ mutations.begin(),
269
+ mutations.end(),
270
+ &shouldFirstComeBeforeSecondMutation));
271
+ }
272
+
273
+ } // namespace facebook::react
@@ -96,7 +96,18 @@ static inline bool shouldFirstComeBeforeSecondMutation(
96
96
  }
97
97
  }
98
98
 
99
- return &lhs < &rhs;
99
+ // Deterministic fallback: when no type-specific rule applies, order by
100
+ // mutation properties to satisfy strict weak ordering.
101
+ if (lhs.parentTag != rhs.parentTag) {
102
+ return lhs.parentTag < rhs.parentTag;
103
+ }
104
+ if (lhs.newChildShadowView.tag != rhs.newChildShadowView.tag) {
105
+ return lhs.newChildShadowView.tag < rhs.newChildShadowView.tag;
106
+ }
107
+ if (lhs.oldChildShadowView.tag != rhs.oldChildShadowView.tag) {
108
+ return lhs.oldChildShadowView.tag < rhs.oldChildShadowView.tag;
109
+ }
110
+ return false;
100
111
  }
101
112
 
102
113
  std::pair<Float, Float>
@@ -88,7 +88,7 @@ void TextAttributes::apply(TextAttributes textAttributes) {
88
88
 
89
89
  // Shadow
90
90
  textShadowOffset = textAttributes.textShadowOffset.has_value()
91
- ? textAttributes.textShadowOffset.value()
91
+ ? textAttributes.textShadowOffset
92
92
  : textShadowOffset;
93
93
  textShadowRadius = !std::isnan(textAttributes.textShadowRadius)
94
94
  ? textAttributes.textShadowRadius
@@ -7,8 +7,8 @@
7
7
 
8
8
  #pragma once
9
9
 
10
- #include <folly/dynamic.h>
11
10
  #include <react/debug/react_native_expect.h>
11
+ #include <react/featureflags/ReactNativeFeatureFlags.h>
12
12
  #include <react/renderer/attributedstring/AttributedString.h>
13
13
  #include <react/renderer/attributedstring/ParagraphAttributes.h>
14
14
  #include <react/renderer/attributedstring/TextAttributes.h>
@@ -21,6 +21,8 @@
21
21
  #include <react/renderer/core/conversions.h>
22
22
  #include <react/renderer/core/graphicsConversions.h>
23
23
  #include <react/renderer/core/propsConversions.h>
24
+ #include <react/renderer/css/CSSFontVariant.h>
25
+ #include <react/renderer/css/CSSValueParser.h>
24
26
  #include <unordered_map>
25
27
 
26
28
  #ifdef RN_SERIALIZABLE_STATE
@@ -317,7 +319,73 @@ inline std::string toString(const FontStyle &fontStyle)
317
319
  return "normal";
318
320
  }
319
321
 
320
- inline void fromRawValue(const PropsParserContext &context, const RawValue &value, FontVariant &result)
322
+ inline std::optional<FontVariant> fontVariantFromCSSFontVariant(CSSFontVariant cssVariant)
323
+ {
324
+ switch (cssVariant) {
325
+ case CSSFontVariant::SmallCaps:
326
+ return FontVariant::SmallCaps;
327
+ case CSSFontVariant::OldstyleNums:
328
+ return FontVariant::OldstyleNums;
329
+ case CSSFontVariant::LiningNums:
330
+ return FontVariant::LiningNums;
331
+ case CSSFontVariant::TabularNums:
332
+ return FontVariant::TabularNums;
333
+ case CSSFontVariant::ProportionalNums:
334
+ return FontVariant::ProportionalNums;
335
+ case CSSFontVariant::StylisticOne:
336
+ return FontVariant::StylisticOne;
337
+ case CSSFontVariant::StylisticTwo:
338
+ return FontVariant::StylisticTwo;
339
+ case CSSFontVariant::StylisticThree:
340
+ return FontVariant::StylisticThree;
341
+ case CSSFontVariant::StylisticFour:
342
+ return FontVariant::StylisticFour;
343
+ case CSSFontVariant::StylisticFive:
344
+ return FontVariant::StylisticFive;
345
+ case CSSFontVariant::StylisticSix:
346
+ return FontVariant::StylisticSix;
347
+ case CSSFontVariant::StylisticSeven:
348
+ return FontVariant::StylisticSeven;
349
+ case CSSFontVariant::StylisticEight:
350
+ return FontVariant::StylisticEight;
351
+ case CSSFontVariant::StylisticNine:
352
+ return FontVariant::StylisticNine;
353
+ case CSSFontVariant::StylisticTen:
354
+ return FontVariant::StylisticTen;
355
+ case CSSFontVariant::StylisticEleven:
356
+ return FontVariant::StylisticEleven;
357
+ case CSSFontVariant::StylisticTwelve:
358
+ return FontVariant::StylisticTwelve;
359
+ case CSSFontVariant::StylisticThirteen:
360
+ return FontVariant::StylisticThirteen;
361
+ case CSSFontVariant::StylisticFourteen:
362
+ return FontVariant::StylisticFourteen;
363
+ case CSSFontVariant::StylisticFifteen:
364
+ return FontVariant::StylisticFifteen;
365
+ case CSSFontVariant::StylisticSixteen:
366
+ return FontVariant::StylisticSixteen;
367
+ case CSSFontVariant::StylisticSeventeen:
368
+ return FontVariant::StylisticSeventeen;
369
+ case CSSFontVariant::StylisticEighteen:
370
+ return FontVariant::StylisticEighteen;
371
+ case CSSFontVariant::StylisticNineteen:
372
+ return FontVariant::StylisticNineteen;
373
+ case CSSFontVariant::StylisticTwenty:
374
+ return FontVariant::StylisticTwenty;
375
+ case CSSFontVariant::CommonLigatures:
376
+ case CSSFontVariant::NoCommonLigatures:
377
+ case CSSFontVariant::DiscretionaryLigatures:
378
+ case CSSFontVariant::NoDiscretionaryLigatures:
379
+ case CSSFontVariant::HistoricalLigatures:
380
+ case CSSFontVariant::NoHistoricalLigatures:
381
+ case CSSFontVariant::Contextual:
382
+ case CSSFontVariant::NoContextual:
383
+ return std::nullopt;
384
+ }
385
+ }
386
+
387
+ inline void
388
+ parseProcessedFontVariant(const PropsParserContext & /*context*/, const RawValue &value, FontVariant &result)
321
389
  {
322
390
  result = FontVariant::Default;
323
391
  react_native_expect(value.hasType<std::vector<std::string>>());
@@ -376,7 +444,6 @@ inline void fromRawValue(const PropsParserContext &context, const RawValue &valu
376
444
  result = (FontVariant)((int)result | (int)FontVariant::StylisticTwenty);
377
445
  } else {
378
446
  LOG(ERROR) << "Unsupported FontVariant value: " << item;
379
- react_native_expect(false);
380
447
  }
381
448
  }
382
449
  } else {
@@ -384,6 +451,40 @@ inline void fromRawValue(const PropsParserContext &context, const RawValue &valu
384
451
  }
385
452
  }
386
453
 
454
+ inline void parseUnprocessedFontVariantString(const std::string &value, FontVariant &result)
455
+ {
456
+ auto fontVariantList = parseCSSProperty<CSSFontVariantList>(value);
457
+ if (!std::holds_alternative<CSSFontVariantList>(fontVariantList)) {
458
+ result = FontVariant::Default;
459
+ return;
460
+ }
461
+
462
+ result = FontVariant::Default;
463
+ for (const auto &cssVariant : std::get<CSSFontVariantList>(fontVariantList)) {
464
+ if (auto fv = fontVariantFromCSSFontVariant(cssVariant)) {
465
+ result = (FontVariant)((int)result | (int)*fv);
466
+ }
467
+ }
468
+ }
469
+
470
+ inline void parseUnprocessedFontVariant(const PropsParserContext &context, const RawValue &value, FontVariant &result)
471
+ {
472
+ if (value.hasType<std::string>()) {
473
+ parseUnprocessedFontVariantString((std::string)value, result);
474
+ } else {
475
+ parseProcessedFontVariant(context, value, result);
476
+ }
477
+ }
478
+
479
+ inline void fromRawValue(const PropsParserContext &context, const RawValue &value, FontVariant &result)
480
+ {
481
+ if (ReactNativeFeatureFlags::enableNativeCSSParsing()) {
482
+ parseUnprocessedFontVariant(context, value, result);
483
+ } else {
484
+ parseProcessedFontVariant(context, value, result);
485
+ }
486
+ }
487
+
387
488
  inline std::string toString(const FontVariant &fontVariant)
388
489
  {
389
490
  auto result = std::string{};