@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
@@ -26,7 +26,7 @@ function processTransform(
26
26
  ): Array<Object> | Array<number> {
27
27
  if (typeof transform === 'string') {
28
28
  const regex = new RegExp(/(\w+)\(([^)]+)\)/g);
29
- let transformArray: Array<Object> = [];
29
+ const transformArray: Array<Object> = [];
30
30
  let matches;
31
31
 
32
32
  while ((matches = regex.exec(transform))) {
@@ -50,23 +50,7 @@ function processTransform(
50
50
  }
51
51
 
52
52
  const _getKeyAndValueFromCSSTransform: (
53
- key:
54
- | string
55
- | $TEMPORARY$string<'matrix'>
56
- | $TEMPORARY$string<'perspective'>
57
- | $TEMPORARY$string<'rotate'>
58
- | $TEMPORARY$string<'rotateX'>
59
- | $TEMPORARY$string<'rotateY'>
60
- | $TEMPORARY$string<'rotateZ'>
61
- | $TEMPORARY$string<'scale'>
62
- | $TEMPORARY$string<'scaleX'>
63
- | $TEMPORARY$string<'scaleY'>
64
- | $TEMPORARY$string<'skewX'>
65
- | $TEMPORARY$string<'skewY'>
66
- | $TEMPORARY$string<'translate'>
67
- | $TEMPORARY$string<'translate3d'>
68
- | $TEMPORARY$string<'translateX'>
69
- | $TEMPORARY$string<'translateY'>,
53
+ key: string,
70
54
  args: string,
71
55
  ) => {key: string, value?: Array<string | number> | number | string} = (
72
56
  key,
@@ -169,22 +153,7 @@ function _validateTransforms(transform: Array<Object>): void {
169
153
  }
170
154
 
171
155
  function _validateTransform(
172
- key:
173
- | string
174
- | $TEMPORARY$string<'matrix'>
175
- | $TEMPORARY$string<'perspective'>
176
- | $TEMPORARY$string<'rotate'>
177
- | $TEMPORARY$string<'rotateX'>
178
- | $TEMPORARY$string<'rotateY'>
179
- | $TEMPORARY$string<'rotateZ'>
180
- | $TEMPORARY$string<'scale'>
181
- | $TEMPORARY$string<'scaleX'>
182
- | $TEMPORARY$string<'scaleY'>
183
- | $TEMPORARY$string<'skewX'>
184
- | $TEMPORARY$string<'skewY'>
185
- | $TEMPORARY$string<'translate'>
186
- | $TEMPORARY$string<'translateX'>
187
- | $TEMPORARY$string<'translateY'>,
156
+ key: string,
188
157
  value: any | number | string,
189
158
  transformation: any,
190
159
  ) {
@@ -33,231 +33,156 @@ type TextForwardRef = React.ElementRef<
33
33
  *
34
34
  * @see https://reactnative.dev/docs/text
35
35
  */
36
- const Text: React.AbstractComponent<TextProps, TextForwardRef> =
37
- React.forwardRef(
38
- (
39
- {
40
- accessible,
41
- accessibilityLabel,
42
- accessibilityState,
43
- allowFontScaling,
44
- 'aria-busy': ariaBusy,
45
- 'aria-checked': ariaChecked,
46
- 'aria-disabled': ariaDisabled,
47
- 'aria-expanded': ariaExpanded,
48
- 'aria-label': ariaLabel,
49
- 'aria-selected': ariaSelected,
50
- children,
51
- ellipsizeMode,
52
- disabled,
53
- id,
54
- nativeID,
55
- numberOfLines,
56
- onLongPress,
57
- onPress,
58
- onPressIn,
59
- onPressOut,
60
- onResponderGrant,
61
- onResponderMove,
62
- onResponderRelease,
63
- onResponderTerminate,
64
- onResponderTerminationRequest,
65
- onStartShouldSetResponder,
66
- pressRetentionOffset,
67
- selectable,
68
- selectionColor,
69
- suppressHighlighting,
70
- style,
71
- ...restProps
72
- }: TextProps,
73
- forwardedRef,
74
- ) => {
75
- const _accessibilityLabel = ariaLabel ?? accessibilityLabel;
76
-
77
- let _accessibilityState: ?TextProps['accessibilityState'] =
78
- accessibilityState;
79
- if (
80
- ariaBusy != null ||
81
- ariaChecked != null ||
82
- ariaDisabled != null ||
83
- ariaExpanded != null ||
84
- ariaSelected != null
85
- ) {
86
- if (_accessibilityState != null) {
87
- _accessibilityState = {
88
- busy: ariaBusy ?? _accessibilityState.busy,
89
- checked: ariaChecked ?? _accessibilityState.checked,
90
- disabled: ariaDisabled ?? _accessibilityState.disabled,
91
- expanded: ariaExpanded ?? _accessibilityState.expanded,
92
- selected: ariaSelected ?? _accessibilityState.selected,
93
- };
94
- } else {
95
- _accessibilityState = {
96
- busy: ariaBusy,
97
- checked: ariaChecked,
98
- disabled: ariaDisabled,
99
- expanded: ariaExpanded,
100
- selected: ariaSelected,
101
- };
102
- }
36
+ const Text: component(
37
+ ref: React.RefSetter<TextForwardRef>,
38
+ ...props: TextProps
39
+ ) = React.forwardRef(
40
+ (
41
+ {
42
+ accessible,
43
+ accessibilityLabel,
44
+ accessibilityState,
45
+ allowFontScaling,
46
+ 'aria-busy': ariaBusy,
47
+ 'aria-checked': ariaChecked,
48
+ 'aria-disabled': ariaDisabled,
49
+ 'aria-expanded': ariaExpanded,
50
+ 'aria-label': ariaLabel,
51
+ 'aria-selected': ariaSelected,
52
+ children,
53
+ ellipsizeMode,
54
+ disabled,
55
+ id,
56
+ nativeID,
57
+ numberOfLines,
58
+ onLongPress,
59
+ onPress,
60
+ onPressIn,
61
+ onPressOut,
62
+ onResponderGrant,
63
+ onResponderMove,
64
+ onResponderRelease,
65
+ onResponderTerminate,
66
+ onResponderTerminationRequest,
67
+ onStartShouldSetResponder,
68
+ pressRetentionOffset,
69
+ selectable,
70
+ selectionColor,
71
+ suppressHighlighting,
72
+ style,
73
+ ...restProps
74
+ }: TextProps,
75
+ forwardedRef,
76
+ ) => {
77
+ const _accessibilityLabel = ariaLabel ?? accessibilityLabel;
78
+
79
+ let _accessibilityState: ?TextProps['accessibilityState'] =
80
+ accessibilityState;
81
+ if (
82
+ ariaBusy != null ||
83
+ ariaChecked != null ||
84
+ ariaDisabled != null ||
85
+ ariaExpanded != null ||
86
+ ariaSelected != null
87
+ ) {
88
+ if (_accessibilityState != null) {
89
+ _accessibilityState = {
90
+ busy: ariaBusy ?? _accessibilityState.busy,
91
+ checked: ariaChecked ?? _accessibilityState.checked,
92
+ disabled: ariaDisabled ?? _accessibilityState.disabled,
93
+ expanded: ariaExpanded ?? _accessibilityState.expanded,
94
+ selected: ariaSelected ?? _accessibilityState.selected,
95
+ };
96
+ } else {
97
+ _accessibilityState = {
98
+ busy: ariaBusy,
99
+ checked: ariaChecked,
100
+ disabled: ariaDisabled,
101
+ expanded: ariaExpanded,
102
+ selected: ariaSelected,
103
+ };
103
104
  }
105
+ }
104
106
 
105
- const _accessibilityStateDisabled = _accessibilityState?.disabled;
106
- const _disabled = disabled ?? _accessibilityStateDisabled;
107
+ const _accessibilityStateDisabled = _accessibilityState?.disabled;
108
+ const _disabled = disabled ?? _accessibilityStateDisabled;
107
109
 
108
- const isPressable =
109
- (onPress != null ||
110
- onLongPress != null ||
111
- onStartShouldSetResponder != null) &&
112
- _disabled !== true;
110
+ const isPressable =
111
+ (onPress != null ||
112
+ onLongPress != null ||
113
+ onStartShouldSetResponder != null) &&
114
+ _disabled !== true;
113
115
 
114
- // TODO: Move this processing to the view configuration.
115
- const _selectionColor =
116
- selectionColor == null ? null : processColor(selectionColor);
116
+ // TODO: Move this processing to the view configuration.
117
+ const _selectionColor =
118
+ selectionColor != null ? processColor(selectionColor) : undefined;
117
119
 
118
- let _style = style;
119
- if (__DEV__) {
120
- if (PressabilityDebug.isEnabled() && onPress != null) {
121
- _style = [style, {color: 'magenta'}];
122
- }
120
+ let _style = style;
121
+ if (__DEV__) {
122
+ if (PressabilityDebug.isEnabled() && onPress != null) {
123
+ _style = [style, {color: 'magenta'}];
123
124
  }
125
+ }
124
126
 
125
- let _numberOfLines = numberOfLines;
126
- if (_numberOfLines != null && !(_numberOfLines >= 0)) {
127
- if (__DEV__) {
128
- console.error(
129
- `'numberOfLines' in <Text> must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`,
130
- );
131
- }
132
- _numberOfLines = 0;
127
+ let _numberOfLines = numberOfLines;
128
+ if (_numberOfLines != null && !(_numberOfLines >= 0)) {
129
+ if (__DEV__) {
130
+ console.error(
131
+ `'numberOfLines' in <Text> must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`,
132
+ );
133
133
  }
134
+ _numberOfLines = 0;
135
+ }
134
136
 
135
- let _selectable = selectable;
136
-
137
- let processedStyle = flattenStyle<TextStyleProp>(_style);
138
- if (processedStyle != null) {
139
- let overrides: ?{...TextStyleInternal} = null;
140
- if (typeof processedStyle.fontWeight === 'number') {
141
- overrides = overrides || ({}: {...TextStyleInternal});
142
- overrides.fontWeight =
143
- // $FlowFixMe[incompatible-cast]
144
- (processedStyle.fontWeight.toString(): TextStyleInternal['fontWeight']);
145
- }
146
-
147
- if (processedStyle.userSelect != null) {
148
- _selectable = userSelectToSelectableMap[processedStyle.userSelect];
149
- overrides = overrides || ({}: {...TextStyleInternal});
150
- overrides.userSelect = undefined;
151
- }
152
-
153
- if (processedStyle.verticalAlign != null) {
154
- overrides = overrides || ({}: {...TextStyleInternal});
155
- overrides.textAlignVertical =
156
- verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign];
157
- overrides.verticalAlign = undefined;
158
- }
137
+ let _selectable = selectable;
159
138
 
160
- if (overrides != null) {
161
- // $FlowFixMe[incompatible-type]
162
- _style = [_style, overrides];
163
- }
139
+ let processedStyle = flattenStyle<TextStyleProp>(_style);
140
+ if (processedStyle != null) {
141
+ let overrides: ?{...TextStyleInternal} = null;
142
+ if (typeof processedStyle.fontWeight === 'number') {
143
+ overrides = overrides || ({}: {...TextStyleInternal});
144
+ overrides.fontWeight =
145
+ // $FlowFixMe[incompatible-cast]
146
+ (processedStyle.fontWeight.toString(): TextStyleInternal['fontWeight']);
164
147
  }
165
148
 
166
- const _nativeID = id ?? nativeID;
167
-
168
- const hasTextAncestor = useContext(TextAncestor);
169
- if (hasTextAncestor) {
170
- if (isPressable) {
171
- return (
172
- <NativePressableVirtualText
173
- ref={forwardedRef}
174
- textProps={{
175
- ...restProps,
176
- accessibilityLabel: _accessibilityLabel,
177
- accessibilityState: _accessibilityState,
178
- nativeID: _nativeID,
179
- numberOfLines: _numberOfLines,
180
- selectable: _selectable,
181
- selectionColor: _selectionColor,
182
- style: _style,
183
- disabled: disabled,
184
- children,
185
- }}
186
- textPressabilityProps={{
187
- onLongPress,
188
- onPress,
189
- onPressIn,
190
- onPressOut,
191
- onResponderGrant,
192
- onResponderMove,
193
- onResponderRelease,
194
- onResponderTerminate,
195
- onResponderTerminationRequest,
196
- onStartShouldSetResponder,
197
- pressRetentionOffset,
198
- suppressHighlighting,
199
- }}
200
- />
201
- );
202
- }
149
+ if (processedStyle.userSelect != null) {
150
+ _selectable = userSelectToSelectableMap[processedStyle.userSelect];
151
+ overrides = overrides || ({}: {...TextStyleInternal});
152
+ overrides.userSelect = undefined;
153
+ }
203
154
 
204
- return (
205
- <NativeVirtualText
206
- {...restProps}
207
- accessibilityLabel={_accessibilityLabel}
208
- accessibilityState={_accessibilityState}
209
- isHighlighted={false}
210
- isPressable={false}
211
- nativeID={_nativeID}
212
- numberOfLines={_numberOfLines}
213
- ref={forwardedRef}
214
- selectable={_selectable}
215
- selectionColor={_selectionColor}
216
- style={_style}
217
- disabled={disabled}>
218
- {children}
219
- </NativeVirtualText>
220
- );
155
+ if (processedStyle.verticalAlign != null) {
156
+ overrides = overrides || ({}: {...TextStyleInternal});
157
+ overrides.textAlignVertical =
158
+ verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign];
159
+ overrides.verticalAlign = undefined;
221
160
  }
222
161
 
223
- // If the disabled prop and accessibilityState.disabled are out of sync but not both in
224
- // falsy states we need to update the accessibilityState object to use the disabled prop.
225
- if (
226
- _disabled !== _accessibilityStateDisabled &&
227
- ((_disabled != null && _disabled !== false) ||
228
- (_accessibilityStateDisabled != null &&
229
- _accessibilityStateDisabled !== false))
230
- ) {
231
- _accessibilityState = {..._accessibilityState, disabled: _disabled};
162
+ if (overrides != null) {
163
+ // $FlowFixMe[incompatible-type]
164
+ _style = [_style, overrides];
232
165
  }
166
+ }
233
167
 
234
- const _accessible = Platform.select({
235
- ios: accessible !== false,
236
- android:
237
- accessible == null
238
- ? onPress != null || onLongPress != null
239
- : accessible,
240
- default: accessible,
241
- });
168
+ const _nativeID = id ?? nativeID;
242
169
 
243
- let nativeText = null;
170
+ const hasTextAncestor = useContext(TextAncestor);
171
+ if (hasTextAncestor) {
244
172
  if (isPressable) {
245
- nativeText = (
246
- <NativePressableText
173
+ return (
174
+ <NativePressableVirtualText
247
175
  ref={forwardedRef}
248
176
  textProps={{
249
177
  ...restProps,
250
178
  accessibilityLabel: _accessibilityLabel,
251
179
  accessibilityState: _accessibilityState,
252
- accessible: _accessible,
253
- allowFontScaling: allowFontScaling !== false,
254
- disabled: _disabled,
255
- ellipsizeMode: ellipsizeMode ?? 'tail',
256
180
  nativeID: _nativeID,
257
181
  numberOfLines: _numberOfLines,
258
182
  selectable: _selectable,
259
183
  selectionColor: _selectionColor,
260
184
  style: _style,
185
+ disabled: disabled,
261
186
  children,
262
187
  }}
263
188
  textPressabilityProps={{
@@ -276,58 +201,132 @@ const Text: React.AbstractComponent<TextProps, TextForwardRef> =
276
201
  }}
277
202
  />
278
203
  );
279
- } else {
280
- nativeText = (
281
- <NativeText
282
- {...restProps}
283
- accessibilityLabel={_accessibilityLabel}
284
- accessibilityState={_accessibilityState}
285
- accessible={_accessible}
286
- allowFontScaling={allowFontScaling !== false}
287
- disabled={_disabled}
288
- ellipsizeMode={ellipsizeMode ?? 'tail'}
289
- isHighlighted={false}
290
- nativeID={_nativeID}
291
- numberOfLines={_numberOfLines}
292
- ref={forwardedRef}
293
- selectable={_selectable}
294
- selectionColor={_selectionColor}
295
- style={_style}>
296
- {children}
297
- </NativeText>
298
- );
299
204
  }
300
205
 
301
- if (children == null) {
302
- return nativeText;
303
- }
206
+ return (
207
+ <NativeVirtualText
208
+ {...restProps}
209
+ accessibilityLabel={_accessibilityLabel}
210
+ accessibilityState={_accessibilityState}
211
+ nativeID={_nativeID}
212
+ numberOfLines={_numberOfLines}
213
+ ref={forwardedRef}
214
+ selectable={_selectable}
215
+ selectionColor={_selectionColor}
216
+ style={_style}
217
+ disabled={disabled}>
218
+ {children}
219
+ </NativeVirtualText>
220
+ );
221
+ }
304
222
 
305
- // If the children do not contain a JSX element it would not be possible to have a
306
- // nested `Text` component so we can skip adding the `TextAncestor` context wrapper
307
- // which has a performance overhead. Since we do this for performance reasons we need
308
- // to keep the check simple to avoid regressing overall perf. For this reason the
309
- // `children.length` constant is set to `3`, this should be a reasonable tradeoff
310
- // to capture the majority of `Text` uses but also not make this check too expensive.
311
- if (Array.isArray(children) && children.length <= 3) {
312
- let hasNonTextChild = false;
313
- for (let child of children) {
314
- if (child != null && typeof child === 'object') {
315
- hasNonTextChild = true;
316
- break;
317
- }
318
- }
319
- if (!hasNonTextChild) {
320
- return nativeText;
223
+ // If the disabled prop and accessibilityState.disabled are out of sync but not both in
224
+ // falsy states we need to update the accessibilityState object to use the disabled prop.
225
+ if (
226
+ _disabled !== _accessibilityStateDisabled &&
227
+ ((_disabled != null && _disabled !== false) ||
228
+ (_accessibilityStateDisabled != null &&
229
+ _accessibilityStateDisabled !== false))
230
+ ) {
231
+ _accessibilityState = {..._accessibilityState, disabled: _disabled};
232
+ }
233
+
234
+ const _accessible = Platform.select({
235
+ ios: accessible !== false,
236
+ android:
237
+ accessible == null
238
+ ? onPress != null || onLongPress != null
239
+ : accessible,
240
+ default: accessible,
241
+ });
242
+
243
+ let nativeText = null;
244
+ if (isPressable) {
245
+ nativeText = (
246
+ <NativePressableText
247
+ ref={forwardedRef}
248
+ textProps={{
249
+ ...restProps,
250
+ accessibilityLabel: _accessibilityLabel,
251
+ accessibilityState: _accessibilityState,
252
+ accessible: _accessible,
253
+ allowFontScaling: allowFontScaling !== false,
254
+ disabled: _disabled,
255
+ ellipsizeMode: ellipsizeMode ?? 'tail',
256
+ nativeID: _nativeID,
257
+ numberOfLines: _numberOfLines,
258
+ selectable: _selectable,
259
+ selectionColor: _selectionColor,
260
+ style: _style,
261
+ children,
262
+ }}
263
+ textPressabilityProps={{
264
+ onLongPress,
265
+ onPress,
266
+ onPressIn,
267
+ onPressOut,
268
+ onResponderGrant,
269
+ onResponderMove,
270
+ onResponderRelease,
271
+ onResponderTerminate,
272
+ onResponderTerminationRequest,
273
+ onStartShouldSetResponder,
274
+ pressRetentionOffset,
275
+ suppressHighlighting,
276
+ }}
277
+ />
278
+ );
279
+ } else {
280
+ nativeText = (
281
+ <NativeText
282
+ {...restProps}
283
+ accessibilityLabel={_accessibilityLabel}
284
+ accessibilityState={_accessibilityState}
285
+ accessible={_accessible}
286
+ allowFontScaling={allowFontScaling !== false}
287
+ disabled={_disabled}
288
+ ellipsizeMode={ellipsizeMode ?? 'tail'}
289
+ nativeID={_nativeID}
290
+ numberOfLines={_numberOfLines}
291
+ ref={forwardedRef}
292
+ selectable={_selectable}
293
+ selectionColor={_selectionColor}
294
+ style={_style}>
295
+ {children}
296
+ </NativeText>
297
+ );
298
+ }
299
+
300
+ if (children == null) {
301
+ return nativeText;
302
+ }
303
+
304
+ // If the children do not contain a JSX element it would not be possible to have a
305
+ // nested `Text` component so we can skip adding the `TextAncestor` context wrapper
306
+ // which has a performance overhead. Since we do this for performance reasons we need
307
+ // to keep the check simple to avoid regressing overall perf. For this reason the
308
+ // `children.length` constant is set to `3`, this should be a reasonable tradeoff
309
+ // to capture the majority of `Text` uses but also not make this check too expensive.
310
+ if (Array.isArray(children) && children.length <= 3) {
311
+ let hasNonTextChild = false;
312
+ for (let child of children) {
313
+ if (child != null && typeof child === 'object') {
314
+ hasNonTextChild = true;
315
+ break;
321
316
  }
322
- } else if (typeof children !== 'object') {
317
+ }
318
+ if (!hasNonTextChild) {
323
319
  return nativeText;
324
320
  }
321
+ } else if (typeof children !== 'object') {
322
+ return nativeText;
323
+ }
325
324
 
326
- return (
327
- <TextAncestor.Provider value={true}>{nativeText}</TextAncestor.Provider>
328
- );
329
- },
330
- );
325
+ return (
326
+ <TextAncestor.Provider value={true}>{nativeText}</TextAncestor.Provider>
327
+ );
328
+ },
329
+ );
331
330
 
332
331
  Text.displayName = 'Text';
333
332
 
@@ -476,10 +475,10 @@ type NativePressableTextProps = $ReadOnly<{
476
475
  * This logic is split out from the main Text component to enable the more
477
476
  * expensive pressability logic to be only initialized when needed.
478
477
  */
479
- const NativePressableVirtualText: React.AbstractComponent<
480
- NativePressableTextProps,
481
- TextForwardRef,
482
- > = React.forwardRef(({textProps, textPressabilityProps}, forwardedRef) => {
478
+ const NativePressableVirtualText: component(
479
+ ref: React.RefSetter<TextForwardRef>,
480
+ ...props: NativePressableTextProps
481
+ ) = React.forwardRef(({textProps, textPressabilityProps}, forwardedRef) => {
483
482
  const [isHighlighted, eventHandlersForText] = useTextPressability(
484
483
  textPressabilityProps,
485
484
  );
@@ -501,10 +500,10 @@ const NativePressableVirtualText: React.AbstractComponent<
501
500
  * This logic is split out from the main Text component to enable the more
502
501
  * expensive pressability logic to be only initialized when needed.
503
502
  */
504
- const NativePressableText: React.AbstractComponent<
505
- NativePressableTextProps,
506
- TextForwardRef,
507
- > = React.forwardRef(({textProps, textPressabilityProps}, forwardedRef) => {
503
+ const NativePressableText: component(
504
+ ref: React.RefSetter<TextForwardRef>,
505
+ ...props: NativePressableTextProps
506
+ ) = React.forwardRef(({textProps, textPressabilityProps}, forwardedRef) => {
508
507
  const [isHighlighted, eventHandlersForText] = useTextPressability(
509
508
  textPressabilityProps,
510
509
  );