react-native-tvos 0.84.1-0 → 0.85.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 (873) hide show
  1. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +3 -3
  2. package/Libraries/Animated/Animated.d.ts +8 -1
  3. package/Libraries/Animated/AnimatedEvent.js +4 -4
  4. package/Libraries/Animated/AnimatedImplementation.js +2 -2
  5. package/Libraries/Animated/animations/Animation.js +3 -3
  6. package/Libraries/Animated/animations/DecayAnimation.js +4 -4
  7. package/Libraries/Animated/animations/SpringAnimation.js +5 -5
  8. package/Libraries/Animated/animations/TimingAnimation.js +5 -5
  9. package/Libraries/Animated/createAnimatedComponent.js +7 -7
  10. package/Libraries/Animated/nodes/AnimatedColor.js +2 -2
  11. package/Libraries/Animated/nodes/AnimatedInterpolation.js +12 -12
  12. package/Libraries/Animated/nodes/AnimatedNode.js +3 -3
  13. package/Libraries/Animated/nodes/AnimatedObject.js +3 -3
  14. package/Libraries/Animated/nodes/AnimatedProps.js +6 -6
  15. package/Libraries/Animated/nodes/AnimatedStyle.js +7 -7
  16. package/Libraries/Animated/nodes/AnimatedTransform.js +13 -13
  17. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  18. package/Libraries/Animated/nodes/AnimatedValueXY.js +1 -1
  19. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -1
  20. package/{jest/mocks/Vibration.js → Libraries/Animated/useAnimatedColor.d.ts} +5 -6
  21. package/Libraries/Animated/useAnimatedColor.js +25 -0
  22. package/{jest/mocks/Clipboard.js → Libraries/Animated/useAnimatedValueXY.d.ts} +5 -6
  23. package/Libraries/Animated/useAnimatedValueXY.js +26 -0
  24. package/Libraries/AppDelegate/RCTAppDelegate.mm +0 -8
  25. package/Libraries/AppDelegate/RCTDefaultReactNativeFactoryDelegate.mm +1 -3
  26. package/Libraries/AppDelegate/RCTReactNativeFactory.mm +1 -0
  27. package/Libraries/AppDelegate/RCTRootViewFactory.mm +2 -6
  28. package/Libraries/AppState/AppState.js +1 -1
  29. package/Libraries/BatchedBridge/MessageQueue.js +3 -3
  30. package/Libraries/BatchedBridge/NativeModules.js +12 -10
  31. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +30 -26
  32. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +2 -2
  33. package/Libraries/Components/Button.js +2 -2
  34. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidTypes.js +2 -2
  35. package/Libraries/Components/Keyboard/Keyboard.js +6 -6
  36. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -1
  37. package/Libraries/Components/LayoutConformance/LayoutConformance.js +1 -1
  38. package/Libraries/Components/LayoutConformance/LayoutConformanceNativeComponent.js +1 -1
  39. package/Libraries/Components/Pressable/Pressable.d.ts +5 -0
  40. package/Libraries/Components/Pressable/Pressable.js +3 -3
  41. package/Libraries/Components/Pressable/useAndroidRippleForView.js +4 -4
  42. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +1 -1
  43. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +3 -3
  44. package/Libraries/Components/RefreshControl/RefreshControl.js +5 -5
  45. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +10 -12
  46. package/Libraries/Components/ScrollView/ScrollView.d.ts +18 -1
  47. package/Libraries/Components/ScrollView/ScrollView.js +33 -10
  48. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +12 -18
  49. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +7 -4
  50. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
  51. package/Libraries/Components/StaticRenderer.js +1 -1
  52. package/Libraries/Components/StatusBar/StatusBar.js +8 -8
  53. package/Libraries/Components/Switch/Switch.js +3 -3
  54. package/Libraries/Components/TV/TVViewPropTypes.js +7 -0
  55. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +33 -48
  56. package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
  57. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +6 -11
  58. package/Libraries/Components/TextInput/TextInput.flow.js +21 -20
  59. package/Libraries/Components/TextInput/TextInput.js +8 -4
  60. package/Libraries/Components/Touchable/PooledClass.js +1 -1
  61. package/Libraries/Components/Touchable/Touchable.js +2 -2
  62. package/Libraries/Components/Touchable/TouchableBounce.js +4 -4
  63. package/Libraries/Components/Touchable/TouchableHighlight.js +6 -6
  64. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +7 -7
  65. package/Libraries/Components/Touchable/TouchableOpacity.js +3 -3
  66. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -1
  67. package/Libraries/Components/UnimplementedViews/UnimplementedView.js +1 -1
  68. package/Libraries/Components/View/ReactNativeStyleAttributes.js +68 -31
  69. package/Libraries/Components/View/View.js +6 -0
  70. package/Libraries/Components/View/ViewAccessibility.js +7 -7
  71. package/Libraries/Components/View/ViewPropTypes.js +15 -15
  72. package/Libraries/Core/Devtools/parseHermesStack.js +8 -8
  73. package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -2
  74. package/Libraries/Core/ExceptionsManager.js +2 -2
  75. package/Libraries/Core/ExtendedError.js +3 -3
  76. package/Libraries/Core/RawEventEmitter.js +1 -1
  77. package/Libraries/Core/ReactNativeVersion.js +2 -2
  78. package/Libraries/Core/Timers/JSTimers.js +3 -2
  79. package/Libraries/Core/setUpDeveloperTools.js +1 -1
  80. package/Libraries/Core/setUpErrorHandling.js +4 -2
  81. package/Libraries/Core/setUpReactDevTools.js +23 -6
  82. package/Libraries/Core/setUpSegmentFetcher.js +1 -1
  83. package/Libraries/Debugging/DebuggingOverlay.js +2 -2
  84. package/Libraries/EventEmitter/NativeEventEmitter.js +7 -9
  85. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +1 -1
  86. package/Libraries/FBLazyVector/FBLazyVector/FBLazyIterator.h +0 -6
  87. package/Libraries/Image/AssetSourceResolver.js +1 -1
  88. package/Libraries/Image/Image.android.js +172 -306
  89. package/Libraries/Image/ImageProps.js +9 -11
  90. package/Libraries/Image/ImageSource.js +2 -2
  91. package/Libraries/Image/ImageSourceUtils.js +8 -4
  92. package/Libraries/Image/ImageTypes.flow.js +2 -2
  93. package/Libraries/Image/ImageViewNativeComponent.js +7 -16
  94. package/Libraries/Image/RCTImageUtils.mm +37 -1
  95. package/Libraries/Image/nativeImageSource.js +1 -1
  96. package/Libraries/Interaction/InteractionManager.js +5 -4
  97. package/Libraries/Interaction/PanResponder.js +1 -1
  98. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
  99. package/Libraries/Linking/Linking.js +1 -1
  100. package/Libraries/Lists/FlatList.js +3 -3
  101. package/Libraries/Lists/SectionList.js +1 -1
  102. package/Libraries/Lists/SectionListModern.js +2 -2
  103. package/Libraries/LogBox/Data/LogBoxData.js +38 -24
  104. package/Libraries/LogBox/Data/LogBoxLog.js +43 -112
  105. package/Libraries/LogBox/Data/parseLogBoxLog.js +21 -117
  106. package/Libraries/LogBox/LogBox.js +42 -19
  107. package/Libraries/LogBox/LogBoxInspectorContainer.js +2 -2
  108. package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
  109. package/Libraries/LogBox/UI/LogBoxButton.js +28 -30
  110. package/Libraries/LogBox/UI/LogBoxInspector.js +2 -2
  111. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -9
  112. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +1 -1
  113. package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +1 -1
  114. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  115. package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +1 -1
  116. package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +10 -15
  117. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +25 -18
  118. package/Libraries/LogBox/UI/LogBoxInspectorSection.js +5 -7
  119. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +8 -10
  120. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +8 -6
  121. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +17 -29
  122. package/Libraries/LogBox/UI/LogBoxMessage.js +28 -37
  123. package/Libraries/LogBox/UI/LogBoxNotification.js +1 -1
  124. package/Libraries/Modal/Modal.js +3 -3
  125. package/Libraries/NativeComponent/BaseViewConfig.android.js +28 -52
  126. package/Libraries/NativeComponent/BaseViewConfig.ios.js +19 -21
  127. package/Libraries/NativeComponent/TVViewConfig.js +1 -0
  128. package/Libraries/Network/RCTHTTPRequestHandler.h +9 -0
  129. package/Libraries/Network/RCTHTTPRequestHandler.mm +15 -1
  130. package/Libraries/Network/RCTNetworking.android.js +1 -1
  131. package/Libraries/Network/RCTNetworking.ios.js +1 -1
  132. package/Libraries/Network/RCTNetworking.js.flow +1 -1
  133. package/Libraries/Network/RCTNetworkingEventDefinitions.flow.js +1 -1
  134. package/Libraries/Network/XMLHttpRequest.js +1 -1
  135. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -3
  136. package/Libraries/Pressability/Pressability.js +12 -5
  137. package/Libraries/Pressability/PressabilityDebug.js +1 -1
  138. package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +1 -1
  139. package/Libraries/Pressability/usePressability.js +3 -14
  140. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +2 -2
  141. package/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm +11 -21
  142. package/Libraries/ReactNative/AppContainer-dev.js +18 -1
  143. package/Libraries/ReactNative/AppContainer.js +1 -1
  144. package/Libraries/ReactNative/AppRegistry.flow.js +2 -2
  145. package/Libraries/ReactNative/AppRegistryImpl.js +2 -2
  146. package/Libraries/ReactNative/FabricUIManager.js +1 -1
  147. package/Libraries/ReactNative/RendererImplementation.js +4 -4
  148. package/Libraries/ReactNative/UIManagerProperties.js +1 -1
  149. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +3 -2
  150. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3 -2
  151. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3 -2
  152. package/Libraries/Renderer/shims/ReactFabric.js +1 -3
  153. package/Libraries/Renderer/shims/ReactFeatureFlags.js +1 -3
  154. package/Libraries/Renderer/shims/ReactNative.js +3 -2
  155. package/Libraries/Renderer/shims/ReactNativeTypes.js +1 -3
  156. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +1 -3
  157. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +1 -3
  158. package/Libraries/StyleSheet/PointPropType.js +1 -1
  159. package/Libraries/StyleSheet/Rect.js +1 -1
  160. package/Libraries/StyleSheet/StyleSheet.d.ts +0 -5
  161. package/Libraries/StyleSheet/StyleSheet.js +1 -1
  162. package/Libraries/StyleSheet/StyleSheet.js.flow +1 -1
  163. package/Libraries/StyleSheet/StyleSheetExports.js +16 -25
  164. package/Libraries/StyleSheet/StyleSheetExports.js.flow +2 -7
  165. package/Libraries/StyleSheet/StyleSheetTypes.js +33 -36
  166. package/Libraries/StyleSheet/private/_StyleSheetTypesOverrides.js +5 -5
  167. package/Libraries/StyleSheet/private/_TransformStyle.js +7 -7
  168. package/Libraries/StyleSheet/processBackgroundImage.js +7 -7
  169. package/Libraries/StyleSheet/processBackgroundPosition.js +4 -4
  170. package/Libraries/StyleSheet/processBackgroundRepeat.js +4 -4
  171. package/Libraries/StyleSheet/processBackgroundSize.js +4 -4
  172. package/Libraries/StyleSheet/processBoxShadow.js +44 -4
  173. package/Libraries/StyleSheet/processColorArray.js +2 -2
  174. package/Libraries/StyleSheet/processFilter.js +2 -2
  175. package/Libraries/Text/Text/RCTDynamicTypeRamp.mm +5 -4
  176. package/Libraries/Text/Text.js +295 -627
  177. package/Libraries/Text/TextInput/Multiline/RCTUITextView.mm +7 -1
  178. package/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm +14 -12
  179. package/Libraries/Text/TextInput/Singleline/RCTUITextField.mm +1 -1
  180. package/Libraries/Text/TextNativeComponent.js +14 -7
  181. package/Libraries/Text/TextProps.js +4 -4
  182. package/Libraries/Types/CodegenTypes.js +1 -1
  183. package/Libraries/Types/CoreEventTypes.js +21 -21
  184. package/Libraries/Types/ReactDevToolsTypes.js +2 -2
  185. package/Libraries/Utilities/Appearance.js +6 -1
  186. package/Libraries/Utilities/Dimensions.js +1 -1
  187. package/Libraries/Utilities/HMRClient.js +4 -4
  188. package/Libraries/Utilities/IPerformanceLogger.js +4 -4
  189. package/Libraries/Utilities/codegenNativeCommands.js +4 -4
  190. package/Libraries/Utilities/codegenNativeComponent.d.ts +2 -0
  191. package/Libraries/Utilities/codegenNativeComponent.js +2 -2
  192. package/Libraries/Utilities/logError.js +1 -1
  193. package/Libraries/Utilities/stringifySafe.js +3 -3
  194. package/Libraries/Utilities/useMergeRefs.js +2 -2
  195. package/Libraries/WebSocket/RCTReconnectingWebSocket.m +4 -1
  196. package/Libraries/vendor/core/ErrorUtils.js +4 -4
  197. package/Libraries/vendor/emitter/EventEmitter.js +16 -20
  198. package/README.md +52 -0
  199. package/React/Base/RCTBridge.mm +1 -1
  200. package/React/Base/RCTBundleURLProvider.mm +29 -8
  201. package/React/Base/RCTConvert.mm +3 -18
  202. package/React/Base/RCTDefines.h +7 -8
  203. package/React/Base/RCTDevSupportHttpHeaders.h +24 -0
  204. package/React/Base/RCTDevSupportHttpHeaders.m +65 -0
  205. package/React/Base/RCTJavaScriptLoader.h +1 -0
  206. package/React/Base/RCTJavaScriptLoader.mm +6 -2
  207. package/React/Base/RCTMultipartDataTask.h +9 -0
  208. package/React/Base/RCTMultipartDataTask.m +19 -1
  209. package/React/Base/RCTTVColorSupport.h +17 -0
  210. package/React/Base/RCTTVColorSupport.mm +23 -0
  211. package/React/Base/RCTUtils.mm +15 -6
  212. package/React/Base/RCTVersion.m +2 -2
  213. package/React/CoreModules/RCTActionSheetManager.mm +28 -3
  214. package/React/CoreModules/RCTClipboard.mm +5 -5
  215. package/React/CoreModules/RCTDevLoadingView.mm +1 -1
  216. package/React/CoreModules/RCTDevSettings.mm +8 -0
  217. package/React/CoreModules/RCTDeviceInfo.mm +4 -3
  218. package/React/CoreModules/RCTKeyboardObserver.mm +9 -2
  219. package/React/CoreModules/RCTLogBoxView.mm +4 -8
  220. package/React/CoreModules/RCTPerfMonitor.mm +5 -0
  221. package/React/CoreModules/RCTStatusBarManager.h +2 -0
  222. package/React/CoreModules/RCTWebSocketModule.h +6 -0
  223. package/React/CoreModules/RCTWebSocketModule.mm +14 -1
  224. package/React/DevSupport/RCTInspectorDevServerHelper.mm +33 -22
  225. package/React/DevSupport/RCTInspectorNetworkHelper.mm +2 -0
  226. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +66 -79
  227. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/Props.cpp +8 -8
  228. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/Props.h +1 -1
  229. package/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm +2 -2
  230. package/React/Fabric/Mounting/ComponentViews/InputAccessory/RCTInputAccessoryComponentView.mm +4 -0
  231. package/React/Fabric/Mounting/ComponentViews/Modal/RCTFabricModalHostViewController.mm +6 -0
  232. package/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.mm +8 -4
  233. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.h +2 -0
  234. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm +81 -0
  235. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTPullToRefreshViewComponentView.mm +16 -4
  236. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +145 -8
  237. package/React/Fabric/Mounting/ComponentViews/Switch/RCTSwitchComponentView.mm +10 -5
  238. package/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mm +13 -0
  239. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +9 -13
  240. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputUtils.h +2 -0
  241. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputUtils.mm +2 -0
  242. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.h +2 -0
  243. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +42 -4
  244. package/React/Fabric/Mounting/ComponentViews/VirtualView/RCTVirtualViewComponentView.h +2 -1
  245. package/React/Fabric/Mounting/ComponentViews/VirtualView/RCTVirtualViewComponentView.mm +92 -163
  246. package/React/Fabric/Mounting/RCTMountingManager.mm +8 -3
  247. package/React/Fabric/RCTScheduler.h +2 -0
  248. package/React/Fabric/RCTScheduler.mm +57 -0
  249. package/React/Fabric/RCTSurfacePointerHandler.mm +15 -9
  250. package/React/Fabric/RCTSurfacePresenter.mm +9 -0
  251. package/React/Fabric/RCTSurfaceTouchHandler.mm +4 -2
  252. package/React/Fabric/Surface/RCTFabricSurface.mm +4 -0
  253. package/React/Fabric/Utils/RCTLinearGradient.mm +4 -9
  254. package/React/Inspector/RCTCxxInspectorWebSocketAdapter.mm +5 -1
  255. package/React/Modules/RCTLayoutAnimation.m +10 -0
  256. package/React/Modules/RCTUIManager.mm +2 -4
  257. package/React/Profiler/RCTProfile.m +2 -0
  258. package/React/React-RCTFabric.podspec +3 -0
  259. package/React/Views/RCTView.m +6 -1
  260. package/React/Views/ScrollView/RCTScrollViewManager.m +1 -0
  261. package/React-Core-prebuilt.podspec +1 -1
  262. package/ReactAndroid/api/ReactAndroid.api +120 -298
  263. package/ReactAndroid/build.gradle.kts +9 -0
  264. package/ReactAndroid/gradle.properties +1 -1
  265. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +11 -101
  266. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.kt +2 -2
  267. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +10 -10
  268. package/ReactAndroid/src/main/java/com/facebook/react/animated/AnimationDriver.kt +1 -3
  269. package/ReactAndroid/src/main/java/com/facebook/react/animated/ColorAnimatedNode.kt +11 -11
  270. package/ReactAndroid/src/main/java/com/facebook/react/animated/DiffClampAnimatedNode.kt +11 -11
  271. package/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt +0 -26
  272. package/ReactAndroid/src/main/java/com/facebook/react/animated/InterpolationAnimatedNode.kt +12 -0
  273. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.kt +11 -1
  274. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.kt +5 -5
  275. package/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.kt +5 -5
  276. package/ReactAndroid/src/main/java/com/facebook/react/animated/SpringAnimation.kt +19 -19
  277. package/ReactAndroid/src/main/java/com/facebook/react/animated/TrackingAnimatedNode.kt +5 -1
  278. package/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicFromArray.kt +9 -4
  279. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaMethodWrapper.kt +15 -15
  280. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.kt +8 -6
  281. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.kt +3 -1
  282. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +10 -0
  283. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ScrollEndedListener.kt +70 -0
  284. package/ReactAndroid/src/main/java/com/facebook/react/common/assets/ReactFontManager.kt +4 -0
  285. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/ReadableMapBuffer.kt +4 -4
  286. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt +36 -34
  287. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BundleDownloader.kt +14 -9
  288. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/CxxInspectorPackagerConnection.kt +2 -8
  289. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DefaultDevLoadingViewImplementation.kt +3 -2
  290. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.kt +17 -13
  291. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt +5 -5
  292. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/PackagerStatusCheck.kt +10 -19
  293. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxContentView.kt +2 -2
  294. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/DevSupportHttpClient.kt +74 -0
  295. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt +2 -3
  296. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +110 -80
  297. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/InspectorNetworkHelper.kt +1 -12
  298. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevBundleDownloadListener.kt +1 -1
  299. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevLoadingViewManager.kt +1 -1
  300. package/ReactAndroid/src/main/java/com/facebook/react/fabric/AnimationBackendChoreographer.kt +87 -0
  301. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +36 -7
  302. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerBinding.kt +16 -2
  303. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerProviderImpl.kt +3 -0
  304. package/ReactAndroid/src/main/java/com/facebook/react/fabric/LongStreamingStats.kt +2 -2
  305. package/ReactAndroid/src/main/java/com/facebook/react/fabric/SurfaceHandlerBinding.kt +6 -6
  306. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/EventBeatManager.kt +2 -2
  307. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.kt +0 -29
  308. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt +2 -8
  309. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.kt +1258 -0
  310. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/FabricNameComponentMapping.kt +1 -0
  311. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/IntBufferBatchMountItem.kt +2 -2
  312. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/MountItemFactory.kt +1 -1
  313. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PreAllocateViewMountItem.kt +1 -1
  314. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +37 -55
  315. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +66 -96
  316. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +14 -20
  317. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +15 -21
  318. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +74 -107
  319. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +5 -1
  320. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +14 -20
  321. package/ReactAndroid/src/main/java/com/facebook/react/internal/interop/InteropEventEmitter.kt +1 -15
  322. package/ReactAndroid/src/main/java/com/facebook/react/internal/turbomodule/core/TurboModuleManager.kt +2 -2
  323. package/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.kt +4 -10
  324. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobModule.kt +1 -1
  325. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.kt +4 -2
  326. package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.kt +4 -1
  327. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +45 -74
  328. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +17 -13
  329. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/ProgressRequestBody.kt +2 -5
  330. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoHelpers.kt +1 -1
  331. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +2 -2
  332. package/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt +3 -4
  333. package/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/JSPackagerClient.kt +2 -1
  334. package/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.kt +2 -8
  335. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessAtomicRef.kt +2 -0
  336. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessCatalystInstance.kt +9 -3
  337. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.kt +8 -8
  338. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +12 -12
  339. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostInspectorTarget.kt +2 -2
  340. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt +13 -7
  341. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt +14 -14
  342. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt +14 -6
  343. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt +42 -28
  344. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +8 -49
  345. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt +11 -8
  346. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/GuardedFrameCallback.kt +17 -0
  347. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.java +13 -8
  348. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.kt +751 -0
  349. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +104 -781
  350. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.kt +18 -0
  351. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java +7 -9
  352. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java +7 -31
  353. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactZIndexedViewGroup.kt +11 -1
  354. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.kt +4 -0
  355. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.kt +1 -4
  356. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +103 -759
  357. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.kt +14 -38
  358. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +41 -170
  359. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +33 -962
  360. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupDrawingOrderHelper.kt +2 -0
  361. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/UIManagerType.kt +22 -0
  362. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.kt +15 -0
  363. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.kt +1 -6
  364. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTEventEmitter.kt +2 -9
  365. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.kt +12 -1
  366. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.kt +1 -16
  367. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.kt +0 -33
  368. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BackgroundImageLayer.kt +27 -0
  369. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BackgroundPosition.kt +20 -0
  370. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BackgroundRepeat.kt +27 -0
  371. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BackgroundSize.kt +50 -0
  372. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderColors.kt +33 -0
  373. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderInsets.kt +25 -1
  374. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderRadiusStyle.kt +46 -2
  375. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderStyle.kt +14 -0
  376. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BoxShadow.kt +23 -1
  377. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/ColorStop.kt +45 -7
  378. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/ComputedBorderRadius.kt +40 -2
  379. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/CornerRadii.kt +21 -1
  380. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/Gradient.kt +16 -0
  381. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/LinearGradient.kt +34 -0
  382. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/LogicalEdge.kt +33 -1
  383. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/OutlineStyle.kt +17 -0
  384. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/Overflow.kt +15 -0
  385. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/RadialGradient.kt +42 -0
  386. package/ReactAndroid/src/main/java/com/facebook/react/views/common/UiModeUtils.kt +20 -0
  387. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.kt +1 -2
  388. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt +9 -10
  389. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.kt +1 -1
  390. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ReactProgressBarViewManager.kt +6 -5
  391. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +132 -16
  392. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.kt +17 -0
  393. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollView.java +1647 -0
  394. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollViewManager.kt +466 -0
  395. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +104 -10
  396. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt +71 -9
  397. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.kt +17 -0
  398. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainer.kt +2 -35
  399. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainerStateClassic.kt +7 -30
  400. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainerStateExperimental.kt +20 -41
  401. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/generate-nested-scroll-view.js +270 -0
  402. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/ReactSwipeRefreshLayout.kt +1 -1
  403. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.kt +1 -1
  404. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchManager.kt +7 -7
  405. package/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayout.kt +2 -0
  406. package/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextView.kt +39 -17
  407. package/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextViewManager.kt +4 -3
  408. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.kt +4 -65
  409. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +86 -111
  410. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewAccessibilityDelegate.kt +6 -0
  411. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.kt +243 -20
  412. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt +1 -2
  413. package/ReactAndroid/src/main/java/com/facebook/react/views/text/SelectableTextViewManager.kt +29 -0
  414. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.kt +1 -2
  415. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt +54 -77
  416. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/DrawCommandSpan.kt +27 -0
  417. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/ReactClickableSpan.kt +1 -1
  418. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/ReactLinkSpan.kt +10 -3
  419. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.kt +2 -75
  420. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.kt +8 -0
  421. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextContentSizeWatcher.kt +1 -1
  422. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.kt +5 -38
  423. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputTextWatcher.kt +3 -2
  424. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextScrollWatcher.kt +1 -1
  425. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextSelectionWatcher.kt +1 -1
  426. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ImportantForInteractionHelper.kt +55 -0
  427. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +19 -60
  428. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +7 -4
  429. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/view/ReactVirtualView.kt +150 -296
  430. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/view/ReactVirtualViewManager.kt +11 -13
  431. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.kt +2 -2
  432. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIBase.kt +64 -0
  433. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIFinalizer.java +4 -4
  434. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDirection.kt +29 -0
  435. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.kt +1 -1
  436. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.kt +244 -0
  437. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +1 -1
  438. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaProps.kt +183 -0
  439. package/ReactAndroid/src/main/jni/CMakeLists.txt +6 -0
  440. package/ReactAndroid/src/main/jni/react/fabric/AndroidAnimationChoreographer.h +38 -0
  441. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +4 -4
  442. package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp +7 -0
  443. package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.h +2 -0
  444. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +50 -2
  445. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h +11 -0
  446. package/ReactAndroid/src/main/jni/react/fabric/JAnimationBackendChoreographer.cpp +23 -0
  447. package/ReactAndroid/src/main/jni/react/fabric/JAnimationBackendChoreographer.h +37 -0
  448. package/ReactAndroid/src/main/jni/react/fabric/StateWrapperImpl.h +2 -1
  449. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +89 -131
  450. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +19 -28
  451. package/ReactAndroid/src/main/jni/react/jni/CMakeLists.txt +0 -1
  452. package/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.cpp +1 -1
  453. package/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp +0 -7
  454. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +24 -60
  455. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +12 -28
  456. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp +13 -6
  457. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.h +2 -1
  458. package/{ReactCommon/react/renderer/components/text/ParagraphComponentDescriptor.cpp → ReactAndroid/src/main/jni/react/uimanager/StateWrapper.h} +7 -2
  459. package/ReactAndroid/src/main/res/views/uimanager/values/ids.xml +3 -0
  460. package/ReactAndroid/src/main/res/views/uimanager/values-ne/strings.xml +2 -0
  461. package/ReactApple/RCTAnimatedModuleProvider/RCTAnimatedModuleProvider.mm +8 -1
  462. package/ReactApple/RCTSwiftUI/RCTSwiftUI.podspec +1 -1
  463. package/ReactApple/RCTSwiftUIWrapper/RCTSwiftUIWrapper.podspec +1 -2
  464. package/ReactCommon/React-Fabric.podspec +5 -6
  465. package/ReactCommon/React-FabricComponents.podspec +6 -8
  466. package/ReactCommon/cxxreact/ReactNativeVersion.h +8 -6
  467. package/ReactCommon/hermes/executor/HermesExecutorFactory.cpp +1 -1
  468. package/ReactCommon/hermes/inspector-modern/chrome/HermesRuntimeTargetDelegate.cpp +25 -16
  469. package/ReactCommon/hermes/inspector-modern/chrome/HermesRuntimeTargetDelegate.h +1 -1
  470. package/ReactCommon/jsinspector-modern/HostAgent.cpp +10 -30
  471. package/ReactCommon/jsinspector-modern/HostAgent.h +4 -11
  472. package/ReactCommon/jsinspector-modern/HostTarget.cpp +33 -33
  473. package/ReactCommon/jsinspector-modern/HostTarget.h +23 -24
  474. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp +1 -2
  475. package/ReactCommon/jsinspector-modern/HostTargetTracing.h +89 -0
  476. package/ReactCommon/jsinspector-modern/InspectorInterfaces.cpp +4 -9
  477. package/ReactCommon/jsinspector-modern/InspectorInterfaces.h +0 -1
  478. package/ReactCommon/jsinspector-modern/InspectorPackagerConnection.cpp +164 -54
  479. package/ReactCommon/jsinspector-modern/InspectorPackagerConnectionImpl.h +39 -4
  480. package/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp +12 -3
  481. package/ReactCommon/jsinspector-modern/NetworkIOAgent.h +13 -0
  482. package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +6 -0
  483. package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +34 -18
  484. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +19 -0
  485. package/ReactCommon/jsinspector-modern/RuntimeTargetDebuggerSessionObserver.cpp +6 -95
  486. package/ReactCommon/jsinspector-modern/RuntimeTargetGlobalStateObserver.cpp +122 -0
  487. package/ReactCommon/jsinspector-modern/RuntimeTargetGlobalStateObserver.h +42 -0
  488. package/ReactCommon/jsinspector-modern/RuntimeTargetTracingStateObserver.cpp +27 -0
  489. package/ReactCommon/jsinspector-modern/RuntimeTargetTracingStateObserver.h +27 -0
  490. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +7 -45
  491. package/ReactCommon/jsinspector-modern/TracingAgent.h +0 -11
  492. package/ReactCommon/jsinspector-modern/UniqueMonostate.h +0 -4
  493. package/ReactCommon/jsinspector-modern/WeakList.h +60 -1
  494. package/ReactCommon/jsinspector-modern/network/NetworkHandler.cpp +25 -21
  495. package/ReactCommon/jsinspector-modern/network/NetworkHandler.h +21 -15
  496. package/ReactCommon/jsinspector-modern/tests/GmockHelpers.h +1 -1
  497. package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +3 -3
  498. package/ReactCommon/jsinspector-modern/tests/InspectorPackagerConnectionMultiSessionTest.cpp +692 -0
  499. package/ReactCommon/jsinspector-modern/tests/InspectorPackagerConnectionTest.cpp +10 -123
  500. package/ReactCommon/jsinspector-modern/tests/InspectorPackagerConnectionTest.h +140 -0
  501. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +158 -6
  502. package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +34 -0
  503. package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +223 -4
  504. package/ReactCommon/jsinspector-modern/tests/WeakListTest.cpp +31 -1
  505. package/ReactCommon/jsinspector-modern/tests/engines/JsiIntegrationTestHermesEngineAdapter.cpp +1 -1
  506. package/ReactCommon/jsinspector-modern/tracing/FrameTimingSequence.h +6 -9
  507. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.cpp +4 -6
  508. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.cpp +6 -17
  509. package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.h +4 -5
  510. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +27 -39
  511. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +32 -47
  512. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +153 -207
  513. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +18 -24
  514. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +26 -38
  515. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +56 -83
  516. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +9 -1
  517. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +9 -12
  518. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +3 -1
  519. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  520. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +10 -4
  521. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
  522. package/ReactCommon/react/nativemodule/fantomtestspecificmethods/NativeFantomTestSpecificMethods.cpp +32 -0
  523. package/ReactCommon/react/nativemodule/fantomtestspecificmethods/NativeFantomTestSpecificMethods.h +2 -0
  524. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +32 -47
  525. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +14 -20
  526. package/ReactCommon/react/renderer/animated/AnimatedModule.h +1 -1
  527. package/ReactCommon/react/renderer/animated/CMakeLists.txt +0 -1
  528. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +108 -151
  529. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +16 -11
  530. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp +80 -86
  531. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.h +0 -1
  532. package/ReactCommon/react/renderer/animated/event_drivers/EventAnimationDriver.h +0 -1
  533. package/ReactCommon/react/renderer/animated/internal/AnimatedMountingOverrideDelegate.h +0 -2
  534. package/ReactCommon/react/renderer/animated/internal/NativeAnimatedAllowlist.h +2 -2
  535. package/ReactCommon/react/renderer/animated/nodes/PropsAnimatedNode.cpp +32 -4
  536. package/ReactCommon/react/renderer/animated/nodes/PropsAnimatedNode.h +6 -0
  537. package/ReactCommon/react/renderer/animationbackend/AnimatedPropSerializer.cpp +14 -21
  538. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.cpp +3 -1
  539. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +6 -3
  540. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +125 -63
  541. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.h +33 -33
  542. package/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.cpp +18 -8
  543. package/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.h +1 -1
  544. package/ReactCommon/react/renderer/animationbackend/AnimationChoreographer.h +39 -0
  545. package/ReactCommon/react/renderer/animationbackend/CMakeLists.txt +0 -1
  546. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.cpp +1 -2
  547. package/ReactCommon/react/renderer/attributedstring/AttributedString.h +0 -1
  548. package/ReactCommon/react/renderer/attributedstring/AttributedStringBox.cpp +0 -6
  549. package/ReactCommon/react/renderer/attributedstring/AttributedStringBox.h +0 -1
  550. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.cpp +0 -4
  551. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.h +0 -1
  552. package/ReactCommon/react/renderer/attributedstring/conversions.h +60 -0
  553. package/ReactCommon/react/renderer/componentregistry/componentNameByReactViewName.cpp +3 -5
  554. package/ReactCommon/react/renderer/components/image/ImageProps.h +1 -1
  555. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/{LegacyViewManagerInteropComponentDescriptor.mm → platform/ios/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm} +1 -1
  556. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/{LegacyViewManagerInteropState.mm → platform/ios/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropState.mm} +1 -1
  557. package/ReactCommon/react/renderer/components/root/RootShadowNode.cpp +1 -1
  558. package/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.cpp +20 -0
  559. package/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.h +2 -0
  560. package/ReactCommon/react/renderer/components/scrollview/ScrollViewState.h +1 -1
  561. package/ReactCommon/react/renderer/components/scrollview/conversions.h +6 -0
  562. package/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.cpp +18 -1
  563. package/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.h +2 -0
  564. package/ReactCommon/react/renderer/components/scrollview/primitives.h +2 -11
  565. package/ReactCommon/react/renderer/components/scrollview/tests/ScrollViewTest.cpp +83 -3
  566. package/ReactCommon/react/renderer/components/text/BaseParagraphComponentDescriptor.h +49 -0
  567. package/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +14 -14
  568. package/ReactCommon/react/renderer/components/text/ParagraphComponentDescriptor.h +3 -28
  569. package/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp +10 -10
  570. package/ReactCommon/react/renderer/components/text/ParagraphShadowNode.h +4 -4
  571. package/ReactCommon/react/renderer/components/text/SelectableParagraphComponentDescriptor.h +24 -0
  572. package/ReactCommon/react/renderer/components/text/SelectableParagraphShadowNode.h +32 -0
  573. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/HostPlatformParagraphProps.cpp +1 -1
  574. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/ParagraphState.cpp +1 -1
  575. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/ParagraphState.h +2 -2
  576. package/ReactCommon/react/renderer/components/textinput/BaseTextInputShadowNode.h +13 -1
  577. package/ReactCommon/react/renderer/components/textinput/TextInputEventEmitter.cpp +2 -1
  578. package/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +2 -21
  579. package/ReactCommon/react/renderer/components/view/BackgroundImagePropsConversions.cpp +15 -24
  580. package/ReactCommon/react/renderer/components/view/BaseTouch.h +7 -7
  581. package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +11 -1
  582. package/ReactCommon/react/renderer/components/view/BaseViewProps.h +4 -0
  583. package/ReactCommon/react/renderer/components/view/ConcreteViewShadowNode.h +0 -3
  584. package/ReactCommon/react/renderer/components/view/FilterPropsConversions.h +57 -53
  585. package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +1 -0
  586. package/ReactCommon/react/renderer/components/view/conversions.h +250 -2
  587. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +19 -63
  588. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.h +1 -0
  589. package/ReactCommon/react/renderer/components/view/primitives.h +3 -86
  590. package/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp +215 -0
  591. package/ReactCommon/react/renderer/components/view/tests/LayoutTest.cpp +1 -1
  592. package/ReactCommon/react/renderer/components/virtualview/VirtualViewComponentDescriptor.h +1 -1
  593. package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +1 -1
  594. package/ReactCommon/react/renderer/core/EventEmitter.cpp +2 -2
  595. package/ReactCommon/react/renderer/core/EventEmitter.h +8 -8
  596. package/ReactCommon/react/renderer/core/EventPipe.h +1 -1
  597. package/ReactCommon/react/renderer/core/EventTarget.cpp +3 -3
  598. package/ReactCommon/react/renderer/core/EventTarget.h +7 -7
  599. package/ReactCommon/react/renderer/core/LayoutConstraints.h +0 -5
  600. package/ReactCommon/react/renderer/core/LayoutContext.h +0 -5
  601. package/ReactCommon/react/renderer/core/LayoutMetrics.h +0 -2
  602. package/ReactCommon/react/renderer/core/RawPropsKey.cpp +11 -21
  603. package/ReactCommon/react/renderer/core/RawPropsKey.h +0 -1
  604. package/ReactCommon/react/renderer/core/RawPropsKeyMap.cpp +4 -1
  605. package/ReactCommon/react/renderer/core/RawPropsParser.cpp +1 -7
  606. package/ReactCommon/react/renderer/core/RawPropsParser.h +2 -6
  607. package/ReactCommon/react/renderer/core/RawValue.h +1 -2
  608. package/ReactCommon/react/renderer/core/ShadowNode.cpp +33 -31
  609. package/ReactCommon/react/renderer/core/ShadowNode.h +19 -29
  610. package/ReactCommon/react/renderer/core/ShadowNodeFamily.cpp +6 -6
  611. package/ReactCommon/react/renderer/core/ShadowNodeFamily.h +14 -14
  612. package/ReactCommon/react/renderer/core/ShadowNodeFragment.cpp +4 -2
  613. package/ReactCommon/react/renderer/core/ShadowNodeFragment.h +2 -2
  614. package/ReactCommon/react/renderer/core/tests/ShadowNodeTest.cpp +57 -2
  615. package/ReactCommon/react/renderer/css/CSSBackgroundImage.h +112 -140
  616. package/ReactCommon/react/renderer/css/CSSColor.h +7 -8
  617. package/ReactCommon/react/renderer/css/CSSColorFunction.h +38 -39
  618. package/ReactCommon/react/renderer/css/CSSCompoundDataType.h +23 -17
  619. package/ReactCommon/react/renderer/css/CSSDataType.h +15 -10
  620. package/ReactCommon/react/renderer/css/CSSFilter.h +12 -17
  621. package/ReactCommon/react/renderer/css/CSSKeyword.h +8 -0
  622. package/ReactCommon/react/renderer/css/CSSList.h +11 -11
  623. package/ReactCommon/react/renderer/css/CSSRatio.h +4 -4
  624. package/ReactCommon/react/renderer/css/CSSShadow.h +7 -7
  625. package/ReactCommon/react/renderer/css/CSSSyntaxParser.h +10 -6
  626. package/ReactCommon/react/renderer/css/CSSTokenizer.h +2 -0
  627. package/ReactCommon/react/renderer/css/CSSTransform.h +20 -20
  628. package/ReactCommon/react/renderer/css/CSSTransformOrigin.h +4 -5
  629. package/ReactCommon/react/renderer/css/CSSValueParser.h +71 -67
  630. package/ReactCommon/react/renderer/css/tests/CSSValueParserTest.cpp +11 -10
  631. package/ReactCommon/react/renderer/graphics/BackgroundPosition.h +0 -1
  632. package/ReactCommon/react/renderer/graphics/BackgroundRepeat.h +0 -1
  633. package/ReactCommon/react/renderer/graphics/BackgroundSize.h +0 -1
  634. package/ReactCommon/react/renderer/graphics/Filter.h +3 -2
  635. package/ReactCommon/react/renderer/graphics/LinearGradient.cpp +9 -15
  636. package/ReactCommon/react/renderer/graphics/LinearGradient.h +7 -19
  637. package/ReactCommon/react/renderer/graphics/Point.h +0 -2
  638. package/ReactCommon/react/renderer/graphics/RadialGradient.h +4 -35
  639. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +1 -0
  640. package/ReactCommon/react/renderer/graphics/Rect.h +1 -9
  641. package/ReactCommon/react/renderer/graphics/RectangleCorners.h +1 -10
  642. package/ReactCommon/react/renderer/graphics/RectangleEdges.h +1 -10
  643. package/ReactCommon/react/renderer/graphics/Size.h +0 -5
  644. package/ReactCommon/react/renderer/graphics/Transform.cpp +0 -4
  645. package/ReactCommon/react/renderer/graphics/Transform.h +1 -13
  646. package/ReactCommon/react/renderer/graphics/TransformUtils.h +95 -0
  647. package/ReactCommon/react/renderer/graphics/ValueUnit.h +3 -11
  648. package/ReactCommon/react/renderer/graphics/fromRawValueShared.h +13 -1
  649. package/ReactCommon/react/renderer/imagemanager/ImageManager.h +0 -4
  650. package/ReactCommon/react/renderer/imagemanager/ImageResponseObserverCoordinator.cpp +11 -12
  651. package/ReactCommon/react/renderer/imagemanager/ImageResponseObserverCoordinator.h +4 -3
  652. package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageRequestParams.h +1 -36
  653. package/ReactCommon/react/renderer/imagemanager/platform/cxx/react/renderer/imagemanager/ImageRequestParams.h +1 -9
  654. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/ImageRequestParams.h +1 -9
  655. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm +1 -1
  656. package/ReactCommon/react/renderer/imagemanager/primitives.h +0 -5
  657. package/ReactCommon/react/renderer/mapbuffer/MapBuffer.cpp +51 -30
  658. package/ReactCommon/react/renderer/mapbuffer/MapBuffer.h +2 -0
  659. package/ReactCommon/react/renderer/mounting/Differentiator.cpp +21 -38
  660. package/ReactCommon/react/renderer/mounting/ShadowTree.cpp +153 -18
  661. package/ReactCommon/react/renderer/mounting/ShadowTree.h +30 -6
  662. package/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h +11 -0
  663. package/ReactCommon/react/renderer/mounting/ShadowView.cpp +0 -4
  664. package/ReactCommon/react/renderer/mounting/ShadowView.h +0 -1
  665. package/ReactCommon/react/renderer/mounting/internal/DiffMap.h +170 -0
  666. package/ReactCommon/react/renderer/mounting/internal/ShadowViewNodePair.h +0 -5
  667. package/ReactCommon/react/renderer/mounting/internal/sliceChildShadowNodeViewPairs.h +3 -3
  668. package/ReactCommon/react/renderer/mounting/stubs/StubView.cpp +0 -4
  669. package/ReactCommon/react/renderer/mounting/stubs/StubView.h +0 -1
  670. package/ReactCommon/react/renderer/mounting/stubs/StubViewTree.cpp +0 -4
  671. package/ReactCommon/react/renderer/mounting/stubs/StubViewTree.h +0 -2
  672. package/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp +6 -0
  673. package/ReactCommon/react/renderer/mounting/updateMountedFlag.cpp +12 -4
  674. package/ReactCommon/react/renderer/observers/intersection/IntersectionObserver.cpp +2 -1
  675. package/ReactCommon/react/renderer/observers/intersection/IntersectionObserverState.cpp +0 -5
  676. package/ReactCommon/react/renderer/observers/intersection/IntersectionObserverState.h +0 -1
  677. package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +1 -1
  678. package/ReactCommon/react/renderer/scheduler/CMakeLists.txt +1 -0
  679. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +28 -1
  680. package/ReactCommon/react/renderer/scheduler/Scheduler.h +2 -2
  681. package/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +6 -0
  682. package/ReactCommon/react/renderer/scheduler/SchedulerToolbox.h +7 -0
  683. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp +2 -2
  684. package/ReactCommon/react/renderer/textlayoutmanager/TextLayoutManagerExtended.h +18 -18
  685. package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp +8 -7
  686. package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.h +5 -5
  687. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.h +3 -3
  688. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.mm +4 -3
  689. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.h +1 -1
  690. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mm +15 -5
  691. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextPrimitivesConversions.h +2 -2
  692. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/TextLayoutManager.mm +10 -1
  693. package/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.cpp +1 -1
  694. package/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.h +1 -3
  695. package/ReactCommon/react/renderer/uimanager/PointerHoverTracker.cpp +1 -1
  696. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +68 -38
  697. package/ReactCommon/react/renderer/uimanager/UIManager.h +17 -8
  698. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h +17 -5
  699. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +2 -2
  700. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.h +2 -2
  701. package/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +10 -0
  702. package/ReactCommon/react/renderer/uimanager/consistency/LazyShadowTreeRevisionConsistencyManager.cpp +19 -23
  703. package/ReactCommon/react/renderer/uimanager/consistency/LazyShadowTreeRevisionConsistencyManager.h +2 -3
  704. package/ReactCommon/react/renderer/uimanager/consistency/tests/LazyShadowTreeRevisionConsistencyManagerTest.cpp +13 -5
  705. package/ReactCommon/react/renderer/uimanager/primitives.h +16 -7
  706. package/ReactCommon/react/renderer/uimanager/tests/FindShadowNodeByTagTest.cpp +287 -0
  707. package/ReactCommon/react/runtime/TimerManager.cpp +16 -2
  708. package/ReactCommon/react/runtime/hermes/HermesInstance.cpp +11 -6
  709. package/ReactCommon/react/runtime/iostests/RCTHostTests.mm +11 -0
  710. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.h +17 -3
  711. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +8 -1
  712. package/ReactCommon/react/test_utils/shadowTreeGeneration.h +8 -5
  713. package/ReactCommon/react/utils/ContextContainer.h +0 -2
  714. package/ReactCommon/yoga/yoga/YGNode.cpp +14 -0
  715. package/ReactCommon/yoga/yoga/YGValue.h +0 -4
  716. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +7 -7
  717. package/ReactCommon/yoga/yoga/enums/YogaEnums.h +0 -1
  718. package/ReactCommon/yoga/yoga/node/LayoutResults.h +0 -3
  719. package/ReactCommon/yoga/yoga/numeric/FloatOptional.h +0 -9
  720. package/ReactCommon/yoga/yoga/style/Style.h +0 -4
  721. package/flow/bom.js.flow +18 -17
  722. package/flow/dom.js.flow +12 -5
  723. package/flow/global.js +1 -1
  724. package/gradle/libs.versions.toml +1 -1
  725. package/index.js +9 -0
  726. package/index.js.flow +8 -1
  727. package/jest-preset.js +14 -18
  728. package/package.json +17 -17
  729. package/scripts/cocoapods/rncore.rb +111 -2
  730. package/scripts/cocoapods/utils.rb +2 -0
  731. package/scripts/codegen/templates/Package.swift.template +7 -0
  732. package/scripts/react_native_pods.rb +13 -6
  733. package/scripts/replace-rncore-version.js +12 -3
  734. package/sdks/.hermesv1version +1 -1
  735. package/sdks/.hermesversion +1 -1
  736. package/sdks/hermes-engine/version.properties +2 -2
  737. package/src/private/animated/NativeAnimatedHelper.js +2 -2
  738. package/src/private/animated/createAnimatedPropsMemoHook.js +19 -19
  739. package/src/private/components/virtualview/VirtualView.js +14 -21
  740. package/src/private/components/virtualview/VirtualViewExperimentalNativeComponent.js +11 -10
  741. package/src/private/components/virtualview/VirtualViewNativeComponent.js +4 -4
  742. package/src/private/devsupport/devmenu/elementinspector/BorderBox.js +2 -2
  743. package/src/private/devsupport/devmenu/elementinspector/BoxInspector.js +3 -3
  744. package/src/private/devsupport/devmenu/elementinspector/ElementBox.js +4 -4
  745. package/src/private/devsupport/devmenu/elementinspector/ElementProperties.js +1 -1
  746. package/src/private/devsupport/devmenu/elementinspector/Inspector.js +39 -17
  747. package/src/private/devsupport/devmenu/elementinspector/InspectorOverlay.js +15 -3
  748. package/src/private/devsupport/devmenu/elementinspector/InspectorPanel.js +2 -2
  749. package/src/private/devsupport/devmenu/elementinspector/ReactDevToolsOverlay.js +2 -8
  750. package/src/private/devsupport/devmenu/elementinspector/StyleInspector.js +1 -1
  751. package/src/private/devsupport/devmenu/elementinspector/resolveBoxStyle.js +1 -1
  752. package/src/private/devsupport/devmenu/elementinspector/useExternalInspection.js +102 -0
  753. package/src/private/devsupport/rndevtools/FuseboxSessionObserver.js +12 -25
  754. package/src/private/devsupport/rndevtools/GlobalStateObserver.js +56 -0
  755. package/src/private/devsupport/rndevtools/TracingStateObserver.js +28 -0
  756. package/src/private/featureflags/ReactNativeFeatureFlags.js +49 -82
  757. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +2 -2
  758. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +9 -12
  759. package/src/private/specs_DEPRECATED/components/ActivityIndicatorViewNativeComponent.js +1 -1
  760. package/src/private/specs_DEPRECATED/components/AndroidDrawerLayoutNativeComponent.js +3 -3
  761. package/src/private/specs_DEPRECATED/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -1
  762. package/src/private/specs_DEPRECATED/components/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
  763. package/src/private/specs_DEPRECATED/components/AndroidSwitchNativeComponent.js +2 -2
  764. package/src/private/specs_DEPRECATED/components/DebuggingOverlayNativeComponent.js +3 -3
  765. package/src/private/specs_DEPRECATED/components/ProgressBarAndroidNativeComponent.js +1 -1
  766. package/src/private/specs_DEPRECATED/components/PullToRefreshViewNativeComponent.js +1 -1
  767. package/src/private/specs_DEPRECATED/components/RCTInputAccessoryViewNativeComponent.js +1 -1
  768. package/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js +3 -3
  769. package/src/private/specs_DEPRECATED/components/RCTSafeAreaViewNativeComponent.js +1 -1
  770. package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +2 -2
  771. package/src/private/specs_DEPRECATED/components/UnimplementedNativeViewNativeComponent.js +1 -1
  772. package/src/private/specs_DEPRECATED/modules/NativeImageLoaderIOS.js +1 -1
  773. package/src/private/styles/composeStyles.js +1 -1
  774. package/src/private/utilities/toError.js +27 -0
  775. package/src/private/utilities/toExtendedError.js +30 -0
  776. package/src/private/webapis/dom/events/Event.js +1 -1
  777. package/src/private/webapis/dom/events/EventHandlerAttributes.js +2 -2
  778. package/src/private/webapis/dom/events/EventTarget.js +3 -3
  779. package/src/private/webapis/dom/events/internals/EventInternals.js +2 -2
  780. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +1 -1
  781. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +2 -2
  782. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +14 -14
  783. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +2 -2
  784. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js.flow +1 -1
  785. package/src/private/webapis/dom/oldstylecollections/NodeList.js +2 -2
  786. package/src/private/webapis/dom/oldstylecollections/NodeList.js.flow +1 -1
  787. package/src/private/webapis/geometry/DOMRectList.js +2 -2
  788. package/src/private/webapis/geometry/DOMRectList.js.flow +1 -1
  789. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +8 -8
  790. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +6 -6
  791. package/src/private/webapis/mutationobserver/MutationObserver.js +2 -2
  792. package/src/private/webapis/mutationobserver/MutationRecord.js +2 -2
  793. package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +1 -1
  794. package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +3 -3
  795. package/src/private/webapis/performance/LongTasks.js +3 -3
  796. package/src/private/webapis/performance/Performance.js +4 -4
  797. package/src/private/webapis/performance/PerformanceEntry.js +1 -1
  798. package/src/private/webapis/performance/PerformanceObserver.js +2 -2
  799. package/src/private/webapis/performance/specs/NativePerformance.js +8 -8
  800. package/src/private/webapis/structuredClone/structuredClone.js +2 -2
  801. package/src/types/globals.d.ts +4 -4
  802. package/third-party-podspecs/RCT-Folly.podspec +1 -1
  803. package/third-party-podspecs/fmt.podspec +2 -2
  804. package/types/index.d.ts +2 -0
  805. package/types/public/ReactNativeTVTypes.d.ts +27 -2
  806. package/Libraries/Components/View/ReactNativeViewAttributes.js +0 -60
  807. package/Libraries/Image/TextInlineImageNativeComponent.js +0 -49
  808. package/React/Fabric/Mounting/ComponentViews/VirtualViewExperimental/RCTVirtualViewExperimentalComponentView.h +0 -25
  809. package/React/Fabric/Mounting/ComponentViews/VirtualViewExperimental/RCTVirtualViewExperimentalComponentView.mm +0 -321
  810. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +0 -620
  811. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +0 -1411
  812. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.java +0 -985
  813. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java +0 -403
  814. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventDispatcherImpl.kt +0 -336
  815. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/EventEmitterImpl.kt +0 -135
  816. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ProgressBarShadowNode.kt +0 -81
  817. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchShadowNode.kt +0 -72
  818. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.kt +0 -677
  819. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.kt +0 -218
  820. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.kt +0 -369
  821. package/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageShadowNode.kt +0 -156
  822. package/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageSpan.kt +0 -174
  823. package/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageViewManager.kt +0 -54
  824. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/ReactTextInlineImageShadowNode.kt +0 -30
  825. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/TextInlineImageSpan.kt +0 -58
  826. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.kt +0 -228
  827. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimental.kt +0 -305
  828. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/viewexperimental/ReactVirtualViewExperimentalManager.kt +0 -110
  829. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIBase.java +0 -62
  830. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDirection.java +0 -35
  831. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java +0 -279
  832. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaProps.java +0 -197
  833. package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp +0 -410
  834. package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h +0 -113
  835. package/ReactCommon/react/renderer/components/virtualviewexperimental/VirtualViewExperimentalComponentDescriptor.h +0 -19
  836. package/ReactCommon/react/renderer/components/virtualviewexperimental/VirtualViewExperimentalShadowNode.h +0 -38
  837. package/jest/MockNativeMethods.js +0 -27
  838. package/jest/RefreshControlMock.js +0 -32
  839. package/jest/assetFileTransformer.js +0 -33
  840. package/jest/local-setup.js +0 -29
  841. package/jest/mock.js +0 -39
  842. package/jest/mockComponent.js +0 -104
  843. package/jest/mockNativeComponent.js +0 -52
  844. package/jest/mocks/AccessibilityInfo.js +0 -62
  845. package/jest/mocks/ActivityIndicator.js +0 -23
  846. package/jest/mocks/AppState.js +0 -19
  847. package/jest/mocks/Image.js +0 -23
  848. package/jest/mocks/InitializeCore.js +0 -9
  849. package/jest/mocks/Linking.js +0 -28
  850. package/jest/mocks/Modal.js +0 -33
  851. package/jest/mocks/NativeComponentRegistry.js +0 -30
  852. package/jest/mocks/NativeModules.js +0 -239
  853. package/jest/mocks/RefreshControl.js +0 -31
  854. package/jest/mocks/RendererProxy.js +0 -45
  855. package/jest/mocks/ScrollView.js +0 -58
  856. package/jest/mocks/Text.js +0 -27
  857. package/jest/mocks/TextInput.js +0 -32
  858. package/jest/mocks/UIManager.js +0 -60
  859. package/jest/mocks/View.js +0 -27
  860. package/jest/mocks/ViewNativeComponent.js +0 -23
  861. package/jest/mocks/requireNativeComponent.js +0 -22
  862. package/jest/mocks/useColorScheme.js +0 -18
  863. package/jest/react-native-env.js +0 -17
  864. package/jest/renderer.js +0 -40
  865. package/jest/resolver.js +0 -32
  866. package/jest/setup.js +0 -140
  867. /package/React/Fabric/Mounting/ComponentViews/{VirtualViewExperimental → VirtualView}/RCTVirtualViewMode.h +0 -0
  868. /package/React/Fabric/Mounting/ComponentViews/{VirtualViewExperimental → VirtualView}/RCTVirtualViewRenderState.h +0 -0
  869. /package/ReactAndroid/src/main/java/com/facebook/react/fabric/internal/interop/{InteropUiBlockListener.kt → InteropUIBlockListener.kt} +0 -0
  870. /package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/{LegacyViewManagerInteropComponentDescriptor.h → platform/ios/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.h} +0 -0
  871. /package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/{RCTLegacyViewManagerInteropCoordinator.h → platform/ios/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h} +0 -0
  872. /package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/{RCTLegacyViewManagerInteropCoordinator.mm → platform/ios/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm} +0 -0
  873. /package/ReactCommon/react/renderer/components/scrollview/{RCTComponentViewHelpers.h → platform/ios/react/renderer/components/scrollview/RCTComponentViewHelpers.h} +0 -0
@@ -0,0 +1,1258 @@
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
+ package com.facebook.react.fabric.mounting
9
+
10
+ import android.annotation.SuppressLint
11
+ import android.view.View
12
+ import android.view.ViewGroup
13
+ import android.view.ViewParent
14
+ import androidx.annotation.AnyThread
15
+ import androidx.annotation.UiThread
16
+ import androidx.collection.SparseArrayCompat
17
+ import com.facebook.common.logging.FLog
18
+ import com.facebook.infer.annotation.ThreadConfined
19
+ import com.facebook.react.bridge.GuardedRunnable
20
+ import com.facebook.react.bridge.ReactNoCrashSoftException
21
+ import com.facebook.react.bridge.ReactSoftExceptionLogger
22
+ import com.facebook.react.bridge.ReadableArray
23
+ import com.facebook.react.bridge.ReadableMap
24
+ import com.facebook.react.bridge.ReadableType
25
+ import com.facebook.react.bridge.RetryableMountingLayerException
26
+ import com.facebook.react.bridge.SoftAssertions
27
+ import com.facebook.react.bridge.UiThreadUtil
28
+ import com.facebook.react.bridge.WritableMap
29
+ import com.facebook.react.bridge.WritableNativeArray
30
+ import com.facebook.react.bridge.WritableNativeMap
31
+ import com.facebook.react.common.annotations.UnstableReactNativeAPI
32
+ import com.facebook.react.common.build.ReactBuildConfig
33
+ import com.facebook.react.common.mapbuffer.MapBuffer
34
+ import com.facebook.react.fabric.events.EventEmitterWrapper
35
+ import com.facebook.react.fabric.mounting.MountingManager.MountItemExecutor
36
+ import com.facebook.react.fabric.mounting.mountitems.MountItem
37
+ import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
38
+ import com.facebook.react.touch.JSResponderHandler
39
+ import com.facebook.react.uimanager.IViewGroupManager
40
+ import com.facebook.react.uimanager.IllegalViewOperationException
41
+ import com.facebook.react.uimanager.ReactOverflowViewWithInset
42
+ import com.facebook.react.uimanager.ReactRoot
43
+ import com.facebook.react.uimanager.ReactStylesDiffMap
44
+ import com.facebook.react.uimanager.RootView
45
+ import com.facebook.react.uimanager.RootViewManager
46
+ import com.facebook.react.uimanager.StateWrapper
47
+ import com.facebook.react.uimanager.ThemedReactContext
48
+ import com.facebook.react.uimanager.ViewManager
49
+ import com.facebook.react.uimanager.ViewManagerRegistry
50
+ import com.facebook.react.uimanager.events.EventCategoryDef
51
+ import com.facebook.systrace.Systrace
52
+ import java.util.ArrayDeque
53
+ import java.util.LinkedList
54
+ import java.util.Queue
55
+ import java.util.concurrent.ConcurrentHashMap
56
+ import kotlin.concurrent.Volatile
57
+
58
+ /** Returns true if the collection contains [key]. */
59
+ private operator fun <T> SparseArrayCompat<T>.contains(key: Int): Boolean = containsKey(key)
60
+
61
+ /** Allows the use of the index operator for storing values in the collection. */
62
+ private operator fun <T> SparseArrayCompat<T>.set(key: Int, value: T): Unit = put(key, value)
63
+
64
+ public class SurfaceMountingManager
65
+ internal constructor(
66
+ public val surfaceId: Int,
67
+ jsResponderHandler: JSResponderHandler,
68
+ viewManagerRegistry: ViewManagerRegistry,
69
+ rootViewManager: RootViewManager,
70
+ mountItemExecutor: MountItemExecutor,
71
+ reactContext: ThemedReactContext,
72
+ ) {
73
+ @Volatile
74
+ public var isStopped: Boolean = false
75
+ private set
76
+
77
+ @Volatile
78
+ public var isRootViewAttached: Boolean = false
79
+ private set
80
+
81
+ public var context: ThemedReactContext? = reactContext
82
+ private set
83
+
84
+ private val tagToViewState: ConcurrentHashMap<Int, ViewState> = ConcurrentHashMap() // any thread
85
+ private val onViewAttachMountItems: Queue<MountItem> = ArrayDeque()
86
+
87
+ // These are all non-null, until StopSurface is called
88
+ private var jsResponderHandler: JSResponderHandler? = jsResponderHandler
89
+ private val viewManagerRegistry: ViewManagerRegistry? = viewManagerRegistry
90
+ @Suppress("UNCHECKED_CAST")
91
+ private var rootViewManager: ViewManager<View, *>? = (rootViewManager as ViewManager<View, *>)
92
+ private var mountItemExecutor: MountItemExecutor? = mountItemExecutor
93
+
94
+ @ThreadConfined(ThreadConfined.UI)
95
+ private val erroneouslyReaddedReactTags: MutableSet<Int> = HashSet()
96
+
97
+ // This set is used to keep track of views that are currently being interacted with (i.e.
98
+ // views that saw a ACTION_DOWN but not a ACTION_UP event yet). This is used to prevent
99
+ // views from being removed while they are being interacted with as their event emitter will
100
+ // also be removed, and `Pressables` will look "stuck".
101
+ @ThreadConfined(ThreadConfined.UI) private val viewsWithActiveTouches: MutableSet<Int> = HashSet()
102
+
103
+ // This set contains the views that are scheduled to be removed after their touch finishes.
104
+ @ThreadConfined(ThreadConfined.UI)
105
+ private val viewsToDeleteAfterTouchFinishes: MutableSet<Int> = HashSet()
106
+
107
+ // This is null *until* StopSurface is called.
108
+ private var tagSetForStoppedSurface: SparseArrayCompat<Any>? = null
109
+
110
+ // This is to make sure direct manipulation result will not be overridden by React update.
111
+ @ThreadConfined(ThreadConfined.UI)
112
+ private val tagToSynchronousMountProps = SparseArrayCompat<MutableMap<String, Any>>()
113
+
114
+ @AnyThread
115
+ public fun attachRootView(rootView: View, themedReactContext: ThemedReactContext): Unit {
116
+ this.context = themedReactContext
117
+
118
+ if (isStopped) {
119
+ ReactSoftExceptionLogger.logSoftException(
120
+ TAG,
121
+ IllegalStateException("Trying to attach root view to a stopped surface"),
122
+ )
123
+ return
124
+ }
125
+
126
+ tagToViewState[surfaceId] = ViewState(surfaceId, rootView, rootViewManager, true)
127
+
128
+ val runnable: Runnable =
129
+ object : GuardedRunnable(checkNotNull(context)) {
130
+ override fun runGuarded() {
131
+ // The CPU has ticked since `addRootView` was called, so the surface could technically
132
+ // have already stopped here.
133
+ if (isStopped) {
134
+ return
135
+ }
136
+
137
+ if (rootView.id == surfaceId) {
138
+ ReactSoftExceptionLogger.logSoftException(
139
+ TAG,
140
+ IllegalViewOperationException(
141
+ "Race condition in addRootView detected. Trying to set an id of [$surfaceId] on the RootView, but that id has already been set. "
142
+ ),
143
+ )
144
+ } else if (rootView.id != View.NO_ID) {
145
+ FLog.e(
146
+ TAG,
147
+ "Trying to add RootTag to RootView that already has a tag: existing tag: [${rootView.id}] new tag: [$surfaceId]",
148
+ )
149
+ // This behavior can not be guaranteed in hybrid apps that have a native android layer
150
+ // over which reactRootViews are added and the native views need to have ids on them
151
+ // in order to work. Hence this can cause unnecessary crashes at runtime for hybrid
152
+ // apps. So converting this to a soft exception such that pure react-native devs can
153
+ // still see the warning while hybrid apps continue to run without crashes
154
+ ReactSoftExceptionLogger.logSoftException(
155
+ TAG,
156
+ IllegalViewOperationException(
157
+ "Trying to add a root view with an explicit id already set. React Native uses the id field to track react tags and will overwrite this field. If that is fine, explicitly overwrite the id field to View.NO_ID before calling addRootView."
158
+ ),
159
+ )
160
+ }
161
+ rootView.id = surfaceId
162
+
163
+ if (rootView is ReactRoot) {
164
+ rootView.setRootViewTag(surfaceId)
165
+ }
166
+
167
+ executeMountItemsOnViewAttach()
168
+
169
+ // By doing this after `executeMountItemsOnViewAttach`, we ensure that any operations
170
+ // scheduled while processing this queue are also added to the queue, instead of being
171
+ // processed immediately through the queue in `MountItemDispatcher`.
172
+ isRootViewAttached = true
173
+ }
174
+ }
175
+
176
+ if (UiThreadUtil.isOnUiThread()) {
177
+ runnable.run()
178
+ } else {
179
+ UiThreadUtil.runOnUiThread(runnable)
180
+ }
181
+ }
182
+
183
+ public fun getViewExists(tag: Int): Boolean {
184
+ // If Surface stopped, check if tag *was* associated with this Surface, even though it's been
185
+ // deleted. This helps distinguish between scenarios where an invalid tag is referenced, vs
186
+ // race conditions where an imperative method is called on a tag during/just after StopSurface.
187
+ if (tagSetForStoppedSurface?.containsKey(tag) == true) {
188
+ return true
189
+ }
190
+ return tagToViewState.containsKey(tag)
191
+ }
192
+
193
+ @UiThread
194
+ @ThreadConfined(ThreadConfined.UI)
195
+ internal fun scheduleMountItemOnViewAttach(item: MountItem): Unit {
196
+ onViewAttachMountItems.add(item)
197
+ }
198
+
199
+ @UiThread
200
+ @ThreadConfined(ThreadConfined.UI)
201
+ private fun executeMountItemsOnViewAttach() {
202
+ checkNotNull(mountItemExecutor).executeItems(onViewAttachMountItems)
203
+ }
204
+
205
+ /**
206
+ * Stop surface and all operations within it. Garbage-collect Views (caller is responsible for
207
+ * removing RootView from View layer).
208
+ *
209
+ * Delete rootView from cache. Since RN does not control the RootView, in a sense, the fragment is
210
+ * responsible for actually removing the RootView from the hierarchy / tearing down the fragment.
211
+ *
212
+ * In the original version(s) of this function, we recursively went through all children of the
213
+ * View and dropped those Views as well; ad infinitum. This was before we had a
214
+ * SurfaceMountingManager, and all tags were in one global map. Doing this was particularly
215
+ * important in the case of StopSurface, where race conditions between threads meant you couldn't
216
+ * rely on DELETE instructions actually deleting all Views in the Surface.
217
+ *
218
+ * Now that we have SurfaceMountingManager, we can simply drop our local reference to the View.
219
+ * Since it will be removed from the View hierarchy entirely (outside of the scope of this class),
220
+ * garbage collection will take care of destroying it and all descendents.
221
+ */
222
+ @AnyThread
223
+ public fun stopSurface(): Unit {
224
+ FLog.e(TAG, "Stopping surface [$surfaceId]")
225
+ if (isStopped) {
226
+ return
227
+ }
228
+
229
+ // Prevent more views from being created, or the hierarchy from being manipulated at all. This
230
+ // causes further operations to noop.
231
+ isStopped = true
232
+
233
+ // Reset all StateWrapper objects
234
+ // Since this can happen on any thread, is it possible to race between StateWrapper destruction
235
+ // and some accesses from View classes in the UI thread?
236
+ for (viewState in tagToViewState.values) {
237
+ viewState.stateWrapper?.destroyState()
238
+ viewState.stateWrapper = null
239
+
240
+ viewState.eventEmitter?.destroy()
241
+ viewState.eventEmitter = null
242
+ }
243
+
244
+ val runnable = Runnable {
245
+ if (ReactNativeFeatureFlags.enableViewRecycling()) {
246
+ viewManagerRegistry?.onSurfaceStopped(surfaceId)
247
+ }
248
+ val tagSetForStoppedSurface =
249
+ SparseArrayCompat<Any>().also { this.tagSetForStoppedSurface = it }
250
+ for ((key, value) in tagToViewState) {
251
+ // Using this as a placeholder value in the map. We're using SparseArrayCompat
252
+ // since it can efficiently represent the list of pending tags
253
+ tagSetForStoppedSurface[key] = this
254
+
255
+ // We must call `onDropViewInstance` on all remaining Views
256
+ onViewStateDeleted(value)
257
+ }
258
+
259
+ // Evict all views from cache and memory
260
+ jsResponderHandler = null
261
+ rootViewManager = null
262
+ mountItemExecutor = null
263
+ context = null
264
+ tagToViewState.clear()
265
+ onViewAttachMountItems.clear()
266
+ tagToSynchronousMountProps.clear()
267
+ FLog.e(TAG, "Surface [$surfaceId] was stopped on SurfaceMountingManager.")
268
+ }
269
+
270
+ if (UiThreadUtil.isOnUiThread()) {
271
+ runnable.run()
272
+ } else {
273
+ UiThreadUtil.runOnUiThread(runnable)
274
+ }
275
+ }
276
+
277
+ @UiThread
278
+ public fun addViewAt(parentTag: Int, tag: Int, index: Int): Unit {
279
+ UiThreadUtil.assertOnUiThread()
280
+ if (isStopped) {
281
+ return
282
+ }
283
+
284
+ val parentViewState = getViewState(parentTag)
285
+ if (parentViewState.view !is ViewGroup) {
286
+ val message =
287
+ "Unable to add a view into a view that is not a ViewGroup. ParentTag: $parentTag - Tag: $tag - Index: $index"
288
+ FLog.e(TAG, message)
289
+ throw IllegalStateException(message)
290
+ }
291
+ val parentView = parentViewState.view as ViewGroup
292
+ val viewState = getViewState(tag)
293
+ val view = viewState.view
294
+ checkNotNull(view) { "Unable to find view for viewState $viewState and tag $tag" }
295
+
296
+ // Display children before inserting
297
+ if (SHOW_CHANGED_VIEW_HIERARCHIES) {
298
+ FLog.e(TAG, "addViewAt: [$tag] -> [$parentTag] idx: $index BEFORE")
299
+ logViewHierarchy(parentView, false)
300
+ }
301
+
302
+ val viewParent = view.parent
303
+ if (viewParent != null) {
304
+ val actualParentId = if (viewParent is ViewGroup) viewParent.id else View.NO_ID
305
+ ReactSoftExceptionLogger.logSoftException(
306
+ TAG,
307
+ IllegalStateException(
308
+ "addViewAt: cannot insert view [$tag] into parent [$parentTag]: View already has a parent: [$actualParentId] Parent: ${viewParent.javaClass.simpleName} View: ${view.javaClass.simpleName}"
309
+ ),
310
+ )
311
+
312
+ // We've hit an error case, and `addView` will crash below
313
+ // if we don't take evasive action (it is an error to add a View
314
+ // to the hierarchy if it already has a parent).
315
+ // We don't know /why/ this happens yet, but it does happen
316
+ // very infrequently in production.
317
+ // Thus, we do three things here:
318
+ // (1) We logged a SoftException above, so if there's a crash later
319
+ // on, we might have some hints about what caused it.
320
+ // (2) We remove the View from its parent.
321
+ // (3) In case the View was removed from the hierarchy with the
322
+ // RemoveDeleteTree instruction, and is now being readded - which
323
+ // should be impossible - we mark this as a "readded" View and
324
+ // thus prevent the RemoveDeleteTree worker from deleting this
325
+ // View in the future.
326
+ if (viewParent is ViewGroup) {
327
+ viewParent.removeView(view)
328
+ }
329
+ erroneouslyReaddedReactTags.add(tag)
330
+ }
331
+
332
+ try {
333
+ getViewGroupManager(parentViewState).addView(parentView, view, index)
334
+ } catch (e: IllegalStateException) {
335
+ // Wrap error with more context for debugging
336
+ throw IllegalStateException(
337
+ ("addViewAt: failed to insert view [$tag] into parent [$parentTag] at index $index"),
338
+ e,
339
+ )
340
+ } catch (e: IndexOutOfBoundsException) {
341
+ throw IllegalStateException(
342
+ ("addViewAt: failed to insert view [$tag] into parent [$parentTag] at index $index"),
343
+ e,
344
+ )
345
+ }
346
+
347
+ // Display children after inserting
348
+ if (SHOW_CHANGED_VIEW_HIERARCHIES) {
349
+ // Why are we calling `runOnUiThread`? We're already on the UI thread, right?!
350
+ // Yes - but if you get the children of the View here and display them, *it might show you
351
+ // the previous children*. Without getting too much into Android internals, basically if we
352
+ // wait a tick, everything is what we expect.
353
+ // tldr is that `parent.children == []; parent.addView(x); parent.children == []`
354
+ // and you need to wait a tick for `parent.children == [x]`.
355
+ UiThreadUtil.runOnUiThread {
356
+ FLog.e(TAG, "addViewAt: [$tag] -> [$parentTag] idx: $index AFTER")
357
+ logViewHierarchy(parentView, false)
358
+ }
359
+ }
360
+ }
361
+
362
+ @UiThread
363
+ public fun removeViewAt(tag: Int, parentTag: Int, index: Int): Unit {
364
+ if (isStopped) {
365
+ return
366
+ }
367
+
368
+ // This is "impossible". See comments above.
369
+ if (erroneouslyReaddedReactTags.contains(tag)) {
370
+ ReactSoftExceptionLogger.logSoftException(
371
+ TAG,
372
+ IllegalViewOperationException(
373
+ "removeViewAt tried to remove a React View that was actually reused. This indicates a bug in the Differ (specifically instruction ordering). [$tag]"
374
+ ),
375
+ )
376
+ return
377
+ }
378
+
379
+ UiThreadUtil.assertOnUiThread()
380
+ val parentViewState = getNullableViewState(parentTag)
381
+
382
+ // TODO: throw exception here?
383
+ if (parentViewState == null) {
384
+ ReactSoftExceptionLogger.logSoftException(
385
+ ReactSoftExceptionLogger.Categories.SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE,
386
+ IllegalStateException("Unable to find viewState for tag: [$parentTag] for removeViewAt"),
387
+ )
388
+ return
389
+ }
390
+
391
+ val parentView = parentViewState.view
392
+ if (parentView !is ViewGroup) {
393
+ val message =
394
+ "Unable to remove a view from a view that is not a ViewGroup. ParentTag: $parentTag - Tag: $tag - Index: $index"
395
+ FLog.e(TAG, message)
396
+ throw IllegalStateException(message)
397
+ }
398
+
399
+ if (SHOW_CHANGED_VIEW_HIERARCHIES) {
400
+ // Display children before deleting any
401
+ FLog.e(TAG, "removeViewAt: [$tag] -> [$parentTag] idx: $index BEFORE")
402
+ logViewHierarchy(parentView, false)
403
+ }
404
+
405
+ val viewGroupManager = getViewGroupManager(parentViewState)
406
+
407
+ // Verify that the view we're about to remove has the same tag we expect
408
+ val view = viewGroupManager.getChildAt(parentView, index)
409
+ val actualTag = view?.id ?: -1
410
+ var actualIndex = index
411
+ if (actualTag != tag) {
412
+ var tagActualIndex = -1
413
+ val parentChildrenCount = parentView.childCount
414
+ for (i in 0..<parentChildrenCount) {
415
+ if (parentView.getChildAt(i).id == tag) {
416
+ tagActualIndex = i
417
+ break
418
+ }
419
+ }
420
+
421
+ // TODO T74425739: previously, we did not do this check and `removeViewAt` would be executed
422
+ // below, sometimes crashing there. *However*, interestingly enough, `removeViewAt` would not
423
+ // complain if you removed views from an already-empty parent. This seems necessary currently
424
+ // for certain ViewManagers that remove their own children - like BottomSheet?
425
+ // This workaround seems not-great, but for now, we just return here for
426
+ // backwards-compatibility. Essentially, if a view has already been removed from the
427
+ // hierarchy, we treat it as a noop.
428
+ if (tagActualIndex == -1) {
429
+ FLog.e(
430
+ TAG,
431
+ "removeViewAt: [$tag] -> [$parentTag] @$index: view already removed from parent! Children in parent: $parentChildrenCount",
432
+ )
433
+ return
434
+ }
435
+
436
+ // Here we are guaranteed that the view is still in the View hierarchy, just
437
+ // at a different index. In debug mode we'll crash here; in production, we'll remove
438
+ // the child from the parent and move on.
439
+ // This is an issue that is safely recoverable 95% of the time. If this allows corruption
440
+ // of the view hierarchy and causes bugs or a crash after this point, there will be logs
441
+ // indicating that this happened.
442
+ // This is likely *only* necessary because of Fabric's LayoutAnimations implementation.
443
+ // If we can fix the bug there, or remove the need for LayoutAnimation index adjustment
444
+ // entirely, we can just throw this exception without regression user experience.
445
+ logViewHierarchy(parentView, true)
446
+ ReactSoftExceptionLogger.logSoftException(
447
+ TAG,
448
+ IllegalStateException(
449
+ "Tried to remove view [$tag] of parent [$parentTag] at index $index, but got view tag $actualTag - actual index of view: $tagActualIndex"
450
+ ),
451
+ )
452
+ actualIndex = tagActualIndex
453
+ }
454
+
455
+ try {
456
+ viewGroupManager.removeViewAt(parentView, actualIndex)
457
+ } catch (e: RuntimeException) {
458
+ // Note: `getChildCount` may not always be accurate!
459
+ // We don't currently have a good explanation other than, in situations where you
460
+ // would empirically expect to see childCount > 0, the childCount is reported as 0.
461
+ // This is likely due to a ViewManager overriding getChildCount or some other methods
462
+ // in a way that is strictly incorrect, but potentially only visible here.
463
+ // The failure mode is actually that in `removeViewAt`, a NullPointerException is
464
+ // thrown when we try to perform an operation on a View that doesn't exist, and
465
+ // is therefore null.
466
+ // We try to add some extra diagnostics here, but we always try to remove the View
467
+ // from the hierarchy first because detecting by looking at childCount will not work.
468
+ //
469
+ // Note that the lesson here is that `getChildCount` is not /required/ to adhere to
470
+ // any invariants. If you add 9 children to a parent, the `getChildCount` of the parent
471
+ // may not be equal to 9. This apparently causes no issues with Android and is common
472
+ // enough that we shouldn't try to change this invariant, without a lot of thought.
473
+ val childCount = viewGroupManager.getChildCount(parentView)
474
+
475
+ logViewHierarchy(parentView, true)
476
+
477
+ throw IllegalStateException(
478
+ "Cannot remove child at index $actualIndex from parent ViewGroup [${parentView.id}], only $childCount children in parent. Warning: childCount may be incorrect!",
479
+ e,
480
+ )
481
+ }
482
+
483
+ // Display children after deleting any
484
+ if (SHOW_CHANGED_VIEW_HIERARCHIES) {
485
+ UiThreadUtil.runOnUiThread {
486
+ FLog.e(TAG, ("removeViewAt: [$tag] -> [$parentTag] idx: $actualIndex AFTER"))
487
+ logViewHierarchy(parentView, false)
488
+ }
489
+ }
490
+ }
491
+
492
+ @UiThread
493
+ internal fun createView(
494
+ componentName: String,
495
+ reactTag: Int,
496
+ props: ReadableMap,
497
+ stateWrapper: StateWrapper?,
498
+ eventEmitterWrapper: EventEmitterWrapper?,
499
+ isLayoutable: Boolean,
500
+ ): Unit {
501
+ if (isStopped) {
502
+ return
503
+ }
504
+ // We treat this as a perf problem and not a logical error. View Preallocation or unexpected
505
+ // changes to Differ or C++ Binding could cause some redundant Create instructions.
506
+ // There are cases where preallocation happens and a node is recreated: if a node is
507
+ // preallocated and then committed with revision 2+, an extra CREATE instruction will be
508
+ // generated.
509
+ // This represents a perf issue only, not a correctness issue. In the future we need to
510
+ // refactor View preallocation to correct the currently incorrect assumptions.
511
+ val viewState = getNullableViewState(reactTag)
512
+ if (viewState?.view != null) {
513
+ return
514
+ }
515
+
516
+ createViewUnsafe(
517
+ componentName,
518
+ reactTag,
519
+ props,
520
+ stateWrapper,
521
+ eventEmitterWrapper,
522
+ isLayoutable,
523
+ )
524
+ }
525
+
526
+ /**
527
+ * Perform view creation without any safety checks. You must ensure safety before calling this
528
+ * method (see existing callsites).
529
+ *
530
+ * @param componentName
531
+ * @param reactTag
532
+ * @param props
533
+ * @param stateWrapper
534
+ * @param eventEmitterWrapper
535
+ * @param isLayoutable
536
+ */
537
+ @UiThread
538
+ private fun createViewUnsafe(
539
+ componentName: String,
540
+ reactTag: Int,
541
+ props: ReadableMap,
542
+ stateWrapper: StateWrapper?,
543
+ eventEmitterWrapper: EventEmitterWrapper?,
544
+ isLayoutable: Boolean,
545
+ ): Unit {
546
+ Systrace.beginSection(
547
+ Systrace.TRACE_TAG_REACT,
548
+ "SurfaceMountingManager::createViewUnsafe($componentName)",
549
+ )
550
+ try {
551
+ val propMap = ReactStylesDiffMap(props)
552
+ val viewState =
553
+ ViewState(reactTag).apply {
554
+ this.currentProps = propMap
555
+ this.stateWrapper = stateWrapper
556
+ this.eventEmitter = eventEmitterWrapper
557
+ }
558
+ tagToViewState[reactTag] = viewState
559
+
560
+ if (isLayoutable) {
561
+ @Suppress("UNCHECKED_CAST")
562
+ val viewManager = viewManagerRegistry?.get(componentName) as ViewManager<View, *>
563
+ // View Managers are responsible for dealing with inital state and props.
564
+ viewState.view =
565
+ viewManager.createView(
566
+ reactTag,
567
+ checkNotNull(context),
568
+ propMap,
569
+ stateWrapper,
570
+ jsResponderHandler,
571
+ )
572
+ viewState.viewManager = viewManager
573
+ }
574
+ } finally {
575
+ Systrace.endSection(Systrace.TRACE_TAG_REACT)
576
+ }
577
+ }
578
+
579
+ public fun storeSynchronousMountPropsOverride(reactTag: Int, props: ReadableMap): Unit {
580
+ if (ReactNativeFeatureFlags.overrideBySynchronousMountPropsAtMountingAndroid()) {
581
+ val propsMap = getMapFromPropsReadableMap(props)
582
+ var synchronousMountProps = tagToSynchronousMountProps[reactTag]
583
+ if (synchronousMountProps != null) {
584
+ synchronousMountProps.putAll(propsMap)
585
+ } else {
586
+ synchronousMountProps = propsMap
587
+ }
588
+ tagToSynchronousMountProps[reactTag] = synchronousMountProps
589
+ }
590
+ }
591
+
592
+ public fun updatePropsSynchronously(reactTag: Int, props: ReadableMap): Unit {
593
+ updateProps(reactTag, props, true)
594
+ }
595
+
596
+ public fun updateProps(reactTag: Int, props: ReadableMap): Unit {
597
+ updateProps(reactTag, props, false)
598
+ }
599
+
600
+ @UiThread
601
+ private fun updateProps(
602
+ reactTag: Int,
603
+ props: ReadableMap,
604
+ shouldSkipSynchronousMountPropsOverride: Boolean,
605
+ ) {
606
+ if (isStopped) {
607
+ return
608
+ }
609
+
610
+ val viewState = getViewState(reactTag)
611
+
612
+ if (
613
+ ReactNativeFeatureFlags.overrideBySynchronousMountPropsAtMountingAndroid() &&
614
+ !shouldSkipSynchronousMountPropsOverride &&
615
+ tagToSynchronousMountProps.containsKey(reactTag)
616
+ ) {
617
+ val modifiedProps = WritableNativeMap()
618
+ modifiedProps.merge(props)
619
+ val directPropsMap = checkNotNull(tagToSynchronousMountProps[reactTag])
620
+ overridePropsReadableMap(directPropsMap, modifiedProps)
621
+ viewState.currentProps = ReactStylesDiffMap(modifiedProps)
622
+ } else {
623
+ viewState.currentProps = ReactStylesDiffMap(props)
624
+ }
625
+
626
+ val view: View = checkNotNull(viewState.view) { "Unable to find view for tag [$reactTag]" }
627
+ checkNotNull(viewState.viewManager).updateProperties(view, viewState.currentProps)
628
+ }
629
+
630
+ /**
631
+ * This prefetch method is experimental, do not use it for production code. it will most likely
632
+ * change or be removed in the future.
633
+ *
634
+ * @param surfaceId surface ID
635
+ * @param componentName
636
+ * @param params prefetch request params defined in C++
637
+ */
638
+ @SuppressLint("FunctionName")
639
+ @AnyThread
640
+ @UnstableReactNativeAPI
641
+ public fun experimental_prefetchResources(
642
+ surfaceId: Int,
643
+ componentName: String,
644
+ params: MapBuffer?,
645
+ ): Unit {
646
+ if (isStopped) {
647
+ return
648
+ }
649
+ viewManagerRegistry
650
+ ?.get(componentName)
651
+ ?.experimental_prefetchResources(surfaceId, checkNotNull(context), params)
652
+ }
653
+
654
+ @Deprecated("")
655
+ public fun receiveCommand(reactTag: Int, commandId: Int, commandArgs: ReadableArray?): Unit {
656
+ if (isStopped) {
657
+ return
658
+ }
659
+
660
+ val viewState =
661
+ getNullableViewState(reactTag)
662
+ ?: throw RetryableMountingLayerException(
663
+ "Unable to find viewState for tag $reactTag for commandId $commandId"
664
+ )
665
+
666
+ // It's not uncommon for JS to send events as/after a component is being removed from the
667
+ // view hierarchy. For example, TextInput may send a "blur" command in response to the view
668
+ // disappearing. Throw `ReactNoCrashSoftException` so they're logged but don't crash in dev
669
+ // for now.
670
+
671
+ val viewManager = viewState.viewManager
672
+ if (viewManager == null) {
673
+ throw RetryableMountingLayerException("Unable to find viewManager for tag $reactTag")
674
+ }
675
+
676
+ val view = viewState.view
677
+ if (view == null) {
678
+ throw RetryableMountingLayerException("Unable to find viewState view for tag $reactTag")
679
+ }
680
+
681
+ @Suppress("DEPRECATION") viewManager.receiveCommand(view, commandId, commandArgs)
682
+ }
683
+
684
+ public fun receiveCommand(reactTag: Int, commandId: String, commandArgs: ReadableArray?): Unit {
685
+ if (isStopped) {
686
+ return
687
+ }
688
+
689
+ val viewState =
690
+ getNullableViewState(reactTag)
691
+ ?: throw RetryableMountingLayerException(
692
+ "Unable to find viewState for tag $reactTag for commandId $commandId"
693
+ )
694
+
695
+ // It's not uncommon for JS to send events as/after a component is being removed from the
696
+ // view hierarchy. For example, TextInput may send a "blur" command in response to the view
697
+ // disappearing. Throw `ReactNoCrashSoftException` so they're logged but don't crash in dev
698
+ // for now.
699
+
700
+ val viewManager = viewState.viewManager
701
+ if (viewManager == null) {
702
+ throw RetryableMountingLayerException("Unable to find viewState manager for tag $reactTag")
703
+ }
704
+
705
+ val view = viewState.view
706
+ if (view == null) {
707
+ throw RetryableMountingLayerException("Unable to find viewState view for tag $reactTag")
708
+ }
709
+
710
+ viewManager.receiveCommand(view, commandId, commandArgs)
711
+ }
712
+
713
+ public fun sendAccessibilityEvent(reactTag: Int, eventType: Int): Unit {
714
+ if (isStopped) {
715
+ return
716
+ }
717
+
718
+ val view = getViewState(reactTag).view
719
+ if (view == null) {
720
+ throw RetryableMountingLayerException("Unable to find viewState view for tag $reactTag")
721
+ }
722
+
723
+ view.sendAccessibilityEvent(eventType)
724
+ }
725
+
726
+ @UiThread
727
+ public fun updateLayout(
728
+ reactTag: Int,
729
+ parentTag: Int,
730
+ x: Int,
731
+ y: Int,
732
+ width: Int,
733
+ height: Int,
734
+ displayType: Int,
735
+ layoutDirection: Int,
736
+ ): Unit {
737
+ if (isStopped) {
738
+ return
739
+ }
740
+
741
+ val viewState = getViewState(reactTag)
742
+ // Do not layout Root Views
743
+ if (viewState.isRoot) {
744
+ return
745
+ }
746
+
747
+ val viewToUpdate = checkNotNull(viewState.view) { "Unable to find View for tag: $reactTag" }
748
+
749
+ viewToUpdate.layoutDirection =
750
+ when (layoutDirection) {
751
+ 1 -> View.LAYOUT_DIRECTION_LTR
752
+ 2 -> View.LAYOUT_DIRECTION_RTL
753
+ else -> View.LAYOUT_DIRECTION_INHERIT
754
+ }
755
+
756
+ // Even though we have exact dimensions, we still call measure because some platform views (e.g.
757
+ // Switch) assume that method will always be called before onLayout and onDraw. They use it to
758
+ // calculate and cache information used in the draw pass. For most views, onMeasure can be
759
+ // stubbed out to only call setMeasuredDimensions. For ViewGroups, onLayout should be stubbed
760
+ // out to not recursively call layout on its children: React Native already handles doing
761
+ // that.
762
+ //
763
+ // Also, note measure and layout need to be called *after* all View properties have been updated
764
+ // because of caching and calculation that may occur in onMeasure and onLayout. Layout
765
+ // operations should also follow the native view hierarchy and go top to bottom for
766
+ // consistency with standard layout passes (some views may depend on this).
767
+ viewToUpdate.measure(
768
+ View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY),
769
+ View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY),
770
+ )
771
+
772
+ // We update the layout of the RootView when there is a change in the layout of its child. This
773
+ // is required to re-measure the size of the native View container (usually a FrameLayout) that
774
+ // is configured with layout_height = WRAP_CONTENT or layout_width = WRAP_CONTENT
775
+ //
776
+ // This code is going to be executed ONLY when there is a change in the size of the root view
777
+ // defined in the JS side. Changes in the layout of inner views will not trigger an update on
778
+ // the layout of the root view.
779
+ val parent = viewToUpdate.parent
780
+ if (parent is RootView) {
781
+ parent.requestLayout()
782
+ }
783
+
784
+ // TODO T212247085: Make this non-nullable again after rolling out
785
+ // disableMountItemReorderingAndroid
786
+ val parentViewState = getNullableViewState(parentTag)
787
+ var parentViewManager: IViewGroupManager<*>? = null
788
+ if (parentViewState == null) {
789
+ ReactSoftExceptionLogger.logSoftException(
790
+ ReactSoftExceptionLogger.Categories.SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE,
791
+ ReactNoCrashSoftException("Unable to find viewState for tag $parentTag for updateLayout"),
792
+ )
793
+ } else if (parentViewState.viewManager != null) {
794
+ parentViewManager = parentViewState.viewManager as IViewGroupManager<*>
795
+ }
796
+ if (parentViewManager == null || !parentViewManager.needsCustomLayoutForChildren()) {
797
+ viewToUpdate.layout(x, y, x + width, y + height)
798
+ }
799
+
800
+ // displayType: 0 represents display: 'none'
801
+ val visibility = if (displayType == 0) View.INVISIBLE else View.VISIBLE
802
+ if (viewToUpdate.visibility != visibility) {
803
+ viewToUpdate.visibility = visibility
804
+ }
805
+ }
806
+
807
+ @UiThread
808
+ public fun updatePadding(reactTag: Int, left: Int, top: Int, right: Int, bottom: Int): Unit {
809
+ UiThreadUtil.assertOnUiThread()
810
+ if (isStopped) {
811
+ return
812
+ }
813
+
814
+ val viewState = getViewState(reactTag)
815
+ // Do not layout Root Views
816
+ if (viewState.isRoot) {
817
+ return
818
+ }
819
+
820
+ val viewToUpdate = checkNotNull(viewState.view) { "Unable to find View for tag: $reactTag" }
821
+ val viewManager =
822
+ checkNotNull(viewState.viewManager) { "Unable to find ViewManager for view: $viewState" }
823
+
824
+ // noinspection unchecked
825
+ viewManager.setPadding(viewToUpdate, left, top, right, bottom)
826
+ }
827
+
828
+ @UiThread
829
+ public fun updateOverflowInset(
830
+ reactTag: Int,
831
+ overflowInsetLeft: Int,
832
+ overflowInsetTop: Int,
833
+ overflowInsetRight: Int,
834
+ overflowInsetBottom: Int,
835
+ ): Unit {
836
+ if (isStopped) {
837
+ return
838
+ }
839
+
840
+ val viewState = getViewState(reactTag)
841
+ // Do not layout Root Views
842
+ if (viewState.isRoot) {
843
+ return
844
+ }
845
+
846
+ val viewToUpdate = viewState.view
847
+ checkNotNull(viewToUpdate) { "Unable to find View for tag: $reactTag" }
848
+
849
+ if (viewToUpdate is ReactOverflowViewWithInset) {
850
+ (viewToUpdate as ReactOverflowViewWithInset).setOverflowInset(
851
+ overflowInsetLeft,
852
+ overflowInsetTop,
853
+ overflowInsetRight,
854
+ overflowInsetBottom,
855
+ )
856
+ }
857
+ }
858
+
859
+ @UiThread
860
+ public fun updateState(reactTag: Int, stateWrapper: StateWrapper?): Unit {
861
+ UiThreadUtil.assertOnUiThread()
862
+ if (isStopped) {
863
+ return
864
+ }
865
+
866
+ val viewState = getViewState(reactTag)
867
+
868
+ val prevStateWrapper = viewState.stateWrapper
869
+ viewState.stateWrapper = stateWrapper
870
+
871
+ val viewManager =
872
+ checkNotNull(viewState.viewManager) { "Unable to find ViewManager for tag: $reactTag" }
873
+ val view = checkNotNull(viewState.view)
874
+
875
+ val extraData = viewManager.updateState(view, viewState.currentProps, stateWrapper)
876
+ if (extraData != null) {
877
+ viewManager.updateExtraData(view, extraData)
878
+ }
879
+
880
+ // Immediately clear native side of previous state wrapper. This causes the State object in C++
881
+ // to be destroyed immediately instead of waiting for Java GC to kick in.
882
+ prevStateWrapper?.destroyState()
883
+ }
884
+
885
+ /** We update the event emitter from the main thread when the view is mounted. */
886
+ @UiThread
887
+ internal fun updateEventEmitter(reactTag: Int, eventEmitter: EventEmitterWrapper): Unit {
888
+ UiThreadUtil.assertOnUiThread()
889
+ if (isStopped) {
890
+ return
891
+ }
892
+
893
+ var viewState = tagToViewState[reactTag]
894
+ if (viewState == null) {
895
+ // TODO T62717437 - Use a flag to determine that these event emitters belong to virtual nodes
896
+ // only.
897
+ viewState = ViewState(reactTag)
898
+ tagToViewState[reactTag] = viewState
899
+ }
900
+ val previousEventEmitterWrapper = viewState.eventEmitter
901
+ viewState.eventEmitter = eventEmitter
902
+
903
+ // Immediately destroy native side of wrapper, instead of waiting for Java GC.
904
+ if (previousEventEmitterWrapper != eventEmitter && previousEventEmitterWrapper != null) {
905
+ previousEventEmitterWrapper.destroy()
906
+ }
907
+
908
+ val pendingEventQueue = viewState.pendingEventQueue
909
+ if (pendingEventQueue != null) {
910
+ // Invoke pending event queued to the view state
911
+ for (viewEvent in pendingEventQueue) {
912
+ viewEvent.dispatch(eventEmitter)
913
+ }
914
+ viewState.pendingEventQueue = null
915
+ }
916
+ }
917
+
918
+ @UiThread
919
+ @Synchronized
920
+ public fun setJSResponder(
921
+ reactTag: Int,
922
+ initialReactTag: Int,
923
+ blockNativeResponder: Boolean,
924
+ ): Unit {
925
+ UiThreadUtil.assertOnUiThread()
926
+ if (isStopped) {
927
+ return
928
+ }
929
+
930
+ val jsResponderHandler = jsResponderHandler ?: return
931
+
932
+ if (!blockNativeResponder) {
933
+ jsResponderHandler.setJSResponder(initialReactTag, null)
934
+ return
935
+ }
936
+
937
+ val viewState = getViewState(reactTag)
938
+ val view = viewState.view
939
+ if (initialReactTag != reactTag && view is ViewParent) {
940
+ // In this case, initialReactTag corresponds to a virtual/layout-only View, and we already
941
+ // have a parent of that View in reactTag, so we can use it.
942
+ jsResponderHandler.setJSResponder(initialReactTag, view as ViewParent)
943
+ return
944
+ } else if (view == null) {
945
+ SoftAssertions.assertUnreachable("Cannot find view for tag [$reactTag].")
946
+ return
947
+ }
948
+
949
+ if (viewState.isRoot) {
950
+ SoftAssertions.assertUnreachable(
951
+ "Cannot block native responder on [$reactTag] that is a root view"
952
+ )
953
+ }
954
+ jsResponderHandler.setJSResponder(initialReactTag, view.parent)
955
+ }
956
+
957
+ @UiThread
958
+ private fun onViewStateDeleted(viewState: ViewState) {
959
+ // Destroy state immediately instead of waiting for Java GC.
960
+ viewState.stateWrapper?.destroyState()
961
+ viewState.stateWrapper = null
962
+
963
+ // Destroy EventEmitterWrapper immediately instead of waiting for Java GC.
964
+ // Notably, this is also required to ensure that the EventEmitterWrapper is deallocated
965
+ // before the JS VM is deallocated, since it holds onto a JSI::Pointer.
966
+ viewState.eventEmitter?.destroy()
967
+ viewState.eventEmitter = null
968
+
969
+ // For non-root views we notify viewmanager with [ViewManager#onDropInstance]
970
+ val viewManager = viewState.viewManager
971
+ if (!viewState.isRoot && viewManager != null) {
972
+ viewManager.onDropViewInstance(checkNotNull(viewState.view))
973
+ }
974
+ }
975
+
976
+ @UiThread
977
+ public fun deleteView(reactTag: Int): Unit {
978
+ UiThreadUtil.assertOnUiThread()
979
+ if (isStopped) {
980
+ return
981
+ }
982
+
983
+ if (
984
+ ReactNativeFeatureFlags.overrideBySynchronousMountPropsAtMountingAndroid() &&
985
+ tagToSynchronousMountProps.containsKey(reactTag)
986
+ ) {
987
+ tagToSynchronousMountProps.remove(reactTag)
988
+ }
989
+
990
+ val viewState = getNullableViewState(reactTag)
991
+
992
+ if (viewState == null) {
993
+ ReactSoftExceptionLogger.logSoftException(
994
+ ReactSoftExceptionLogger.Categories.SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE,
995
+ ReactNoCrashSoftException("Unable to find viewState for tag $reactTag for deleteView"),
996
+ )
997
+ return
998
+ }
999
+
1000
+ if (viewsWithActiveTouches.contains(reactTag)) {
1001
+ // If the view that went offscreen is still being touched, we can't delete it yet.
1002
+ // We have to delay the deletion till the touch is completed.
1003
+ // This is causing bugs like those otherwise:
1004
+ // - https://github.com/facebook/react-native/issues/44610
1005
+ // - https://github.com/facebook/react-native/issues/45126
1006
+ viewsToDeleteAfterTouchFinishes.add(reactTag)
1007
+ } else {
1008
+ // To delete we simply remove the tag from the registry.
1009
+ // We want to rely on the correct set of MountInstructions being sent to the platform,
1010
+ // or StopSurface being called, so we do not handle deleting descendants of the View.
1011
+ tagToViewState.remove(reactTag)
1012
+
1013
+ onViewStateDeleted(viewState)
1014
+ }
1015
+ }
1016
+
1017
+ @UiThread
1018
+ public fun preallocateView(
1019
+ componentName: String,
1020
+ reactTag: Int,
1021
+ props: ReadableMap,
1022
+ stateWrapper: StateWrapper?,
1023
+ isLayoutable: Boolean,
1024
+ ): Unit {
1025
+ UiThreadUtil.assertOnUiThread()
1026
+
1027
+ if (isStopped) {
1028
+ return
1029
+ }
1030
+ // We treat this as a perf problem and not a logical error. View Preallocation or unexpected
1031
+ // changes to Differ or C++ Binding could cause some redundant Create instructions.
1032
+ if (getNullableViewState(reactTag) != null) {
1033
+ return
1034
+ }
1035
+
1036
+ createViewUnsafe(componentName, reactTag, props, stateWrapper, null, isLayoutable)
1037
+ }
1038
+
1039
+ @AnyThread
1040
+ @ThreadConfined(ThreadConfined.ANY)
1041
+ internal fun getEventEmitter(reactTag: Int): EventEmitterWrapper? {
1042
+ val viewState = getNullableViewState(reactTag)
1043
+ return viewState?.eventEmitter
1044
+ }
1045
+
1046
+ @UiThread
1047
+ public fun getView(reactTag: Int): View {
1048
+ val state = getNullableViewState(reactTag)
1049
+ return state?.view
1050
+ ?: throw IllegalViewOperationException(
1051
+ "Unable to find view for tag $reactTag. Surface $surfaceId stopped: $isStopped, rootViewAttached: $isRootViewAttached"
1052
+ )
1053
+ }
1054
+
1055
+ private fun getViewState(reactTag: Int): ViewState =
1056
+ tagToViewState[reactTag]
1057
+ ?: throw RetryableMountingLayerException(
1058
+ "Unable to find viewState for tag $reactTag. Surface stopped: $isStopped"
1059
+ )
1060
+
1061
+ private fun getNullableViewState(reactTag: Int): ViewState? = tagToViewState[reactTag]
1062
+
1063
+ public fun printSurfaceState(): Unit {
1064
+ FLog.e(TAG, "Views created for surface $surfaceId:")
1065
+ for (viewState in tagToViewState.values) {
1066
+ val viewManagerName = viewState.viewManager?.name
1067
+ val view = viewState.view
1068
+ val parent = if (view != null) view.parent as View? else null
1069
+ val parentTag = parent?.id
1070
+
1071
+ FLog.e(
1072
+ TAG,
1073
+ "<$viewManagerName id=${viewState.reactTag} parentTag=$parentTag isRoot=${viewState.isRoot} />",
1074
+ )
1075
+ }
1076
+ }
1077
+
1078
+ @AnyThread
1079
+ public fun enqueuePendingEvent(
1080
+ reactTag: Int,
1081
+ eventName: String,
1082
+ canCoalesceEvent: Boolean,
1083
+ params: WritableMap?,
1084
+ @EventCategoryDef eventCategory: Int,
1085
+ ): Unit {
1086
+ // When the surface stopped we will reset the view state map. We are not going to enqueue
1087
+ // pending events as they are not expected to be dispatched anyways.
1088
+ val viewState = tagToViewState[reactTag]
1089
+
1090
+ if (viewState == null) {
1091
+ // Cannot queue event without view state. Do nothing here.
1092
+ return
1093
+ }
1094
+
1095
+ val viewEvent = PendingViewEvent(eventName, params, eventCategory, canCoalesceEvent)
1096
+ UiThreadUtil.runOnUiThread {
1097
+ val eventEmitter = viewState.eventEmitter
1098
+ if (eventEmitter != null) {
1099
+ viewEvent.dispatch(eventEmitter)
1100
+ } else {
1101
+ val queue =
1102
+ viewState.pendingEventQueue
1103
+ ?: LinkedList<PendingViewEvent>().also { viewState.pendingEventQueue = it }
1104
+ queue.add(viewEvent)
1105
+ }
1106
+ }
1107
+ }
1108
+
1109
+ public fun markActiveTouchForTag(reactTag: Int): Unit {
1110
+ viewsWithActiveTouches.add(reactTag)
1111
+ }
1112
+
1113
+ public fun sweepActiveTouchForTag(reactTag: Int): Unit {
1114
+ viewsWithActiveTouches.remove(reactTag)
1115
+ if (viewsToDeleteAfterTouchFinishes.contains(reactTag)) {
1116
+ viewsToDeleteAfterTouchFinishes.remove(reactTag)
1117
+ deleteView(reactTag)
1118
+ }
1119
+ }
1120
+
1121
+ /**
1122
+ * This class holds view state for react tags. Objects of this class are stored into the
1123
+ * [mTagToViewState], and they should be updated in the same thread.
1124
+ */
1125
+ private class ViewState(
1126
+ val reactTag: Int,
1127
+ var view: View? = null,
1128
+ var viewManager: ViewManager<View, *>? = null,
1129
+ val isRoot: Boolean = false,
1130
+ ) {
1131
+ var currentProps: ReactStylesDiffMap? = null
1132
+ var stateWrapper: StateWrapper? = null
1133
+ var eventEmitter: EventEmitterWrapper? = null
1134
+
1135
+ @ThreadConfined(ThreadConfined.UI) var pendingEventQueue: Queue<PendingViewEvent>? = null
1136
+
1137
+ override fun toString(): String {
1138
+ val isLayoutOnly = viewManager == null
1139
+ return "ViewState [$reactTag] - isRoot: $isRoot - props: $currentProps - viewManager: $viewManager - isLayoutOnly: $isLayoutOnly"
1140
+ }
1141
+ }
1142
+
1143
+ private class PendingViewEvent(
1144
+ private val eventName: String,
1145
+ private val params: WritableMap?,
1146
+ @field:EventCategoryDef private val eventCategory: Int,
1147
+ private val canCoalesceEvent: Boolean,
1148
+ ) {
1149
+ fun dispatch(eventEmitter: EventEmitterWrapper) {
1150
+ if (canCoalesceEvent) {
1151
+ eventEmitter.dispatchUnique(eventName, params)
1152
+ } else {
1153
+ eventEmitter.dispatch(eventName, params, eventCategory)
1154
+ }
1155
+ }
1156
+ }
1157
+
1158
+ private companion object {
1159
+ private val TAG: String = SurfaceMountingManager::class.java.simpleName
1160
+
1161
+ private val SHOW_CHANGED_VIEW_HIERARCHIES = ReactBuildConfig.DEBUG && false
1162
+ private const val PROP_TRANSFORM = "transform"
1163
+ private const val PROP_OPACITY = "opacity"
1164
+
1165
+ private fun logViewHierarchy(parent: ViewGroup, recurse: Boolean) {
1166
+ val parentTag = parent.id
1167
+ FLog.e(TAG, " <ViewGroup tag=$parentTag class=${parent.javaClass.toString()}>")
1168
+ for (i in 0..<parent.childCount) {
1169
+ FLog.e(
1170
+ TAG,
1171
+ (" <View idx=$i tag=${parent.getChildAt(i).id} class=${parent.getChildAt(i).javaClass.toString()}>"),
1172
+ )
1173
+ }
1174
+ FLog.e(TAG, " </ViewGroup tag=$parentTag>")
1175
+
1176
+ if (recurse) {
1177
+ FLog.e(TAG, "Displaying Ancestors:")
1178
+ var ancestor = parent.parent
1179
+ while (ancestor != null) {
1180
+ val ancestorViewGroup = if (ancestor is ViewGroup) ancestor else null
1181
+ val ancestorId = ancestorViewGroup?.id ?: View.NO_ID
1182
+ FLog.e(TAG, "<ViewParent tag=$ancestorId class=${ancestor.javaClass.toString()}>")
1183
+ ancestor = ancestor.parent
1184
+ }
1185
+ }
1186
+ }
1187
+
1188
+ private fun overridePropsReadableMap(
1189
+ patchMap: Map<String, Any>,
1190
+ outputReadableMap: WritableMap,
1191
+ ) {
1192
+ for ((propKey, propValue) in patchMap) {
1193
+ if (outputReadableMap.hasKey(propKey)) {
1194
+ if (propKey == PROP_TRANSFORM) {
1195
+ assert(outputReadableMap.getType(propKey) == ReadableType.Array && propValue is List<*>)
1196
+ val array = WritableNativeArray()
1197
+ for (item in propValue as List<*>) {
1198
+ if (item is Map<*, *>) {
1199
+ val itemMap = WritableNativeMap()
1200
+ @Suppress("UNCHECKED_CAST")
1201
+ for ((key, value) in (item as Map<String, Any>)) {
1202
+ if (value is String) {
1203
+ itemMap.putString(key, value)
1204
+ } else if (value is Number) {
1205
+ itemMap.putDouble(key, value.toDouble())
1206
+ }
1207
+ }
1208
+ array.pushMap(itemMap)
1209
+ }
1210
+ }
1211
+ outputReadableMap.putArray(propKey, array)
1212
+ } else if (propKey == PROP_OPACITY) {
1213
+ assert(outputReadableMap.getType(propKey) == ReadableType.Number && propValue is Number)
1214
+ outputReadableMap.putDouble(propKey, (propValue as Number).toDouble())
1215
+ }
1216
+ }
1217
+ }
1218
+ }
1219
+
1220
+ private fun getMapFromPropsReadableMap(readableMap: ReadableMap): MutableMap<String, Any> {
1221
+ val outputMap = mutableMapOf<String, Any>()
1222
+
1223
+ if (
1224
+ readableMap.hasKey(PROP_TRANSFORM) &&
1225
+ readableMap.getType(PROP_TRANSFORM) == ReadableType.Array
1226
+ ) {
1227
+ val transformArray = readableMap.getArray(PROP_TRANSFORM)
1228
+ if (transformArray != null) {
1229
+ val arrayList = ArrayList<Map<String, Any?>>(transformArray.size())
1230
+ for (i in 0..<transformArray.size()) {
1231
+ val map = transformArray.getMap(i)
1232
+ if (map != null) {
1233
+ arrayList.add(map.toHashMap())
1234
+ }
1235
+ }
1236
+ outputMap[PROP_TRANSFORM] = arrayList
1237
+ }
1238
+ }
1239
+
1240
+ if (
1241
+ readableMap.hasKey(PROP_OPACITY) &&
1242
+ readableMap.getType(PROP_OPACITY) == ReadableType.Number
1243
+ ) {
1244
+ outputMap[PROP_OPACITY] = readableMap.getDouble(PROP_OPACITY)
1245
+ }
1246
+
1247
+ return outputMap
1248
+ }
1249
+
1250
+ // prevents unchecked conversion warn of the <ViewGroup> type
1251
+ private fun getViewGroupManager(viewState: ViewState): IViewGroupManager<View> {
1252
+ val viewManager =
1253
+ checkNotNull(viewState.viewManager) { "Unable to find ViewManager for view: $viewState" }
1254
+ @Suppress("UNCHECKED_CAST")
1255
+ return viewManager as IViewGroupManager<View>
1256
+ }
1257
+ }
1258
+ }