@office-iss/react-native-win32 0.73.1 → 0.74.0-preview.1

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 (478) hide show
  1. package/.eslintignore +1 -1
  2. package/.flowconfig +11 -3
  3. package/CHANGELOG.json +422 -44
  4. package/CHANGELOG.md +162 -26
  5. package/IntegrationTests/AccessibilityManagerTest.js +2 -2
  6. package/IntegrationTests/AppEventsTest.js +2 -2
  7. package/IntegrationTests/LayoutEventsTest.js +8 -10
  8. package/IntegrationTests/LoggingTestModule.js +1 -2
  9. package/IntegrationTests/websocket_integration_test_server.js +1 -1
  10. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +6 -0
  11. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +6 -0
  12. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +4 -45
  13. package/Libraries/Alert/NativeAlertManager.js +4 -26
  14. package/Libraries/Animated/Animated.js +2 -2
  15. package/Libraries/Animated/AnimatedPlatformConfig.js +1 -1
  16. package/Libraries/Animated/NativeAnimatedHelper.js +14 -11
  17. package/Libraries/Animated/NativeAnimatedHelper.win32.js +14 -11
  18. package/Libraries/Animated/NativeAnimatedModule.js +4 -68
  19. package/Libraries/Animated/NativeAnimatedTurboModule.js +4 -69
  20. package/Libraries/Animated/animations/Animation.js +6 -22
  21. package/Libraries/Animated/components/AnimatedFlatList.js +1 -16
  22. package/Libraries/Animated/components/AnimatedScrollView.js +36 -31
  23. package/Libraries/Animated/components/AnimatedSectionList.js +1 -20
  24. package/Libraries/Animated/createAnimatedComponent.js +45 -40
  25. package/Libraries/Animated/nodes/AnimatedStyle.js +1 -1
  26. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +1 -1
  27. package/Libraries/Animated/useAnimatedProps.js +21 -1
  28. package/Libraries/AppState/NativeAppState.js +4 -24
  29. package/Libraries/BatchedBridge/NativeModules.js +1 -1
  30. package/Libraries/Blob/Blob.js +1 -4
  31. package/Libraries/Blob/BlobManager.js +6 -8
  32. package/Libraries/Blob/File.js +1 -1
  33. package/Libraries/Blob/NativeBlobModule.js +4 -50
  34. package/Libraries/Blob/NativeFileReaderModule.js +4 -13
  35. package/Libraries/BugReporting/NativeBugReporting.js +4 -12
  36. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +5 -1
  37. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +48 -7
  38. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js +3 -23
  39. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfoWin32.js +11 -0
  40. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityManager.js +4 -57
  41. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +3 -2
  42. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.win32.js +3 -2
  43. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +9 -40
  44. package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +3 -43
  45. package/Libraries/Components/Button/ButtonWin32.Props.d.ts +36 -36
  46. package/Libraries/Components/Button/ButtonWin32.Props.js +2 -2
  47. package/Libraries/Components/Button/ButtonWin32.Props.js.map +1 -1
  48. package/Libraries/Components/Button/ButtonWin32.d.ts +19 -19
  49. package/Libraries/Components/Button/ButtonWin32.js +82 -82
  50. package/Libraries/Components/Button/ButtonWin32.js.map +1 -1
  51. package/Libraries/Components/Button.js +103 -107
  52. package/Libraries/Components/Button.win32.js +297 -301
  53. package/Libraries/Components/Clipboard/NativeClipboard.js +3 -11
  54. package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +3 -114
  55. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -5
  56. package/Libraries/Components/EnterString.win32.d.ts +12 -12
  57. package/Libraries/Components/EnterString.win32.js +81 -81
  58. package/Libraries/Components/EnterString.win32.js.map +1 -1
  59. package/Libraries/Components/Keyboard/NativeKeyboardObserver.js +3 -10
  60. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.android.js +69 -0
  61. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.d.ts +24 -0
  62. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.js +33 -0
  63. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroidNativeComponent.js +13 -0
  64. package/Libraries/Components/Pressable/Pressable.js +1 -1
  65. package/Libraries/Components/Pressable/Pressable.win32.js +1 -1
  66. package/Libraries/Components/Pressable/useAndroidRippleForView.js +5 -4
  67. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +4 -24
  68. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +3 -64
  69. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +3 -61
  70. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
  71. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +3 -15
  72. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +3 -16
  73. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +1 -1
  74. package/Libraries/Components/ScrollView/ScrollView.d.ts +5 -6
  75. package/Libraries/Components/ScrollView/ScrollView.js +12 -38
  76. package/Libraries/Components/ScrollView/ScrollView.win32.js +12 -38
  77. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -2
  78. package/Libraries/Components/Sound/NativeSoundManager.js +3 -12
  79. package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +3 -58
  80. package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +3 -79
  81. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +4 -53
  82. package/Libraries/Components/Switch/Switch.js +0 -2
  83. package/Libraries/Components/Switch/SwitchNativeComponent.js +4 -52
  84. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +8 -0
  85. package/Libraries/Components/TextInput/InputAccessoryView.js +18 -20
  86. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +4 -17
  87. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +3 -6
  88. package/Libraries/Components/TextInput/Tests/TextInputTest.d.ts +8 -8
  89. package/Libraries/Components/TextInput/Tests/TextInputTest.js +127 -127
  90. package/Libraries/Components/TextInput/Tests/TextInputTest.js.map +1 -1
  91. package/Libraries/Components/TextInput/TextInput.d.ts +16 -0
  92. package/Libraries/Components/TextInput/TextInput.flow.js +16 -0
  93. package/Libraries/Components/TextInput/TextInput.js +65 -32
  94. package/Libraries/Components/TextInput/TextInput.win32.js +70 -37
  95. package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +3 -28
  96. package/Libraries/Components/Touchable/PooledClass.js +1 -1
  97. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.d.ts +8 -8
  98. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js +343 -344
  99. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
  100. package/Libraries/Components/Touchable/Touchable.js +2 -3
  101. package/Libraries/Components/Touchable/Touchable.win32.js +2 -3
  102. package/Libraries/Components/Touchable/TouchableHighlight.js +4 -4
  103. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -1
  104. package/Libraries/Components/Touchable/TouchableOpacity.js +5 -2
  105. package/Libraries/Components/Touchable/TouchableWin32.Props.d.ts +37 -37
  106. package/Libraries/Components/Touchable/TouchableWin32.Props.js +2 -2
  107. package/Libraries/Components/Touchable/TouchableWin32.Props.js.map +1 -1
  108. package/Libraries/Components/Touchable/TouchableWin32.Types.d.ts +114 -114
  109. package/Libraries/Components/Touchable/TouchableWin32.Types.js +2 -2
  110. package/Libraries/Components/Touchable/TouchableWin32.Types.js.map +1 -1
  111. package/Libraries/Components/Touchable/TouchableWin32.d.ts +91 -91
  112. package/Libraries/Components/Touchable/TouchableWin32.js +506 -506
  113. package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
  114. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +3 -16
  115. package/Libraries/Components/View/ReactNativeStyleAttributes.js +1 -1
  116. package/Libraries/Components/View/View.js +0 -11
  117. package/Libraries/Components/View/View.win32.js +18 -17
  118. package/Libraries/Components/View/ViewAccessibility.d.ts +33 -17
  119. package/Libraries/Components/View/ViewPropTypes.d.ts +28 -17
  120. package/Libraries/Components/View/ViewPropTypes.js +36 -36
  121. package/Libraries/Components/View/ViewPropTypes.win32.js +36 -36
  122. package/Libraries/Core/InitializeCore.js +1 -1
  123. package/Libraries/Core/NativeExceptionsManager.js +3 -93
  124. package/Libraries/Core/ReactNativeVersion.js +12 -6
  125. package/Libraries/Core/ReactNativeVersionCheck.js +6 -6
  126. package/Libraries/Core/ReactNativeVersionCheck.win32.js +6 -6
  127. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +3 -18
  128. package/Libraries/Core/Timers/NativeTiming.js +3 -16
  129. package/Libraries/Core/registerCallableModule.js +42 -0
  130. package/Libraries/Core/setUpPerformance.js +2 -2
  131. package/Libraries/Core/setUpPerformanceObserver.js +3 -1
  132. package/Libraries/Debugging/DebuggingOverlay.js +111 -0
  133. package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +13 -0
  134. package/Libraries/Debugging/DebuggingOverlayRegistry.js +513 -0
  135. package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +32 -0
  136. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +3 -14
  137. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +3 -9
  138. package/Libraries/Image/AssetSourceResolver.js +5 -5
  139. package/Libraries/Image/AssetUtils.js +4 -5
  140. package/Libraries/Image/Image.android.js +146 -174
  141. package/Libraries/Image/Image.d.ts +1 -1
  142. package/Libraries/Image/Image.ios.js +53 -79
  143. package/Libraries/Image/Image.win32.js +52 -74
  144. package/Libraries/Image/ImageBackground.js +2 -2
  145. package/Libraries/Image/ImageInjection.js +76 -18
  146. package/Libraries/Image/ImageTypes.d.ts +25 -25
  147. package/Libraries/Image/ImageTypes.flow.js +71 -0
  148. package/Libraries/Image/ImageTypes.js +7 -7
  149. package/Libraries/Image/ImageTypes.js.map +1 -1
  150. package/Libraries/Image/ImageUtils.js +1 -1
  151. package/Libraries/Image/ImageViewNativeComponent.js +18 -0
  152. package/Libraries/Image/NativeImageEditor.js +3 -42
  153. package/Libraries/Image/NativeImageLoaderAndroid.js +4 -28
  154. package/Libraries/Image/NativeImageLoaderIOS.js +4 -28
  155. package/Libraries/Image/NativeImageLoaderWin32.js +4 -36
  156. package/Libraries/Image/NativeImageStoreAndroid.js +3 -16
  157. package/Libraries/Image/NativeImageStoreIOS.js +3 -23
  158. package/Libraries/Image/Tests/ImageWin32Test.d.ts +8 -8
  159. package/Libraries/Image/Tests/ImageWin32Test.js +21 -21
  160. package/Libraries/Image/Tests/ImageWin32Test.js.map +1 -1
  161. package/Libraries/Image/resolveAssetSource.js +59 -26
  162. package/Libraries/Inspector/ElementProperties.js +26 -52
  163. package/Libraries/Inspector/Inspector.js +122 -186
  164. package/Libraries/Inspector/Inspector.win32.js +118 -185
  165. package/Libraries/Inspector/InspectorOverlay.js +21 -33
  166. package/Libraries/Inspector/InspectorOverlay.win32.js +22 -33
  167. package/Libraries/Inspector/InspectorPanel.js +3 -17
  168. package/Libraries/Inspector/ReactDevToolsOverlay.js +171 -0
  169. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +20 -8
  170. package/Libraries/Interaction/FrameRateLogger.js +8 -18
  171. package/Libraries/Interaction/NativeFrameRateLogger.js +4 -16
  172. package/Libraries/IntersectionObserver/IntersectionObserver.js +1 -1
  173. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +20 -19
  174. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +84 -6
  175. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +3 -31
  176. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +12 -2
  177. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -2
  178. package/Libraries/Linking/NativeIntentAndroid.js +3 -20
  179. package/Libraries/Linking/NativeLinkingManager.js +3 -17
  180. package/Libraries/Lists/FillRateHelper.js +1 -1
  181. package/Libraries/Lists/FlatList.d.ts +2 -2
  182. package/Libraries/Lists/FlatList.js +6 -1
  183. package/Libraries/Lists/SectionList.d.ts +6 -1
  184. package/Libraries/Lists/ViewabilityHelper.js +1 -1
  185. package/Libraries/Lists/VirtualizeUtils.js +1 -1
  186. package/Libraries/Lists/VirtualizedList.js +1 -1
  187. package/Libraries/Lists/VirtualizedListContext.js +1 -1
  188. package/Libraries/Lists/VirtualizedSectionList.js +1 -1
  189. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  190. package/Libraries/Modal/Modal.js +43 -11
  191. package/Libraries/Modal/NativeModalManager.js +3 -11
  192. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +3 -129
  193. package/Libraries/MutationObserver/MutationObserver.js +1 -1
  194. package/Libraries/MutationObserver/MutationObserverManager.js +2 -2
  195. package/Libraries/MutationObserver/MutationRecord.js +12 -10
  196. package/Libraries/MutationObserver/NativeMutationObserver.js +3 -48
  197. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +1 -1
  198. package/Libraries/NativeComponent/BaseViewConfig.android.js +1 -0
  199. package/Libraries/NativeComponent/NativeComponentRegistry.js +1 -1
  200. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +3 -10
  201. package/Libraries/NativeModules/specs/NativeDevMenu.js +3 -13
  202. package/Libraries/NativeModules/specs/NativeDevSettings.js +3 -23
  203. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +3 -9
  204. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +3 -38
  205. package/Libraries/NativeModules/specs/NativeLogBox.js +3 -10
  206. package/Libraries/NativeModules/specs/NativeRedBox.js +4 -11
  207. package/Libraries/NativeModules/specs/NativeSourceCode.js +2 -25
  208. package/Libraries/Network/FormData.js +3 -1
  209. package/Libraries/Network/NativeNetworkingAndroid.js +4 -28
  210. package/Libraries/Network/NativeNetworkingIOS.js +4 -28
  211. package/Libraries/Performance/NativeJSCSamplingProfiler.js +3 -9
  212. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +4 -68
  213. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -3
  214. package/Libraries/PersonaCoin/PersonaCoin.d.ts +3 -3
  215. package/Libraries/PersonaCoin/PersonaCoin.js +14 -14
  216. package/Libraries/PersonaCoin/PersonaCoin.js.map +1 -1
  217. package/Libraries/PersonaCoin/PersonaCoinPropTypes.d.ts +2 -2
  218. package/Libraries/PersonaCoin/PersonaCoinPropTypes.js +19 -19
  219. package/Libraries/PersonaCoin/PersonaCoinPropTypes.js.map +1 -1
  220. package/Libraries/PersonaCoin/PersonaCoinTypes.d.ts +33 -33
  221. package/Libraries/PersonaCoin/PersonaCoinTypes.js +23 -23
  222. package/Libraries/PersonaCoin/PersonaCoinTypes.js.map +1 -1
  223. package/Libraries/Pressability/Pressability.js +12 -2
  224. package/Libraries/Pressability/Pressability.win32.js +12 -2
  225. package/Libraries/Pressability/usePressability.js +7 -0
  226. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +4 -70
  227. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +45 -39
  228. package/Libraries/ReactNative/AppContainer-dev.js +192 -0
  229. package/Libraries/ReactNative/AppContainer-prod.js +53 -0
  230. package/Libraries/ReactNative/AppContainer.js +6 -149
  231. package/Libraries/ReactNative/AppRegistry.js +3 -1
  232. package/Libraries/ReactNative/BridgelessUIManager.js +375 -128
  233. package/Libraries/ReactNative/FabricUIManager.js +6 -0
  234. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +3 -10
  235. package/Libraries/ReactNative/NativeI18nManager.js +3 -18
  236. package/Libraries/ReactNative/NativeUIManager.js +4 -112
  237. package/Libraries/ReactNative/PaperUIManager.js +8 -7
  238. package/Libraries/ReactNative/PaperUIManager.win32.js +26 -7
  239. package/Libraries/ReactNative/ReactFabricInternals.js +1 -1
  240. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +24 -5
  241. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -45
  242. package/Libraries/ReactNative/RendererImplementation.js +11 -0
  243. package/Libraries/ReactNative/UIManager.d.ts +11 -34
  244. package/Libraries/ReactNative/UIManager.js +2 -23
  245. package/Libraries/ReactNative/UIManagerProperties.js +0 -2
  246. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +23 -1
  247. package/Libraries/ReactNative/getNativeComponentAttributes.js +5 -1
  248. package/Libraries/ReactNative/renderApplication.js +9 -6
  249. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +6 -1
  250. package/Libraries/Renderer/implementations/ReactFabric-dev.js +24771 -21123
  251. package/Libraries/Renderer/implementations/ReactFabric-prod.js +4160 -3109
  252. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4384 -3322
  253. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +25194 -21398
  254. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3763 -2636
  255. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4027 -2867
  256. package/Libraries/Renderer/shims/ReactNativeTypes.js +8 -9
  257. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -12
  258. package/Libraries/Settings/NativeSettingsManager.js +4 -16
  259. package/Libraries/Share/NativeShareModule.js +3 -13
  260. package/Libraries/StyleSheet/PlatformColorValueTypes.win32.js +1 -1
  261. package/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  262. package/Libraries/StyleSheet/PlatformColorValueTypesWin32.js +1 -1
  263. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -20
  264. package/Libraries/StyleSheet/StyleSheet.js +5 -28
  265. package/Libraries/StyleSheet/StyleSheet.win32.js +5 -28
  266. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +47 -7
  267. package/Libraries/StyleSheet/StyleSheetTypes.js +16 -11
  268. package/Libraries/StyleSheet/flattenStyle.js +2 -2
  269. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  270. package/Libraries/StyleSheet/processAspectRatio.js +1 -1
  271. package/Libraries/StyleSheet/processFontVariant.js +1 -1
  272. package/Libraries/Text/Text.d.ts +85 -0
  273. package/Libraries/Text/Text.js +0 -6
  274. package/Libraries/Text/Text.win32.js +0 -6
  275. package/Libraries/Text/TextAncestor.js +2 -3
  276. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +4 -41
  277. package/Libraries/Types/ReactDevToolsTypes.js +58 -0
  278. package/Libraries/Types/UIManagerJSInterface.js +16 -0
  279. package/Libraries/Utilities/DebugEnvironment.js +1 -4
  280. package/Libraries/Utilities/Dimensions.js +8 -16
  281. package/Libraries/Utilities/Dimensions.win32.js +8 -16
  282. package/Libraries/Utilities/FocusManager.win32.js +2 -0
  283. package/Libraries/Utilities/GlobalPerformanceLogger.js +1 -2
  284. package/Libraries/Utilities/NativeAppearance.js +3 -26
  285. package/Libraries/Utilities/NativeDevLoadingView.js +3 -14
  286. package/Libraries/Utilities/NativeDeviceInfo.js +2 -47
  287. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +3 -34
  288. package/Libraries/Utilities/NativePlatformConstantsIOS.js +3 -26
  289. package/Libraries/Utilities/NativePlatformConstantsWin.js +3 -23
  290. package/Libraries/Utilities/PixelRatio.d.ts +4 -4
  291. package/Libraries/Utilities/Platform.android.js +4 -0
  292. package/Libraries/Utilities/Platform.d.ts +3 -0
  293. package/Libraries/Utilities/Platform.flow.js +7 -0
  294. package/Libraries/Utilities/Platform.flow.win32.js +18 -5
  295. package/Libraries/Utilities/Platform.ios.js +11 -0
  296. package/Libraries/Utilities/Platform.win32.js +9 -1
  297. package/Libraries/Utilities/binaryToBase64.js +1 -1
  298. package/Libraries/Utilities/codegenNativeComponent.js +4 -6
  299. package/Libraries/Utilities/createPerformanceLogger.js +2 -74
  300. package/Libraries/Utilities/useMergeRefs.js +5 -9
  301. package/Libraries/Vibration/NativeVibration.js +3 -14
  302. package/Libraries/WebSocket/NativeWebSocketModule.js +4 -25
  303. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
  304. package/Libraries/platform-types.d.ts +2 -3
  305. package/Libraries/vendor/emitter/EventEmitter.js +1 -0
  306. package/babel.config.js +1 -1
  307. package/flow/jest.js +1 -1
  308. package/flow/react.js +15 -0
  309. package/index.js +66 -99
  310. package/index.win32.js +60 -101
  311. package/jest/assetFileTransformer.js +1 -1
  312. package/jest/local-setup.js +0 -5
  313. package/jest/mockModal.js +2 -1
  314. package/jest/mockScrollView.js +1 -2
  315. package/jest/renderer.js +1 -1
  316. package/jest/setup.js +6 -3
  317. package/jest.config.js +2 -1
  318. package/overrides.json +157 -130
  319. package/package.json +26 -26
  320. package/{Libraries/Core → src/private/core}/setUpDOM.js +2 -2
  321. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +42 -0
  322. package/src/private/featureflags/ReactNativeFeatureFlags.js +140 -0
  323. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +84 -0
  324. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +92 -0
  325. package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +53 -0
  326. package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +124 -0
  327. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +26 -0
  328. package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +74 -0
  329. package/src/private/specs/components/AndroidSwitchNativeComponent.js +62 -0
  330. package/src/private/specs/components/DebuggingOverlayNativeComponent.js +61 -0
  331. package/src/private/specs/components/PopupMenuAndroidNativeComponent.js +47 -0
  332. package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +36 -0
  333. package/src/private/specs/components/PullToRefreshViewNativeComponent.js +71 -0
  334. package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +26 -0
  335. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +139 -0
  336. package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +25 -0
  337. package/src/private/specs/components/SwitchNativeComponent.js +61 -0
  338. package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +26 -0
  339. package/src/private/specs/modules/NativeAccessibilityInfo.js +33 -0
  340. package/src/private/specs/modules/NativeAccessibilityInfoWin32.js +39 -0
  341. package/src/private/specs/modules/NativeAccessibilityManager.js +66 -0
  342. package/src/private/specs/modules/NativeActionSheetManager.js +54 -0
  343. package/src/private/specs/modules/NativeAlertManager.js +35 -0
  344. package/src/private/specs/modules/NativeAnimatedModule.js +77 -0
  345. package/src/private/specs/modules/NativeAnimatedTurboModule.js +78 -0
  346. package/src/private/specs/modules/NativeAnimationsDebugModule.js +20 -0
  347. package/src/private/specs/modules/NativeAppState.js +33 -0
  348. package/src/private/specs/modules/NativeAppearance.js +36 -0
  349. package/src/private/specs/modules/NativeBlobModule.js +59 -0
  350. package/src/private/specs/modules/NativeBugReporting.js +20 -0
  351. package/src/private/specs/modules/NativeClipboard.js +21 -0
  352. package/src/private/specs/modules/NativeDevLoadingView.js +24 -0
  353. package/src/private/specs/modules/NativeDevMenu.js +23 -0
  354. package/src/private/specs/modules/NativeDevSettings.js +33 -0
  355. package/src/private/specs/modules/NativeDevToolsSettingsManager.js +24 -0
  356. package/src/private/specs/modules/NativeDeviceEventManager.js +19 -0
  357. package/src/private/specs/modules/NativeDeviceInfo.js +58 -0
  358. package/src/private/specs/modules/NativeDialogManagerAndroid.js +48 -0
  359. package/src/private/specs/modules/NativeExceptionsManager.js +103 -0
  360. package/src/private/specs/modules/NativeFileReaderModule.js +22 -0
  361. package/src/private/specs/modules/NativeFrameRateLogger.js +22 -0
  362. package/src/private/specs/modules/NativeHeadlessJsTaskSupport.js +20 -0
  363. package/src/private/specs/modules/NativeI18nManager.js +28 -0
  364. package/src/private/specs/modules/NativeImageEditor.js +52 -0
  365. package/src/private/specs/modules/NativeImageLoaderAndroid.js +30 -0
  366. package/src/private/specs/modules/NativeImageLoaderIOS.js +37 -0
  367. package/src/private/specs/modules/NativeImageLoaderWin32.js +45 -0
  368. package/src/private/specs/modules/NativeImageStoreAndroid.js +26 -0
  369. package/src/private/specs/modules/NativeImageStoreIOS.js +33 -0
  370. package/src/private/specs/modules/NativeIntentAndroid.js +30 -0
  371. package/src/private/specs/modules/NativeIntersectionObserver.js +41 -0
  372. package/src/private/specs/modules/NativeJSCHeapCapture.js +19 -0
  373. package/src/private/specs/modules/NativeJSCSamplingProfiler.js +19 -0
  374. package/src/private/specs/modules/NativeKeyboardObserver.js +20 -0
  375. package/src/private/specs/modules/NativeLinkingManager.js +27 -0
  376. package/src/private/specs/modules/NativeLogBox.js +20 -0
  377. package/src/private/specs/modules/NativeModalManager.js +21 -0
  378. package/src/private/specs/modules/NativeMutationObserver.js +58 -0
  379. package/src/private/specs/modules/NativeNetworkingAndroid.js +37 -0
  380. package/src/private/specs/modules/NativeNetworkingIOS.js +37 -0
  381. package/src/private/specs/modules/NativePermissionsAndroid.js +77 -0
  382. package/src/private/specs/modules/NativePlatformConstantsAndroid.js +44 -0
  383. package/src/private/specs/modules/NativePlatformConstantsIOS.js +37 -0
  384. package/src/private/specs/modules/NativePlatformConstantsWin.js +37 -0
  385. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +107 -0
  386. package/src/private/specs/modules/NativeRedBox.js +20 -0
  387. package/src/private/specs/modules/NativeSampleTurboModule.js +53 -0
  388. package/src/private/specs/modules/NativeSegmentFetcher.js +28 -0
  389. package/src/private/specs/modules/NativeSettingsManager.js +25 -0
  390. package/src/private/specs/modules/NativeShareModule.js +23 -0
  391. package/src/private/specs/modules/NativeSoundManager.js +22 -0
  392. package/src/private/specs/modules/NativeSourceCode.js +36 -0
  393. package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +68 -0
  394. package/src/private/specs/modules/NativeStatusBarManagerIOS.js +89 -0
  395. package/src/private/specs/modules/NativeTiming.js +26 -0
  396. package/src/private/specs/modules/NativeToastAndroid.js +38 -0
  397. package/src/private/specs/modules/NativeUIManager.js +118 -0
  398. package/src/private/specs/modules/NativeVibration.js +24 -0
  399. package/src/private/specs/modules/NativeWebSocketModule.js +34 -0
  400. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReactNativeElement.js +6 -6
  401. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyCharacterData.js +2 -2
  402. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyElement.js +5 -5
  403. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyNode.js +19 -10
  404. package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/DOMRectList.js +1 -1
  405. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +85 -0
  406. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +80 -0
  407. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +161 -0
  408. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformance.js +2 -2
  409. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformanceObserver.js +3 -2
  410. package/{Libraries/WebPerformance → src/private/webapis/performance}/Performance.js +2 -2
  411. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEventTiming.js +1 -1
  412. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceObserver.js +21 -2
  413. package/{Libraries/WebPerformance → src/private/webapis/performance}/RawPerformanceEntry.js +1 -1
  414. package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformanceObserver.js +9 -0
  415. package/src/private/webapis/performance/__tests__/EventCounts-test.js +116 -0
  416. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +82 -0
  417. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +108 -0
  418. package/src/private/webapis/performance/__tests__/Performance-test.js +117 -0
  419. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +208 -0
  420. package/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +161 -0
  421. package/{src → src-win}/Libraries/Components/Button/ButtonWin32.tsx +3 -3
  422. package/{src → src-win}/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +9 -10
  423. package/{src → src-win}/Libraries/Components/View/ViewAccessibility.d.ts +33 -17
  424. package/{src → src-win}/Libraries/Components/View/ViewPropTypes.d.ts +28 -17
  425. package/{src → src-win}/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  426. package/src-win/Libraries/Text/Text.d.ts +304 -0
  427. package/{src → src-win}/Libraries/platform-types.d.ts +2 -3
  428. package/types/modules/globals.d.ts +1 -0
  429. package/Libraries/Components/Button.flow.js +0 -265
  430. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +0 -85
  431. package/Libraries/Components/Text/TextWin32.Props.d.ts +0 -63
  432. package/Libraries/Components/Text/TextWin32.Props.js +0 -3
  433. package/Libraries/Components/Text/TextWin32.Props.js.map +0 -1
  434. package/Libraries/Components/Text/TextWin32.d.ts +0 -6
  435. package/Libraries/Components/Text/TextWin32.js +0 -18
  436. package/Libraries/Components/Text/TextWin32.js.map +0 -1
  437. package/Libraries/Components/Touchable/Touchable.flow.js +0 -284
  438. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +0 -189
  439. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +0 -43
  440. package/Libraries/Image/Image.flow.js +0 -64
  441. package/Libraries/Inspector/DevtoolsOverlay.js +0 -223
  442. package/Libraries/Performance/QuickPerformanceLogger.js +0 -142
  443. package/src/Libraries/Components/Text/TextWin32.Props.ts +0 -82
  444. package/src/Libraries/Components/Text/TextWin32.tsx +0 -25
  445. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRect.js +0 -0
  446. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRectReadOnly.js +0 -0
  447. /package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyText.js +0 -0
  448. /package/{Libraries/DOM/Nodes/Utilities → src/private/webapis/dom/nodes/utilities}/Traversal.js +0 -0
  449. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/ArrayLikeUtils.js +0 -0
  450. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/HTMLCollection.js +0 -0
  451. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/NodeList.js +0 -0
  452. /package/{Libraries/WebPerformance → src/private/webapis/performance}/EventCounts.js +0 -0
  453. /package/{Libraries/WebPerformance → src/private/webapis/performance}/MemoryInfo.js +0 -0
  454. /package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEntry.js +0 -0
  455. /package/{Libraries/WebPerformance → src/private/webapis/performance}/ReactNativeStartupTiming.js +0 -0
  456. /package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformance.js +0 -0
  457. /package/{src → src-win}/Libraries/Components/Button/ButtonWin32.Props.ts +0 -0
  458. /package/{src → src-win}/Libraries/Components/EnterString.win32.tsx +0 -0
  459. /package/{src → src-win}/Libraries/Components/TextInput/Tests/TextInputTest.tsx +0 -0
  460. /package/{src → src-win}/Libraries/Components/Touchable/TouchableNativeFeedback.d.ts +0 -0
  461. /package/{src → src-win}/Libraries/Components/Touchable/TouchableWin32.Props.tsx +0 -0
  462. /package/{src → src-win}/Libraries/Components/Touchable/TouchableWin32.Types.tsx +0 -0
  463. /package/{src → src-win}/Libraries/Components/Touchable/TouchableWin32.tsx +0 -0
  464. /package/{src → src-win}/Libraries/Components/View/ViewWin32.d.ts +0 -0
  465. /package/{src → src-win}/Libraries/Image/ImageTypes.ts +0 -0
  466. /package/{src → src-win}/Libraries/Image/Tests/ImageWin32Test.tsx +0 -0
  467. /package/{src → src-win}/Libraries/Image/Tests/img/dpitest.png +0 -0
  468. /package/{src → src-win}/Libraries/Image/Tests/img/dpitest@1.5x.png +0 -0
  469. /package/{src → src-win}/Libraries/Image/Tests/img/dpitest@2x.png +0 -0
  470. /package/{src → src-win}/Libraries/Image/Tests/img/dpitest@3x.png +0 -0
  471. /package/{src → src-win}/Libraries/Image/Tests/img/en-us/dpitest.png +0 -0
  472. /package/{src → src-win}/Libraries/Image/Tests/img/en-us/dpitest@1.5x.png +0 -0
  473. /package/{src → src-win}/Libraries/Image/Tests/img/en-us/dpitest@3x.png +0 -0
  474. /package/{src → src-win}/Libraries/PersonaCoin/PersonaCoin.tsx +0 -0
  475. /package/{src → src-win}/Libraries/PersonaCoin/PersonaCoinPropTypes.ts +0 -0
  476. /package/{src → src-win}/Libraries/PersonaCoin/PersonaCoinTypes.ts +0 -0
  477. /package/{src → src-win}/Libraries/Utilities/FocusManager.win32.d.ts +0 -0
  478. /package/{src → src-win}/Libraries/__tests__/__snapshots__/ButtonWin32-test.js.snap +0 -0
@@ -0,0 +1,513 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict-local
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ import type ReactNativeElement from '../../src/private/webapis/dom/nodes/ReactNativeElement';
13
+ import type ReadOnlyElement from '../../src/private/webapis/dom/nodes/ReadOnlyElement';
14
+ import type {
15
+ AppContainerRootViewRef,
16
+ DebuggingOverlayRef,
17
+ } from '../ReactNative/AppContainer-dev';
18
+ import type {NativeMethods} from '../Renderer/shims/ReactNativeTypes';
19
+ import type {
20
+ InstanceFromReactDevTools,
21
+ ReactDevToolsAgent,
22
+ ReactDevToolsAgentEvents,
23
+ ReactDevToolsGlobalHook,
24
+ } from '../Types/ReactDevToolsTypes';
25
+ import type {
26
+ ElementRectangle,
27
+ TraceUpdate,
28
+ } from './DebuggingOverlayNativeComponent';
29
+
30
+ import {
31
+ findNodeHandle,
32
+ isChildPublicInstance,
33
+ } from '../ReactNative/RendererProxy';
34
+ import processColor from '../StyleSheet/processColor';
35
+
36
+ // TODO(T171193075): __REACT_DEVTOOLS_GLOBAL_HOOK__ is always injected in dev-bundles,
37
+ // but it is not mocked in some Jest tests. We should update Jest tests setup, so it would be the same as expected testing environment.
38
+ const reactDevToolsHook: ?ReactDevToolsGlobalHook =
39
+ window.__REACT_DEVTOOLS_GLOBAL_HOOK__;
40
+
41
+ export type DebuggingOverlayRegistrySubscriberProtocol = {
42
+ rootViewRef: AppContainerRootViewRef,
43
+ debuggingOverlayRef: DebuggingOverlayRef,
44
+ };
45
+
46
+ type ModernNodeUpdate = {
47
+ id: number,
48
+ instance: ReactNativeElement,
49
+ color: string,
50
+ };
51
+
52
+ type LegacyNodeUpdate = {
53
+ id: number,
54
+ instance: NativeMethods,
55
+ color: string,
56
+ };
57
+
58
+ class DebuggingOverlayRegistry {
59
+ #registry: Set<DebuggingOverlayRegistrySubscriberProtocol> = new Set();
60
+ #reactDevToolsAgent: ReactDevToolsAgent | null = null;
61
+
62
+ constructor() {
63
+ if (reactDevToolsHook?.reactDevtoolsAgent != null) {
64
+ this.#onReactDevToolsAgentAttached(reactDevToolsHook.reactDevtoolsAgent);
65
+ return;
66
+ }
67
+
68
+ reactDevToolsHook?.on?.(
69
+ 'react-devtools',
70
+ this.#onReactDevToolsAgentAttached,
71
+ );
72
+ }
73
+
74
+ subscribe(subscriber: DebuggingOverlayRegistrySubscriberProtocol) {
75
+ this.#registry.add(subscriber);
76
+ }
77
+
78
+ unsubscribe(subscriber: DebuggingOverlayRegistrySubscriberProtocol) {
79
+ const wasPresent = this.#registry.delete(subscriber);
80
+ if (!wasPresent) {
81
+ console.error(
82
+ '[DebuggingOverlayRegistry] Unexpected argument for unsubscription, which was not previously subscribed:',
83
+ subscriber,
84
+ );
85
+ }
86
+ }
87
+
88
+ #onReactDevToolsAgentAttached = (agent: ReactDevToolsAgent): void => {
89
+ this.#reactDevToolsAgent = agent;
90
+
91
+ agent.addListener('drawTraceUpdates', this.#onDrawTraceUpdates);
92
+ agent.addListener('showNativeHighlight', this.#onHighlightElements);
93
+ agent.addListener('hideNativeHighlight', this.#onClearElementsHighlights);
94
+ };
95
+
96
+ #getPublicInstanceFromInstance = (
97
+ instanceHandle: InstanceFromReactDevTools,
98
+ ): NativeMethods | null => {
99
+ // `canonical.publicInstance` => Fabric
100
+ if (instanceHandle.canonical?.publicInstance != null) {
101
+ return instanceHandle.canonical?.publicInstance;
102
+ }
103
+
104
+ // `canonical` => Legacy Fabric
105
+ if (instanceHandle.canonical != null) {
106
+ // $FlowFixMe[incompatible-return]
107
+ return instanceHandle.canonical;
108
+ }
109
+
110
+ // `instanceHandle` => Legacy renderer
111
+ if (instanceHandle.measure != null) {
112
+ // $FlowFixMe[incompatible-return]
113
+ return instanceHandle;
114
+ }
115
+
116
+ return null;
117
+ };
118
+
119
+ #findLowestParentFromRegistryForInstance(
120
+ instance: ReactNativeElement,
121
+ ): ?DebuggingOverlayRegistrySubscriberProtocol {
122
+ let iterator: ?ReadOnlyElement = instance;
123
+ while (iterator != null) {
124
+ for (const subscriber of this.#registry) {
125
+ if (subscriber.rootViewRef.current === iterator) {
126
+ return subscriber;
127
+ }
128
+ }
129
+
130
+ iterator = iterator.parentElement;
131
+ }
132
+
133
+ return null;
134
+ }
135
+
136
+ #findLowestParentFromRegistryForInstanceLegacy(
137
+ instance: NativeMethods,
138
+ ): ?DebuggingOverlayRegistrySubscriberProtocol {
139
+ const candidates: Array<DebuggingOverlayRegistrySubscriberProtocol> = [];
140
+
141
+ for (const subscriber of this.#registry) {
142
+ if (
143
+ subscriber.rootViewRef.current != null &&
144
+ // $FlowFixMe[incompatible-call] There is a lot of stuff to untangle to make types for refs work.
145
+ isChildPublicInstance(subscriber.rootViewRef.current, instance)
146
+ ) {
147
+ candidates.push(subscriber);
148
+ }
149
+ }
150
+
151
+ if (candidates.length === 0) {
152
+ // In some cases, like with LogBox in custom integrations, the whole subtree for specific React root might not have an AppContainer.
153
+ return null;
154
+ }
155
+
156
+ if (candidates.length === 1) {
157
+ return candidates[0];
158
+ }
159
+
160
+ // If there are multiple candidates, we need to find the lowest.
161
+ // Imagine the case when there is a modal on the screen, both of them will have their own AppContainers,
162
+ // but modal's AppContainer is a child of screen's AppContainer.
163
+ const candidatesWithNoChildren: Array<DebuggingOverlayRegistrySubscriberProtocol> =
164
+ [];
165
+ for (const potentialParent of candidates) {
166
+ let shouldSkipThisParent = false;
167
+
168
+ if (potentialParent.rootViewRef.current == null) {
169
+ continue;
170
+ }
171
+
172
+ for (const potentialChild of candidates) {
173
+ if (potentialChild === potentialParent) {
174
+ continue;
175
+ }
176
+
177
+ if (potentialChild.rootViewRef.current == null) {
178
+ continue;
179
+ }
180
+
181
+ if (
182
+ isChildPublicInstance(
183
+ // $FlowFixMe[incompatible-call] There is a lot of stuff to untangle to make types for refs work.
184
+ potentialParent.rootViewRef.current,
185
+ // $FlowFixMe[incompatible-call] There is a lot of stuff to untangle to make types for refs work.
186
+ potentialChild.rootViewRef.current,
187
+ )
188
+ ) {
189
+ shouldSkipThisParent = true;
190
+ break;
191
+ }
192
+ }
193
+
194
+ if (!shouldSkipThisParent) {
195
+ candidatesWithNoChildren.push(potentialParent);
196
+ }
197
+ }
198
+
199
+ if (candidatesWithNoChildren.length === 0) {
200
+ console.error(
201
+ '[DebuggingOverlayRegistry] Unexpected circular relationship between AppContainers',
202
+ );
203
+ return null;
204
+ } else if (candidatesWithNoChildren.length > 1) {
205
+ console.error(
206
+ '[DebuggingOverlayRegistry] Unexpected multiple options for lowest parent AppContainer',
207
+ );
208
+ return null;
209
+ }
210
+
211
+ return candidatesWithNoChildren[0];
212
+ }
213
+
214
+ #onDrawTraceUpdates: (
215
+ ...ReactDevToolsAgentEvents['drawTraceUpdates']
216
+ ) => void = traceUpdates => {
217
+ const modernNodesUpdates: Array<ModernNodeUpdate> = [];
218
+ const legacyNodesUpdates: Array<LegacyNodeUpdate> = [];
219
+
220
+ for (const {node, color} of traceUpdates) {
221
+ const publicInstance = this.#getPublicInstanceFromInstance(node);
222
+ if (publicInstance == null) {
223
+ return;
224
+ }
225
+
226
+ const instanceReactTag = findNodeHandle(node);
227
+ if (instanceReactTag == null) {
228
+ return;
229
+ }
230
+
231
+ // Lazy import to avoid dependency cycle.
232
+ const ReactNativeElementClass =
233
+ require('../../src/private/webapis/dom/nodes/ReactNativeElement').default;
234
+ if (publicInstance instanceof ReactNativeElementClass) {
235
+ modernNodesUpdates.push({
236
+ id: instanceReactTag,
237
+ instance: publicInstance,
238
+ color,
239
+ });
240
+ } else {
241
+ legacyNodesUpdates.push({
242
+ id: instanceReactTag,
243
+ instance: publicInstance,
244
+ color,
245
+ });
246
+ }
247
+ }
248
+
249
+ if (modernNodesUpdates.length > 0) {
250
+ this.#drawTraceUpdatesModern(modernNodesUpdates);
251
+ }
252
+
253
+ if (legacyNodesUpdates.length > 0) {
254
+ this.#drawTraceUpdatesLegacy(legacyNodesUpdates);
255
+ }
256
+ };
257
+
258
+ #drawTraceUpdatesModern(updates: Array<ModernNodeUpdate>): void {
259
+ const parentToTraceUpdatesMap = new Map<
260
+ DebuggingOverlayRegistrySubscriberProtocol,
261
+ Array<TraceUpdate>,
262
+ >();
263
+ for (const {id, instance, color} of updates) {
264
+ const parent = this.#findLowestParentFromRegistryForInstance(instance);
265
+ if (parent == null) {
266
+ continue;
267
+ }
268
+
269
+ let traceUpdatesForParent = parentToTraceUpdatesMap.get(parent);
270
+ if (traceUpdatesForParent == null) {
271
+ traceUpdatesForParent = [];
272
+ parentToTraceUpdatesMap.set(parent, traceUpdatesForParent);
273
+ }
274
+
275
+ const {x, y, width, height} = instance.getBoundingClientRect();
276
+
277
+ const rootViewInstance = parent.rootViewRef.current;
278
+ if (rootViewInstance == null) {
279
+ continue;
280
+ }
281
+
282
+ const {x: parentX, y: parentY} =
283
+ // $FlowFixMe[prop-missing] React Native View is not a descendant of ReactNativeElement yet. We should be able to remove it once Paper is no longer supported.
284
+ rootViewInstance.getBoundingClientRect();
285
+
286
+ // DebuggingOverlay will scale to the same size as a Root view. Substract Root view position from the element position
287
+ // to calculate the element's position relatively to its parent DebuggingOverlay.
288
+ // We can't call `getBoundingClientRect` on the debuggingOverlayRef, because its a ref for the native component, which doesn't have it, hopefully yet.
289
+ traceUpdatesForParent.push({
290
+ id,
291
+ rectangle: {x: x - parentX, y: y - parentY, width, height},
292
+ color: processColor(color),
293
+ });
294
+ }
295
+
296
+ for (const [parent, traceUpdates] of parentToTraceUpdatesMap.entries()) {
297
+ const {debuggingOverlayRef} = parent;
298
+ debuggingOverlayRef.current?.highlightTraceUpdates(traceUpdates);
299
+ }
300
+ }
301
+
302
+ // TODO: remove once DOM Node APIs are opt-in by default and Paper is no longer supported.
303
+ #drawTraceUpdatesLegacy(updates: Array<LegacyNodeUpdate>): void {
304
+ const parentToTraceUpdatesPromisesMap = new Map<
305
+ DebuggingOverlayRegistrySubscriberProtocol,
306
+ Array<Promise<TraceUpdate>>,
307
+ >();
308
+
309
+ for (const {id, instance, color} of updates) {
310
+ const parent =
311
+ this.#findLowestParentFromRegistryForInstanceLegacy(instance);
312
+
313
+ if (parent == null) {
314
+ continue;
315
+ }
316
+
317
+ let traceUpdatesPromisesForParent =
318
+ parentToTraceUpdatesPromisesMap.get(parent);
319
+ if (traceUpdatesPromisesForParent == null) {
320
+ traceUpdatesPromisesForParent = [];
321
+ parentToTraceUpdatesPromisesMap.set(
322
+ parent,
323
+ traceUpdatesPromisesForParent,
324
+ );
325
+ }
326
+
327
+ const frameToDrawPromise = new Promise<TraceUpdate>((resolve, reject) => {
328
+ instance.measure((x, y, width, height, left, top) => {
329
+ // measure can execute callback without any values provided to signal error.
330
+ if (left == null || top == null || width == null || height == null) {
331
+ reject('Unexpectedly failed to call measure on an instance.');
332
+ }
333
+
334
+ resolve({
335
+ id,
336
+ rectangle: {x: left, y: top, width, height},
337
+ color: processColor(color),
338
+ });
339
+ });
340
+ });
341
+
342
+ traceUpdatesPromisesForParent.push(frameToDrawPromise);
343
+ }
344
+
345
+ for (const [
346
+ parent,
347
+ traceUpdatesPromises,
348
+ ] of parentToTraceUpdatesPromisesMap.entries()) {
349
+ Promise.all(traceUpdatesPromises)
350
+ .then(resolvedTraceUpdates =>
351
+ parent.debuggingOverlayRef.current?.highlightTraceUpdates(
352
+ resolvedTraceUpdates,
353
+ ),
354
+ )
355
+ .catch(() => {
356
+ // noop. For legacy architecture (Paper) this can happen for root views or LogBox button.
357
+ // LogBox case: it has a separate React root, so `measure` fails.
358
+ // Calling `console.error` here would trigger rendering a new LogBox button, for which we will call measure again, this is a cycle.
359
+ // Don't spam the UI with errors for such cases.
360
+ });
361
+ }
362
+ }
363
+
364
+ #onHighlightElements: (
365
+ ...ReactDevToolsAgentEvents['showNativeHighlight']
366
+ ) => void = nodes => {
367
+ // First clear highlights for every container
368
+ for (const subscriber of this.#registry) {
369
+ subscriber.debuggingOverlayRef.current?.clearElementsHighlight();
370
+ }
371
+
372
+ // Lazy import to avoid dependency cycle.
373
+ const ReactNativeElementClass =
374
+ require('../../src/private/webapis/dom/nodes/ReactNativeElement').default;
375
+
376
+ const reactNativeElements: Array<ReactNativeElement> = [];
377
+ const legacyPublicInstances: Array<NativeMethods> = [];
378
+
379
+ for (const node of nodes) {
380
+ const publicInstance = this.#getPublicInstanceFromInstance(node);
381
+ if (publicInstance == null) {
382
+ continue;
383
+ }
384
+
385
+ if (publicInstance instanceof ReactNativeElementClass) {
386
+ reactNativeElements.push(publicInstance);
387
+ } else {
388
+ legacyPublicInstances.push(publicInstance);
389
+ }
390
+ }
391
+
392
+ if (reactNativeElements.length > 0) {
393
+ this.#onHighlightElementsModern(reactNativeElements);
394
+ }
395
+
396
+ if (legacyPublicInstances.length > 0) {
397
+ this.#onHighlightElementsLegacy(legacyPublicInstances);
398
+ }
399
+ };
400
+
401
+ #onHighlightElementsModern(elements: Array<ReactNativeElement>): void {
402
+ const parentToElementsMap = new Map<
403
+ DebuggingOverlayRegistrySubscriberProtocol,
404
+ Array<ReactNativeElement>,
405
+ >();
406
+
407
+ for (const element of elements) {
408
+ const parent = this.#findLowestParentFromRegistryForInstance(element);
409
+ if (parent == null) {
410
+ continue;
411
+ }
412
+
413
+ let childElementOfAParent = parentToElementsMap.get(parent);
414
+ if (childElementOfAParent == null) {
415
+ childElementOfAParent = [];
416
+ parentToElementsMap.set(parent, childElementOfAParent);
417
+ }
418
+
419
+ childElementOfAParent.push(element);
420
+ }
421
+
422
+ for (const [parent, elementsToHighlight] of parentToElementsMap.entries()) {
423
+ const rootViewInstance = parent.rootViewRef.current;
424
+ if (rootViewInstance == null) {
425
+ return;
426
+ }
427
+
428
+ const {x: parentX, y: parentY} =
429
+ // $FlowFixMe[prop-missing] React Native View is not a descendant of ReactNativeElement yet. We should be able to remove it once Paper is no longer supported.
430
+ rootViewInstance.getBoundingClientRect();
431
+
432
+ // DebuggingOverlay will scale to the same size as a Root view. Substract Root view position from the element position
433
+ // to calculate the element's position relatively to its parent DebuggingOverlay.
434
+ // We can't call `getBoundingClientRect` on the debuggingOverlayRef, because its a ref for the native component, which doesn't have it, hopefully yet.
435
+ const elementsRectangles = elementsToHighlight.map(element => {
436
+ const {x, y, width, height} = element.getBoundingClientRect();
437
+ return {x: x - parentX, y: y - parentY, width, height};
438
+ });
439
+
440
+ parent.debuggingOverlayRef.current?.highlightElements(elementsRectangles);
441
+ }
442
+ }
443
+
444
+ // TODO: remove once DOM Node APIs are opt-in by default and Paper is no longer supported.
445
+ #onHighlightElementsLegacy(elements: Array<NativeMethods>): void {
446
+ const parentToElementsMap = new Map<
447
+ DebuggingOverlayRegistrySubscriberProtocol,
448
+ Array<NativeMethods>,
449
+ >();
450
+
451
+ for (const element of elements) {
452
+ const parent =
453
+ this.#findLowestParentFromRegistryForInstanceLegacy(element);
454
+ if (parent == null) {
455
+ continue;
456
+ }
457
+
458
+ let childElementOfAParent = parentToElementsMap.get(parent);
459
+ if (childElementOfAParent == null) {
460
+ childElementOfAParent = [];
461
+ parentToElementsMap.set(parent, childElementOfAParent);
462
+ }
463
+
464
+ childElementOfAParent.push(element);
465
+ }
466
+
467
+ for (const [parent, elementsToHighlight] of parentToElementsMap.entries()) {
468
+ const promises = elementsToHighlight.map(
469
+ element =>
470
+ new Promise<ElementRectangle>((resolve, reject) => {
471
+ element.measure((x, y, width, height, left, top) => {
472
+ // measure can execute callback without any values provided to signal error.
473
+ if (
474
+ left == null ||
475
+ top == null ||
476
+ width == null ||
477
+ height == null
478
+ ) {
479
+ reject('Unexpectedly failed to call measure on an instance.');
480
+ }
481
+
482
+ resolve({x: left, y: top, width, height});
483
+ });
484
+ }),
485
+ );
486
+
487
+ Promise.all(promises)
488
+ .then(resolvedElementsRectangles =>
489
+ parent.debuggingOverlayRef.current?.highlightElements(
490
+ resolvedElementsRectangles,
491
+ ),
492
+ )
493
+ .catch(() => {
494
+ // noop. For legacy architecture (Paper) this can happen for root views or LogBox button.
495
+ // LogBox case: it has a separate React root, so `measure` fails.
496
+ // Calling `console.error` here would trigger rendering a new LogBox button, for which we will call measure again, this is a cycle.
497
+ // Don't spam the UI with errors for such cases.
498
+ });
499
+ }
500
+ }
501
+
502
+ #onClearElementsHighlights: (
503
+ ...ReactDevToolsAgentEvents['hideNativeHighlight']
504
+ ) => void = () => {
505
+ for (const subscriber of this.#registry) {
506
+ subscriber.debuggingOverlayRef.current?.clearElementsHighlight();
507
+ }
508
+ };
509
+ }
510
+
511
+ const debuggingOverlayRegistryInstance: DebuggingOverlayRegistry =
512
+ new DebuggingOverlayRegistry();
513
+ export default debuggingOverlayRegistryInstance;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict-local
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ import type {
13
+ AppContainerRootViewRef,
14
+ DebuggingOverlayRef,
15
+ } from '../ReactNative/AppContainer-dev';
16
+
17
+ import DebuggingOverlayRegistry from './DebuggingOverlayRegistry';
18
+ import {useEffect} from 'react';
19
+
20
+ const useSubscribeToDebuggingOverlayRegistry = (
21
+ rootViewRef: AppContainerRootViewRef,
22
+ debuggingOverlayRef: DebuggingOverlayRef,
23
+ ) => {
24
+ useEffect(() => {
25
+ const subscriber = {rootViewRef, debuggingOverlayRef};
26
+
27
+ DebuggingOverlayRegistry.subscribe(subscriber);
28
+ return () => DebuggingOverlayRegistry.unsubscribe(subscriber);
29
+ }, [rootViewRef, debuggingOverlayRef]);
30
+ };
31
+
32
+ export default useSubscribeToDebuggingOverlayRegistry;
@@ -8,17 +8,6 @@
8
8
  * @format
9
9
  */
10
10
 
11
- import type {TurboModule} from '../TurboModule/RCTExport';
12
-
13
- import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
14
-
15
- export interface Spec extends TurboModule {
16
- +setConsolePatchSettings: (newConsolePatchSettings: string) => void;
17
- +getConsolePatchSettings: () => ?string;
18
- +setProfilingSettings?: (newProfilingSettings: string) => void;
19
- +getProfilingSettings?: () => ?string;
20
- }
21
-
22
- export default (TurboModuleRegistry.get<Spec>(
23
- 'DevToolsSettingsManager',
24
- ): ?Spec);
11
+ export * from '../../src/private/specs/modules/NativeDevToolsSettingsManager';
12
+ import NativeDevToolsSettingsManager from '../../src/private/specs/modules/NativeDevToolsSettingsManager';
13
+ export default NativeDevToolsSettingsManager;
@@ -8,12 +8,6 @@
8
8
  * @format
9
9
  */
10
10
 
11
- import type {TurboModule} from '../TurboModule/RCTExport';
12
-
13
- import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
14
-
15
- export interface Spec extends TurboModule {
16
- +captureComplete: (path: string, error: ?string) => void;
17
- }
18
-
19
- export default (TurboModuleRegistry.get<Spec>('JSCHeapCapture'): ?Spec);
11
+ export * from '../../src/private/specs/modules/NativeJSCHeapCapture';
12
+ import NativeJSCHeapCapture from '../../src/private/specs/modules/NativeJSCHeapCapture';
13
+ export default NativeJSCHeapCapture;
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @flow
7
+ * @flow strict-local
8
8
  * @format
9
9
  */
10
10
 
@@ -68,7 +68,7 @@ class AssetSourceResolver {
68
68
  }
69
69
 
70
70
  isLoadedFromFileSystem(): boolean {
71
- return !!(this.jsbundleUrl && this.jsbundleUrl.startsWith('file://'));
71
+ return this.jsbundleUrl != null && this.jsbundleUrl?.startsWith('file://');
72
72
  }
73
73
 
74
74
  defaultAsset(): ResolvedAssetSource {
@@ -90,7 +90,7 @@ class AssetSourceResolver {
90
90
  * from the devserver
91
91
  */
92
92
  assetServerURL(): ResolvedAssetSource {
93
- invariant(!!this.serverUrl, 'need server to load from');
93
+ invariant(this.serverUrl != null, 'need server to load from');
94
94
  return this.fromSource(
95
95
  this.serverUrl +
96
96
  getScaledAssetPath(this.asset) +
@@ -114,7 +114,7 @@ class AssetSourceResolver {
114
114
  * E.g. 'file:///sdcard/bundle/assets/AwesomeModule/icon@2x.png'
115
115
  */
116
116
  scaledAssetURLNearBundle(): ResolvedAssetSource {
117
- const path = this.jsbundleUrl || 'file://';
117
+ const path = this.jsbundleUrl ?? 'file://';
118
118
  return this.fromSource(
119
119
  // Assets can have relative paths outside of the project root.
120
120
  // When bundling them we replace `../` with `_` to make sure they
@@ -143,7 +143,7 @@ class AssetSourceResolver {
143
143
  * E.g. 'file:///sdcard/AwesomeModule/drawable-mdpi/icon.png'
144
144
  */
145
145
  drawableFolderInBundle(): ResolvedAssetSource {
146
- const path = this.jsbundleUrl || 'file://';
146
+ const path = this.jsbundleUrl ?? 'file://';
147
147
  return this.fromSource(path + getAssetPathInDrawableFolder(this.asset));
148
148
  }
149
149
 
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @flow
7
+ * @flow strict-local
8
8
  * @format
9
9
  */
10
10
 
@@ -14,12 +14,11 @@ let cacheBreaker;
14
14
  let warnIfCacheBreakerUnset = true;
15
15
 
16
16
  export function pickScale(scales: Array<number>, deviceScale?: number): number {
17
- if (deviceScale == null) {
18
- deviceScale = PixelRatio.get();
19
- }
17
+ const requiredDeviceScale = deviceScale ?? PixelRatio.get();
18
+
20
19
  // Packager guarantees that `scales` array is sorted
21
20
  for (let i = 0; i < scales.length; i++) {
22
- if (scales[i] >= deviceScale) {
21
+ if (scales[i] >= requiredDeviceScale) {
23
22
  return scales[i];
24
23
  }
25
24
  }