@office-iss/react-native-win32 0.72.7 → 0.73.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 (272) hide show
  1. package/.flowconfig +15 -4
  2. package/CHANGELOG.json +523 -94
  3. package/CHANGELOG.md +209 -52
  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/Button/ButtonWin32.Props.d.ts +1 -1
  36. package/Libraries/Components/Button/ButtonWin32.Props.js.map +1 -1
  37. package/Libraries/Components/Button/ButtonWin32.d.ts +1 -1
  38. package/Libraries/Components/Button/ButtonWin32.js +1 -4
  39. package/Libraries/Components/Button/ButtonWin32.js.map +1 -1
  40. package/Libraries/Components/Clipboard/Clipboard.d.ts +4 -4
  41. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +3 -1
  42. package/Libraries/Components/EnterString.win32.d.ts +1 -1
  43. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +26 -6
  44. package/Libraries/Components/Pressable/Pressable.js +3 -2
  45. package/Libraries/Components/Pressable/Pressable.win32.js +4 -3
  46. package/Libraries/Components/Pressable/useAndroidRippleForView.js +1 -1
  47. package/Libraries/Components/SafeAreaView/SafeAreaView.js +7 -7
  48. package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +7 -8
  49. package/Libraries/Components/ScrollView/ScrollView.js +3 -1
  50. package/Libraries/Components/ScrollView/ScrollView.win32.js +3 -1
  51. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +39 -46
  52. package/Libraries/Components/Switch/Switch.js +1 -0
  53. package/Libraries/Components/Text/TextWin32.d.ts +1 -1
  54. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +1 -0
  55. package/Libraries/Components/TextInput/TextInput.d.ts +49 -7
  56. package/Libraries/Components/TextInput/TextInput.flow.js +43 -10
  57. package/Libraries/Components/TextInput/TextInput.js +62 -10
  58. package/Libraries/Components/TextInput/TextInput.win32.js +953 -206
  59. package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +23 -0
  60. package/Libraries/Components/ToastAndroid/{ToastAndroid.ios.js → ToastAndroid.js} +9 -1
  61. package/Libraries/Components/ToastAndroid/ToastAndroid.win32.js +9 -1
  62. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js +2 -2
  63. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
  64. package/Libraries/Components/Touchable/TouchableBounce.js +1 -1
  65. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
  66. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  67. package/Libraries/Components/Touchable/TouchableOpacity.js +4 -1
  68. package/Libraries/Components/Touchable/TouchableWin32.d.ts +1 -1
  69. package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
  70. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -0
  71. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +16 -6
  72. package/Libraries/Components/View/ReactNativeStyleAttributes.js +9 -0
  73. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  74. package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
  75. package/Libraries/Components/View/View.js +46 -32
  76. package/Libraries/Components/View/View.win32.js +37 -6
  77. package/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
  78. package/Libraries/Components/View/ViewNativeComponent.js +1 -0
  79. package/Libraries/Components/View/ViewPropTypes.js +18 -3
  80. package/Libraries/Components/View/ViewPropTypes.win32.js +30 -4
  81. package/Libraries/Components/View/ViewWin32.js +3 -2
  82. package/Libraries/Core/Devtools/loadBundleFromServer.js +152 -0
  83. package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -1
  84. package/Libraries/Core/ExceptionsManager.js +16 -7
  85. package/Libraries/Core/ExtendedError.js +12 -0
  86. package/Libraries/Core/ReactNativeVersion.js +3 -3
  87. package/Libraries/Core/ReactNativeVersionCheck.js +0 -2
  88. package/Libraries/Core/ReactNativeVersionCheck.win32.js +0 -2
  89. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +20 -0
  90. package/Libraries/Core/setUpDeveloperTools.js +5 -1
  91. package/Libraries/Core/setUpIntersectionObserver.js +16 -0
  92. package/Libraries/{Components/ProgressBarAndroid/ProgressBarAndroid.ios.js → Core/setUpMutationObserver.js} +6 -2
  93. package/Libraries/Core/setUpPerformance.js +6 -13
  94. package/Libraries/Core/setUpPerformanceObserver.js +16 -0
  95. package/Libraries/Core/setUpRegeneratorRuntime.js +4 -2
  96. package/Libraries/DOM/Nodes/ReactNativeElement.js +135 -18
  97. package/Libraries/DOM/Nodes/ReadOnlyCharacterData.js +72 -0
  98. package/Libraries/DOM/Nodes/ReadOnlyElement.js +209 -21
  99. package/Libraries/DOM/Nodes/ReadOnlyNode.js +206 -17
  100. package/Libraries/DOM/Nodes/ReadOnlyText.js +30 -0
  101. package/Libraries/DOM/Nodes/Utilities/Traversal.js +54 -0
  102. package/Libraries/EventEmitter/NativeEventEmitter.d.ts +0 -6
  103. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +15 -4
  104. package/Libraries/Image/Image.android.js +8 -2
  105. package/Libraries/Image/Image.d.ts +1 -1
  106. package/Libraries/Image/Image.ios.js +4 -1
  107. package/Libraries/Image/Image.win32.js +6 -3
  108. package/Libraries/Image/ImageBackground.js +3 -0
  109. package/Libraries/Image/resolveAssetSource.win32.js +1 -1
  110. package/Libraries/Inspector/DevtoolsOverlay.js +6 -3
  111. package/Libraries/Inspector/NetworkOverlay.js +2 -2
  112. package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -5
  113. package/Libraries/Interaction/PanResponder.js +1 -4
  114. package/Libraries/IntersectionObserver/IntersectionObserver.js +252 -0
  115. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +140 -0
  116. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +221 -0
  117. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +41 -0
  118. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +162 -0
  119. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -1
  120. package/Libraries/Lists/FlatList.d.ts +2 -1
  121. package/Libraries/Lists/FlatList.js +15 -5
  122. package/Libraries/Lists/SectionList.js +4 -0
  123. package/Libraries/LogBox/Data/LogBoxLog.js +4 -1
  124. package/Libraries/LogBox/Data/LogBoxSymbolication.js +5 -2
  125. package/Libraries/LogBox/Data/parseLogBoxLog.js +57 -20
  126. package/Libraries/LogBox/UI/AnsiHighlight.js +1 -1
  127. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +24 -31
  128. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  129. package/Libraries/LogBox/UI/LogBoxMessage.js +4 -7
  130. package/Libraries/MutationObserver/MutationObserver.js +184 -0
  131. package/Libraries/MutationObserver/MutationObserverManager.js +218 -0
  132. package/Libraries/MutationObserver/MutationRecord.js +82 -0
  133. package/Libraries/MutationObserver/NativeMutationObserver.js +58 -0
  134. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +327 -0
  135. package/Libraries/NativeComponent/BaseViewConfig.android.js +18 -3
  136. package/Libraries/NativeComponent/BaseViewConfig.ios.js +33 -0
  137. package/Libraries/NativeComponent/BaseViewConfig.win32.js +33 -0
  138. package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -5
  139. package/Libraries/NativeModules/specs/NativeSourceCode.js +6 -6
  140. package/Libraries/Network/RCTNetworking.android.js +2 -1
  141. package/Libraries/Network/XMLHttpRequest.js +1 -1
  142. package/Libraries/NewAppScreen/components/DebugInstructions.js +4 -4
  143. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +9 -2
  144. package/Libraries/Performance/QuickPerformanceLogger.js +1 -1
  145. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +1 -0
  146. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +1 -0
  147. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -1
  148. package/Libraries/Pressability/Pressability.js +28 -3
  149. package/Libraries/Pressability/Pressability.win32.js +30 -5
  150. package/Libraries/ReactNative/AppContainer.js +2 -3
  151. package/Libraries/ReactNative/AppRegistry.d.ts +0 -5
  152. package/Libraries/ReactNative/AppRegistry.js +66 -53
  153. package/Libraries/ReactNative/BridgelessUIManager.js +38 -9
  154. package/Libraries/ReactNative/FabricUIManager.js +143 -34
  155. package/Libraries/ReactNative/I18nManager.js +5 -11
  156. package/Libraries/ReactNative/NativeI18nManager.js +7 -5
  157. package/Libraries/ReactNative/PaperUIManager.win32.js +2 -2
  158. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +151 -0
  159. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +81 -0
  160. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +492 -0
  161. package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +32 -0
  162. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +19 -3
  163. package/Libraries/ReactNative/UIManager.js +8 -0
  164. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +648 -0
  165. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +38 -2
  166. package/Libraries/Renderer/implementations/ReactFabric-dev.js +27 -27
  167. package/Libraries/Renderer/implementations/ReactFabric-prod.js +3 -3
  168. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3 -3
  169. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +27 -27
  170. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3 -3
  171. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3 -3
  172. package/Libraries/Renderer/shims/ReactFabric.js +5 -6
  173. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -3
  174. package/Libraries/Renderer/shims/ReactNative.js +2 -3
  175. package/Libraries/Renderer/shims/ReactNativeTypes.js +35 -17
  176. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -3
  177. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -3
  178. package/Libraries/Settings/{Settings.android.js → Settings.js} +4 -4
  179. package/Libraries/Share/Share.d.ts +3 -9
  180. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +9 -4
  181. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +28 -13
  182. package/Libraries/StyleSheet/PlatformColorValueTypes.win32.js +14 -4
  183. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +1 -1
  184. package/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  185. package/Libraries/StyleSheet/StyleSheet.d.ts +10 -1
  186. package/Libraries/StyleSheet/StyleSheet.js +3 -0
  187. package/Libraries/StyleSheet/StyleSheet.win32.js +3 -0
  188. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +31 -17
  189. package/Libraries/StyleSheet/StyleSheetTypes.js +90 -6
  190. package/Libraries/StyleSheet/flattenStyle.js +4 -0
  191. package/Libraries/StyleSheet/private/_TransformStyle.js +16 -2
  192. package/Libraries/StyleSheet/processColor.js +1 -2
  193. package/Libraries/StyleSheet/processTransformOrigin.js +136 -0
  194. package/Libraries/StyleSheet/splitLayoutProps.js +1 -0
  195. package/Libraries/Text/Text.d.ts +5 -5
  196. package/Libraries/Text/Text.js +17 -10
  197. package/Libraries/Text/Text.win32.js +354 -0
  198. package/Libraries/Text/TextProps.win32.js +281 -0
  199. package/Libraries/TurboModule/TurboModuleRegistry.js +47 -7
  200. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
  201. package/Libraries/Types/CoreEventTypes.d.ts +5 -2
  202. package/Libraries/Utilities/GlobalPerformanceLogger.js +2 -12
  203. package/Libraries/Utilities/NativeDeviceInfo.js +8 -9
  204. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +23 -18
  205. package/Libraries/Utilities/NativePlatformConstantsIOS.js +16 -13
  206. package/Libraries/Utilities/NativePlatformConstantsWin.js +13 -10
  207. package/Libraries/Utilities/PerformanceLoggerContext.js +1 -1
  208. package/Libraries/Utilities/Platform.android.js +12 -8
  209. package/Libraries/Utilities/Platform.d.ts +1 -0
  210. package/Libraries/Utilities/Platform.flow.js +84 -0
  211. package/Libraries/Utilities/Platform.flow.win32.js +111 -0
  212. package/Libraries/Utilities/Platform.ios.js +12 -8
  213. package/Libraries/Utilities/Platform.win32.js +12 -8
  214. package/Libraries/Utilities/PolyfillFunctions.js +1 -1
  215. package/Libraries/Utilities/ReactNativeTestTools.js +1 -2
  216. package/Libraries/Utilities/SceneTracker.js +1 -1
  217. package/Libraries/Utilities/createPerformanceLogger.js +63 -32
  218. package/Libraries/Utilities/useColorScheme.js +7 -8
  219. package/Libraries/WebPerformance/MemoryInfo.js +1 -1
  220. package/Libraries/WebPerformance/NativePerformance.js +3 -8
  221. package/Libraries/WebPerformance/NativePerformanceObserver.js +4 -0
  222. package/Libraries/WebPerformance/Performance.js +42 -15
  223. package/Libraries/WebPerformance/PerformanceEntry.js +14 -6
  224. package/Libraries/WebPerformance/PerformanceEventTiming.js +18 -1
  225. package/Libraries/WebPerformance/ReactNativeStartupTiming.js +40 -14
  226. package/Libraries/WebPerformance/__mocks__/NativePerformance.js +4 -2
  227. package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +21 -3
  228. package/Libraries/promiseRejectionTrackingOptions.js +1 -3
  229. package/Libraries/vendor/emitter/EventEmitter.js +17 -17
  230. package/flow/global.js +1 -3
  231. package/flow/jest.js +5 -1
  232. package/{Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js → jest/ReactNativeInternalFeatureFlagsMock.js} +2 -1
  233. package/jest/__tests__/setup-test.js +18 -0
  234. package/jest/mockModal.js +6 -4
  235. package/jest/setup.js +61 -30
  236. package/jest.config.js +1 -1
  237. package/just-task.js +1 -0
  238. package/overrides.json +51 -46
  239. package/package.json +35 -33
  240. package/src/Libraries/Components/Button/ButtonWin32.Props.ts +1 -1
  241. package/src/Libraries/Components/Button/ButtonWin32.tsx +0 -2
  242. package/src/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +2 -2
  243. package/src/Libraries/Components/Touchable/TouchableWin32.tsx +1 -1
  244. package/src/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
  245. package/src/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  246. package/types/experimental.d.ts +44 -0
  247. package/types/index.d.ts +2 -1
  248. package/types/modules/Devtools.d.ts +1 -0
  249. package/types/modules/globals.d.ts +16 -1
  250. package/IntegrationTests/BUCK +0 -32
  251. package/IntegrationTests/PropertiesUpdateTest.js +0 -29
  252. package/IntegrationTests/RCTRootViewIntegrationTestApp.js +0 -86
  253. package/IntegrationTests/ReactContentSizeUpdateTest.js +0 -89
  254. package/IntegrationTests/SizeFlexibilityUpdateTest.js +0 -106
  255. package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +0 -51
  256. package/Libraries/Components/TextInput/TextInput.Types.win32.js +0 -3
  257. package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +0 -1
  258. package/Libraries/Utilities/AcessibilityMapping.js +0 -154
  259. package/Libraries/Utilities/AcessibilityMapping.win32.js +0 -156
  260. package/Libraries/Utilities/NativeDevSplitBundleLoader.js +0 -19
  261. package/Libraries/Utilities/useColorScheme.win32.js +0 -26
  262. package/flow/use-sync-external-store.js +0 -20
  263. package/flow-typed/npm/base64-js_v1.x.x.js +0 -12
  264. package/flow-typed/npm/glob_v7.x.x.js +0 -79
  265. package/flow-typed/npm/pretty-format_v26.x.x.js +0 -49
  266. package/flow-typed/npm/promise_v8.x.x.js +0 -30
  267. package/flow-typed/npm/react-dom_v17.x.x.js +0 -139
  268. package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -79
  269. package/flow-typed/npm/stacktrace-parser_v0.1.x.js +0 -17
  270. package/flow-typed/npm/yargs_v17.x.x.js +0 -341
  271. package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +0 -68
  272. /package/Libraries/{Renderer/public → ReactNative/ReactFabricPublicInstance}/ReactFabricPublicInstanceUtils.js +0 -0
@@ -0,0 +1,327 @@
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
+ /**
12
+ * This is a mock of `NativeMutationObserver` implementing the same logic as the
13
+ * native module and integrating with the existing mock for `FabricUIManager`.
14
+ * This allows us to test all the JavaScript code for IntersectionObserver in
15
+ * JavaScript as an integration test using only public APIs.
16
+ */
17
+
18
+ import type {NodeSet} from '../../ReactNative/FabricUIManager';
19
+ import type {RootTag} from '../../ReactNative/RootTag';
20
+ import type {
21
+ InternalInstanceHandle,
22
+ Node,
23
+ } from '../../Renderer/shims/ReactNativeTypes';
24
+ import type {
25
+ MutationObserverId,
26
+ NativeMutationObserverObserveOptions,
27
+ NativeMutationRecord,
28
+ Spec,
29
+ } from '../NativeMutationObserver';
30
+
31
+ import ReadOnlyNode from '../../DOM/Nodes/ReadOnlyNode';
32
+ import {
33
+ type NodeMock,
34
+ type UIManagerCommitHook,
35
+ fromNode,
36
+ getFabricUIManager,
37
+ getNodeInChildSet,
38
+ } from '../../ReactNative/__mocks__/FabricUIManager';
39
+ import invariant from 'invariant';
40
+ import nullthrows from 'nullthrows';
41
+
42
+ let pendingRecords: Array<NativeMutationRecord> = [];
43
+ let callback: ?() => void;
44
+ let getPublicInstance: ?(instanceHandle: InternalInstanceHandle) => mixed;
45
+ let observersByRootTag: Map<
46
+ RootTag,
47
+ Map<MutationObserverId, {deep: Set<Node>, shallow: Set<Node>}>,
48
+ > = new Map();
49
+
50
+ const FabricUIManagerMock = nullthrows(getFabricUIManager());
51
+
52
+ function getMockDataFromShadowNode(node: mixed): NodeMock {
53
+ // $FlowExpectedError[incompatible-call]
54
+ return fromNode(node);
55
+ }
56
+
57
+ function castToNode(node: mixed): Node {
58
+ // $FlowExpectedError[incompatible-return]
59
+ return node;
60
+ }
61
+
62
+ const NativeMutationMock = {
63
+ observe: (options: NativeMutationObserverObserveOptions): void => {
64
+ const targetShadowNode = castToNode(options.targetShadowNode);
65
+ const rootTag = getMockDataFromShadowNode(options.targetShadowNode).rootTag;
66
+
67
+ let observers = observersByRootTag.get(rootTag);
68
+ if (observers == null) {
69
+ observers = new Map();
70
+ observersByRootTag.set(rootTag, observers);
71
+ }
72
+ let observations = observers.get(options.mutationObserverId);
73
+ if (observations == null) {
74
+ observations = {deep: new Set(), shallow: new Set()};
75
+ observers.set(options.mutationObserverId, observations);
76
+ }
77
+
78
+ const isTargetBeingObserved =
79
+ observations.deep.has(targetShadowNode) ||
80
+ observations.shallow.has(targetShadowNode);
81
+ invariant(!isTargetBeingObserved, 'unexpected duplicate call to observe');
82
+
83
+ if (options.subtree) {
84
+ observations.deep.add(targetShadowNode);
85
+ } else {
86
+ observations.shallow.add(targetShadowNode);
87
+ }
88
+ },
89
+ unobserve: (mutationObserverId: number, target: mixed): void => {
90
+ const targetShadowNode = castToNode(target);
91
+
92
+ const observers = observersByRootTag.get(
93
+ getMockDataFromShadowNode(targetShadowNode).rootTag,
94
+ );
95
+ const observations = observers?.get(mutationObserverId);
96
+ invariant(observations != null, 'unexpected call to unobserve');
97
+
98
+ const isTargetBeingObserved =
99
+ observations.deep.has(targetShadowNode) ||
100
+ observations.shallow.has(targetShadowNode);
101
+ invariant(isTargetBeingObserved, 'unexpected call to unobserve');
102
+
103
+ observations.deep.delete(targetShadowNode);
104
+ observations.shallow.delete(targetShadowNode);
105
+ },
106
+ connect: (
107
+ notifyMutationObserversCallback: () => void,
108
+ getPublicInstanceFromInstanceHandle: (
109
+ instanceHandle: InternalInstanceHandle,
110
+ ) => mixed,
111
+ ): void => {
112
+ invariant(callback == null, 'unexpected call to connect');
113
+ callback = notifyMutationObserversCallback;
114
+ getPublicInstance = getPublicInstanceFromInstanceHandle;
115
+ FabricUIManagerMock.__addCommitHook(NativeMutationObserverCommitHook);
116
+ },
117
+ disconnect: (): void => {
118
+ invariant(callback != null, 'unexpected call to disconnect');
119
+ callback = null;
120
+ FabricUIManagerMock.__removeCommitHook(NativeMutationObserverCommitHook);
121
+ },
122
+ takeRecords: (): $ReadOnlyArray<NativeMutationRecord> => {
123
+ const currentRecords = pendingRecords;
124
+ pendingRecords = [];
125
+ return currentRecords;
126
+ },
127
+ };
128
+
129
+ (NativeMutationMock: Spec);
130
+
131
+ export default NativeMutationMock;
132
+
133
+ const NativeMutationObserverCommitHook: UIManagerCommitHook = {
134
+ shadowTreeWillCommit: (rootTag, oldChildSet, newChildSet) => {
135
+ runMutationObservations(rootTag, oldChildSet, newChildSet);
136
+ },
137
+ };
138
+
139
+ function runMutationObservations(
140
+ rootTag: RootTag,
141
+ oldChildSet: ?NodeSet,
142
+ newChildSet: NodeSet,
143
+ ): void {
144
+ const observers = observersByRootTag.get(rootTag);
145
+ if (!observers) {
146
+ return;
147
+ }
148
+
149
+ const newRecords: Array<NativeMutationRecord> = [];
150
+
151
+ for (const [mutationObserverId, observations] of observers) {
152
+ const processedNodes: Set<Node> = new Set();
153
+ for (const targetShadowNode of observations.deep) {
154
+ runMutationObservation({
155
+ mutationObserverId,
156
+ targetShadowNode,
157
+ subtree: true,
158
+ oldChildSet,
159
+ newChildSet,
160
+ newRecords,
161
+ processedNodes,
162
+ });
163
+ }
164
+ for (const targetShadowNode of observations.shallow) {
165
+ runMutationObservation({
166
+ mutationObserverId,
167
+ targetShadowNode,
168
+ subtree: false,
169
+ oldChildSet,
170
+ newChildSet,
171
+ newRecords,
172
+ processedNodes,
173
+ });
174
+ }
175
+ }
176
+
177
+ for (const record of newRecords) {
178
+ pendingRecords.push(record);
179
+ }
180
+
181
+ notifyObserversIfNecessary();
182
+ }
183
+
184
+ function findNodeOfSameFamily(list: NodeSet, node: Node): ?Node {
185
+ for (const current of list) {
186
+ if (fromNode(current).reactTag === fromNode(node).reactTag) {
187
+ return current;
188
+ }
189
+ }
190
+ return;
191
+ }
192
+
193
+ function recordMutations({
194
+ mutationObserverId,
195
+ targetShadowNode,
196
+ subtree,
197
+ oldNode,
198
+ newNode,
199
+ newRecords,
200
+ processedNodes,
201
+ }: {
202
+ mutationObserverId: MutationObserverId,
203
+ targetShadowNode: Node,
204
+ subtree: boolean,
205
+ oldNode: Node,
206
+ newNode: Node,
207
+ newRecords: Array<NativeMutationRecord>,
208
+ processedNodes: Set<Node>,
209
+ }): void {
210
+ // If the nodes are referentially equal, their children are also the same.
211
+ if (oldNode === newNode || processedNodes.has(newNode)) {
212
+ return;
213
+ }
214
+
215
+ processedNodes.add(newNode);
216
+
217
+ const oldChildren = fromNode(oldNode).children;
218
+ const newChildren = fromNode(newNode).children;
219
+
220
+ const addedNodes = [];
221
+ const removedNodes = [];
222
+
223
+ // Check for removed nodes (and equal nodes for further inspection later)
224
+ for (const oldChild of oldChildren) {
225
+ const newChild = findNodeOfSameFamily(newChildren, oldChild);
226
+ if (newChild == null) {
227
+ removedNodes.push(oldChild);
228
+ } else if (subtree) {
229
+ recordMutations({
230
+ mutationObserverId,
231
+ targetShadowNode,
232
+ subtree,
233
+ oldNode: oldChild,
234
+ newNode: newChild,
235
+ newRecords,
236
+ processedNodes,
237
+ });
238
+ }
239
+ }
240
+
241
+ // Check for added nodes
242
+ for (const newChild of newChildren) {
243
+ const oldChild = findNodeOfSameFamily(oldChildren, newChild);
244
+ if (oldChild == null) {
245
+ addedNodes.push(newChild);
246
+ }
247
+ }
248
+
249
+ if (addedNodes.length > 0 || removedNodes.length > 0) {
250
+ newRecords.push({
251
+ mutationObserverId: mutationObserverId,
252
+ target: nullthrows(getPublicInstance)(
253
+ getMockDataFromShadowNode(targetShadowNode).instanceHandle,
254
+ ),
255
+ addedNodes: addedNodes.map(node => {
256
+ const readOnlyNode = nullthrows(getPublicInstance)(
257
+ fromNode(node).instanceHandle,
258
+ );
259
+ invariant(
260
+ readOnlyNode instanceof ReadOnlyNode,
261
+ 'expected instance of ReadOnlyNode',
262
+ );
263
+ return readOnlyNode;
264
+ }),
265
+ removedNodes: removedNodes.map(node => {
266
+ const readOnlyNode = nullthrows(getPublicInstance)(
267
+ fromNode(node).instanceHandle,
268
+ );
269
+ invariant(
270
+ readOnlyNode instanceof ReadOnlyNode,
271
+ 'expected instance of ReadOnlyNode',
272
+ );
273
+ return readOnlyNode;
274
+ }),
275
+ });
276
+ }
277
+ }
278
+
279
+ function runMutationObservation({
280
+ mutationObserverId,
281
+ targetShadowNode,
282
+ subtree,
283
+ oldChildSet,
284
+ newChildSet,
285
+ newRecords,
286
+ processedNodes,
287
+ }: {
288
+ mutationObserverId: MutationObserverId,
289
+ targetShadowNode: Node,
290
+ subtree: boolean,
291
+ oldChildSet: ?NodeSet,
292
+ newChildSet: NodeSet,
293
+ newRecords: Array<NativeMutationRecord>,
294
+ processedNodes: Set<Node>,
295
+ }): void {
296
+ if (!oldChildSet) {
297
+ return;
298
+ }
299
+
300
+ const oldTargetShadowNode = getNodeInChildSet(targetShadowNode, oldChildSet);
301
+ if (oldTargetShadowNode == null) {
302
+ return;
303
+ }
304
+
305
+ const newTargetShadowNode = getNodeInChildSet(targetShadowNode, newChildSet);
306
+ if (newTargetShadowNode == null) {
307
+ return;
308
+ }
309
+
310
+ recordMutations({
311
+ mutationObserverId,
312
+ targetShadowNode,
313
+ subtree,
314
+ oldNode: oldTargetShadowNode,
315
+ newNode: newTargetShadowNode,
316
+ newRecords,
317
+ processedNodes,
318
+ });
319
+ }
320
+
321
+ function notifyObserversIfNecessary(): void {
322
+ if (pendingRecords.length > 0) {
323
+ // We schedule these using regular tasks in native because microtasks are
324
+ // still not properly supported.
325
+ setTimeout(() => callback?.(), 0);
326
+ }
327
+ }
@@ -103,6 +103,12 @@ const bubblingEventTypes = {
103
103
  bubbled: 'onPointerOver',
104
104
  },
105
105
  },
106
+ topClick: {
107
+ phasedRegistrationNames: {
108
+ captured: 'onClickCapture',
109
+ bubbled: 'onClick',
110
+ },
111
+ },
106
112
  };
107
113
 
108
114
  const directEventTypes = {
@@ -135,9 +141,6 @@ const directEventTypes = {
135
141
  topMomentumScrollEnd: {
136
142
  registrationName: 'onMomentumScrollEnd',
137
143
  },
138
- topClick: {
139
- registrationName: 'onClick',
140
- },
141
144
  topLoadingStart: {
142
145
  registrationName: 'onLoadingStart',
143
146
  },
@@ -162,6 +165,7 @@ const validAttributesForNonEventProps = {
162
165
  // @ReactProps from BaseViewManager
163
166
  backgroundColor: {process: require('../StyleSheet/processColor').default},
164
167
  transform: true,
168
+ transformOrigin: true,
165
169
  opacity: true,
166
170
  elevation: true,
167
171
  shadowColor: {process: require('../StyleSheet/processColor').default},
@@ -179,6 +183,7 @@ const validAttributesForNonEventProps = {
179
183
  accessibilityActions: true,
180
184
  accessibilityValue: true,
181
185
  importantForAccessibility: true,
186
+ role: true,
182
187
  rotation: true,
183
188
  scaleX: true,
184
189
  scaleY: true,
@@ -258,9 +263,19 @@ const validAttributesForNonEventProps = {
258
263
  top: true,
259
264
  bottom: true,
260
265
 
266
+ inset: true,
267
+ insetBlock: true,
268
+ insetBlockEnd: true,
269
+ insetBlockStart: true,
270
+ insetInline: true,
271
+ insetInlineEnd: true,
272
+ insetInlineStart: true,
273
+
261
274
  position: true,
262
275
 
263
276
  style: ReactNativeStyleAttributes,
277
+
278
+ experimental_layoutConformance: true,
264
279
  };
265
280
 
266
281
  // Props for bubbling and direct events
@@ -88,6 +88,12 @@ const bubblingEventTypes = {
88
88
  },
89
89
 
90
90
  // Experimental/Work in Progress Pointer Events (not yet ready for use)
91
+ topClick: {
92
+ phasedRegistrationNames: {
93
+ captured: 'onClickCapture',
94
+ bubbled: 'onClick',
95
+ },
96
+ },
91
97
  topPointerCancel: {
92
98
  phasedRegistrationNames: {
93
99
  captured: 'onPointerCancelCapture',
@@ -138,6 +144,18 @@ const bubblingEventTypes = {
138
144
  bubbled: 'onPointerOut',
139
145
  },
140
146
  },
147
+ topGotPointerCapture: {
148
+ phasedRegistrationNames: {
149
+ captured: 'onGotPointerCaptureCapture',
150
+ bubbled: 'onGotPointerCapture',
151
+ },
152
+ },
153
+ topLostPointerCapture: {
154
+ phasedRegistrationNames: {
155
+ captured: 'onLostPointerCaptureCapture',
156
+ bubbled: 'onLostPointerCapture',
157
+ },
158
+ },
141
159
  };
142
160
 
143
161
  const directEventTypes = {
@@ -187,11 +205,13 @@ const validAttributesForNonEventProps = {
187
205
  overflow: true,
188
206
  shouldRasterizeIOS: true,
189
207
  transform: {diff: require('../Utilities/differ/matricesDiffer')},
208
+ transformOrigin: true,
190
209
  accessibilityRole: true,
191
210
  accessibilityState: true,
192
211
  nativeID: true,
193
212
  pointerEvents: true,
194
213
  removeClippedSubviews: true,
214
+ role: true,
195
215
  borderRadius: true,
196
216
  borderColor: {process: require('../StyleSheet/processColor').default},
197
217
  borderCurve: true,
@@ -236,6 +256,14 @@ const validAttributesForNonEventProps = {
236
256
  bottom: true,
237
257
  left: true,
238
258
 
259
+ inset: true,
260
+ insetBlock: true,
261
+ insetBlockEnd: true,
262
+ insetBlockStart: true,
263
+ insetInline: true,
264
+ insetInlineEnd: true,
265
+ insetInlineStart: true,
266
+
239
267
  width: true,
240
268
  height: true,
241
269
 
@@ -308,6 +336,8 @@ const validAttributesForNonEventProps = {
308
336
  direction: true,
309
337
 
310
338
  style: ReactNativeStyleAttributes,
339
+
340
+ experimental_layoutConformance: true,
311
341
  };
312
342
 
313
343
  // Props for bubbling and direct events
@@ -342,6 +372,7 @@ const validAttributesForEventProps = ConditionallyIgnoredEventHandlers({
342
372
  onTouchCancel: true,
343
373
 
344
374
  // Pointer events
375
+ onClick: true,
345
376
  onPointerUp: true,
346
377
  onPointerDown: true,
347
378
  onPointerCancel: true,
@@ -350,6 +381,8 @@ const validAttributesForEventProps = ConditionallyIgnoredEventHandlers({
350
381
  onPointerLeave: true,
351
382
  onPointerOver: true,
352
383
  onPointerOut: true,
384
+ onGotPointerCapture: true,
385
+ onLostPointerCapture: true,
353
386
  });
354
387
 
355
388
  /**
@@ -88,6 +88,12 @@ const bubblingEventTypes = {
88
88
  },
89
89
 
90
90
  // Experimental/Work in Progress Pointer Events (not yet ready for use)
91
+ topClick: {
92
+ phasedRegistrationNames: {
93
+ captured: 'onClickCapture',
94
+ bubbled: 'onClick',
95
+ },
96
+ },
91
97
  topPointerCancel: {
92
98
  phasedRegistrationNames: {
93
99
  captured: 'onPointerCancelCapture',
@@ -138,6 +144,18 @@ const bubblingEventTypes = {
138
144
  bubbled: 'onPointerOut',
139
145
  },
140
146
  },
147
+ topGotPointerCapture: {
148
+ phasedRegistrationNames: {
149
+ captured: 'onGotPointerCaptureCapture',
150
+ bubbled: 'onGotPointerCapture',
151
+ },
152
+ },
153
+ topLostPointerCapture: {
154
+ phasedRegistrationNames: {
155
+ captured: 'onLostPointerCaptureCapture',
156
+ bubbled: 'onLostPointerCapture',
157
+ },
158
+ },
141
159
  };
142
160
 
143
161
  const directEventTypes = {
@@ -187,11 +205,13 @@ const validAttributesForNonEventProps = {
187
205
  overflow: true,
188
206
  shouldRasterizeIOS: true,
189
207
  transform: {diff: require('../Utilities/differ/matricesDiffer')},
208
+ transformOrigin: true,
190
209
  accessibilityRole: true,
191
210
  accessibilityState: true,
192
211
  nativeID: true,
193
212
  pointerEvents: true,
194
213
  removeClippedSubviews: true,
214
+ role: true,
195
215
  borderRadius: true,
196
216
  borderColor: {process: require('../StyleSheet/processColor').default},
197
217
  borderCurve: true,
@@ -236,6 +256,14 @@ const validAttributesForNonEventProps = {
236
256
  bottom: true,
237
257
  left: true,
238
258
 
259
+ inset: true,
260
+ insetBlock: true,
261
+ insetBlockEnd: true,
262
+ insetBlockStart: true,
263
+ insetInline: true,
264
+ insetInlineEnd: true,
265
+ insetInlineStart: true,
266
+
239
267
  width: true,
240
268
  height: true,
241
269
 
@@ -308,6 +336,8 @@ const validAttributesForNonEventProps = {
308
336
  direction: true,
309
337
 
310
338
  style: ReactNativeStyleAttributes,
339
+
340
+ experimental_layoutConformance: true,
311
341
  };
312
342
 
313
343
  // Props for bubbling and direct events
@@ -342,6 +372,7 @@ const validAttributesForEventProps = ConditionallyIgnoredEventHandlers({
342
372
  onTouchCancel: true,
343
373
 
344
374
  // Pointer events
375
+ onClick: true,
345
376
  onPointerUp: true,
346
377
  onPointerDown: true,
347
378
  onPointerCancel: true,
@@ -350,6 +381,8 @@ const validAttributesForEventProps = ConditionallyIgnoredEventHandlers({
350
381
  onPointerLeave: true,
351
382
  onPointerOver: true,
352
383
  onPointerOut: true,
384
+ onGotPointerCapture: true,
385
+ onLostPointerCapture: true,
353
386
  });
354
387
 
355
388
  /**
@@ -38,11 +38,9 @@ export function setRuntimeConfigProvider(
38
38
  verify: boolean,
39
39
  },
40
40
  ): void {
41
- invariant(
42
- getRuntimeConfig == null,
43
- 'NativeComponentRegistry.setRuntimeConfigProvider() called more than once.',
44
- );
45
- getRuntimeConfig = runtimeConfigProvider;
41
+ if (getRuntimeConfig === undefined) {
42
+ getRuntimeConfig = runtimeConfigProvider;
43
+ }
46
44
  }
47
45
 
48
46
  /**
@@ -12,19 +12,19 @@ import type {TurboModule} from '../../TurboModule/RCTExport';
12
12
 
13
13
  import * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';
14
14
 
15
+ export type SourceCodeConstants = {|
16
+ scriptURL: string,
17
+ |};
18
+
15
19
  export interface Spec extends TurboModule {
16
- +getConstants: () => {|
17
- scriptURL: string,
18
- |};
20
+ +getConstants: () => SourceCodeConstants;
19
21
  }
20
22
 
21
23
  const NativeModule = TurboModuleRegistry.getEnforcing<Spec>('SourceCode');
22
24
  let constants = null;
23
25
 
24
26
  const NativeSourceCode = {
25
- getConstants(): {|
26
- scriptURL: string,
27
- |} {
27
+ getConstants(): SourceCodeConstants {
28
28
  if (constants == null) {
29
29
  constants = NativeModule.getConstants();
30
30
  }
@@ -9,6 +9,7 @@
9
9
  */
10
10
 
11
11
  import type {RequestBody} from './convertRequestBody';
12
+ import type {NativeResponseType} from './XMLHttpRequest';
12
13
 
13
14
  // Do not require the native RCTNetworking module directly! Use this wrapper module instead.
14
15
  // It will add the necessary requestId, so that you don't have to generate it yourself.
@@ -54,7 +55,7 @@ class RCTNetworking extends NativeEventEmitter<$FlowFixMe> {
54
55
  url: string,
55
56
  headers: Object,
56
57
  data: RequestBody,
57
- responseType: 'text' | 'base64',
58
+ responseType: NativeResponseType,
58
59
  incrementalUpdates: boolean,
59
60
  timeout: number,
60
61
  callback: (requestId: number) => mixed,
@@ -13,12 +13,12 @@
13
13
  import type {IPerformanceLogger} from '../Utilities/createPerformanceLogger';
14
14
 
15
15
  import {type EventSubscription} from '../vendor/emitter/EventEmitter';
16
+ import EventTarget from 'event-target-shim';
16
17
 
17
18
  const BlobManager = require('../Blob/BlobManager');
18
19
  const GlobalPerformanceLogger = require('../Utilities/GlobalPerformanceLogger');
19
20
  const RCTNetworking = require('./RCTNetworking').default;
20
21
  const base64 = require('base64-js');
21
- const EventTarget = require('event-target-shim');
22
22
  const invariant = require('invariant');
23
23
 
24
24
  const DEBUG_NETWORK_SEND_DELAY: false = false; // Set to a number of milliseconds when debugging
@@ -25,15 +25,15 @@ const DebugInstructions: () => Node = Platform.select({
25
25
  ios: () => (
26
26
  <Text>
27
27
  Press <Text style={styles.highlight}>Cmd + D</Text> in the simulator or{' '}
28
- <Text style={styles.highlight}>Shake</Text> your device to open the React
29
- Native debug menu.
28
+ <Text style={styles.highlight}>Shake</Text> your device to open the Dev
29
+ Menu.
30
30
  </Text>
31
31
  ),
32
32
  default: () => (
33
33
  <Text>
34
34
  Press <Text style={styles.highlight}>Cmd or Ctrl + M</Text> or{' '}
35
- <Text style={styles.highlight}>Shake</Text> your device to open the React
36
- Native debug menu.
35
+ <Text style={styles.highlight}>Shake</Text> your device to open the Dev
36
+ Menu.
37
37
  </Text>
38
38
  ),
39
39
  });
@@ -60,13 +60,20 @@ const links = [
60
60
  },
61
61
  {
62
62
  id: 7,
63
+ title: 'Debugging',
64
+ link: 'https://facebook.github.io/react-native/docs/debugging',
65
+ description:
66
+ 'Learn about the tools available to debug and inspect your app.',
67
+ },
68
+ {
69
+ id: 8,
63
70
  title: 'Help',
64
- link: 'https://reactnative.dev/help',
71
+ link: 'https://facebook.github.io/react-native/help',
65
72
  description:
66
73
  'Need more help? There are many other React Native developers who may have the answer.',
67
74
  },
68
75
  {
69
- id: 8,
76
+ id: 9,
70
77
  title: 'Follow us on Twitter',
71
78
  link: 'https://twitter.com/reactnative',
72
79
  description:
@@ -16,7 +16,7 @@ const DUMMY_INSTANCE_KEY = 0;
16
16
  // Defines map of annotations
17
17
  // Use as following:
18
18
  // {string: {key1: value1, key2: value2}}
19
- export type AnnotationsMap = $Shape<{
19
+ export type AnnotationsMap = Partial<{
20
20
  string: ?{[string]: string, ...},
21
21
  int: ?{[string]: number, ...},
22
22
  double: ?{[string]: number, ...},
@@ -48,6 +48,7 @@ export type PermissionType =
48
48
  | 'android.permission.READ_MEDIA_IMAGES',
49
49
  | 'android.permission.READ_MEDIA_VIDEO',
50
50
  | 'android.permission.READ_MEDIA_AUDIO',
51
+ | 'android.permission.READ_MEDIA_VISUAL_USER_SELECTED'
51
52
  | 'android.permission.WRITE_EXTERNAL_STORAGE'
52
53
  | 'android.permission.BLUETOOTH_CONNECT'
53
54
  | 'android.permission.BLUETOOTH_SCAN'
@@ -46,6 +46,7 @@ export type Permission =
46
46
  | 'android.permission.READ_MEDIA_IMAGES'
47
47
  | 'android.permission.READ_MEDIA_VIDEO'
48
48
  | 'android.permission.READ_MEDIA_AUDIO'
49
+ | 'android.permission.READ_MEDIA_VISUAL_USER_SELECTED'
49
50
  | 'android.permission.WRITE_EXTERNAL_STORAGE'
50
51
  | 'android.permission.BLUETOOTH_CONNECT'
51
52
  | 'android.permission.BLUETOOTH_SCAN'