@office-iss/react-native-win32 0.74.4 → 0.75.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/.flowconfig +9 -4
  2. package/CHANGELOG.json +554 -51
  3. package/CHANGELOG.md +165 -30
  4. package/Libraries/Animated/AnimatedImplementation.js +2 -0
  5. package/Libraries/Animated/NativeAnimatedHelper.js +4 -0
  6. package/Libraries/Animated/NativeAnimatedHelper.win32.js +4 -0
  7. package/Libraries/Animated/createAnimatedComponent.js +10 -4
  8. package/Libraries/Animated/useAnimatedProps.js +56 -28
  9. package/Libraries/BatchedBridge/MessageQueue.js +1 -0
  10. package/Libraries/Components/Button.js +10 -5
  11. package/Libraries/Components/Button.win32.js +1 -0
  12. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +11 -2
  13. package/Libraries/Components/Pressable/Pressable.js +13 -6
  14. package/Libraries/Components/Pressable/Pressable.win32.js +13 -6
  15. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +4 -0
  16. package/Libraries/Components/ScrollView/ScrollView.js +109 -29
  17. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +6 -0
  18. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +13 -1
  19. package/Libraries/Components/StatusBar/StatusBar.js +1 -21
  20. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +0 -15
  21. package/Libraries/Components/TextInput/InputAccessoryView.js +10 -1
  22. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +0 -12
  23. package/Libraries/Components/TextInput/TextInput.d.ts +0 -19
  24. package/Libraries/Components/TextInput/TextInput.js +14 -70
  25. package/Libraries/Components/TextInput/TextInput.win32.js +15 -72
  26. package/Libraries/Components/Touchable/Touchable.js +2 -2
  27. package/Libraries/Components/Touchable/TouchableHighlight.d.ts +4 -10
  28. package/Libraries/Components/Touchable/TouchableHighlight.js +3 -1
  29. package/Libraries/Components/Touchable/TouchableOpacity.d.ts +4 -32
  30. package/Libraries/Components/Touchable/TouchableOpacity.js +3 -1
  31. package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +8 -0
  32. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +117 -111
  33. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -0
  34. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  35. package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
  36. package/Libraries/Components/View/View.js +0 -11
  37. package/Libraries/Components/View/View.win32.js +0 -11
  38. package/Libraries/Components/View/ViewAccessibility.js +4 -4
  39. package/Libraries/Components/View/ViewAccessibility.win32.js +6 -6
  40. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
  41. package/Libraries/Components/View/ViewPropTypes.js +7 -0
  42. package/Libraries/Components/View/ViewPropTypes.win32.js +7 -0
  43. package/Libraries/Core/Devtools/loadBundleFromServer.js +3 -3
  44. package/Libraries/Core/Devtools/loadBundleFromServer.win32.js +153 -0
  45. package/Libraries/Core/Devtools/parseErrorStack.js +5 -5
  46. package/Libraries/Core/Devtools/parseHermesStack.js +22 -16
  47. package/Libraries/Core/ErrorHandlers.js +116 -0
  48. package/Libraries/Core/ExceptionsManager.js +2 -2
  49. package/Libraries/Core/ReactNativeVersion.js +3 -3
  50. package/Libraries/Core/setUpDeveloperTools.js +3 -1
  51. package/Libraries/Core/setUpPerformance.js +6 -4
  52. package/Libraries/Core/setUpReactDevTools.js +70 -10
  53. package/Libraries/Core/setUpTimers.js +50 -31
  54. package/Libraries/Debugging/DebuggingOverlayRegistry.js +1 -1
  55. package/Libraries/Image/Image.android.js +23 -13
  56. package/Libraries/Image/Image.d.ts +14 -15
  57. package/Libraries/Image/Image.ios.js +21 -11
  58. package/Libraries/Image/Image.win32.js +5 -3
  59. package/Libraries/Image/ImageProps.js +16 -5
  60. package/Libraries/Image/ImageTypes.flow.js +7 -2
  61. package/Libraries/Image/ImageUtils.js +1 -0
  62. package/Libraries/Image/ImageViewNativeComponent.js +2 -1
  63. package/Libraries/Inspector/ElementBox.js +6 -3
  64. package/Libraries/Inspector/ElementProperties.js +1 -1
  65. package/Libraries/Interaction/TouchHistoryMath.js +4 -4
  66. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +6 -26
  67. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  68. package/Libraries/LogBox/Data/LogBoxData.js +39 -29
  69. package/Libraries/LogBox/Data/LogBoxLog.js +114 -2
  70. package/Libraries/LogBox/Data/parseLogBoxLog.js +168 -53
  71. package/Libraries/LogBox/LogBox.js +29 -12
  72. package/Libraries/LogBox/LogBoxNotificationContainer.js +4 -0
  73. package/Libraries/LogBox/UI/LogBoxInspector.js +8 -70
  74. package/Libraries/LogBox/UI/LogBoxInspectorBody.js +87 -0
  75. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +6 -42
  76. package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +58 -0
  77. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +5 -66
  78. package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +8 -52
  79. package/Libraries/LogBox/UI/LogBoxInspectorHeaderButton.js +76 -0
  80. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +8 -5
  81. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +8 -5
  82. package/Libraries/LogBox/UI/LogBoxNotification.js +13 -152
  83. package/Libraries/LogBox/UI/LogBoxNotificationCountBadge.js +63 -0
  84. package/Libraries/LogBox/UI/LogBoxNotificationDismissButton.js +67 -0
  85. package/Libraries/LogBox/UI/LogBoxNotificationMessage.js +57 -0
  86. package/Libraries/NativeComponent/BaseViewConfig.android.js +5 -0
  87. package/Libraries/NativeComponent/BaseViewConfig.ios.js +5 -0
  88. package/Libraries/NativeComponent/BaseViewConfig.win32.js +5 -0
  89. package/Libraries/NativeComponent/NativeComponentRegistry.js +12 -5
  90. package/Libraries/NativeComponent/StaticViewConfigValidator.js +3 -0
  91. package/Libraries/Network/XMLHttpRequest.js +5 -1
  92. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +3 -3
  93. package/Libraries/Pressability/Pressability.js +3 -51
  94. package/Libraries/Pressability/Pressability.win32.js +3 -51
  95. package/Libraries/ReactNative/AppContainer-dev.js +3 -2
  96. package/Libraries/ReactNative/AppContainer-prod.js +2 -1
  97. package/Libraries/ReactNative/AppContainer.js +2 -0
  98. package/Libraries/ReactNative/AppRegistry.d.ts +7 -0
  99. package/Libraries/ReactNative/AppRegistry.js +10 -4
  100. package/Libraries/ReactNative/BridgelessUIManager.js +1 -21
  101. package/Libraries/ReactNative/FabricUIManager.js +0 -51
  102. package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +1 -0
  103. package/Libraries/ReactNative/RendererImplementation.js +20 -2
  104. package/Libraries/ReactNative/UIManager.d.ts +0 -21
  105. package/Libraries/ReactNative/UIManagerProperties.js +0 -3
  106. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +5 -341
  107. package/Libraries/ReactNative/getNativeComponentAttributes.js +8 -8
  108. package/Libraries/ReactNative/renderApplication.js +3 -0
  109. package/Libraries/Renderer/implementations/ReactFabric-dev.js +15682 -27088
  110. package/Libraries/Renderer/implementations/ReactFabric-prod.js +5082 -4381
  111. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3480 -2571
  112. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +15943 -27543
  113. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5303 -4606
  114. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3450 -2572
  115. package/Libraries/Renderer/shims/ReactFabric.js +2 -2
  116. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  117. package/Libraries/Renderer/shims/ReactNative.js +2 -3
  118. package/Libraries/Renderer/shims/ReactNativeTypes.js +24 -3
  119. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +2 -2
  120. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  121. package/Libraries/Share/Share.d.ts +16 -10
  122. package/Libraries/Share/Share.js +14 -15
  123. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -1
  124. package/Libraries/StyleSheet/StyleSheet.js +3 -10
  125. package/Libraries/StyleSheet/StyleSheet.win32.js +3 -10
  126. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +21 -21
  127. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -18
  128. package/Libraries/StyleSheet/flattenStyle.js +1 -0
  129. package/Libraries/StyleSheet/processFilter.js +132 -0
  130. package/Libraries/StyleSheet/processTransform.js +18 -3
  131. package/Libraries/Text/Text.js +151 -128
  132. package/Libraries/Text/Text.win32.js +163 -138
  133. package/Libraries/Text/TextNativeComponent.js +5 -4
  134. package/Libraries/Text/TextNativeComponent.win32.js +5 -4
  135. package/Libraries/Text/TextProps.js +6 -6
  136. package/Libraries/Text/TextProps.win32.js +6 -6
  137. package/Libraries/TurboModule/TurboModuleRegistry.js +2 -1
  138. package/Libraries/Types/CodegenTypes.js +3 -0
  139. package/Libraries/Utilities/{LoadingView.android.js → DevLoadingView.js} +33 -11
  140. package/Libraries/Utilities/Dimensions.js +1 -0
  141. package/Libraries/Utilities/Dimensions.win32.js +1 -0
  142. package/Libraries/Utilities/HMRClient.js +36 -8
  143. package/Libraries/Utilities/HMRClientProdShim.js +1 -0
  144. package/Libraries/Utilities/Platform.android.js +4 -4
  145. package/Libraries/Utilities/RCTLog.js +1 -0
  146. package/Libraries/Utilities/ReactNativeTestTools.js +12 -24
  147. package/Libraries/Utilities/verifyComponentAttributeEquivalence.js +11 -6
  148. package/Libraries/__tests__/ButtonWin32-test.js +7 -6
  149. package/Libraries/promiseRejectionTrackingOptions.js +1 -0
  150. package/jest/mockComponent.js +7 -0
  151. package/jest/renderer.js +25 -14
  152. package/jest/setup.js +19 -13
  153. package/jest.config.js +2 -1
  154. package/overrides.json +30 -29
  155. package/package.json +27 -25
  156. package/rn-get-polyfills.js +1 -0
  157. package/src/private/core/composeStyles.js +27 -0
  158. package/src/private/featureflags/ReactNativeFeatureFlags.js +93 -33
  159. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +23 -4
  160. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +56 -0
  161. package/src/private/fusebox/setUpFuseboxReactDevToolsDispatcher.js +108 -0
  162. package/src/private/specs/modules/NativeBlobModule.js +4 -2
  163. package/src/private/specs/modules/NativeDevSettings.js +1 -0
  164. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +0 -4
  165. package/src/private/specs/modules/NativeUIManager.js +0 -7
  166. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +24 -24
  167. package/src/private/webapis/dom/nodes/ReactNativeElement.js +11 -14
  168. package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +2 -3
  169. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +24 -54
  170. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +5 -13
  171. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +468 -0
  172. package/src/private/webapis/dom/nodes/specs/__mocks__/NativeDOMMock.js +413 -0
  173. package/src/private/webapis/dom/oldstylecollections/DOMRectList.js +4 -4
  174. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +4 -4
  175. package/src/private/webapis/dom/oldstylecollections/NodeList.js +5 -5
  176. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +34 -0
  177. package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +21 -0
  178. package/src/private/webapis/performance/EventCounts.js +1 -1
  179. package/src/private/webapis/performance/MemoryInfo.js +9 -9
  180. package/src/private/webapis/performance/Performance.js +10 -56
  181. package/src/private/webapis/performance/PerformanceObserver.js +30 -22
  182. package/src/private/webapis/performance/RawPerformanceEntry.js +2 -7
  183. package/src/private/webapis/performance/ReactNativeStartupTiming.js +18 -18
  184. package/src/private/webapis/performance/UserTiming.js +63 -0
  185. package/src/private/webapis/performance/{NativePerformance.js → specs/NativePerformance.js} +3 -2
  186. package/src/private/webapis/performance/{NativePerformanceObserver.js → specs/NativePerformanceObserver.js} +2 -2
  187. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformance.js +1 -1
  188. package/src/private/webapis/performance/{__mocks__ → specs/__mocks__}/NativePerformanceObserver.js +3 -4
  189. package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +7 -49
  190. package/types/modules/globals.d.ts +4 -0
  191. package/Libraries/Components/ScrollView/ScrollView.win32.js +0 -1915
  192. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +0 -13
  193. package/Libraries/Utilities/LoadingView.ios.js +0 -50
  194. package/Libraries/Utilities/LoadingView.js +0 -16
  195. package/jest/ReactNativeInternalFeatureFlagsMock.js +0 -13
  196. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +0 -44
  197. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +0 -92
  198. package/src/private/specs/modules/NativeAnimationsDebugModule.js +0 -20
  199. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +0 -85
  200. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +0 -80
  201. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +0 -161
  202. package/src/private/webapis/performance/__tests__/EventCounts-test.js +0 -116
  203. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +0 -82
  204. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +0 -108
  205. package/src/private/webapis/performance/__tests__/Performance-test.js +0 -117
  206. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +0 -208
@@ -42,8 +42,10 @@ const Text: React.AbstractComponent<
42
42
  'aria-label': ariaLabel,
43
43
  'aria-selected': ariaSelected,
44
44
  ellipsizeMode,
45
+ disabled,
45
46
  id,
46
47
  nativeID,
48
+ numberOfLines,
47
49
  onLongPress,
48
50
  onPress,
49
51
  onPressIn,
@@ -55,39 +57,47 @@ const Text: React.AbstractComponent<
55
57
  onResponderTerminationRequest,
56
58
  onStartShouldSetResponder,
57
59
  pressRetentionOffset,
60
+ selectable,
61
+ selectionColor,
58
62
  suppressHighlighting,
63
+ style,
59
64
  ...restProps
60
65
  } = props;
61
66
 
62
67
  const [isHighlighted, setHighlighted] = useState(false);
63
68
 
64
- let _accessibilityState;
69
+ const _accessibilityLabel = ariaLabel ?? accessibilityLabel;
70
+
71
+ let _accessibilityState: ?TextProps['accessibilityState'] =
72
+ accessibilityState;
65
73
  if (
66
- accessibilityState != null ||
67
74
  ariaBusy != null ||
68
75
  ariaChecked != null ||
69
76
  ariaDisabled != null ||
70
77
  ariaExpanded != null ||
71
78
  ariaSelected != null
72
79
  ) {
73
- _accessibilityState = {
74
- busy: ariaBusy ?? accessibilityState?.busy,
75
- checked: ariaChecked ?? accessibilityState?.checked,
76
- disabled: ariaDisabled ?? accessibilityState?.disabled,
77
- expanded: ariaExpanded ?? accessibilityState?.expanded,
78
- selected: ariaSelected ?? accessibilityState?.selected,
79
- };
80
+ if (_accessibilityState != null) {
81
+ _accessibilityState = {
82
+ busy: ariaBusy ?? _accessibilityState.busy,
83
+ checked: ariaChecked ?? _accessibilityState.checked,
84
+ disabled: ariaDisabled ?? _accessibilityState.disabled,
85
+ expanded: ariaExpanded ?? _accessibilityState.expanded,
86
+ selected: ariaSelected ?? _accessibilityState.selected,
87
+ };
88
+ } else {
89
+ _accessibilityState = {
90
+ busy: ariaBusy,
91
+ checked: ariaChecked,
92
+ disabled: ariaDisabled,
93
+ expanded: ariaExpanded,
94
+ selected: ariaSelected,
95
+ };
96
+ }
80
97
  }
81
98
 
82
- const _disabled =
83
- restProps.disabled != null
84
- ? restProps.disabled
85
- : _accessibilityState?.disabled;
86
-
87
- const nativeTextAccessibilityState =
88
- _disabled !== _accessibilityState?.disabled
89
- ? {..._accessibilityState, disabled: _disabled}
90
- : _accessibilityState;
99
+ const _accessibilityStateDisabled = _accessibilityState?.disabled;
100
+ const _disabled = disabled ?? _accessibilityStateDisabled;
91
101
 
92
102
  const isPressable =
93
103
  (onPress != null ||
@@ -96,46 +106,47 @@ const Text: React.AbstractComponent<
96
106
  _disabled !== true;
97
107
 
98
108
  const initialized = useLazyInitialization(isPressable);
99
- const config = useMemo(
100
- () =>
101
- initialized
102
- ? {
103
- disabled: !isPressable,
104
- pressRectOffset: pressRetentionOffset,
105
- onLongPress,
106
- onPress,
107
- onPressIn(event: PressEvent) {
108
- // Updating isHighlighted causes unnecessary re-renders for platforms that don't use it
109
- // in the best case, and cause issues with text selection in the worst case. Forcing
110
- // the isHighlighted prop to false on all platforms except iOS.
111
- setHighlighted(
112
- (suppressHighlighting == null || !suppressHighlighting) &&
113
- Platform.OS === 'ios',
114
- );
115
- onPressIn?.(event);
116
- },
117
- onPressOut(event: PressEvent) {
118
- setHighlighted(false);
119
- onPressOut?.(event);
120
- },
121
- onResponderTerminationRequest_DEPRECATED:
122
- onResponderTerminationRequest,
123
- onStartShouldSetResponder_DEPRECATED: onStartShouldSetResponder,
124
- }
125
- : null,
126
- [
127
- initialized,
128
- isPressable,
129
- pressRetentionOffset,
109
+ const config = useMemo(() => {
110
+ if (!initialized) {
111
+ return null;
112
+ }
113
+
114
+ let _onPressIn = onPressIn;
115
+ let _onPressOut = onPressOut;
116
+
117
+ // Updating isHighlighted causes unnecessary re-renders for platforms that don't use it
118
+ // in the best case, and cause issues with text selection in the worst case. Forcing
119
+ // the isHighlighted prop to false on all platforms except iOS.
120
+ if (Platform.OS === 'ios') {
121
+ _onPressIn = (event: PressEvent) => {
122
+ setHighlighted(suppressHighlighting == null || !suppressHighlighting);
123
+ onPressIn?.(event);
124
+ };
125
+
126
+ _onPressOut = (event: PressEvent) => {
127
+ setHighlighted(false);
128
+ onPressOut?.(event);
129
+ };
130
+ }
131
+
132
+ return {
133
+ disabled: !isPressable,
134
+ pressRectOffset: pressRetentionOffset,
130
135
  onLongPress,
131
136
  onPress,
132
- onPressIn,
133
- onPressOut,
134
- onResponderTerminationRequest,
135
- onStartShouldSetResponder,
136
- suppressHighlighting,
137
- ],
138
- );
137
+ onPressIn: _onPressIn,
138
+ onPressOut: _onPressOut,
139
+ };
140
+ }, [
141
+ initialized,
142
+ isPressable,
143
+ pressRetentionOffset,
144
+ onLongPress,
145
+ onPress,
146
+ onPressIn,
147
+ onPressOut,
148
+ suppressHighlighting,
149
+ ]);
139
150
 
140
151
  const eventHandlers = usePressability(config);
141
152
  const eventHandlersForText = useMemo(
@@ -169,8 +180,13 @@ const Text: React.AbstractComponent<
169
180
  },
170
181
  onClick: eventHandlers.onClick,
171
182
  onResponderTerminationRequest:
172
- eventHandlers.onResponderTerminationRequest,
173
- onStartShouldSetResponder: eventHandlers.onStartShouldSetResponder,
183
+ onResponderTerminationRequest != null
184
+ ? onResponderTerminationRequest
185
+ : eventHandlers.onResponderTerminationRequest,
186
+ onStartShouldSetResponder:
187
+ onStartShouldSetResponder != null
188
+ ? onStartShouldSetResponder
189
+ : eventHandlers.onStartShouldSetResponder,
174
190
  },
175
191
  [
176
192
  eventHandlers,
@@ -178,107 +194,114 @@ const Text: React.AbstractComponent<
178
194
  onResponderMove,
179
195
  onResponderRelease,
180
196
  onResponderTerminate,
197
+ onResponderTerminationRequest,
198
+ onStartShouldSetResponder,
181
199
  ],
182
200
  );
183
201
 
184
202
  // TODO: Move this processing to the view configuration.
185
- const selectionColor =
186
- restProps.selectionColor == null
187
- ? null
188
- : processColor(restProps.selectionColor);
189
-
190
- let style = restProps.style;
203
+ const _selectionColor =
204
+ selectionColor == null ? null : processColor(selectionColor);
191
205
 
206
+ let _style = style;
192
207
  if (__DEV__) {
193
208
  if (PressabilityDebug.isEnabled() && onPress != null) {
194
- style = [restProps.style, {color: 'magenta'}];
209
+ _style = [style, {color: 'magenta'}];
195
210
  }
196
211
  }
197
212
 
198
- let numberOfLines = restProps.numberOfLines;
199
- if (numberOfLines != null && !(numberOfLines >= 0)) {
200
- console.error(
201
- `'numberOfLines' in <Text> must be a non-negative number, received: ${numberOfLines}. The value will be set to 0.`,
202
- );
203
- numberOfLines = 0;
213
+ let _numberOfLines = numberOfLines;
214
+ if (_numberOfLines != null && !(_numberOfLines >= 0)) {
215
+ if (__DEV__) {
216
+ console.error(
217
+ `'numberOfLines' in <Text> must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`,
218
+ );
219
+ }
220
+ _numberOfLines = 0;
204
221
  }
205
222
 
206
- const hasTextAncestor = useContext(TextAncestor);
207
-
208
- const _accessible = Platform.select({
209
- ios: accessible !== false,
210
- default: accessible,
211
- });
223
+ let _selectable = selectable;
224
+ const processedStyle = flattenStyle(_style);
225
+ if (processedStyle != null) {
226
+ if (typeof processedStyle.fontWeight === 'number') {
227
+ // $FlowFixMe[cannot-write]
228
+ processedStyle.fontWeight = processedStyle.fontWeight.toString();
229
+ }
212
230
 
213
- // $FlowFixMe[underconstrained-implicit-instantiation]
214
- style = flattenStyle(style);
231
+ if (processedStyle.userSelect != null) {
232
+ _selectable = userSelectToSelectableMap[processedStyle.userSelect];
233
+ // $FlowFixMe[cannot-write]
234
+ delete processedStyle.userSelect;
235
+ }
215
236
 
216
- if (typeof style?.fontWeight === 'number') {
217
- // $FlowFixMe[prop-missing]
218
- // $FlowFixMe[cannot-write]
219
- style.fontWeight = style?.fontWeight.toString();
237
+ if (processedStyle.verticalAlign != null) {
238
+ // $FlowFixMe[cannot-write]
239
+ processedStyle.textAlignVertical =
240
+ verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign];
241
+ // $FlowFixMe[cannot-write]
242
+ delete processedStyle.verticalAlign;
243
+ }
220
244
  }
221
245
 
222
- let _selectable = restProps.selectable;
223
- if (style?.userSelect != null) {
224
- // $FlowFixMe[invalid-computed-prop]
225
- _selectable = userSelectToSelectableMap[style.userSelect];
226
- // $FlowFixMe[prop-missing]
227
- // $FlowFixMe[cannot-write]
228
- delete style.userSelect;
246
+ const _nativeID = id ?? nativeID;
247
+
248
+ const hasTextAncestor = useContext(TextAncestor);
249
+ if (hasTextAncestor) {
250
+ return (
251
+ <NativeVirtualText
252
+ {...restProps}
253
+ {...eventHandlersForText}
254
+ accessibilityLabel={_accessibilityLabel}
255
+ accessibilityState={_accessibilityState}
256
+ isHighlighted={isHighlighted}
257
+ isPressable={isPressable}
258
+ nativeID={_nativeID}
259
+ numberOfLines={_numberOfLines}
260
+ ref={forwardedRef}
261
+ selectable={_selectable}
262
+ selectionColor={_selectionColor}
263
+ style={processedStyle}
264
+ disabled={disabled}
265
+ />
266
+ );
229
267
  }
230
268
 
231
- if (style?.verticalAlign != null) {
232
- // $FlowFixMe[prop-missing]
233
- // $FlowFixMe[cannot-write]
234
- style.textAlignVertical =
235
- // $FlowFixMe[invalid-computed-prop]
236
- verticalAlignToTextAlignVerticalMap[style.verticalAlign];
237
- // $FlowFixMe[prop-missing]
238
- // $FlowFixMe[cannot-write]
239
- delete style.verticalAlign;
269
+ // If the disabled prop and accessibilityState.disabled are out of sync but not both in
270
+ // falsy states we need to update the accessibilityState object to use the disabled prop.
271
+ if (
272
+ _disabled !== _accessibilityStateDisabled &&
273
+ ((_disabled != null && _disabled !== false) ||
274
+ (_accessibilityStateDisabled != null &&
275
+ _accessibilityStateDisabled !== false))
276
+ ) {
277
+ _accessibilityState = {..._accessibilityState, disabled: _disabled};
240
278
  }
241
279
 
242
- const _hasOnPressOrOnLongPress =
243
- props.onPress != null || props.onLongPress != null;
280
+ const _accessible = Platform.select({
281
+ ios: accessible !== false,
282
+ android:
283
+ accessible == null ? onPress != null || onLongPress != null : accessible,
284
+ default: accessible,
285
+ });
244
286
 
245
- return hasTextAncestor ? (
246
- <NativeVirtualText
247
- {...restProps}
248
- {...eventHandlersForText}
249
- accessibilityLabel={ariaLabel ?? accessibilityLabel}
250
- accessibilityState={_accessibilityState}
251
- isHighlighted={isHighlighted}
252
- isPressable={isPressable}
253
- nativeID={id ?? nativeID}
254
- numberOfLines={numberOfLines}
255
- ref={forwardedRef}
256
- selectable={_selectable}
257
- selectionColor={selectionColor}
258
- style={style}
259
- />
260
- ) : (
287
+ return (
261
288
  <TextAncestor.Provider value={true}>
262
289
  <NativeText
263
290
  {...restProps}
264
291
  {...eventHandlersForText}
265
- accessibilityLabel={ariaLabel ?? accessibilityLabel}
266
- accessibilityState={nativeTextAccessibilityState}
267
- accessible={
268
- accessible == null && Platform.OS === 'android'
269
- ? _hasOnPressOrOnLongPress
270
- : _accessible
271
- }
292
+ accessibilityLabel={_accessibilityLabel}
293
+ accessibilityState={_accessibilityState}
294
+ accessible={_accessible}
272
295
  allowFontScaling={allowFontScaling !== false}
273
296
  disabled={_disabled}
274
297
  ellipsizeMode={ellipsizeMode ?? 'tail'}
275
298
  isHighlighted={isHighlighted}
276
- nativeID={id ?? nativeID}
277
- numberOfLines={numberOfLines}
299
+ nativeID={_nativeID}
300
+ numberOfLines={_numberOfLines}
278
301
  ref={forwardedRef}
279
302
  selectable={_selectable}
280
- selectionColor={selectionColor}
281
- style={style}
303
+ selectionColor={_selectionColor}
304
+ style={processedStyle}
282
305
  />
283
306
  </TextAncestor.Provider>
284
307
  );