@office-iss/react-native-win32 0.72.8 → 0.73.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 (277) hide show
  1. package/.flowconfig +15 -5
  2. package/CHANGELOG.json +530 -101
  3. package/CHANGELOG.md +213 -56
  4. package/IntegrationTests/PromiseTest.js +1 -0
  5. package/IntegrationTests/websocket_integration_test_server.js +1 -1
  6. package/Libraries/Animated/Animated.js +1 -1
  7. package/Libraries/Animated/AnimatedImplementation.js +1 -1
  8. package/Libraries/Animated/NativeAnimatedHelper.js +14 -10
  9. package/Libraries/Animated/NativeAnimatedHelper.win32.js +16 -12
  10. package/Libraries/Animated/NativeAnimatedModule.js +6 -2
  11. package/Libraries/Animated/NativeAnimatedTurboModule.js +7 -4
  12. package/Libraries/Animated/animations/Animation.js +57 -3
  13. package/Libraries/Animated/animations/DecayAnimation.js +9 -0
  14. package/Libraries/Animated/animations/SpringAnimation.js +8 -0
  15. package/Libraries/Animated/animations/TimingAnimation.js +8 -0
  16. package/Libraries/Animated/components/AnimatedFlatList.js +2 -1
  17. package/Libraries/Animated/components/AnimatedScrollView.js +2 -0
  18. package/Libraries/Animated/components/AnimatedSectionList.js +2 -1
  19. package/Libraries/Animated/createAnimatedComponent.js +1 -0
  20. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  21. package/Libraries/Animated/nodes/AnimatedObject.js +146 -0
  22. package/Libraries/Animated/nodes/AnimatedProps.js +19 -7
  23. package/Libraries/Animated/nodes/AnimatedStyle.js +29 -55
  24. package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -17
  25. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +17 -0
  26. package/Libraries/Animated/useAnimatedProps.js +9 -10
  27. package/Libraries/AppState/AppState.d.ts +1 -1
  28. package/Libraries/AppState/NativeAppState.js +8 -4
  29. package/Libraries/BatchedBridge/MessageQueue.js +45 -36
  30. package/Libraries/Blob/Blob.js +6 -2
  31. package/Libraries/Blob/BlobManager.js +9 -10
  32. package/Libraries/Blob/BlobRegistry.js +14 -9
  33. package/Libraries/Blob/File.js +1 -1
  34. package/Libraries/Blob/FileReader.js +1 -2
  35. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +1 -5
  36. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +7 -48
  37. package/Libraries/Components/Button/ButtonWin32.Props.d.ts +1 -1
  38. package/Libraries/Components/Button/ButtonWin32.Props.js.map +1 -1
  39. package/Libraries/Components/Button/ButtonWin32.d.ts +1 -1
  40. package/Libraries/Components/Button/ButtonWin32.js +1 -4
  41. package/Libraries/Components/Button/ButtonWin32.js.map +1 -1
  42. package/Libraries/Components/Clipboard/Clipboard.d.ts +4 -4
  43. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +3 -1
  44. package/Libraries/Components/EnterString.win32.d.ts +1 -1
  45. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +26 -6
  46. package/Libraries/Components/Pressable/Pressable.js +3 -2
  47. package/Libraries/Components/Pressable/Pressable.win32.js +4 -3
  48. package/Libraries/Components/Pressable/useAndroidRippleForView.js +1 -1
  49. package/Libraries/Components/SafeAreaView/SafeAreaView.js +7 -7
  50. package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +7 -8
  51. package/Libraries/Components/ScrollView/ScrollView.js +3 -1
  52. package/Libraries/Components/ScrollView/ScrollView.win32.js +3 -1
  53. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +39 -46
  54. package/Libraries/Components/Switch/Switch.js +1 -0
  55. package/Libraries/Components/Text/TextWin32.d.ts +1 -1
  56. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +1 -0
  57. package/Libraries/Components/TextInput/TextInput.d.ts +49 -7
  58. package/Libraries/Components/TextInput/TextInput.flow.js +43 -10
  59. package/Libraries/Components/TextInput/TextInput.js +62 -10
  60. package/Libraries/Components/TextInput/TextInput.win32.js +953 -206
  61. package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +23 -0
  62. package/Libraries/Components/ToastAndroid/{ToastAndroid.ios.js → ToastAndroid.js} +9 -1
  63. package/Libraries/Components/ToastAndroid/ToastAndroid.win32.js +9 -1
  64. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js +2 -2
  65. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
  66. package/Libraries/Components/Touchable/TouchableBounce.js +1 -1
  67. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
  68. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  69. package/Libraries/Components/Touchable/TouchableOpacity.js +4 -1
  70. package/Libraries/Components/Touchable/TouchableWin32.d.ts +1 -1
  71. package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
  72. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -0
  73. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +16 -6
  74. package/Libraries/Components/View/ReactNativeStyleAttributes.js +9 -0
  75. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  76. package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
  77. package/Libraries/Components/View/View.js +46 -32
  78. package/Libraries/Components/View/View.win32.js +37 -6
  79. package/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
  80. package/Libraries/Components/View/ViewNativeComponent.js +1 -0
  81. package/Libraries/Components/View/ViewPropTypes.js +18 -3
  82. package/Libraries/Components/View/ViewPropTypes.win32.js +30 -4
  83. package/Libraries/Components/View/ViewWin32.js +3 -2
  84. package/Libraries/Core/Devtools/loadBundleFromServer.js +152 -0
  85. package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -1
  86. package/Libraries/Core/ExceptionsManager.js +16 -7
  87. package/Libraries/Core/ExtendedError.js +12 -0
  88. package/Libraries/Core/ReactNativeVersion.js +3 -3
  89. package/Libraries/Core/ReactNativeVersionCheck.js +0 -2
  90. package/Libraries/Core/ReactNativeVersionCheck.win32.js +0 -2
  91. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +20 -0
  92. package/Libraries/Core/setUpDeveloperTools.js +5 -1
  93. package/Libraries/Core/setUpIntersectionObserver.js +16 -0
  94. package/Libraries/{Components/ProgressBarAndroid/ProgressBarAndroid.ios.js → Core/setUpMutationObserver.js} +6 -2
  95. package/Libraries/Core/setUpPerformance.js +6 -13
  96. package/Libraries/Core/setUpPerformanceObserver.js +16 -0
  97. package/Libraries/Core/setUpRegeneratorRuntime.js +4 -2
  98. package/Libraries/DOM/Nodes/ReactNativeElement.js +135 -18
  99. package/Libraries/DOM/Nodes/ReadOnlyCharacterData.js +72 -0
  100. package/Libraries/DOM/Nodes/ReadOnlyElement.js +209 -21
  101. package/Libraries/DOM/Nodes/ReadOnlyNode.js +206 -17
  102. package/Libraries/DOM/Nodes/ReadOnlyText.js +30 -0
  103. package/Libraries/DOM/Nodes/Utilities/Traversal.js +54 -0
  104. package/Libraries/EventEmitter/NativeEventEmitter.d.ts +0 -6
  105. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +15 -4
  106. package/Libraries/Image/Image.android.js +8 -2
  107. package/Libraries/Image/Image.d.ts +1 -1
  108. package/Libraries/Image/Image.ios.js +4 -1
  109. package/Libraries/Image/Image.win32.js +6 -3
  110. package/Libraries/Image/ImageBackground.js +3 -0
  111. package/Libraries/Image/resolveAssetSource.win32.js +1 -1
  112. package/Libraries/Inspector/DevtoolsOverlay.js +6 -3
  113. package/Libraries/Inspector/NetworkOverlay.js +2 -2
  114. package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -5
  115. package/Libraries/Interaction/PanResponder.js +1 -4
  116. package/Libraries/IntersectionObserver/IntersectionObserver.js +252 -0
  117. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +140 -0
  118. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +221 -0
  119. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +41 -0
  120. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +162 -0
  121. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -1
  122. package/Libraries/Lists/FlatList.d.ts +2 -1
  123. package/Libraries/Lists/FlatList.js +15 -5
  124. package/Libraries/Lists/SectionList.js +4 -0
  125. package/Libraries/LogBox/Data/LogBoxData.js +2 -1
  126. package/Libraries/LogBox/Data/LogBoxLog.js +4 -1
  127. package/Libraries/LogBox/Data/LogBoxSymbolication.js +5 -2
  128. package/Libraries/LogBox/Data/parseLogBoxLog.js +57 -20
  129. package/Libraries/LogBox/UI/AnsiHighlight.js +1 -1
  130. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +24 -31
  131. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  132. package/Libraries/LogBox/UI/LogBoxMessage.js +4 -7
  133. package/Libraries/MutationObserver/MutationObserver.js +184 -0
  134. package/Libraries/MutationObserver/MutationObserverManager.js +218 -0
  135. package/Libraries/MutationObserver/MutationRecord.js +82 -0
  136. package/Libraries/MutationObserver/NativeMutationObserver.js +58 -0
  137. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +327 -0
  138. package/Libraries/NativeComponent/BaseViewConfig.android.js +18 -3
  139. package/Libraries/NativeComponent/BaseViewConfig.ios.js +33 -0
  140. package/Libraries/NativeComponent/BaseViewConfig.win32.js +33 -0
  141. package/Libraries/NativeComponent/NativeComponentRegistry.js +13 -9
  142. package/Libraries/NativeModules/specs/NativeSourceCode.js +6 -6
  143. package/Libraries/Network/RCTNetworking.android.js +2 -1
  144. package/Libraries/Network/XMLHttpRequest.js +1 -1
  145. package/Libraries/NewAppScreen/components/DebugInstructions.js +4 -4
  146. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +9 -2
  147. package/Libraries/Performance/QuickPerformanceLogger.js +1 -1
  148. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +1 -0
  149. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +1 -0
  150. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -1
  151. package/Libraries/Pressability/Pressability.js +28 -3
  152. package/Libraries/Pressability/Pressability.win32.js +30 -5
  153. package/Libraries/ReactNative/AppContainer.js +2 -3
  154. package/Libraries/ReactNative/AppRegistry.d.ts +0 -5
  155. package/Libraries/ReactNative/AppRegistry.js +66 -53
  156. package/Libraries/ReactNative/BridgelessUIManager.js +38 -9
  157. package/Libraries/ReactNative/FabricUIManager.js +143 -34
  158. package/Libraries/ReactNative/I18nManager.js +5 -11
  159. package/Libraries/ReactNative/NativeI18nManager.js +7 -5
  160. package/Libraries/ReactNative/PaperUIManager.win32.js +2 -2
  161. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +151 -0
  162. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +81 -0
  163. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +492 -0
  164. package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +32 -0
  165. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +19 -3
  166. package/Libraries/ReactNative/UIManager.js +8 -0
  167. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +648 -0
  168. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +38 -2
  169. package/Libraries/Renderer/implementations/ReactFabric-dev.js +27 -27
  170. package/Libraries/Renderer/implementations/ReactFabric-prod.js +3 -3
  171. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3 -3
  172. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +27 -27
  173. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3 -3
  174. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3 -3
  175. package/Libraries/Renderer/shims/ReactFabric.js +5 -6
  176. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -3
  177. package/Libraries/Renderer/shims/ReactNative.js +2 -3
  178. package/Libraries/Renderer/shims/ReactNativeTypes.js +35 -17
  179. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -3
  180. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -3
  181. package/Libraries/Settings/{Settings.android.js → Settings.js} +4 -4
  182. package/Libraries/Share/Share.d.ts +3 -9
  183. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +9 -4
  184. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +28 -13
  185. package/Libraries/StyleSheet/PlatformColorValueTypes.win32.js +14 -4
  186. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +1 -1
  187. package/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  188. package/Libraries/StyleSheet/StyleSheet.d.ts +10 -1
  189. package/Libraries/StyleSheet/StyleSheet.js +3 -0
  190. package/Libraries/StyleSheet/StyleSheet.win32.js +3 -0
  191. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +31 -17
  192. package/Libraries/StyleSheet/StyleSheetTypes.js +90 -6
  193. package/Libraries/StyleSheet/flattenStyle.js +4 -0
  194. package/Libraries/StyleSheet/private/_TransformStyle.js +16 -2
  195. package/Libraries/StyleSheet/processColor.js +1 -2
  196. package/Libraries/StyleSheet/processTransformOrigin.js +136 -0
  197. package/Libraries/StyleSheet/splitLayoutProps.js +1 -0
  198. package/Libraries/Text/Text.d.ts +5 -5
  199. package/Libraries/Text/Text.js +17 -10
  200. package/Libraries/Text/Text.win32.js +354 -0
  201. package/Libraries/Text/TextProps.win32.js +281 -0
  202. package/Libraries/TurboModule/TurboModuleRegistry.js +47 -7
  203. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
  204. package/Libraries/Types/CoreEventTypes.d.ts +5 -2
  205. package/Libraries/Utilities/GlobalPerformanceLogger.js +2 -12
  206. package/Libraries/Utilities/NativeDeviceInfo.js +8 -9
  207. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +23 -18
  208. package/Libraries/Utilities/NativePlatformConstantsIOS.js +16 -13
  209. package/Libraries/Utilities/NativePlatformConstantsWin.js +13 -10
  210. package/Libraries/Utilities/PerformanceLoggerContext.js +1 -1
  211. package/Libraries/Utilities/Platform.android.js +12 -8
  212. package/Libraries/Utilities/Platform.d.ts +1 -0
  213. package/Libraries/Utilities/Platform.flow.js +84 -0
  214. package/Libraries/Utilities/Platform.flow.win32.js +111 -0
  215. package/Libraries/Utilities/Platform.ios.js +12 -8
  216. package/Libraries/Utilities/Platform.win32.js +12 -8
  217. package/Libraries/Utilities/PolyfillFunctions.js +1 -1
  218. package/Libraries/Utilities/ReactNativeTestTools.js +1 -2
  219. package/Libraries/Utilities/SceneTracker.js +1 -1
  220. package/Libraries/Utilities/createPerformanceLogger.js +63 -32
  221. package/Libraries/Utilities/useColorScheme.js +7 -8
  222. package/Libraries/WebPerformance/MemoryInfo.js +1 -1
  223. package/Libraries/WebPerformance/NativePerformance.js +3 -8
  224. package/Libraries/WebPerformance/NativePerformanceObserver.js +4 -0
  225. package/Libraries/WebPerformance/Performance.js +42 -15
  226. package/Libraries/WebPerformance/PerformanceEntry.js +14 -6
  227. package/Libraries/WebPerformance/PerformanceEventTiming.js +18 -1
  228. package/Libraries/WebPerformance/ReactNativeStartupTiming.js +40 -14
  229. package/Libraries/WebPerformance/__mocks__/NativePerformance.js +4 -2
  230. package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +21 -3
  231. package/Libraries/promiseRejectionTrackingOptions.js +21 -9
  232. package/Libraries/vendor/emitter/EventEmitter.js +17 -17
  233. package/flow/global.js +1 -3
  234. package/flow/jest.js +5 -1
  235. package/{Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js → jest/ReactNativeInternalFeatureFlagsMock.js} +2 -1
  236. package/jest/__tests__/setup-test.js +18 -0
  237. package/jest/mockModal.js +6 -4
  238. package/jest/setup.js +61 -30
  239. package/jest.config.js +1 -1
  240. package/just-task.js +1 -0
  241. package/overrides.json +54 -60
  242. package/package.json +35 -33
  243. package/src/Libraries/Components/Button/ButtonWin32.Props.ts +1 -1
  244. package/src/Libraries/Components/Button/ButtonWin32.tsx +0 -2
  245. package/src/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +2 -2
  246. package/src/Libraries/Components/Touchable/TouchableWin32.tsx +1 -1
  247. package/src/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
  248. package/src/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  249. package/types/experimental.d.ts +44 -0
  250. package/types/index.d.ts +2 -1
  251. package/types/modules/Devtools.d.ts +1 -0
  252. package/types/modules/globals.d.ts +16 -1
  253. package/IntegrationTests/BUCK +0 -32
  254. package/IntegrationTests/PropertiesUpdateTest.js +0 -29
  255. package/IntegrationTests/RCTRootViewIntegrationTestApp.js +0 -86
  256. package/IntegrationTests/ReactContentSizeUpdateTest.js +0 -89
  257. package/IntegrationTests/SizeFlexibilityUpdateTest.js +0 -106
  258. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfoWin32.js +0 -37
  259. package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +0 -51
  260. package/Libraries/Components/TextInput/TextInput.Types.win32.js +0 -3
  261. package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +0 -1
  262. package/Libraries/Utilities/AcessibilityMapping.js +0 -154
  263. package/Libraries/Utilities/AcessibilityMapping.win32.js +0 -156
  264. package/Libraries/Utilities/NativeDevSplitBundleLoader.js +0 -19
  265. package/Libraries/Utilities/useColorScheme.win32.js +0 -26
  266. package/flow/use-sync-external-store.js +0 -20
  267. package/flow-typed/npm/base64-js_v1.x.x.js +0 -12
  268. package/flow-typed/npm/glob_v7.x.x.js +0 -79
  269. package/flow-typed/npm/pretty-format_v26.x.x.js +0 -49
  270. package/flow-typed/npm/promise_v8.x.x.js +0 -30
  271. package/flow-typed/npm/react-dom_v17.x.x.js +0 -139
  272. package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -79
  273. package/flow-typed/npm/stacktrace-parser_v0.1.x.js +0 -17
  274. package/flow-typed/npm/yargs_v17.x.x.js +0 -341
  275. package/src/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +0 -161
  276. package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +0 -68
  277. /package/Libraries/{Renderer/public → ReactNative/ReactFabricPublicInstance}/ReactFabricPublicInstanceUtils.js +0 -0
@@ -10,6 +10,7 @@
10
10
 
11
11
  import type {IEventEmitter} from '../vendor/emitter/EventEmitter';
12
12
 
13
+ import {beginEvent, endEvent} from '../Performance/Systrace';
13
14
  import EventEmitter from '../vendor/emitter/EventEmitter';
14
15
 
15
16
  // FIXME: use typed events
@@ -21,12 +22,22 @@ type RCTDeviceEventDefinitions = $FlowFixMe;
21
22
  *
22
23
  * NativeModules that emit events should instead subclass `NativeEventEmitter`.
23
24
  */
24
- const RCTDeviceEventEmitter: IEventEmitter<RCTDeviceEventDefinitions> =
25
- new EventEmitter();
25
+ class RCTDeviceEventEmitter extends EventEmitter<RCTDeviceEventDefinitions> {
26
+ // Add systrace to RCTDeviceEventEmitter.emit method for debugging
27
+ emit<TEvent: $Keys<RCTDeviceEventDefinitions>>(
28
+ eventType: TEvent,
29
+ ...args: RCTDeviceEventDefinitions[TEvent]
30
+ ): void {
31
+ beginEvent(() => `RCTDeviceEventEmitter.emit#${eventType}`);
32
+ super.emit(eventType, ...args);
33
+ endEvent();
34
+ }
35
+ }
36
+ const instance = new RCTDeviceEventEmitter();
26
37
 
27
38
  Object.defineProperty(global, '__rctDeviceEventEmitter', {
28
39
  configurable: true,
29
- value: RCTDeviceEventEmitter,
40
+ value: instance,
30
41
  });
31
42
 
32
- export default (RCTDeviceEventEmitter: IEventEmitter<RCTDeviceEventDefinitions>);
43
+ export default (instance: IEventEmitter<RCTDeviceEventDefinitions>);
@@ -112,7 +112,7 @@ export type ImageComponentStatics = $ReadOnly<{|
112
112
  getSizeWithHeaders: typeof getSizeWithHeaders,
113
113
  prefetch: typeof prefetch,
114
114
  prefetchWithMetadata: typeof prefetchWithMetadata,
115
- abortPrefetch: typeof abortPrefetch,
115
+ abortPrefetch?: typeof abortPrefetch,
116
116
  queryCache: typeof queryCache,
117
117
  resolveAssetSource: typeof resolveAssetSource,
118
118
  |}>;
@@ -197,11 +197,14 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
197
197
  };
198
198
 
199
199
  const objectFit =
200
+ // $FlowFixMe[prop-missing]
200
201
  style && style.objectFit
201
- ? convertObjectFitToResizeMode(style.objectFit)
202
+ ? // $FlowFixMe[incompatible-call]
203
+ convertObjectFitToResizeMode(style.objectFit)
202
204
  : null;
203
205
  // $FlowFixMe[prop-missing]
204
206
  const resizeMode =
207
+ // $FlowFixMe[prop-missing]
205
208
  objectFit || props.resizeMode || (style && style.resizeMode) || 'cover';
206
209
 
207
210
  return (
@@ -220,7 +223,9 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
220
223
  if (hasTextAncestor) {
221
224
  return (
222
225
  <TextInlineImageNativeComponent
226
+ // $FlowFixMe[incompatible-type]
223
227
  style={style}
228
+ // $FlowFixMe[incompatible-type]
224
229
  resizeMode={resizeMode}
225
230
  headers={nativeProps.headers}
226
231
  src={sources}
@@ -232,6 +237,7 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
232
237
  return (
233
238
  <ImageViewNativeComponent
234
239
  {...nativePropsWithAnalytics}
240
+ // $FlowFixMe[incompatible-type]
235
241
  resizeMode={resizeMode}
236
242
  />
237
243
  );
@@ -223,7 +223,7 @@ export interface ImagePropsBase
223
223
  *
224
224
  * The currently supported formats are png, jpg, jpeg, bmp, gif, webp (Android only), psd (iOS only).
225
225
  */
226
- source: ImageSourcePropType;
226
+ source?: ImageSourcePropType | undefined;
227
227
 
228
228
  /**
229
229
  * A string representing the resource identifier for the image. Similar to
@@ -91,6 +91,7 @@ export type ImageComponentStatics = $ReadOnly<{|
91
91
  getSizeWithHeaders: typeof getSizeWithHeaders,
92
92
  prefetch: typeof prefetch,
93
93
  prefetchWithMetadata: typeof prefetchWithMetadata,
94
+ abortPrefetch?: number => void,
94
95
  queryCache: typeof queryCache,
95
96
  resolveAssetSource: typeof resolveAssetSource,
96
97
  |}>;
@@ -132,7 +133,8 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
132
133
  const objectFit =
133
134
  // $FlowFixMe[prop-missing]
134
135
  style && style.objectFit
135
- ? convertObjectFitToResizeMode(style.objectFit)
136
+ ? // $FlowFixMe[incompatible-call]
137
+ convertObjectFitToResizeMode(style.objectFit)
136
138
  : null;
137
139
  const resizeMode =
138
140
  // $FlowFixMe[prop-missing]
@@ -177,6 +179,7 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
177
179
  accessibilityLabel={accessibilityLabel ?? props.alt}
178
180
  ref={forwardedRef}
179
181
  style={style}
182
+ // $FlowFixMe[incompatible-type]
180
183
  resizeMode={resizeMode}
181
184
  tintColor={tintColor}
182
185
  source={sources}
@@ -114,6 +114,7 @@ export type ImageComponentStatics = $ReadOnly<{|
114
114
  getSizeWithHeaders: typeof getSizeWithHeaders,
115
115
  prefetch: typeof prefetch,
116
116
  prefetchWithMetadata: typeof prefetchWithMetadata,
117
+ abortPrefetch?: number => void,
117
118
  queryCache: typeof queryCache,
118
119
  resolveAssetSource: typeof resolveAssetSource,
119
120
  |}>;
@@ -155,7 +156,8 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
155
156
  const objectFit =
156
157
  // $FlowFixMe[prop-missing]
157
158
  style && style.objectFit
158
- ? convertObjectFitToResizeMode(style.objectFit)
159
+ ? // $FlowFixMe[incompatible-call]
160
+ convertObjectFitToResizeMode(style.objectFit)
159
161
  : null;
160
162
  const resizeMode =
161
163
  // $FlowFixMe[prop-missing]
@@ -209,12 +211,13 @@ const BaseImage = (props: ImagePropsType, forwardedRef) => {
209
211
  {analyticTag => {
210
212
  return (
211
213
  <ImageViewNativeComponent
212
- {...restProps}
213
214
  accessibilityState={_accessibilityState}
215
+ {...restProps}
214
216
  accessible={props.alt !== undefined ? true : props.accessible}
215
- accessibilityLabel={accessibilityLabel}
217
+ accessibilityLabel={accessibilityLabel ?? props.alt}
216
218
  ref={forwardedRef}
217
219
  style={style}
220
+ // $FlowFixMe[incompatible-type]
218
221
  resizeMode={resizeMode}
219
222
  tintColor={tintColor}
220
223
  source={sources}
@@ -84,6 +84,7 @@ class ImageBackground extends React.Component<ImageBackgroundProps> {
84
84
  importantForAccessibility={importantForAccessibility}
85
85
  style={style}
86
86
  ref={this._captureRef}>
87
+ {/* $FlowFixMe[incompatible-use] */}
87
88
  <Image
88
89
  {...props}
89
90
  importantForAccessibility={importantForAccessibility}
@@ -97,7 +98,9 @@ class ImageBackground extends React.Component<ImageBackgroundProps> {
97
98
  // So, we have to proxy/reapply these styles explicitly for actual <Image> component.
98
99
  // This workaround should be removed after implementing proper support of
99
100
  // intrinsic content size of the <Image>.
101
+ // $FlowFixMe[prop-missing]
100
102
  width: flattenedStyle?.width,
103
+ // $FlowFixMe[prop-missing]
101
104
  height: flattenedStyle?.height,
102
105
  },
103
106
  imageStyle,
@@ -115,7 +115,7 @@ class AssetResolverLateScaleResolution {
115
115
  height: this._resolver.asset.height,
116
116
  uri: source,
117
117
  // Include scales info in returned object
118
- // This may make it easier to do scale lookups on native side if we dont have that infomation from any kind of manifest
118
+ // This may make it easier to do scale lookups on native side if we don't have that information from any kind of manifest
119
119
  scales: this._resolver.asset.scales,
120
120
  };
121
121
  }
@@ -52,11 +52,14 @@ export default function DevtoolsOverlay({
52
52
  function onAgentShowNativeHighlight(node: any) {
53
53
  clearTimeout(hideTimeoutId);
54
54
 
55
- // `publicInstance` => Fabric
56
- // TODO: remove this check when syncing the new version of the renderer from React to React Native.
55
+ // `canonical.publicInstance` => Fabric
57
56
  // `canonical` => Legacy Fabric
58
57
  // `node` => Legacy renderer
59
- const component = node.publicInstance ?? node.canonical ?? node;
58
+ const component =
59
+ (node.canonical && node.canonical.publicInstance) ??
60
+ // TODO: remove this check when syncing the new version of the renderer from React to React Native.
61
+ node.canonical ??
62
+ node;
60
63
  if (!component || !component.measure) {
61
64
  return;
62
65
  }
@@ -64,7 +64,7 @@ function getStringByValue(value: any): string {
64
64
  }
65
65
  if (typeof value === 'string' && value.length > 500) {
66
66
  return String(value)
67
- .substr(0, 500)
67
+ .slice(0, 500)
68
68
  .concat('\n***TRUNCATED TO 500 CHARACTERS***');
69
69
  }
70
70
  return value;
@@ -88,7 +88,7 @@ function keyExtractor(request: NetworkRequestInfo): string {
88
88
  * Show all the intercepted network requests over the InspectorPanel.
89
89
  */
90
90
  class NetworkOverlay extends React.Component<Props, State> {
91
- _requestsListView: ?React.ElementRef<typeof FlatList>;
91
+ _requestsListView: ?React.ElementRef<Class<FlatList<NetworkRequestInfo>>>;
92
92
  _detailScrollView: ?React.ElementRef<typeof ScrollView>;
93
93
 
94
94
  // Metrics are used to decide when if the request list should be sticky, and
@@ -14,11 +14,7 @@ const infoLog = require('../Utilities/infoLog');
14
14
 
15
15
  type Handler = {
16
16
  onIterate?: () => void,
17
- onStall: (params: {
18
- lastInterval: number,
19
- busyTime: number,
20
- ...
21
- }) => ?string,
17
+ onStall: (params: {lastInterval: number, busyTime: number, ...}) => ?string,
22
18
  ...
23
19
  };
24
20
 
@@ -574,9 +574,6 @@ function clearInteractionHandle(
574
574
  }
575
575
  }
576
576
 
577
- export type PanResponderInstance = $Call<
578
- $PropertyType<typeof PanResponder, 'create'>,
579
- PanResponderConfig,
580
- >;
577
+ export type PanResponderInstance = ReturnType<(typeof PanResponder)['create']>;
581
578
 
582
579
  export default PanResponder;
@@ -0,0 +1,252 @@
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
+ */
10
+
11
+ // flowlint unsafe-getters-setters:off
12
+
13
+ import type IntersectionObserverEntry from './IntersectionObserverEntry';
14
+ import type {IntersectionObserverId} from './IntersectionObserverManager';
15
+
16
+ import ReactNativeElement from '../DOM/Nodes/ReactNativeElement';
17
+ import * as IntersectionObserverManager from './IntersectionObserverManager';
18
+
19
+ export type IntersectionObserverCallback = (
20
+ entries: Array<IntersectionObserverEntry>,
21
+ observer: IntersectionObserver,
22
+ ) => mixed;
23
+
24
+ type IntersectionObserverInit = {
25
+ // root?: ReactNativeElement, // This option exists on the Web but it's not currently supported in React Native.
26
+ // rootMargin?: string, // This option exists on the Web but it's not currently supported in React Native.
27
+ threshold?: number | $ReadOnlyArray<number>,
28
+ };
29
+
30
+ /**
31
+ * The [Intersection Observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API)
32
+ * provides a way to asynchronously observe changes in the intersection of a
33
+ * target element with an ancestor element or with a top-level document's
34
+ * viewport.
35
+ *
36
+ * The ancestor element or viewport is referred to as the root.
37
+ *
38
+ * When an `IntersectionObserver` is created, it's configured to watch for given
39
+ * ratios of visibility within the root.
40
+ *
41
+ * The configuration cannot be changed once the `IntersectionObserver` is
42
+ * created, so a given observer object is only useful for watching for specific
43
+ * changes in degree of visibility; however, you can watch multiple target
44
+ * elements with the same observer.
45
+ *
46
+ * This implementation only supports the `threshold` option at the moment
47
+ * (`root` and `rootMargin` are not supported).
48
+ */
49
+ export default class IntersectionObserver {
50
+ _callback: IntersectionObserverCallback;
51
+ _thresholds: $ReadOnlyArray<number>;
52
+ _observationTargets: Set<ReactNativeElement> = new Set();
53
+ _intersectionObserverId: ?IntersectionObserverId;
54
+
55
+ constructor(
56
+ callback: IntersectionObserverCallback,
57
+ options?: IntersectionObserverInit,
58
+ ): void {
59
+ if (callback == null) {
60
+ throw new TypeError(
61
+ "Failed to construct 'IntersectionObserver': 1 argument required, but only 0 present.",
62
+ );
63
+ }
64
+
65
+ if (typeof callback !== 'function') {
66
+ throw new TypeError(
67
+ "Failed to construct 'IntersectionObserver': parameter 1 is not of type 'Function'.",
68
+ );
69
+ }
70
+
71
+ // $FlowExpectedError[prop-missing] it's not typed in React Native but exists on Web.
72
+ if (options?.root != null) {
73
+ throw new TypeError(
74
+ "Failed to construct 'IntersectionObserver': root is not supported",
75
+ );
76
+ }
77
+
78
+ // $FlowExpectedError[prop-missing] it's not typed in React Native but exists on Web.
79
+ if (options?.rootMargin != null) {
80
+ throw new TypeError(
81
+ "Failed to construct 'IntersectionObserver': rootMargin is not supported",
82
+ );
83
+ }
84
+
85
+ this._callback = callback;
86
+ this._thresholds = normalizeThresholds(options?.threshold);
87
+ }
88
+
89
+ /**
90
+ * The `ReactNativeElement` whose bounds are used as the bounding box when
91
+ * testing for intersection.
92
+ * If no `root` value was passed to the constructor or its value is `null`,
93
+ * the root view is used.
94
+ *
95
+ * NOTE: This cannot currently be configured and `root` is always `null`.
96
+ */
97
+ get root(): ReactNativeElement | null {
98
+ return null;
99
+ }
100
+
101
+ /**
102
+ * String with syntax similar to that of the CSS `margin` property.
103
+ * Each side of the rectangle represented by `rootMargin` is added to the
104
+ * corresponding side in the root element's bounding box before the
105
+ * intersection test is performed.
106
+ *
107
+ * NOTE: This cannot currently be configured and `rootMargin` is always
108
+ * `null`.
109
+ */
110
+ get rootMargin(): string {
111
+ return '0px 0px 0px 0px';
112
+ }
113
+
114
+ /**
115
+ * A list of thresholds, sorted in increasing numeric order, where each
116
+ * threshold is a ratio of intersection area to bounding box area of an
117
+ * observed target.
118
+ * Notifications for a target are generated when any of the thresholds are
119
+ * crossed for that target.
120
+ * If no value was passed to the constructor, `0` is used.
121
+ */
122
+ get thresholds(): $ReadOnlyArray<number> {
123
+ return this._thresholds;
124
+ }
125
+
126
+ /**
127
+ * Adds an element to the set of target elements being watched by the
128
+ * `IntersectionObserver`.
129
+ * One observer has one set of thresholds and one root, but can watch multiple
130
+ * target elements for visibility changes.
131
+ * To stop observing the element, call `IntersectionObserver.unobserve()`.
132
+ */
133
+ observe(target: ReactNativeElement): void {
134
+ if (!(target instanceof ReactNativeElement)) {
135
+ throw new TypeError(
136
+ "Failed to execute 'observe' on 'IntersectionObserver': parameter 1 is not of type 'ReactNativeElement'.",
137
+ );
138
+ }
139
+
140
+ if (this._observationTargets.has(target)) {
141
+ return;
142
+ }
143
+
144
+ IntersectionObserverManager.observe({
145
+ intersectionObserverId: this._getOrCreateIntersectionObserverId(),
146
+ target,
147
+ });
148
+
149
+ this._observationTargets.add(target);
150
+ }
151
+
152
+ /**
153
+ * Instructs the `IntersectionObserver` to stop observing the specified target
154
+ * element.
155
+ */
156
+ unobserve(target: ReactNativeElement): void {
157
+ if (!(target instanceof ReactNativeElement)) {
158
+ throw new TypeError(
159
+ "Failed to execute 'unobserve' on 'IntersectionObserver': parameter 1 is not of type 'ReactNativeElement'.",
160
+ );
161
+ }
162
+
163
+ if (!this._observationTargets.has(target)) {
164
+ return;
165
+ }
166
+
167
+ const intersectionObserverId = this._intersectionObserverId;
168
+ if (intersectionObserverId == null) {
169
+ // This is unexpected if the target is in `_observationTargets`.
170
+ console.error(
171
+ "Unexpected state in 'IntersectionObserver': could not find observer ID to unobserve target.",
172
+ );
173
+ return;
174
+ }
175
+
176
+ IntersectionObserverManager.unobserve(intersectionObserverId, target);
177
+ this._observationTargets.delete(target);
178
+
179
+ if (this._observationTargets.size === 0) {
180
+ IntersectionObserverManager.unregisterObserver(intersectionObserverId);
181
+ this._intersectionObserverId = null;
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Stops watching all of its target elements for visibility changes.
187
+ */
188
+ disconnect(): void {
189
+ for (const target of this._observationTargets.keys()) {
190
+ this.unobserve(target);
191
+ }
192
+ }
193
+
194
+ _getOrCreateIntersectionObserverId(): IntersectionObserverId {
195
+ let intersectionObserverId = this._intersectionObserverId;
196
+ if (intersectionObserverId == null) {
197
+ intersectionObserverId = IntersectionObserverManager.registerObserver(
198
+ this,
199
+ this._callback,
200
+ );
201
+ this._intersectionObserverId = intersectionObserverId;
202
+ }
203
+ return intersectionObserverId;
204
+ }
205
+
206
+ // Only for tests
207
+ __getObserverID(): ?IntersectionObserverId {
208
+ return this._intersectionObserverId;
209
+ }
210
+ }
211
+
212
+ /**
213
+ * Converts the user defined `threshold` value into an array of sorted valid
214
+ * threshold options for `IntersectionObserver` (double ∈ [0, 1]).
215
+ *
216
+ * @example
217
+ * normalizeThresholds(0.5); // → [0.5]
218
+ * normalizeThresholds([1, 0.5, 0]); // → [0, 0.5, 1]
219
+ * normalizeThresholds(['1', '0.5', '0']); // → [0, 0.5, 1]
220
+ */
221
+ function normalizeThresholds(threshold: mixed): $ReadOnlyArray<number> {
222
+ if (Array.isArray(threshold)) {
223
+ if (threshold.length > 0) {
224
+ return threshold.map(normalizeThresholdValue).sort();
225
+ } else {
226
+ return [0];
227
+ }
228
+ }
229
+
230
+ return [normalizeThresholdValue(threshold)];
231
+ }
232
+
233
+ function normalizeThresholdValue(threshold: mixed): number {
234
+ if (threshold == null) {
235
+ return 0;
236
+ }
237
+
238
+ const thresholdAsNumber = Number(threshold);
239
+ if (!Number.isFinite(thresholdAsNumber)) {
240
+ throw new TypeError(
241
+ "Failed to read the 'threshold' property from 'IntersectionObserverInit': The provided double value is non-finite.",
242
+ );
243
+ }
244
+
245
+ if (thresholdAsNumber < 0 || thresholdAsNumber > 1) {
246
+ throw new RangeError(
247
+ "Failed to construct 'IntersectionObserver': Threshold values must be numbers between 0 and 1",
248
+ );
249
+ }
250
+
251
+ return thresholdAsNumber;
252
+ }
@@ -0,0 +1,140 @@
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
+ */
10
+
11
+ // flowlint unsafe-getters-setters:off
12
+
13
+ import type ReactNativeElement from '../DOM/Nodes/ReactNativeElement';
14
+ import type {InternalInstanceHandle} from '../Renderer/shims/ReactNativeTypes';
15
+ import type {NativeIntersectionObserverEntry} from './NativeIntersectionObserver';
16
+
17
+ import DOMRectReadOnly from '../DOM/Geometry/DOMRectReadOnly';
18
+ import {getPublicInstanceFromInternalInstanceHandle} from '../DOM/Nodes/ReadOnlyNode';
19
+
20
+ /**
21
+ * The [`IntersectionObserverEntry`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserverEntry)
22
+ * interface of the Intersection Observer API describes the intersection between
23
+ * the target element and its root container at a specific moment of transition.
24
+ *
25
+ * An array of `IntersectionObserverEntry` is delivered to
26
+ * `IntersectionObserver` callbacks as the first argument.
27
+ */
28
+ export default class IntersectionObserverEntry {
29
+ // We lazily compute all the properties from the raw entry provided by the
30
+ // native module, so we avoid unnecessary work.
31
+ _nativeEntry: NativeIntersectionObserverEntry;
32
+
33
+ constructor(nativeEntry: NativeIntersectionObserverEntry) {
34
+ this._nativeEntry = nativeEntry;
35
+ }
36
+
37
+ /**
38
+ * Returns the bounds rectangle of the target element as a `DOMRectReadOnly`.
39
+ * The bounds are computed as described in the documentation for
40
+ * [`Element.getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).
41
+ */
42
+ get boundingClientRect(): DOMRectReadOnly {
43
+ const targetRect = this._nativeEntry.targetRect;
44
+ return new DOMRectReadOnly(
45
+ targetRect[0],
46
+ targetRect[1],
47
+ targetRect[2],
48
+ targetRect[3],
49
+ );
50
+ }
51
+
52
+ /**
53
+ * Returns the ratio of the `intersectionRect` to the `boundingClientRect`.
54
+ */
55
+ get intersectionRatio(): number {
56
+ const intersectionRect = this.intersectionRect;
57
+ const boundingClientRect = this.boundingClientRect;
58
+
59
+ if (boundingClientRect.width === 0 || boundingClientRect.height === 0) {
60
+ return 0;
61
+ }
62
+
63
+ return (
64
+ (intersectionRect.width * intersectionRect.height) /
65
+ (boundingClientRect.width * boundingClientRect.height)
66
+ );
67
+ }
68
+
69
+ /**
70
+ * Returns a `DOMRectReadOnly` representing the target's visible area.
71
+ */
72
+ get intersectionRect(): DOMRectReadOnly {
73
+ const intersectionRect = this._nativeEntry.intersectionRect;
74
+
75
+ if (intersectionRect == null) {
76
+ return new DOMRectReadOnly();
77
+ }
78
+
79
+ return new DOMRectReadOnly(
80
+ intersectionRect[0],
81
+ intersectionRect[1],
82
+ intersectionRect[2],
83
+ intersectionRect[3],
84
+ );
85
+ }
86
+
87
+ /**
88
+ * A `Boolean` value which is `true` if the target element intersects with the
89
+ * intersection observer's root.
90
+ * * If this is `true`, then, the `IntersectionObserverEntry` describes a
91
+ * transition into a state of intersection.
92
+ * * If it's `false`, then you know the transition is from intersecting to
93
+ * not-intersecting.
94
+ */
95
+ get isIntersecting(): boolean {
96
+ return this._nativeEntry.isIntersectingAboveThresholds;
97
+ }
98
+
99
+ /**
100
+ * Returns a `DOMRectReadOnly` for the intersection observer's root.
101
+ */
102
+ get rootBounds(): DOMRectReadOnly {
103
+ const rootRect = this._nativeEntry.rootRect;
104
+ return new DOMRectReadOnly(
105
+ rootRect[0],
106
+ rootRect[1],
107
+ rootRect[2],
108
+ rootRect[3],
109
+ );
110
+ }
111
+
112
+ /**
113
+ * The `ReactNativeElement` whose intersection with the root changed.
114
+ */
115
+ 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);
125
+ }
126
+
127
+ /**
128
+ * A `DOMHighResTimeStamp` indicating the time at which the intersection was
129
+ * recorded, relative to the `IntersectionObserver`'s time origin.
130
+ */
131
+ get time(): DOMHighResTimeStamp {
132
+ return this._nativeEntry.time;
133
+ }
134
+ }
135
+
136
+ export function createIntersectionObserverEntry(
137
+ entry: NativeIntersectionObserverEntry,
138
+ ): IntersectionObserverEntry {
139
+ return new IntersectionObserverEntry(entry);
140
+ }