@office-iss/react-native-win32 0.73.2 → 0.74.0-preview.2

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 (475) hide show
  1. package/.eslintignore +1 -1
  2. package/.flowconfig +11 -3
  3. package/CHANGELOG.json +426 -54
  4. package/CHANGELOG.md +165 -30
  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/Pressable/Pressable.js +1 -1
  61. package/Libraries/Components/Pressable/Pressable.win32.js +1 -1
  62. package/Libraries/Components/Pressable/useAndroidRippleForView.js +5 -4
  63. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +4 -24
  64. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +3 -64
  65. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +3 -61
  66. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
  67. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +3 -15
  68. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +3 -16
  69. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +1 -1
  70. package/Libraries/Components/ScrollView/ScrollView.d.ts +5 -6
  71. package/Libraries/Components/ScrollView/ScrollView.js +12 -38
  72. package/Libraries/Components/ScrollView/ScrollView.win32.js +12 -38
  73. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -2
  74. package/Libraries/Components/Sound/NativeSoundManager.js +3 -12
  75. package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +3 -58
  76. package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +3 -79
  77. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +4 -53
  78. package/Libraries/Components/Switch/Switch.js +0 -2
  79. package/Libraries/Components/Switch/SwitchNativeComponent.js +4 -52
  80. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +8 -0
  81. package/Libraries/Components/TextInput/InputAccessoryView.js +18 -20
  82. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +4 -17
  83. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +3 -6
  84. package/Libraries/Components/TextInput/Tests/TextInputTest.d.ts +8 -8
  85. package/Libraries/Components/TextInput/Tests/TextInputTest.js +127 -127
  86. package/Libraries/Components/TextInput/Tests/TextInputTest.js.map +1 -1
  87. package/Libraries/Components/TextInput/TextInput.d.ts +16 -0
  88. package/Libraries/Components/TextInput/TextInput.flow.js +16 -0
  89. package/Libraries/Components/TextInput/TextInput.js +65 -32
  90. package/Libraries/Components/TextInput/TextInput.win32.js +70 -37
  91. package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +3 -28
  92. package/Libraries/Components/Touchable/PooledClass.js +1 -1
  93. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.d.ts +8 -8
  94. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js +343 -344
  95. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
  96. package/Libraries/Components/Touchable/Touchable.js +2 -3
  97. package/Libraries/Components/Touchable/Touchable.win32.js +2 -3
  98. package/Libraries/Components/Touchable/TouchableHighlight.js +4 -4
  99. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -1
  100. package/Libraries/Components/Touchable/TouchableOpacity.js +5 -2
  101. package/Libraries/Components/Touchable/TouchableWin32.Props.d.ts +37 -37
  102. package/Libraries/Components/Touchable/TouchableWin32.Props.js +2 -2
  103. package/Libraries/Components/Touchable/TouchableWin32.Props.js.map +1 -1
  104. package/Libraries/Components/Touchable/TouchableWin32.Types.d.ts +114 -114
  105. package/Libraries/Components/Touchable/TouchableWin32.Types.js +2 -2
  106. package/Libraries/Components/Touchable/TouchableWin32.Types.js.map +1 -1
  107. package/Libraries/Components/Touchable/TouchableWin32.d.ts +91 -91
  108. package/Libraries/Components/Touchable/TouchableWin32.js +506 -506
  109. package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
  110. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +3 -16
  111. package/Libraries/Components/View/ReactNativeStyleAttributes.js +2 -1
  112. package/Libraries/Components/View/View.js +0 -11
  113. package/Libraries/Components/View/View.win32.js +18 -17
  114. package/Libraries/Components/View/ViewAccessibility.d.ts +33 -17
  115. package/Libraries/Components/View/ViewPropTypes.d.ts +28 -17
  116. package/Libraries/Components/View/ViewPropTypes.js +36 -36
  117. package/Libraries/Components/View/ViewPropTypes.win32.js +36 -36
  118. package/Libraries/Core/InitializeCore.js +1 -1
  119. package/Libraries/Core/NativeExceptionsManager.js +3 -93
  120. package/Libraries/Core/ReactNativeVersion.js +12 -6
  121. package/Libraries/Core/ReactNativeVersionCheck.js +6 -6
  122. package/Libraries/Core/ReactNativeVersionCheck.win32.js +6 -6
  123. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +3 -18
  124. package/Libraries/Core/Timers/NativeTiming.js +3 -16
  125. package/Libraries/Core/registerCallableModule.d.ts +16 -0
  126. package/Libraries/Core/registerCallableModule.js +42 -0
  127. package/Libraries/Core/setUpPerformance.js +2 -2
  128. package/Libraries/Core/setUpPerformanceObserver.js +3 -1
  129. package/Libraries/Debugging/DebuggingOverlay.js +111 -0
  130. package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +13 -0
  131. package/Libraries/Debugging/DebuggingOverlayRegistry.js +513 -0
  132. package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +32 -0
  133. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +3 -14
  134. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +3 -9
  135. package/Libraries/Image/AssetSourceResolver.js +5 -5
  136. package/Libraries/Image/AssetUtils.js +4 -5
  137. package/Libraries/Image/Image.android.js +146 -174
  138. package/Libraries/Image/Image.d.ts +1 -1
  139. package/Libraries/Image/Image.ios.js +53 -79
  140. package/Libraries/Image/Image.win32.js +52 -74
  141. package/Libraries/Image/ImageBackground.js +2 -2
  142. package/Libraries/Image/ImageInjection.js +76 -18
  143. package/Libraries/Image/ImageTypes.d.ts +25 -25
  144. package/Libraries/Image/ImageTypes.flow.js +71 -0
  145. package/Libraries/Image/ImageTypes.js +7 -7
  146. package/Libraries/Image/ImageTypes.js.map +1 -1
  147. package/Libraries/Image/ImageUtils.js +1 -1
  148. package/Libraries/Image/ImageViewNativeComponent.js +18 -0
  149. package/Libraries/Image/NativeImageEditor.js +3 -42
  150. package/Libraries/Image/NativeImageLoaderAndroid.js +4 -28
  151. package/Libraries/Image/NativeImageLoaderIOS.js +4 -28
  152. package/Libraries/Image/NativeImageLoaderWin32.js +4 -36
  153. package/Libraries/Image/NativeImageStoreAndroid.js +3 -16
  154. package/Libraries/Image/NativeImageStoreIOS.js +3 -23
  155. package/Libraries/Image/Tests/ImageWin32Test.d.ts +8 -8
  156. package/Libraries/Image/Tests/ImageWin32Test.js +21 -21
  157. package/Libraries/Image/Tests/ImageWin32Test.js.map +1 -1
  158. package/Libraries/Image/resolveAssetSource.js +59 -26
  159. package/Libraries/Inspector/ElementProperties.js +26 -52
  160. package/Libraries/Inspector/Inspector.js +122 -186
  161. package/Libraries/Inspector/Inspector.win32.js +118 -185
  162. package/Libraries/Inspector/InspectorOverlay.js +21 -33
  163. package/Libraries/Inspector/InspectorOverlay.win32.js +22 -33
  164. package/Libraries/Inspector/InspectorPanel.js +3 -17
  165. package/Libraries/Inspector/ReactDevToolsOverlay.js +171 -0
  166. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +20 -8
  167. package/Libraries/Interaction/FrameRateLogger.js +8 -18
  168. package/Libraries/Interaction/NativeFrameRateLogger.js +4 -16
  169. package/Libraries/IntersectionObserver/IntersectionObserver.js +1 -1
  170. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +20 -19
  171. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +84 -6
  172. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +3 -31
  173. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +12 -2
  174. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -2
  175. package/Libraries/Linking/NativeIntentAndroid.js +3 -20
  176. package/Libraries/Linking/NativeLinkingManager.js +3 -17
  177. package/Libraries/Lists/FillRateHelper.js +1 -1
  178. package/Libraries/Lists/FlatList.d.ts +2 -2
  179. package/Libraries/Lists/FlatList.js +6 -2
  180. package/Libraries/Lists/SectionList.d.ts +6 -1
  181. package/Libraries/Lists/ViewabilityHelper.js +1 -1
  182. package/Libraries/Lists/VirtualizeUtils.js +1 -1
  183. package/Libraries/Lists/VirtualizedList.js +1 -1
  184. package/Libraries/Lists/VirtualizedListContext.js +1 -1
  185. package/Libraries/Lists/VirtualizedSectionList.js +1 -1
  186. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  187. package/Libraries/Modal/Modal.js +43 -11
  188. package/Libraries/Modal/NativeModalManager.js +3 -11
  189. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +3 -129
  190. package/Libraries/MutationObserver/MutationObserver.js +1 -1
  191. package/Libraries/MutationObserver/MutationObserverManager.js +2 -2
  192. package/Libraries/MutationObserver/MutationRecord.js +12 -10
  193. package/Libraries/MutationObserver/NativeMutationObserver.js +3 -48
  194. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +1 -1
  195. package/Libraries/NativeComponent/BaseViewConfig.android.js +1 -0
  196. package/Libraries/NativeComponent/NativeComponentRegistry.js +1 -1
  197. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +3 -10
  198. package/Libraries/NativeModules/specs/NativeDevMenu.js +3 -13
  199. package/Libraries/NativeModules/specs/NativeDevSettings.js +3 -23
  200. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +3 -9
  201. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +3 -38
  202. package/Libraries/NativeModules/specs/NativeLogBox.js +3 -10
  203. package/Libraries/NativeModules/specs/NativeRedBox.js +4 -11
  204. package/Libraries/NativeModules/specs/NativeSourceCode.js +2 -25
  205. package/Libraries/Network/FormData.js +3 -1
  206. package/Libraries/Network/NativeNetworkingAndroid.js +4 -28
  207. package/Libraries/Network/NativeNetworkingIOS.js +4 -28
  208. package/Libraries/Performance/NativeJSCSamplingProfiler.js +3 -9
  209. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +4 -68
  210. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -3
  211. package/Libraries/PersonaCoin/PersonaCoin.d.ts +3 -3
  212. package/Libraries/PersonaCoin/PersonaCoin.js +14 -14
  213. package/Libraries/PersonaCoin/PersonaCoin.js.map +1 -1
  214. package/Libraries/PersonaCoin/PersonaCoinPropTypes.d.ts +2 -2
  215. package/Libraries/PersonaCoin/PersonaCoinPropTypes.js +19 -19
  216. package/Libraries/PersonaCoin/PersonaCoinPropTypes.js.map +1 -1
  217. package/Libraries/PersonaCoin/PersonaCoinTypes.d.ts +33 -33
  218. package/Libraries/PersonaCoin/PersonaCoinTypes.js +23 -23
  219. package/Libraries/PersonaCoin/PersonaCoinTypes.js.map +1 -1
  220. package/Libraries/Pressability/Pressability.js +12 -2
  221. package/Libraries/Pressability/Pressability.win32.js +12 -2
  222. package/Libraries/Pressability/usePressability.js +7 -0
  223. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +4 -70
  224. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +45 -39
  225. package/Libraries/ReactNative/AppContainer-dev.js +211 -0
  226. package/Libraries/ReactNative/AppContainer-prod.js +53 -0
  227. package/Libraries/ReactNative/AppContainer.js +6 -149
  228. package/Libraries/ReactNative/AppRegistry.js +3 -1
  229. package/Libraries/ReactNative/BridgelessUIManager.js +375 -128
  230. package/Libraries/ReactNative/FabricUIManager.js +6 -0
  231. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +3 -10
  232. package/Libraries/ReactNative/NativeI18nManager.js +3 -18
  233. package/Libraries/ReactNative/NativeUIManager.js +4 -112
  234. package/Libraries/ReactNative/PaperUIManager.js +8 -7
  235. package/Libraries/ReactNative/PaperUIManager.win32.js +26 -7
  236. package/Libraries/ReactNative/ReactFabricInternals.js +1 -1
  237. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +24 -5
  238. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -45
  239. package/Libraries/ReactNative/RendererImplementation.js +11 -0
  240. package/Libraries/ReactNative/UIManager.d.ts +11 -34
  241. package/Libraries/ReactNative/UIManager.js +2 -23
  242. package/Libraries/ReactNative/UIManagerProperties.js +0 -2
  243. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +23 -1
  244. package/Libraries/ReactNative/getNativeComponentAttributes.js +5 -1
  245. package/Libraries/ReactNative/renderApplication.js +9 -6
  246. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +6 -1
  247. package/Libraries/Renderer/implementations/ReactFabric-dev.js +24771 -21123
  248. package/Libraries/Renderer/implementations/ReactFabric-prod.js +4160 -3109
  249. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4384 -3322
  250. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +25194 -21398
  251. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3763 -2636
  252. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4027 -2867
  253. package/Libraries/Renderer/shims/ReactNativeTypes.js +8 -9
  254. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -12
  255. package/Libraries/Settings/NativeSettingsManager.js +4 -16
  256. package/Libraries/Share/NativeShareModule.js +3 -13
  257. package/Libraries/StyleSheet/PlatformColorValueTypes.win32.js +1 -1
  258. package/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  259. package/Libraries/StyleSheet/PlatformColorValueTypesWin32.js +1 -1
  260. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -20
  261. package/Libraries/StyleSheet/StyleSheet.js +5 -28
  262. package/Libraries/StyleSheet/StyleSheet.win32.js +5 -28
  263. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +51 -7
  264. package/Libraries/StyleSheet/StyleSheetTypes.js +19 -11
  265. package/Libraries/StyleSheet/flattenStyle.js +2 -2
  266. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  267. package/Libraries/StyleSheet/processAspectRatio.js +1 -1
  268. package/Libraries/StyleSheet/processFontVariant.js +1 -1
  269. package/Libraries/Text/Text.d.ts +5 -6
  270. package/Libraries/Text/Text.js +0 -6
  271. package/Libraries/Text/Text.win32.js +0 -6
  272. package/Libraries/Text/TextAncestor.js +2 -3
  273. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +4 -41
  274. package/Libraries/Types/ReactDevToolsTypes.js +58 -0
  275. package/Libraries/Types/UIManagerJSInterface.js +16 -0
  276. package/Libraries/Utilities/DebugEnvironment.js +1 -4
  277. package/Libraries/Utilities/Dimensions.js +8 -16
  278. package/Libraries/Utilities/Dimensions.win32.js +8 -16
  279. package/Libraries/Utilities/FocusManager.win32.js +2 -0
  280. package/Libraries/Utilities/GlobalPerformanceLogger.js +1 -2
  281. package/Libraries/Utilities/NativeAppearance.js +3 -26
  282. package/Libraries/Utilities/NativeDevLoadingView.js +3 -14
  283. package/Libraries/Utilities/NativeDeviceInfo.js +2 -47
  284. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +3 -34
  285. package/Libraries/Utilities/NativePlatformConstantsIOS.js +3 -26
  286. package/Libraries/Utilities/NativePlatformConstantsWin.js +3 -23
  287. package/Libraries/Utilities/PixelRatio.d.ts +4 -4
  288. package/Libraries/Utilities/Platform.android.js +4 -0
  289. package/Libraries/Utilities/Platform.d.ts +3 -0
  290. package/Libraries/Utilities/Platform.flow.js +7 -0
  291. package/Libraries/Utilities/Platform.flow.win32.js +18 -5
  292. package/Libraries/Utilities/Platform.ios.js +11 -0
  293. package/Libraries/Utilities/Platform.win32.js +9 -1
  294. package/Libraries/Utilities/binaryToBase64.js +1 -1
  295. package/Libraries/Utilities/codegenNativeComponent.js +4 -6
  296. package/Libraries/Utilities/createPerformanceLogger.js +2 -74
  297. package/Libraries/Utilities/useMergeRefs.js +5 -9
  298. package/Libraries/Vibration/NativeVibration.js +3 -14
  299. package/Libraries/WebSocket/NativeWebSocketModule.js +4 -25
  300. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
  301. package/Libraries/platform-types.d.ts +2 -3
  302. package/Libraries/vendor/emitter/EventEmitter.js +1 -0
  303. package/babel.config.js +1 -1
  304. package/flow/jest.js +1 -1
  305. package/flow/react.js +15 -0
  306. package/index.js +61 -99
  307. package/index.win32.js +60 -101
  308. package/jest/assetFileTransformer.js +1 -1
  309. package/jest/local-setup.js +0 -5
  310. package/jest/mockModal.js +2 -1
  311. package/jest/mockScrollView.js +1 -2
  312. package/jest/renderer.js +1 -1
  313. package/jest/setup.js +6 -3
  314. package/jest.config.js +2 -1
  315. package/overrides.json +152 -131
  316. package/package.json +27 -26
  317. package/{Libraries/Core → src/private/core}/setUpDOM.js +2 -2
  318. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +42 -0
  319. package/src/private/featureflags/ReactNativeFeatureFlags.js +140 -0
  320. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +84 -0
  321. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +92 -0
  322. package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +53 -0
  323. package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +124 -0
  324. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +26 -0
  325. package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +74 -0
  326. package/src/private/specs/components/AndroidSwitchNativeComponent.js +62 -0
  327. package/src/private/specs/components/DebuggingOverlayNativeComponent.js +61 -0
  328. package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +36 -0
  329. package/src/private/specs/components/PullToRefreshViewNativeComponent.js +71 -0
  330. package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +26 -0
  331. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +139 -0
  332. package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +25 -0
  333. package/src/private/specs/components/SwitchNativeComponent.js +61 -0
  334. package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +26 -0
  335. package/src/private/specs/modules/NativeAccessibilityInfo.js +33 -0
  336. package/src/private/specs/modules/NativeAccessibilityInfoWin32.js +39 -0
  337. package/src/private/specs/modules/NativeAccessibilityManager.js +66 -0
  338. package/src/private/specs/modules/NativeActionSheetManager.js +54 -0
  339. package/src/private/specs/modules/NativeAlertManager.js +35 -0
  340. package/src/private/specs/modules/NativeAnimatedModule.js +77 -0
  341. package/src/private/specs/modules/NativeAnimatedTurboModule.js +78 -0
  342. package/src/private/specs/modules/NativeAnimationsDebugModule.js +20 -0
  343. package/src/private/specs/modules/NativeAppState.js +33 -0
  344. package/src/private/specs/modules/NativeAppearance.js +36 -0
  345. package/src/private/specs/modules/NativeBlobModule.js +59 -0
  346. package/src/private/specs/modules/NativeBugReporting.js +20 -0
  347. package/src/private/specs/modules/NativeClipboard.js +21 -0
  348. package/src/private/specs/modules/NativeDevLoadingView.js +24 -0
  349. package/src/private/specs/modules/NativeDevMenu.js +23 -0
  350. package/src/private/specs/modules/NativeDevSettings.js +33 -0
  351. package/src/private/specs/modules/NativeDevToolsSettingsManager.js +24 -0
  352. package/src/private/specs/modules/NativeDeviceEventManager.js +19 -0
  353. package/src/private/specs/modules/NativeDeviceInfo.js +58 -0
  354. package/src/private/specs/modules/NativeDialogManagerAndroid.js +48 -0
  355. package/src/private/specs/modules/NativeExceptionsManager.js +103 -0
  356. package/src/private/specs/modules/NativeFileReaderModule.js +22 -0
  357. package/src/private/specs/modules/NativeFrameRateLogger.js +22 -0
  358. package/src/private/specs/modules/NativeHeadlessJsTaskSupport.js +20 -0
  359. package/src/private/specs/modules/NativeI18nManager.js +28 -0
  360. package/src/private/specs/modules/NativeImageEditor.js +52 -0
  361. package/src/private/specs/modules/NativeImageLoaderAndroid.js +30 -0
  362. package/src/private/specs/modules/NativeImageLoaderIOS.js +37 -0
  363. package/src/private/specs/modules/NativeImageLoaderWin32.js +45 -0
  364. package/src/private/specs/modules/NativeImageStoreAndroid.js +26 -0
  365. package/src/private/specs/modules/NativeImageStoreIOS.js +33 -0
  366. package/src/private/specs/modules/NativeIntentAndroid.js +30 -0
  367. package/src/private/specs/modules/NativeIntersectionObserver.js +41 -0
  368. package/src/private/specs/modules/NativeJSCHeapCapture.js +19 -0
  369. package/src/private/specs/modules/NativeJSCSamplingProfiler.js +19 -0
  370. package/src/private/specs/modules/NativeKeyboardObserver.js +20 -0
  371. package/src/private/specs/modules/NativeLinkingManager.js +27 -0
  372. package/src/private/specs/modules/NativeLogBox.js +20 -0
  373. package/src/private/specs/modules/NativeModalManager.js +21 -0
  374. package/src/private/specs/modules/NativeMutationObserver.js +58 -0
  375. package/src/private/specs/modules/NativeNetworkingAndroid.js +37 -0
  376. package/src/private/specs/modules/NativeNetworkingIOS.js +37 -0
  377. package/src/private/specs/modules/NativePermissionsAndroid.js +77 -0
  378. package/src/private/specs/modules/NativePlatformConstantsAndroid.js +44 -0
  379. package/src/private/specs/modules/NativePlatformConstantsIOS.js +37 -0
  380. package/src/private/specs/modules/NativePlatformConstantsWin.js +37 -0
  381. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +107 -0
  382. package/src/private/specs/modules/NativeRedBox.js +20 -0
  383. package/src/private/specs/modules/NativeSampleTurboModule.js +53 -0
  384. package/src/private/specs/modules/NativeSegmentFetcher.js +28 -0
  385. package/src/private/specs/modules/NativeSettingsManager.js +25 -0
  386. package/src/private/specs/modules/NativeShareModule.js +23 -0
  387. package/src/private/specs/modules/NativeSoundManager.js +22 -0
  388. package/src/private/specs/modules/NativeSourceCode.js +36 -0
  389. package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +68 -0
  390. package/src/private/specs/modules/NativeStatusBarManagerIOS.js +89 -0
  391. package/src/private/specs/modules/NativeTiming.js +26 -0
  392. package/src/private/specs/modules/NativeToastAndroid.js +38 -0
  393. package/src/private/specs/modules/NativeUIManager.js +118 -0
  394. package/src/private/specs/modules/NativeVibration.js +24 -0
  395. package/src/private/specs/modules/NativeWebSocketModule.js +34 -0
  396. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReactNativeElement.js +6 -6
  397. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyCharacterData.js +2 -2
  398. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyElement.js +5 -5
  399. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyNode.js +19 -10
  400. package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/DOMRectList.js +1 -1
  401. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +85 -0
  402. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +80 -0
  403. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +161 -0
  404. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformance.js +2 -2
  405. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformanceObserver.js +3 -2
  406. package/{Libraries/WebPerformance → src/private/webapis/performance}/Performance.js +2 -2
  407. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEventTiming.js +1 -1
  408. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceObserver.js +21 -2
  409. package/{Libraries/WebPerformance → src/private/webapis/performance}/RawPerformanceEntry.js +1 -1
  410. package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformanceObserver.js +9 -0
  411. package/src/private/webapis/performance/__tests__/EventCounts-test.js +116 -0
  412. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +82 -0
  413. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +108 -0
  414. package/src/private/webapis/performance/__tests__/Performance-test.js +117 -0
  415. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +208 -0
  416. package/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +161 -0
  417. package/{src → src-win}/Libraries/Components/Button/ButtonWin32.tsx +3 -3
  418. package/{src → src-win}/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +9 -10
  419. package/{src → src-win}/Libraries/Components/View/ViewAccessibility.d.ts +33 -17
  420. package/{src → src-win}/Libraries/Components/View/ViewPropTypes.d.ts +28 -17
  421. package/{src → src-win}/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  422. package/{src → src-win}/Libraries/Text/Text.d.ts +5 -6
  423. package/{src → src-win}/Libraries/platform-types.d.ts +2 -3
  424. package/types/index.d.ts +1 -0
  425. package/types/modules/globals.d.ts +1 -0
  426. package/Libraries/Components/Button.flow.js +0 -265
  427. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +0 -85
  428. package/Libraries/Components/Text/TextWin32.Props.d.ts +0 -63
  429. package/Libraries/Components/Text/TextWin32.Props.js +0 -3
  430. package/Libraries/Components/Text/TextWin32.Props.js.map +0 -1
  431. package/Libraries/Components/Text/TextWin32.d.ts +0 -6
  432. package/Libraries/Components/Text/TextWin32.js +0 -18
  433. package/Libraries/Components/Text/TextWin32.js.map +0 -1
  434. package/Libraries/Components/Touchable/Touchable.flow.js +0 -284
  435. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +0 -189
  436. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +0 -43
  437. package/Libraries/Image/Image.flow.js +0 -64
  438. package/Libraries/Inspector/DevtoolsOverlay.js +0 -223
  439. package/Libraries/Performance/QuickPerformanceLogger.js +0 -142
  440. package/src/Libraries/Components/Text/TextWin32.Props.ts +0 -82
  441. package/src/Libraries/Components/Text/TextWin32.tsx +0 -25
  442. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRect.js +0 -0
  443. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRectReadOnly.js +0 -0
  444. /package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyText.js +0 -0
  445. /package/{Libraries/DOM/Nodes/Utilities → src/private/webapis/dom/nodes/utilities}/Traversal.js +0 -0
  446. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/ArrayLikeUtils.js +0 -0
  447. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/HTMLCollection.js +0 -0
  448. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/NodeList.js +0 -0
  449. /package/{Libraries/WebPerformance → src/private/webapis/performance}/EventCounts.js +0 -0
  450. /package/{Libraries/WebPerformance → src/private/webapis/performance}/MemoryInfo.js +0 -0
  451. /package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEntry.js +0 -0
  452. /package/{Libraries/WebPerformance → src/private/webapis/performance}/ReactNativeStartupTiming.js +0 -0
  453. /package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformance.js +0 -0
  454. /package/{src → src-win}/Libraries/Components/Button/ButtonWin32.Props.ts +0 -0
  455. /package/{src → src-win}/Libraries/Components/EnterString.win32.tsx +0 -0
  456. /package/{src → src-win}/Libraries/Components/TextInput/Tests/TextInputTest.tsx +0 -0
  457. /package/{src → src-win}/Libraries/Components/Touchable/TouchableNativeFeedback.d.ts +0 -0
  458. /package/{src → src-win}/Libraries/Components/Touchable/TouchableWin32.Props.tsx +0 -0
  459. /package/{src → src-win}/Libraries/Components/Touchable/TouchableWin32.Types.tsx +0 -0
  460. /package/{src → src-win}/Libraries/Components/Touchable/TouchableWin32.tsx +0 -0
  461. /package/{src → src-win}/Libraries/Components/View/ViewWin32.d.ts +0 -0
  462. /package/{src → src-win}/Libraries/Image/ImageTypes.ts +0 -0
  463. /package/{src → src-win}/Libraries/Image/Tests/ImageWin32Test.tsx +0 -0
  464. /package/{src → src-win}/Libraries/Image/Tests/img/dpitest.png +0 -0
  465. /package/{src → src-win}/Libraries/Image/Tests/img/dpitest@1.5x.png +0 -0
  466. /package/{src → src-win}/Libraries/Image/Tests/img/dpitest@2x.png +0 -0
  467. /package/{src → src-win}/Libraries/Image/Tests/img/dpitest@3x.png +0 -0
  468. /package/{src → src-win}/Libraries/Image/Tests/img/en-us/dpitest.png +0 -0
  469. /package/{src → src-win}/Libraries/Image/Tests/img/en-us/dpitest@1.5x.png +0 -0
  470. /package/{src → src-win}/Libraries/Image/Tests/img/en-us/dpitest@3x.png +0 -0
  471. /package/{src → src-win}/Libraries/PersonaCoin/PersonaCoin.tsx +0 -0
  472. /package/{src → src-win}/Libraries/PersonaCoin/PersonaCoinPropTypes.ts +0 -0
  473. /package/{src → src-win}/Libraries/PersonaCoin/PersonaCoinTypes.ts +0 -0
  474. /package/{src → src-win}/Libraries/Utilities/FocusManager.win32.d.ts +0 -0
  475. /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
  }