@office-iss/react-native-win32 0.74.4 → 0.75.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 (206) hide show
  1. package/.flowconfig +9 -4
  2. package/CHANGELOG.json +554 -51
  3. package/CHANGELOG.md +165 -30
  4. package/Libraries/Animated/AnimatedImplementation.js +2 -0
  5. package/Libraries/Animated/NativeAnimatedHelper.js +4 -0
  6. package/Libraries/Animated/NativeAnimatedHelper.win32.js +4 -0
  7. package/Libraries/Animated/createAnimatedComponent.js +10 -4
  8. package/Libraries/Animated/useAnimatedProps.js +56 -28
  9. package/Libraries/BatchedBridge/MessageQueue.js +1 -0
  10. package/Libraries/Components/Button.js +10 -5
  11. package/Libraries/Components/Button.win32.js +1 -0
  12. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +11 -2
  13. package/Libraries/Components/Pressable/Pressable.js +13 -6
  14. package/Libraries/Components/Pressable/Pressable.win32.js +13 -6
  15. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +4 -0
  16. package/Libraries/Components/ScrollView/ScrollView.js +109 -29
  17. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +6 -0
  18. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +13 -1
  19. package/Libraries/Components/StatusBar/StatusBar.js +1 -21
  20. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +0 -15
  21. package/Libraries/Components/TextInput/InputAccessoryView.js +10 -1
  22. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +0 -12
  23. package/Libraries/Components/TextInput/TextInput.d.ts +0 -19
  24. package/Libraries/Components/TextInput/TextInput.js +14 -70
  25. package/Libraries/Components/TextInput/TextInput.win32.js +15 -72
  26. package/Libraries/Components/Touchable/Touchable.js +2 -2
  27. package/Libraries/Components/Touchable/TouchableHighlight.d.ts +4 -10
  28. package/Libraries/Components/Touchable/TouchableHighlight.js +3 -1
  29. package/Libraries/Components/Touchable/TouchableOpacity.d.ts +4 -32
  30. package/Libraries/Components/Touchable/TouchableOpacity.js +3 -1
  31. package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +8 -0
  32. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +117 -111
  33. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -0
  34. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  35. package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
  36. package/Libraries/Components/View/View.js +0 -11
  37. package/Libraries/Components/View/View.win32.js +0 -11
  38. package/Libraries/Components/View/ViewAccessibility.js +4 -4
  39. package/Libraries/Components/View/ViewAccessibility.win32.js +6 -6
  40. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
  41. package/Libraries/Components/View/ViewPropTypes.js +7 -0
  42. package/Libraries/Components/View/ViewPropTypes.win32.js +7 -0
  43. package/Libraries/Core/Devtools/loadBundleFromServer.js +3 -3
  44. package/Libraries/Core/Devtools/loadBundleFromServer.win32.js +153 -0
  45. package/Libraries/Core/Devtools/parseErrorStack.js +5 -5
  46. package/Libraries/Core/Devtools/parseHermesStack.js +22 -16
  47. package/Libraries/Core/ErrorHandlers.js +116 -0
  48. package/Libraries/Core/ExceptionsManager.js +2 -2
  49. package/Libraries/Core/ReactNativeVersion.js +3 -3
  50. package/Libraries/Core/setUpDeveloperTools.js +3 -1
  51. package/Libraries/Core/setUpPerformance.js +6 -4
  52. package/Libraries/Core/setUpReactDevTools.js +70 -10
  53. package/Libraries/Core/setUpTimers.js +50 -31
  54. package/Libraries/Debugging/DebuggingOverlayRegistry.js +1 -1
  55. package/Libraries/Image/Image.android.js +23 -13
  56. package/Libraries/Image/Image.d.ts +14 -15
  57. package/Libraries/Image/Image.ios.js +21 -11
  58. package/Libraries/Image/Image.win32.js +5 -3
  59. package/Libraries/Image/ImageProps.js +16 -5
  60. package/Libraries/Image/ImageTypes.flow.js +7 -2
  61. package/Libraries/Image/ImageUtils.js +1 -0
  62. package/Libraries/Image/ImageViewNativeComponent.js +2 -1
  63. package/Libraries/Inspector/ElementBox.js +6 -3
  64. package/Libraries/Inspector/ElementProperties.js +1 -1
  65. package/Libraries/Interaction/TouchHistoryMath.js +4 -4
  66. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +6 -26
  67. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  68. package/Libraries/LogBox/Data/LogBoxData.js +39 -29
  69. package/Libraries/LogBox/Data/LogBoxLog.js +114 -2
  70. package/Libraries/LogBox/Data/parseLogBoxLog.js +168 -53
  71. package/Libraries/LogBox/LogBox.js +29 -12
  72. package/Libraries/LogBox/LogBoxNotificationContainer.js +4 -0
  73. package/Libraries/LogBox/UI/LogBoxInspector.js +8 -70
  74. package/Libraries/LogBox/UI/LogBoxInspectorBody.js +87 -0
  75. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +6 -42
  76. package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +58 -0
  77. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +5 -66
  78. package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +8 -52
  79. package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +76 -0
  80. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +8 -5
  81. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +8 -5
  82. package/Libraries/LogBox/UI/LogBoxNotification.js +13 -152
  83. package/Libraries/LogBox/UI/LogBoxNotificationCountBadge.js +63 -0
  84. package/Libraries/LogBox/UI/LogBoxNotificationDismissButton.js +67 -0
  85. package/Libraries/LogBox/UI/LogBoxNotificationMessage.js +57 -0
  86. package/Libraries/NativeComponent/BaseViewConfig.android.js +5 -0
  87. package/Libraries/NativeComponent/BaseViewConfig.ios.js +5 -0
  88. package/Libraries/NativeComponent/BaseViewConfig.win32.js +5 -0
  89. package/Libraries/NativeComponent/NativeComponentRegistry.js +12 -5
  90. package/Libraries/NativeComponent/StaticViewConfigValidator.js +3 -0
  91. package/Libraries/Network/XMLHttpRequest.js +5 -1
  92. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +3 -3
  93. package/Libraries/Pressability/Pressability.js +3 -51
  94. package/Libraries/Pressability/Pressability.win32.js +3 -51
  95. package/Libraries/ReactNative/AppContainer-dev.js +3 -2
  96. package/Libraries/ReactNative/AppContainer-prod.js +2 -1
  97. package/Libraries/ReactNative/AppContainer.js +2 -0
  98. package/Libraries/ReactNative/AppRegistry.d.ts +7 -0
  99. package/Libraries/ReactNative/AppRegistry.js +10 -4
  100. package/Libraries/ReactNative/BridgelessUIManager.js +1 -21
  101. package/Libraries/ReactNative/FabricUIManager.js +0 -51
  102. package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +1 -0
  103. package/Libraries/ReactNative/RendererImplementation.js +20 -2
  104. package/Libraries/ReactNative/UIManager.d.ts +0 -21
  105. package/Libraries/ReactNative/UIManagerProperties.js +0 -3
  106. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +5 -341
  107. package/Libraries/ReactNative/getNativeComponentAttributes.js +8 -8
  108. package/Libraries/ReactNative/renderApplication.js +3 -0
  109. package/Libraries/Renderer/implementations/ReactFabric-dev.js +15682 -27088
  110. package/Libraries/Renderer/implementations/ReactFabric-prod.js +5082 -4381
  111. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3480 -2571
  112. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +15943 -27543
  113. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5303 -4606
  114. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3450 -2572
  115. package/Libraries/Renderer/shims/ReactFabric.js +2 -2
  116. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  117. package/Libraries/Renderer/shims/ReactNative.js +2 -3
  118. package/Libraries/Renderer/shims/ReactNativeTypes.js +24 -3
  119. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -2
  120. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  121. package/Libraries/Share/Share.d.ts +16 -10
  122. package/Libraries/Share/Share.js +14 -15
  123. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -1
  124. package/Libraries/StyleSheet/StyleSheet.js +3 -10
  125. package/Libraries/StyleSheet/StyleSheet.win32.js +3 -10
  126. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +21 -21
  127. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -18
  128. package/Libraries/StyleSheet/flattenStyle.js +1 -0
  129. package/Libraries/StyleSheet/processFilter.js +132 -0
  130. package/Libraries/StyleSheet/processTransform.js +18 -3
  131. package/Libraries/Text/Text.js +151 -128
  132. package/Libraries/Text/Text.win32.js +163 -138
  133. package/Libraries/Text/TextNativeComponent.js +5 -4
  134. package/Libraries/Text/TextNativeComponent.win32.js +5 -4
  135. package/Libraries/Text/TextProps.js +6 -6
  136. package/Libraries/Text/TextProps.win32.js +6 -6
  137. package/Libraries/TurboModule/TurboModuleRegistry.js +2 -1
  138. package/Libraries/Types/CodegenTypes.js +3 -0
  139. package/Libraries/Utilities/{LoadingView.android.js → DevLoadingView.js} +33 -11
  140. package/Libraries/Utilities/Dimensions.js +1 -0
  141. package/Libraries/Utilities/Dimensions.win32.js +1 -0
  142. package/Libraries/Utilities/HMRClient.js +36 -8
  143. package/Libraries/Utilities/HMRClientProdShim.js +1 -0
  144. package/Libraries/Utilities/Platform.android.js +4 -4
  145. package/Libraries/Utilities/RCTLog.js +1 -0
  146. package/Libraries/Utilities/ReactNativeTestTools.js +12 -24
  147. package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +11 -6
  148. package/Libraries/__tests__/ButtonWin32-test.js +7 -6
  149. package/Libraries/promiseRejectionTrackingOptions.js +1 -0
  150. package/jest/mockComponent.js +7 -0
  151. package/jest/renderer.js +25 -14
  152. package/jest/setup.js +19 -13
  153. package/jest.config.js +2 -1
  154. package/overrides.json +30 -29
  155. package/package.json +27 -25
  156. package/rn-get-polyfills.js +1 -0
  157. package/src/private/core/composeStyles.js +27 -0
  158. package/src/private/featureflags/ReactNativeFeatureFlags.js +93 -33
  159. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
  160. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +56 -0
  161. package/src/private/fusebox/setUpFuseboxReactDevToolsDispatcher.js +108 -0
  162. package/src/private/specs/modules/NativeBlobModule.js +4 -2
  163. package/src/private/specs/modules/NativeDevSettings.js +1 -0
  164. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +0 -4
  165. package/src/private/specs/modules/NativeUIManager.js +0 -7
  166. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +24 -24
  167. package/src/private/webapis/dom/nodes/ReactNativeElement.js +11 -14
  168. package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +2 -3
  169. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +24 -54
  170. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -13
  171. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +468 -0
  172. package/src/private/webapis/dom/nodes/specs/__mocks__/NativeDOMMock.js +413 -0
  173. package/src/private/webapis/dom/oldstylecollections/DOMRectList.js +4 -4
  174. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +4 -4
  175. package/src/private/webapis/dom/oldstylecollections/NodeList.js +5 -5
  176. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +34 -0
  177. package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +21 -0
  178. package/src/private/webapis/performance/EventCounts.js +1 -1
  179. package/src/private/webapis/performance/MemoryInfo.js +9 -9
  180. package/src/private/webapis/performance/Performance.js +10 -56
  181. package/src/private/webapis/performance/PerformanceObserver.js +30 -22
  182. package/src/private/webapis/performance/RawPerformanceEntry.js +2 -7
  183. package/src/private/webapis/performance/ReactNativeStartupTiming.js +18 -18
  184. package/src/private/webapis/performance/UserTiming.js +63 -0
  185. package/src/private/webapis/performance/{NativePerformance.js → specs/NativePerformance.js} +3 -2
  186. package/src/private/webapis/performance/{NativePerformanceObserver.js → specs/NativePerformanceObserver.js} +2 -2
  187. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformance.js +1 -1
  188. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformanceObserver.js +3 -4
  189. package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
  190. package/types/modules/globals.d.ts +4 -0
  191. package/Libraries/Components/ScrollView/ScrollView.win32.js +0 -1915
  192. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +0 -13
  193. package/Libraries/Utilities/LoadingView.ios.js +0 -50
  194. package/Libraries/Utilities/LoadingView.js +0 -16
  195. package/jest/ReactNativeInternalFeatureFlagsMock.js +0 -13
  196. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +0 -44
  197. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +0 -92
  198. package/src/private/specs/modules/NativeAnimationsDebugModule.js +0 -20
  199. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +0 -85
  200. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +0 -80
  201. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +0 -161
  202. package/src/private/webapis/performance/__tests__/EventCounts-test.js +0 -116
  203. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +0 -82
  204. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +0 -108
  205. package/src/private/webapis/performance/__tests__/Performance-test.js +0 -117
  206. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +0 -208
@@ -0,0 +1,413 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict-local
8
+ * @format
9
+ * @oncall react_native
10
+ */
11
+
12
+ import type {
13
+ InternalInstanceHandle,
14
+ Node,
15
+ } from '../../../../../../../Libraries/Renderer/shims/ReactNativeTypes';
16
+ import type {
17
+ MeasureInWindowOnSuccessCallback,
18
+ MeasureLayoutOnSuccessCallback,
19
+ MeasureOnSuccessCallback,
20
+ } from '../NativeDOM';
21
+ import typeof NativeDOM from '../NativeDOM';
22
+
23
+ import {
24
+ ensureHostNode,
25
+ fromNode,
26
+ getAncestorsInCurrentTree,
27
+ getNodeInCurrentTree,
28
+ } from '../../../../../../../Libraries/ReactNative/__mocks__/FabricUIManager';
29
+
30
+ function* dfs(node: ?Node): Iterator<Node> {
31
+ if (node == null) {
32
+ return;
33
+ }
34
+
35
+ yield node;
36
+
37
+ for (const child of fromNode(node).children) {
38
+ yield* dfs(child);
39
+ }
40
+ }
41
+
42
+ function hasDisplayNone(node: Node): boolean {
43
+ const props = fromNode(node).props;
44
+ // Style is flattened when passed to native, so there's no style object.
45
+ // $FlowFixMe[prop-missing]
46
+ return props != null && props.display === 'none';
47
+ }
48
+
49
+ const NativeDOMMock: NativeDOM = {
50
+ getBoundingClientRect: jest.fn(
51
+ (
52
+ node: Node,
53
+ includeTransform: boolean,
54
+ ): [
55
+ /* x:*/ number,
56
+ /* y:*/ number,
57
+ /* width:*/ number,
58
+ /* height:*/ number,
59
+ ] => {
60
+ ensureHostNode(node);
61
+
62
+ const nodeInCurrentTree = getNodeInCurrentTree(node);
63
+ const currentProps =
64
+ nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
65
+ if (currentProps == null) {
66
+ return [0, 0, 0, 0];
67
+ }
68
+
69
+ const boundingClientRectForTests: ?{
70
+ x: number,
71
+ y: number,
72
+ width: number,
73
+ height: number,
74
+ } =
75
+ // $FlowExpectedError[prop-missing]
76
+ currentProps.__boundingClientRectForTests;
77
+
78
+ if (boundingClientRectForTests == null) {
79
+ return [0, 0, 0, 0];
80
+ }
81
+
82
+ const {x, y, width, height} = boundingClientRectForTests;
83
+ return [x, y, width, height];
84
+ },
85
+ ),
86
+
87
+ hasPointerCapture: jest.fn((node: Node, pointerId: number): boolean => false),
88
+
89
+ setPointerCapture: jest.fn((node: Node, pointerId: number): void => {}),
90
+
91
+ releasePointerCapture: jest.fn((node: Node, pointerId: number): void => {}),
92
+
93
+ getParentNode: jest.fn((node: Node): ?InternalInstanceHandle => {
94
+ const ancestors = getAncestorsInCurrentTree(node);
95
+ if (ancestors == null || ancestors.length - 2 < 0) {
96
+ return null;
97
+ }
98
+
99
+ const [parentOfParent, position] = ancestors[ancestors.length - 2];
100
+ const parentInCurrentTree = fromNode(parentOfParent).children[position];
101
+ return fromNode(parentInCurrentTree).instanceHandle;
102
+ }),
103
+
104
+ getChildNodes: jest.fn(
105
+ (node: Node): $ReadOnlyArray<InternalInstanceHandle> => {
106
+ const nodeInCurrentTree = getNodeInCurrentTree(node);
107
+
108
+ if (nodeInCurrentTree == null) {
109
+ return [];
110
+ }
111
+
112
+ return fromNode(nodeInCurrentTree).children.map(
113
+ child => fromNode(child).instanceHandle,
114
+ );
115
+ },
116
+ ),
117
+
118
+ isConnected: jest.fn((node: Node): boolean => {
119
+ return getNodeInCurrentTree(node) != null;
120
+ }),
121
+
122
+ getTextContent: jest.fn((node: Node): string => {
123
+ const nodeInCurrentTree = getNodeInCurrentTree(node);
124
+
125
+ let result = '';
126
+
127
+ if (nodeInCurrentTree == null) {
128
+ return result;
129
+ }
130
+
131
+ for (const childNode of dfs(nodeInCurrentTree)) {
132
+ if (fromNode(childNode).viewName === 'RCTRawText') {
133
+ const props = fromNode(childNode).props;
134
+ // $FlowExpectedError[prop-missing]
135
+ const maybeString: ?string = props.text;
136
+ if (typeof maybeString === 'string') {
137
+ result += maybeString;
138
+ }
139
+ }
140
+ }
141
+ return result;
142
+ }),
143
+
144
+ compareDocumentPosition: jest.fn((node: Node, otherNode: Node): number => {
145
+ /* eslint-disable no-bitwise */
146
+ const ReadOnlyNode = require('../../ReadOnlyNode').default;
147
+
148
+ // Quick check for node vs. itself
149
+ if (fromNode(node).reactTag === fromNode(otherNode).reactTag) {
150
+ return 0;
151
+ }
152
+
153
+ if (fromNode(node).rootTag !== fromNode(otherNode).rootTag) {
154
+ return ReadOnlyNode.DOCUMENT_POSITION_DISCONNECTED;
155
+ }
156
+
157
+ const ancestors = getAncestorsInCurrentTree(node);
158
+ if (ancestors == null) {
159
+ return ReadOnlyNode.DOCUMENT_POSITION_DISCONNECTED;
160
+ }
161
+
162
+ const otherAncestors = getAncestorsInCurrentTree(otherNode);
163
+ if (otherAncestors == null) {
164
+ return ReadOnlyNode.DOCUMENT_POSITION_DISCONNECTED;
165
+ }
166
+
167
+ // Consume all common ancestors
168
+ let i = 0;
169
+ while (
170
+ i < ancestors.length &&
171
+ i < otherAncestors.length &&
172
+ ancestors[i][1] === otherAncestors[i][1]
173
+ ) {
174
+ i++;
175
+ }
176
+
177
+ if (i === ancestors.length) {
178
+ return (
179
+ ReadOnlyNode.DOCUMENT_POSITION_CONTAINED_BY |
180
+ ReadOnlyNode.DOCUMENT_POSITION_FOLLOWING
181
+ );
182
+ }
183
+
184
+ if (i === otherAncestors.length) {
185
+ return (
186
+ ReadOnlyNode.DOCUMENT_POSITION_CONTAINS |
187
+ ReadOnlyNode.DOCUMENT_POSITION_PRECEDING
188
+ );
189
+ }
190
+
191
+ if (ancestors[i][1] > otherAncestors[i][1]) {
192
+ return ReadOnlyNode.DOCUMENT_POSITION_PRECEDING;
193
+ }
194
+
195
+ return ReadOnlyNode.DOCUMENT_POSITION_FOLLOWING;
196
+ }),
197
+
198
+ getOffset: jest.fn(
199
+ (
200
+ node: Node,
201
+ ): [
202
+ /* offsetParent: */ ?InternalInstanceHandle,
203
+ /* offsetTop: */ number,
204
+ /* offsetLeft: */ number,
205
+ ] => {
206
+ const ancestors = getAncestorsInCurrentTree(node);
207
+ if (ancestors == null) {
208
+ return [null, 0, 0];
209
+ }
210
+
211
+ const [parent, position] = ancestors[ancestors.length - 1];
212
+ const nodeInCurrentTree = fromNode(parent).children[position];
213
+
214
+ const currentProps =
215
+ nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
216
+ if (currentProps == null || hasDisplayNone(nodeInCurrentTree)) {
217
+ return [null, 0, 0];
218
+ }
219
+
220
+ const offsetForTests: ?{
221
+ top: number,
222
+ left: number,
223
+ } =
224
+ // $FlowExpectedError[prop-missing]
225
+ currentProps.__offsetForTests;
226
+
227
+ if (offsetForTests == null) {
228
+ return [null, 0, 0];
229
+ }
230
+
231
+ let currentIndex = ancestors.length - 1;
232
+ while (currentIndex >= 0 && !hasDisplayNone(ancestors[currentIndex][0])) {
233
+ currentIndex--;
234
+ }
235
+
236
+ if (currentIndex >= 0) {
237
+ // The node or one of its ancestors have display: none
238
+ return [null, 0, 0];
239
+ }
240
+
241
+ return [
242
+ fromNode(parent).instanceHandle,
243
+ offsetForTests.top,
244
+ offsetForTests.left,
245
+ ];
246
+ },
247
+ ),
248
+
249
+ getScrollPosition: jest.fn(
250
+ (node: Node): [/* scrollLeft: */ number, /* scrollTop: */ number] => {
251
+ ensureHostNode(node);
252
+
253
+ const nodeInCurrentTree = getNodeInCurrentTree(node);
254
+ const currentProps =
255
+ nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
256
+ if (currentProps == null) {
257
+ return [0, 0];
258
+ }
259
+
260
+ const scrollForTests: ?{
261
+ scrollLeft: number,
262
+ scrollTop: number,
263
+ ...
264
+ } =
265
+ // $FlowExpectedError[prop-missing]
266
+ currentProps.__scrollForTests;
267
+
268
+ if (scrollForTests == null) {
269
+ return [0, 0];
270
+ }
271
+
272
+ const {scrollLeft, scrollTop} = scrollForTests;
273
+ return [scrollLeft, scrollTop];
274
+ },
275
+ ),
276
+
277
+ getScrollSize: jest.fn(
278
+ (node: Node): [/* scrollLeft: */ number, /* scrollTop: */ number] => {
279
+ ensureHostNode(node);
280
+
281
+ const nodeInCurrentTree = getNodeInCurrentTree(node);
282
+ const currentProps =
283
+ nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
284
+ if (currentProps == null) {
285
+ return [0, 0];
286
+ }
287
+
288
+ const scrollForTests: ?{
289
+ scrollWidth: number,
290
+ scrollHeight: number,
291
+ ...
292
+ } =
293
+ // $FlowExpectedError[prop-missing]
294
+ currentProps.__scrollForTests;
295
+
296
+ if (scrollForTests == null) {
297
+ return [0, 0];
298
+ }
299
+
300
+ const {scrollWidth, scrollHeight} = scrollForTests;
301
+ return [scrollWidth, scrollHeight];
302
+ },
303
+ ),
304
+
305
+ getInnerSize: jest.fn(
306
+ (node: Node): [/* width: */ number, /* height: */ number] => {
307
+ ensureHostNode(node);
308
+
309
+ const nodeInCurrentTree = getNodeInCurrentTree(node);
310
+ const currentProps =
311
+ nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
312
+ if (currentProps == null) {
313
+ return [0, 0];
314
+ }
315
+
316
+ const innerSizeForTests: ?{
317
+ width: number,
318
+ height: number,
319
+ ...
320
+ } =
321
+ // $FlowExpectedError[prop-missing]
322
+ currentProps.__innerSizeForTests;
323
+
324
+ if (innerSizeForTests == null) {
325
+ return [0, 0];
326
+ }
327
+
328
+ const {width, height} = innerSizeForTests;
329
+ return [width, height];
330
+ },
331
+ ),
332
+
333
+ getBorderWidth: jest.fn(
334
+ (
335
+ node: Node,
336
+ ): [
337
+ /* topWidth: */ number,
338
+ /* rightWidth: */ number,
339
+ /* bottomWidth: */ number,
340
+ /* leftWidth: */ number,
341
+ ] => {
342
+ ensureHostNode(node);
343
+
344
+ const nodeInCurrentTree = getNodeInCurrentTree(node);
345
+ const currentProps =
346
+ nodeInCurrentTree != null ? fromNode(nodeInCurrentTree).props : null;
347
+ if (currentProps == null) {
348
+ return [0, 0, 0, 0];
349
+ }
350
+
351
+ const borderSizeForTests: ?{
352
+ topWidth?: number,
353
+ rightWidth?: number,
354
+ bottomWidth?: number,
355
+ leftWidth?: number,
356
+ ...
357
+ } =
358
+ // $FlowExpectedError[prop-missing]
359
+ currentProps.__borderSizeForTests;
360
+
361
+ if (borderSizeForTests == null) {
362
+ return [0, 0, 0, 0];
363
+ }
364
+
365
+ const {
366
+ topWidth = 0,
367
+ rightWidth = 0,
368
+ bottomWidth = 0,
369
+ leftWidth = 0,
370
+ } = borderSizeForTests;
371
+ return [topWidth, rightWidth, bottomWidth, leftWidth];
372
+ },
373
+ ),
374
+
375
+ getTagName: jest.fn((node: Node): string => {
376
+ ensureHostNode(node);
377
+ return 'RN:' + fromNode(node).viewName;
378
+ }),
379
+
380
+ /**
381
+ * Legacy layout APIs
382
+ */
383
+
384
+ measure: jest.fn((node: Node, callback: MeasureOnSuccessCallback): void => {
385
+ ensureHostNode(node);
386
+
387
+ callback(10, 10, 100, 100, 0, 0);
388
+ }),
389
+
390
+ measureInWindow: jest.fn(
391
+ (node: Node, callback: MeasureInWindowOnSuccessCallback): void => {
392
+ ensureHostNode(node);
393
+
394
+ callback(10, 10, 100, 100);
395
+ },
396
+ ),
397
+
398
+ measureLayout: jest.fn(
399
+ (
400
+ node: Node,
401
+ relativeNode: Node,
402
+ onFail: () => void,
403
+ onSuccess: MeasureLayoutOnSuccessCallback,
404
+ ): void => {
405
+ ensureHostNode(node);
406
+ ensureHostNode(relativeNode);
407
+
408
+ onSuccess(1, 1, 100, 100);
409
+ },
410
+ ),
411
+ };
412
+
413
+ export default NativeDOMMock;
@@ -20,7 +20,7 @@ import {createValueIterator} from './ArrayLikeUtils';
20
20
 
21
21
  // $FlowIssue[prop-missing] Flow doesn't understand [Symbol.iterator]() {} and thinks this class doesn't implement the Iterable interface.
22
22
  export default class DOMRectList implements Iterable<DOMRectReadOnly> {
23
- _length: number;
23
+ #length: number;
24
24
 
25
25
  /**
26
26
  * Use `createDOMRectList` to create instances of this class.
@@ -38,15 +38,15 @@ export default class DOMRectList implements Iterable<DOMRectReadOnly> {
38
38
  });
39
39
  }
40
40
 
41
- this._length = elements.length;
41
+ this.#length = elements.length;
42
42
  }
43
43
 
44
44
  get length(): number {
45
- return this._length;
45
+ return this.#length;
46
46
  }
47
47
 
48
48
  item(index: number): DOMRectReadOnly | null {
49
- if (index < 0 || index >= this._length) {
49
+ if (index < 0 || index >= this.#length) {
50
50
  return null;
51
51
  }
52
52
 
@@ -19,7 +19,7 @@ import {createValueIterator} from './ArrayLikeUtils';
19
19
 
20
20
  // $FlowIssue[prop-missing] Flow doesn't understand [Symbol.iterator]() {} and thinks this class doesn't implement the Iterable<T> interface.
21
21
  export default class HTMLCollection<T> implements Iterable<T>, ArrayLike<T> {
22
- _length: number;
22
+ #length: number;
23
23
 
24
24
  /**
25
25
  * Use `createHTMLCollection` to create instances of this class.
@@ -37,15 +37,15 @@ export default class HTMLCollection<T> implements Iterable<T>, ArrayLike<T> {
37
37
  });
38
38
  }
39
39
 
40
- this._length = elements.length;
40
+ this.#length = elements.length;
41
41
  }
42
42
 
43
43
  get length(): number {
44
- return this._length;
44
+ return this.#length;
45
45
  }
46
46
 
47
47
  item(index: number): T | null {
48
- if (index < 0 || index >= this._length) {
48
+ if (index < 0 || index >= this.#length) {
49
49
  return null;
50
50
  }
51
51
 
@@ -23,7 +23,7 @@ import {
23
23
 
24
24
  // $FlowIssue[prop-missing] Flow doesn't understand [Symbol.iterator]() {} and thinks this class doesn't implement the Iterable<T> interface.
25
25
  export default class NodeList<T> implements Iterable<T>, ArrayLike<T> {
26
- _length: number;
26
+ #length: number;
27
27
 
28
28
  /**
29
29
  * Use `createNodeList` to create instances of this class.
@@ -38,15 +38,15 @@ export default class NodeList<T> implements Iterable<T>, ArrayLike<T> {
38
38
  writable: false,
39
39
  });
40
40
  }
41
- this._length = elements.length;
41
+ this.#length = elements.length;
42
42
  }
43
43
 
44
44
  get length(): number {
45
- return this._length;
45
+ return this.#length;
46
46
  }
47
47
 
48
48
  item(index: number): T | null {
49
- if (index < 0 || index >= this._length) {
49
+ if (index < 0 || index >= this.#length) {
50
50
  return null;
51
51
  }
52
52
 
@@ -70,7 +70,7 @@ export default class NodeList<T> implements Iterable<T>, ArrayLike<T> {
70
70
  // eslint-disable-next-line consistent-this
71
71
  const arrayLike: ArrayLike<T> = this;
72
72
 
73
- for (let index = 0; index < this._length; index++) {
73
+ for (let index = 0; index < this.#length; index++) {
74
74
  if (thisArg == null) {
75
75
  callbackFn(arrayLike[index], index, this);
76
76
  } else {
@@ -0,0 +1,34 @@
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
8
+ * @format
9
+ */
10
+
11
+ import type {TurboModule} from '../../../../../Libraries/TurboModule/RCTExport';
12
+
13
+ import * as TurboModuleRegistry from '../../../../../Libraries/TurboModule/TurboModuleRegistry';
14
+
15
+ export type RequestIdleCallbackOptions = {
16
+ timeout?: number,
17
+ };
18
+
19
+ export type IdleDeadline = {
20
+ didTimeout: boolean,
21
+ timeRemaining: () => mixed,
22
+ };
23
+
24
+ export interface Spec extends TurboModule {
25
+ +requestIdleCallback: (
26
+ callback: (idleDeadline: IdleDeadline) => mixed,
27
+ options?: RequestIdleCallbackOptions,
28
+ ) => mixed;
29
+ +cancelIdleCallback: (handle: mixed) => void;
30
+ }
31
+
32
+ export default (TurboModuleRegistry.getEnforcing<Spec>(
33
+ 'NativeIdleCallbacksCxx',
34
+ ): Spec);
@@ -0,0 +1,21 @@
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
8
+ * @format
9
+ */
10
+
11
+ import type {TurboModule} from '../../../../../Libraries/TurboModule/RCTExport';
12
+
13
+ import * as TurboModuleRegistry from '../../../../../Libraries/TurboModule/TurboModuleRegistry';
14
+
15
+ export interface Spec extends TurboModule {
16
+ +queueMicrotask: (callback: () => mixed) => void;
17
+ }
18
+
19
+ export default (TurboModuleRegistry.getEnforcing<Spec>(
20
+ 'NativeMicrotasksCxx',
21
+ ): Spec);
@@ -8,8 +8,8 @@
8
8
  * @format
9
9
  */
10
10
 
11
- import NativePerformanceObserver from './NativePerformanceObserver';
12
11
  import {warnNoNativePerformanceObserver} from './PerformanceObserver';
12
+ import NativePerformanceObserver from './specs/NativePerformanceObserver';
13
13
 
14
14
  type EventCountsForEachCallbackType =
15
15
  | (() => void)
@@ -19,15 +19,15 @@ type MemoryInfoLike = {
19
19
 
20
20
  // Read-only object with JS memory information. This is returned by the performance.memory API.
21
21
  export default class MemoryInfo {
22
- _jsHeapSizeLimit: ?number;
23
- _totalJSHeapSize: ?number;
24
- _usedJSHeapSize: ?number;
22
+ #jsHeapSizeLimit: ?number;
23
+ #totalJSHeapSize: ?number;
24
+ #usedJSHeapSize: ?number;
25
25
 
26
26
  constructor(memoryInfo: ?MemoryInfoLike) {
27
27
  if (memoryInfo != null) {
28
- this._jsHeapSizeLimit = memoryInfo.jsHeapSizeLimit;
29
- this._totalJSHeapSize = memoryInfo.totalJSHeapSize;
30
- this._usedJSHeapSize = memoryInfo.usedJSHeapSize;
28
+ this.#jsHeapSizeLimit = memoryInfo.jsHeapSizeLimit;
29
+ this.#totalJSHeapSize = memoryInfo.totalJSHeapSize;
30
+ this.#usedJSHeapSize = memoryInfo.usedJSHeapSize;
31
31
  }
32
32
  }
33
33
 
@@ -35,20 +35,20 @@ export default class MemoryInfo {
35
35
  * The maximum size of the heap, in bytes, that is available to the context
36
36
  */
37
37
  get jsHeapSizeLimit(): ?number {
38
- return this._jsHeapSizeLimit;
38
+ return this.#jsHeapSizeLimit;
39
39
  }
40
40
 
41
41
  /**
42
42
  * The total allocated heap size, in bytes
43
43
  */
44
44
  get totalJSHeapSize(): ?number {
45
- return this._totalJSHeapSize;
45
+ return this.#totalJSHeapSize;
46
46
  }
47
47
 
48
48
  /**
49
49
  * The currently active segment of JS heap, in bytes.
50
50
  */
51
51
  get usedJSHeapSize(): ?number {
52
- return this._usedJSHeapSize;
52
+ return this.#usedJSHeapSize;
53
53
  }
54
54
  }