@office-iss/react-native-win32 0.68.0 → 0.69.0-preview.3

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 (183) hide show
  1. package/.eslintrc.js +1 -0
  2. package/.flowconfig +1 -3
  3. package/CHANGELOG.json +386 -32
  4. package/CHANGELOG.md +166 -19
  5. package/IntegrationTests/BUCK +4 -1
  6. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +7 -0
  7. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +1 -0
  8. package/Libraries/Alert/Alert.win32.js +1 -1
  9. package/Libraries/Animated/AnimatedImplementation.js +1 -1
  10. package/Libraries/Animated/NativeAnimatedHelper.js +55 -9
  11. package/Libraries/Animated/NativeAnimatedModule.js +1 -0
  12. package/Libraries/Animated/NativeAnimatedTurboModule.js +1 -0
  13. package/Libraries/Animated/animations/TimingAnimation.js +6 -11
  14. package/Libraries/Animated/createAnimatedComponent.js +2 -2
  15. package/Libraries/Animated/nodes/AnimatedColor.js +95 -29
  16. package/Libraries/Animated/nodes/AnimatedInterpolation.js +19 -22
  17. package/Libraries/Animated/nodes/AnimatedNode.js +2 -2
  18. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  19. package/Libraries/AppState/AppState.js +1 -1
  20. package/Libraries/Blob/URL.js +7 -1
  21. package/Libraries/Components/Button.js +3 -0
  22. package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +5 -0
  23. package/Libraries/Components/Pressable/Pressable.js +3 -3
  24. package/Libraries/Components/Pressable/Pressable.win32.js +3 -3
  25. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +47 -38
  26. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +15 -7
  27. package/Libraries/Components/ScrollView/ScrollView.js +1 -1
  28. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +16 -3
  29. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +3 -1
  30. package/Libraries/Components/Slider/Slider.js +0 -2
  31. package/Libraries/Components/Slider/SliderNativeComponent.js +0 -1
  32. package/Libraries/Components/StatusBar/StatusBar.js +6 -1
  33. package/Libraries/Components/Switch/Switch.js +11 -1
  34. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +114 -109
  35. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +17 -9
  36. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +13 -5
  37. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +10 -0
  38. package/Libraries/Components/TextInput/TextInput.js +1 -8
  39. package/Libraries/Components/TextInput/TextInputState.js +10 -2
  40. package/Libraries/Components/TextInput/TextInputState.win32.js +10 -2
  41. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
  42. package/Libraries/Components/Touchable/TouchableBounce.js +1 -0
  43. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -0
  44. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -0
  45. package/Libraries/Components/Touchable/TouchableOpacity.js +7 -1
  46. package/Libraries/Components/Touchable/TouchableWin32.Props.d.ts +3 -1
  47. package/Libraries/Components/Touchable/TouchableWin32.Props.js.map +1 -1
  48. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -0
  49. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  50. package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
  51. package/Libraries/Components/View/View.win32.js +33 -1
  52. package/Libraries/Components/View/ViewNativeComponent.js +68 -8
  53. package/Libraries/Components/View/ViewPropTypes.js +36 -4
  54. package/Libraries/Components/View/ViewPropTypes.win32.js +36 -4
  55. package/Libraries/Components/View/ViewWin32.Props.d.ts +1 -1
  56. package/Libraries/Components/View/ViewWin32.Props.js.map +1 -1
  57. package/Libraries/Core/Devtools/parseHermesStack.js +1 -1
  58. package/Libraries/Core/ExceptionsManager.js +1 -1
  59. package/Libraries/Core/RawEventEmitter.js +38 -0
  60. package/Libraries/Core/ReactNativeVersion.js +2 -2
  61. package/Libraries/Core/polyfillPromise.js +32 -0
  62. package/Libraries/Core/setUpReactDevTools.js +3 -2
  63. package/Libraries/EventEmitter/NativeEventEmitter.js +3 -3
  64. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
  65. package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +3 -3
  66. package/Libraries/Events/CustomEvent.js +32 -0
  67. package/Libraries/Events/EventPolyfill.js +239 -0
  68. package/Libraries/Image/Image.android.js +0 -6
  69. package/Libraries/Image/Image.ios.js +0 -6
  70. package/Libraries/Image/Image.win32.js +2 -8
  71. package/Libraries/Image/ImageViewNativeComponent.js +18 -3
  72. package/Libraries/Image/TextInlineImageNativeComponent.js +23 -15
  73. package/Libraries/Image/resolveAssetSource.win32.js +1 -1
  74. package/Libraries/Inspector/Inspector.js +2 -4
  75. package/Libraries/Inspector/Inspector.win32.js +7 -9
  76. package/Libraries/Interaction/BridgeSpyStallHandler.js +4 -3
  77. package/Libraries/Interaction/InteractionManager.js +1 -12
  78. package/Libraries/Interaction/TaskQueue.js +5 -4
  79. package/Libraries/LayoutAnimation/LayoutAnimation.js +13 -0
  80. package/Libraries/Linking/Linking.js +1 -1
  81. package/Libraries/Lists/FlatList.js +27 -6
  82. package/Libraries/Lists/VirtualizedList.js +71 -55
  83. package/Libraries/Lists/VirtualizedListContext.js +7 -3
  84. package/Libraries/Lists/VirtualizedSectionList.js +2 -2
  85. package/Libraries/Lists/__tests__/{FillRateHelper-test.windows.js → FillRateHelper-test.js} +2 -2
  86. package/Libraries/Lists/__tests__/{FlatList-test.windows.js → FlatList-test.js} +2 -2
  87. package/Libraries/Lists/__tests__/{SectionList-test.windows.js → SectionList-test.js} +14 -14
  88. package/Libraries/Lists/__tests__/{VirtualizeUtils-test.windows.js → VirtualizeUtils-test.js} +3 -3
  89. package/Libraries/Lists/__tests__/{VirtualizedList-test.windows.js → VirtualizedList-test.js} +92 -43
  90. package/Libraries/Lists/__tests__/{VirtualizedSectionList-test.windows.js → VirtualizedSectionList-test.js} +16 -14
  91. package/Libraries/LogBox/Data/LogBoxData.js +2 -2
  92. package/Libraries/LogBox/Data/LogBoxLog.js +1 -1
  93. package/Libraries/LogBox/Data/LogBoxSymbolication.js +1 -1
  94. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  95. package/Libraries/LogBox/LogBox.js +2 -21
  96. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +1 -0
  97. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +2 -1
  98. package/Libraries/NativeComponent/BaseViewConfig.android.js +295 -0
  99. package/Libraries/NativeComponent/BaseViewConfig.ios.js +333 -0
  100. package/Libraries/NativeComponent/BaseViewConfig.win32.js +334 -0
  101. package/Libraries/NativeComponent/NativeComponentRegistry.js +0 -2
  102. package/Libraries/NativeComponent/PlatformBaseViewConfig.js +24 -0
  103. package/Libraries/NativeComponent/StaticViewConfigValidator.js +7 -42
  104. package/Libraries/NativeComponent/ViewConfig.js +4 -4
  105. package/Libraries/NativeComponent/ViewConfigIgnore.js +54 -0
  106. package/Libraries/Network/FormData.js +7 -1
  107. package/Libraries/Network/RCTNetworking.win32.js +1 -1
  108. package/Libraries/Pressability/Pressability.js +115 -46
  109. package/Libraries/Pressability/Pressability.win32.js +174 -69
  110. package/Libraries/Pressability/PressabilityDebug.js +5 -9
  111. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +1 -0
  112. package/Libraries/ReactNative/AppContainer.js +1 -1
  113. package/Libraries/ReactNative/{DummyUIManager.js → BridgelessUIManager.js} +62 -40
  114. package/Libraries/ReactNative/PaperUIManager.win32.js +5 -5
  115. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +39 -0
  116. package/Libraries/ReactNative/UIManager.js +2 -3
  117. package/Libraries/ReactNative/renderApplication.js +4 -0
  118. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +8 -0
  119. package/Libraries/Renderer/implementations/ReactFabric-dev.js +5908 -4906
  120. package/Libraries/Renderer/implementations/ReactFabric-prod.js +2100 -1918
  121. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +2567 -2352
  122. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +5610 -4844
  123. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +1710 -1556
  124. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +1830 -1639
  125. package/Libraries/Renderer/shims/ReactNativeTypes.js +2 -1
  126. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -1
  127. package/Libraries/StyleSheet/EdgeInsetsPropType.js +4 -1
  128. package/Libraries/StyleSheet/StyleSheetTypes.js +59 -66
  129. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  130. package/Libraries/StyleSheet/private/_StyleSheetTypesOverrides.js +15 -0
  131. package/Libraries/StyleSheet/private/_TransformStyle.js +53 -0
  132. package/Libraries/Text/Text.js +13 -7
  133. package/Libraries/Text/TextNativeComponent.js +2 -0
  134. package/Libraries/Text/TextNativeComponent.win32.js +2 -0
  135. package/Libraries/Text/TextProps.js +10 -0
  136. package/Libraries/Types/CoreEventTypes.js +13 -1
  137. package/Libraries/Types/CoreEventTypes.win32.js +26 -1
  138. package/Libraries/Utilities/Appearance.js +0 -8
  139. package/Libraries/Utilities/HMRClient.js +1 -1
  140. package/Libraries/Utilities/ReactNativeTestTools.js +1 -0
  141. package/Libraries/Utilities/codegenNativeComponent.js +16 -6
  142. package/Libraries/Utilities/stringifySafe.js +4 -1
  143. package/Libraries/Utilities/useColorScheme.js +9 -15
  144. package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +3 -3
  145. package/Libraries/WebSocket/WebSocket.js +1 -1
  146. package/Libraries/vendor/emitter/_EmitterSubscription.js +1 -1
  147. package/Libraries/vendor/emitter/_EventEmitter.js +1 -1
  148. package/Libraries/vendor/emitter/_EventSubscription.js +1 -1
  149. package/flow/{use-subscription.js → use-sync-external-store.js} +4 -4
  150. package/index.js +30 -25
  151. package/index.win32.js +30 -25
  152. package/jest/preprocessor.js +24 -107
  153. package/jest/preprocessor_DO_NOT_USE.js +122 -0
  154. package/metro.config.js +3 -47
  155. package/overrides.json +39 -46
  156. package/package.json +32 -29
  157. package/rntypes/index.d.ts +19 -7
  158. package/src/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +1 -1
  159. package/src/Libraries/Components/Touchable/TouchableWin32.Props.tsx +3 -1
  160. package/src/Libraries/Components/View/ViewWin32.Props.ts +1 -0
  161. package/src/Libraries/Lists/__tests__/__snapshots__/FlatList-test.js.snap +427 -0
  162. package/src/Libraries/Lists/__tests__/__snapshots__/SectionList-test.js.snap +391 -0
  163. package/src/Libraries/Lists/__tests__/__snapshots__/VirtualizeUtils-test.js.snap +3 -0
  164. package/src/Libraries/Lists/__tests__/__snapshots__/VirtualizedList-test.js.snap +4565 -0
  165. package/src/Libraries/Lists/__tests__/__snapshots__/VirtualizedSectionList-test.js.snap +1153 -0
  166. package/src/rntypes/index.d.ts +19 -7
  167. package/typings-index.js +5 -1
  168. package/typings-index.js.map +1 -1
  169. package/Libraries/Components/SegmentedControlIOS/RCTSegmentedControlNativeComponent.js +0 -44
  170. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.android.js +0 -45
  171. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js +0 -123
  172. package/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.js +0 -45
  173. package/Libraries/Components/View/ReactNativeViewViewConfig.js +0 -360
  174. package/Libraries/Components/View/ReactNativeViewViewConfig.win32.js +0 -401
  175. package/Libraries/Components/View/ReactNativeViewViewConfigAndroid.js +0 -83
  176. package/Libraries/ReactNative/UIManagerInjection.js +0 -15
  177. package/Libraries/Renderer/implementations/ReactFabric-dev.fb.js +0 -24527
  178. package/Libraries/Renderer/implementations/ReactFabric-prod.fb.js +0 -8309
  179. package/Libraries/Renderer/implementations/ReactFabric-profiling.fb.js +0 -8961
  180. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.fb.js +0 -24948
  181. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.fb.js +0 -8400
  182. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.fb.js +0 -9049
  183. package/flow/Promise.js +0 -47
@@ -0,0 +1,334 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @flow strict-local
9
+ */
10
+
11
+ import {
12
+ DynamicallyInjectedByGestureHandler,
13
+ ConditionallyIgnoredEventHandlers,
14
+ } from './ViewConfigIgnore';
15
+ import ReactNativeStyleAttributes from '../Components/View/ReactNativeStyleAttributes';
16
+ import type {PartialViewConfigWithoutName} from './PlatformBaseViewConfig';
17
+
18
+ const bubblingEventTypes = {
19
+ // Generic Events
20
+ topPress: {
21
+ phasedRegistrationNames: {
22
+ bubbled: 'onPress',
23
+ captured: 'onPressCapture',
24
+ },
25
+ },
26
+ topChange: {
27
+ phasedRegistrationNames: {
28
+ bubbled: 'onChange',
29
+ captured: 'onChangeCapture',
30
+ },
31
+ },
32
+ topFocus: {
33
+ phasedRegistrationNames: {
34
+ bubbled: 'onFocus',
35
+ captured: 'onFocusCapture',
36
+ },
37
+ },
38
+ topBlur: {
39
+ phasedRegistrationNames: {
40
+ bubbled: 'onBlur',
41
+ captured: 'onBlurCapture',
42
+ },
43
+ },
44
+ topSubmitEditing: {
45
+ phasedRegistrationNames: {
46
+ bubbled: 'onSubmitEditing',
47
+ captured: 'onSubmitEditingCapture',
48
+ },
49
+ },
50
+ topEndEditing: {
51
+ phasedRegistrationNames: {
52
+ bubbled: 'onEndEditing',
53
+ captured: 'onEndEditingCapture',
54
+ },
55
+ },
56
+ topKeyPress: {
57
+ phasedRegistrationNames: {
58
+ bubbled: 'onKeyPress',
59
+ captured: 'onKeyPressCapture',
60
+ },
61
+ },
62
+
63
+ // Touch Events
64
+ topTouchStart: {
65
+ phasedRegistrationNames: {
66
+ bubbled: 'onTouchStart',
67
+ captured: 'onTouchStartCapture',
68
+ },
69
+ },
70
+ topTouchMove: {
71
+ phasedRegistrationNames: {
72
+ bubbled: 'onTouchMove',
73
+ captured: 'onTouchMoveCapture',
74
+ },
75
+ },
76
+ topTouchCancel: {
77
+ phasedRegistrationNames: {
78
+ bubbled: 'onTouchCancel',
79
+ captured: 'onTouchCancelCapture',
80
+ },
81
+ },
82
+ topTouchEnd: {
83
+ phasedRegistrationNames: {
84
+ bubbled: 'onTouchEnd',
85
+ captured: 'onTouchEndCapture',
86
+ },
87
+ },
88
+
89
+ // Experimental/Work in Progress Pointer Events (not yet ready for use)
90
+ topPointerCancel: {
91
+ phasedRegistrationNames: {
92
+ captured: 'onPointerCancelCapture',
93
+ bubbled: 'onPointerCancel',
94
+ },
95
+ },
96
+ topPointerDown: {
97
+ phasedRegistrationNames: {
98
+ captured: 'onPointerDownCapture',
99
+ bubbled: 'onPointerDown',
100
+ },
101
+ },
102
+ topPointerMove2: {
103
+ phasedRegistrationNames: {
104
+ captured: 'onPointerMove2Capture',
105
+ bubbled: 'onPointerMove2',
106
+ },
107
+ },
108
+ topPointerUp: {
109
+ phasedRegistrationNames: {
110
+ captured: 'onPointerUpCapture',
111
+ bubbled: 'onPointerUp',
112
+ },
113
+ },
114
+ topPointerEnter2: {
115
+ phasedRegistrationNames: {
116
+ captured: 'onPointerEnter2Capture',
117
+ bubbled: 'onPointerEnter2',
118
+ skipBubbling: true,
119
+ },
120
+ },
121
+ topPointerLeave2: {
122
+ phasedRegistrationNames: {
123
+ captured: 'onPointerLeave2Capture',
124
+ bubbled: 'onPointerLeave2',
125
+ skipBubbling: true,
126
+ },
127
+ },
128
+ };
129
+
130
+ const directEventTypes = {
131
+ topAccessibilityAction: {
132
+ registrationName: 'onAccessibilityAction',
133
+ },
134
+ topAccessibilityTap: {
135
+ registrationName: 'onAccessibilityTap',
136
+ },
137
+ topMagicTap: {
138
+ registrationName: 'onMagicTap',
139
+ },
140
+ topAccessibilityEscape: {
141
+ registrationName: 'onAccessibilityEscape',
142
+ },
143
+ topLayout: {
144
+ registrationName: 'onLayout',
145
+ },
146
+ onGestureHandlerEvent: DynamicallyInjectedByGestureHandler({
147
+ registrationName: 'onGestureHandlerEvent',
148
+ }),
149
+ onGestureHandlerStateChange: DynamicallyInjectedByGestureHandler({
150
+ registrationName: 'onGestureHandlerStateChange',
151
+ }),
152
+ };
153
+
154
+ const validAttributesForNonEventProps = {
155
+ // View Props
156
+ accessible: true,
157
+ accessibilityActions: true,
158
+ accessibilityLabel: true,
159
+ accessibilityHint: true,
160
+ accessibilityLanguage: true,
161
+ accessibilityValue: true,
162
+ accessibilityViewIsModal: true,
163
+ accessibilityElementsHidden: true,
164
+ accessibilityIgnoresInvertColors: true,
165
+ testID: true,
166
+ backgroundColor: {process: require('../StyleSheet/processColor')},
167
+ backfaceVisibility: true,
168
+ opacity: true,
169
+ shadowColor: {process: require('../StyleSheet/processColor')},
170
+ shadowOffset: {diff: require('../Utilities/differ/sizesDiffer')},
171
+ shadowOpacity: true,
172
+ shadowRadius: true,
173
+ needsOffscreenAlphaCompositing: true,
174
+ overflow: true,
175
+ shouldRasterizeIOS: true,
176
+ transform: {diff: require('../Utilities/differ/matricesDiffer')},
177
+ accessibilityRole: true,
178
+ accessibilityState: true,
179
+ nativeID: true,
180
+ pointerEvents: true,
181
+ removeClippedSubviews: true,
182
+ borderRadius: true,
183
+ borderColor: {process: require('../StyleSheet/processColor')},
184
+ borderWidth: true,
185
+ borderStyle: true,
186
+ hitSlop: {diff: require('../Utilities/differ/insetsDiffer')},
187
+ collapsable: true,
188
+
189
+ borderTopWidth: true,
190
+ borderTopColor: {process: require('../StyleSheet/processColor')},
191
+ borderRightWidth: true,
192
+ borderRightColor: {process: require('../StyleSheet/processColor')},
193
+ borderBottomWidth: true,
194
+ borderBottomColor: {process: require('../StyleSheet/processColor')},
195
+ borderLeftWidth: true,
196
+ borderLeftColor: {process: require('../StyleSheet/processColor')},
197
+ borderStartWidth: true,
198
+ borderStartColor: {process: require('../StyleSheet/processColor')},
199
+ borderEndWidth: true,
200
+ borderEndColor: {process: require('../StyleSheet/processColor')},
201
+
202
+ borderTopLeftRadius: true,
203
+ borderTopRightRadius: true,
204
+ borderTopStartRadius: true,
205
+ borderTopEndRadius: true,
206
+ borderBottomLeftRadius: true,
207
+ borderBottomRightRadius: true,
208
+ borderBottomStartRadius: true,
209
+ borderBottomEndRadius: true,
210
+ display: true,
211
+ zIndex: true,
212
+
213
+ // ShadowView properties
214
+ top: true,
215
+ right: true,
216
+ start: true,
217
+ end: true,
218
+ bottom: true,
219
+ left: true,
220
+
221
+ width: true,
222
+ height: true,
223
+
224
+ minWidth: true,
225
+ maxWidth: true,
226
+ minHeight: true,
227
+ maxHeight: true,
228
+
229
+ // Also declared as ViewProps
230
+ // borderTopWidth: true,
231
+ // borderRightWidth: true,
232
+ // borderBottomWidth: true,
233
+ // borderLeftWidth: true,
234
+ // borderStartWidth: true,
235
+ // borderEndWidth: true,
236
+ // borderWidth: true,
237
+
238
+ marginTop: true,
239
+ marginRight: true,
240
+ marginBottom: true,
241
+ marginLeft: true,
242
+ marginStart: true,
243
+ marginEnd: true,
244
+ marginVertical: true,
245
+ marginHorizontal: true,
246
+ margin: true,
247
+
248
+ paddingTop: true,
249
+ paddingRight: true,
250
+ paddingBottom: true,
251
+ paddingLeft: true,
252
+ paddingStart: true,
253
+ paddingEnd: true,
254
+ paddingVertical: true,
255
+ paddingHorizontal: true,
256
+ padding: true,
257
+
258
+ flex: true,
259
+ flexGrow: true,
260
+ flexShrink: true,
261
+ flexBasis: true,
262
+ flexDirection: true,
263
+ flexWrap: true,
264
+ justifyContent: true,
265
+ alignItems: true,
266
+ alignSelf: true,
267
+ alignContent: true,
268
+ position: true,
269
+ aspectRatio: true,
270
+
271
+ // Also declared as ViewProps
272
+ // overflow: true,
273
+ // display: true,
274
+
275
+ direction: true,
276
+
277
+ style: ReactNativeStyleAttributes,
278
+ };
279
+
280
+ // Props for bubbling and direct events
281
+ const validAttributesForEventProps = ConditionallyIgnoredEventHandlers({
282
+ onLayout: true,
283
+ onMagicTap: true,
284
+
285
+ // Accessibility
286
+ onAccessibilityAction: true,
287
+ onAccessibilityEscape: true,
288
+ onAccessibilityTap: true,
289
+
290
+ // PanResponder handlers
291
+ onMoveShouldSetResponder: true,
292
+ onMoveShouldSetResponderCapture: true,
293
+ onStartShouldSetResponder: true,
294
+ onStartShouldSetResponderCapture: true,
295
+ onResponderGrant: true,
296
+ onResponderReject: true,
297
+ onResponderStart: true,
298
+ onResponderEnd: true,
299
+ onResponderRelease: true,
300
+ onResponderMove: true,
301
+ onResponderTerminate: true,
302
+ onResponderTerminationRequest: true,
303
+ onShouldBlockNativeResponder: true,
304
+
305
+ // Touch events
306
+ onTouchStart: true,
307
+ onTouchMove: true,
308
+ onTouchEnd: true,
309
+ onTouchCancel: true,
310
+
311
+ // Pointer events
312
+ onPointerUp: true,
313
+ onPointerDown: true,
314
+ onPointerCancel: true,
315
+ onPointerEnter2: true,
316
+ onPointerMove2: true,
317
+ onPointerLeave2: true,
318
+ });
319
+
320
+ /**
321
+ * On iOS, view managers define all of a component's props.
322
+ * All view managers extend RCTViewManager, and RCTViewManager declares these props.
323
+ */
324
+ const PlatformBaseViewConfigWindows: PartialViewConfigWithoutName = {
325
+ bubblingEventTypes,
326
+ directEventTypes,
327
+ validAttributes: {
328
+ ...validAttributesForNonEventProps,
329
+ ...validAttributesForEventProps,
330
+ },
331
+ };
332
+ // [Windows
333
+ export default PlatformBaseViewConfigWindows;
334
+ // Windows]
@@ -23,8 +23,6 @@ import * as React from 'react';
23
23
 
24
24
  let getRuntimeConfig;
25
25
 
26
- let componentNameToExists: Map<string, boolean> = new Map();
27
-
28
26
  /**
29
27
  * Configures a function that is called to determine whether a given component
30
28
  * should be registered using reflection of the native component at runtime.
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @flow strict-local
9
+ */
10
+
11
+ import type {PartialViewConfig} from '../Renderer/shims/ReactNativeTypes';
12
+ import BaseViewConfig from './BaseViewConfig';
13
+
14
+ export type PartialViewConfigWithoutName = $Rest<
15
+ PartialViewConfig,
16
+ {uiViewClassName: string},
17
+ >;
18
+
19
+ const PlatformBaseViewConfig: PartialViewConfigWithoutName = BaseViewConfig;
20
+
21
+ // In Wilde/FB4A, use RNHostComponentListRoute in Bridge mode to verify
22
+ // whether the JS props defined here match the native props defined
23
+ // in RCTViewManagers in iOS, and ViewManagers in Android.
24
+ export default PlatformBaseViewConfig;
@@ -9,12 +9,9 @@
9
9
  */
10
10
 
11
11
  import {type ViewConfig} from '../Renderer/shims/ReactNativeTypes';
12
- // $FlowFixMe[nonstrict-import]
13
- import getNativeComponentAttributes from '../ReactNative/getNativeComponentAttributes';
14
- // $FlowFixMe[nonstrict-import]
15
- import {createViewConfig} from './ViewConfig';
12
+ import {isIgnored} from './ViewConfigIgnore';
16
13
 
17
- type Difference =
14
+ export type Difference =
18
15
  | {
19
16
  type: 'missing',
20
17
  path: Array<string>,
@@ -32,7 +29,7 @@ type Difference =
32
29
  staticValue: mixed,
33
30
  };
34
31
 
35
- type ValidationResult = ValidResult | InvalidResult;
32
+ export type ValidationResult = ValidResult | InvalidResult;
36
33
  type ValidResult = {
37
34
  type: 'valid',
38
35
  };
@@ -41,41 +38,6 @@ type InvalidResult = {
41
38
  differences: Array<Difference>,
42
39
  };
43
40
 
44
- type ViewConfigValidationResult = {
45
- componentName: string,
46
- nativeViewConfig?: ?ViewConfig,
47
- staticViewConfig?: ?ViewConfig,
48
- validationResult?: ?ValidationResult,
49
- };
50
-
51
- // e.g. require('MyNativeComponent') where MyNativeComponent.js exports a HostComponent
52
- type JSModule = $FlowFixMe;
53
-
54
- export function validateStaticViewConfigs(
55
- nativeComponent: JSModule,
56
- ): ViewConfigValidationResult {
57
- const nativeViewConfig = getNativeComponentAttributes(
58
- nativeComponent.default || nativeComponent,
59
- );
60
-
61
- const generatedPartialViewConfig = nativeComponent.__INTERNAL_VIEW_CONFIG;
62
- const staticViewConfig: ?ViewConfig =
63
- generatedPartialViewConfig && createViewConfig(generatedPartialViewConfig);
64
-
65
- const componentName: string = nativeComponent.default || nativeComponent;
66
- const validationResult: ?ValidationResult =
67
- nativeViewConfig &&
68
- staticViewConfig &&
69
- validate(componentName, nativeViewConfig, staticViewConfig);
70
-
71
- return {
72
- componentName,
73
- nativeViewConfig,
74
- staticViewConfig,
75
- validationResult,
76
- };
77
- }
78
-
79
41
  /**
80
42
  * During the migration from native view configs to static view configs, this is
81
43
  * used to validate that the two are equivalent.
@@ -183,7 +145,10 @@ function accumulateDifferences(
183
145
  }
184
146
 
185
147
  for (const staticKey in staticObject) {
186
- if (!nativeObject.hasOwnProperty(staticKey)) {
148
+ if (
149
+ !nativeObject.hasOwnProperty(staticKey) &&
150
+ !isIgnored(staticObject[staticKey])
151
+ ) {
187
152
  differences.push({
188
153
  path: [...path, staticKey],
189
154
  type: 'unexpected',
@@ -8,11 +8,11 @@
8
8
  * @format
9
9
  */
10
10
 
11
- import ReactNativeViewViewConfig from '../Components/View/ReactNativeViewViewConfig';
12
11
  import type {
13
12
  PartialViewConfig,
14
13
  ViewConfig,
15
14
  } from '../Renderer/shims/ReactNativeTypes';
15
+ import PlatformBaseViewConfig from './PlatformBaseViewConfig';
16
16
 
17
17
  /**
18
18
  * Creates a complete `ViewConfig` from a `PartialViewConfig`.
@@ -24,16 +24,16 @@ export function createViewConfig(
24
24
  uiViewClassName: partialViewConfig.uiViewClassName,
25
25
  Commands: {},
26
26
  bubblingEventTypes: composeIndexers(
27
- ReactNativeViewViewConfig.bubblingEventTypes,
27
+ PlatformBaseViewConfig.bubblingEventTypes,
28
28
  partialViewConfig.bubblingEventTypes,
29
29
  ),
30
30
  directEventTypes: composeIndexers(
31
- ReactNativeViewViewConfig.directEventTypes,
31
+ PlatformBaseViewConfig.directEventTypes,
32
32
  partialViewConfig.directEventTypes,
33
33
  ),
34
34
  validAttributes: composeIndexers(
35
35
  // $FlowFixMe[incompatible-call] `style` property confuses Flow.
36
- ReactNativeViewViewConfig.validAttributes,
36
+ PlatformBaseViewConfig.validAttributes,
37
37
  // $FlowFixMe[incompatible-call] `style` property confuses Flow.
38
38
  partialViewConfig.validAttributes,
39
39
  ),
@@ -0,0 +1,54 @@
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 Platform from '../Utilities/Platform';
12
+
13
+ const ignoredViewConfigProps = new WeakSet<{...}>();
14
+
15
+ /**
16
+ * Decorates ViewConfig values that are dynamically injected by the library,
17
+ * react-native-gesture-handler. (T45765076)
18
+ */
19
+ export function DynamicallyInjectedByGestureHandler<T: {...}>(object: T): T {
20
+ ignoredViewConfigProps.add(object);
21
+ return object;
22
+ }
23
+
24
+ /**
25
+ * On iOS, ViewManager event declarations generate {eventName}: true entries
26
+ * in ViewConfig valueAttributes. These entries aren't generated for Android.
27
+ * This annotation allows Static ViewConfigs to insert these entries into
28
+ * iOS but not Android.
29
+ *
30
+ * In the future, we want to remove this platform-inconsistency. We want
31
+ * to set RN$ViewConfigEventValidAttributesDisabled = true server-side,
32
+ * so that iOS does not generate validAttributes from event props in iOS RCTViewManager,
33
+ * since Android does not generate validAttributes from events props in Android ViewManager.
34
+ *
35
+ * TODO(T110872225): Remove this logic, after achieving platform-consistency
36
+ */
37
+ export function ConditionallyIgnoredEventHandlers<T: {[name: string]: true}>(
38
+ value: T,
39
+ ): T | void {
40
+ if (
41
+ Platform.OS === 'ios' &&
42
+ !(global.RN$ViewConfigEventValidAttributesDisabled === true)
43
+ ) {
44
+ return value;
45
+ }
46
+ return undefined;
47
+ }
48
+
49
+ export function isIgnored(value: mixed): boolean {
50
+ if (typeof value === 'object' && value != null) {
51
+ return ignoredViewConfigProps.has(value);
52
+ }
53
+ return false;
54
+ }
@@ -64,6 +64,12 @@ class FormData {
64
64
  this._parts.push([key, value]);
65
65
  }
66
66
 
67
+ getAll(key: string): Array<FormDataValue> {
68
+ return this._parts
69
+ .filter(([name]) => name === key)
70
+ .map(([, value]) => value);
71
+ }
72
+
67
73
  getParts(): Array<FormDataPart> {
68
74
  return this._parts.map(([name, value]) => {
69
75
  const contentDisposition = 'form-data; name="' + name + '"';
@@ -74,7 +80,7 @@ class FormData {
74
80
  // an object with a `uri` attribute. Optionally, it can also
75
81
  // have a `name` and `type` attribute to specify filename and
76
82
  // content type (cf. web Blob interface.)
77
- if (typeof value === 'object' && value) {
83
+ if (typeof value === 'object' && !Array.isArray(value) && value) {
78
84
  if (typeof value.name === 'string') {
79
85
  headers['content-disposition'] += '; filename="' + value.name + '"';
80
86
  }
@@ -60,7 +60,7 @@ class RCTNetworking extends NativeEventEmitter<$FlowFixMe> {
60
60
  ) {
61
61
  const body = convertRequestBody(data);
62
62
  if (body && body.formData) {
63
- body.formData = body.formData.map((part) => ({
63
+ body.formData = body.formData.map(part => ({
64
64
  ...part,
65
65
  headers: convertHeadersMapToArray(part.headers),
66
66
  }));