@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,171 @@
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
+ * @format
8
+ * @flow
9
+ */
10
+
11
+ import type {InspectedViewRef} from '../ReactNative/AppContainer-dev';
12
+ import type {PointerEvent} from '../Types/CoreEventTypes';
13
+ import type {PressEvent} from '../Types/CoreEventTypes';
14
+ import type {ReactDevToolsAgent} from '../Types/ReactDevToolsTypes';
15
+ import type {InspectedElement} from './Inspector';
16
+
17
+ import View from '../Components/View/View';
18
+ import ReactNativeFeatureFlags from '../ReactNative/ReactNativeFeatureFlags';
19
+ import StyleSheet from '../StyleSheet/StyleSheet';
20
+ import ElementBox from './ElementBox';
21
+ import * as React from 'react';
22
+
23
+ const {findNodeHandle} = require('../ReactNative/RendererProxy');
24
+ const getInspectorDataForViewAtPoint = require('./getInspectorDataForViewAtPoint');
25
+
26
+ const {useEffect, useState, useCallback} = React;
27
+
28
+ type Props = {
29
+ inspectedViewRef: InspectedViewRef,
30
+ reactDevToolsAgent: ReactDevToolsAgent,
31
+ };
32
+
33
+ export default function ReactDevToolsOverlay({
34
+ inspectedViewRef,
35
+ reactDevToolsAgent,
36
+ }: Props): React.Node {
37
+ const [inspected, setInspected] = useState<?InspectedElement>(null);
38
+ const [isInspecting, setIsInspecting] = useState(false);
39
+
40
+ useEffect(() => {
41
+ function cleanup() {
42
+ reactDevToolsAgent.removeListener('shutdown', cleanup);
43
+ reactDevToolsAgent.removeListener(
44
+ 'startInspectingNative',
45
+ onStartInspectingNative,
46
+ );
47
+ reactDevToolsAgent.removeListener(
48
+ 'stopInspectingNative',
49
+ onStopInspectingNative,
50
+ );
51
+ }
52
+
53
+ function onStartInspectingNative() {
54
+ setIsInspecting(true);
55
+ }
56
+
57
+ function onStopInspectingNative() {
58
+ setIsInspecting(false);
59
+ }
60
+
61
+ reactDevToolsAgent.addListener('shutdown', cleanup);
62
+ reactDevToolsAgent.addListener(
63
+ 'startInspectingNative',
64
+ onStartInspectingNative,
65
+ );
66
+ reactDevToolsAgent.addListener(
67
+ 'stopInspectingNative',
68
+ onStopInspectingNative,
69
+ );
70
+
71
+ return cleanup;
72
+ }, [reactDevToolsAgent]);
73
+
74
+ const findViewForLocation = useCallback(
75
+ (x: number, y: number) => {
76
+ getInspectorDataForViewAtPoint(
77
+ inspectedViewRef.current,
78
+ x,
79
+ y,
80
+ viewData => {
81
+ const {touchedViewTag, closestInstance, frame} = viewData;
82
+ if (closestInstance != null || touchedViewTag != null) {
83
+ // We call `selectNode` for both non-fabric(viewTag) and fabric(instance),
84
+ // this makes sure it works for both architectures.
85
+ reactDevToolsAgent.selectNode(findNodeHandle(touchedViewTag));
86
+ if (closestInstance != null) {
87
+ reactDevToolsAgent.selectNode(closestInstance);
88
+ }
89
+ setInspected({
90
+ frame,
91
+ });
92
+ return true;
93
+ }
94
+ return false;
95
+ },
96
+ );
97
+ },
98
+ [inspectedViewRef, reactDevToolsAgent],
99
+ );
100
+
101
+ const stopInspecting = useCallback(() => {
102
+ reactDevToolsAgent.stopInspectingNative(true);
103
+ setIsInspecting(false);
104
+ setInspected(null);
105
+ }, [reactDevToolsAgent]);
106
+
107
+ const onPointerMove = useCallback(
108
+ (e: PointerEvent) => {
109
+ findViewForLocation(e.nativeEvent.x, e.nativeEvent.y);
110
+ },
111
+ [findViewForLocation],
112
+ );
113
+
114
+ const onResponderMove = useCallback(
115
+ (e: PressEvent) => {
116
+ findViewForLocation(
117
+ e.nativeEvent.touches[0].locationX,
118
+ e.nativeEvent.touches[0].locationY,
119
+ );
120
+ },
121
+ [findViewForLocation],
122
+ );
123
+
124
+ const shouldSetResponder = useCallback(
125
+ (e: PressEvent): boolean => {
126
+ onResponderMove(e);
127
+ return true;
128
+ },
129
+ [onResponderMove],
130
+ );
131
+
132
+ const highlight = inspected ? <ElementBox frame={inspected.frame} /> : null;
133
+
134
+ if (isInspecting) {
135
+ const events =
136
+ // Pointer events only work on fabric
137
+ ReactNativeFeatureFlags.shouldEmitW3CPointerEvents()
138
+ ? {
139
+ onPointerMove,
140
+ onPointerDown: onPointerMove,
141
+ onPointerUp: stopInspecting,
142
+ }
143
+ : {
144
+ onStartShouldSetResponder: shouldSetResponder,
145
+ onResponderMove: onResponderMove,
146
+ onResponderRelease: stopInspecting,
147
+ };
148
+
149
+ return (
150
+ <View
151
+ nativeID="devToolsInspectorOverlay"
152
+ style={styles.inspector}
153
+ {...events}>
154
+ {highlight}
155
+ </View>
156
+ );
157
+ }
158
+
159
+ return highlight;
160
+ }
161
+
162
+ const styles = StyleSheet.create({
163
+ inspector: {
164
+ backgroundColor: 'transparent',
165
+ position: 'absolute',
166
+ left: 0,
167
+ top: 0,
168
+ right: 0,
169
+ bottom: 0,
170
+ },
171
+ });
@@ -28,17 +28,27 @@ export type ReactRenderer = {
28
28
  ...
29
29
  },
30
30
  };
31
+ type AttachedRendererEventPayload = {id: number, renderer: ReactRenderer};
31
32
 
32
- const hook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;
33
- const renderers = findRenderers();
33
+ const reactDevToolsHook = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;
34
+ invariant(
35
+ Boolean(reactDevToolsHook),
36
+ 'getInspectorDataForViewAtPoint should not be used if React DevTools hook is not injected',
37
+ );
34
38
 
35
- function findRenderers(): $ReadOnlyArray<ReactRenderer> {
36
- const allRenderers = Array.from(hook.renderers.values());
39
+ const renderers: Array<ReactRenderer> = Array.from(
40
+ window.__REACT_DEVTOOLS_GLOBAL_HOOK__.renderers.values(),
41
+ );
42
+
43
+ const appendRenderer = ({renderer}: AttachedRendererEventPayload) =>
44
+ renderers.push(renderer);
45
+ reactDevToolsHook.on('renderer', appendRenderer);
46
+
47
+ function validateRenderers(): void {
37
48
  invariant(
38
- allRenderers.length >= 1,
49
+ renderers.length > 0,
39
50
  'Expected to find at least one React Native renderer on DevTools hook.',
40
51
  );
41
- return allRenderers;
42
52
  }
43
53
 
44
54
  module.exports = function getInspectorDataForViewAtPoint(
@@ -47,13 +57,15 @@ module.exports = function getInspectorDataForViewAtPoint(
47
57
  locationY: number,
48
58
  callback: (viewData: TouchedViewDataAtPoint) => boolean,
49
59
  ) {
60
+ validateRenderers();
61
+
50
62
  let shouldBreak = false;
51
63
  // Check all renderers for inspector data.
52
- for (let i = 0; i < renderers.length; i++) {
64
+ for (const renderer of renderers) {
53
65
  if (shouldBreak) {
54
66
  break;
55
67
  }
56
- const renderer = renderers[i];
68
+
57
69
  if (renderer?.rendererConfig?.getInspectorDataForViewAtPoint != null) {
58
70
  renderer.rendererConfig.getInspectorDataForViewAtPoint(
59
71
  inspectedView,
@@ -30,28 +30,18 @@ const invariant = require('invariant');
30
30
  */
31
31
  const FrameRateLogger = {
32
32
  /**
33
- * Enable `debug` to see local logs of what's going on. `reportStackTraces` will grab stack traces
34
- * during UI thread stalls and upload them if the native module supports it.
33
+ * Enable `debug` to see local logs of what's going on.
35
34
  */
36
- setGlobalOptions: function (options: {
37
- debug?: boolean,
38
- reportStackTraces?: boolean,
39
- ...
40
- }) {
35
+ setGlobalOptions: function (options: {debug?: boolean, ...}) {
41
36
  if (options.debug !== undefined) {
42
37
  invariant(
43
38
  NativeFrameRateLogger,
44
39
  'Trying to debug FrameRateLogger without the native module!',
45
40
  );
46
41
  }
47
- if (NativeFrameRateLogger) {
48
- // Needs to clone the object first to avoid modifying the argument.
49
- const optionsClone = {
50
- debug: !!options.debug,
51
- reportStackTraces: !!options.reportStackTraces,
52
- };
53
- NativeFrameRateLogger.setGlobalOptions(optionsClone);
54
- }
42
+ NativeFrameRateLogger?.setGlobalOptions({
43
+ debug: !!options.debug,
44
+ });
55
45
  },
56
46
 
57
47
  /**
@@ -59,7 +49,7 @@ const FrameRateLogger = {
59
49
  * in `AppRegistry`, but navigation is also a common place to hook in.
60
50
  */
61
51
  setContext: function (context: string) {
62
- NativeFrameRateLogger && NativeFrameRateLogger.setContext(context);
52
+ NativeFrameRateLogger?.setContext(context);
63
53
  },
64
54
 
65
55
  /**
@@ -67,7 +57,7 @@ const FrameRateLogger = {
67
57
  * automatically.
68
58
  */
69
59
  beginScroll() {
70
- NativeFrameRateLogger && NativeFrameRateLogger.beginScroll();
60
+ NativeFrameRateLogger?.beginScroll();
71
61
  },
72
62
 
73
63
  /**
@@ -75,7 +65,7 @@ const FrameRateLogger = {
75
65
  * automatically.
76
66
  */
77
67
  endScroll() {
78
- NativeFrameRateLogger && NativeFrameRateLogger.endScroll();
68
+ NativeFrameRateLogger?.endScroll();
79
69
  },
80
70
  };
81
71
 
@@ -4,22 +4,10 @@
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
- * @format
8
7
  * @flow strict
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
- +setGlobalOptions: (options: {|
17
- +debug?: ?boolean,
18
- +reportStackTraces?: ?boolean,
19
- |}) => void;
20
- +setContext: (context: string) => void;
21
- +beginScroll: () => void;
22
- +endScroll: () => void;
23
- }
24
-
25
- export default (TurboModuleRegistry.get<Spec>('FrameRateLogger'): ?Spec);
11
+ export * from '../../src/private/specs/modules/NativeFrameRateLogger';
12
+ import NativeFrameRateLogger from '../../src/private/specs/modules/NativeFrameRateLogger';
13
+ export default NativeFrameRateLogger;
@@ -13,7 +13,7 @@
13
13
  import type IntersectionObserverEntry from './IntersectionObserverEntry';
14
14
  import type {IntersectionObserverId} from './IntersectionObserverManager';
15
15
 
16
- import ReactNativeElement from '../DOM/Nodes/ReactNativeElement';
16
+ import ReactNativeElement from '../../src/private/webapis/dom/nodes/ReactNativeElement';
17
17
  import * as IntersectionObserverManager from './IntersectionObserverManager';
18
18
 
19
19
  export type IntersectionObserverCallback = (
@@ -10,12 +10,10 @@
10
10
 
11
11
  // flowlint unsafe-getters-setters:off
12
12
 
13
- import type ReactNativeElement from '../DOM/Nodes/ReactNativeElement';
14
- import type {InternalInstanceHandle} from '../Renderer/shims/ReactNativeTypes';
13
+ import type ReactNativeElement from '../../src/private/webapis/dom/nodes/ReactNativeElement';
15
14
  import type {NativeIntersectionObserverEntry} from './NativeIntersectionObserver';
16
15
 
17
- import DOMRectReadOnly from '../DOM/Geometry/DOMRectReadOnly';
18
- import {getPublicInstanceFromInternalInstanceHandle} from '../DOM/Nodes/ReadOnlyNode';
16
+ import DOMRectReadOnly from '../../src/private/webapis/dom/geometry/DOMRectReadOnly';
19
17
 
20
18
  /**
21
19
  * The [`IntersectionObserverEntry`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserverEntry)
@@ -29,9 +27,17 @@ export default class IntersectionObserverEntry {
29
27
  // We lazily compute all the properties from the raw entry provided by the
30
28
  // native module, so we avoid unnecessary work.
31
29
  _nativeEntry: NativeIntersectionObserverEntry;
32
-
33
- constructor(nativeEntry: NativeIntersectionObserverEntry) {
30
+ // There are cases where this cannot be safely derived from the instance
31
+ // handle in the native entry (when the target is detached), so we need to
32
+ // keep a reference to it directly.
33
+ _target: ReactNativeElement;
34
+
35
+ constructor(
36
+ nativeEntry: NativeIntersectionObserverEntry,
37
+ target: ReactNativeElement,
38
+ ) {
34
39
  this._nativeEntry = nativeEntry;
40
+ this._target = target;
35
41
  }
36
42
 
37
43
  /**
@@ -60,10 +66,12 @@ export default class IntersectionObserverEntry {
60
66
  return 0;
61
67
  }
62
68
 
63
- return (
69
+ const ratio =
64
70
  (intersectionRect.width * intersectionRect.height) /
65
- (boundingClientRect.width * boundingClientRect.height)
66
- );
71
+ (boundingClientRect.width * boundingClientRect.height);
72
+
73
+ // Prevent rounding errors from making this value greater than 1.
74
+ return Math.min(ratio, 1);
67
75
  }
68
76
 
69
77
  /**
@@ -113,15 +121,7 @@ export default class IntersectionObserverEntry {
113
121
  * The `ReactNativeElement` whose intersection with the root changed.
114
122
  */
115
123
  get target(): ReactNativeElement {
116
- const targetInstanceHandle: InternalInstanceHandle =
117
- // $FlowExpectedError[incompatible-type] native modules don't support using InternalInstanceHandle as a type
118
- this._nativeEntry.targetInstanceHandle;
119
-
120
- const targetElement =
121
- getPublicInstanceFromInternalInstanceHandle(targetInstanceHandle);
122
-
123
- // $FlowExpectedError[incompatible-cast] we know targetElement is a ReactNativeElement, not just a ReadOnlyNode
124
- return (targetElement: ReactNativeElement);
124
+ return this._target;
125
125
  }
126
126
 
127
127
  /**
@@ -135,6 +135,7 @@ export default class IntersectionObserverEntry {
135
135
 
136
136
  export function createIntersectionObserverEntry(
137
137
  entry: NativeIntersectionObserverEntry,
138
+ target: ReactNativeElement,
138
139
  ): IntersectionObserverEntry {
139
- return new IntersectionObserverEntry(entry);
140
+ return new IntersectionObserverEntry(entry, target);
140
141
  }
@@ -18,13 +18,16 @@
18
18
  * the notifications together.
19
19
  */
20
20
 
21
- import type ReactNativeElement from '../DOM/Nodes/ReactNativeElement';
21
+ import type ReactNativeElement from '../../src/private/webapis/dom/nodes/ReactNativeElement';
22
22
  import type IntersectionObserver, {
23
23
  IntersectionObserverCallback,
24
24
  } from './IntersectionObserver';
25
25
  import type IntersectionObserverEntry from './IntersectionObserverEntry';
26
26
 
27
- import {getShadowNode} from '../DOM/Nodes/ReadOnlyNode';
27
+ import {
28
+ getInstanceHandle,
29
+ getShadowNode,
30
+ } from '../../src/private/webapis/dom/nodes/ReadOnlyNode';
28
31
  import * as Systrace from '../Performance/Systrace';
29
32
  import warnOnce from '../Utilities/warnOnce';
30
33
  import {createIntersectionObserverEntry} from './IntersectionObserverEntry';
@@ -40,6 +43,45 @@ const registeredIntersectionObservers: Map<
40
43
  {observer: IntersectionObserver, callback: IntersectionObserverCallback},
41
44
  > = new Map();
42
45
 
46
+ // We need to keep the mapping from instance handles to targets because when
47
+ // targets are detached (their components are unmounted), React resets the
48
+ // instance handle to prevent memory leaks and it cuts the connection between
49
+ // the instance handle and the target.
50
+ const instanceHandleToTargetMap: WeakMap<interface {}, ReactNativeElement> =
51
+ new WeakMap();
52
+
53
+ function getTargetFromInstanceHandle(
54
+ instanceHandle: mixed,
55
+ ): ?ReactNativeElement {
56
+ // $FlowExpectedError[incompatible-type] instanceHandle is typed as mixed but we know it's an object and we need it to be to use it as a key in a WeakMap.
57
+ const key: interface {} = instanceHandle;
58
+ return instanceHandleToTargetMap.get(key);
59
+ }
60
+
61
+ function setTargetForInstanceHandle(
62
+ instanceHandle: mixed,
63
+ target: ReactNativeElement,
64
+ ): void {
65
+ // $FlowExpectedError[incompatible-type] instanceHandle is typed as mixed but we know it's an object and we need it to be to use it as a key in a WeakMap.
66
+ const key: interface {} = instanceHandle;
67
+ instanceHandleToTargetMap.set(key, target);
68
+ }
69
+
70
+ function unsetTargetForInstanceHandle(instanceHandle: mixed): void {
71
+ // $FlowExpectedError[incompatible-type] instanceHandle is typed as mixed but we know it's an object and we need it to be to use it as a key in a WeakMap.
72
+ const key: interface {} = instanceHandle;
73
+ instanceHandleToTargetMap.delete(key);
74
+ }
75
+
76
+ // The mapping between ReactNativeElement and their corresponding shadow node
77
+ // also needs to be kept here because React removes the link when unmounting.
78
+ // We also keep the instance handle so we don't have to retrieve it again
79
+ // from the target to unobserve.
80
+ const targetToShadowNodeAndInstanceHandleMap: WeakMap<
81
+ ReactNativeElement,
82
+ [ReturnType<typeof getShadowNode>, mixed],
83
+ > = new WeakMap();
84
+
43
85
  /**
44
86
  * Registers the given intersection observer and returns a unique ID for it,
45
87
  * which is required to start observing targets.
@@ -109,6 +151,25 @@ export function observe({
109
151
  return;
110
152
  }
111
153
 
154
+ const instanceHandle = getInstanceHandle(target);
155
+ if (instanceHandle == null) {
156
+ console.error(
157
+ 'IntersectionObserverManager: could not find reference to instance handle from target',
158
+ );
159
+ return;
160
+ }
161
+
162
+ // Store the mapping between the instance handle and the target so we can
163
+ // access it even after the instance handle has been unmounted.
164
+ setTargetForInstanceHandle(instanceHandle, target);
165
+
166
+ // Same for the mapping between the target and its shadow node
167
+ // and instance handle.
168
+ targetToShadowNodeAndInstanceHandleMap.set(target, [
169
+ targetShadowNode,
170
+ instanceHandle,
171
+ ]);
172
+
112
173
  if (!isConnected) {
113
174
  NativeIntersectionObserver.connect(notifyIntersectionObservers);
114
175
  isConnected = true;
@@ -140,18 +201,26 @@ export function unobserve(
140
201
  return;
141
202
  }
142
203
 
143
- const targetShadowNode = getShadowNode(target);
144
- if (targetShadowNode == null) {
204
+ const targetShadowNodeAndInstanceHandle =
205
+ targetToShadowNodeAndInstanceHandleMap.get(target);
206
+ if (targetShadowNodeAndInstanceHandle == null) {
145
207
  console.error(
146
- 'IntersectionObserverManager: could not find reference to host node from target',
208
+ 'IntersectionObserverManager: could not find registration data for target',
147
209
  );
148
210
  return;
149
211
  }
150
212
 
213
+ const [targetShadowNode, instanceHandle] = targetShadowNodeAndInstanceHandle;
214
+
151
215
  NativeIntersectionObserver.unobserve(
152
216
  intersectionObserverId,
153
217
  targetShadowNode,
154
218
  );
219
+
220
+ // We can guarantee we won't receive any more entries for this target,
221
+ // so we don't need to keep the mappings anymore.
222
+ unsetTargetForInstanceHandle(instanceHandle);
223
+ targetToShadowNodeAndInstanceHandleMap.delete(target);
155
224
  }
156
225
 
157
226
  /**
@@ -188,7 +257,16 @@ function doNotifyIntersectionObservers(): void {
188
257
  list = [];
189
258
  entriesByObserver.set(nativeEntry.intersectionObserverId, list);
190
259
  }
191
- list.push(createIntersectionObserverEntry(nativeEntry));
260
+
261
+ const target = getTargetFromInstanceHandle(
262
+ nativeEntry.targetInstanceHandle,
263
+ );
264
+ if (target == null) {
265
+ console.warn('Could not find target to create IntersectionObserverEntry');
266
+ continue;
267
+ }
268
+
269
+ list.push(createIntersectionObserverEntry(nativeEntry, target));
192
270
  }
193
271
 
194
272
  for (const [
@@ -8,34 +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 type NativeIntersectionObserverEntry = {
16
- intersectionObserverId: number,
17
- targetInstanceHandle: mixed,
18
- targetRect: $ReadOnlyArray<number>, // It's actually a tuple with x, y, width and height
19
- rootRect: $ReadOnlyArray<number>, // It's actually a tuple with x, y, width and height
20
- intersectionRect: ?$ReadOnlyArray<number>, // It's actually a tuple with x, y, width and height
21
- isIntersectingAboveThresholds: boolean,
22
- time: number,
23
- };
24
-
25
- export type NativeIntersectionObserverObserveOptions = {
26
- intersectionObserverId: number,
27
- targetShadowNode: mixed,
28
- thresholds: $ReadOnlyArray<number>,
29
- };
30
-
31
- export interface Spec extends TurboModule {
32
- +observe: (options: NativeIntersectionObserverObserveOptions) => void;
33
- +unobserve: (intersectionObserverId: number, targetShadowNode: mixed) => void;
34
- +connect: (notifyIntersectionObserversCallback: () => void) => void;
35
- +disconnect: () => void;
36
- +takeRecords: () => $ReadOnlyArray<NativeIntersectionObserverEntry>;
37
- }
38
-
39
- export default (TurboModuleRegistry.get<Spec>(
40
- 'NativeIntersectionObserverCxx',
41
- ): ?Spec);
11
+ export * from '../../src/private/specs/modules/NativeIntersectionObserver';
12
+ import NativeIntersectionObserver from '../../src/private/specs/modules/NativeIntersectionObserver';
13
+ export default NativeIntersectionObserver;
@@ -8,7 +8,7 @@
8
8
  * @format
9
9
  */
10
10
 
11
- import type ReactNativeElement from '../../DOM/Nodes/ReactNativeElement';
11
+ import type ReactNativeElement from '../../../src/private/webapis/dom/nodes/ReactNativeElement';
12
12
  import type IntersectionObserver from '../IntersectionObserver';
13
13
  import type {
14
14
  NativeIntersectionObserverEntry,
@@ -16,7 +16,7 @@ import type {
16
16
  Spec,
17
17
  } from '../NativeIntersectionObserver';
18
18
 
19
- import {getShadowNode} from '../../DOM/Nodes/ReadOnlyNode';
19
+ import {getShadowNode} from '../../../src/private/webapis/dom/nodes/ReadOnlyNode';
20
20
  import {getFabricUIManager} from '../../ReactNative/__mocks__/FabricUIManager';
21
21
  import invariant from 'invariant';
22
22
  import nullthrows from 'nullthrows';
@@ -96,6 +96,16 @@ const NativeIntersectionObserverMock = {
96
96
  'unexpected duplicate call to unobserve',
97
97
  );
98
98
  observations.splice(observationIndex, 1);
99
+
100
+ pendingRecords = pendingRecords.filter(
101
+ record =>
102
+ record.intersectionObserverId !== intersectionObserverId ||
103
+ record.targetInstanceHandle !==
104
+ FabricUIManagerMock.__getInstanceHandleFromNode(
105
+ // $FlowExpectedError[incompatible-call]
106
+ targetShadowNode,
107
+ ),
108
+ );
99
109
  },
100
110
  connect: (notifyIntersectionObserversCallback: () => void): void => {
101
111
  invariant(callback == null, 'unexpected call to connect');
@@ -10,15 +10,14 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- import type {Spec as FabricUIManagerSpec} from '../ReactNative/FabricUIManager';
14
13
  import type {
15
14
  LayoutAnimationConfig as LayoutAnimationConfig_,
16
15
  LayoutAnimationProperty,
17
16
  LayoutAnimationType,
18
17
  } from '../Renderer/shims/ReactNativeTypes';
19
18
 
19
+ import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNativeFeatureFlags';
20
20
  import {getFabricUIManager} from '../ReactNative/FabricUIManager';
21
- import ReactNativeFeatureFlags from '../ReactNative/ReactNativeFeatureFlags';
22
21
  import Platform from '../Utilities/Platform';
23
22
 
24
23
  const UIManager = require('../ReactNative/UIManager');
@@ -8,23 +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
- +getInitialURL: () => Promise<string>;
17
- +canOpenURL: (url: string) => Promise<boolean>;
18
- +openURL: (url: string) => Promise<void>;
19
- +openSettings: () => Promise<void>;
20
- +sendIntent: (
21
- action: string,
22
- extras: ?Array<{
23
- key: string,
24
- value: string | number | boolean, // TODO(T67672788): Union types are not type safe
25
- ...
26
- }>,
27
- ) => Promise<void>;
28
- }
29
-
30
- export default (TurboModuleRegistry.get<Spec>('IntentAndroid'): ?Spec);
11
+ export * from '../../src/private/specs/modules/NativeIntentAndroid';
12
+ import NativeIntentAndroid from '../../src/private/specs/modules/NativeIntentAndroid';
13
+ export default NativeIntentAndroid;
@@ -8,20 +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
- // Common interface
17
- +getInitialURL: () => Promise<string>;
18
- +canOpenURL: (url: string) => Promise<boolean>;
19
- +openURL: (url: string) => Promise<void>;
20
- +openSettings: () => Promise<void>;
21
-
22
- // Events
23
- +addListener: (eventName: string) => void;
24
- +removeListeners: (count: number) => void;
25
- }
26
-
27
- export default (TurboModuleRegistry.get<Spec>('LinkingManager'): ?Spec);
11
+ export * from '../../src/private/specs/modules/NativeLinkingManager';
12
+ import NativeLinkingManager from '../../src/private/specs/modules/NativeLinkingManager';
13
+ export default NativeLinkingManager;