react-native 0.0.0-201c10733 → 0.0.0-268efb102

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 (1486) hide show
  1. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +14 -3
  2. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +2 -2
  3. package/Libraries/ActionSheetIOS/React-RCTActionSheet.podspec +1 -1
  4. package/Libraries/Alert/Alert.js +3 -5
  5. package/Libraries/Alert/NativeAlertManager.js +0 -2
  6. package/Libraries/Alert/RCTAlertManager.android.js +0 -2
  7. package/Libraries/Alert/RCTAlertManager.ios.js +0 -2
  8. package/Libraries/Animated/Animated.js +0 -2
  9. package/Libraries/Animated/AnimatedEvent.js +26 -7
  10. package/Libraries/Animated/AnimatedImplementation.js +0 -2
  11. package/Libraries/Animated/AnimatedMock.js +1 -8
  12. package/Libraries/Animated/AnimatedWeb.js +6 -3
  13. package/Libraries/Animated/NativeAnimatedHelper.js +10 -7
  14. package/Libraries/Animated/NativeAnimatedModule.js +0 -2
  15. package/Libraries/Animated/NativeAnimatedTurboModule.js +0 -2
  16. package/Libraries/Animated/animations/Animation.js +1 -0
  17. package/Libraries/Animated/animations/DecayAnimation.js +2 -0
  18. package/Libraries/Animated/animations/SpringAnimation.js +1 -0
  19. package/Libraries/Animated/animations/TimingAnimation.js +3 -0
  20. package/Libraries/Animated/components/AnimatedFlatList.js +0 -2
  21. package/Libraries/Animated/components/AnimatedImage.js +0 -2
  22. package/Libraries/Animated/components/AnimatedScrollView.js +0 -2
  23. package/Libraries/Animated/components/AnimatedSectionList.js +1 -3
  24. package/Libraries/Animated/components/AnimatedText.js +0 -2
  25. package/Libraries/Animated/components/AnimatedView.js +0 -2
  26. package/Libraries/Animated/createAnimatedComponent.js +25 -19
  27. package/Libraries/Animated/createAnimatedComponentInjection.js +48 -0
  28. package/Libraries/Animated/createAnimatedComponent_EXPERIMENTAL.js +48 -0
  29. package/Libraries/Animated/nodes/AnimatedInterpolation.js +21 -22
  30. package/Libraries/Animated/nodes/AnimatedProps.js +0 -1
  31. package/Libraries/Animated/nodes/AnimatedValue.js +24 -5
  32. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -0
  33. package/Libraries/Animated/useAnimatedProps.js +211 -0
  34. package/Libraries/AppState/AppState.js +90 -164
  35. package/Libraries/AppState/NativeAppState.js +0 -2
  36. package/Libraries/BatchedBridge/MessageQueue.js +19 -14
  37. package/Libraries/BatchedBridge/NativeModules.js +5 -1
  38. package/Libraries/Blob/BlobManager.js +0 -2
  39. package/Libraries/Blob/FileReader.js +1 -3
  40. package/Libraries/Blob/NativeBlobModule.js +0 -2
  41. package/Libraries/Blob/NativeFileReaderModule.js +0 -2
  42. package/Libraries/Blob/RCTBlobManager.h +2 -1
  43. package/Libraries/Blob/RCTBlobManager.mm +1 -3
  44. package/Libraries/Blob/RCTBlobPlugins.mm +4 -3
  45. package/Libraries/Blob/React-RCTBlob.podspec +3 -3
  46. package/Libraries/Blob/URL.js +18 -20
  47. package/Libraries/BugReporting/BugReporting.js +2 -2
  48. package/Libraries/BugReporting/getReactData.js +2 -2
  49. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +350 -0
  50. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js +4 -2
  51. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityManager.js +0 -2
  52. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +35 -0
  53. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.ios.js +26 -0
  54. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +6 -8
  55. package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +0 -2
  56. package/Libraries/Components/Button.js +45 -15
  57. package/Libraries/Components/Clipboard/Clipboard.js +0 -2
  58. package/Libraries/Components/Clipboard/NativeClipboard.js +0 -2
  59. package/Libraries/Components/DatePicker/DatePickerIOS.android.js +4 -5
  60. package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +50 -14
  61. package/Libraries/Components/DatePicker/RCTDatePickerNativeComponent.js +1 -2
  62. package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +0 -2
  63. package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +0 -2
  64. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +4 -9
  65. package/Libraries/Components/Keyboard/Keyboard.js +16 -17
  66. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +17 -22
  67. package/Libraries/Components/Keyboard/NativeKeyboardObserver.js +0 -2
  68. package/Libraries/Components/MaskedView/MaskedViewIOS.ios.js +3 -3
  69. package/Libraries/Components/Pressable/Pressable.js +20 -7
  70. package/Libraries/Components/Pressable/useAndroidRippleForView.js +18 -17
  71. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +0 -2
  72. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +0 -2
  73. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.android.js +4 -5
  74. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.ios.js +2 -5
  75. package/Libraries/Components/ProgressViewIOS/RCTProgressViewNativeComponent.js +0 -2
  76. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +0 -2
  77. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +9 -3
  78. package/Libraries/Components/RefreshControl/RefreshControl.js +5 -7
  79. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +2 -3
  80. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +0 -2
  81. package/Libraries/Components/SafeAreaView/SafeAreaView.js +1 -1
  82. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +11 -15
  83. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +2 -4
  84. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +2 -4
  85. package/Libraries/Components/ScrollView/ScrollView.js +754 -170
  86. package/Libraries/Components/ScrollView/ScrollViewContext.js +0 -2
  87. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +3 -4
  88. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +2 -0
  89. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +31 -10
  90. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +2 -0
  91. package/Libraries/Components/ScrollView/processDecelerationRate.js +0 -2
  92. package/Libraries/Components/SegmentedControlIOS/RCTSegmentedControlNativeComponent.js +0 -2
  93. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.android.js +4 -5
  94. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js +17 -11
  95. package/Libraries/Components/Slider/Slider.js +19 -8
  96. package/Libraries/Components/Slider/SliderNativeComponent.js +0 -2
  97. package/Libraries/Components/Sound/NativeSoundManager.js +0 -2
  98. package/Libraries/Components/Sound/SoundManager.js +0 -1
  99. package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +0 -2
  100. package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +0 -2
  101. package/Libraries/Components/StatusBar/StatusBar.js +10 -21
  102. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +0 -2
  103. package/Libraries/Components/Switch/Switch.js +98 -118
  104. package/Libraries/Components/Switch/SwitchNativeComponent.js +0 -2
  105. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +9 -8
  106. package/Libraries/Components/TextInput/AndroidTextInputViewConfig.js +2 -3
  107. package/Libraries/Components/TextInput/InputAccessoryView.js +6 -8
  108. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +0 -2
  109. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +6 -5
  110. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -16
  111. package/Libraries/Components/TextInput/{RCTSinglelineTextInputViewConfig.js → RCTTextInputViewConfig.js} +3 -5
  112. package/Libraries/Components/TextInput/TextInput.js +128 -69
  113. package/Libraries/Components/TextInput/TextInputNativeCommands.js +0 -2
  114. package/Libraries/Components/TextInput/TextInputState.js +1 -3
  115. package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +0 -2
  116. package/Libraries/Components/ToastAndroid/ToastAndroid.android.js +0 -1
  117. package/Libraries/Components/Touchable/BoundingDimensions.js +1 -2
  118. package/Libraries/Components/Touchable/PooledClass.js +1 -2
  119. package/Libraries/Components/Touchable/Position.js +1 -2
  120. package/Libraries/Components/Touchable/Touchable.js +26 -55
  121. package/Libraries/Components/Touchable/TouchableBounce.js +0 -2
  122. package/Libraries/Components/Touchable/TouchableHighlight.js +22 -6
  123. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +16 -5
  124. package/Libraries/Components/Touchable/TouchableOpacity.js +19 -8
  125. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +13 -4
  126. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +0 -2
  127. package/Libraries/Components/UnimplementedViews/UnimplementedView.js +2 -3
  128. package/Libraries/Components/View/ReactNativeStyleAttributes.js +133 -68
  129. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -2
  130. package/Libraries/Components/View/ReactNativeViewViewConfig.js +1 -3
  131. package/Libraries/Components/View/View.js +2 -4
  132. package/Libraries/Components/View/ViewAccessibility.js +3 -0
  133. package/Libraries/Components/View/ViewNativeComponent.js +0 -2
  134. package/Libraries/Core/Devtools/getDevServer.js +0 -2
  135. package/Libraries/Core/Devtools/parseErrorStack.js +0 -9
  136. package/Libraries/Core/Devtools/parseHermesStack.js +1 -1
  137. package/Libraries/Core/ExceptionsManager.js +51 -41
  138. package/Libraries/Core/ExtendedError.js +19 -0
  139. package/Libraries/Core/InitializeCore.js +1 -0
  140. package/Libraries/Core/NativeExceptionsManager.js +0 -2
  141. package/Libraries/Core/ReactFiberErrorDialog.js +44 -34
  142. package/Libraries/Core/ReactNativeVersion.js +1 -1
  143. package/Libraries/Core/ReactNativeVersionCheck.js +0 -2
  144. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +0 -2
  145. package/Libraries/Core/Timers/JSTimers.js +41 -31
  146. package/Libraries/Core/Timers/NativeTiming.js +0 -2
  147. package/Libraries/Core/Timers/immediateShim.js +67 -0
  148. package/Libraries/Core/Timers/queueMicrotask.js +41 -0
  149. package/Libraries/Core/polyfillPromise.js +1 -1
  150. package/Libraries/Core/setUpBatchedBridge.js +1 -1
  151. package/Libraries/Core/setUpDeveloperTools.js +53 -58
  152. package/Libraries/Core/setUpGlobals.js +2 -0
  153. package/Libraries/Core/setUpReactDevTools.js +18 -1
  154. package/Libraries/Core/setUpRegeneratorRuntime.js +25 -8
  155. package/Libraries/Core/setUpTimers.js +65 -6
  156. package/Libraries/Core/setUpXHR.js +4 -4
  157. package/Libraries/DeprecatedPropTypes/DeprecatedImagePropType.android.js +131 -0
  158. package/Libraries/DeprecatedPropTypes/{DeprecatedImagePropType.js → DeprecatedImagePropType.ios.js} +0 -0
  159. package/Libraries/DeprecatedPropTypes/DeprecatedTextInputPropTypes.js +5 -5
  160. package/Libraries/DeprecatedPropTypes/DeprecatedViewAccessibility.js +2 -0
  161. package/Libraries/EventEmitter/NativeEventEmitter.js +100 -51
  162. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +9 -77
  163. package/Libraries/EventEmitter/RCTEventEmitter.js +5 -1
  164. package/Libraries/EventEmitter/RCTNativeAppEventEmitter.js +0 -2
  165. package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +31 -10
  166. package/Libraries/FBLazyVector/BUCK +5 -1
  167. package/Libraries/FBLazyVector/FBLazyVector.podspec +1 -1
  168. package/Libraries/HeapCapture/HeapCapture.js +0 -2
  169. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +0 -2
  170. package/Libraries/Image/AssetUtils.js +0 -2
  171. package/Libraries/Image/Image.android.js +22 -133
  172. package/Libraries/Image/Image.ios.js +39 -33
  173. package/Libraries/Image/ImageAnalyticsTagContext.js +0 -2
  174. package/Libraries/Image/ImageBackground.js +10 -8
  175. package/Libraries/Image/ImageInjection.js +28 -0
  176. package/Libraries/Image/ImagePickerIOS.js +0 -2
  177. package/Libraries/Image/ImageProps.js +28 -0
  178. package/Libraries/Image/ImageSource.js +57 -14
  179. package/Libraries/Image/ImageViewNativeComponent.js +0 -2
  180. package/Libraries/Image/NativeImageEditor.js +0 -2
  181. package/Libraries/Image/NativeImageLoaderAndroid.js +0 -2
  182. package/Libraries/Image/NativeImageLoaderIOS.js +2 -3
  183. package/Libraries/Image/NativeImagePickerIOS.js +0 -2
  184. package/Libraries/Image/NativeImageStoreAndroid.js +0 -2
  185. package/Libraries/Image/NativeImageStoreIOS.js +0 -2
  186. package/Libraries/Image/RCTGIFImageDecoder.mm +6 -0
  187. package/Libraries/Image/RCTImageLoader.h +2 -2
  188. package/Libraries/Image/RCTImageLoader.mm +6 -18
  189. package/Libraries/Image/RCTImageLoaderWithAttributionProtocol.h +0 -5
  190. package/Libraries/Image/RCTImagePlugins.mm +4 -3
  191. package/Libraries/Image/RCTImageStoreManager.mm +5 -5
  192. package/Libraries/Image/RCTLocalAssetImageLoader.mm +5 -0
  193. package/Libraries/Image/React-RCTImage.podspec +3 -3
  194. package/Libraries/Image/TextInlineImageNativeComponent.js +84 -2
  195. package/Libraries/Image/nativeImageSource.js +0 -2
  196. package/Libraries/Inspector/ElementProperties.js +1 -1
  197. package/Libraries/Inspector/Inspector.js +13 -4
  198. package/Libraries/Inspector/InspectorPanel.js +1 -1
  199. package/Libraries/Interaction/FrameRateLogger.js +0 -2
  200. package/Libraries/Interaction/InteractionManager.js +3 -5
  201. package/Libraries/Interaction/PanResponder.js +1 -1
  202. package/Libraries/LayoutAnimation/LayoutAnimation.js +53 -17
  203. package/Libraries/Linking/Linking.js +5 -7
  204. package/Libraries/Linking/NativeIntentAndroid.js +0 -2
  205. package/Libraries/Linking/NativeLinkingManager.js +0 -2
  206. package/Libraries/LinkingIOS/RCTLinkingPlugins.mm +4 -3
  207. package/Libraries/LinkingIOS/React-RCTLinking.podspec +3 -3
  208. package/Libraries/Lists/CellRenderMask.js +145 -0
  209. package/Libraries/Lists/FillRateHelper.js +1 -1
  210. package/Libraries/Lists/FlatList.js +77 -53
  211. package/Libraries/Lists/SectionList.js +20 -23
  212. package/Libraries/Lists/SectionListModern.js +249 -0
  213. package/Libraries/Lists/ViewabilityHelper.js +9 -9
  214. package/Libraries/Lists/VirtualizeUtils.js +18 -20
  215. package/Libraries/Lists/VirtualizedList.js +176 -132
  216. package/Libraries/Lists/VirtualizedListContext.js +0 -2
  217. package/Libraries/Lists/VirtualizedSectionList.js +247 -209
  218. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +6 -6
  219. package/Libraries/LogBox/Data/LogBoxData.js +21 -19
  220. package/Libraries/LogBox/Data/LogBoxLog.js +0 -2
  221. package/Libraries/LogBox/Data/LogBoxSymbolication.js +0 -2
  222. package/Libraries/LogBox/Data/parseLogBoxLog.js +0 -2
  223. package/Libraries/LogBox/LogBox.js +114 -49
  224. package/Libraries/LogBox/LogBoxInspectorContainer.js +0 -2
  225. package/Libraries/LogBox/LogBoxNotificationContainer.js +0 -2
  226. package/Libraries/LogBox/UI/LogBoxButton.js +0 -2
  227. package/Libraries/LogBox/UI/LogBoxImages/alert-triangle.png +0 -0
  228. package/Libraries/LogBox/UI/LogBoxImages/chevron-left.png +0 -0
  229. package/Libraries/LogBox/UI/LogBoxImages/chevron-right.png +0 -0
  230. package/Libraries/LogBox/UI/LogBoxImages/close.png +0 -0
  231. package/Libraries/LogBox/UI/LogBoxImages/loader.png +0 -0
  232. package/Libraries/LogBox/UI/LogBoxInspector.js +0 -2
  233. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +0 -2
  234. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +0 -2
  235. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +0 -2
  236. package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +0 -2
  237. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +0 -2
  238. package/Libraries/LogBox/UI/LogBoxInspectorSection.js +0 -2
  239. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +4 -5
  240. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +0 -2
  241. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +4 -3
  242. package/Libraries/LogBox/UI/LogBoxMessage.js +0 -2
  243. package/Libraries/LogBox/UI/LogBoxNotification.js +3 -4
  244. package/Libraries/LogBox/UI/LogBoxStyle.js +0 -2
  245. package/Libraries/Modal/Modal.js +42 -21
  246. package/Libraries/{Text/TextInjection.js → Modal/ModalInjection.js} +3 -5
  247. package/Libraries/Modal/NativeModalManager.js +0 -2
  248. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +8 -4
  249. package/Libraries/NativeAnimation/Nodes/RCTPropsAnimatedNode.m +0 -3
  250. package/Libraries/NativeAnimation/RCTAnimationPlugins.mm +4 -3
  251. package/Libraries/NativeAnimation/RCTNativeAnimatedModule.mm +6 -3
  252. package/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.h +1 -1
  253. package/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.m +1 -1
  254. package/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.mm +32 -28
  255. package/Libraries/NativeAnimation/React-RCTAnimation.podspec +3 -3
  256. package/Libraries/NativeComponent/NativeComponentRegistry.js +34 -2
  257. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +0 -2
  258. package/Libraries/NativeModules/specs/NativeDevMenu.js +0 -2
  259. package/Libraries/NativeModules/specs/NativeDevSettings.js +0 -2
  260. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +0 -2
  261. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +0 -2
  262. package/Libraries/NativeModules/specs/NativeLogBox.js +0 -2
  263. package/Libraries/NativeModules/specs/NativeRedBox.js +0 -2
  264. package/Libraries/NativeModules/specs/NativeSourceCode.js +0 -2
  265. package/Libraries/Network/NativeNetworkingAndroid.js +0 -2
  266. package/Libraries/Network/NativeNetworkingIOS.js +0 -2
  267. package/Libraries/Network/RCTDataRequestHandler.mm +6 -0
  268. package/Libraries/Network/RCTFileRequestHandler.mm +6 -0
  269. package/Libraries/Network/RCTHTTPRequestHandler.h +5 -0
  270. package/Libraries/Network/RCTHTTPRequestHandler.mm +25 -7
  271. package/Libraries/Network/RCTNetworkPlugins.mm +4 -3
  272. package/Libraries/Network/RCTNetworking.android.js +6 -3
  273. package/Libraries/Network/RCTNetworking.h +1 -1
  274. package/Libraries/Network/RCTNetworking.ios.js +63 -21
  275. package/Libraries/Network/RCTNetworking.mm +3 -3
  276. package/Libraries/Network/React-RCTNetwork.podspec +2 -2
  277. package/Libraries/Network/XMLHttpRequest.js +5 -3
  278. package/Libraries/Network/convertRequestBody.js +2 -1
  279. package/Libraries/NewAppScreen/components/Colors.js +0 -2
  280. package/Libraries/NewAppScreen/components/Header.js +1 -1
  281. package/Libraries/NewAppScreen/components/HermesBadge.js +4 -1
  282. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +0 -1
  283. package/Libraries/NewAppScreen/components/logo.png +0 -0
  284. package/Libraries/NewAppScreen/index.js +0 -2
  285. package/Libraries/Performance/NativeJSCSamplingProfiler.js +0 -2
  286. package/Libraries/Performance/QuickPerformanceLogger.js +4 -4
  287. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +4 -3
  288. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +10 -5
  289. package/Libraries/Pressability/HoverState.js +0 -2
  290. package/Libraries/Pressability/Pressability.js +18 -13
  291. package/Libraries/Pressability/PressabilityDebug.js +9 -4
  292. package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +48 -0
  293. package/Libraries/Pressability/PressabilityTypes.js +18 -0
  294. package/Libraries/Pressability/usePressability.js +0 -2
  295. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +3 -0
  296. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +18 -3
  297. package/Libraries/PushNotificationIOS/RCTPushNotificationManager.mm +13 -1
  298. package/Libraries/PushNotificationIOS/RCTPushNotificationPlugins.mm +4 -3
  299. package/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec +3 -3
  300. package/Libraries/RCTRequired/BUCK +4 -1
  301. package/Libraries/RCTRequired/RCTRequired.podspec +2 -2
  302. package/Libraries/ReactNative/AppContainer.js +3 -25
  303. package/Libraries/ReactNative/AppRegistry.js +48 -7
  304. package/Libraries/ReactNative/DisplayMode.js +32 -0
  305. package/Libraries/ReactNative/DummyUIManager.js +7 -2
  306. package/Libraries/ReactNative/FabricUIManager.js +6 -5
  307. package/Libraries/ReactNative/HeadlessJsTaskError.js +0 -2
  308. package/Libraries/ReactNative/I18nManager.js +23 -9
  309. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +0 -2
  310. package/Libraries/ReactNative/NativeI18nManager.js +1 -2
  311. package/Libraries/ReactNative/NativeUIManager.js +2 -3
  312. package/Libraries/ReactNative/PaperUIManager.js +13 -7
  313. package/Libraries/ReactNative/RootTag.js +2 -4
  314. package/Libraries/ReactNative/UIManager.js +2 -3
  315. package/Libraries/ReactNative/UIManagerInjection.js +0 -2
  316. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +32 -0
  317. package/Libraries/ReactNative/renderApplication.js +24 -6
  318. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +6 -3
  319. package/Libraries/Reliability/UserFlow.js +7 -0
  320. package/Libraries/Renderer/REVISION +1 -1
  321. package/Libraries/Renderer/implementations/ReactFabric-dev.fb.js +9484 -7643
  322. package/Libraries/Renderer/implementations/ReactFabric-dev.js +7877 -6935
  323. package/Libraries/Renderer/implementations/ReactFabric-prod.fb.js +3038 -2506
  324. package/Libraries/Renderer/implementations/ReactFabric-prod.js +2112 -1937
  325. package/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js +3375 -2693
  326. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +2568 -2244
  327. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js +9638 -7942
  328. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +5736 -4864
  329. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js +2865 -2464
  330. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +2275 -2120
  331. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js +3190 -2643
  332. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +2565 -2259
  333. package/Libraries/Renderer/shims/ReactFabric.js +5 -3
  334. package/Libraries/Renderer/shims/ReactFeatureFlags.js +3 -0
  335. package/Libraries/Renderer/shims/ReactNative.js +3 -0
  336. package/Libraries/Renderer/shims/ReactNativeTypes.js +21 -15
  337. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -0
  338. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +3 -0
  339. package/Libraries/Settings/NativeSettingsManager.js +0 -2
  340. package/Libraries/Settings/RCTSettingsPlugins.mm +4 -3
  341. package/Libraries/Settings/React-RCTSettings.podspec +2 -2
  342. package/Libraries/Settings/Settings.ios.js +4 -2
  343. package/Libraries/Share/NativeShareModule.js +0 -2
  344. package/Libraries/Share/Share.js +0 -2
  345. package/Libraries/Storage/AsyncStorage.js +1 -2
  346. package/Libraries/Storage/NativeAsyncLocalStorage.js +0 -2
  347. package/Libraries/Storage/NativeAsyncSQLiteDBStorage.js +0 -2
  348. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +0 -2
  349. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +16 -3
  350. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +8 -3
  351. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.js +2 -2
  352. package/Libraries/StyleSheet/Rect.js +0 -2
  353. package/Libraries/StyleSheet/StyleSheet.js +3 -5
  354. package/Libraries/StyleSheet/normalizeColor.js +2 -4
  355. package/Libraries/StyleSheet/processColorArray.js +16 -6
  356. package/Libraries/StyleSheet/processTransform.js +6 -6
  357. package/Libraries/StyleSheet/splitLayoutProps.js +0 -4
  358. package/Libraries/SurfaceHostingComponent/RCTSurfaceHostingComponent.mm +1 -1
  359. package/Libraries/Text/React-RCTText.podspec +2 -2
  360. package/Libraries/Text/Text.js +187 -235
  361. package/Libraries/Text/TextInput/Multiline/RCTUITextView.h +0 -2
  362. package/Libraries/Text/TextInput/Multiline/RCTUITextView.m +12 -2
  363. package/Libraries/Text/TextInput/RCTBaseTextInputView.m +10 -12
  364. package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.m +4 -11
  365. package/Libraries/Text/TextNativeComponent.js +0 -2
  366. package/Libraries/Text/TextProps.js +7 -7
  367. package/Libraries/TurboModule/RCTExport.js +1 -1
  368. package/Libraries/TurboModule/TurboModuleRegistry.js +1 -5
  369. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +0 -2
  370. package/Libraries/TypeSafety/RCTTypeSafety.podspec +3 -3
  371. package/Libraries/Types/CoreEventTypes.js +0 -2
  372. package/Libraries/{Components/Picker/PickerAndroid.ios.js → Types/RootTagTypes.js} +2 -3
  373. package/Libraries/UTFSequence.js +1 -1
  374. package/Libraries/Utilities/Appearance.js +13 -7
  375. package/Libraries/Utilities/BackHandler.android.js +0 -2
  376. package/Libraries/Utilities/DebugEnvironment.js +0 -2
  377. package/Libraries/Utilities/DevSettings.js +48 -58
  378. package/Libraries/Utilities/DeviceInfo.js +0 -2
  379. package/Libraries/Utilities/Dimensions.js +19 -20
  380. package/Libraries/Utilities/FeatureDetection.js +31 -0
  381. package/Libraries/Utilities/GlobalPerformanceLogger.js +0 -2
  382. package/Libraries/Utilities/HMRClient.js +15 -10
  383. package/Libraries/Utilities/JSDevSupportModule.js +0 -2
  384. package/Libraries/Utilities/LoadingView.android.js +0 -2
  385. package/Libraries/Utilities/LoadingView.ios.js +0 -2
  386. package/Libraries/Utilities/MatrixMath.js +1 -1
  387. package/Libraries/Utilities/NativeAppearance.js +0 -2
  388. package/Libraries/Utilities/NativeDevLoadingView.js +0 -2
  389. package/Libraries/Utilities/NativeDevSplitBundleLoader.js +0 -2
  390. package/Libraries/Utilities/NativeDeviceInfo.js +1 -3
  391. package/Libraries/Utilities/NativeJSDevSupport.js +0 -2
  392. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +0 -2
  393. package/Libraries/Utilities/NativePlatformConstantsIOS.js +0 -2
  394. package/Libraries/Utilities/PerformanceLoggerContext.js +8 -4
  395. package/Libraries/Utilities/Platform.android.js +0 -2
  396. package/Libraries/Utilities/Platform.ios.js +0 -2
  397. package/Libraries/Utilities/ReactNativeTestTools.js +12 -19
  398. package/Libraries/Utilities/codegenNativeCommands.js +1 -3
  399. package/Libraries/Utilities/codegenNativeComponent.js +0 -2
  400. package/Libraries/Utilities/createPerformanceLogger.js +0 -2
  401. package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +1 -0
  402. package/Libraries/Utilities/defineLazyObjectProperty.js +1 -1
  403. package/Libraries/Utilities/deprecatedPropType.js +2 -4
  404. package/Libraries/Utilities/stringifySafe.js +1 -3
  405. package/Libraries/Utilities/useColorScheme.js +4 -4
  406. package/Libraries/Utilities/useMergeRefs.js +44 -0
  407. package/Libraries/Utilities/useRefEffect.js +45 -0
  408. package/Libraries/Utilities/useWindowDimensions.js +9 -6
  409. package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +0 -2
  410. package/Libraries/Vibration/NativeVibration.js +0 -2
  411. package/Libraries/Vibration/RCTVibrationPlugins.mm +4 -3
  412. package/Libraries/Vibration/React-RCTVibration.podspec +2 -2
  413. package/Libraries/Vibration/Vibration.js +0 -2
  414. package/Libraries/WebSocket/NativeWebSocketModule.js +0 -2
  415. package/Libraries/WebSocket/WebSocket.js +12 -12
  416. package/Libraries/WebSocket/WebSocketInterceptor.js +6 -3
  417. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -0
  418. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +0 -2
  419. package/Libraries/promiseRejectionTrackingOptions.js +2 -2
  420. package/Libraries/vendor/emitter/EventEmitter.js +36 -2
  421. package/Libraries/vendor/emitter/EventSubscription.js +19 -0
  422. package/Libraries/vendor/emitter/_EmitterSubscription.js +7 -7
  423. package/Libraries/vendor/emitter/_EventEmitter.js +28 -42
  424. package/Libraries/vendor/emitter/_EventSubscription.js +4 -2
  425. package/Libraries/vendor/emitter/_EventSubscriptionVendor.js +1 -1
  426. package/Libraries/vendor/emitter/__flowtests__/EventEmitter-flowtest.js +0 -2
  427. package/README.md +5 -5
  428. package/React/Base/RCTAssert.h +29 -11
  429. package/React/Base/RCTAssert.m +52 -0
  430. package/React/Base/RCTBridge+Private.h +8 -0
  431. package/React/Base/RCTBridge.h +20 -0
  432. package/React/Base/RCTBridge.m +39 -7
  433. package/React/Base/RCTBridgeModule.h +62 -12
  434. package/React/Base/RCTBundleManager.m +78 -0
  435. package/React/Base/RCTBundleURLProvider.h +35 -9
  436. package/React/Base/RCTBundleURLProvider.mm +90 -25
  437. package/React/Base/RCTCallableJSModules.m +47 -0
  438. package/React/Base/RCTConstants.h +3 -16
  439. package/React/Base/RCTConstants.m +6 -36
  440. package/React/Base/RCTConvert.h +1 -1
  441. package/React/Base/RCTConvert.m +31 -7
  442. package/React/Base/RCTCxxConvert.h +1 -1
  443. package/React/Base/RCTDefines.h +22 -3
  444. package/React/Base/RCTEventDispatcherProtocol.h +3 -2
  445. package/React/{Views/RCTPickerManager.h → Base/RCTInitializing.h} +4 -2
  446. package/React/Base/RCTJSThread.h +29 -0
  447. package/React/Base/RCTJSThread.m +19 -0
  448. package/React/Base/RCTModuleData.h +11 -3
  449. package/React/Base/RCTModuleData.mm +66 -1
  450. package/React/Base/RCTMultipartStreamReader.m +0 -2
  451. package/React/Base/RCTRootView.h +25 -1
  452. package/React/Base/RCTRootView.m +27 -4
  453. package/React/Base/RCTTouchHandler.m +3 -0
  454. package/React/Base/RCTUtils.h +3 -0
  455. package/React/Base/RCTUtils.m +14 -7
  456. package/React/Base/RCTVersion.m +1 -1
  457. package/React/Base/Surface/RCTSurfaceStage.h +6 -11
  458. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.h +12 -0
  459. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +46 -2
  460. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.mm +3 -0
  461. package/React/CoreModules/BUCK +4 -3
  462. package/React/CoreModules/CoreModulesPlugins.mm +4 -3
  463. package/React/CoreModules/RCTAccessibilityManager.mm +1 -1
  464. package/React/CoreModules/RCTActionSheetManager.mm +14 -5
  465. package/React/CoreModules/RCTAsyncLocalStorage.mm +4 -0
  466. package/React/CoreModules/RCTDevLoadingView.mm +25 -33
  467. package/React/CoreModules/RCTDevMenu.h +0 -5
  468. package/React/CoreModules/RCTDevMenu.mm +29 -60
  469. package/React/CoreModules/RCTDevSettings.h +12 -2
  470. package/React/CoreModules/RCTDevSettings.mm +96 -53
  471. package/React/CoreModules/RCTDevSplitBundleLoader.mm +3 -8
  472. package/React/CoreModules/RCTDeviceInfo.mm +4 -5
  473. package/React/CoreModules/RCTEventDispatcher.h +2 -1
  474. package/React/CoreModules/RCTEventDispatcher.mm +23 -25
  475. package/React/CoreModules/RCTKeyboardObserver.mm +1 -1
  476. package/React/CoreModules/RCTLogBox.mm +14 -10
  477. package/React/CoreModules/RCTPerfMonitor.mm +15 -4
  478. package/React/CoreModules/RCTRedBox.mm +3 -12
  479. package/React/CoreModules/RCTSourceCode.mm +2 -1
  480. package/React/CoreModules/RCTTiming.h +2 -1
  481. package/React/CoreModules/RCTTiming.mm +1 -3
  482. package/React/CoreModules/RCTWebSocketExecutor.mm +6 -0
  483. package/React/CoreModules/React-CoreModules.podspec +3 -3
  484. package/React/CxxBridge/RCTCxxBridge.mm +93 -33
  485. package/React/CxxModule/RCTNativeModule.mm +3 -1
  486. package/React/DevSupport/RCTPackagerConnection.h +3 -0
  487. package/React/DevSupport/RCTPackagerConnection.mm +19 -8
  488. package/{Libraries → React}/FBReactNativeSpec/FBReactNativeSpec.podspec +15 -8
  489. package/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.h +2 -1
  490. package/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm +5 -10
  491. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropComponentView.mm +4 -2
  492. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropCoordinatorAdapter.mm +1 -3
  493. package/React/Fabric/Mounting/ComponentViews/Modal/RCTFabricModalHostViewController.mm +7 -0
  494. package/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.h +3 -1
  495. package/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.mm +62 -20
  496. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.h +0 -1
  497. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.mm +0 -1
  498. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm +5 -0
  499. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +135 -87
  500. package/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.h +23 -0
  501. package/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.mm +22 -0
  502. package/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentAccessibilityProvider.mm +14 -9
  503. package/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mm +104 -16
  504. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +53 -17
  505. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputUtils.mm +48 -2
  506. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.h +6 -0
  507. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +122 -8
  508. package/React/Fabric/Mounting/RCTComponentViewFactory.h +10 -2
  509. package/React/Fabric/Mounting/RCTComponentViewFactory.mm +83 -46
  510. package/React/Fabric/Mounting/RCTComponentViewProtocol.h +3 -0
  511. package/React/Fabric/Mounting/RCTComponentViewRegistry.mm +1 -12
  512. package/React/Fabric/Mounting/RCTMountingManager.h +22 -1
  513. package/React/Fabric/Mounting/RCTMountingManager.mm +57 -3
  514. package/React/Fabric/Mounting/UIView+ComponentViewProtocol.h +4 -0
  515. package/React/Fabric/Mounting/UIView+ComponentViewProtocol.mm +30 -4
  516. package/React/Fabric/RCTConversions.h +3 -0
  517. package/React/Fabric/RCTScheduler.h +8 -16
  518. package/React/Fabric/RCTScheduler.mm +36 -54
  519. package/React/Fabric/RCTSurfacePresenter.h +8 -16
  520. package/React/Fabric/RCTSurfacePresenter.mm +49 -170
  521. package/React/Fabric/RCTSurfacePresenterBridgeAdapter.h +4 -2
  522. package/React/Fabric/RCTSurfacePresenterBridgeAdapter.mm +1 -1
  523. package/React/Fabric/RCTSurfaceRegistry.h +1 -1
  524. package/React/Fabric/Surface/RCTFabricSurface.h +2 -6
  525. package/React/Fabric/Surface/RCTFabricSurface.mm +132 -129
  526. package/React/Modules/RCTEventEmitter.h +1 -2
  527. package/React/Modules/RCTEventEmitter.m +8 -11
  528. package/React/Modules/RCTI18nUtil.h +14 -6
  529. package/React/Modules/RCTI18nUtil.m +1 -47
  530. package/React/Modules/RCTUIManager.m +8 -2
  531. package/React/Profiler/RCTProfileTrampoline-arm.S +1 -1
  532. package/React/Profiler/RCTProfileTrampoline-arm64.S +2 -2
  533. package/React/React-RCTFabric.podspec +5 -5
  534. package/React/Tests/Text/RCTParagraphComponentViewTests.mm +63 -0
  535. package/React/Views/RCTComponentData.h +10 -1
  536. package/React/Views/RCTComponentData.m +23 -8
  537. package/React/Views/RCTDatePickerManager.m +33 -0
  538. package/React/Views/RCTFont.mm +54 -38
  539. package/React/Views/RCTModalHostView.h +5 -1
  540. package/React/Views/RCTModalHostView.m +52 -20
  541. package/React/Views/RCTModalHostViewManager.m +5 -0
  542. package/React/Views/RCTView.h +7 -7
  543. package/React/Views/RCTView.m +32 -49
  544. package/React/Views/RCTViewManager.m +22 -4
  545. package/React/Views/RCTWeakViewHolder.h +19 -0
  546. package/React/Views/RefreshControl/RCTRefreshControl.m +26 -0
  547. package/React/Views/RefreshControl/RCTRefreshControlManager.m +1 -0
  548. package/React/Views/SafeAreaView/RCTSafeAreaView.m +1 -5
  549. package/React/Views/ScrollView/RCTScrollView.h +1 -0
  550. package/React/Views/ScrollView/RCTScrollView.m +123 -36
  551. package/React/Views/ScrollView/RCTScrollViewManager.m +4 -7
  552. package/React/Views/UIView+React.m +2 -11
  553. package/React/third-party.xcconfig +1 -1
  554. package/React-Core.podspec +5 -4
  555. package/React.podspec +2 -2
  556. package/ReactAndroid/Android-prebuilt.mk +19 -3
  557. package/ReactAndroid/README.md +2 -2
  558. package/ReactAndroid/build.gradle +137 -25
  559. package/ReactAndroid/gradle.properties +7 -5
  560. package/ReactAndroid/src/androidTest/buck-runner/BUCK +1 -0
  561. package/ReactAndroid/src/androidTest/java/com/facebook/react/testing/BUCK +1 -1
  562. package/ReactAndroid/src/androidTest/java/com/facebook/react/testing/ReactAppInstrumentationTestCase.java +1 -1
  563. package/ReactAndroid/src/androidTest/java/com/facebook/react/testing/idledetection/BUCK +1 -1
  564. package/ReactAndroid/src/androidTest/java/com/facebook/react/testing/idledetection/ReactIdleDetectionUtil.java +1 -1
  565. package/ReactAndroid/src/androidTest/java/com/facebook/react/testing/rule/BUCK +5 -5
  566. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/BUCK +0 -2
  567. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/core/BUCK +5 -5
  568. package/ReactAndroid/src/androidTest/js/BUCK +26 -0
  569. package/ReactAndroid/src/androidTest/js/TestBundle.js +0 -12
  570. package/ReactAndroid/src/androidTest/js/UIManagerTestModule.js +7 -6
  571. package/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/Android.mk +2 -2
  572. package/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/Android.mk +4 -4
  573. package/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/HermesExecutorFactory.java +1 -1
  574. package/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/RuntimeConfig.java +0 -6
  575. package/ReactAndroid/src/main/java/com/facebook/proguard/annotations/BUCK +2 -2
  576. package/ReactAndroid/src/main/java/com/facebook/proguard/annotations/proguard_annotations.pro +1 -0
  577. package/ReactAndroid/src/main/java/com/facebook/react/BUCK +2 -1
  578. package/ReactAndroid/src/main/java/com/facebook/react/CoreModulesPackage.java +3 -2
  579. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +1 -0
  580. package/ReactAndroid/src/main/java/com/facebook/react/ReactAndroidHWInputDeviceHelper.java +5 -0
  581. package/ReactAndroid/src/main/java/com/facebook/react/ReactFragment.java +6 -2
  582. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +184 -92
  583. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +37 -1
  584. package/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +21 -1
  585. package/ReactAndroid/src/main/java/com/facebook/react/{turbomodule/core/ReactPackageTurboModuleManagerDelegate.java → ReactPackageTurboModuleManagerDelegate.java} +2 -3
  586. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +40 -28
  587. package/ReactAndroid/src/main/java/com/facebook/react/animated/BUCK +1 -1
  588. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.java +10 -2
  589. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java +5 -5
  590. package/ReactAndroid/src/main/java/com/facebook/react/bridge/BackgroundExecutor.java +3 -2
  591. package/ReactAndroid/src/main/java/com/facebook/react/bridge/BaseJavaModule.java +7 -5
  592. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.java +4 -0
  593. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +11 -3
  594. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxModuleWrapperBase.java +4 -1
  595. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JSIModuleRegistry.java +4 -0
  596. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.java +37 -0
  597. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ModuleHolder.java +1 -1
  598. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModule.java +8 -1
  599. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeModuleRegistry.java +26 -0
  600. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +46 -8
  601. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContextBaseJavaModule.java +2 -3
  602. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactCxxErrorHandler.java +39 -0
  603. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactMarkerConstants.java +7 -3
  604. package/ReactAndroid/src/main/java/com/facebook/react/bridge/{ReactSoftException.java → ReactSoftExceptionLogger.java} +8 -3
  605. package/ReactAndroid/src/main/java/com/facebook/react/bridge/RuntimeScheduler.java +21 -0
  606. package/ReactAndroid/src/main/java/com/facebook/react/bridge/SoftAssertions.java +8 -7
  607. package/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManager.java +10 -0
  608. package/ReactAndroid/src/main/java/com/facebook/react/common/BUCK +3 -2
  609. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/BUCK +29 -0
  610. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/ReadableMapBuffer.java +347 -0
  611. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/ReadableMapBufferSoLoader.java +33 -0
  612. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/jni/Android.mk +39 -0
  613. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/jni/BUCK +34 -0
  614. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/jni/react/common/mapbuffer/OnLoad.cpp +15 -0
  615. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/jni/react/common/mapbuffer/ReadableMapBuffer.cpp +76 -0
  616. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/jni/react/common/mapbuffer/ReadableMapBuffer.h +51 -0
  617. package/ReactAndroid/src/main/java/com/facebook/react/config/BUCK +2 -1
  618. package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +61 -29
  619. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK +1 -1
  620. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java +275 -0
  621. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DefaultDevSupportManagerFactory.java +97 -0
  622. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevLoadingViewController.java +2 -2
  623. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java +9 -58
  624. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java +189 -352
  625. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerFactory.java +4 -73
  626. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DisabledDevSupportManager.java +13 -1
  627. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxModule.java +1 -1
  628. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/PackagerStatusCheck.java +100 -0
  629. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/{ReactInstanceManagerDevHelper.java → ReactInstanceDevHelper.java} +3 -2
  630. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxHandler.java +2 -16
  631. package/ReactAndroid/src/main/java/com/facebook/react/{modules/datepicker/DatePickerMode.java → devsupport/interfaces/BundleLoadCallback.java} +3 -6
  632. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.java +6 -1
  633. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/ErrorType.java +23 -0
  634. package/ReactAndroid/src/main/java/com/facebook/react/fabric/BUCK +1 -1
  635. package/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.java +15 -1
  636. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricComponents.java +4 -3
  637. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricJSIModuleProvider.java +9 -64
  638. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +317 -393
  639. package/ReactAndroid/src/main/java/com/facebook/react/fabric/StateWrapperImpl.java +40 -1
  640. package/ReactAndroid/src/main/java/com/facebook/react/fabric/SurfaceHandler.java +50 -0
  641. package/ReactAndroid/src/main/java/com/facebook/react/fabric/SurfaceHandlerBinding.java +131 -0
  642. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/EventEmitterWrapper.java +36 -1
  643. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.java +14 -2
  644. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Android.mk +5 -3
  645. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/AsyncEventBeatV2.cpp +69 -0
  646. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/AsyncEventBeatV2.h +40 -0
  647. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/BUCK +4 -4
  648. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.cpp +308 -103
  649. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/Binding.h +33 -8
  650. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/CoreComponentsRegistry.cpp +3 -6
  651. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/EventEmitterWrapper.cpp +22 -2
  652. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/EventEmitterWrapper.h +4 -0
  653. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/OnLoad.cpp +2 -0
  654. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.cpp +16 -2
  655. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/StateWrapperImpl.h +3 -1
  656. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/SurfaceHandlerBinding.cpp +122 -0
  657. package/ReactAndroid/src/main/java/com/facebook/react/fabric/jni/SurfaceHandlerBinding.h +68 -0
  658. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.java +414 -0
  659. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java +134 -71
  660. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +247 -40
  661. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/IntBufferBatchMountItem.java +4 -6
  662. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PreAllocateViewMountItem.java +13 -6
  663. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/SendAccessibilityEvent.java +2 -2
  664. package/ReactAndroid/src/main/java/com/facebook/react/jscexecutor/Android.mk +2 -2
  665. package/ReactAndroid/src/main/java/com/facebook/react/jstasks/HeadlessJsTaskContext.java +3 -3
  666. package/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.java +21 -4
  667. package/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/BUCK +1 -1
  668. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/BUCK +1 -1
  669. package/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.java +11 -1
  670. package/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/BUCK +1 -1
  671. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BUCK +1 -1
  672. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobProvider.java +35 -7
  673. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/jni/Android.mk +2 -2
  674. package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/jni/BUCK +1 -1
  675. package/ReactAndroid/src/main/java/com/facebook/react/modules/bundleloader/BUCK +1 -1
  676. package/ReactAndroid/src/main/java/com/facebook/react/modules/camera/BUCK +1 -1
  677. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/BUCK +1 -1
  678. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/{JavaScriptTimerManager.java → JavaScriptTimerExecutor.java} +1 -1
  679. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java +7 -7
  680. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.java +7 -4
  681. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/AnimationsDebugModule.java +1 -1
  682. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/BUCK +1 -1
  683. package/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/BUCK +1 -1
  684. package/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.java +19 -8
  685. package/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/BUCK +1 -1
  686. package/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/DialogModule.java +12 -4
  687. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.java +10 -0
  688. package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/BUCK +2 -1
  689. package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.java +19 -13
  690. package/ReactAndroid/src/main/java/com/facebook/react/modules/image/BUCK +1 -1
  691. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/BUCK +1 -1
  692. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java +23 -19
  693. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/BUCK +1 -1
  694. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/ForwardingCookieHandler.java +1 -4
  695. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java +1 -1
  696. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/OkHttpClientProvider.java +1 -18
  697. package/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/BUCK +1 -1
  698. package/ReactAndroid/src/main/java/com/facebook/react/modules/share/BUCK +1 -1
  699. package/ReactAndroid/src/main/java/com/facebook/react/modules/sound/BUCK +1 -1
  700. package/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/BUCK +1 -1
  701. package/ReactAndroid/src/main/java/com/facebook/react/modules/storage/AsyncStorageModule.java +1 -1
  702. package/ReactAndroid/src/main/java/com/facebook/react/modules/storage/BUCK +1 -1
  703. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/BUCK +2 -2
  704. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
  705. package/ReactAndroid/src/main/java/com/facebook/react/modules/toast/BUCK +1 -1
  706. package/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/BUCK +1 -1
  707. package/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/BUCK +1 -1
  708. package/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/ReconnectingWebSocket.java +11 -9
  709. package/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/jni/Android.mk +1 -1
  710. package/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/jni/BUCK +1 -1
  711. package/ReactAndroid/src/main/java/com/facebook/react/shell/BUCK +0 -2
  712. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +0 -9
  713. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/BUCK +0 -1
  714. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java +9 -6
  715. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManagerDelegate.java +3 -0
  716. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/interfaces/TurboModule.java +4 -4
  717. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/Android.mk +2 -2
  718. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/BUCK +2 -2
  719. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManager.cpp +40 -7
  720. package/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni/ReactCommon/TurboModuleManager.h +10 -2
  721. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BUCK +3 -0
  722. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +15 -1
  723. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolver.java +17 -0
  724. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ComponentNameResolverManager.java +41 -0
  725. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.java +7 -28
  726. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/FabricViewStateManager.java +2 -11
  727. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.java +14 -5
  728. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +4 -13
  729. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java +10 -13
  730. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/OnLayoutEvent.java +17 -6
  731. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/PixelUtil.java +1 -6
  732. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java +16 -10
  733. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactClippingProhibitedView.java +26 -0
  734. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactClippingViewGroupHelper.java +5 -1
  735. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactOverflowView.java +25 -0
  736. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/RootViewUtil.java +18 -0
  737. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/StateWrapper.java +21 -1
  738. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.java +162 -66
  739. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +4 -8
  740. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementationProvider.java +1 -1
  741. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.java +29 -20
  742. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +15 -17
  743. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java +1 -2
  744. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +13 -6
  745. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java +7 -4
  746. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerRegistry.java +2 -2
  747. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagerResolver.java +26 -0
  748. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java +16 -1
  749. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java +8 -3
  750. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/Event.java +100 -8
  751. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/LockFreeEventDispatcherImpl.java +236 -0
  752. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.java +8 -0
  753. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ReactEventEmitter.java +21 -7
  754. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.java +58 -4
  755. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/interfaces/ViewProps.java +10 -2
  756. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/Android.mk +37 -0
  757. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/BUCK +41 -0
  758. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/ComponentNameResolverManager.cpp +77 -0
  759. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/ComponentNameResolverManager.h +54 -0
  760. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/jni/OnLoad.cpp +16 -0
  761. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/BUCK +1 -1
  762. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayoutManager.java +12 -4
  763. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerClosedEvent.java +9 -10
  764. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerOpenedEvent.java +9 -10
  765. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerSlideEvent.java +7 -13
  766. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/events/DrawerStateChangedEvent.java +7 -13
  767. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java +2 -16
  768. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java +10 -5
  769. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/BUCK +2 -1
  770. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.java +12 -3
  771. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java +23 -12
  772. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/RequestCloseEvent.java +12 -4
  773. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ShowEvent.java +12 -4
  774. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/BUCK +1 -1
  775. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/BUCK +1 -0
  776. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollContainerView.java +29 -6
  777. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +184 -24
  778. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java +9 -4
  779. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +109 -12
  780. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.java +18 -3
  781. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java +9 -4
  782. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.java +37 -20
  783. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/BUCK +1 -1
  784. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderEvent.java +0 -5
  785. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSliderManager.java +5 -7
  786. package/ReactAndroid/src/main/java/com/facebook/react/views/slider/ReactSlidingCompleteEvent.java +13 -16
  787. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/BUCK +1 -1
  788. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.java +12 -4
  789. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java +2 -1
  790. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/BUCK +1 -1
  791. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitch.java +13 -0
  792. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchEvent.java +9 -13
  793. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchManager.java +6 -10
  794. package/ReactAndroid/src/main/java/com/facebook/react/views/text/BUCK +1 -0
  795. package/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomStyleSpan.java +6 -8
  796. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactClickableSpan.java +2 -1
  797. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.java +59 -44
  798. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java +0 -4
  799. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +32 -4
  800. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +19 -0
  801. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java +48 -1
  802. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.java +41 -59
  803. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +230 -139
  804. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +45 -20
  805. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManagerMapBuffer.java +616 -0
  806. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TypefaceStyle.java +72 -0
  807. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK +1 -0
  808. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactContentSizeChangedEvent.java +3 -13
  809. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +19 -8
  810. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditTextInputConnectionWrapper.java +3 -0
  811. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextChangedEvent.java +3 -13
  812. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputBlurEvent.java +3 -13
  813. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEndEditingEvent.java +3 -13
  814. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputEvent.java +3 -13
  815. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputFocusEvent.java +8 -18
  816. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputKeyPressEvent.java +9 -20
  817. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +126 -63
  818. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSelectionEvent.java +3 -13
  819. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.java +8 -18
  820. package/ReactAndroid/src/main/java/com/facebook/react/views/view/CanvasUtil.java +92 -0
  821. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java +39 -8
  822. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java +49 -2
  823. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java +3 -1
  824. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ViewGroupClickEvent.java +11 -4
  825. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java +13 -7
  826. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +24 -2
  827. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaProps.java +151 -0
  828. package/ReactAndroid/src/main/jni/first-party/fb/BUCK +4 -0
  829. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp +2 -7
  830. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJTypesVanilla.h +8 -4
  831. package/ReactAndroid/src/main/jni/react/jni/Android.mk +6 -3
  832. package/ReactAndroid/src/main/jni/react/jni/BUCK +5 -2
  833. package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.cpp +61 -0
  834. package/ReactAndroid/src/main/jni/react/jni/CatalystInstanceImpl.h +8 -0
  835. package/ReactAndroid/src/main/jni/react/jni/JReactCxxErrorHandler.cpp +18 -0
  836. package/{ReactCommon/react/renderer/components/picker/iospicker/primitives.h → ReactAndroid/src/main/jni/react/jni/JReactCxxErrorHandler.h} +6 -10
  837. package/ReactAndroid/src/main/jni/react/jni/JReactSoftExceptionLogger.cpp +21 -0
  838. package/ReactAndroid/src/main/jni/react/jni/JReactSoftExceptionLogger.h +28 -0
  839. package/{ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerComponentDescriptor.h → ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.cpp} +8 -7
  840. package/ReactAndroid/src/main/jni/react/jni/JRuntimeScheduler.h +30 -0
  841. package/ReactAndroid/src/main/jni/react/jni/JSLoader.cpp +1 -1
  842. package/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.cpp +0 -94
  843. package/ReactAndroid/src/main/jni/react/jni/JavaModuleWrapper.h +0 -30
  844. package/ReactAndroid/src/main/jni/react/jni/ProxyExecutor.h +1 -0
  845. package/ReactAndroid/src/main/jni/third-party/boost/Android.mk +7 -2
  846. package/ReactAndroid/src/main/jni/third-party/boost/asm/arm/jump_arm_aapcs_elf_gas.S +86 -0
  847. package/ReactAndroid/src/main/jni/third-party/boost/asm/arm/make_arm_aapcs_elf_gas.S +79 -0
  848. package/ReactAndroid/src/main/jni/third-party/boost/asm/arm/ontop_arm_aapcs_elf_gas.S +91 -0
  849. package/ReactAndroid/src/main/jni/third-party/boost/asm/arm64/jump_arm64_aapcs_elf_gas.S +114 -0
  850. package/ReactAndroid/src/main/jni/third-party/boost/asm/arm64/make_arm64_aapcs_elf_gas.S +85 -0
  851. package/ReactAndroid/src/main/jni/third-party/boost/asm/arm64/ontop_arm64_aapcs_elf_gas.S +113 -0
  852. package/ReactAndroid/src/main/jni/third-party/boost/asm/x86/jump_i386_sysv_elf_gas.S +78 -0
  853. package/ReactAndroid/src/main/jni/third-party/boost/asm/x86/make_i386_sysv_elf_gas.S +106 -0
  854. package/ReactAndroid/src/main/jni/third-party/boost/asm/x86/ontop_i386_sysv_elf_gas.S +85 -0
  855. package/ReactAndroid/src/main/jni/third-party/boost/asm/x86_64/jump_x86_64_sysv_elf_gas.S +76 -0
  856. package/ReactAndroid/src/main/jni/third-party/boost/asm/x86_64/make_x86_64_sysv_elf_gas.S +81 -0
  857. package/ReactAndroid/src/main/jni/third-party/boost/asm/x86_64/ontop_x86_64_sysv_elf_gas.S +79 -0
  858. package/ReactAndroid/src/main/jni/third-party/fmt/Android.mk +15 -0
  859. package/ReactAndroid/src/main/jni/third-party/folly/Android.mk +36 -16
  860. package/ReactAndroid/src/main/jni/third-party/libevent/Android.mk +36 -0
  861. package/ReactAndroid/src/main/jni/third-party/libevent/evconfig-private.h +49 -0
  862. package/{third-party-podspecs/libevent.podspec → ReactAndroid/src/main/jni/third-party/libevent/event-config.h} +141 -366
  863. package/ReactAndroid/src/main/libraries/fbjni/BUCK +2 -2
  864. package/ReactAndroid/src/main/libraries/fresco/fresco-react-native/BUCK +26 -26
  865. package/ReactAndroid/src/main/libraries/soloader/java/com/facebook/soloader/BUCK +5 -5
  866. package/ReactAndroid/src/main/res/devsupport/values/strings.xml +2 -1
  867. package/ReactAndroid/src/main/res/views/uimanager/values/strings_unlocalized.xml +4 -8
  868. package/ReactAndroid/src/main/third-party/android/androidx/BUCK +63 -2
  869. package/ReactAndroid/src/main/third-party/java/infer-annotations/BUCK +2 -2
  870. package/ReactAndroid/src/main/third-party/java/okhttp/BUCK +29 -9
  871. package/ReactAndroid/src/main/third-party/java/okio/BUCK +15 -5
  872. package/ReactAndroid/src/main/third-party/java/robolectric/{4.4/BUCK → BUCK} +0 -0
  873. package/ReactAndroid/src/main/third-party/java/testing-support-lib/BUCK +0 -31
  874. package/ReactAndroid/src/main/third-party/kotlin/BUCK +91 -0
  875. package/ReactAndroid/src/test/java/com/facebook/react/RootViewTest.java +8 -3
  876. package/ReactAndroid/src/test/java/com/facebook/react/animated/NativeAnimatedNodeTraversalTest.java +1 -1
  877. package/ReactAndroid/src/test/java/com/facebook/react/bridge/BUCK +1 -1
  878. package/ReactAndroid/src/test/java/com/facebook/react/bridge/ReactTestHelper.java +1 -0
  879. package/ReactAndroid/src/test/java/com/facebook/react/devsupport/JSDebuggerWebSocketClientTest.java +3 -1
  880. package/ReactAndroid/src/test/java/com/facebook/react/modules/BUCK +1 -0
  881. package/ReactAndroid/src/test/java/com/facebook/react/modules/deviceinfo/DeviceInfoModuleTest.java +168 -0
  882. package/ReactAndroid/src/test/java/com/facebook/react/modules/dialog/DialogModuleTest.java +1 -1
  883. package/ReactAndroid/src/test/java/com/facebook/react/modules/network/NetworkingModuleTest.java +10 -10
  884. package/ReactAndroid/src/test/java/com/facebook/react/modules/timing/TimingModuleTest.java +1 -1
  885. package/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.java +32 -0
  886. package/ReactAndroid/src/test/java/com/facebook/react/views/image/ReactImagePropertyTest.java +8 -0
  887. package/ReactAndroid/src/test/java/com/facebook/react/views/textinput/ReactTextInputPropertyTest.java +4 -0
  888. package/ReactCommon/React-Fabric.podspec +58 -14
  889. package/ReactCommon/ReactCommon.podspec +8 -3
  890. package/ReactCommon/better/Android.mk +1 -1
  891. package/ReactCommon/better/BUCK +2 -2
  892. package/ReactCommon/callinvoker/Android.mk +1 -1
  893. package/ReactCommon/callinvoker/BUCK +3 -3
  894. package/ReactCommon/callinvoker/React-callinvoker.podspec +3 -3
  895. package/ReactCommon/cxxreact/Android.mk +2 -1
  896. package/ReactCommon/cxxreact/BUCK +2 -4
  897. package/ReactCommon/cxxreact/CxxNativeModule.cpp +28 -0
  898. package/ReactCommon/cxxreact/CxxNativeModule.h +9 -0
  899. package/ReactCommon/cxxreact/Instance.cpp +21 -1
  900. package/ReactCommon/cxxreact/MethodCall.cpp +2 -2
  901. package/ReactCommon/cxxreact/ModuleRegistry.cpp +5 -0
  902. package/ReactCommon/cxxreact/NativeToJsBridge.cpp +0 -21
  903. package/ReactCommon/cxxreact/NativeToJsBridge.h +0 -6
  904. package/ReactCommon/cxxreact/React-cxxreact.podspec +5 -4
  905. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  906. package/ReactCommon/hermes/React-hermes.podspec +5 -5
  907. package/ReactCommon/hermes/executor/Android.mk +4 -4
  908. package/ReactCommon/hermes/inspector/Android.mk +1 -2
  909. package/ReactCommon/hermes/inspector/BUCK +8 -5
  910. package/ReactCommon/hermes/inspector/chrome/Connection.cpp +115 -0
  911. package/ReactCommon/hermes/inspector/chrome/MessageTypes.cpp +215 -1
  912. package/ReactCommon/hermes/inspector/chrome/MessageTypes.h +115 -1
  913. package/ReactCommon/hermes/inspector/chrome/tests/ConnectionTests.cpp +144 -0
  914. package/ReactCommon/hermes/inspector/tools/message_types.txt +4 -0
  915. package/ReactCommon/hermes/inspector/tools/msggen/__tests__/CommandTest.js +1 -3
  916. package/ReactCommon/hermes/inspector/tools/msggen/__tests__/EventTest.js +1 -3
  917. package/ReactCommon/hermes/inspector/tools/msggen/__tests__/GraphTest.js +1 -3
  918. package/ReactCommon/hermes/inspector/tools/msggen/__tests__/HeaderWriterTest.js +1 -3
  919. package/ReactCommon/hermes/inspector/tools/msggen/__tests__/ImplementationWriterTest.js +1 -3
  920. package/ReactCommon/hermes/inspector/tools/msggen/__tests__/PropertyTest.js +1 -3
  921. package/ReactCommon/hermes/inspector/tools/msggen/__tests__/TypeTest.js +1 -3
  922. package/ReactCommon/hermes/inspector/tools/msggen/package.json +8 -5
  923. package/ReactCommon/hermes/inspector/tools/msggen/src/Command.js +0 -2
  924. package/ReactCommon/hermes/inspector/tools/msggen/src/Converters.js +0 -2
  925. package/ReactCommon/hermes/inspector/tools/msggen/src/Event.js +0 -2
  926. package/ReactCommon/hermes/inspector/tools/msggen/src/Graph.js +0 -2
  927. package/ReactCommon/hermes/inspector/tools/msggen/src/HeaderWriter.js +0 -2
  928. package/ReactCommon/hermes/inspector/tools/msggen/src/ImplementationWriter.js +0 -2
  929. package/ReactCommon/hermes/inspector/tools/msggen/src/Property.js +1 -2
  930. package/ReactCommon/hermes/inspector/tools/msggen/src/TestHelpers.js +1 -3
  931. package/ReactCommon/hermes/inspector/tools/msggen/src/Type.js +0 -2
  932. package/ReactCommon/hermes/inspector/tools/msggen/src/index.js +1 -3
  933. package/ReactCommon/hermes/inspector/tools/msggen/yarn.lock +2246 -1419
  934. package/ReactCommon/jsi/Android.mk +1 -1
  935. package/ReactCommon/jsi/BUCK +1 -3
  936. package/ReactCommon/jsi/JSCRuntime.cpp +7 -0
  937. package/ReactCommon/jsi/React-jsi.podspec +4 -4
  938. package/ReactCommon/jsi/jsi/CMakeLists.txt +1 -1
  939. package/ReactCommon/jsi/jsi/decorator.h +15 -0
  940. package/ReactCommon/jsi/jsi/instrumentation.h +13 -0
  941. package/ReactCommon/jsi/jsi/jsi.cpp +3 -0
  942. package/ReactCommon/jsi/jsi/jsi.h +31 -2
  943. package/ReactCommon/jsi/jsi/jsilib-posix.cpp +1 -11
  944. package/ReactCommon/jsiexecutor/Android.mk +2 -2
  945. package/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +3 -3
  946. package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.cpp +36 -3
  947. package/ReactCommon/jsiexecutor/jsireact/JSINativeModules.cpp +2 -0
  948. package/ReactCommon/jsinspector/BUCK +2 -0
  949. package/ReactCommon/jsinspector/React-jsinspector.podspec +1 -1
  950. package/ReactCommon/logger/Android.mk +23 -0
  951. package/ReactCommon/logger/BUCK +43 -0
  952. package/ReactCommon/logger/React-logger.podspec +40 -0
  953. package/ReactCommon/logger/react_native_log.cpp +52 -0
  954. package/ReactCommon/logger/react_native_log.h +33 -0
  955. package/ReactCommon/react/config/Android.mk +1 -1
  956. package/ReactCommon/react/config/BUCK +1 -1
  957. package/ReactCommon/react/debug/Android.mk +31 -0
  958. package/ReactCommon/react/debug/BUCK +69 -0
  959. package/ReactCommon/react/debug/flags.h +19 -0
  960. package/ReactCommon/react/debug/react_native_assert.cpp +45 -0
  961. package/ReactCommon/react/debug/react_native_assert.h +64 -0
  962. package/ReactCommon/react/nativemodule/core/Android.mk +3 -3
  963. package/ReactCommon/react/nativemodule/core/BUCK +3 -3
  964. package/ReactCommon/react/nativemodule/core/ReactCommon/LongLivedObject.cpp +1 -0
  965. package/ReactCommon/react/nativemodule/core/ReactCommon/LongLivedObject.h +3 -2
  966. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.cpp +1 -1
  967. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +46 -1
  968. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.h +10 -0
  969. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +55 -1
  970. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp +76 -42
  971. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.h +11 -1
  972. package/ReactCommon/react/nativemodule/core/platform/ios/RCTBlockGuard.h +24 -0
  973. package/ReactCommon/react/nativemodule/core/platform/ios/RCTBlockGuard.mm +28 -0
  974. package/ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModule.h +7 -16
  975. package/ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModule.mm +79 -32
  976. package/ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModuleManager.h +0 -7
  977. package/ReactCommon/react/nativemodule/core/platform/ios/RCTTurboModuleManager.mm +123 -127
  978. package/ReactCommon/react/nativemodule/samples/BUCK +4 -5
  979. package/ReactCommon/react/nativemodule/samples/platform/android/Android.mk +2 -2
  980. package/ReactCommon/react/nativemodule/samples/platform/ios/RCTSampleTurboCxxModule.mm +12 -0
  981. package/ReactCommon/react/nativemodule/samples/platform/ios/RCTSampleTurboModule.mm +0 -2
  982. package/ReactCommon/react/renderer/animations/Android.mk +3 -2
  983. package/ReactCommon/react/renderer/animations/BUCK +6 -3
  984. package/ReactCommon/react/renderer/animations/LayoutAnimationCallbackWrapper.h +34 -0
  985. package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.cpp +11 -66
  986. package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.h +8 -13
  987. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.cpp +1117 -1147
  988. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.h +98 -243
  989. package/ReactCommon/react/renderer/animations/conversions.h +212 -0
  990. package/ReactCommon/react/renderer/animations/primitives.h +104 -0
  991. package/ReactCommon/react/renderer/animations/tests/LayoutAnimationTest.cpp +544 -0
  992. package/ReactCommon/react/renderer/animations/utils.cpp +71 -0
  993. package/ReactCommon/react/renderer/animations/utils.h +80 -0
  994. package/ReactCommon/react/renderer/attributedstring/Android.mk +4 -2
  995. package/ReactCommon/react/renderer/attributedstring/AttributedString.h +0 -1
  996. package/ReactCommon/react/renderer/attributedstring/AttributedStringBox.cpp +28 -6
  997. package/ReactCommon/react/renderer/attributedstring/AttributedStringBox.h +2 -2
  998. package/ReactCommon/react/renderer/attributedstring/BUCK +9 -4
  999. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.cpp +7 -3
  1000. package/ReactCommon/react/renderer/attributedstring/ParagraphAttributes.h +12 -2
  1001. package/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +7 -2
  1002. package/ReactCommon/react/renderer/attributedstring/TextAttributes.h +3 -1
  1003. package/ReactCommon/react/renderer/attributedstring/conversions.h +718 -305
  1004. package/ReactCommon/react/renderer/attributedstring/primitives.h +34 -1
  1005. package/ReactCommon/react/renderer/attributedstring/tests/AttributedStringBoxTest.cpp +105 -0
  1006. package/ReactCommon/react/renderer/attributedstring/tests/AttributedStringTest.cpp +17 -20
  1007. package/ReactCommon/react/renderer/attributedstring/tests/ParagraphAttributesTest.cpp +7 -12
  1008. package/ReactCommon/react/renderer/attributedstring/tests/TextAttributesTest.cpp +13 -15
  1009. package/ReactCommon/react/renderer/componentregistry/Android.mk +3 -2
  1010. package/ReactCommon/react/renderer/componentregistry/BUCK +5 -4
  1011. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.cpp +2 -2
  1012. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h +1 -0
  1013. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +17 -67
  1014. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.h +4 -1
  1015. package/ReactCommon/react/renderer/componentregistry/componentNameByReactViewName.cpp +73 -0
  1016. package/ReactCommon/react/renderer/{components/picker/iospicker/PickerShadowNode.cpp → componentregistry/componentNameByReactViewName.h} +7 -2
  1017. package/ReactCommon/react/renderer/componentregistry/native/Android.mk +29 -0
  1018. package/ReactCommon/react/renderer/componentregistry/native/BUCK +58 -0
  1019. package/ReactCommon/react/renderer/componentregistry/native/NativeComponentRegistryBinding.cpp +68 -0
  1020. package/ReactCommon/react/renderer/componentregistry/native/NativeComponentRegistryBinding.h +61 -0
  1021. package/ReactCommon/react/renderer/components/image/Android.mk +5 -3
  1022. package/ReactCommon/react/renderer/components/image/BUCK +7 -3
  1023. package/ReactCommon/react/renderer/components/image/ImageComponentDescriptor.h +3 -2
  1024. package/ReactCommon/react/renderer/components/image/ImageProps.cpp +28 -9
  1025. package/ReactCommon/react/renderer/components/image/ImageProps.h +5 -1
  1026. package/ReactCommon/react/renderer/components/image/ImageState.h +9 -1
  1027. package/ReactCommon/react/renderer/components/image/conversions.h +29 -18
  1028. package/ReactCommon/react/renderer/components/inputaccessory/BUCK +4 -3
  1029. package/ReactCommon/react/renderer/components/inputaccessory/InputAccessoryComponentDescriptor.h +5 -3
  1030. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/BUCK +3 -3
  1031. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.h +1 -1
  1032. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm +17 -4
  1033. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.cpp +5 -10
  1034. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.h +2 -0
  1035. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h +1 -1
  1036. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm +69 -12
  1037. package/ReactCommon/react/renderer/components/modal/Android.mk +4 -3
  1038. package/ReactCommon/react/renderer/components/modal/BUCK +6 -2
  1039. package/ReactCommon/react/renderer/components/modal/ModalHostViewComponentDescriptor.h +5 -3
  1040. package/ReactCommon/react/renderer/components/modal/ModalHostViewState.h +6 -0
  1041. package/ReactCommon/react/renderer/components/progressbar/Android.mk +3 -3
  1042. package/ReactCommon/react/renderer/components/progressbar/BUCK +4 -3
  1043. package/ReactCommon/react/renderer/components/progressbar/android/react/renderer/components/progressbar/AndroidProgressBarComponentDescriptor.h +4 -2
  1044. package/ReactCommon/react/renderer/components/root/Android.mk +4 -3
  1045. package/ReactCommon/react/renderer/components/root/BUCK +4 -3
  1046. package/ReactCommon/react/renderer/components/root/RootProps.cpp +12 -2
  1047. package/ReactCommon/react/renderer/components/root/RootProps.h +6 -1
  1048. package/ReactCommon/react/renderer/components/root/RootShadowNode.cpp +7 -1
  1049. package/ReactCommon/react/renderer/components/root/RootShadowNode.h +2 -0
  1050. package/ReactCommon/react/renderer/components/root/tests/RootShadowNodeTest.cpp +35 -3
  1051. package/ReactCommon/react/renderer/components/safeareaview/BUCK +4 -3
  1052. package/ReactCommon/react/renderer/components/safeareaview/SafeAreaViewComponentDescriptor.h +5 -3
  1053. package/ReactCommon/react/renderer/components/scrollview/Android.mk +5 -3
  1054. package/ReactCommon/react/renderer/components/scrollview/BUCK +6 -3
  1055. package/ReactCommon/react/renderer/components/scrollview/ScrollViewProps.cpp +59 -6
  1056. package/ReactCommon/react/renderer/components/scrollview/ScrollViewProps.h +10 -5
  1057. package/ReactCommon/react/renderer/components/scrollview/ScrollViewShadowNode.cpp +23 -2
  1058. package/ReactCommon/react/renderer/components/scrollview/ScrollViewShadowNode.h +1 -0
  1059. package/ReactCommon/react/renderer/components/scrollview/ScrollViewState.cpp +1 -1
  1060. package/ReactCommon/react/renderer/components/scrollview/ScrollViewState.h +12 -2
  1061. package/ReactCommon/react/renderer/components/scrollview/conversions.h +5 -0
  1062. package/ReactCommon/react/renderer/components/slider/Android.mk +4 -3
  1063. package/ReactCommon/react/renderer/components/slider/BUCK +5 -3
  1064. package/ReactCommon/react/renderer/components/slider/SliderComponentDescriptor.h +4 -2
  1065. package/ReactCommon/react/renderer/components/slider/SliderState.h +8 -0
  1066. package/ReactCommon/react/renderer/components/slider/platform/ios/SliderMeasurementsManager.cpp +3 -1
  1067. package/ReactCommon/react/renderer/components/switch/Android.mk +3 -3
  1068. package/ReactCommon/react/renderer/components/switch/BUCK +3 -3
  1069. package/ReactCommon/react/renderer/components/switch/androidswitch/react/renderer/components/androidswitch/AndroidSwitchComponentDescriptor.h +4 -2
  1070. package/ReactCommon/react/renderer/components/text/Android.mk +5 -3
  1071. package/ReactCommon/react/renderer/components/text/BUCK +10 -4
  1072. package/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +32 -0
  1073. package/ReactCommon/react/renderer/components/text/BaseTextProps.h +5 -1
  1074. package/ReactCommon/react/renderer/components/text/BaseTextShadowNode.cpp +2 -3
  1075. package/ReactCommon/react/renderer/components/text/ParagraphComponentDescriptor.h +5 -24
  1076. package/ReactCommon/react/renderer/components/text/ParagraphProps.cpp +15 -6
  1077. package/ReactCommon/react/renderer/components/text/ParagraphProps.h +5 -1
  1078. package/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp +9 -16
  1079. package/ReactCommon/react/renderer/components/text/ParagraphShadowNode.h +7 -6
  1080. package/ReactCommon/react/renderer/components/text/ParagraphState.cpp +4 -0
  1081. package/ReactCommon/react/renderer/components/text/ParagraphState.h +8 -3
  1082. package/ReactCommon/react/renderer/components/text/RawTextProps.cpp +3 -2
  1083. package/ReactCommon/react/renderer/components/text/RawTextProps.h +5 -1
  1084. package/ReactCommon/react/renderer/components/text/RawTextShadowNode.h +36 -2
  1085. package/ReactCommon/react/renderer/components/text/TextProps.cpp +6 -3
  1086. package/ReactCommon/react/renderer/components/text/TextProps.h +5 -1
  1087. package/ReactCommon/react/renderer/components/text/TextShadowNode.h +23 -0
  1088. package/ReactCommon/react/renderer/components/text/conversions.h +22 -0
  1089. package/ReactCommon/react/renderer/components/text/tests/ParagraphLocalDataTest.cpp +8 -5
  1090. package/ReactCommon/react/renderer/components/textinput/Android.mk +5 -3
  1091. package/ReactCommon/react/renderer/components/textinput/BUCK +8 -4
  1092. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputComponentDescriptor.h +8 -5
  1093. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputProps.cpp +58 -91
  1094. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputProps.h +10 -6
  1095. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.cpp +2 -8
  1096. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.h +5 -5
  1097. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputState.cpp +0 -3
  1098. package/ReactCommon/react/renderer/components/textinput/androidtextinput/react/renderer/components/androidtextinput/AndroidTextInputState.h +5 -8
  1099. package/ReactCommon/react/renderer/components/textinput/iostextinput/BUCK +5 -4
  1100. package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputComponentDescriptor.h +4 -2
  1101. package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputProps.cpp +46 -22
  1102. package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputProps.h +6 -5
  1103. package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputShadowNode.cpp +3 -2
  1104. package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputShadowNode.h +6 -6
  1105. package/ReactCommon/react/renderer/components/textinput/iostextinput/TextInputState.h +2 -0
  1106. package/ReactCommon/react/renderer/components/textinput/iostextinput/conversions.h +19 -7
  1107. package/ReactCommon/react/renderer/components/textinput/iostextinput/primitives.h +6 -0
  1108. package/ReactCommon/react/renderer/components/textinput/iostextinput/propsConversions.h +63 -2
  1109. package/ReactCommon/react/renderer/components/unimplementedview/Android.mk +4 -3
  1110. package/ReactCommon/react/renderer/components/unimplementedview/BUCK +4 -3
  1111. package/ReactCommon/react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.cpp +8 -3
  1112. package/ReactCommon/react/renderer/components/unimplementedview/UnimplementedViewComponentDescriptor.h +5 -2
  1113. package/ReactCommon/react/renderer/components/unimplementedview/UnimplementedViewProps.h +1 -0
  1114. package/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +28 -0
  1115. package/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +24 -1
  1116. package/ReactCommon/react/renderer/components/view/AccessibilityProps.h +4 -1
  1117. package/ReactCommon/react/renderer/components/view/Android.mk +6 -4
  1118. package/ReactCommon/react/renderer/components/view/BUCK +5 -3
  1119. package/ReactCommon/react/renderer/components/view/TouchEventEmitter.cpp +19 -5
  1120. package/ReactCommon/react/renderer/components/view/TouchEventEmitter.h +2 -1
  1121. package/ReactCommon/react/renderer/components/view/ViewComponentDescriptor.h +0 -22
  1122. package/ReactCommon/react/renderer/components/view/ViewEventEmitter.cpp +1 -1
  1123. package/ReactCommon/react/renderer/components/view/ViewProps.cpp +62 -14
  1124. package/ReactCommon/react/renderer/components/view/ViewProps.h +7 -1
  1125. package/ReactCommon/react/renderer/components/view/ViewPropsInterpolation.h +5 -8
  1126. package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +5 -19
  1127. package/ReactCommon/react/renderer/components/view/ViewShadowNode.h +1 -1
  1128. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +147 -78
  1129. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.h +4 -9
  1130. package/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp +3 -2
  1131. package/ReactCommon/react/renderer/components/view/YogaStylableProps.h +2 -0
  1132. package/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +99 -24
  1133. package/ReactCommon/react/renderer/components/view/conversions.h +89 -45
  1134. package/ReactCommon/react/renderer/components/view/primitives.h +5 -4
  1135. package/ReactCommon/react/renderer/components/view/propsConversions.h +163 -28
  1136. package/ReactCommon/react/renderer/components/view/tests/ViewTest.cpp +11 -2
  1137. package/ReactCommon/react/renderer/core/Android.mk +4 -2
  1138. package/ReactCommon/react/renderer/core/BUCK +7 -4
  1139. package/ReactCommon/react/renderer/core/BatchedEventQueue.cpp +2 -34
  1140. package/ReactCommon/react/renderer/core/BatchedEventQueue.h +2 -9
  1141. package/ReactCommon/react/renderer/core/ComponentDescriptor.h +6 -3
  1142. package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +28 -27
  1143. package/ReactCommon/react/renderer/core/ConcreteShadowNode.h +11 -5
  1144. package/ReactCommon/react/renderer/core/ConcreteState.h +7 -3
  1145. package/ReactCommon/react/renderer/core/DynamicPropsUtilities.cpp +35 -0
  1146. package/ReactCommon/react/renderer/{components/picker/iospicker/PickerState.h → core/DynamicPropsUtilities.h} +5 -4
  1147. package/ReactCommon/react/renderer/core/EventDispatcher.cpp +9 -15
  1148. package/ReactCommon/react/renderer/core/EventDispatcher.h +5 -10
  1149. package/ReactCommon/react/renderer/core/EventEmitter.cpp +22 -12
  1150. package/ReactCommon/react/renderer/core/EventEmitter.h +7 -2
  1151. package/ReactCommon/react/renderer/core/EventPipe.h +2 -0
  1152. package/ReactCommon/react/renderer/core/EventPriority.h +1 -1
  1153. package/ReactCommon/react/renderer/core/EventQueue.cpp +39 -36
  1154. package/ReactCommon/react/renderer/core/EventQueue.h +14 -8
  1155. package/ReactCommon/react/renderer/core/EventQueueProcessor.cpp +82 -0
  1156. package/ReactCommon/react/renderer/core/EventQueueProcessor.h +36 -0
  1157. package/ReactCommon/react/renderer/core/EventTarget.cpp +4 -2
  1158. package/ReactCommon/react/renderer/core/LayoutConstraints.h +6 -0
  1159. package/ReactCommon/react/renderer/core/LayoutMetrics.cpp +65 -0
  1160. package/ReactCommon/react/renderer/core/LayoutMetrics.h +35 -2
  1161. package/ReactCommon/react/renderer/core/LayoutPrimitives.h +14 -6
  1162. package/ReactCommon/react/renderer/core/LayoutableShadowNode.cpp +1 -1
  1163. package/ReactCommon/react/renderer/core/LayoutableShadowNode.h +2 -7
  1164. package/ReactCommon/react/renderer/core/Props.cpp +10 -2
  1165. package/ReactCommon/react/renderer/core/Props.h +6 -1
  1166. package/ReactCommon/react/renderer/core/PropsParserContext.h +29 -0
  1167. package/ReactCommon/react/renderer/core/RawEvent.cpp +4 -2
  1168. package/ReactCommon/react/renderer/core/RawEvent.h +40 -3
  1169. package/ReactCommon/react/renderer/core/RawProps.cpp +5 -3
  1170. package/ReactCommon/react/renderer/core/RawProps.h +3 -1
  1171. package/ReactCommon/react/renderer/core/RawPropsKey.cpp +18 -7
  1172. package/ReactCommon/react/renderer/core/RawPropsKeyMap.cpp +8 -6
  1173. package/ReactCommon/react/renderer/core/RawPropsParser.cpp +10 -7
  1174. package/ReactCommon/react/renderer/core/RawPropsParser.h +11 -2
  1175. package/ReactCommon/react/renderer/core/RawValue.h +9 -7
  1176. package/ReactCommon/react/renderer/core/ReactEventPriority.h +43 -0
  1177. package/ReactCommon/react/renderer/core/ReactPrimitives.h +34 -2
  1178. package/ReactCommon/react/renderer/core/Sealable.cpp +4 -3
  1179. package/ReactCommon/react/renderer/core/Sealable.h +5 -1
  1180. package/ReactCommon/react/renderer/core/ShadowNode.cpp +42 -13
  1181. package/ReactCommon/react/renderer/core/ShadowNode.h +14 -4
  1182. package/ReactCommon/react/renderer/core/ShadowNodeFamily.cpp +2 -1
  1183. package/ReactCommon/react/renderer/core/ShadowNodeFamily.h +2 -1
  1184. package/ReactCommon/react/renderer/core/ShadowNodeTraits.h +17 -1
  1185. package/ReactCommon/react/renderer/core/State.h +3 -0
  1186. package/ReactCommon/react/renderer/core/StateData.h +3 -0
  1187. package/ReactCommon/react/renderer/core/propsConversions.h +19 -9
  1188. package/ReactCommon/react/renderer/core/tests/ComponentDescriptorTest.cpp +16 -4
  1189. package/ReactCommon/react/renderer/core/tests/ConcreteShadowNodeTest.cpp +1 -1
  1190. package/ReactCommon/react/renderer/core/tests/DynamicPropsUtilitiesTest.cpp +66 -0
  1191. package/ReactCommon/react/renderer/core/tests/EventQueueProcessorTest.cpp +134 -0
  1192. package/ReactCommon/react/renderer/core/tests/RawPropsTest.cpp +99 -30
  1193. package/ReactCommon/react/renderer/core/tests/TestComponent.h +11 -7
  1194. package/ReactCommon/react/renderer/core/tests/traitCastTest.cpp +31 -0
  1195. package/ReactCommon/react/renderer/debug/Android.mk +1 -1
  1196. package/ReactCommon/react/renderer/debug/BUCK +4 -6
  1197. package/ReactCommon/react/renderer/debug/DebugStringConvertible.h +11 -25
  1198. package/ReactCommon/react/renderer/debug/flags.h +50 -0
  1199. package/ReactCommon/react/renderer/element/BUCK +3 -3
  1200. package/ReactCommon/react/renderer/graphics/Android.mk +7 -3
  1201. package/ReactCommon/react/renderer/graphics/BUCK +16 -4
  1202. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +4 -3
  1203. package/ReactCommon/react/renderer/graphics/Transform.cpp +5 -4
  1204. package/ReactCommon/react/renderer/graphics/Transform.h +1 -1
  1205. package/ReactCommon/react/renderer/graphics/conversions.h +102 -44
  1206. package/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h +67 -0
  1207. package/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/Color.cpp +14 -6
  1208. package/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/Color.h +2 -0
  1209. package/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/PlatformColorParser.h +29 -0
  1210. package/ReactCommon/react/renderer/graphics/platform/ios/Color.cpp +14 -6
  1211. package/ReactCommon/react/renderer/graphics/platform/ios/Color.h +44 -1
  1212. package/ReactCommon/react/renderer/graphics/platform/ios/PlatformColorParser.h +34 -0
  1213. package/ReactCommon/react/renderer/graphics/platform/ios/RCTPlatformColorUtils.h +12 -0
  1214. package/ReactCommon/react/renderer/graphics/platform/ios/RCTPlatformColorUtils.mm +206 -0
  1215. package/ReactCommon/react/renderer/imagemanager/Android.mk +3 -2
  1216. package/ReactCommon/react/renderer/imagemanager/BUCK +5 -4
  1217. package/ReactCommon/react/renderer/imagemanager/ImageResponseObserverCoordinator.cpp +5 -4
  1218. package/ReactCommon/react/renderer/imagemanager/platform/ios/RCTImagePrimitivesConversions.h +8 -6
  1219. package/ReactCommon/react/renderer/imagemanager/platform/ios/RCTSyncImageManager.mm +1 -1
  1220. package/ReactCommon/react/renderer/leakchecker/Android.mk +29 -0
  1221. package/ReactCommon/react/renderer/{components/picker/iospicker → leakchecker}/BUCK +8 -12
  1222. package/ReactCommon/react/renderer/leakchecker/LeakChecker.cpp +60 -0
  1223. package/ReactCommon/react/renderer/leakchecker/LeakChecker.h +39 -0
  1224. package/ReactCommon/react/renderer/leakchecker/WeakFamilyRegistry.cpp +37 -0
  1225. package/ReactCommon/react/renderer/leakchecker/WeakFamilyRegistry.h +39 -0
  1226. package/ReactCommon/react/renderer/mapbuffer/Android.mk +9 -6
  1227. package/ReactCommon/react/renderer/mapbuffer/BUCK +14 -5
  1228. package/ReactCommon/react/renderer/mapbuffer/MapBuffer.cpp +131 -4
  1229. package/ReactCommon/react/renderer/mapbuffer/MapBuffer.h +40 -4
  1230. package/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.cpp +226 -0
  1231. package/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h +94 -0
  1232. package/ReactCommon/react/renderer/mapbuffer/primitives.h +91 -0
  1233. package/ReactCommon/react/renderer/mapbuffer/tests/MapBufferTest.cpp +141 -5
  1234. package/ReactCommon/react/renderer/mounting/Android.mk +5 -2
  1235. package/ReactCommon/react/renderer/mounting/BUCK +6 -3
  1236. package/ReactCommon/react/renderer/mounting/Differentiator.cpp +794 -620
  1237. package/ReactCommon/react/renderer/mounting/Differentiator.h +31 -4
  1238. package/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp +4 -2
  1239. package/ReactCommon/react/renderer/mounting/MountingCoordinator.h +1 -4
  1240. package/ReactCommon/react/renderer/mounting/MountingOverrideDelegate.h +1 -1
  1241. package/ReactCommon/react/renderer/mounting/MountingTransaction.h +2 -2
  1242. package/ReactCommon/react/renderer/mounting/MountingTransactionMetadata.h +1 -1
  1243. package/ReactCommon/react/renderer/mounting/ShadowTree.cpp +19 -15
  1244. package/ReactCommon/react/renderer/mounting/ShadowTree.h +11 -4
  1245. package/ReactCommon/react/renderer/mounting/ShadowTreeRegistry.cpp +3 -1
  1246. package/ReactCommon/react/renderer/mounting/ShadowTreeRevision.h +1 -1
  1247. package/ReactCommon/react/renderer/mounting/ShadowView.cpp +15 -1
  1248. package/ReactCommon/react/renderer/mounting/ShadowView.h +45 -2
  1249. package/ReactCommon/react/renderer/mounting/ShadowViewMutation.cpp +28 -0
  1250. package/ReactCommon/react/renderer/mounting/ShadowViewMutation.h +17 -0
  1251. package/ReactCommon/react/renderer/mounting/StubView.cpp +21 -2
  1252. package/ReactCommon/react/renderer/mounting/StubView.h +3 -0
  1253. package/ReactCommon/react/renderer/mounting/StubViewTree.cpp +204 -77
  1254. package/ReactCommon/react/renderer/mounting/TelemetryController.cpp +1 -1
  1255. package/ReactCommon/react/renderer/mounting/TelemetryController.h +1 -1
  1256. package/ReactCommon/react/renderer/mounting/stubs.cpp +5 -4
  1257. package/ReactCommon/react/renderer/mounting/tests/MountingTest.cpp +13 -2
  1258. package/ReactCommon/react/renderer/mounting/tests/ShadowTreeLifeCycleTest.cpp +232 -9
  1259. package/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp +18 -8
  1260. package/ReactCommon/react/renderer/runtimescheduler/Android.mk +28 -0
  1261. package/ReactCommon/react/renderer/runtimescheduler/BUCK +77 -0
  1262. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +118 -0
  1263. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.h +105 -0
  1264. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.cpp +171 -0
  1265. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerBinding.h +44 -0
  1266. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.cpp +30 -0
  1267. package/ReactCommon/react/renderer/runtimescheduler/RuntimeSchedulerCallInvoker.h +34 -0
  1268. package/ReactCommon/react/renderer/{components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerComponentDescriptor.h → runtimescheduler/RuntimeSchedulerClock.h} +8 -5
  1269. package/ReactCommon/react/renderer/runtimescheduler/SchedulerPriority.h +65 -0
  1270. package/ReactCommon/react/renderer/runtimescheduler/Task.cpp +37 -0
  1271. package/ReactCommon/react/renderer/runtimescheduler/Task.h +48 -0
  1272. package/ReactCommon/react/renderer/runtimescheduler/primitives.h +41 -0
  1273. package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +472 -0
  1274. package/ReactCommon/react/renderer/runtimescheduler/tests/SchedulerPriorityTest.cpp +46 -0
  1275. package/ReactCommon/react/renderer/runtimescheduler/tests/StubClock.h +41 -0
  1276. package/ReactCommon/react/renderer/runtimescheduler/tests/StubQueue.h +38 -0
  1277. package/ReactCommon/react/renderer/scheduler/Android.mk +4 -2
  1278. package/ReactCommon/react/renderer/scheduler/AsynchronousEventBeat.cpp +16 -13
  1279. package/ReactCommon/react/renderer/scheduler/AsynchronousEventBeat.h +4 -4
  1280. package/ReactCommon/react/renderer/scheduler/BUCK +5 -3
  1281. package/ReactCommon/react/renderer/{components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerShadowNode.cpp → scheduler/InspectorData.h} +10 -2
  1282. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +81 -132
  1283. package/ReactCommon/react/renderer/scheduler/Scheduler.h +32 -35
  1284. package/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +12 -10
  1285. package/ReactCommon/react/renderer/scheduler/SchedulerToolbox.h +2 -0
  1286. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp +317 -0
  1287. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.h +209 -0
  1288. package/ReactCommon/react/renderer/scheduler/SurfaceManager.cpp +104 -0
  1289. package/ReactCommon/react/renderer/scheduler/SurfaceManager.h +67 -0
  1290. package/ReactCommon/react/renderer/scheduler/SynchronousEventBeat.cpp +14 -5
  1291. package/ReactCommon/react/renderer/scheduler/SynchronousEventBeat.h +4 -1
  1292. package/ReactCommon/react/renderer/telemetry/Android.mk +31 -0
  1293. package/ReactCommon/react/renderer/telemetry/BUCK +84 -0
  1294. package/ReactCommon/react/renderer/{mounting → telemetry}/SurfaceTelemetry.cpp +5 -0
  1295. package/ReactCommon/react/renderer/{mounting → telemetry}/SurfaceTelemetry.h +3 -1
  1296. package/ReactCommon/react/renderer/telemetry/TransactionTelemetry.cpp +163 -0
  1297. package/ReactCommon/react/renderer/{mounting → telemetry}/TransactionTelemetry.h +11 -0
  1298. package/ReactCommon/react/renderer/telemetry/tests/TransactionTelemetryTest.cpp +176 -0
  1299. package/ReactCommon/react/renderer/templateprocessor/Android.mk +1 -1
  1300. package/ReactCommon/react/renderer/templateprocessor/BUCK +3 -3
  1301. package/ReactCommon/react/renderer/templateprocessor/UITemplateProcessor.cpp +5 -5
  1302. package/ReactCommon/react/renderer/textlayoutmanager/Android.mk +5 -2
  1303. package/ReactCommon/react/renderer/textlayoutmanager/BUCK +5 -3
  1304. package/ReactCommon/react/renderer/textlayoutmanager/TextMeasureCache.cpp +12 -9
  1305. package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp +132 -3
  1306. package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.h +17 -1
  1307. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.h +2 -0
  1308. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/RCTAttributedTextUtils.mm +22 -0
  1309. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/TextLayoutManager.mm +25 -3
  1310. package/ReactCommon/react/renderer/{components/picker → timeline}/BUCK +14 -28
  1311. package/ReactCommon/react/renderer/timeline/Timeline.cpp +120 -0
  1312. package/ReactCommon/react/renderer/timeline/Timeline.h +63 -0
  1313. package/ReactCommon/react/renderer/timeline/TimelineController.cpp +77 -0
  1314. package/ReactCommon/react/renderer/timeline/TimelineController.h +80 -0
  1315. package/ReactCommon/react/renderer/timeline/TimelineFrame.cpp +25 -0
  1316. package/ReactCommon/react/renderer/timeline/TimelineFrame.h +46 -0
  1317. package/ReactCommon/react/renderer/timeline/TimelineHandler.cpp +97 -0
  1318. package/ReactCommon/react/renderer/timeline/TimelineHandler.h +80 -0
  1319. package/ReactCommon/react/renderer/timeline/TimelineSnapshot.cpp +30 -0
  1320. package/ReactCommon/react/renderer/timeline/TimelineSnapshot.h +36 -0
  1321. package/ReactCommon/react/renderer/uimanager/Android.mk +4 -2
  1322. package/ReactCommon/react/renderer/uimanager/BUCK +5 -3
  1323. package/ReactCommon/react/renderer/uimanager/LayoutAnimationStatusDelegate.h +2 -4
  1324. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +121 -36
  1325. package/ReactCommon/react/renderer/uimanager/UIManager.h +40 -21
  1326. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h +3 -5
  1327. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +201 -77
  1328. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.h +29 -6
  1329. package/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h +2 -4
  1330. package/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +16 -15
  1331. package/ReactCommon/react/renderer/uimanager/primitives.h +57 -9
  1332. package/ReactCommon/react/test_utils/BUCK +57 -0
  1333. package/ReactCommon/react/{renderer/mounting/tests → test_utils}/Entropy.h +4 -0
  1334. package/ReactCommon/react/test_utils/MockClock.h +29 -0
  1335. package/ReactCommon/react/{renderer/components/picker/iospicker/PickerEventEmitter.h → test_utils/MockSurfaceHandler.h} +6 -9
  1336. package/ReactCommon/react/{renderer/mounting/tests → test_utils}/shadowTreeGeneration.h +61 -5
  1337. package/ReactCommon/react/utils/Android.mk +8 -3
  1338. package/ReactCommon/react/utils/BUCK +9 -2
  1339. package/ReactCommon/react/utils/CalledOnceMovableOnlyFunction.h +6 -4
  1340. package/ReactCommon/react/utils/ContextContainer.h +4 -24
  1341. package/ReactCommon/react/utils/LayoutManager.h +56 -0
  1342. package/ReactCommon/react/utils/ManagedObjectWrapper.h +3 -1
  1343. package/ReactCommon/react/utils/RunLoopObserver.cpp +5 -4
  1344. package/ReactCommon/reactperflogger/Android.mk +1 -1
  1345. package/ReactCommon/reactperflogger/BUCK +1 -1
  1346. package/ReactCommon/reactperflogger/React-perflogger.podspec +2 -2
  1347. package/ReactCommon/runtimeexecutor/Android.mk +1 -1
  1348. package/ReactCommon/runtimeexecutor/BUCK +2 -2
  1349. package/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec +2 -2
  1350. package/ReactCommon/runtimeexecutor/ReactCommon/RuntimeExecutor.h +14 -2
  1351. package/ReactCommon/yoga/Yoga.podspec +1 -1
  1352. package/ReactCommon/yoga/yoga/BitUtils.h +3 -2
  1353. package/ReactCommon/yoga/yoga/Utils.cpp +1 -1
  1354. package/ReactCommon/yoga/yoga/YGNode.cpp +111 -110
  1355. package/ReactCommon/yoga/yoga/YGNode.h +11 -0
  1356. package/ReactCommon/yoga/yoga/YGNodePrint.cpp +7 -4
  1357. package/ReactCommon/yoga/yoga/Yoga-internal.h +4 -5
  1358. package/ReactCommon/yoga/yoga/Yoga.cpp +114 -159
  1359. package/ReactCommon/yoga/yoga/Yoga.h +1 -1
  1360. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar +0 -0
  1361. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar.md5 +1 -0
  1362. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar.sha1 +1 -0
  1363. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar.sha256 +1 -0
  1364. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.aar.sha512 +1 -0
  1365. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module +272 -0
  1366. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module.md5 +1 -0
  1367. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module.sha1 +1 -0
  1368. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module.sha256 +1 -0
  1369. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.module.sha512 +1 -0
  1370. package/android/com/facebook/react/react-native/{0.0.0-201c10733/react-native-0.0.0-201c10733.pom → 0.0.0-268efb102/react-native-0.0.0-268efb102.pom} +24 -13
  1371. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.pom.md5 +1 -0
  1372. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.pom.sha1 +1 -0
  1373. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.pom.sha256 +1 -0
  1374. package/android/com/facebook/react/react-native/0.0.0-268efb102/react-native-0.0.0-268efb102.pom.sha512 +1 -0
  1375. package/android/com/facebook/react/react-native/maven-metadata.xml +4 -3
  1376. package/android/com/facebook/react/react-native/maven-metadata.xml.md5 +1 -1
  1377. package/android/com/facebook/react/react-native/maven-metadata.xml.sha1 +1 -1
  1378. package/android/com/facebook/react/react-native/maven-metadata.xml.sha256 +1 -0
  1379. package/android/com/facebook/react/react-native/maven-metadata.xml.sha512 +1 -0
  1380. package/flow/HermesInternalType.js +114 -0
  1381. package/flow/global.js +68 -0
  1382. package/flow-typed/npm/react-test-renderer_v16.x.x.js +79 -0
  1383. package/index.js +122 -60
  1384. package/jest/preprocessor.js +75 -7
  1385. package/jest/renderer.js +3 -9
  1386. package/jest/setup.js +21 -15
  1387. package/package.json +61 -21
  1388. package/react.gradle +47 -25
  1389. package/scripts/find-node.sh +39 -0
  1390. package/scripts/generate-specs-cli.js +20 -2
  1391. package/scripts/ios-configure-glog.sh +4 -0
  1392. package/scripts/react-native-xcode.sh +7 -23
  1393. package/scripts/react_native_pods.rb +215 -47
  1394. package/template/_flowconfig +3 -4
  1395. package/template/_gitignore +1 -0
  1396. package/template/android/app/build.gradle +12 -7
  1397. package/template/android/app/src/main/res/values/styles.xml +0 -1
  1398. package/template/android/build.gradle +7 -8
  1399. package/template/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  1400. package/template/android/gradle.properties +1 -1
  1401. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +2 -0
  1402. package/template/ios/Podfile +1 -0
  1403. package/template/package.json +4 -5
  1404. package/third-party-podspecs/DoubleConversion.podspec +1 -1
  1405. package/third-party-podspecs/RCT-Folly.podspec +31 -11
  1406. package/third-party-podspecs/boost.podspec +23 -0
  1407. package/third-party-podspecs/glog.podspec +1 -1
  1408. package/Libraries/BUCK +0 -56
  1409. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js +0 -169
  1410. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.ios.js +0 -280
  1411. package/Libraries/Components/DatePickerAndroid/DatePickerAndroid.android.js +0 -89
  1412. package/Libraries/Components/DatePickerAndroid/DatePickerAndroid.ios.js +0 -30
  1413. package/Libraries/Components/DatePickerAndroid/DatePickerAndroidTypes.js +0 -30
  1414. package/Libraries/Components/Picker/AndroidDialogPickerNativeComponent.js +0 -82
  1415. package/Libraries/Components/Picker/AndroidDialogPickerViewConfig.js +0 -30
  1416. package/Libraries/Components/Picker/AndroidDropdownPickerNativeComponent.js +0 -69
  1417. package/Libraries/Components/Picker/Picker.js +0 -165
  1418. package/Libraries/Components/Picker/PickerAndroid.android.js +0 -145
  1419. package/Libraries/Components/Picker/PickerIOS.android.js +0 -14
  1420. package/Libraries/Components/Picker/PickerIOS.ios.js +0 -164
  1421. package/Libraries/Components/Picker/RCTPickerNativeComponent.js +0 -72
  1422. package/Libraries/Components/Picker/RCTPickerViewConfig.js +0 -41
  1423. package/Libraries/Components/ScrollResponder.js +0 -797
  1424. package/Libraries/Components/StaticContainer.react.js +0 -51
  1425. package/Libraries/Components/StatusBar/StatusBarIOS.js +0 -35
  1426. package/Libraries/Components/Touchable/ensurePositiveDelayProps.js +0 -26
  1427. package/Libraries/Interaction/InteractionMixin.js +0 -55
  1428. package/Libraries/ReactNative/queryLayoutByID.js +0 -58
  1429. package/Libraries/StyleSheet/StyleSheetValidation.js +0 -100
  1430. package/Libraries/Utilities/registerGeneratedViewConfig.js +0 -36
  1431. package/Libraries/promiseRejectionIsError.js +0 -24
  1432. package/React/Base/RCTJSInvokerModule.h +0 -18
  1433. package/React/Fabric/Mounting/ComponentViews/Picker/RCTPickerComponentView.h +0 -19
  1434. package/React/Fabric/Mounting/ComponentViews/Picker/RCTPickerComponentView.mm +0 -206
  1435. package/React/Views/RCTPicker.h +0 -23
  1436. package/React/Views/RCTPicker.m +0 -122
  1437. package/React/Views/RCTPickerManager.m +0 -68
  1438. package/ReactAndroid/release.gradle +0 -87
  1439. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/DatePickerDialogTestCase.java +0 -172
  1440. package/ReactAndroid/src/androidTest/java/com/facebook/react/tests/ReactPickerTestCase.java +0 -196
  1441. package/ReactAndroid/src/androidTest/js/DatePickerDialogTestModule.js +0 -45
  1442. package/ReactAndroid/src/androidTest/js/PickerAndroidTestModule.js +0 -89
  1443. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java +0 -82
  1444. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/BUCK +0 -27
  1445. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogFragment.java +0 -137
  1446. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DatePickerDialogModule.java +0 -147
  1447. package/ReactAndroid/src/main/java/com/facebook/react/modules/datepicker/DismissableDatePickerDialog.java +0 -117
  1448. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDialogPickerManagerDelegate.java +0 -48
  1449. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDialogPickerManagerInterface.java +0 -23
  1450. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDropdownPickerManagerDelegate.java +0 -48
  1451. package/ReactAndroid/src/main/java/com/facebook/react/viewmanagers/AndroidDropdownPickerManagerInterface.java +0 -22
  1452. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/BUCK +0 -30
  1453. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactDialogPickerManager.java +0 -51
  1454. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactDropdownPickerManager.java +0 -50
  1455. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPicker.java +0 -196
  1456. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerAdapter.java +0 -95
  1457. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerItem.java +0 -43
  1458. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/ReactPickerManager.java +0 -97
  1459. package/ReactAndroid/src/main/java/com/facebook/react/views/picker/events/PickerItemSelectEvent.java +0 -40
  1460. package/ReactCommon/cxxreact/re_worker_requirements +0 -6
  1461. package/ReactCommon/react/renderer/components/picker/Android.mk +0 -37
  1462. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerEventEmitter.cpp +0 -23
  1463. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerEventEmitter.h +0 -27
  1464. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerProps.cpp +0 -28
  1465. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerProps.h +0 -77
  1466. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDialogPickerShadowNode.h +0 -29
  1467. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerEventEmitter.cpp +0 -23
  1468. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerEventEmitter.h +0 -27
  1469. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerProps.cpp +0 -28
  1470. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerProps.h +0 -77
  1471. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerShadowNode.cpp +0 -17
  1472. package/ReactCommon/react/renderer/components/picker/androidpicker/react/renderer/components/androidpicker/AndroidDropdownPickerShadowNode.h +0 -29
  1473. package/ReactCommon/react/renderer/components/picker/iospicker/PickerComponentDescriptor.h +0 -26
  1474. package/ReactCommon/react/renderer/components/picker/iospicker/PickerEventEmitter.cpp +0 -23
  1475. package/ReactCommon/react/renderer/components/picker/iospicker/PickerProps.cpp +0 -46
  1476. package/ReactCommon/react/renderer/components/picker/iospicker/PickerProps.h +0 -36
  1477. package/ReactCommon/react/renderer/components/picker/iospicker/PickerShadowNode.h +0 -33
  1478. package/ReactCommon/react/renderer/components/picker/iospicker/conversions.h +0 -47
  1479. package/ReactCommon/react/renderer/mounting/TransactionTelemetry.cpp +0 -142
  1480. package/ReactCommon/react/renderer/mounting/tests/TransactionTelemetryTest.cpp +0 -125
  1481. package/android/com/facebook/react/react-native/0.0.0-201c10733/react-native-0.0.0-201c10733.aar +0 -0
  1482. package/android/com/facebook/react/react-native/0.0.0-201c10733/react-native-0.0.0-201c10733.aar.md5 +0 -1
  1483. package/android/com/facebook/react/react-native/0.0.0-201c10733/react-native-0.0.0-201c10733.aar.sha1 +0 -1
  1484. package/android/com/facebook/react/react-native/0.0.0-201c10733/react-native-0.0.0-201c10733.pom.md5 +0 -1
  1485. package/android/com/facebook/react/react-native/0.0.0-201c10733/react-native-0.0.0-201c10733.pom.sha1 +0 -1
  1486. package/scripts/generate-specs.sh +0 -91
@@ -9,22 +9,35 @@
9
9
 
10
10
  #include <better/map.h>
11
11
  #include <better/small_vector.h>
12
+ #include <react/debug/react_native_assert.h>
12
13
  #include <react/renderer/core/LayoutableShadowNode.h>
13
14
  #include <react/renderer/debug/SystraceSection.h>
14
15
  #include <algorithm>
15
16
  #include "ShadowView.h"
16
17
 
17
- // Uncomment this to enable verbose diffing logs, which can be useful for
18
- // debugging.
19
- // #define DEBUG_LOGS_DIFFER
20
-
21
18
  #ifdef DEBUG_LOGS_DIFFER
22
19
  #include <glog/logging.h>
20
+ #define DEBUG_LOGS_BREADCRUMBS 1
23
21
  #define DEBUG_LOGS(code) code
24
22
  #else
25
23
  #define DEBUG_LOGS(code)
26
24
  #endif
27
25
 
26
+ #ifdef DEBUG_LOGS_BREADCRUMBS
27
+ #define BREADCRUMB_TYPE std::string
28
+ #define DIFF_BREADCRUMB(X) (breadcrumb + " - " + std::string(X))
29
+ #define CREATE_DIFF_BREADCRUMB(X) std::to_string(X)
30
+ #else
31
+
32
+ enum class NoBreadcrumb {};
33
+
34
+ #define BREADCRUMB_TYPE NoBreadcrumb const &
35
+ #define DIFF_BREADCRUMB(X) \
36
+ {}
37
+ #define CREATE_DIFF_BREADCRUMB(X) \
38
+ {}
39
+ #endif
40
+
28
41
  namespace facebook {
29
42
  namespace react {
30
43
 
@@ -86,7 +99,7 @@ class TinyMap final {
86
99
  inline Iterator find(KeyT key) {
87
100
  cleanVector();
88
101
 
89
- assert(key != 0);
102
+ react_native_assert(key != 0);
90
103
 
91
104
  if (begin_() == nullptr) {
92
105
  return end();
@@ -102,7 +115,7 @@ class TinyMap final {
102
115
  }
103
116
 
104
117
  inline void insert(Pair pair) {
105
- assert(pair.first != 0);
118
+ react_native_assert(pair.first != 0);
106
119
  vector_.push_back(pair);
107
120
  }
108
121
 
@@ -156,30 +169,31 @@ class TinyMap final {
156
169
  }
157
170
 
158
171
  better::small_vector<Pair, DefaultSize> vector_;
159
- int numErased_{0};
160
- int erasedAtFront_{0};
172
+ size_t numErased_{0};
173
+ size_t erasedAtFront_{0};
161
174
  };
162
175
 
163
176
  /*
164
177
  * Sorting comparator for `reorderInPlaceIfNeeded`.
165
178
  */
166
179
  static bool shouldFirstPairComesBeforeSecondOne(
167
- ShadowViewNodePair const &lhs,
168
- ShadowViewNodePair const &rhs) noexcept {
169
- return lhs.shadowNode->getOrderIndex() < rhs.shadowNode->getOrderIndex();
180
+ ShadowViewNodePair const *lhs,
181
+ ShadowViewNodePair const *rhs) noexcept {
182
+ return lhs->shadowNode->getOrderIndex() < rhs->shadowNode->getOrderIndex();
170
183
  }
171
184
 
172
185
  /*
173
186
  * Reorders pairs in-place based on `orderIndex` using a stable sort algorithm.
174
187
  */
175
- static void reorderInPlaceIfNeeded(ShadowViewNodePair::List &pairs) noexcept {
188
+ static void reorderInPlaceIfNeeded(
189
+ ShadowViewNodePair::NonOwningList &pairs) noexcept {
176
190
  if (pairs.size() < 2) {
177
191
  return;
178
192
  }
179
193
 
180
194
  auto isReorderNeeded = false;
181
195
  for (auto const &pair : pairs) {
182
- if (pair.shadowNode->getOrderIndex() != 0) {
196
+ if (pair->shadowNode->getOrderIndex() != 0) {
183
197
  isReorderNeeded = true;
184
198
  break;
185
199
  }
@@ -193,8 +207,13 @@ static void reorderInPlaceIfNeeded(ShadowViewNodePair::List &pairs) noexcept {
193
207
  pairs.begin(), pairs.end(), &shouldFirstPairComesBeforeSecondOne);
194
208
  }
195
209
 
210
+ static inline bool shadowNodeIsConcrete(ShadowNode const &shadowNode) {
211
+ return shadowNode.getTraits().check(ShadowNodeTraits::Trait::FormsView);
212
+ }
213
+
196
214
  static void sliceChildShadowNodeViewPairsRecursivelyV2(
197
- ShadowViewNodePair::List &pairList,
215
+ ShadowViewNodePair::NonOwningList &pairList,
216
+ ViewNodePairScope &scope,
198
217
  Point layoutOffset,
199
218
  ShadowNode const &shadowNode) {
200
219
  for (auto const &sharedChildShadowNode : shadowNode.getChildren()) {
@@ -218,25 +237,34 @@ static void sliceChildShadowNodeViewPairsRecursivelyV2(
218
237
  // This might not be a FormsView, or a FormsStackingContext. We let the
219
238
  // differ handle removal of flattened views from the Mounting layer and
220
239
  // shuffling their children around.
221
- bool isConcreteView =
222
- childShadowNode.getTraits().check(ShadowNodeTraits::Trait::FormsView);
240
+ bool isConcreteView = shadowNodeIsConcrete(childShadowNode);
223
241
  bool areChildrenFlattened = !childShadowNode.getTraits().check(
224
242
  ShadowNodeTraits::Trait::FormsStackingContext);
225
- pairList.push_back(
226
- {shadowView, &childShadowNode, areChildrenFlattened, isConcreteView});
227
-
228
- if (!childShadowNode.getTraits().check(
229
- ShadowNodeTraits::Trait::FormsStackingContext)) {
243
+ Point storedOrigin = {};
244
+ if (areChildrenFlattened) {
245
+ storedOrigin = origin;
246
+ }
247
+ scope.push_back(
248
+ {shadowView,
249
+ &childShadowNode,
250
+ areChildrenFlattened,
251
+ isConcreteView,
252
+ storedOrigin});
253
+ pairList.push_back(&scope.back());
254
+
255
+ if (areChildrenFlattened) {
230
256
  sliceChildShadowNodeViewPairsRecursivelyV2(
231
- pairList, origin, childShadowNode);
257
+ pairList, scope, origin, childShadowNode);
232
258
  }
233
259
  }
234
260
  }
235
261
 
236
- ShadowViewNodePair::List sliceChildShadowNodeViewPairsV2(
262
+ ShadowViewNodePair::NonOwningList sliceChildShadowNodeViewPairsV2(
237
263
  ShadowNode const &shadowNode,
238
- bool allowFlattened) {
239
- auto pairList = ShadowViewNodePair::List{};
264
+ ViewNodePairScope &scope,
265
+ bool allowFlattened,
266
+ Point layoutOffset) {
267
+ auto pairList = ShadowViewNodePair::NonOwningList{};
240
268
 
241
269
  if (!shadowNode.getTraits().check(
242
270
  ShadowNodeTraits::Trait::FormsStackingContext) &&
@@ -245,23 +273,41 @@ ShadowViewNodePair::List sliceChildShadowNodeViewPairsV2(
245
273
  return pairList;
246
274
  }
247
275
 
248
- sliceChildShadowNodeViewPairsRecursivelyV2(pairList, {0, 0}, shadowNode);
276
+ sliceChildShadowNodeViewPairsRecursivelyV2(
277
+ pairList, scope, layoutOffset, shadowNode);
249
278
 
250
279
  // Sorting pairs based on `orderIndex` if needed.
251
280
  reorderInPlaceIfNeeded(pairList);
252
281
 
253
282
  // Set list and mountIndex for each after reordering
254
283
  size_t mountIndex = 0;
255
- for (auto &child : pairList) {
256
- child.mountIndex = (child.isConcreteView ? mountIndex++ : -1);
284
+ for (auto child : pairList) {
285
+ child->mountIndex = (child->isConcreteView ? mountIndex++ : -1);
257
286
  }
258
287
 
259
288
  return pairList;
260
289
  }
261
290
 
291
+ /**
292
+ * Prefer calling this over `sliceChildShadowNodeViewPairsV2` directly, when
293
+ * possible. This can account for adding parent LayoutMetrics that are
294
+ * important to take into account, but tricky, in (un)flattening cases.
295
+ */
296
+ static ShadowViewNodePair::NonOwningList
297
+ sliceChildShadowNodeViewPairsFromViewNodePair(
298
+ ShadowViewNodePair const &shadowViewNodePair,
299
+ ViewNodePairScope &scope,
300
+ bool allowFlattened = false) {
301
+ return sliceChildShadowNodeViewPairsV2(
302
+ *shadowViewNodePair.shadowNode,
303
+ scope,
304
+ allowFlattened,
305
+ shadowViewNodePair.contextOrigin);
306
+ }
307
+
262
308
  /*
263
- * Before we start to diff, let's make sure all our core data structures are in
264
- * good shape to deliver the best performance.
309
+ * Before we start to diff, let's make sure all our core data structures are
310
+ * in good shape to deliver the best performance.
265
311
  */
266
312
  static_assert(
267
313
  std::is_move_constructible<ShadowViewMutation>::value,
@@ -273,8 +319,8 @@ static_assert(
273
319
  std::is_move_constructible<ShadowViewNodePair>::value,
274
320
  "`ShadowViewNodePair` must be `move constructible`.");
275
321
  static_assert(
276
- std::is_move_constructible<ShadowViewNodePair::List>::value,
277
- "`ShadowViewNodePair::List` must be `move constructible`.");
322
+ std::is_move_constructible<ShadowViewNodePair::NonOwningList>::value,
323
+ "`ShadowViewNodePair::NonOwningList` must be `move constructible`.");
278
324
 
279
325
  static_assert(
280
326
  std::is_move_assignable<ShadowViewMutation>::value,
@@ -286,29 +332,52 @@ static_assert(
286
332
  std::is_move_assignable<ShadowViewNodePair>::value,
287
333
  "`ShadowViewNodePair` must be `move assignable`.");
288
334
  static_assert(
289
- std::is_move_assignable<ShadowViewNodePair::List>::value,
290
- "`ShadowViewNodePair::List` must be `move assignable`.");
335
+ std::is_move_assignable<ShadowViewNodePair::NonOwningList>::value,
336
+ "`ShadowViewNodePair::NonOwningList` must be `move assignable`.");
291
337
 
292
- // Forward declaration
293
338
  static void calculateShadowViewMutationsV2(
339
+ BREADCRUMB_TYPE breadcrumb,
340
+ ViewNodePairScope &scope,
294
341
  ShadowViewMutation::List &mutations,
295
342
  ShadowView const &parentShadowView,
296
- ShadowViewNodePair::List &&oldChildPairs,
297
- ShadowViewNodePair::List &&newChildPairs);
343
+ ShadowViewNodePair::NonOwningList &&oldChildPairs,
344
+ ShadowViewNodePair::NonOwningList &&newChildPairs);
298
345
 
299
346
  struct OrderedMutationInstructionContainer {
300
- ShadowViewMutation::List &createMutations;
301
- ShadowViewMutation::List &deleteMutations;
302
- ShadowViewMutation::List &insertMutations;
303
- ShadowViewMutation::List &removeMutations;
304
- ShadowViewMutation::List &updateMutations;
305
- ShadowViewMutation::List &downwardMutations;
306
- ShadowViewMutation::List &destructiveDownwardMutations;
347
+ ShadowViewMutation::List createMutations{};
348
+ ShadowViewMutation::List deleteMutations{};
349
+ ShadowViewMutation::List insertMutations{};
350
+ ShadowViewMutation::List removeMutations{};
351
+ ShadowViewMutation::List updateMutations{};
352
+ ShadowViewMutation::List downwardMutations{};
353
+ ShadowViewMutation::List destructiveDownwardMutations{};
307
354
  };
308
355
 
356
+ static void updateMatchedPairSubtrees(
357
+ BREADCRUMB_TYPE breadcrumb,
358
+ ViewNodePairScope &scope,
359
+ OrderedMutationInstructionContainer &mutationContainer,
360
+ TinyMap<Tag, ShadowViewNodePair *> &newRemainingPairs,
361
+ ShadowViewNodePair::NonOwningList &oldChildPairs,
362
+ ShadowViewNodePair::NonOwningList &newChildPairs,
363
+ ShadowView const &parentShadowView,
364
+ ShadowViewNodePair const &oldPair,
365
+ ShadowViewNodePair const &newPair);
366
+
367
+ static void updateMatchedPair(
368
+ BREADCRUMB_TYPE breadcrumb,
369
+ OrderedMutationInstructionContainer &mutationContainer,
370
+ bool oldNodeFoundInOrder,
371
+ bool newNodeFoundInOrder,
372
+ ShadowView const &parentShadowView,
373
+ ShadowViewNodePair const &oldPair,
374
+ ShadowViewNodePair const &newPair);
375
+
309
376
  static void calculateShadowViewMutationsFlattener(
377
+ BREADCRUMB_TYPE breadcrumb,
378
+ ViewNodePairScope &scope,
310
379
  ReparentMode reparentMode,
311
- OrderedMutationInstructionContainer &mutationInstructionContainer,
380
+ OrderedMutationInstructionContainer &mutationContainer,
312
381
  ShadowView const &parentShadowView,
313
382
  TinyMap<Tag, ShadowViewNodePair *> &unvisitedFlattenedNodes,
314
383
  ShadowViewNodePair const &node,
@@ -316,15 +385,210 @@ static void calculateShadowViewMutationsFlattener(
316
385
  TinyMap<Tag, ShadowViewNodePair *> *parentSubVisitedOtherOldNodes =
317
386
  nullptr);
318
387
 
388
+ /**
389
+ * Updates the subtrees of any matched ShadowViewNodePair. This handles
390
+ * all cases of flattening/unflattening.
391
+ *
392
+ * This may modify data-structures passed to it and owned by the caller,
393
+ * specifically `newRemainingPairs`, and so the caller must also own
394
+ * the ViewNodePairScope used within.
395
+ */
396
+ static void updateMatchedPairSubtrees(
397
+ BREADCRUMB_TYPE breadcrumb,
398
+ ViewNodePairScope &scope,
399
+ OrderedMutationInstructionContainer &mutationContainer,
400
+ TinyMap<Tag, ShadowViewNodePair *> &newRemainingPairs,
401
+ ShadowViewNodePair::NonOwningList &oldChildPairs,
402
+ ShadowViewNodePair::NonOwningList &newChildPairs,
403
+ ShadowView const &parentShadowView,
404
+ ShadowViewNodePair const &oldPair,
405
+ ShadowViewNodePair const &newPair) {
406
+ // Are we flattening or unflattening either one? If node was
407
+ // flattened in both trees, there's no change, just continue.
408
+ if (oldPair.flattened && newPair.flattened) {
409
+ return;
410
+ }
411
+
412
+ // We are either flattening or unflattening this node.
413
+ if (oldPair.flattened != newPair.flattened) {
414
+ DEBUG_LOGS({
415
+ LOG(ERROR)
416
+ << "Differ: flattening or unflattening in updateMatchedPairSubtrees: ["
417
+ << oldPair.shadowView.tag << "] [" << newPair.shadowView.tag << "] "
418
+ << oldPair.flattened << " " << newPair.flattened << " with parent: ["
419
+ << parentShadowView.tag << "]";
420
+ });
421
+
422
+ // Flattening
423
+ if (!oldPair.flattened) {
424
+ // Flatten old tree into new list
425
+ // At the end of this loop we still want to know which of these
426
+ // children are visited, so we reuse the `newRemainingPairs`
427
+ // map.
428
+ calculateShadowViewMutationsFlattener(
429
+ DIFF_BREADCRUMB(
430
+ "Flatten tree " + std::to_string(parentShadowView.tag) +
431
+ " into list " + std::to_string(oldPair.shadowView.tag)),
432
+ scope,
433
+ ReparentMode::Flatten,
434
+ mutationContainer,
435
+ parentShadowView,
436
+ newRemainingPairs,
437
+ oldPair);
438
+ }
439
+ // Unflattening
440
+ else {
441
+ // Construct unvisited nodes map
442
+ auto unvisitedOldChildPairs = TinyMap<Tag, ShadowViewNodePair *>{};
443
+ // We don't know where all the children of oldChildPair are
444
+ // within oldChildPairs, but we know that they're in the same
445
+ // relative order. The reason for this is because of flattening
446
+ // + zIndex: the children could be listed before the parent,
447
+ // interwoven with children from other nodes, etc.
448
+ auto oldFlattenedNodes =
449
+ sliceChildShadowNodeViewPairsFromViewNodePair(oldPair, scope, true);
450
+ for (size_t i = 0, j = 0;
451
+ i < oldChildPairs.size() && j < oldFlattenedNodes.size();
452
+ i++) {
453
+ auto &oldChild = *oldChildPairs[i];
454
+ if (oldChild.shadowView.tag == oldFlattenedNodes[j]->shadowView.tag) {
455
+ unvisitedOldChildPairs.insert({oldChild.shadowView.tag, &oldChild});
456
+ j++;
457
+ }
458
+ }
459
+
460
+ // Unflatten old list into new tree
461
+ calculateShadowViewMutationsFlattener(
462
+ DIFF_BREADCRUMB(
463
+ "Unflatten old list " + std::to_string(parentShadowView.tag) +
464
+ " into new tree " + std::to_string(newPair.shadowView.tag)),
465
+ scope,
466
+ ReparentMode::Unflatten,
467
+ mutationContainer,
468
+ parentShadowView,
469
+ unvisitedOldChildPairs,
470
+ newPair);
471
+
472
+ // If old nodes were not visited, we know that we can delete
473
+ // them now. They will be removed from the hierarchy by the
474
+ // outermost loop of this function.
475
+ // TODO: is this necessary anymore?
476
+ for (auto &oldFlattenedNodePtr : oldFlattenedNodes) {
477
+ auto &oldFlattenedNode = *oldFlattenedNodePtr;
478
+ auto unvisitedOldChildPairIt =
479
+ unvisitedOldChildPairs.find(oldFlattenedNode.shadowView.tag);
480
+ if (unvisitedOldChildPairIt == unvisitedOldChildPairs.end()) {
481
+ // Node was visited - make sure to remove it from
482
+ // "newRemainingPairs" map
483
+ auto newRemainingIt =
484
+ newRemainingPairs.find(oldFlattenedNode.shadowView.tag);
485
+ if (newRemainingIt != newRemainingPairs.end()) {
486
+ newRemainingPairs.erase(newRemainingIt);
487
+ }
488
+ }
489
+ }
490
+ }
491
+
492
+ return;
493
+ }
494
+
495
+ // Update subtrees if View is not flattened, and if node addresses
496
+ // are not equal
497
+ if (oldPair.shadowNode != newPair.shadowNode) {
498
+ ViewNodePairScope innerScope{};
499
+ auto oldGrandChildPairs =
500
+ sliceChildShadowNodeViewPairsFromViewNodePair(oldPair, innerScope);
501
+ auto newGrandChildPairs =
502
+ sliceChildShadowNodeViewPairsFromViewNodePair(newPair, innerScope);
503
+ calculateShadowViewMutationsV2(
504
+ DIFF_BREADCRUMB(
505
+ "Non-trivial update " + std::to_string(oldPair.shadowView.tag)),
506
+ innerScope,
507
+ *(newGrandChildPairs.size()
508
+ ? &mutationContainer.downwardMutations
509
+ : &mutationContainer.destructiveDownwardMutations),
510
+ oldPair.shadowView,
511
+ std::move(oldGrandChildPairs),
512
+ std::move(newGrandChildPairs));
513
+ }
514
+ }
515
+
516
+ /**
517
+ * Handle updates to a matched node pair, but NOT to their subtrees.
518
+ *
519
+ * Here we have (and need) knowledge of whether a node was found during
520
+ * in-order traversal, or out-of-order via a map lookup. Nodes are only REMOVEd
521
+ * or INSERTed when they are encountered via in-order-traversal, to ensure
522
+ * correct ordering of INSERT and REMOVE mutations.
523
+ */
524
+ static void updateMatchedPair(
525
+ BREADCRUMB_TYPE breadcrumb,
526
+ OrderedMutationInstructionContainer &mutationContainer,
527
+ bool oldNodeFoundInOrder,
528
+ bool newNodeFoundInOrder,
529
+ ShadowView const &parentShadowView,
530
+ ShadowViewNodePair const &oldPair,
531
+ ShadowViewNodePair const &newPair) {
532
+ oldPair.otherTreePair = &newPair;
533
+ newPair.otherTreePair = &oldPair;
534
+
535
+ // Check concrete-ness of views
536
+ // Create/Delete and Insert/Remove if necessary
537
+ if (oldPair.isConcreteView != newPair.isConcreteView) {
538
+ if (newPair.isConcreteView) {
539
+ if (newNodeFoundInOrder) {
540
+ mutationContainer.insertMutations.push_back(
541
+ ShadowViewMutation::InsertMutation(
542
+ parentShadowView,
543
+ newPair.shadowView,
544
+ static_cast<int>(newPair.mountIndex)));
545
+ }
546
+ mutationContainer.createMutations.push_back(
547
+ ShadowViewMutation::CreateMutation(newPair.shadowView));
548
+ } else {
549
+ if (oldNodeFoundInOrder) {
550
+ mutationContainer.removeMutations.push_back(
551
+ ShadowViewMutation::RemoveMutation(
552
+ parentShadowView,
553
+ oldPair.shadowView,
554
+ static_cast<int>(oldPair.mountIndex)));
555
+ }
556
+ mutationContainer.deleteMutations.push_back(
557
+ ShadowViewMutation::DeleteMutation(oldPair.shadowView));
558
+ }
559
+ } else if (oldPair.isConcreteView && newPair.isConcreteView) {
560
+ // If we found the old node by traversing, but not the new node,
561
+ // it means that there's some reordering requiring a REMOVE mutation.
562
+ if (oldNodeFoundInOrder && !newNodeFoundInOrder) {
563
+ mutationContainer.removeMutations.push_back(
564
+ ShadowViewMutation::RemoveMutation(
565
+ parentShadowView,
566
+ newPair.shadowView,
567
+ static_cast<int>(oldPair.mountIndex)));
568
+ }
569
+
570
+ // Even if node's children are flattened, it might still be a
571
+ // concrete view. The case where they're different is handled
572
+ // above.
573
+ if (oldPair.shadowView != newPair.shadowView) {
574
+ mutationContainer.updateMutations.push_back(
575
+ ShadowViewMutation::UpdateMutation(
576
+ oldPair.shadowView, newPair.shadowView));
577
+ }
578
+ }
579
+ }
580
+
319
581
  /**
320
582
  * Here we flatten or unflatten a subtree, given an unflattened node in either
321
583
  * the old or new tree, and a list of flattened nodes in the other tree.
322
584
  *
323
- * For example: if you are Flattening, the node will be in the old tree and the
585
+ * For example: if you are Flattening, the node will be in the old tree and
586
+ the
324
587
  * list will be from the new tree. If you are Unflattening, the opposite is
325
588
  true.
326
589
 
327
- * It is currently not possible for ReactJS, and therefore React Native, to move
590
+ * It is currently not possible for ReactJS, and therefore React Native, to
591
+ move
328
592
  * a node *from* one parent to another without an entirely new subtree being
329
593
  * created. When we "reparent" in React Native here it is only because
330
594
  intermediate
@@ -335,7 +599,8 @@ static void calculateShadowViewMutationsFlattener(
335
599
  * expanding vertically in that way.
336
600
 
337
601
  * Sketch of algorithm:
338
- * 0. Create a map of nodes in the flattened list. This should be done *before*
602
+ * 0. Create a map of nodes in the flattened list. This should be done
603
+ *before*
339
604
  * calling this function.
340
605
  * 1. Traverse the Node Subtree; remove elements from the map as they are
341
606
  * visited in the tree.
@@ -346,13 +611,16 @@ static void calculateShadowViewMutationsFlattener(
346
611
  * View if we're flattening.
347
612
  * If a node is in the list but not the map, it means it's been visited and
348
613
  * Update has already been
349
- * performed in the subtree. If it *is* in the map, it means the node is not
614
+ * performed in the subtree. If it *is* in the map, it means the node is
615
+ not
350
616
  * * in the Tree, and should be Deleted/Created
351
617
  * **after this function is called**, by the caller.
352
618
  */
353
619
  static void calculateShadowViewMutationsFlattener(
620
+ BREADCRUMB_TYPE breadcrumb,
621
+ ViewNodePairScope &scope,
354
622
  ReparentMode reparentMode,
355
- OrderedMutationInstructionContainer &mutationInstructionContainer,
623
+ OrderedMutationInstructionContainer &mutationContainer,
356
624
  ShadowView const &parentShadowView,
357
625
  TinyMap<Tag, ShadowViewNodePair *> &unvisitedOtherNodes,
358
626
  ShadowViewNodePair const &node,
@@ -366,8 +634,8 @@ static void calculateShadowViewMutationsFlattener(
366
634
  });
367
635
 
368
636
  // Step 1: iterate through entire tree
369
- ShadowViewNodePair::List treeChildren =
370
- sliceChildShadowNodeViewPairsV2(*node.shadowNode);
637
+ ShadowViewNodePair::NonOwningList treeChildren =
638
+ sliceChildShadowNodeViewPairsFromViewNodePair(node, scope);
371
639
 
372
640
  DEBUG_LOGS({
373
641
  LOG(ERROR) << "Differ Flattener 1.4: "
@@ -377,9 +645,9 @@ static void calculateShadowViewMutationsFlattener(
377
645
  LOG(ERROR) << "Differ Flattener Entry: Child Pairs: ";
378
646
  std::string strTreeChildPairs;
379
647
  for (size_t k = 0; k < treeChildren.size(); k++) {
380
- strTreeChildPairs.append(std::to_string(treeChildren[k].shadowView.tag));
381
- strTreeChildPairs.append(treeChildren[k].isConcreteView ? "" : "'");
382
- strTreeChildPairs.append(treeChildren[k].flattened ? "*" : "");
648
+ strTreeChildPairs.append(std::to_string(treeChildren[k]->shadowView.tag));
649
+ strTreeChildPairs.append(treeChildren[k]->isConcreteView ? "" : "'");
650
+ strTreeChildPairs.append(treeChildren[k]->flattened ? "*" : "");
383
651
  strTreeChildPairs.append(", ");
384
652
  }
385
653
  std::string strListChildPairs;
@@ -396,7 +664,8 @@ static void calculateShadowViewMutationsFlattener(
396
664
  << strListChildPairs;
397
665
  });
398
666
 
399
- // Views in other tree that are visited by sub-flattening or sub-unflattening
667
+ // Views in other tree that are visited by sub-flattening or
668
+ // sub-unflattening
400
669
  TinyMap<Tag, ShadowViewNodePair *> subVisitedOtherNewNodes{};
401
670
  TinyMap<Tag, ShadowViewNodePair *> subVisitedOtherOldNodes{};
402
671
  auto subVisitedNewMap =
@@ -413,28 +682,7 @@ static void calculateShadowViewMutationsFlattener(
413
682
  for (size_t index = 0;
414
683
  index < treeChildren.size() && index < treeChildren.size();
415
684
  index++) {
416
- // First, remove all children of the tree being flattened, or insert
417
- // children into parent tree if they're being unflattened. Then, look up
418
- // each node in the "unvisited" list and update the nodes and subtrees if
419
- // appropriate.
420
- auto &treeChildPair = treeChildren[index];
421
-
422
- // Caller will take care of the corresponding action in the other tree.
423
- if (treeChildPair.isConcreteView) {
424
- if (reparentMode == ReparentMode::Flatten) {
425
- mutationInstructionContainer.removeMutations.push_back(
426
- ShadowViewMutation::RemoveMutation(
427
- node.shadowView,
428
- treeChildPair.shadowView,
429
- treeChildPair.mountIndex));
430
- } else {
431
- mutationInstructionContainer.insertMutations.push_back(
432
- ShadowViewMutation::InsertMutation(
433
- node.shadowView,
434
- treeChildPair.shadowView,
435
- treeChildPair.mountIndex));
436
- }
437
- }
685
+ auto &treeChildPair = *treeChildren[index];
438
686
 
439
687
  // Try to find node in other tree
440
688
  auto unvisitedIt = unvisitedOtherNodes.find(treeChildPair.shadowView.tag);
@@ -443,14 +691,129 @@ static void calculateShadowViewMutationsFlattener(
443
691
  ? subVisitedNewMap->find(treeChildPair.shadowView.tag)
444
692
  : subVisitedNewMap->end());
445
693
  auto subVisitedOtherOldIt =
446
- (unvisitedIt == unvisitedOtherNodes.end()
694
+ (unvisitedIt == unvisitedOtherNodes.end() && subVisitedNewMap->end()
447
695
  ? subVisitedOldMap->find(treeChildPair.shadowView.tag)
448
696
  : subVisitedOldMap->end());
449
697
 
450
- // Find in other tree
451
- if (unvisitedIt != unvisitedOtherNodes.end() ||
698
+ bool existsInOtherTree = unvisitedIt != unvisitedOtherNodes.end() ||
452
699
  subVisitedOtherNewIt != subVisitedNewMap->end() ||
453
- subVisitedOtherOldIt != subVisitedOldMap->end()) {
700
+ subVisitedOtherOldIt != subVisitedOldMap->end();
701
+
702
+ auto otherTreeNodePairPtr =
703
+ (existsInOtherTree
704
+ ? (unvisitedIt != unvisitedOtherNodes.end()
705
+ ? unvisitedIt->second
706
+ : (subVisitedOtherNewIt != subVisitedNewMap->end()
707
+ ? subVisitedOtherNewIt->second
708
+ : subVisitedOtherOldIt->second))
709
+ : nullptr);
710
+
711
+ react_native_assert(
712
+ !existsInOtherTree ||
713
+ (unvisitedIt != unvisitedOtherNodes.end() ||
714
+ subVisitedOtherNewIt != subVisitedNewMap->end() ||
715
+ subVisitedOtherOldIt != subVisitedOldMap->end()));
716
+ react_native_assert(
717
+ unvisitedIt == unvisitedOtherNodes.end() ||
718
+ unvisitedIt->second->shadowView.tag == treeChildPair.shadowView.tag);
719
+ react_native_assert(
720
+ subVisitedOtherNewIt == subVisitedNewMap->end() ||
721
+ subVisitedOtherNewIt->second->shadowView.tag ==
722
+ treeChildPair.shadowView.tag);
723
+ react_native_assert(
724
+ subVisitedOtherOldIt == subVisitedOldMap->end() ||
725
+ subVisitedOtherOldIt->second->shadowView.tag ==
726
+ treeChildPair.shadowView.tag);
727
+
728
+ bool alreadyUpdated = false;
729
+
730
+ // Find in other tree and updated `otherTreePair` pointers
731
+ if (existsInOtherTree) {
732
+ react_native_assert(otherTreeNodePairPtr != nullptr);
733
+ auto newTreeNodePair =
734
+ (reparentMode == ReparentMode::Flatten ? otherTreeNodePairPtr
735
+ : &treeChildPair);
736
+ auto oldTreeNodePair =
737
+ (reparentMode == ReparentMode::Flatten ? &treeChildPair
738
+ : otherTreeNodePairPtr);
739
+
740
+ react_native_assert(newTreeNodePair->shadowView.tag != 0);
741
+ react_native_assert(oldTreeNodePair->shadowView.tag != 0);
742
+ react_native_assert(
743
+ oldTreeNodePair->shadowView.tag == newTreeNodePair->shadowView.tag);
744
+
745
+ alreadyUpdated =
746
+ newTreeNodePair->inOtherTree() || oldTreeNodePair->inOtherTree();
747
+
748
+ // We want to update these values unconditionally. Always do this
749
+ // before hitting any "continue" statements.
750
+ newTreeNodePair->otherTreePair = oldTreeNodePair;
751
+ oldTreeNodePair->otherTreePair = newTreeNodePair;
752
+ react_native_assert(treeChildPair.otherTreePair != nullptr);
753
+ }
754
+
755
+ // Remove all children (non-recursively) of tree being flattened, or
756
+ // insert children into parent tree if they're being unflattened.
757
+ // Caller will take care of the corresponding action in the other tree
758
+ // (caller will handle DELETE case if we REMOVE here; caller will handle
759
+ // CREATE case if we INSERT here).
760
+ if (treeChildPair.isConcreteView) {
761
+ if (reparentMode == ReparentMode::Flatten) {
762
+ // treeChildPair.shadowView represents the "old" view in this case.
763
+ // If there's a "new" view, an UPDATE new -> old will be generated
764
+ // and will be executed before the REMOVE. Thus, we must actually
765
+ // perform a REMOVE (new view) FROM (old index) in this case so that
766
+ // we don't hit asserts in StubViewTree's REMOVE path.
767
+ // We also only do this if the "other" (newer) view is concrete. If
768
+ // it's not concrete, there will be no UPDATE mutation.
769
+ react_native_assert(existsInOtherTree == treeChildPair.inOtherTree());
770
+ if (treeChildPair.inOtherTree() &&
771
+ treeChildPair.otherTreePair->isConcreteView) {
772
+ mutationContainer.removeMutations.push_back(
773
+ ShadowViewMutation::RemoveMutation(
774
+ node.shadowView,
775
+ treeChildPair.otherTreePair->shadowView,
776
+ static_cast<int>(treeChildPair.mountIndex)));
777
+ } else {
778
+ mutationContainer.removeMutations.push_back(
779
+ ShadowViewMutation::RemoveMutation(
780
+ node.shadowView,
781
+ treeChildPair.shadowView,
782
+ static_cast<int>(treeChildPair.mountIndex)));
783
+ }
784
+ } else {
785
+ // treeChildParent represents the "new" version of the node, so
786
+ // we can safely insert it without checking in the other tree
787
+ mutationContainer.insertMutations.push_back(
788
+ ShadowViewMutation::InsertMutation(
789
+ node.shadowView,
790
+ treeChildPair.shadowView,
791
+ static_cast<int>(treeChildPair.mountIndex)));
792
+ }
793
+ }
794
+
795
+ // Find in other tree
796
+ if (existsInOtherTree) {
797
+ react_native_assert(otherTreeNodePairPtr != nullptr);
798
+ auto &otherTreeNodePair = *otherTreeNodePairPtr;
799
+
800
+ auto &newTreeNodePair =
801
+ (reparentMode == ReparentMode::Flatten ? otherTreeNodePair
802
+ : treeChildPair);
803
+ auto &oldTreeNodePair =
804
+ (reparentMode == ReparentMode::Flatten ? treeChildPair
805
+ : otherTreeNodePair);
806
+
807
+ react_native_assert(newTreeNodePair.shadowView.tag != 0);
808
+ react_native_assert(oldTreeNodePair.shadowView.tag != 0);
809
+ react_native_assert(
810
+ oldTreeNodePair.shadowView.tag == newTreeNodePair.shadowView.tag);
811
+
812
+ // If we've already done updates, don't repeat it.
813
+ if (alreadyUpdated) {
814
+ continue;
815
+ }
816
+
454
817
  // If we've already done updates on this node, don't repeat.
455
818
  if (reparentMode == ReparentMode::Flatten &&
456
819
  unvisitedIt == unvisitedOtherNodes.end() &&
@@ -463,28 +826,13 @@ static void calculateShadowViewMutationsFlattener(
463
826
  continue;
464
827
  }
465
828
 
466
- auto &otherTreeNodePair =
467
- *(unvisitedIt != unvisitedOtherNodes.end()
468
- ? unvisitedIt->second
469
- : (subVisitedOtherNewIt != subVisitedNewMap->end()
470
- ? subVisitedOtherNewIt->second
471
- : subVisitedOtherOldIt->second));
472
-
473
- // If we've already done updates, don't repeat it.
474
- if (treeChildPair.inOtherTree || otherTreeNodePair.inOtherTree) {
475
- continue;
476
- }
477
-
478
- auto &newTreeNodePair =
479
- (reparentMode == ReparentMode::Flatten ? otherTreeNodePair
480
- : treeChildPair);
481
- auto &oldTreeNodePair =
482
- (reparentMode == ReparentMode::Flatten ? treeChildPair
483
- : otherTreeNodePair);
484
-
829
+ // TODO: compare ShadowNode pointer instead of ShadowView here?
830
+ // Or ShadowNode ptr comparison before comparing ShadowView, to allow for
831
+ // short-circuiting? ShadowView comparison is relatively expensive vs
832
+ // ShadowNode.
485
833
  if (newTreeNodePair.shadowView != oldTreeNodePair.shadowView &&
486
834
  newTreeNodePair.isConcreteView && oldTreeNodePair.isConcreteView) {
487
- mutationInstructionContainer.updateMutations.push_back(
835
+ mutationContainer.updateMutations.push_back(
488
836
  ShadowViewMutation::UpdateMutation(
489
837
  oldTreeNodePair.shadowView, newTreeNodePair.shadowView));
490
838
  }
@@ -492,15 +840,22 @@ static void calculateShadowViewMutationsFlattener(
492
840
  // Update children if appropriate.
493
841
  if (!oldTreeNodePair.flattened && !newTreeNodePair.flattened) {
494
842
  if (oldTreeNodePair.shadowNode != newTreeNodePair.shadowNode) {
843
+ ViewNodePairScope innerScope{};
495
844
  calculateShadowViewMutationsV2(
496
- mutationInstructionContainer.downwardMutations,
845
+ DIFF_BREADCRUMB(
846
+ "(Un)Flattener trivial update of " +
847
+ std::to_string(newTreeNodePair.shadowView.tag)),
848
+ innerScope,
849
+ mutationContainer.downwardMutations,
497
850
  newTreeNodePair.shadowView,
498
- sliceChildShadowNodeViewPairsV2(*oldTreeNodePair.shadowNode),
499
- sliceChildShadowNodeViewPairsV2(*newTreeNodePair.shadowNode));
851
+ sliceChildShadowNodeViewPairsFromViewNodePair(
852
+ oldTreeNodePair, innerScope),
853
+ sliceChildShadowNodeViewPairsFromViewNodePair(
854
+ newTreeNodePair, innerScope));
500
855
  }
501
856
  } else if (oldTreeNodePair.flattened != newTreeNodePair.flattened) {
502
- // We need to handle one of the children being flattened or unflattened,
503
- // in the context of a parent flattening or unflattening.
857
+ // We need to handle one of the children being flattened or
858
+ // unflattened, in the context of a parent flattening or unflattening.
504
859
  ReparentMode childReparentMode =
505
860
  (oldTreeNodePair.flattened ? ReparentMode::Unflatten
506
861
  : ReparentMode::Flatten);
@@ -509,8 +864,20 @@ static void calculateShadowViewMutationsFlattener(
509
864
  // This is a flatten-flatten, or unflatten-unflatten.
510
865
  if (childReparentMode == reparentMode) {
511
866
  calculateShadowViewMutationsFlattener(
867
+ DIFF_BREADCRUMB(
868
+ std::string(
869
+ reparentMode == ReparentMode::Flatten
870
+ ? "Flatten-Flatten"
871
+ : "Unflatten-Unflatten") +
872
+ " new:" +
873
+ std::to_string(
874
+ reparentMode == ReparentMode::Flatten
875
+ ? parentShadowView.tag
876
+ : newTreeNodePair.shadowView.tag) +
877
+ " old:" + std::to_string(treeChildPair.shadowView.tag)),
878
+ scope,
512
879
  childReparentMode,
513
- mutationInstructionContainer,
880
+ mutationContainer,
514
881
  (reparentMode == ReparentMode::Flatten
515
882
  ? parentShadowView
516
883
  : newTreeNodePair.shadowView),
@@ -519,89 +886,72 @@ static void calculateShadowViewMutationsFlattener(
519
886
  subVisitedNewMap,
520
887
  subVisitedOldMap);
521
888
  } else {
522
- // Unflatten parent, flatten child
523
- if (childReparentMode == ReparentMode::Flatten) {
524
- // Construct unvisited nodes map
525
- auto unvisitedNewChildPairs = TinyMap<Tag, ShadowViewNodePair *>{};
526
- // Memory note: these oldFlattenedNodes all disappear at the end of
527
- // this "else" block, including any annotations we put on them.
528
- auto newFlattenedNodes = sliceChildShadowNodeViewPairsV2(
529
- *newTreeNodePair.shadowNode, true);
530
- for (size_t i = 0; i < newFlattenedNodes.size(); i++) {
531
- auto &newChild = newFlattenedNodes[i];
532
-
533
- auto unvisitedOtherNodesIt =
534
- unvisitedOtherNodes.find(newChild.shadowView.tag);
535
- if (unvisitedOtherNodesIt != unvisitedOtherNodes.end()) {
536
- auto &unvisitedItPair = *unvisitedOtherNodesIt->second;
537
- unvisitedNewChildPairs.insert(
538
- {unvisitedItPair.shadowView.tag, &unvisitedItPair});
539
- } else {
540
- unvisitedNewChildPairs.insert(
541
- {newChild.shadowView.tag, &newChild});
542
- }
889
+ // Get flattened nodes from either new or old tree
890
+ auto flattenedNodes = sliceChildShadowNodeViewPairsFromViewNodePair(
891
+ (childReparentMode == ReparentMode::Flatten ? newTreeNodePair
892
+ : oldTreeNodePair),
893
+ scope,
894
+ true);
895
+ // Construct unvisited nodes map
896
+ auto unvisitedRecursiveChildPairs =
897
+ TinyMap<Tag, ShadowViewNodePair *>{};
898
+ for (size_t i = 0; i < flattenedNodes.size(); i++) {
899
+ auto &newChild = *flattenedNodes[i];
900
+
901
+ auto unvisitedOtherNodesIt =
902
+ unvisitedOtherNodes.find(newChild.shadowView.tag);
903
+ if (unvisitedOtherNodesIt != unvisitedOtherNodes.end()) {
904
+ auto unvisitedItPair = *unvisitedOtherNodesIt->second;
905
+ unvisitedRecursiveChildPairs.insert(
906
+ {unvisitedItPair.shadowView.tag, &unvisitedItPair});
907
+ } else {
908
+ unvisitedRecursiveChildPairs.insert(
909
+ {newChild.shadowView.tag, &newChild});
543
910
  }
911
+ }
544
912
 
913
+ // Unflatten parent, flatten child
914
+ if (childReparentMode == ReparentMode::Flatten) {
545
915
  // Flatten old tree into new list
546
916
  // At the end of this loop we still want to know which of these
547
917
  // children are visited, so we reuse the `newRemainingPairs` map.
548
918
  calculateShadowViewMutationsFlattener(
919
+ DIFF_BREADCRUMB(
920
+ std::string("Flatten old tree into new list; new:") +
921
+ std::to_string(
922
+ reparentMode == ReparentMode::Flatten
923
+ ? parentShadowView.tag
924
+ : newTreeNodePair.shadowView.tag) +
925
+ " old:" + std::to_string(oldTreeNodePair.shadowView.tag)),
926
+ scope,
549
927
  ReparentMode::Flatten,
550
- mutationInstructionContainer,
928
+ mutationContainer,
551
929
  (reparentMode == ReparentMode::Flatten
552
930
  ? parentShadowView
553
931
  : newTreeNodePair.shadowView),
554
- unvisitedNewChildPairs,
932
+ unvisitedRecursiveChildPairs,
555
933
  oldTreeNodePair,
556
934
  subVisitedNewMap,
557
935
  subVisitedOldMap);
558
-
559
- for (auto &newFlattenedNode : newFlattenedNodes) {
560
- auto unvisitedOldChildPairIt =
561
- unvisitedNewChildPairs.find(newFlattenedNode.shadowView.tag);
562
-
563
- if (unvisitedOldChildPairIt == unvisitedNewChildPairs.end()) {
564
- // Node was visited.
565
-
566
- auto deleteCreateIt = deletionCreationCandidatePairs.find(
567
- newFlattenedNode.shadowView.tag);
568
- if (deleteCreateIt != deletionCreationCandidatePairs.end()) {
569
- deletionCreationCandidatePairs.erase(deleteCreateIt);
570
- }
571
- }
572
- }
573
936
  }
574
937
  // Flatten parent, unflatten child
575
938
  else {
576
- // Construct unvisited nodes map
577
- auto unvisitedOldChildPairs = TinyMap<Tag, ShadowViewNodePair *>{};
578
- // Memory note: these oldFlattenedNodes all disappear at the end of
579
- // this "else" block, including any annotations we put on them.
580
- auto oldFlattenedNodes = sliceChildShadowNodeViewPairsV2(
581
- *oldTreeNodePair.shadowNode, true);
582
- for (size_t i = 0; i < oldFlattenedNodes.size(); i++) {
583
- auto &oldChild = oldFlattenedNodes[i];
584
-
585
- auto unvisitedOtherNodesIt =
586
- unvisitedOtherNodes.find(oldChild.shadowView.tag);
587
- if (unvisitedOtherNodesIt != unvisitedOtherNodes.end()) {
588
- auto &unvisitedItPair = *unvisitedOtherNodesIt->second;
589
- unvisitedOldChildPairs.insert(
590
- {unvisitedItPair.shadowView.tag, &unvisitedItPair});
591
- } else {
592
- unvisitedOldChildPairs.insert(
593
- {oldChild.shadowView.tag, &oldChild});
594
- }
595
- }
596
-
597
939
  // Unflatten old list into new tree
598
940
  calculateShadowViewMutationsFlattener(
941
+ DIFF_BREADCRUMB(
942
+ "Unflatten old list into new tree; old:" +
943
+ std::to_string(
944
+ reparentMode == ReparentMode::Flatten
945
+ ? parentShadowView.tag
946
+ : newTreeNodePair.shadowView.tag) +
947
+ " new:" + std::to_string(newTreeNodePair.shadowView.tag)),
948
+ scope,
599
949
  ReparentMode::Unflatten,
600
- mutationInstructionContainer,
950
+ mutationContainer,
601
951
  (reparentMode == ReparentMode::Flatten
602
952
  ? parentShadowView
603
953
  : newTreeNodePair.shadowView),
604
- unvisitedOldChildPairs,
954
+ unvisitedRecursiveChildPairs,
605
955
  newTreeNodePair,
606
956
  subVisitedNewMap,
607
957
  subVisitedOldMap);
@@ -609,45 +959,24 @@ static void calculateShadowViewMutationsFlattener(
609
959
  // If old nodes were not visited, we know that we can delete them
610
960
  // now. They will be removed from the hierarchy by the outermost
611
961
  // loop of this function.
612
- for (auto &oldFlattenedNode : oldFlattenedNodes) {
613
- auto unvisitedOldChildPairIt =
614
- unvisitedOldChildPairs.find(oldFlattenedNode.shadowView.tag);
615
- if (unvisitedOldChildPairIt != unvisitedOldChildPairs.end()) {
616
- // Node unvisited - mark the entire subtree for deletion
617
- if (oldFlattenedNode.isConcreteView) {
618
- auto tag = oldFlattenedNode.shadowView.tag;
619
- auto oldRemainingChildInListIt = std::find_if(
620
- treeChildren.begin(),
621
- treeChildren.end(),
622
- [&tag](ShadowViewNodePair &nodePair) {
623
- return nodePair.shadowView.tag == tag;
624
- });
625
- if (oldRemainingChildInListIt != treeChildren.end()) {
626
- auto deleteCreateIt = deletionCreationCandidatePairs.find(
627
- oldFlattenedNode.shadowView.tag);
628
- if (deleteCreateIt ==
629
- deletionCreationCandidatePairs.end()) {
630
- deletionCreationCandidatePairs.insert(
631
- {tag, &*oldRemainingChildInListIt});
632
- }
633
- } else {
634
- // TODO: we might want to remove this block. It seems
635
- // impossible to hit this logically (and empirically, after
636
- // testing on lots of randomized and pathologically
637
- // constructed trees) but I'm leaving this here out of an
638
- // abundance of caution.
639
- mutationInstructionContainer.deleteMutations.push_back(
640
- ShadowViewMutation::DeleteMutation(
641
- oldFlattenedNode.shadowView));
642
-
643
- calculateShadowViewMutationsV2(
644
- mutationInstructionContainer
645
- .destructiveDownwardMutations,
646
- oldFlattenedNode.shadowView,
647
- sliceChildShadowNodeViewPairsV2(
648
- *oldFlattenedNode.shadowNode),
649
- {});
650
- }
962
+ for (auto unvisitedOldChildPairIt =
963
+ unvisitedRecursiveChildPairs.begin();
964
+ unvisitedOldChildPairIt != unvisitedRecursiveChildPairs.end();
965
+ unvisitedOldChildPairIt++) {
966
+ if (unvisitedOldChildPairIt->first == 0) {
967
+ continue;
968
+ }
969
+ auto &oldFlattenedNode = *unvisitedOldChildPairIt->second;
970
+
971
+ // Node unvisited - mark the entire subtree for deletion
972
+ if (oldFlattenedNode.isConcreteView &&
973
+ !oldFlattenedNode.inOtherTree()) {
974
+ Tag tag = oldFlattenedNode.shadowView.tag;
975
+ auto deleteCreateIt = deletionCreationCandidatePairs.find(
976
+ oldFlattenedNode.shadowView.tag);
977
+ if (deleteCreateIt == deletionCreationCandidatePairs.end()) {
978
+ deletionCreationCandidatePairs.insert(
979
+ {tag, &oldFlattenedNode});
651
980
  }
652
981
  } else {
653
982
  // Node was visited - make sure to remove it from
@@ -657,13 +986,6 @@ static void calculateShadowViewMutationsFlattener(
657
986
  if (newRemainingIt != unvisitedOtherNodes.end()) {
658
987
  unvisitedOtherNodes.erase(newRemainingIt);
659
988
  }
660
-
661
- // We also remove it from delete/creation candidates
662
- auto deleteCreateIt = deletionCreationCandidatePairs.find(
663
- oldFlattenedNode.shadowView.tag);
664
- if (deleteCreateIt != deletionCreationCandidatePairs.end()) {
665
- deletionCreationCandidatePairs.erase(deleteCreateIt);
666
- }
667
989
  }
668
990
  }
669
991
  }
@@ -674,35 +996,23 @@ static void calculateShadowViewMutationsFlattener(
674
996
  // concrete view. Removing the node from the unvisited list prevents the
675
997
  // caller from taking further action on this node, so make sure to
676
998
  // delete/create if the Concreteness of the node has changed.
677
- if (newTreeNodePair.isConcreteView != oldTreeNodePair.isConcreteView &&
678
- !newTreeNodePair.inOtherTree) {
999
+ if (newTreeNodePair.isConcreteView != oldTreeNodePair.isConcreteView) {
679
1000
  if (newTreeNodePair.isConcreteView) {
680
- mutationInstructionContainer.createMutations.push_back(
1001
+ mutationContainer.createMutations.push_back(
681
1002
  ShadowViewMutation::CreateMutation(newTreeNodePair.shadowView));
682
1003
  } else {
683
- mutationInstructionContainer.deleteMutations.push_back(
684
- ShadowViewMutation::DeleteMutation(newTreeNodePair.shadowView));
1004
+ mutationContainer.deleteMutations.push_back(
1005
+ ShadowViewMutation::DeleteMutation(oldTreeNodePair.shadowView));
685
1006
  }
686
1007
  }
687
1008
 
688
- treeChildPair.inOtherTree = true;
689
- otherTreeNodePair.inOtherTree = true;
690
-
691
- if (parentSubVisitedOtherNewNodes != nullptr) {
692
- parentSubVisitedOtherNewNodes->insert(
693
- {newTreeNodePair.shadowView.tag, &newTreeNodePair});
694
- }
695
- if (parentSubVisitedOtherOldNodes != nullptr) {
696
- parentSubVisitedOtherOldNodes->insert(
697
- {oldTreeNodePair.shadowView.tag, &oldTreeNodePair});
698
- }
699
-
700
- if (unvisitedIt != unvisitedOtherNodes.end()) {
701
- unvisitedOtherNodes.erase(unvisitedIt);
702
- }
1009
+ subVisitedNewMap->insert(
1010
+ {newTreeNodePair.shadowView.tag, &newTreeNodePair});
1011
+ subVisitedOldMap->insert(
1012
+ {oldTreeNodePair.shadowView.tag, &oldTreeNodePair});
703
1013
  } else {
704
1014
  // Node does not in exist in other tree.
705
- if (treeChildPair.isConcreteView && !treeChildPair.inOtherTree) {
1015
+ if (treeChildPair.isConcreteView && !treeChildPair.inOtherTree()) {
706
1016
  auto deletionCreationIt =
707
1017
  deletionCreationCandidatePairs.find(treeChildPair.shadowView.tag);
708
1018
  if (deletionCreationIt == deletionCreationCandidatePairs.end()) {
@@ -714,8 +1024,8 @@ static void calculateShadowViewMutationsFlattener(
714
1024
  }
715
1025
 
716
1026
  // Final step: go through creation/deletion candidates and delete/create
717
- // subtrees if they were never visited during the execution of the above loop
718
- // and recursions.
1027
+ // subtrees if they were never visited during the execution of the above
1028
+ // loop and recursions.
719
1029
  for (auto it = deletionCreationCandidatePairs.begin();
720
1030
  it != deletionCreationCandidatePairs.end();
721
1031
  it++) {
@@ -724,42 +1034,60 @@ static void calculateShadowViewMutationsFlattener(
724
1034
  }
725
1035
  auto &treeChildPair = *it->second;
726
1036
 
727
- // If node was visited during a flattening/unflattening recursion.
728
- if (treeChildPair.inOtherTree) {
1037
+ // If node was visited during a flattening/unflattening recursion,
1038
+ // and the node in the other tree is concrete, that means it was
1039
+ // already created/deleted and we don't need to do that here.
1040
+ // It is always the responsibility of the matcher to update subtrees when
1041
+ // nodes are matched.
1042
+ if (treeChildPair.inOtherTree()) {
729
1043
  continue;
730
1044
  }
731
1045
 
732
1046
  if (reparentMode == ReparentMode::Flatten) {
733
- mutationInstructionContainer.deleteMutations.push_back(
1047
+ mutationContainer.deleteMutations.push_back(
734
1048
  ShadowViewMutation::DeleteMutation(treeChildPair.shadowView));
735
1049
 
736
1050
  if (!treeChildPair.flattened) {
1051
+ ViewNodePairScope innerScope{};
737
1052
  calculateShadowViewMutationsV2(
738
- mutationInstructionContainer.destructiveDownwardMutations,
1053
+ DIFF_BREADCRUMB(
1054
+ "Recursively delete tree child pair (flatten case): " +
1055
+ std::to_string(treeChildPair.shadowView.tag)),
1056
+ innerScope,
1057
+ mutationContainer.destructiveDownwardMutations,
739
1058
  treeChildPair.shadowView,
740
- sliceChildShadowNodeViewPairsV2(*treeChildPair.shadowNode),
1059
+ sliceChildShadowNodeViewPairsFromViewNodePair(
1060
+ treeChildPair, innerScope),
741
1061
  {});
742
1062
  }
743
1063
  } else {
744
- mutationInstructionContainer.createMutations.push_back(
1064
+ mutationContainer.createMutations.push_back(
745
1065
  ShadowViewMutation::CreateMutation(treeChildPair.shadowView));
746
1066
 
747
1067
  if (!treeChildPair.flattened) {
1068
+ ViewNodePairScope innerScope{};
748
1069
  calculateShadowViewMutationsV2(
749
- mutationInstructionContainer.downwardMutations,
1070
+ DIFF_BREADCRUMB(
1071
+ "Recursively delete tree child pair (unflatten case): " +
1072
+ std::to_string(treeChildPair.shadowView.tag)),
1073
+ innerScope,
1074
+ mutationContainer.downwardMutations,
750
1075
  treeChildPair.shadowView,
751
1076
  {},
752
- sliceChildShadowNodeViewPairsV2(*treeChildPair.shadowNode));
1077
+ sliceChildShadowNodeViewPairsFromViewNodePair(
1078
+ treeChildPair, innerScope));
753
1079
  }
754
1080
  }
755
1081
  }
756
1082
  }
757
1083
 
758
1084
  static void calculateShadowViewMutationsV2(
1085
+ BREADCRUMB_TYPE breadcrumb,
1086
+ ViewNodePairScope &scope,
759
1087
  ShadowViewMutation::List &mutations,
760
1088
  ShadowView const &parentShadowView,
761
- ShadowViewNodePair::List &&oldChildPairs,
762
- ShadowViewNodePair::List &&newChildPairs) {
1089
+ ShadowViewNodePair::NonOwningList &&oldChildPairs,
1090
+ ShadowViewNodePair::NonOwningList &&newChildPairs) {
763
1091
  if (oldChildPairs.empty() && newChildPairs.empty()) {
764
1092
  return;
765
1093
  }
@@ -767,21 +1095,7 @@ static void calculateShadowViewMutationsV2(
767
1095
  size_t index = 0;
768
1096
 
769
1097
  // Lists of mutations
770
- auto createMutations = ShadowViewMutation::List{};
771
- auto deleteMutations = ShadowViewMutation::List{};
772
- auto insertMutations = ShadowViewMutation::List{};
773
- auto removeMutations = ShadowViewMutation::List{};
774
- auto updateMutations = ShadowViewMutation::List{};
775
- auto downwardMutations = ShadowViewMutation::List{};
776
- auto destructiveDownwardMutations = ShadowViewMutation::List{};
777
- auto mutationInstructionContainer = OrderedMutationInstructionContainer{
778
- createMutations,
779
- deleteMutations,
780
- insertMutations,
781
- removeMutations,
782
- updateMutations,
783
- downwardMutations,
784
- destructiveDownwardMutations};
1098
+ auto mutationContainer = OrderedMutationInstructionContainer{};
785
1099
 
786
1100
  DEBUG_LOGS({
787
1101
  LOG(ERROR) << "Differ Entry: Child Pairs of node: [" << parentShadowView.tag
@@ -789,19 +1103,19 @@ static void calculateShadowViewMutationsV2(
789
1103
  std::string strOldChildPairs;
790
1104
  for (size_t oldIndex = 0; oldIndex < oldChildPairs.size(); oldIndex++) {
791
1105
  strOldChildPairs.append(
792
- std::to_string(oldChildPairs[oldIndex].shadowView.tag));
1106
+ std::to_string(oldChildPairs[oldIndex]->shadowView.tag));
793
1107
  strOldChildPairs.append(
794
- oldChildPairs[oldIndex].isConcreteView ? "" : "'");
795
- strOldChildPairs.append(oldChildPairs[oldIndex].flattened ? "*" : "");
1108
+ oldChildPairs[oldIndex]->isConcreteView ? "" : "'");
1109
+ strOldChildPairs.append(oldChildPairs[oldIndex]->flattened ? "*" : "");
796
1110
  strOldChildPairs.append(", ");
797
1111
  }
798
1112
  std::string strNewChildPairs;
799
1113
  for (size_t newIndex = 0; newIndex < newChildPairs.size(); newIndex++) {
800
1114
  strNewChildPairs.append(
801
- std::to_string(newChildPairs[newIndex].shadowView.tag));
1115
+ std::to_string(newChildPairs[newIndex]->shadowView.tag));
802
1116
  strNewChildPairs.append(
803
- newChildPairs[newIndex].isConcreteView ? "" : "'");
804
- strNewChildPairs.append(newChildPairs[newIndex].flattened ? "*" : "");
1117
+ newChildPairs[newIndex]->isConcreteView ? "" : "'");
1118
+ strNewChildPairs.append(newChildPairs[newIndex]->flattened ? "*" : "");
805
1119
  strNewChildPairs.append(", ");
806
1120
  }
807
1121
  LOG(ERROR) << "Differ Entry: Old Child Pairs: " << strOldChildPairs;
@@ -811,8 +1125,8 @@ static void calculateShadowViewMutationsV2(
811
1125
  // Stage 1: Collecting `Update` mutations
812
1126
  for (index = 0; index < oldChildPairs.size() && index < newChildPairs.size();
813
1127
  index++) {
814
- auto &oldChildPair = oldChildPairs[index];
815
- auto &newChildPair = newChildPairs[index];
1128
+ auto &oldChildPair = *oldChildPairs[index];
1129
+ auto &newChildPair = *newChildPairs[index];
816
1130
 
817
1131
  if (oldChildPair.shadowView.tag != newChildPair.shadowView.tag) {
818
1132
  DEBUG_LOGS({
@@ -826,8 +1140,8 @@ static void calculateShadowViewMutationsV2(
826
1140
  break;
827
1141
  }
828
1142
 
829
- // If either view was flattened, and that has changed this frame, don't try
830
- // to update
1143
+ // If either view was flattened, and that has changed this frame, don't
1144
+ // try to update
831
1145
  if (oldChildPair.flattened != newChildPair.flattened ||
832
1146
  oldChildPair.isConcreteView != newChildPair.isConcreteView) {
833
1147
  break;
@@ -846,20 +1160,27 @@ static void calculateShadowViewMutationsV2(
846
1160
 
847
1161
  if (newChildPair.isConcreteView &&
848
1162
  oldChildPair.shadowView != newChildPair.shadowView) {
849
- updateMutations.push_back(ShadowViewMutation::UpdateMutation(
850
- oldChildPair.shadowView, newChildPair.shadowView));
1163
+ mutationContainer.updateMutations.push_back(
1164
+ ShadowViewMutation::UpdateMutation(
1165
+ oldChildPair.shadowView, newChildPair.shadowView));
851
1166
  }
852
1167
 
853
1168
  // Recursively update tree if ShadowNode pointers are not equal
854
1169
  if (!oldChildPair.flattened &&
855
1170
  oldChildPair.shadowNode != newChildPair.shadowNode) {
856
- auto oldGrandChildPairs =
857
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode);
858
- auto newGrandChildPairs =
859
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode);
1171
+ ViewNodePairScope innerScope{};
1172
+ auto oldGrandChildPairs = sliceChildShadowNodeViewPairsFromViewNodePair(
1173
+ oldChildPair, innerScope);
1174
+ auto newGrandChildPairs = sliceChildShadowNodeViewPairsFromViewNodePair(
1175
+ newChildPair, innerScope);
860
1176
  calculateShadowViewMutationsV2(
861
- *(newGrandChildPairs.size() ? &downwardMutations
862
- : &destructiveDownwardMutations),
1177
+ DIFF_BREADCRUMB(
1178
+ "Stage 1: Recurse on " +
1179
+ std::to_string(oldChildPair.shadowView.tag)),
1180
+ innerScope,
1181
+ *(newGrandChildPairs.size()
1182
+ ? &mutationContainer.downwardMutations
1183
+ : &mutationContainer.destructiveDownwardMutations),
863
1184
  oldChildPair.shadowView,
864
1185
  std::move(oldGrandChildPairs),
865
1186
  std::move(newGrandChildPairs));
@@ -872,7 +1193,7 @@ static void calculateShadowViewMutationsV2(
872
1193
  // We've reached the end of the new children. We can delete+remove the
873
1194
  // rest.
874
1195
  for (; index < oldChildPairs.size(); index++) {
875
- auto const &oldChildPair = oldChildPairs[index];
1196
+ auto const &oldChildPair = *oldChildPairs[index];
876
1197
 
877
1198
  DEBUG_LOGS({
878
1199
  LOG(ERROR) << "Differ Branch 2: Deleting Tag/Tree: ["
@@ -884,24 +1205,32 @@ static void calculateShadowViewMutationsV2(
884
1205
  continue;
885
1206
  }
886
1207
 
887
- deleteMutations.push_back(
1208
+ mutationContainer.deleteMutations.push_back(
888
1209
  ShadowViewMutation::DeleteMutation(oldChildPair.shadowView));
889
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
890
- parentShadowView, oldChildPair.shadowView, oldChildPair.mountIndex));
1210
+ mutationContainer.removeMutations.push_back(
1211
+ ShadowViewMutation::RemoveMutation(
1212
+ parentShadowView,
1213
+ oldChildPair.shadowView,
1214
+ static_cast<int>(oldChildPair.mountIndex)));
891
1215
 
892
1216
  // We also have to call the algorithm recursively to clean up the entire
893
1217
  // subtree starting from the removed view.
1218
+ ViewNodePairScope innerScope{};
894
1219
  calculateShadowViewMutationsV2(
895
- destructiveDownwardMutations,
1220
+ DIFF_BREADCRUMB(
1221
+ "Trivial delete " + std::to_string(oldChildPair.shadowView.tag)),
1222
+ innerScope,
1223
+ mutationContainer.destructiveDownwardMutations,
896
1224
  oldChildPair.shadowView,
897
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode),
1225
+ sliceChildShadowNodeViewPairsFromViewNodePair(
1226
+ oldChildPair, innerScope),
898
1227
  {});
899
1228
  }
900
1229
  } else if (index == oldChildPairs.size()) {
901
1230
  // If we don't have any more existing children we can choose a fast path
902
1231
  // since the rest will all be create+insert.
903
1232
  for (; index < newChildPairs.size(); index++) {
904
- auto const &newChildPair = newChildPairs[index];
1233
+ auto const &newChildPair = *newChildPairs[index];
905
1234
 
906
1235
  DEBUG_LOGS({
907
1236
  LOG(ERROR) << "Differ Branch 3: Creating Tag/Tree: ["
@@ -913,16 +1242,24 @@ static void calculateShadowViewMutationsV2(
913
1242
  continue;
914
1243
  }
915
1244
 
916
- insertMutations.push_back(ShadowViewMutation::InsertMutation(
917
- parentShadowView, newChildPair.shadowView, newChildPair.mountIndex));
918
- createMutations.push_back(
1245
+ mutationContainer.insertMutations.push_back(
1246
+ ShadowViewMutation::InsertMutation(
1247
+ parentShadowView,
1248
+ newChildPair.shadowView,
1249
+ static_cast<int>(newChildPair.mountIndex)));
1250
+ mutationContainer.createMutations.push_back(
919
1251
  ShadowViewMutation::CreateMutation(newChildPair.shadowView));
920
1252
 
1253
+ ViewNodePairScope innerScope{};
921
1254
  calculateShadowViewMutationsV2(
922
- downwardMutations,
1255
+ DIFF_BREADCRUMB(
1256
+ "Trivial create " + std::to_string(newChildPair.shadowView.tag)),
1257
+ innerScope,
1258
+ mutationContainer.downwardMutations,
923
1259
  newChildPair.shadowView,
924
1260
  {},
925
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode));
1261
+ sliceChildShadowNodeViewPairsFromViewNodePair(
1262
+ newChildPair, innerScope));
926
1263
  }
927
1264
  } else {
928
1265
  // Collect map of tags in the new list
@@ -930,7 +1267,7 @@ static void calculateShadowViewMutationsV2(
930
1267
  auto newInsertedPairs = TinyMap<Tag, ShadowViewNodePair *>{};
931
1268
  auto deletionCandidatePairs = TinyMap<Tag, ShadowViewNodePair const *>{};
932
1269
  for (; index < newChildPairs.size(); index++) {
933
- auto &newChildPair = newChildPairs[index];
1270
+ auto &newChildPair = *newChildPairs[index];
934
1271
  newRemainingPairs.insert({newChildPair.shadowView.tag, &newChildPair});
935
1272
  }
936
1273
 
@@ -946,8 +1283,8 @@ static void calculateShadowViewMutationsV2(
946
1283
 
947
1284
  // Advance both pointers if pointing to the same element
948
1285
  if (haveNewPair && haveOldPair) {
949
- auto const &oldChildPair = oldChildPairs[oldIndex];
950
- auto const &newChildPair = newChildPairs[newIndex];
1286
+ auto const &oldChildPair = *oldChildPairs[oldIndex];
1287
+ auto const &newChildPair = *newChildPairs[newIndex];
951
1288
 
952
1289
  Tag newTag = newChildPair.shadowView.tag;
953
1290
  Tag oldTag = oldChildPair.shadowView.tag;
@@ -965,139 +1302,29 @@ static void calculateShadowViewMutationsV2(
965
1302
  << " with parent: [" << parentShadowView.tag << "]";
966
1303
  });
967
1304
 
968
- // Check concrete-ness of views
969
- // Create/Delete and Insert/Remove if necessary
970
- if (oldChildPair.isConcreteView != newChildPair.isConcreteView) {
971
- if (newChildPair.isConcreteView) {
972
- insertMutations.push_back(ShadowViewMutation::InsertMutation(
973
- parentShadowView,
974
- newChildPair.shadowView,
975
- newChildPair.mountIndex));
976
- createMutations.push_back(
977
- ShadowViewMutation::CreateMutation(newChildPair.shadowView));
978
- } else {
979
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
980
- parentShadowView,
981
- oldChildPair.shadowView,
982
- oldChildPair.mountIndex));
983
- deleteMutations.push_back(
984
- ShadowViewMutation::DeleteMutation(oldChildPair.shadowView));
985
- }
986
- } else if (
987
- oldChildPair.isConcreteView && newChildPair.isConcreteView) {
988
- // Even if node's children are flattened, it might still be a
989
- // concrete view. The case where they're different is handled above.
990
- if (oldChildPair.shadowView != newChildPair.shadowView) {
991
- updateMutations.push_back(ShadowViewMutation::UpdateMutation(
992
- oldChildPair.shadowView, newChildPair.shadowView));
993
- }
994
-
995
- // Remove from newRemainingPairs
996
- auto newRemainingPairIt = newRemainingPairs.find(oldTag);
997
- if (newRemainingPairIt != newRemainingPairs.end()) {
998
- newRemainingPairs.erase(newRemainingPairIt);
999
- }
1000
- }
1001
-
1002
- // Are we flattening or unflattening either one? If node was flattened
1003
- // in both trees, there's no change, just continue.
1004
- if (oldChildPair.flattened && newChildPair.flattened) {
1005
- newIndex++;
1006
- oldIndex++;
1007
- continue;
1008
- }
1009
- // We are either flattening or unflattening this node.
1010
- if (oldChildPair.flattened != newChildPair.flattened) {
1011
- DEBUG_LOGS({
1012
- LOG(ERROR) << "Differ: flattening or unflattening at branch 6: ["
1013
- << oldChildPair.shadowView.tag << "] ["
1014
- << newChildPair.shadowView.tag << "] "
1015
- << oldChildPair.flattened << " "
1016
- << newChildPair.flattened << " with parent: ["
1017
- << parentShadowView.tag << "]";
1018
- });
1019
-
1020
- // Flattening
1021
- if (!oldChildPair.flattened) {
1022
- // Flatten old tree into new list
1023
- // At the end of this loop we still want to know which of these
1024
- // children are visited, so we reuse the `newRemainingPairs` map.
1025
- calculateShadowViewMutationsFlattener(
1026
- ReparentMode::Flatten,
1027
- mutationInstructionContainer,
1028
- parentShadowView,
1029
- newRemainingPairs,
1030
- oldChildPair);
1031
- }
1032
- // Unflattening
1033
- else {
1034
- // Construct unvisited nodes map
1035
- auto unvisitedOldChildPairs =
1036
- TinyMap<Tag, ShadowViewNodePair *>{};
1037
- // We don't know where all the children of oldChildPair are within
1038
- // oldChildPairs, but we know that they're in the same relative
1039
- // order. The reason for this is because of flattening + zIndex:
1040
- // the children could be listed before the parent, interwoven with
1041
- // children from other nodes, etc.
1042
- auto oldFlattenedNodes = sliceChildShadowNodeViewPairsV2(
1043
- *oldChildPair.shadowNode, true);
1044
- for (size_t i = 0, j = 0;
1045
- i < oldChildPairs.size() && j < oldFlattenedNodes.size();
1046
- i++) {
1047
- auto &oldChild = oldChildPairs[i];
1048
- if (oldChild.shadowView.tag ==
1049
- oldFlattenedNodes[j].shadowView.tag) {
1050
- unvisitedOldChildPairs.insert(
1051
- {oldChild.shadowView.tag, &oldChild});
1052
- j++;
1053
- }
1054
- }
1055
-
1056
- // Unflatten old list into new tree
1057
- calculateShadowViewMutationsFlattener(
1058
- ReparentMode::Unflatten,
1059
- mutationInstructionContainer,
1060
- parentShadowView,
1061
- unvisitedOldChildPairs,
1062
- newChildPair);
1063
-
1064
- // If old nodes were not visited, we know that we can delete them
1065
- // now. They will be removed from the hierarchy by the outermost
1066
- // loop of this function.
1067
- for (auto &oldFlattenedNode : oldFlattenedNodes) {
1068
- auto unvisitedOldChildPairIt = unvisitedOldChildPairs.find(
1069
- oldFlattenedNode.shadowView.tag);
1070
- if (unvisitedOldChildPairIt == unvisitedOldChildPairs.end()) {
1071
- // Node was visited - make sure to remove it from
1072
- // "newRemainingPairs" map
1073
- auto newRemainingIt =
1074
- newRemainingPairs.find(oldFlattenedNode.shadowView.tag);
1075
- if (newRemainingIt != newRemainingPairs.end()) {
1076
- newRemainingPairs.erase(newRemainingIt);
1077
- }
1078
- }
1079
- }
1080
- }
1081
-
1082
- newIndex++;
1083
- oldIndex++;
1084
- continue;
1085
- }
1086
-
1087
- // Update subtrees if View is not flattened, and if node addresses are
1088
- // not equal
1089
- if (oldChildPair.shadowNode != newChildPair.shadowNode) {
1090
- auto oldGrandChildPairs =
1091
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode);
1092
- auto newGrandChildPairs =
1093
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode);
1094
- calculateShadowViewMutationsV2(
1095
- *(newGrandChildPairs.size() ? &downwardMutations
1096
- : &destructiveDownwardMutations),
1097
- oldChildPair.shadowView,
1098
- std::move(oldGrandChildPairs),
1099
- std::move(newGrandChildPairs));
1100
- }
1305
+ updateMatchedPair(
1306
+ DIFF_BREADCRUMB(
1307
+ "Update Matched Pairs (1): " +
1308
+ std::to_string(oldChildPair.shadowView.tag)),
1309
+ mutationContainer,
1310
+ true,
1311
+ true,
1312
+ parentShadowView,
1313
+ oldChildPair,
1314
+ newChildPair);
1315
+
1316
+ updateMatchedPairSubtrees(
1317
+ DIFF_BREADCRUMB(
1318
+ "Update Matched Pair Subtrees (1): " +
1319
+ std::to_string(oldChildPair.shadowView.tag)),
1320
+ scope,
1321
+ mutationContainer,
1322
+ newRemainingPairs,
1323
+ oldChildPairs,
1324
+ newChildPairs,
1325
+ parentShadowView,
1326
+ oldChildPair,
1327
+ newChildPair);
1101
1328
 
1102
1329
  newIndex++;
1103
1330
  oldIndex++;
@@ -1108,7 +1335,7 @@ static void calculateShadowViewMutationsV2(
1108
1335
  // We have an old pair, but we either don't have any remaining new pairs
1109
1336
  // or we have one but it's not matched up with the old pair
1110
1337
  if (haveOldPair) {
1111
- auto const &oldChildPair = oldChildPairs[oldIndex];
1338
+ auto const &oldChildPair = *oldChildPairs[oldIndex];
1112
1339
 
1113
1340
  Tag oldTag = oldChildPair.shadowView.tag;
1114
1341
 
@@ -1120,145 +1347,29 @@ static void calculateShadowViewMutationsV2(
1120
1347
  if (insertedIt != newInsertedPairs.end()) {
1121
1348
  auto const &newChildPair = *insertedIt->second;
1122
1349
 
1123
- // The node has been reordered and we are also flattening or
1124
- // unflattening
1125
- if (oldChildPair.flattened != newChildPair.flattened) {
1126
- DEBUG_LOGS({
1127
- LOG(ERROR)
1128
- << "Differ: branch 7: Flattening or unflattening already-inserted node upon remove (move/reorder operation)."
1129
- << oldChildPair.shadowView.tag << " "
1130
- << oldChildPair.flattened << " // "
1131
- << newChildPair.shadowView.tag << " "
1132
- << newChildPair.flattened;
1133
- });
1134
-
1135
- // Unflattening.
1136
- // The node in question was already inserted and we are
1137
- // *unflattening* it, so we just need to update the subtree nodes
1138
- // and remove them from the view hierarchy. Any of the unvisited
1139
- // nodes in the old tree will be deleted.
1140
- // TODO: can we consolidate this code? It's identical to the first
1141
- // block above.
1142
- if (!oldChildPair.flattened) {
1143
- // Flatten old tree into new list
1144
- // At the end of this loop we still want to know which of these
1145
- // children are visited, so we reuse the `newRemainingPairs` map.
1146
- calculateShadowViewMutationsFlattener(
1147
- ReparentMode::Flatten,
1148
- mutationInstructionContainer,
1149
- parentShadowView,
1150
- newRemainingPairs,
1151
- oldChildPair);
1152
- }
1153
- // Unflattening
1154
- else {
1155
- // Construct unvisited nodes map
1156
- auto unvisitedOldChildPairs =
1157
- TinyMap<Tag, ShadowViewNodePair *>{};
1158
- // We don't know where all the children of oldChildPair are within
1159
- // oldChildPairs, but we know that they're in the same relative
1160
- // order. The reason for this is because of flattening + zIndex:
1161
- // the children could be listed before the parent, interwoven with
1162
- // children from other nodes, etc.
1163
- auto oldFlattenedNodes = sliceChildShadowNodeViewPairsV2(
1164
- *oldChildPair.shadowNode, true);
1165
- for (size_t i = 0, j = 0;
1166
- i < oldChildPairs.size() && j < oldFlattenedNodes.size();
1167
- i++) {
1168
- auto &oldChild = oldChildPairs[i];
1169
- if (oldChild.shadowView.tag ==
1170
- oldFlattenedNodes[j].shadowView.tag) {
1171
- unvisitedOldChildPairs.insert(
1172
- {oldChild.shadowView.tag, &oldChild});
1173
- j++;
1174
- }
1175
- }
1176
-
1177
- // Unflatten old list into new tree
1178
- calculateShadowViewMutationsFlattener(
1179
- ReparentMode::Unflatten,
1180
- mutationInstructionContainer,
1181
- parentShadowView,
1182
- unvisitedOldChildPairs,
1183
- newChildPair);
1184
-
1185
- // If old nodes were not visited, we know that we can delete them
1186
- // now. They will be removed from the hierarchy by the outermost
1187
- // loop of this function. TODO: delete recursively? create
1188
- // recursively?
1189
- for (auto &oldFlattenedNode : oldFlattenedNodes) {
1190
- auto unvisitedOldChildPairIt = unvisitedOldChildPairs.find(
1191
- oldFlattenedNode.shadowView.tag);
1192
- if (unvisitedOldChildPairIt == unvisitedOldChildPairs.end()) {
1193
- // Node was visited - make sure to remove it from
1194
- // "newRemainingPairs" map
1195
- auto newRemainingIt =
1196
- newRemainingPairs.find(oldFlattenedNode.shadowView.tag);
1197
- if (newRemainingIt != newRemainingPairs.end()) {
1198
- newRemainingPairs.erase(newRemainingIt);
1199
- }
1200
- }
1201
- }
1202
- }
1203
- }
1204
-
1205
- // Check concrete-ness of views
1206
- // Create/Delete and Insert/Remove if necessary
1207
- // TODO: document: Insert should already be handled by outermost loop,
1208
- // but not Remove
1209
- if (oldChildPair.isConcreteView != newChildPair.isConcreteView) {
1210
- if (newChildPair.isConcreteView) {
1211
- createMutations.push_back(
1212
- ShadowViewMutation::CreateMutation(newChildPair.shadowView));
1213
- } else {
1214
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
1215
- parentShadowView,
1216
- oldChildPair.shadowView,
1217
- oldChildPair.mountIndex));
1218
- deleteMutations.push_back(
1219
- ShadowViewMutation::DeleteMutation(oldChildPair.shadowView));
1220
- }
1221
- }
1222
-
1223
- // We handled this case above. We fall through to check concreteness
1224
- // of old/new view to remove/insert create/delete above, and then bail
1225
- // out here.
1226
- if (oldChildPair.flattened != newChildPair.flattened) {
1227
- newInsertedPairs.erase(insertedIt);
1228
- oldIndex++;
1229
- continue;
1230
- }
1231
-
1232
- // old and new child pairs are both either flattened or unflattened at
1233
- // this point. If they're not views, we don't need to update subtrees.
1234
- if (oldChildPair.isConcreteView) {
1235
- // TODO: do we always want to remove here? There are cases where we
1236
- // might be able to remove this to prevent unnecessary
1237
- // removes/inserts in cases of (un)flattening + reorders?
1238
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
1239
- parentShadowView,
1240
- oldChildPair.shadowView,
1241
- oldChildPair.mountIndex));
1242
-
1243
- if (oldChildPair.shadowView != newChildPair.shadowView) {
1244
- updateMutations.push_back(ShadowViewMutation::UpdateMutation(
1245
- oldChildPair.shadowView, newChildPair.shadowView));
1246
- }
1247
- }
1248
- if (!oldChildPair.flattened &&
1249
- oldChildPair.shadowNode != newChildPair.shadowNode) {
1250
- // Update subtrees
1251
- auto oldGrandChildPairs =
1252
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode);
1253
- auto newGrandChildPairs =
1254
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode);
1255
- calculateShadowViewMutationsV2(
1256
- *(newGrandChildPairs.size() ? &downwardMutations
1257
- : &destructiveDownwardMutations),
1258
- oldChildPair.shadowView,
1259
- std::move(oldGrandChildPairs),
1260
- std::move(newGrandChildPairs));
1261
- }
1350
+ updateMatchedPair(
1351
+ DIFF_BREADCRUMB(
1352
+ "Update Matched Pairs (2): " +
1353
+ std::to_string(oldChildPair.shadowView.tag)),
1354
+ mutationContainer,
1355
+ true,
1356
+ false,
1357
+ parentShadowView,
1358
+ oldChildPair,
1359
+ newChildPair);
1360
+
1361
+ updateMatchedPairSubtrees(
1362
+ DIFF_BREADCRUMB(
1363
+ "Update Matched Pair Subtrees (2): " +
1364
+ std::to_string(oldChildPair.shadowView.tag)),
1365
+ scope,
1366
+ mutationContainer,
1367
+ newRemainingPairs,
1368
+ oldChildPairs,
1369
+ newChildPairs,
1370
+ parentShadowView,
1371
+ oldChildPair,
1372
+ newChildPair);
1262
1373
 
1263
1374
  newInsertedPairs.erase(insertedIt);
1264
1375
  oldIndex++;
@@ -1270,26 +1381,61 @@ static void calculateShadowViewMutationsV2(
1270
1381
  // generate remove+delete for this node and its subtree.
1271
1382
  auto const newIt = newRemainingPairs.find(oldTag);
1272
1383
  if (newIt == newRemainingPairs.end()) {
1384
+ oldIndex++;
1385
+
1386
+ if (!oldChildPair.isConcreteView) {
1387
+ continue;
1388
+ }
1389
+
1390
+ // From here, we know the oldChildPair is concrete.
1391
+ // We *probably* need to generate a REMOVE mutation (see edge-case
1392
+ // notes below).
1393
+
1273
1394
  DEBUG_LOGS({
1274
1395
  LOG(ERROR)
1275
1396
  << "Differ Branch 9: Removing tag that was not reinserted: "
1276
1397
  << oldIndex << ": [" << oldChildPair.shadowView.tag << "]"
1277
1398
  << (oldChildPair.flattened ? " (flattened)" : "")
1278
1399
  << (oldChildPair.isConcreteView ? " (concrete)" : "")
1279
- << " with parent: [" << parentShadowView.tag << "]";
1400
+ << " with parent: [" << parentShadowView.tag << "] "
1401
+ << "node is in other tree? "
1402
+ << (oldChildPair.inOtherTree() ? "yes" : "no");
1280
1403
  });
1281
1404
 
1282
- if (oldChildPair.isConcreteView) {
1283
- removeMutations.push_back(ShadowViewMutation::RemoveMutation(
1284
- parentShadowView,
1285
- oldChildPair.shadowView,
1286
- oldChildPair.mountIndex));
1287
-
1288
- deletionCandidatePairs.insert(
1289
- {oldChildPair.shadowView.tag, &oldChildPair});
1405
+ // Edge case: node is not found in `newRemainingPairs`, due to
1406
+ // complex (un)flattening cases, but exists in other tree *and* is
1407
+ // concrete.
1408
+ if (oldChildPair.inOtherTree() &&
1409
+ oldChildPair.otherTreePair->isConcreteView) {
1410
+ ShadowView const &otherTreeView =
1411
+ oldChildPair.otherTreePair->shadowView;
1412
+
1413
+ // Remove, but remove using the *new* node, since we know
1414
+ // an UPDATE mutation from old -> new has been generated.
1415
+ // Practically this shouldn't matter for most mounting layer
1416
+ // implementations, but helps adhere to the invariant that
1417
+ // for all mutation instructions, "oldViewShadowNode" == "current
1418
+ // node on mounting layer / stubView".
1419
+ // Here we do *not" need to generate a potential DELETE mutation
1420
+ // because we know the view is concrete, and still in the new
1421
+ // hierarchy.
1422
+ mutationContainer.removeMutations.push_back(
1423
+ ShadowViewMutation::RemoveMutation(
1424
+ parentShadowView,
1425
+ otherTreeView,
1426
+ static_cast<int>(oldChildPair.mountIndex)));
1427
+ continue;
1290
1428
  }
1291
1429
 
1292
- oldIndex++;
1430
+ mutationContainer.removeMutations.push_back(
1431
+ ShadowViewMutation::RemoveMutation(
1432
+ parentShadowView,
1433
+ oldChildPair.shadowView,
1434
+ static_cast<int>(oldChildPair.mountIndex)));
1435
+
1436
+ deletionCandidatePairs.insert(
1437
+ {oldChildPair.shadowView.tag, &oldChildPair});
1438
+
1293
1439
  continue;
1294
1440
  }
1295
1441
  }
@@ -1297,7 +1443,7 @@ static void calculateShadowViewMutationsV2(
1297
1443
  // At this point, oldTag is -1 or is in the new list, and hasn't been
1298
1444
  // inserted or matched yet. We're not sure yet if the new node is in the
1299
1445
  // old list - generate an insert instruction for the new node.
1300
- auto &newChildPair = newChildPairs[newIndex];
1446
+ auto &newChildPair = *newChildPairs[newIndex];
1301
1447
  DEBUG_LOGS({
1302
1448
  LOG(ERROR)
1303
1449
  << "Differ Branch 10: Inserting tag/tree that was not (yet?) removed from hierarchy: "
@@ -1308,21 +1454,29 @@ static void calculateShadowViewMutationsV2(
1308
1454
  << " with parent: [" << parentShadowView.tag << "]";
1309
1455
  });
1310
1456
  if (newChildPair.isConcreteView) {
1311
- insertMutations.push_back(ShadowViewMutation::InsertMutation(
1312
- parentShadowView,
1313
- newChildPair.shadowView,
1314
- newChildPair.mountIndex));
1457
+ mutationContainer.insertMutations.push_back(
1458
+ ShadowViewMutation::InsertMutation(
1459
+ parentShadowView,
1460
+ newChildPair.shadowView,
1461
+ static_cast<int>(newChildPair.mountIndex)));
1315
1462
  }
1316
- if (!newChildPair.inOtherTree) {
1463
+
1464
+ // `inOtherTree` is only set to true during flattening/unflattening of
1465
+ // parent. If the parent isn't (un)flattened, this will always be
1466
+ // `false`, even if the node is in the other (old) tree. In this case,
1467
+ // we expect the node to be removed from `newInsertedPairs` when we
1468
+ // later encounter it in this loop.
1469
+ if (!newChildPair.inOtherTree()) {
1317
1470
  newInsertedPairs.insert({newChildPair.shadowView.tag, &newChildPair});
1318
1471
  }
1472
+
1319
1473
  newIndex++;
1320
1474
  }
1321
1475
 
1322
1476
  // Penultimate step: generate Delete instructions for entirely deleted
1323
1477
  // subtrees/nodes. We do this here because we need to traverse the entire
1324
- // list to make sure that a node was not reparented into an unflattened node
1325
- // that occurs *after* it in the hierarchy, due to zIndex ordering.
1478
+ // list to make sure that a node was not reparented into an unflattened
1479
+ // node that occurs *after* it in the hierarchy, due to zIndex ordering.
1326
1480
  for (auto it = deletionCandidatePairs.begin();
1327
1481
  it != deletionCandidatePairs.end();
1328
1482
  it++) {
@@ -1338,27 +1492,34 @@ static void calculateShadowViewMutationsV2(
1338
1492
  << "[" << oldChildPair.shadowView.tag << "]"
1339
1493
  << (oldChildPair.flattened ? "(flattened)" : "")
1340
1494
  << (oldChildPair.isConcreteView ? "(concrete)" : "")
1341
- << (oldChildPair.inOtherTree ? "(in other tree)" : "")
1342
- << " with parent: [" << parentShadowView.tag << "]";
1495
+ << (oldChildPair.inOtherTree() ? "(in other tree)" : "")
1496
+ << " with parent: [" << parentShadowView.tag << "] ##"
1497
+ << std::hash<ShadowView>{}(oldChildPair.shadowView);
1343
1498
  });
1344
1499
 
1345
1500
  // This can happen when the parent is unflattened
1346
- if (!oldChildPair.inOtherTree) {
1347
- deleteMutations.push_back(
1501
+ if (!oldChildPair.inOtherTree() && oldChildPair.isConcreteView) {
1502
+ mutationContainer.deleteMutations.push_back(
1348
1503
  ShadowViewMutation::DeleteMutation(oldChildPair.shadowView));
1349
1504
 
1350
1505
  // We also have to call the algorithm recursively to clean up the
1351
1506
  // entire subtree starting from the removed view.
1507
+ ViewNodePairScope innerScope{};
1352
1508
  calculateShadowViewMutationsV2(
1353
- destructiveDownwardMutations,
1509
+ DIFF_BREADCRUMB(
1510
+ "Non-trivial delete " +
1511
+ std::to_string(oldChildPair.shadowView.tag)),
1512
+ innerScope,
1513
+ mutationContainer.destructiveDownwardMutations,
1354
1514
  oldChildPair.shadowView,
1355
- sliceChildShadowNodeViewPairsV2(*oldChildPair.shadowNode),
1515
+ sliceChildShadowNodeViewPairsFromViewNodePair(
1516
+ oldChildPair, innerScope),
1356
1517
  {});
1357
1518
  }
1358
1519
  }
1359
1520
 
1360
- // Final step: generate Create instructions for entirely new subtrees/nodes
1361
- // that are not the result of flattening or unflattening.
1521
+ // Final step: generate Create instructions for entirely new
1522
+ // subtrees/nodes that are not the result of flattening or unflattening.
1362
1523
  for (auto it = newInsertedPairs.begin(); it != newInsertedPairs.end();
1363
1524
  it++) {
1364
1525
  // Erased elements of a TinyMap will have a Tag/key of 0 - skip those
@@ -1377,56 +1538,62 @@ static void calculateShadowViewMutationsV2(
1377
1538
  << "[" << newChildPair.shadowView.tag << "]"
1378
1539
  << (newChildPair.flattened ? "(flattened)" : "")
1379
1540
  << (newChildPair.isConcreteView ? "(concrete)" : "")
1380
- << (newChildPair.inOtherTree ? "(in other tree)" : "")
1541
+ << (newChildPair.inOtherTree() ? "(in other tree)" : "")
1381
1542
  << " with parent: [" << parentShadowView.tag << "]";
1382
1543
  });
1383
1544
 
1384
1545
  if (!newChildPair.isConcreteView) {
1385
1546
  continue;
1386
1547
  }
1387
- if (newChildPair.inOtherTree) {
1548
+ if (newChildPair.inOtherTree()) {
1388
1549
  continue;
1389
1550
  }
1390
1551
 
1391
- createMutations.push_back(
1552
+ mutationContainer.createMutations.push_back(
1392
1553
  ShadowViewMutation::CreateMutation(newChildPair.shadowView));
1393
1554
 
1555
+ ViewNodePairScope innerScope{};
1394
1556
  calculateShadowViewMutationsV2(
1395
- downwardMutations,
1557
+ DIFF_BREADCRUMB(
1558
+ "Non-trivial create " +
1559
+ std::to_string(newChildPair.shadowView.tag)),
1560
+ innerScope,
1561
+ mutationContainer.downwardMutations,
1396
1562
  newChildPair.shadowView,
1397
1563
  {},
1398
- sliceChildShadowNodeViewPairsV2(*newChildPair.shadowNode));
1564
+ sliceChildShadowNodeViewPairsFromViewNodePair(
1565
+ newChildPair, innerScope));
1399
1566
  }
1400
1567
  }
1401
1568
 
1402
1569
  // All mutations in an optimal order:
1403
1570
  std::move(
1404
- destructiveDownwardMutations.begin(),
1405
- destructiveDownwardMutations.end(),
1571
+ mutationContainer.destructiveDownwardMutations.begin(),
1572
+ mutationContainer.destructiveDownwardMutations.end(),
1406
1573
  std::back_inserter(mutations));
1407
1574
  std::move(
1408
- updateMutations.begin(),
1409
- updateMutations.end(),
1575
+ mutationContainer.updateMutations.begin(),
1576
+ mutationContainer.updateMutations.end(),
1410
1577
  std::back_inserter(mutations));
1411
1578
  std::move(
1412
- removeMutations.rbegin(),
1413
- removeMutations.rend(),
1579
+ mutationContainer.removeMutations.rbegin(),
1580
+ mutationContainer.removeMutations.rend(),
1414
1581
  std::back_inserter(mutations));
1415
1582
  std::move(
1416
- deleteMutations.begin(),
1417
- deleteMutations.end(),
1583
+ mutationContainer.deleteMutations.begin(),
1584
+ mutationContainer.deleteMutations.end(),
1418
1585
  std::back_inserter(mutations));
1419
1586
  std::move(
1420
- createMutations.begin(),
1421
- createMutations.end(),
1587
+ mutationContainer.createMutations.begin(),
1588
+ mutationContainer.createMutations.end(),
1422
1589
  std::back_inserter(mutations));
1423
1590
  std::move(
1424
- downwardMutations.begin(),
1425
- downwardMutations.end(),
1591
+ mutationContainer.downwardMutations.begin(),
1592
+ mutationContainer.downwardMutations.end(),
1426
1593
  std::back_inserter(mutations));
1427
1594
  std::move(
1428
- insertMutations.begin(),
1429
- insertMutations.end(),
1595
+ mutationContainer.insertMutations.begin(),
1596
+ mutationContainer.insertMutations.end(),
1430
1597
  std::back_inserter(mutations));
1431
1598
  }
1432
1599
 
@@ -1434,7 +1601,7 @@ static void calculateShadowViewMutationsV2(
1434
1601
  * Only used by unit tests currently.
1435
1602
  */
1436
1603
  static void sliceChildShadowNodeViewPairsRecursivelyLegacy(
1437
- ShadowViewNodePair::List &pairList,
1604
+ ShadowViewNodePair::OwningList &pairList,
1438
1605
  Point layoutOffset,
1439
1606
  ShadowNode const &shadowNode) {
1440
1607
  for (auto const &sharedChildShadowNode : shadowNode.getChildren()) {
@@ -1473,9 +1640,9 @@ static void sliceChildShadowNodeViewPairsRecursivelyLegacy(
1473
1640
  /**
1474
1641
  * Only used by unit tests currently.
1475
1642
  */
1476
- ShadowViewNodePair::List sliceChildShadowNodeViewPairsLegacy(
1643
+ ShadowViewNodePair::OwningList sliceChildShadowNodeViewPairsLegacy(
1477
1644
  ShadowNode const &shadowNode) {
1478
- auto pairList = ShadowViewNodePair::List{};
1645
+ auto pairList = ShadowViewNodePair::OwningList{};
1479
1646
 
1480
1647
  if (!shadowNode.getTraits().check(
1481
1648
  ShadowNodeTraits::Trait::FormsStackingContext) &&
@@ -1494,7 +1661,12 @@ ShadowViewMutation::List calculateShadowViewMutations(
1494
1661
  SystraceSection s("calculateShadowViewMutations");
1495
1662
 
1496
1663
  // Root shadow nodes must be belong the same family.
1497
- assert(ShadowNode::sameFamily(oldRootShadowNode, newRootShadowNode));
1664
+ react_native_assert(
1665
+ ShadowNode::sameFamily(oldRootShadowNode, newRootShadowNode));
1666
+
1667
+ // See explanation of scope in Differentiator.h.
1668
+ ViewNodePairScope viewNodePairScope{};
1669
+ ViewNodePairScope innerViewNodePairScope{};
1498
1670
 
1499
1671
  auto mutations = ShadowViewMutation::List{};
1500
1672
  mutations.reserve(256);
@@ -1508,10 +1680,12 @@ ShadowViewMutation::List calculateShadowViewMutations(
1508
1680
  }
1509
1681
 
1510
1682
  calculateShadowViewMutationsV2(
1683
+ CREATE_DIFF_BREADCRUMB(oldRootShadowView.tag),
1684
+ innerViewNodePairScope,
1511
1685
  mutations,
1512
1686
  ShadowView(oldRootShadowNode),
1513
- sliceChildShadowNodeViewPairsV2(oldRootShadowNode),
1514
- sliceChildShadowNodeViewPairsV2(newRootShadowNode));
1687
+ sliceChildShadowNodeViewPairsV2(oldRootShadowNode, viewNodePairScope),
1688
+ sliceChildShadowNodeViewPairsV2(newRootShadowNode, viewNodePairScope));
1515
1689
 
1516
1690
  return mutations;
1517
1691
  }