@office-iss/react-native-win32 0.76.2 → 0.77.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 (248) hide show
  1. package/.eslintignore +1 -1
  2. package/.flowconfig +5 -1
  3. package/CHANGELOG.json +164 -53
  4. package/CHANGELOG.md +74 -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 +96 -46
  22. package/Libraries/Animated/nodes/AnimatedStyle.js +108 -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/XHRInterceptor.js +63 -14
  132. package/Libraries/Network/XMLHttpRequest.js +26 -1
  133. package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
  134. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
  135. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  136. package/Libraries/Pressability/HoverState.js +2 -0
  137. package/Libraries/Pressability/HoverState.win32.js +2 -0
  138. package/Libraries/Pressability/Pressability.js +2 -3
  139. package/Libraries/Pressability/Pressability.win32.js +2 -3
  140. package/Libraries/Pressability/usePressability.js +4 -1
  141. package/Libraries/ReactNative/AppContainer.js +1 -1
  142. package/Libraries/ReactNative/AppRegistry.js +1 -11
  143. package/Libraries/ReactNative/DisplayMode.js +1 -1
  144. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
  145. package/Libraries/ReactNative/RendererImplementation.js +18 -17
  146. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
  147. package/Libraries/ReactNative/renderApplication.js +9 -8
  148. package/Libraries/ReactNative/requireNativeComponent.js +5 -2
  149. package/Libraries/Renderer/shims/ReactFabric.js +3 -3
  150. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  151. package/Libraries/Renderer/shims/ReactNative.js +3 -3
  152. package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
  153. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
  154. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  155. package/Libraries/StyleSheet/StyleSheet.js +7 -1
  156. package/Libraries/StyleSheet/StyleSheet.win32.js +7 -1
  157. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
  158. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
  159. package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
  160. package/Libraries/StyleSheet/processTransform.js +3 -34
  161. package/Libraries/Text/Text.js +248 -249
  162. package/Libraries/Text/Text.win32.js +282 -295
  163. package/Libraries/Text/TextNativeComponent.js +0 -1
  164. package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
  165. package/Libraries/Types/CoreEventTypes.d.ts +3 -10
  166. package/Libraries/Types/CoreEventTypes.js +4 -6
  167. package/Libraries/Types/CoreEventTypes.win32.js +4 -6
  168. package/Libraries/Utilities/Appearance.js +3 -1
  169. package/Libraries/Utilities/BackHandler.android.js +6 -18
  170. package/Libraries/Utilities/BackHandler.d.ts +0 -4
  171. package/Libraries/Utilities/BackHandler.ios.js +0 -7
  172. package/Libraries/Utilities/BackHandler.win32.js +6 -18
  173. package/Libraries/Utilities/FocusManager.win32.js +1 -1
  174. package/Libraries/Utilities/HMRClient.js +3 -4
  175. package/Libraries/Utilities/Platform.flow.js +2 -2
  176. package/Libraries/Utilities/Platform.flow.win32.js +3 -2
  177. package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
  178. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  179. package/Libraries/Utilities/useMergeRefs.js +26 -7
  180. package/Libraries/WebSocket/WebSocketEvent.js +4 -1
  181. package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
  182. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
  183. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  184. package/index.js +10 -3
  185. package/index.win32.js +10 -3
  186. package/jest/setup.js +36 -1
  187. package/overrides.json +37 -37
  188. package/package.json +20 -20
  189. package/src/private/animated/NativeAnimatedHelper.js +18 -16
  190. package/src/private/animated/NativeAnimatedHelper.win32.js +18 -15
  191. package/src/private/animated/useAnimatedPropsMemo.js +348 -0
  192. package/src/private/components/HScrollViewNativeComponents.js +1 -27
  193. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
  194. package/src/private/components/VScrollViewNativeComponents.js +2 -25
  195. package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
  196. package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
  197. package/src/private/debugging/ReactDevToolsSettingsManager.win32.js +20 -0
  198. package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
  199. package/src/private/devmenu/DevMenu.d.ts +20 -0
  200. package/src/private/devmenu/DevMenu.js +31 -0
  201. package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
  202. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
  203. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
  204. package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
  205. package/src/private/setup/setUpDOM.js +14 -6
  206. package/src/private/setup/setUpMutationObserver.js +5 -0
  207. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
  208. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
  209. package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
  210. package/src/private/specs/modules/NativeAccessibilityInfoWin32.js +9 -0
  211. package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
  212. package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
  213. package/src/private/specs/modules/NativeAppearance.js +4 -10
  214. package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
  215. package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
  216. package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
  217. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
  218. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
  219. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
  220. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
  221. package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
  222. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  223. package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
  224. package/src/private/webapis/performance/EventTiming.js +13 -8
  225. package/src/private/webapis/performance/Performance.js +66 -73
  226. package/src/private/webapis/performance/PerformanceEntry.js +2 -5
  227. package/src/private/webapis/performance/PerformanceObserver.js +65 -164
  228. package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
  229. package/src/private/webapis/performance/UserTiming.js +11 -7
  230. package/src/private/webapis/performance/Utilities.js +18 -0
  231. package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
  232. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
  233. package/src-win/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  234. package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  235. package/types/index.d.ts +1 -1
  236. package/types/public/ReactNativeTypes.d.ts +4 -8
  237. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
  238. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
  239. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
  240. package/Libraries/DevToolsSettings/DevToolsSettingsManager.win32.js +0 -35
  241. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
  242. package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
  243. package/src/private/components/useSyncOnScroll.js +0 -48
  244. package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
  245. package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
  246. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
  247. package/types/experimental.d.ts +0 -59
  248. /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
@@ -37,7 +37,7 @@ type Props = $ReadOnly<{|
37
37
  activeOpacity?: ?number,
38
38
  style?: ?ViewStyleProp,
39
39
 
40
- hostRef?: ?React.Ref<typeof Animated.View>,
40
+ hostRef?: ?React.RefSetter<React.ElementRef<typeof Animated.View>>,
41
41
  |}>;
42
42
 
43
43
  type State = $ReadOnly<{|
@@ -291,6 +291,7 @@ class TouchableOpacity extends React.Component<Props, State> {
291
291
  this.props.onPress !== undefined &&
292
292
  !this.props.disabled
293
293
  }
294
+ // $FlowFixMe[prop-missing]
294
295
  ref={this.props.hostRef}
295
296
  {...eventHandlersWithoutBlurAndFocus}>
296
297
  {this.props.children}
@@ -326,10 +327,10 @@ class TouchableOpacity extends React.Component<Props, State> {
326
327
  }
327
328
  }
328
329
 
329
- const Touchable: React.AbstractComponent<
330
- Props,
331
- React.ElementRef<typeof Animated.View>,
332
- > = React.forwardRef((props, ref) => (
330
+ const Touchable: component(
331
+ ref: React.RefSetter<React.ElementRef<typeof Animated.View>>,
332
+ ...props: Props
333
+ ) = React.forwardRef((props, ref) => (
333
334
  <TouchableOpacity {...props} hostRef={ref} />
334
335
  ));
335
336
 
@@ -195,8 +195,7 @@ module.exports = function TouchableWithoutFeedback(props: Props): React.Node {
195
195
 
196
196
  // BACKWARD-COMPATIBILITY: Focus and blur events were never supported before
197
197
  // adopting `Pressability`, so preserve that behavior.
198
- const {onBlur, onFocus, ...eventHandlersWithoutBlurAndFocus} =
199
- eventHandlers || {};
198
+ const {onBlur, onFocus, ...eventHandlersWithoutBlurAndFocus} = eventHandlers;
200
199
 
201
200
  const elementProps: {[string]: mixed, ...} = {
202
201
  ...eventHandlersWithoutBlurAndFocus,
@@ -36,6 +36,7 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {
36
36
  borderRightWidth: true,
37
37
  borderStartWidth: true,
38
38
  borderTopWidth: true,
39
+ boxSizing: true,
39
40
  columnGap: true,
40
41
  borderWidth: true,
41
42
  bottom: true,
@@ -125,7 +126,7 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {
125
126
  /**
126
127
  * MixBlendMode
127
128
  */
128
- experimental_mixBlendMode: true,
129
+ mixBlendMode: true,
129
130
 
130
131
  /**
131
132
  * Isolation
@@ -174,6 +175,10 @@ const ReactNativeStyleAttributes: {[string]: AnyAttributeType, ...} = {
174
175
  borderTopStartRadius: true,
175
176
  cursor: true,
176
177
  opacity: true,
178
+ outlineColor: colorAttributes,
179
+ outlineOffset: true,
180
+ outlineStyle: true,
181
+ outlineWidth: true,
177
182
  pointerEvents: true,
178
183
 
179
184
  /**
@@ -23,10 +23,10 @@ export type Props = ViewProps;
23
23
  *
24
24
  * @see https://reactnative.dev/docs/view
25
25
  */
26
- const View: React.AbstractComponent<
27
- ViewProps,
28
- React.ElementRef<typeof ViewNativeComponent>,
29
- > = React.forwardRef(
26
+ const View: component(
27
+ ref: React.RefSetter<React.ElementRef<typeof ViewNativeComponent>>,
28
+ ...props: ViewProps
29
+ ) = React.forwardRef(
30
30
  (
31
31
  {
32
32
  accessibilityElementsHidden,
@@ -27,10 +27,10 @@ export type Props = ViewProps;
27
27
  *
28
28
  * @see https://reactnative.dev/docs/view
29
29
  */
30
- const View: React.AbstractComponent<
31
- ViewProps,
32
- React.ElementRef<typeof ViewNativeComponent>,
33
- > = React.forwardRef(
30
+ const View: component(
31
+ ref: React.RefSetter<React.ElementRef<typeof ViewNativeComponent>>,
32
+ ...props: ViewProps
33
+ ) = React.forwardRef(
34
34
  (
35
35
  {
36
36
  accessibilityControls, // Win32
@@ -10,113 +10,21 @@
10
10
 
11
11
  import type {
12
12
  HostComponent,
13
- PartialViewConfig,
13
+ HostInstance,
14
14
  } from '../../Renderer/shims/ReactNativeTypes';
15
15
 
16
16
  import * as NativeComponentRegistry from '../../NativeComponent/NativeComponentRegistry';
17
17
  import codegenNativeCommands from '../../Utilities/codegenNativeCommands';
18
- import Platform from '../../Utilities/Platform';
19
18
  import {type ViewProps as Props} from './ViewPropTypes';
20
- import * as React from 'react';
21
-
22
- export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
23
- Platform.OS === 'android'
24
- ? {
25
- uiViewClassName: 'RCTView',
26
- validAttributes: {
27
- // ReactClippingViewManager @ReactProps
28
- removeClippedSubviews: true,
29
-
30
- // ReactViewManager @ReactProps
31
- accessible: true,
32
- hasTVPreferredFocus: true,
33
- nextFocusDown: true,
34
- nextFocusForward: true,
35
- nextFocusLeft: true,
36
- nextFocusRight: true,
37
- nextFocusUp: true,
38
-
39
- borderRadius: true,
40
- borderTopLeftRadius: true,
41
- borderTopRightRadius: true,
42
- borderBottomRightRadius: true,
43
- borderBottomLeftRadius: true,
44
- borderTopStartRadius: true,
45
- borderTopEndRadius: true,
46
- borderBottomStartRadius: true,
47
- borderBottomEndRadius: true,
48
- borderEndEndRadius: true,
49
- borderEndStartRadius: true,
50
- borderStartEndRadius: true,
51
- borderStartStartRadius: true,
52
- borderStyle: true,
53
- hitSlop: true,
54
- pointerEvents: true,
55
- nativeBackgroundAndroid: true,
56
- nativeForegroundAndroid: true,
57
- needsOffscreenAlphaCompositing: true,
58
-
59
- borderWidth: true,
60
- borderLeftWidth: true,
61
- borderRightWidth: true,
62
- borderTopWidth: true,
63
- borderBottomWidth: true,
64
- borderStartWidth: true,
65
- borderEndWidth: true,
66
-
67
- borderColor: {
68
- process: require('../../StyleSheet/processColor').default,
69
- },
70
- borderLeftColor: {
71
- process: require('../../StyleSheet/processColor').default,
72
- },
73
- borderRightColor: {
74
- process: require('../../StyleSheet/processColor').default,
75
- },
76
- borderTopColor: {
77
- process: require('../../StyleSheet/processColor').default,
78
- },
79
- borderBottomColor: {
80
- process: require('../../StyleSheet/processColor').default,
81
- },
82
- borderStartColor: {
83
- process: require('../../StyleSheet/processColor').default,
84
- },
85
- borderEndColor: {
86
- process: require('../../StyleSheet/processColor').default,
87
- },
88
- borderBlockColor: {
89
- process: require('../../StyleSheet/processColor').default,
90
- },
91
- borderBlockEndColor: {
92
- process: require('../../StyleSheet/processColor').default,
93
- },
94
- borderBlockStartColor: {
95
- process: require('../../StyleSheet/processColor').default,
96
- },
97
- focusable: true,
98
- overflow: true,
99
- backfaceVisibility: true,
100
- experimental_layoutConformance: true,
101
- },
102
- }
103
- : {
104
- uiViewClassName: 'RCTView',
105
- };
106
19
 
107
20
  const ViewNativeComponent: HostComponent<Props> =
108
- NativeComponentRegistry.get<Props>('RCTView', () => __INTERNAL_VIEW_CONFIG);
21
+ NativeComponentRegistry.get<Props>('RCTView', () => ({
22
+ uiViewClassName: 'RCTView',
23
+ }));
109
24
 
110
25
  interface NativeCommands {
111
- +hotspotUpdate: (
112
- viewRef: React.ElementRef<HostComponent<mixed>>,
113
- x: number,
114
- y: number,
115
- ) => void;
116
- +setPressed: (
117
- viewRef: React.ElementRef<HostComponent<mixed>>,
118
- pressed: boolean,
119
- ) => void;
26
+ +hotspotUpdate: (viewRef: HostInstance, x: number, y: number) => void;
27
+ +setPressed: (viewRef: HostInstance, pressed: boolean) => void;
120
28
  }
121
29
 
122
30
  export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
@@ -343,6 +343,13 @@ export interface ViewProps
343
343
  * Used to reference react managed views from native code.
344
344
  */
345
345
  nativeID?: string | undefined;
346
+
347
+ /**
348
+ * Contols whether this view, and its transitive children, are laid in a way
349
+ * consistent with web browsers ('strict'), or consistent with existing
350
+ * React Native code which may rely on incorrect behavior ('classic').
351
+ */
352
+ experimental_layoutConformance?: 'strict' | 'classic' | undefined;
346
353
  }
347
354
 
348
355
  // For backwards compat.... // Win32
@@ -567,9 +567,6 @@ export type ViewProps = $ReadOnly<{|
567
567
  * optimization. Set this property to `false` to disable this optimization and
568
568
  * ensure that this `View` exists in the native view hierarchy.
569
569
  *
570
- * @platform android
571
- * In Fabric, this prop is used in ios as well.
572
- *
573
570
  * See https://reactnative.dev/docs/view#collapsable
574
571
  */
575
572
  collapsable?: ?boolean,
@@ -628,9 +628,6 @@ export type ViewProps = $ReadOnly<{|
628
628
  * optimization. Set this property to `false` to disable this optimization and
629
629
  * ensure that this `View` exists in the native view hierarchy.
630
630
  *
631
- * @platform android
632
- * In Fabric, this prop is used in ios as well.
633
- *
634
631
  * See https://reactnative.dev/docs/view#collapsable
635
632
  */
636
633
  collapsable?: ?boolean,
@@ -19,6 +19,7 @@ import warnOnce from '../../Utilities/warnOnce';
19
19
  * Basic View component with additional Win32 specific functionality
20
20
  */
21
21
 
22
+ // $FlowFixMe[prop-missing]
22
23
  const ViewWin32: React.AbstractComponent<
23
24
  ViewProps,
24
25
  React.ElementRef<typeof View>,
@@ -22,10 +22,11 @@ type ExceptionDecorator = ExceptionData => ExceptionData;
22
22
  let userExceptionDecorator: ?ExceptionDecorator;
23
23
  let inUserExceptionDecorator = false;
24
24
 
25
- // This Symbol is used to decorate an ExtendedError with extra data in select usecases.
25
+ // This string is used to decorate an ExtendedError with extra data in select usecases.
26
26
  // Note that data passed using this method should be strictly contained,
27
27
  // as data that's not serializable/too large may cause issues with passing the error to the native code.
28
- const decoratedExtraDataKey: symbol = Symbol('decoratedExtraDataKey');
28
+ // TODO(T204185517): We should use a Symbol for this, but jsi through jsc doesn't support it yet.
29
+ const decoratedExtraDataKey = 'RN$ErrorExtraDataKey';
29
30
 
30
31
  /**
31
32
  * Allows the app to add information to the exception report before it is sent
@@ -120,6 +121,12 @@ function reportException(
120
121
  const NativeExceptionsManager =
121
122
  require('./NativeExceptionsManager').default;
122
123
  if (NativeExceptionsManager) {
124
+ if (isFatal) {
125
+ if (global.RN$hasHandledFatalException?.()) {
126
+ return;
127
+ }
128
+ global.RN$notifyOfFatalException?.();
129
+ }
123
130
  NativeExceptionsManager.reportException(data);
124
131
  }
125
132
  }
@@ -140,24 +147,31 @@ let inExceptionHandler = false;
140
147
  * Logs exceptions to the (native) console and displays them
141
148
  */
142
149
  function handleException(e: mixed, isFatal: boolean) {
143
- let error: Error;
144
- if (e instanceof Error) {
145
- error = e;
146
- } else {
147
- // Workaround for reporting errors caused by `throw 'some string'`
148
- // Unfortunately there is no way to figure out the stacktrace in this
149
- // case, so if you ended up here trying to trace an error, look for
150
- // `throw '<error message>'` somewhere in your codebase.
151
- error = new SyntheticError(e);
152
- }
153
- try {
154
- inExceptionHandler = true;
155
- /* $FlowFixMe[class-object-subtyping] added when improving typing for this
156
- * parameters */
157
- // $FlowFixMe[incompatible-call]
158
- reportException(error, isFatal, /*reportToConsole*/ true);
159
- } finally {
160
- inExceptionHandler = false;
150
+ // TODO(T196834299): We should really use a c++ turbomodule for this
151
+ const reportToConsole = true;
152
+ if (
153
+ !global.RN$handleException ||
154
+ !global.RN$handleException(e, isFatal, reportToConsole)
155
+ ) {
156
+ let error: Error;
157
+ if (e instanceof Error) {
158
+ error = e;
159
+ } else {
160
+ // Workaround for reporting errors caused by `throw 'some string'`
161
+ // Unfortunately there is no way to figure out the stacktrace in this
162
+ // case, so if you ended up here trying to trace an error, look for
163
+ // `throw '<error message>'` somewhere in your codebase.
164
+ error = new SyntheticError(e);
165
+ }
166
+ try {
167
+ inExceptionHandler = true;
168
+ /* $FlowFixMe[class-object-subtyping] added when improving typing for this
169
+ * parameters */
170
+ // $FlowFixMe[incompatible-call]
171
+ reportException(error, isFatal, reportToConsole);
172
+ } finally {
173
+ inExceptionHandler = false;
174
+ }
161
175
  }
162
176
  }
163
177
 
@@ -169,7 +183,7 @@ function reactConsoleErrorHandler(...args) {
169
183
  if (!console.reportErrorsAsExceptions) {
170
184
  return;
171
185
  }
172
- if (inExceptionHandler) {
186
+ if (inExceptionHandler || global.RN$inExceptionHandler?.()) {
173
187
  // The fundamental trick here is that are multiple entry point to logging errors:
174
188
  // (see D19743075 for more background)
175
189
  //
@@ -223,14 +237,21 @@ function reactConsoleErrorHandler(...args) {
223
237
  error.name = 'console.error';
224
238
  }
225
239
 
226
- reportException(
227
- /* $FlowFixMe[class-object-subtyping] added when improving typing for this
228
- * parameters */
229
- // $FlowFixMe[incompatible-call]
230
- error,
231
- false, // isFatal
232
- false, // reportToConsole
233
- );
240
+ const isFatal = false;
241
+ const reportToConsole = false;
242
+ if (
243
+ !global.RN$handleException ||
244
+ !global.RN$handleException(error, isFatal, reportToConsole)
245
+ ) {
246
+ reportException(
247
+ /* $FlowFixMe[class-object-subtyping] added when improving typing for this
248
+ * parameters */
249
+ // $FlowFixMe[incompatible-call]
250
+ error,
251
+ isFatal,
252
+ reportToConsole,
253
+ );
254
+ }
234
255
  }
235
256
 
236
257
  /**
@@ -15,9 +15,9 @@ const version: $ReadOnly<{
15
15
  prerelease: string | null,
16
16
  }> = {
17
17
  major: 0,
18
- minor: 76,
19
- patch: 2,
20
- prerelease: null,
18
+ minor: 77,
19
+ patch: 0,
20
+ prerelease: 'rc.0',
21
21
  };
22
22
 
23
23
  module.exports = {version};
@@ -14,7 +14,6 @@ import typeof NativeExceptionsManager from '../NativeExceptionsManager';
14
14
  export default ({
15
15
  reportFatalException: jest.fn(),
16
16
  reportSoftException: jest.fn(),
17
- updateExceptionMessage: jest.fn(),
18
17
  dismissRedbox: jest.fn(),
19
18
  reportException: jest.fn(),
20
19
  }: NativeExceptionsManager);
@@ -16,16 +16,7 @@ if (global.RN$Bridgeless === true && global.RN$registerCallableModule) {
16
16
  } else {
17
17
  const BatchedBridge = require('../BatchedBridge/BatchedBridge');
18
18
  registerModule = (
19
- moduleName:
20
- | $TEMPORARY$string<'GlobalPerformanceLogger'>
21
- | $TEMPORARY$string<'HMRClient'>
22
- | $TEMPORARY$string<'HeapCapture'>
23
- | $TEMPORARY$string<'JSTimers'>
24
- | $TEMPORARY$string<'RCTDeviceEventEmitter'>
25
- | $TEMPORARY$string<'RCTLog'>
26
- | $TEMPORARY$string<'RCTNativeAppEventEmitter'>
27
- | $TEMPORARY$string<'SamplingProfiler'>
28
- | $TEMPORARY$string<'Systrace'>,
19
+ moduleName: string,
29
20
  /* $FlowFixMe[missing-local-annot] The type annotation(s) required by
30
21
  * Flow's LTI update could not be added via codemod */
31
22
  factory,
@@ -42,13 +42,9 @@ if (__DEV__) {
42
42
  if (!Platform.isTesting) {
43
43
  const HMRClient = require('../Utilities/HMRClient');
44
44
 
45
- // [0.76 only] When under React Native DevTools, log "JavaScript logs will
46
- // be removed from Metro..." warning, and continue to forward logs.
47
45
  if (global.__FUSEBOX_HAS_FULL_CONSOLE_SUPPORT__) {
48
46
  HMRClient.unstable_notifyFuseboxConsoleEnabled();
49
- }
50
-
51
- if (console._isPolyfilled) {
47
+ } else if (console._isPolyfilled) {
52
48
  // We assume full control over the console and send JavaScript logs to Metro.
53
49
  [
54
50
  'trace',
@@ -10,24 +10,26 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- /**
14
- * Sets up the console and exception handling (redbox) for React Native.
15
- * You can use this module directly, or just require InitializeCore.
16
- */
17
- const ExceptionsManager = require('./ExceptionsManager');
18
- ExceptionsManager.installConsoleErrorReporter();
13
+ if (global.RN$useAlwaysAvailableJSErrorHandling !== true) {
14
+ /**
15
+ * Sets up the console and exception handling (redbox) for React Native.
16
+ * You can use this module directly, or just require InitializeCore.
17
+ */
18
+ const ExceptionsManager = require('./ExceptionsManager');
19
+ ExceptionsManager.installConsoleErrorReporter();
19
20
 
20
- // Set up error handler
21
- if (!global.__fbDisableExceptionsManager) {
22
- const handleError = (e: mixed, isFatal: boolean) => {
23
- try {
24
- ExceptionsManager.handleException(e, isFatal);
25
- } catch (ee) {
26
- console.log('Failed to print error: ', ee.message);
27
- throw e;
28
- }
29
- };
21
+ // Set up error handler
22
+ if (!global.__fbDisableExceptionsManager) {
23
+ const handleError = (e: mixed, isFatal: boolean) => {
24
+ try {
25
+ ExceptionsManager.handleException(e, isFatal);
26
+ } catch (ee) {
27
+ console.log('Failed to print error: ', ee.message);
28
+ throw e;
29
+ }
30
+ };
30
31
 
31
- const ErrorUtils = require('../vendor/core/ErrorUtils');
32
- ErrorUtils.setGlobalHandler(handleError);
32
+ const ErrorUtils = require('../vendor/core/ErrorUtils');
33
+ ErrorUtils.setGlobalHandler(handleError);
34
+ }
33
35
  }
@@ -10,14 +10,44 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- import type {Domain} from '../../src/private/fusebox/setUpFuseboxReactDevToolsDispatcher';
13
+ import type {Domain} from '../../src/private/debugging/setUpFuseboxReactDevToolsDispatcher';
14
+ import type {Spec as NativeReactDevToolsRuntimeSettingsModuleSpec} from '../../src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule';
14
15
 
15
16
  if (__DEV__) {
16
17
  // Register dispatcher on global, which can be used later by Chrome DevTools frontend
17
- require('../../src/private/fusebox/setUpFuseboxReactDevToolsDispatcher');
18
+ require('../../src/private/debugging/setUpFuseboxReactDevToolsDispatcher');
19
+ const {
20
+ initialize,
21
+ connectToDevTools,
22
+ connectWithCustomMessagingProtocol,
23
+ } = require('react-devtools-core');
24
+
25
+ const reactDevToolsSettingsManager = require('../../src/private/debugging/ReactDevToolsSettingsManager');
26
+ const serializedHookSettings =
27
+ reactDevToolsSettingsManager.getGlobalHookSettings();
28
+ const maybeReactDevToolsRuntimeSettingsModuleModule =
29
+ require('../../src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule').default;
30
+
31
+ let hookSettings = null;
32
+ if (serializedHookSettings != null) {
33
+ try {
34
+ const parsedSettings = JSON.parse(serializedHookSettings);
35
+ hookSettings = parsedSettings;
36
+ } catch {
37
+ console.error(
38
+ 'Failed to parse persisted React DevTools hook settings. React DevTools will be initialized with default settings.',
39
+ );
40
+ }
41
+ }
42
+
43
+ const {
44
+ isProfiling: shouldStartProfilingNow,
45
+ profilingSettings: initialProfilingSettings,
46
+ } = readReloadAndProfileConfig(maybeReactDevToolsRuntimeSettingsModuleModule);
18
47
 
19
48
  // Install hook before React is loaded.
20
- const reactDevTools = require('react-devtools-core');
49
+ initialize(hookSettings, shouldStartProfilingNow, initialProfilingSettings);
50
+
21
51
  // This should be defined in DEV, otherwise error is expected.
22
52
  const fuseboxReactDevToolsDispatcher =
23
53
  global.__FUSEBOX_REACT_DEVTOOLS_DISPATCHER__;
@@ -25,9 +55,14 @@ if (__DEV__) {
25
55
  fuseboxReactDevToolsDispatcher.BINDING_NAME;
26
56
 
27
57
  const ReactNativeStyleAttributes = require('../Components/View/ReactNativeStyleAttributes');
28
- const devToolsSettingsManager = require('../DevToolsSettings/DevToolsSettingsManager');
29
58
  const resolveRNStyle = require('../StyleSheet/flattenStyle');
30
59
 
60
+ function handleReactDevToolsSettingsUpdate(settings: Object) {
61
+ reactDevToolsSettingsManager.setGlobalHookSettings(
62
+ JSON.stringify(settings),
63
+ );
64
+ }
65
+
31
66
  let disconnect = null;
32
67
  function disconnectBackendFromReactDevToolsInFuseboxIfNeeded() {
33
68
  if (disconnect != null) {
@@ -37,7 +72,15 @@ if (__DEV__) {
37
72
  }
38
73
 
39
74
  function connectToReactDevToolsInFusebox(domain: Domain) {
40
- disconnect = reactDevTools.connectWithCustomMessagingProtocol({
75
+ const {
76
+ isReloadAndProfileSupported,
77
+ isProfiling,
78
+ onReloadAndProfile,
79
+ onReloadAndProfileFlagsReset,
80
+ } = readReloadAndProfileConfig(
81
+ maybeReactDevToolsRuntimeSettingsModuleModule,
82
+ );
83
+ disconnect = connectWithCustomMessagingProtocol({
41
84
  onSubscribe: listener => {
42
85
  domain.onMessage.addEventListener(listener);
43
86
  },
@@ -47,9 +90,13 @@ if (__DEV__) {
47
90
  onMessage: (event, payload) => {
48
91
  domain.sendMessage({event, payload});
49
92
  },
50
- settingsManager: devToolsSettingsManager,
51
93
  nativeStyleEditorValidAttributes: Object.keys(ReactNativeStyleAttributes),
52
94
  resolveRNStyle,
95
+ onSettingsUpdated: handleReactDevToolsSettingsUpdate,
96
+ isReloadAndProfileSupported,
97
+ isProfiling,
98
+ onReloadAndProfile,
99
+ onReloadAndProfileFlagsReset,
53
100
  });
54
101
  }
55
102
 
@@ -101,14 +148,26 @@ if (__DEV__) {
101
148
  isWebSocketOpen = true;
102
149
  });
103
150
 
104
- reactDevTools.connectToDevTools({
151
+ const {
152
+ isReloadAndProfileSupported,
153
+ isProfiling,
154
+ onReloadAndProfile,
155
+ onReloadAndProfileFlagsReset,
156
+ } = readReloadAndProfileConfig(
157
+ maybeReactDevToolsRuntimeSettingsModuleModule,
158
+ );
159
+ connectToDevTools({
105
160
  isAppActive,
106
161
  resolveRNStyle,
107
162
  nativeStyleEditorValidAttributes: Object.keys(
108
163
  ReactNativeStyleAttributes,
109
164
  ),
110
165
  websocket: ws,
111
- devToolsSettingsManager,
166
+ onSettingsUpdated: handleReactDevToolsSettingsUpdate,
167
+ isReloadAndProfileSupported,
168
+ isProfiling,
169
+ onReloadAndProfile,
170
+ onReloadAndProfileFlagsReset,
112
171
  });
113
172
  }
114
173
  }
@@ -140,3 +199,43 @@ if (__DEV__) {
140
199
  );
141
200
  connectToWSBasedReactDevToolsFrontend(); // Try connecting once on load
142
201
  }
202
+
203
+ function readReloadAndProfileConfig(
204
+ maybeModule: ?NativeReactDevToolsRuntimeSettingsModuleSpec,
205
+ ) {
206
+ const isReloadAndProfileSupported = maybeModule != null;
207
+ const config = maybeModule?.getReloadAndProfileConfig();
208
+ const isProfiling = config?.shouldReloadAndProfile === true;
209
+ const profilingSettings = {
210
+ recordChangeDescriptions: config?.recordChangeDescriptions === true,
211
+ recordTimeline: false,
212
+ };
213
+ const onReloadAndProfile = (recordChangeDescriptions: boolean) => {
214
+ if (maybeModule == null) {
215
+ return;
216
+ }
217
+
218
+ maybeModule.setReloadAndProfileConfig({
219
+ shouldReloadAndProfile: true,
220
+ recordChangeDescriptions,
221
+ });
222
+ };
223
+ const onReloadAndProfileFlagsReset = () => {
224
+ if (maybeModule == null) {
225
+ return;
226
+ }
227
+
228
+ maybeModule.setReloadAndProfileConfig({
229
+ shouldReloadAndProfile: false,
230
+ recordChangeDescriptions: false,
231
+ });
232
+ };
233
+
234
+ return {
235
+ isReloadAndProfileSupported,
236
+ isProfiling,
237
+ profilingSettings,
238
+ onReloadAndProfile,
239
+ onReloadAndProfileFlagsReset,
240
+ };
241
+ }
@@ -42,6 +42,7 @@ function __fetchSegment(
42
42
  const error = new Error(errorObject.message);
43
43
  (error: any).code = errorObject.code; // flowlint-line unclear-type: off
44
44
  callback(error);
45
+ return;
45
46
  }
46
47
 
47
48
  callback(null);