@office-iss/react-native-win32 0.76.2 → 0.77.0-preview.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/.eslintignore +1 -1
  2. package/.flowconfig +5 -1
  3. package/CHANGELOG.json +179 -53
  4. package/CHANGELOG.md +82 -28
  5. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
  6. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
  7. package/Libraries/Animated/AnimatedEvent.js +1 -1
  8. package/Libraries/Animated/AnimatedImplementation.js +2 -2
  9. package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
  10. package/Libraries/Animated/animations/Animation.js +60 -25
  11. package/Libraries/Animated/animations/DecayAnimation.js +26 -38
  12. package/Libraries/Animated/animations/SpringAnimation.js +33 -39
  13. package/Libraries/Animated/animations/TimingAnimation.js +34 -42
  14. package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
  15. package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
  16. package/Libraries/Animated/createAnimatedComponent.js +60 -33
  17. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  18. package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
  19. package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
  20. package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
  21. package/Libraries/Animated/nodes/AnimatedProps.js +104 -46
  22. package/Libraries/Animated/nodes/AnimatedStyle.js +116 -39
  23. package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
  24. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  25. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
  26. package/Libraries/Animated/useAnimatedProps.js +41 -35
  27. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  28. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
  29. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +82 -5
  30. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
  31. package/Libraries/Components/Button.js +9 -4
  32. package/Libraries/Components/Button.win32.js +12 -4
  33. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
  34. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
  35. package/Libraries/Components/Pressable/Pressable.js +4 -4
  36. package/Libraries/Components/Pressable/Pressable.win32.js +4 -4
  37. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
  38. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
  39. package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
  40. package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +4 -4
  41. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
  42. package/Libraries/Components/ScrollView/ScrollView.js +49 -88
  43. package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
  44. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
  45. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
  46. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
  47. package/Libraries/Components/Switch/Switch.js +8 -6
  48. package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
  49. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
  50. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
  51. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
  52. package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
  53. package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
  54. package/Libraries/Components/TextInput/TextInput.js +37 -13
  55. package/Libraries/Components/TextInput/TextInput.win32.js +40 -15
  56. package/Libraries/Components/TextInput/TextInputState.js +11 -13
  57. package/Libraries/Components/TextInput/TextInputState.win32.js +13 -16
  58. package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +3 -0
  59. package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
  60. package/Libraries/Components/Touchable/Position.js +7 -2
  61. package/Libraries/Components/Touchable/Touchable.js +4 -0
  62. package/Libraries/Components/Touchable/Touchable.win32.js +4 -0
  63. package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
  64. package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
  65. package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
  66. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
  67. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
  68. package/Libraries/Components/View/View.js +4 -4
  69. package/Libraries/Components/View/View.win32.js +4 -4
  70. package/Libraries/Components/View/ViewNativeComponent.js +6 -98
  71. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  72. package/Libraries/Components/View/ViewPropTypes.js +0 -3
  73. package/Libraries/Components/View/ViewPropTypes.win32.js +0 -3
  74. package/Libraries/Components/View/ViewWin32.js +1 -0
  75. package/Libraries/Core/ExceptionsManager.js +50 -29
  76. package/Libraries/Core/ReactNativeVersion.js +3 -3
  77. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
  78. package/Libraries/Core/setUpBatchedBridge.js +1 -10
  79. package/Libraries/Core/setUpDeveloperTools.js +1 -5
  80. package/Libraries/Core/setUpErrorHandling.js +20 -18
  81. package/Libraries/Core/setUpReactDevTools.js +107 -8
  82. package/Libraries/Core/setUpSegmentFetcher.js +1 -0
  83. package/Libraries/Core/setUpTimers.js +21 -18
  84. package/Libraries/Debugging/DebuggingOverlay.js +4 -5
  85. package/Libraries/Image/AssetSourceResolver.js +12 -1
  86. package/Libraries/Image/Image.android.js +1 -5
  87. package/Libraries/Image/Image.d.ts +20 -29
  88. package/Libraries/Image/Image.ios.js +0 -2
  89. package/Libraries/Image/Image.win32.js +0 -2
  90. package/Libraries/Image/ImageBackground.js +2 -5
  91. package/Libraries/Image/ImageProps.js +7 -6
  92. package/Libraries/Image/ImageResizeMode.d.ts +8 -1
  93. package/Libraries/Image/ImageResizeMode.js +4 -1
  94. package/Libraries/Image/ImageSource.d.ts +0 -2
  95. package/Libraries/Image/ImageSource.js +0 -2
  96. package/Libraries/Image/ImageTypes.flow.js +11 -9
  97. package/Libraries/Image/ImageUtils.js +6 -3
  98. package/Libraries/Image/ImageViewNativeComponent.js +5 -3
  99. package/Libraries/Inspector/Inspector.js +1 -0
  100. package/Libraries/Inspector/Inspector.win32.js +2 -1
  101. package/Libraries/Inspector/NetworkOverlay.js +4 -0
  102. package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
  103. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
  104. package/Libraries/Interaction/InteractionManager.js +6 -1
  105. package/Libraries/Interaction/InteractionManagerStub.js +176 -0
  106. package/Libraries/Interaction/TouchHistoryMath.js +22 -19
  107. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  108. package/Libraries/Lists/FlatList.d.ts +1 -2
  109. package/Libraries/Lists/FlatList.js +2 -2
  110. package/Libraries/Lists/SectionListModern.js +7 -7
  111. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
  112. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  113. package/Libraries/LogBox/Data/LogBoxData.js +3 -3
  114. package/Libraries/LogBox/LogBox.js +18 -5
  115. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  116. package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
  117. package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
  118. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
  119. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +6 -1
  120. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  121. package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +1 -1
  122. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
  123. package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
  124. package/Libraries/Modal/Modal.d.ts +12 -0
  125. package/Libraries/Modal/Modal.js +31 -4
  126. package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
  127. package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
  128. package/Libraries/NativeComponent/BaseViewConfig.win32.js +3 -11
  129. package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
  130. package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
  131. package/Libraries/Network/FormData.js +11 -3
  132. package/Libraries/Network/XHRInterceptor.js +63 -14
  133. package/Libraries/Network/XMLHttpRequest.js +26 -1
  134. package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
  135. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
  136. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  137. package/Libraries/Pressability/HoverState.js +2 -0
  138. package/Libraries/Pressability/HoverState.win32.js +2 -0
  139. package/Libraries/Pressability/Pressability.js +2 -3
  140. package/Libraries/Pressability/Pressability.win32.js +2 -3
  141. package/Libraries/Pressability/usePressability.js +4 -1
  142. package/Libraries/ReactNative/AppContainer.js +1 -1
  143. package/Libraries/ReactNative/AppRegistry.js +1 -11
  144. package/Libraries/ReactNative/DisplayMode.js +1 -1
  145. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
  146. package/Libraries/ReactNative/RendererImplementation.js +18 -17
  147. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
  148. package/Libraries/ReactNative/renderApplication.js +9 -8
  149. package/Libraries/ReactNative/requireNativeComponent.js +5 -2
  150. package/Libraries/Renderer/shims/ReactFabric.js +3 -3
  151. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  152. package/Libraries/Renderer/shims/ReactNative.js +3 -3
  153. package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
  154. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
  155. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  156. package/Libraries/StyleSheet/StyleSheet.js +7 -1
  157. package/Libraries/StyleSheet/StyleSheet.win32.js +7 -1
  158. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
  159. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
  160. package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
  161. package/Libraries/StyleSheet/processTransform.js +3 -34
  162. package/Libraries/Text/Text.js +248 -249
  163. package/Libraries/Text/Text.win32.js +282 -295
  164. package/Libraries/Text/TextNativeComponent.js +0 -1
  165. package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
  166. package/Libraries/Types/CoreEventTypes.d.ts +3 -10
  167. package/Libraries/Types/CoreEventTypes.js +4 -6
  168. package/Libraries/Types/CoreEventTypes.win32.js +4 -6
  169. package/Libraries/Utilities/Appearance.js +3 -1
  170. package/Libraries/Utilities/BackHandler.android.js +6 -18
  171. package/Libraries/Utilities/BackHandler.d.ts +0 -4
  172. package/Libraries/Utilities/BackHandler.ios.js +0 -7
  173. package/Libraries/Utilities/BackHandler.win32.js +6 -18
  174. package/Libraries/Utilities/FocusManager.win32.js +1 -1
  175. package/Libraries/Utilities/HMRClient.js +3 -4
  176. package/Libraries/Utilities/Platform.flow.js +2 -2
  177. package/Libraries/Utilities/Platform.flow.win32.js +3 -2
  178. package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
  179. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  180. package/Libraries/Utilities/useMergeRefs.js +26 -7
  181. package/Libraries/WebSocket/WebSocketEvent.js +4 -1
  182. package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
  183. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
  184. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  185. package/index.js +10 -3
  186. package/index.win32.js +10 -3
  187. package/jest/setup.js +36 -1
  188. package/overrides.json +37 -37
  189. package/package.json +20 -20
  190. package/src/private/animated/NativeAnimatedHelper.js +18 -16
  191. package/src/private/animated/NativeAnimatedHelper.win32.js +18 -15
  192. package/src/private/animated/useAnimatedPropsMemo.js +356 -0
  193. package/src/private/components/HScrollViewNativeComponents.js +1 -27
  194. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
  195. package/src/private/components/VScrollViewNativeComponents.js +2 -25
  196. package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
  197. package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
  198. package/src/private/debugging/ReactDevToolsSettingsManager.win32.js +20 -0
  199. package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
  200. package/src/private/devmenu/DevMenu.d.ts +20 -0
  201. package/src/private/devmenu/DevMenu.js +31 -0
  202. package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
  203. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
  204. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
  205. package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
  206. package/src/private/setup/setUpDOM.js +14 -6
  207. package/src/private/setup/setUpMutationObserver.js +5 -0
  208. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
  209. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
  210. package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
  211. package/src/private/specs/modules/NativeAccessibilityInfoWin32.js +9 -0
  212. package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
  213. package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
  214. package/src/private/specs/modules/NativeAppearance.js +4 -10
  215. package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
  216. package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
  217. package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
  218. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
  219. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
  220. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
  221. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
  222. package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
  223. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  224. package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
  225. package/src/private/webapis/performance/EventTiming.js +13 -8
  226. package/src/private/webapis/performance/Performance.js +66 -73
  227. package/src/private/webapis/performance/PerformanceEntry.js +2 -5
  228. package/src/private/webapis/performance/PerformanceObserver.js +65 -164
  229. package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
  230. package/src/private/webapis/performance/UserTiming.js +11 -7
  231. package/src/private/webapis/performance/Utilities.js +18 -0
  232. package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
  233. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
  234. package/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  235. package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  236. package/types/index.d.ts +1 -1
  237. package/types/public/ReactNativeTypes.d.ts +4 -8
  238. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
  239. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
  240. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
  241. package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +0 -35
  242. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
  243. package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
  244. package/src/private/components/useSyncOnScroll.js +0 -48
  245. package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
  246. package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
  247. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
  248. package/types/experimental.d.ts +0 -59
  249. /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
@@ -59,7 +59,9 @@ function LogBoxInspectorCodeFrame(props: Props): React.Node {
59
59
  <LogBoxInspectorSection heading="Source" action={<AppInfo />}>
60
60
  <View style={styles.box}>
61
61
  <View style={styles.frame}>
62
- <ScrollView horizontal>
62
+ <ScrollView
63
+ horizontal
64
+ contentContainerStyle={styles.contentContainer}>
63
65
  <AnsiHighlight style={styles.content} text={codeFrame.content} />
64
66
  </ScrollView>
65
67
  </View>
@@ -138,6 +140,9 @@ const styles = StyleSheet.create({
138
140
  paddingTop: 10,
139
141
  paddingBottom: 10,
140
142
  },
143
+ contentContainer: {
144
+ minWidth: '100%',
145
+ },
141
146
  content: {
142
147
  color: LogBoxStyle.getTextColor(1),
143
148
  fontSize: 12,
@@ -27,7 +27,7 @@ type Props = $ReadOnly<{
27
27
  level: LogLevel,
28
28
  }>;
29
29
 
30
- const LogBoxInspectorHeaderSafeArea: React.AbstractComponent<ViewProps> =
30
+ const LogBoxInspectorHeaderSafeArea: React.ComponentType<ViewProps> =
31
31
  Platform.OS === 'android' ? View : SafeAreaView;
32
32
 
33
33
  export default function LogBoxInspectorHeader(props: Props): React.Node {
@@ -29,7 +29,7 @@ type Props = $ReadOnly<{
29
29
  level: LogLevel,
30
30
  }>;
31
31
 
32
- const LogBoxInspectorHeaderSafeArea: React.AbstractComponent<ViewProps> =
32
+ const LogBoxInspectorHeaderSafeArea: React.ComponentType<ViewProps> =
33
33
  Platform.OS === 'android' ? View : SafeAreaView;
34
34
 
35
35
  export default function LogBoxInspectorHeader(props: Props): React.Node {
@@ -138,7 +138,7 @@ function StackFrameList(props: {
138
138
  }
139
139
 
140
140
  function StackFrameFooter(
141
- props: $TEMPORARY$object<{message: string, onPress: () => void}>,
141
+ props: $ReadOnly<{message: string, onPress: () => void}>,
142
142
  ) {
143
143
  return (
144
144
  <View style={stackStyles.collapseContainer}>
@@ -59,7 +59,7 @@ function TappableLinks(props: {
59
59
 
60
60
  // URLs were detected. Construct array of Text nodes.
61
61
 
62
- let fragments: Array<React.Node> = [];
62
+ const fragments: Array<React.Node> = [];
63
63
  let indexCounter = 0;
64
64
  let startIndex = 0;
65
65
 
@@ -115,7 +115,7 @@ function LogBoxMessage(props: Props): React.Node {
115
115
  const elements = [];
116
116
  let length = 0;
117
117
  const createUnderLength = (
118
- key: string | $TEMPORARY$string<'-1'>,
118
+ key: string,
119
119
  message: string,
120
120
  style: void | TextStyleProp,
121
121
  ) => {
@@ -10,6 +10,7 @@
10
10
  import type * as React from 'react';
11
11
  import {ViewProps} from '../Components/View/ViewPropTypes';
12
12
  import {NativeSyntheticEvent} from '../Types/CoreEventTypes';
13
+ import {ColorValue} from '../StyleSheet/StyleSheet';
13
14
 
14
15
  export interface ModalBaseProps {
15
16
  /**
@@ -43,6 +44,12 @@ export interface ModalBaseProps {
43
44
  * The `onShow` prop allows passing a function that will be called once the modal has been shown.
44
45
  */
45
46
  onShow?: ((event: NativeSyntheticEvent<any>) => void) | undefined;
47
+
48
+ /**
49
+ * The `backdropColor` props sets the background color of the modal's container.
50
+ * Defaults to `white` if not provided and transparent is `false`. Ignored if `transparent` is `true`.
51
+ */
52
+ backdropColor?: ColorValue | undefined;
46
53
  }
47
54
 
48
55
  export interface ModalPropsIOS {
@@ -94,6 +101,11 @@ export interface ModalPropsAndroid {
94
101
  * Determines whether your modal should go under the system statusbar.
95
102
  */
96
103
  statusBarTranslucent?: boolean | undefined;
104
+
105
+ /**
106
+ * Determines whether your modal should go under the system navigationbar.
107
+ */
108
+ navigationBarTranslucent?: boolean | undefined;
97
109
  }
98
110
 
99
111
  export type ModalProps = ModalBaseProps &
@@ -95,6 +95,14 @@ export type Props = $ReadOnly<{|
95
95
  */
96
96
  statusBarTranslucent?: ?boolean,
97
97
 
98
+ /**
99
+ * The `navigationBarTranslucent` prop determines whether your modal should go under
100
+ * the system navigationbar.
101
+ *
102
+ * See https://reactnative.dev/docs/modal.html#navigationbartranslucent-android
103
+ */
104
+ navigationBarTranslucent?: ?boolean,
105
+
98
106
  /**
99
107
  * The `hardwareAccelerated` prop controls whether to force hardware
100
108
  * acceleration for the underlying window.
@@ -157,6 +165,12 @@ export type Props = $ReadOnly<{|
157
165
  * See https://reactnative.dev/docs/modal#onorientationchange
158
166
  */
159
167
  onOrientationChange?: ?DirectEventHandler<OrientationChangeEvent>,
168
+
169
+ /**
170
+ * The `backdropColor` props sets the background color of the modal's container.
171
+ * Defaults to `white` if not provided and transparent is `false`. Ignored if `transparent` is `true`.
172
+ */
173
+ backdropColor?: ?string,
160
174
  |}>;
161
175
 
162
176
  function confirmProps(props: Props) {
@@ -170,6 +184,14 @@ function confirmProps(props: Props) {
170
184
  `Modal with '${props.presentationStyle}' presentation style and 'transparent' value is not supported.`,
171
185
  );
172
186
  }
187
+ if (
188
+ props.navigationBarTranslucent === true &&
189
+ props.statusBarTranslucent !== true
190
+ ) {
191
+ console.warn(
192
+ 'Modal with translucent navigation bar and without translucent status bar is not supported.',
193
+ );
194
+ }
173
195
  }
174
196
  }
175
197
 
@@ -218,6 +240,9 @@ class Modal extends React.Component<Props, State> {
218
240
  }
219
241
 
220
242
  componentWillUnmount() {
243
+ if (Platform.OS === 'ios') {
244
+ this.setState({isRendered: false});
245
+ }
221
246
  if (this._eventSubscription) {
222
247
  this._eventSubscription.remove();
223
248
  }
@@ -249,7 +274,9 @@ class Modal extends React.Component<Props, State> {
249
274
 
250
275
  const containerStyles = {
251
276
  backgroundColor:
252
- this.props.transparent === true ? 'transparent' : 'white',
277
+ this.props.transparent === true
278
+ ? 'transparent'
279
+ : this.props.backdropColor ?? 'white',
253
280
  };
254
281
 
255
282
  let animationType = this.props.animationType || 'none';
@@ -290,6 +317,7 @@ class Modal extends React.Component<Props, State> {
290
317
  onDismiss={onDismiss}
291
318
  visible={this.props.visible}
292
319
  statusBarTranslucent={this.props.statusBarTranslucent}
320
+ navigationBarTranslucent={this.props.navigationBarTranslucent}
293
321
  identifier={this._identifier}
294
322
  style={styles.modal}
295
323
  // $FlowFixMe[method-unbinding] added when improving typing for this parameters
@@ -331,8 +359,7 @@ const styles = StyleSheet.create({
331
359
  },
332
360
  });
333
361
 
334
- const ExportedModal: React.AbstractComponent<
335
- React.ElementConfig<typeof Modal>,
336
- > = ModalInjection.unstable_Modal ?? Modal;
362
+ const ExportedModal: React.ComponentType<React.ElementConfig<typeof Modal>> =
363
+ ModalInjection.unstable_Modal ?? Modal;
337
364
 
338
365
  module.exports = ExportedModal;
@@ -175,7 +175,7 @@ const validAttributesForNonEventProps = {
175
175
  filter: {
176
176
  process: require('../StyleSheet/processFilter').default,
177
177
  },
178
- experimental_mixBlendMode: true,
178
+ mixBlendMode: true,
179
179
  isolation: true,
180
180
  opacity: true,
181
181
  elevation: true,
@@ -227,6 +227,7 @@ const validAttributesForNonEventProps = {
227
227
  justifyContent: true,
228
228
  overflow: true,
229
229
  display: true,
230
+ boxSizing: true,
230
231
 
231
232
  margin: true,
232
233
  marginBlock: true,
@@ -268,6 +269,11 @@ const validAttributesForNonEventProps = {
268
269
  borderLeftWidth: true,
269
270
  borderRightWidth: true,
270
271
 
272
+ outlineColor: {process: require('../StyleSheet/processColor').default},
273
+ outlineOffset: true,
274
+ outlineStyle: true,
275
+ outlineWidth: true,
276
+
271
277
  start: true,
272
278
  end: true,
273
279
  left: true,
@@ -288,6 +294,71 @@ const validAttributesForNonEventProps = {
288
294
  style: ReactNativeStyleAttributes,
289
295
 
290
296
  experimental_layoutConformance: true,
297
+
298
+ // ReactClippingViewManager @ReactProps
299
+ removeClippedSubviews: true,
300
+
301
+ // ReactViewManager @ReactProps
302
+ accessible: true,
303
+ hasTVPreferredFocus: true,
304
+ nextFocusDown: true,
305
+ nextFocusForward: true,
306
+ nextFocusLeft: true,
307
+ nextFocusRight: true,
308
+ nextFocusUp: true,
309
+
310
+ borderRadius: true,
311
+ borderTopLeftRadius: true,
312
+ borderTopRightRadius: true,
313
+ borderBottomRightRadius: true,
314
+ borderBottomLeftRadius: true,
315
+ borderTopStartRadius: true,
316
+ borderTopEndRadius: true,
317
+ borderBottomStartRadius: true,
318
+ borderBottomEndRadius: true,
319
+ borderEndEndRadius: true,
320
+ borderEndStartRadius: true,
321
+ borderStartEndRadius: true,
322
+ borderStartStartRadius: true,
323
+ borderStyle: true,
324
+ hitSlop: true,
325
+ pointerEvents: true,
326
+ nativeBackgroundAndroid: true,
327
+ nativeForegroundAndroid: true,
328
+ needsOffscreenAlphaCompositing: true,
329
+
330
+ borderColor: {
331
+ process: require('../StyleSheet/processColor').default,
332
+ },
333
+ borderLeftColor: {
334
+ process: require('../StyleSheet/processColor').default,
335
+ },
336
+ borderRightColor: {
337
+ process: require('../StyleSheet/processColor').default,
338
+ },
339
+ borderTopColor: {
340
+ process: require('../StyleSheet/processColor').default,
341
+ },
342
+ borderBottomColor: {
343
+ process: require('../StyleSheet/processColor').default,
344
+ },
345
+ borderStartColor: {
346
+ process: require('../StyleSheet/processColor').default,
347
+ },
348
+ borderEndColor: {
349
+ process: require('../StyleSheet/processColor').default,
350
+ },
351
+ borderBlockColor: {
352
+ process: require('../StyleSheet/processColor').default,
353
+ },
354
+ borderBlockEndColor: {
355
+ process: require('../StyleSheet/processColor').default,
356
+ },
357
+ borderBlockStartColor: {
358
+ process: require('../StyleSheet/processColor').default,
359
+ },
360
+ focusable: true,
361
+ backfaceVisibility: true,
291
362
  };
292
363
 
293
364
  // Props for bubbling and direct events
@@ -231,7 +231,7 @@ const validAttributesForNonEventProps = {
231
231
  boxShadow: {
232
232
  process: require('../StyleSheet/processBoxShadow').default,
233
233
  },
234
- experimental_mixBlendMode: true,
234
+ mixBlendMode: true,
235
235
  isolation: true,
236
236
 
237
237
  borderTopWidth: true,
@@ -348,6 +348,7 @@ const validAttributesForNonEventProps = {
348
348
  alignContent: true,
349
349
  position: true,
350
350
  aspectRatio: true,
351
+ boxSizing: true,
351
352
 
352
353
  // Also declared as ViewProps
353
354
  // overflow: true,
@@ -198,7 +198,6 @@ const validAttributesForNonEventProps = {
198
198
  testID: true,
199
199
  backgroundColor: {process: require('../StyleSheet/processColor').default},
200
200
  backfaceVisibility: true,
201
- cursor: true,
202
201
  opacity: true,
203
202
  shadowColor: {process: require('../StyleSheet/processColor').default},
204
203
  shadowOffset: {diff: require('../Utilities/differ/sizesDiffer')},
@@ -217,21 +216,19 @@ const validAttributesForNonEventProps = {
217
216
  role: true,
218
217
  borderRadius: true,
219
218
  borderColor: {process: require('../StyleSheet/processColor').default},
220
- borderBlockColor: {process: require('../StyleSheet/processColor').default},
221
219
  borderCurve: true,
222
220
  borderWidth: true,
223
- borderBlockWidth: true,
224
221
  borderStyle: true,
225
222
  hitSlop: {diff: require('../Utilities/differ/insetsDiffer')},
226
223
  collapsable: true,
227
224
  collapsableChildren: true,
228
- filter: {
225
+ experimental_filter: {
229
226
  process: require('../StyleSheet/processFilter').default,
230
227
  },
231
228
  boxShadow: {
232
229
  process: require('../StyleSheet/processBoxShadow').default,
233
230
  },
234
- experimental_mixBlendMode: true,
231
+ mixBlendMode: true,
235
232
  isolation: true,
236
233
 
237
234
  borderTopWidth: true,
@@ -243,15 +240,9 @@ const validAttributesForNonEventProps = {
243
240
  borderLeftWidth: true,
244
241
  borderLeftColor: {process: require('../StyleSheet/processColor').default},
245
242
  borderStartWidth: true,
246
- borderBlockStartWidth: true,
247
243
  borderStartColor: {process: require('../StyleSheet/processColor').default},
248
- borderBlockStartColor: {
249
- process: require('../StyleSheet/processColor').default,
250
- },
251
244
  borderEndWidth: true,
252
- borderBlockEndWidth: true,
253
245
  borderEndColor: {process: require('../StyleSheet/processColor').default},
254
- borderBlockEndColor: {process: require('../StyleSheet/processColor').default},
255
246
 
256
247
  borderTopLeftRadius: true,
257
248
  borderTopRightRadius: true,
@@ -348,6 +339,7 @@ const validAttributesForNonEventProps = {
348
339
  alignContent: true,
349
340
  position: true,
350
341
  aspectRatio: true,
342
+ boxSizing: true,
351
343
 
352
344
  // Also declared as ViewProps
353
345
  // overflow: true,
@@ -48,7 +48,7 @@ export function setRuntimeConfigProvider(
48
48
  * The supplied `viewConfigProvider` may or may not be invoked and utilized,
49
49
  * depending on how `setRuntimeConfigProvider` is configured.
50
50
  */
51
- export function get<Config>(
51
+ export function get<Config: {...}>(
52
52
  name: string,
53
53
  viewConfigProvider: () => PartialViewConfig,
54
54
  ): HostComponent<Config> {
@@ -121,10 +121,10 @@ export function get<Config>(
121
121
  * that the return value of this is not `HostComponent` because the returned
122
122
  * component instance is not guaranteed to have native methods.
123
123
  */
124
- export function getWithFallback_DEPRECATED<Config>(
124
+ export function getWithFallback_DEPRECATED<Config: {...}>(
125
125
  name: string,
126
126
  viewConfigProvider: () => PartialViewConfig,
127
- ): React.AbstractComponent<Config> {
127
+ ): React.ComponentType<Config> {
128
128
  if (getRuntimeConfig == null) {
129
129
  // `getRuntimeConfig == null` when static view configs are disabled
130
130
  // If `setRuntimeConfigProvider` is not configured, use native reflection.
@@ -9,7 +9,6 @@
9
9
  */
10
10
 
11
11
  import {type ViewConfig} from '../Renderer/shims/ReactNativeTypes';
12
- import {isIgnored} from './ViewConfigIgnore';
13
12
 
14
13
  export type Difference =
15
14
  | {
@@ -28,6 +28,15 @@ type FormDataPart =
28
28
  ...
29
29
  };
30
30
 
31
+ /**
32
+ * Encode a FormData filename compliant with RFC 2183
33
+ *
34
+ * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition#directives
35
+ */
36
+ function encodeFilename(filename: string): string {
37
+ return encodeURIComponent(filename.replace(/\//g, '_'));
38
+ }
39
+
31
40
  /**
32
41
  * Polyfill for XMLHttpRequest2 FormData API, allowing multipart POST requests
33
42
  * with mixed data (string, native files) to be submitted via XMLHttpRequest.
@@ -82,9 +91,8 @@ class FormData {
82
91
  // content type (cf. web Blob interface.)
83
92
  if (typeof value === 'object' && !Array.isArray(value) && value) {
84
93
  if (typeof value.name === 'string') {
85
- headers['content-disposition'] += `; filename="${
86
- value.name
87
- }"; filename*=utf-8''${encodeURI(value.name)}`;
94
+ headers['content-disposition'] +=
95
+ `; filename="${encodeFilename(value.name)}"`;
88
96
  }
89
97
  if (typeof value.type === 'string') {
90
98
  headers['content-type'] = value.type;
@@ -5,20 +5,57 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  * @format
8
+ * @flow strict-local
8
9
  */
9
10
 
10
11
  'use strict';
11
12
 
12
13
  const XMLHttpRequest = require('./XMLHttpRequest');
14
+ // $FlowFixMe[method-unbinding]
13
15
  const originalXHROpen = XMLHttpRequest.prototype.open;
16
+ // $FlowFixMe[method-unbinding]
14
17
  const originalXHRSend = XMLHttpRequest.prototype.send;
18
+ // $FlowFixMe[method-unbinding]
15
19
  const originalXHRSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;
16
20
 
17
- let openCallback;
18
- let sendCallback;
19
- let requestHeaderCallback;
20
- let headerReceivedCallback;
21
- let responseCallback;
21
+ type XHRInterceptorOpenCallback = (
22
+ method: string,
23
+ url: string,
24
+ request: XMLHttpRequest,
25
+ ) => void;
26
+
27
+ type XHRInterceptorSendCallback = (
28
+ data: string,
29
+ request: XMLHttpRequest,
30
+ ) => void;
31
+
32
+ type XHRInterceptorRequestHeaderCallback = (
33
+ header: string,
34
+ value: string,
35
+ request: XMLHttpRequest,
36
+ ) => void;
37
+
38
+ type XHRInterceptorHeaderReceivedCallback = (
39
+ responseContentType: string | void,
40
+ responseSize: number | void,
41
+ allHeaders: string,
42
+ request: XMLHttpRequest,
43
+ ) => void;
44
+
45
+ type XHRInterceptorResponseCallback = (
46
+ status: number,
47
+ timeout: number,
48
+ response: string,
49
+ responseURL: string,
50
+ responseType: string,
51
+ request: XMLHttpRequest,
52
+ ) => void;
53
+
54
+ let openCallback: XHRInterceptorOpenCallback | null;
55
+ let sendCallback: XHRInterceptorSendCallback | null;
56
+ let requestHeaderCallback: XHRInterceptorRequestHeaderCallback | null;
57
+ let headerReceivedCallback: XHRInterceptorHeaderReceivedCallback | null;
58
+ let responseCallback: XHRInterceptorResponseCallback | null;
22
59
 
23
60
  let isInterceptorEnabled = false;
24
61
 
@@ -33,39 +70,39 @@ const XHRInterceptor = {
33
70
  /**
34
71
  * Invoked before XMLHttpRequest.open(...) is called.
35
72
  */
36
- setOpenCallback(callback) {
73
+ setOpenCallback(callback: XHRInterceptorOpenCallback) {
37
74
  openCallback = callback;
38
75
  },
39
76
 
40
77
  /**
41
78
  * Invoked before XMLHttpRequest.send(...) is called.
42
79
  */
43
- setSendCallback(callback) {
80
+ setSendCallback(callback: XHRInterceptorSendCallback) {
44
81
  sendCallback = callback;
45
82
  },
46
83
 
47
84
  /**
48
85
  * Invoked after xhr's readyState becomes xhr.HEADERS_RECEIVED.
49
86
  */
50
- setHeaderReceivedCallback(callback) {
87
+ setHeaderReceivedCallback(callback: XHRInterceptorHeaderReceivedCallback) {
51
88
  headerReceivedCallback = callback;
52
89
  },
53
90
 
54
91
  /**
55
92
  * Invoked after xhr's readyState becomes xhr.DONE.
56
93
  */
57
- setResponseCallback(callback) {
94
+ setResponseCallback(callback: XHRInterceptorResponseCallback) {
58
95
  responseCallback = callback;
59
96
  },
60
97
 
61
98
  /**
62
99
  * Invoked before XMLHttpRequest.setRequestHeader(...) is called.
63
100
  */
64
- setRequestHeaderCallback(callback) {
101
+ setRequestHeaderCallback(callback: XHRInterceptorRequestHeaderCallback) {
65
102
  requestHeaderCallback = callback;
66
103
  },
67
104
 
68
- isInterceptorEnabled() {
105
+ isInterceptorEnabled(): boolean {
69
106
  return isInterceptorEnabled;
70
107
  },
71
108
 
@@ -75,7 +112,9 @@ const XHRInterceptor = {
75
112
  }
76
113
  // Override `open` method for all XHR requests to intercept the request
77
114
  // method and url, then pass them through the `openCallback`.
78
- XMLHttpRequest.prototype.open = function (method, url) {
115
+ // $FlowFixMe[cannot-write]
116
+ // $FlowFixMe[missing-this-annot]
117
+ XMLHttpRequest.prototype.open = function (method: string, url: string) {
79
118
  if (openCallback) {
80
119
  openCallback(method, url, this);
81
120
  }
@@ -84,7 +123,12 @@ const XHRInterceptor = {
84
123
 
85
124
  // Override `setRequestHeader` method for all XHR requests to intercept
86
125
  // the request headers, then pass them through the `requestHeaderCallback`.
87
- XMLHttpRequest.prototype.setRequestHeader = function (header, value) {
126
+ // $FlowFixMe[cannot-write]
127
+ // $FlowFixMe[missing-this-annot]
128
+ XMLHttpRequest.prototype.setRequestHeader = function (
129
+ header: string,
130
+ value: string,
131
+ ) {
88
132
  if (requestHeaderCallback) {
89
133
  requestHeaderCallback(header, value, this);
90
134
  }
@@ -93,7 +137,9 @@ const XHRInterceptor = {
93
137
 
94
138
  // Override `send` method of all XHR requests to intercept the data sent,
95
139
  // register listeners to intercept the response, and invoke the callbacks.
96
- XMLHttpRequest.prototype.send = function (data) {
140
+ // $FlowFixMe[cannot-write]
141
+ // $FlowFixMe[missing-this-annot]
142
+ XMLHttpRequest.prototype.send = function (data: string) {
97
143
  if (sendCallback) {
98
144
  sendCallback(data, this);
99
145
  }
@@ -151,8 +197,11 @@ const XHRInterceptor = {
151
197
  return;
152
198
  }
153
199
  isInterceptorEnabled = false;
200
+ // $FlowFixMe[cannot-write]
154
201
  XMLHttpRequest.prototype.send = originalXHRSend;
202
+ // $FlowFixMe[cannot-write]
155
203
  XMLHttpRequest.prototype.open = originalXHROpen;
204
+ // $FlowFixMe[cannot-write]
156
205
  XMLHttpRequest.prototype.setRequestHeader = originalXHRSetRequestHeader;
157
206
  responseCallback = null;
158
207
  openCallback = null;
@@ -22,6 +22,7 @@ const base64 = require('base64-js');
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
+ const LABEL_FOR_MISSING_URL_FOR_PROFILING = 'Unknown URL';
25
26
 
26
27
  export type NativeResponseType = 'base64' | 'blob' | 'text';
27
28
  export type ResponseType =
@@ -101,6 +102,7 @@ class XMLHttpRequest extends (EventTarget(...XHR_EVENTS): typeof EventTarget) {
101
102
  static DONE: number = DONE;
102
103
 
103
104
  static _interceptor: ?XHRInterceptor = null;
105
+ static _profiling: boolean = false;
104
106
 
105
107
  UNSENT: number = UNSENT;
106
108
  OPENED: number = OPENED;
@@ -144,12 +146,17 @@ class XMLHttpRequest extends (EventTarget(...XHR_EVENTS): typeof EventTarget) {
144
146
  _timedOut: boolean = false;
145
147
  _trackingName: string = 'unknown';
146
148
  _incrementalEvents: boolean = false;
149
+ _startTime: ?number = null;
147
150
  _performanceLogger: IPerformanceLogger = GlobalPerformanceLogger;
148
151
 
149
152
  static setInterceptor(interceptor: ?XHRInterceptor) {
150
153
  XMLHttpRequest._interceptor = interceptor;
151
154
  }
152
155
 
156
+ static enableProfiling(enableProfiling: boolean): void {
157
+ XMLHttpRequest._profiling = enableProfiling;
158
+ }
159
+
153
160
  constructor() {
154
161
  super();
155
162
  this._reset();
@@ -356,6 +363,11 @@ class XMLHttpRequest extends (EventTarget(...XHR_EVENTS): typeof EventTarget) {
356
363
  this._response += responseText;
357
364
  }
358
365
 
366
+ if (XMLHttpRequest._profiling) {
367
+ performance.mark(
368
+ 'Track:XMLHttpRequest:Incremental Data: ' + this._getMeasureURL(),
369
+ );
370
+ }
359
371
  XMLHttpRequest._interceptor &&
360
372
  XMLHttpRequest._interceptor.dataReceived(requestId, responseText);
361
373
 
@@ -398,7 +410,13 @@ class XMLHttpRequest extends (EventTarget(...XHR_EVENTS): typeof EventTarget) {
398
410
  this._clearSubscriptions();
399
411
  this._requestId = null;
400
412
  this.setReadyState(this.DONE);
401
-
413
+ if (XMLHttpRequest._profiling && this._startTime != null) {
414
+ const start = this._startTime;
415
+ performance.measure('Track:XMLHttpRequest:' + this._getMeasureURL(), {
416
+ start,
417
+ end: performance.now(),
418
+ });
419
+ }
402
420
  if (error) {
403
421
  XMLHttpRequest._interceptor &&
404
422
  XMLHttpRequest._interceptor.loadingFailed(requestId, error);
@@ -572,6 +590,7 @@ class XMLHttpRequest extends (EventTarget(...XHR_EVENTS): typeof EventTarget) {
572
590
  this._trackingName !== 'unknown' ? this._trackingName : this._url;
573
591
  this._perfKey = 'network_XMLHttpRequest_' + String(friendlyName);
574
592
  this._performanceLogger.startTimespan(this._perfKey);
593
+ this._startTime = performance.now();
575
594
  invariant(
576
595
  this._method,
577
596
  'XMLHttpRequest method needs to be defined (%s).',
@@ -668,6 +687,12 @@ class XMLHttpRequest extends (EventTarget(...XHR_EVENTS): typeof EventTarget) {
668
687
  }
669
688
  super.addEventListener(type, listener);
670
689
  }
690
+
691
+ _getMeasureURL(): string {
692
+ return (
693
+ this._trackingName ?? this._url ?? LABEL_FOR_MISSING_URL_FOR_PROFILING
694
+ );
695
+ }
671
696
  }
672
697
 
673
698
  module.exports = XMLHttpRequest;
@@ -40,8 +40,8 @@ const HermesBadge = (): Node => {
40
40
  const styles = StyleSheet.create({
41
41
  badge: {
42
42
  position: 'absolute',
43
- top: 8,
44
43
  right: 12,
44
+ bottom: 8,
45
45
  },
46
46
  badgeText: {
47
47
  fontSize: 14,