@office-iss/react-native-win32 0.0.0-canary.296 → 0.0.0-canary.297

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 (141) hide show
  1. package/.flowconfig +3 -1
  2. package/CHANGELOG.json +22 -1
  3. package/CHANGELOG.md +13 -4
  4. package/Libraries/Animated/Animated.js +0 -1
  5. package/Libraries/Animated/Animated.js.flow +0 -1
  6. package/Libraries/Animated/AnimatedExports.js +0 -1
  7. package/Libraries/Animated/AnimatedExports.js.flow +1 -2
  8. package/Libraries/Animated/animations/Animation.js +5 -2
  9. package/Libraries/Animated/components/AnimatedScrollView.js +53 -52
  10. package/Libraries/Animated/createAnimatedComponent.js +37 -33
  11. package/Libraries/Animated/nodes/AnimatedObject.js +2 -3
  12. package/Libraries/Animated/nodes/AnimatedProps.js +1 -1
  13. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +6 -1
  14. package/Libraries/AppState/AppState.js +6 -1
  15. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +19 -18
  16. package/Libraries/Components/Button.js +2 -2
  17. package/Libraries/Components/Button.win32.js +2 -2
  18. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +2 -3
  19. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +2 -1
  20. package/Libraries/Components/LayoutConformance/LayoutConformance.js +0 -1
  21. package/Libraries/Components/Pressable/Pressable.js +9 -6
  22. package/Libraries/Components/Pressable/Pressable.win32.js +9 -6
  23. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +14 -13
  24. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +13 -1
  25. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +29 -20
  26. package/Libraries/Components/ScrollView/ScrollView.d.ts +9 -5
  27. package/Libraries/Components/ScrollView/ScrollView.js +18 -12
  28. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -1
  29. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +1 -1
  30. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +19 -6
  31. package/Libraries/Components/Switch/Switch.js +8 -2
  32. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +1 -5
  33. package/Libraries/Components/TextInput/TextInput.flow.js +1 -5
  34. package/Libraries/Components/TextInput/TextInput.flow.win32.js +1 -5
  35. package/Libraries/Components/TextInput/TextInput.js +26 -25
  36. package/Libraries/Components/TextInput/TextInput.win32.js +27 -25
  37. package/Libraries/Components/Touchable/TouchableBounce.js +9 -3
  38. package/Libraries/Components/Touchable/TouchableHighlight.js +9 -4
  39. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -1
  40. package/Libraries/Components/Touchable/TouchableNativeFeedback.win32.js +2 -0
  41. package/Libraries/Components/Touchable/TouchableOpacity.js +7 -3
  42. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
  43. package/Libraries/Components/View/View.js +111 -25
  44. package/Libraries/Core/Devtools/loadBundleFromServer.js +49 -7
  45. package/Libraries/Core/Devtools/loadBundleFromServer.win32.js +49 -7
  46. package/Libraries/Core/InitializeCore.js +1 -22
  47. package/Libraries/Core/ReactNativeVersion.js +3 -2
  48. package/Libraries/Debugging/DebuggingOverlay.js +6 -8
  49. package/Libraries/Debugging/DebuggingOverlayRegistry.js +0 -1
  50. package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +0 -1
  51. package/Libraries/EventEmitter/NativeEventEmitter.js +1 -1
  52. package/Libraries/Image/AssetRegistry.js +4 -10
  53. package/Libraries/Image/AssetSourceResolver.js +17 -4
  54. package/Libraries/Image/Image.android.js +112 -106
  55. package/Libraries/Image/Image.ios.js +10 -2
  56. package/Libraries/Image/Image.win32.js +11 -3
  57. package/Libraries/Image/ImageAnalyticsTagContext.js +2 -2
  58. package/Libraries/Image/RelativeImageStub.js +1 -0
  59. package/Libraries/Lists/FlatList.d.ts +9 -5
  60. package/Libraries/Lists/FlatList.js +1 -1
  61. package/Libraries/Lists/SectionListModern.js +9 -3
  62. package/Libraries/LogBox/UI/LogBoxButton.js +2 -1
  63. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +2 -1
  64. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +2 -1
  65. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +3 -2
  66. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.win32.js +3 -2
  67. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +2 -1
  68. package/Libraries/ReactNative/AppContainer-dev.js +4 -4
  69. package/Libraries/ReactNative/AppContainer-prod.js +0 -1
  70. package/Libraries/ReactNative/RootTag.js +2 -2
  71. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -0
  72. package/Libraries/Renderer/shims/ReactNativeTypes.js +21 -25
  73. package/Libraries/Renderer/shims/ReactNativeTypes.win32.js +270 -0
  74. package/Libraries/StyleSheet/StyleSheetExports.js.flow +3 -1
  75. package/Libraries/StyleSheet/StyleSheetTypes.js +4 -3
  76. package/Libraries/StyleSheet/private/_TransformStyle.js +49 -21
  77. package/Libraries/StyleSheet/processBoxShadow.js +0 -1
  78. package/Libraries/StyleSheet/processFilter.js +0 -1
  79. package/Libraries/Text/Text.d.ts +7 -0
  80. package/Libraries/Text/Text.js +255 -244
  81. package/Libraries/Text/Text.win32.js +293 -284
  82. package/Libraries/Text/TextAncestor.js +3 -2
  83. package/Libraries/Text/TextProps.js +2 -34
  84. package/Libraries/Text/TextProps.win32.js +2 -33
  85. package/Libraries/Types/ReactDevToolsTypes.js +0 -1
  86. package/Libraries/Utilities/PerformanceLoggerContext.js +2 -2
  87. package/Libraries/Utilities/PlatformTypes.js +1 -1
  88. package/Libraries/vendor/core/ErrorUtils.js +28 -4
  89. package/index.js +0 -1
  90. package/jest/mockNativeComponent.js +2 -1
  91. package/jest/renderer.js +0 -1
  92. package/jest/resolver.js +31 -0
  93. package/jest/setup.js +1 -1
  94. package/overrides.json +27 -20
  95. package/package.json +13 -13
  96. package/src/private/animated/NativeAnimatedHelper.js +6 -1
  97. package/src/private/animated/NativeAnimatedHelper.win32.js +6 -1
  98. package/src/private/animated/createAnimatedPropsHook.js +11 -4
  99. package/src/private/animated/createAnimatedPropsMemoHook.js +0 -1
  100. package/src/private/components/safeareaview/SafeAreaView_INTERNAL_DO_NOT_USE.js +0 -1
  101. package/src/private/components/scrollview/HScrollViewNativeComponents.js +0 -1
  102. package/src/private/components/scrollview/VScrollViewNativeComponents.js +0 -1
  103. package/src/private/devsupport/rndevtools/FuseboxSessionObserver.js +0 -1
  104. package/src/private/devsupport/rndevtools/ReactDevToolsSettingsManager.android.js +8 -9
  105. package/src/private/devsupport/rndevtools/ReactDevToolsSettingsManager.ios.js +12 -15
  106. package/src/private/devsupport/rndevtools/ReactDevToolsSettingsManager.win32.js +8 -9
  107. package/src/private/devsupport/rndevtools/setUpFuseboxReactDevToolsDispatcher.js +0 -1
  108. package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsRuntimeSettingsModule.js +0 -1
  109. package/src/private/featureflags/ReactNativeFeatureFlags.js +39 -4
  110. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +5 -2
  111. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +44 -0
  112. package/src/private/styles/composeStyles.js +12 -5
  113. package/src/private/webapis/dom/events/Event.js +3 -0
  114. package/src/private/webapis/dom/events/EventTarget.js +3 -0
  115. package/src/private/webapis/dom/nodes/ReactNativeElement.js +6 -23
  116. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +3 -1
  117. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +38 -0
  118. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +3 -0
  119. package/src/private/webapis/dom/oldstylecollections/NodeList.js +3 -0
  120. package/src/private/webapis/errors/DOMException.js +166 -0
  121. package/src/private/webapis/geometry/DOMRect.js +5 -0
  122. package/src/private/webapis/geometry/DOMRectList.js +3 -0
  123. package/src/private/webapis/geometry/DOMRectReadOnly.js +6 -0
  124. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +15 -7
  125. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +3 -0
  126. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +80 -18
  127. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +12 -0
  128. package/src/private/webapis/mutationobserver/MutationObserver.js +23 -33
  129. package/src/private/webapis/mutationobserver/MutationRecord.js +3 -0
  130. package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +56 -24
  131. package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +4 -1
  132. package/src/private/webapis/performance/MemoryInfo.js +4 -1
  133. package/src/private/webapis/performance/Performance.js +19 -8
  134. package/src/private/webapis/performance/PerformanceEntry.js +4 -0
  135. package/src/private/webapis/performance/ReactNativeStartupTiming.js +4 -1
  136. package/src/private/webapis/performance/internals/RawPerformanceEntry.js +2 -0
  137. package/src/private/webapis/structuredClone/structuredClone.js +233 -0
  138. package/src/private/webapis/webidl/PlatformObjects.js +59 -0
  139. package/src/types/globals.d.ts +42 -0
  140. package/src-win/Libraries/Text/Text.d.ts +7 -0
  141. package/types/index.d.ts +1 -1
@@ -38,268 +38,185 @@ type TextForwardRef = React.ElementRef<
38
38
  const TextImpl: component(
39
39
  ref?: React.RefSetter<TextForwardRef>,
40
40
  ...props: TextProps
41
- ) = React.forwardRef(
42
- (
43
- {
44
- accessible,
45
- accessibilityControls, // Win32
46
- accessibilityDescribedBy, // Win32
47
- accessibilityDescription, // Win32
48
- accessibilityLabel,
49
- accessibilityLevel, // Win32
50
- accessibilityPositionInSet, // Win32
51
- accessibilitySetSize, // Win32
52
- accessibilityState,
53
- allowFontScaling,
54
- 'aria-busy': ariaBusy,
55
- 'aria-checked': ariaChecked,
56
- 'aria-controls': ariaControls, // Win32
57
- 'aria-describedby': ariaDescribedBy, // Win32
58
- 'aria-description': ariaDescription, // Win32
59
- 'aria-disabled': ariaDisabled,
60
- 'aria-expanded': ariaExpanded,
61
- 'aria-label': ariaLabel,
62
- 'aria-level': ariaLevel, // Win32
63
- 'aria-multiselectable': ariaMultiselectable, // Win32
64
- 'aria-posinset': ariaPosinset, // Win32
65
- 'aria-required': ariaRequired, // Win32
66
- 'aria-selected': ariaSelected,
67
- 'aria-setsize': ariaSetsize, // Win32
68
- children,
69
- ellipsizeMode,
70
- disabled,
71
- id,
72
- nativeID,
73
- numberOfLines,
74
- onLongPress,
75
- onPress,
76
- onPressIn,
77
- onPressOut,
78
- onResponderGrant,
79
- onResponderMove,
80
- onResponderRelease,
81
- onResponderTerminate,
82
- onResponderTerminationRequest,
83
- onStartShouldSetResponder,
84
- pressRetentionOffset,
85
- selectable,
86
- selectionColor,
87
- suppressHighlighting,
88
- style,
89
- ...restProps
90
- }: TextProps,
91
- forwardedRef,
92
- ) => {
93
- const _accessibilityLabel = ariaLabel ?? accessibilityLabel;
94
- const _accessibilityControls = ariaControls ?? accessibilityControls; // Win32
95
- const _accessibilityDescribedBy =
96
- ariaDescribedBy ?? accessibilityDescribedBy; // Win32
97
- const _accessibilityDescription =
98
- ariaDescription ?? accessibilityDescription; // Win32
99
- const _accessibilityLevel = ariaLevel ?? accessibilityLevel; // Win32
100
- const _accessibilityPositionInSet =
101
- ariaPosinset ?? accessibilityPositionInSet; // Win32
102
- const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; // Win32
103
-
104
- let _accessibilityState: ?TextProps['accessibilityState'] =
105
- accessibilityState;
106
- if (
107
- ariaBusy != null ||
108
- ariaChecked != null ||
109
- ariaDisabled != null ||
110
- ariaExpanded != null ||
111
- ariaSelected != null
112
- ) {
113
- if (_accessibilityState != null) {
114
- _accessibilityState = {
115
- busy: ariaBusy ?? _accessibilityState.busy,
116
- checked: ariaChecked ?? _accessibilityState.checked,
117
- disabled: ariaDisabled ?? _accessibilityState.disabled,
118
- expanded: ariaExpanded ?? _accessibilityState.expanded,
119
- multiselectable:
120
- ariaMultiselectable ?? accessibilityState?.multiselectable, // Win32
121
- required: ariaRequired ?? accessibilityState?.required, // Win32
122
- selected: ariaSelected ?? _accessibilityState.selected,
123
- };
124
- } else {
125
- _accessibilityState = {
126
- busy: ariaBusy,
127
- checked: ariaChecked,
128
- disabled: ariaDisabled,
129
- expanded: ariaExpanded,
130
- multiselectable: ariaMultiselectable, // Win32,
131
- required: ariaRequired, // Win32
132
- selected: ariaSelected,
133
- };
134
- }
41
+ ) = ({
42
+ ref: forwardedRef,
43
+ accessible,
44
+ accessibilityControls, // Win32
45
+ accessibilityDescribedBy, // Win32
46
+ accessibilityDescription, // Win32
47
+ accessibilityLabel,
48
+ accessibilityLevel, // Win32
49
+ accessibilityPositionInSet, // Win32
50
+ accessibilitySetSize, // Win32
51
+ accessibilityState,
52
+ allowFontScaling,
53
+ 'aria-busy': ariaBusy,
54
+ 'aria-checked': ariaChecked,
55
+ 'aria-controls': ariaControls, // Win32
56
+ 'aria-describedby': ariaDescribedBy, // Win32
57
+ 'aria-description': ariaDescription, // Win32
58
+ 'aria-disabled': ariaDisabled,
59
+ 'aria-expanded': ariaExpanded,
60
+ 'aria-label': ariaLabel,
61
+ 'aria-level': ariaLevel, // Win32
62
+ 'aria-multiselectable': ariaMultiselectable, // Win32
63
+ 'aria-posinset': ariaPosinset, // Win32
64
+ 'aria-required': ariaRequired, // Win32
65
+ 'aria-selected': ariaSelected,
66
+ 'aria-setsize': ariaSetsize, // Win32
67
+ children,
68
+ ellipsizeMode,
69
+ disabled,
70
+ id,
71
+ nativeID,
72
+ numberOfLines,
73
+ onLongPress,
74
+ onPress,
75
+ onPressIn,
76
+ onPressOut,
77
+ onResponderGrant,
78
+ onResponderMove,
79
+ onResponderRelease,
80
+ onResponderTerminate,
81
+ onResponderTerminationRequest,
82
+ onStartShouldSetResponder,
83
+ pressRetentionOffset,
84
+ selectable,
85
+ selectionColor,
86
+ suppressHighlighting,
87
+ style,
88
+ ...restProps
89
+ }: {
90
+ ref?: React.RefSetter<TextForwardRef>,
91
+ ...TextProps,
92
+ }) => {
93
+ const _accessibilityLabel = ariaLabel ?? accessibilityLabel;
94
+ const _accessibilityControls = ariaControls ?? accessibilityControls; // Win32
95
+ const _accessibilityDescribedBy = ariaDescribedBy ?? accessibilityDescribedBy; // Win32
96
+ const _accessibilityDescription = ariaDescription ?? accessibilityDescription; // Win32
97
+ const _accessibilityLevel = ariaLevel ?? accessibilityLevel; // Win32
98
+ const _accessibilityPositionInSet =
99
+ ariaPosinset ?? accessibilityPositionInSet; // Win32
100
+ const _accessibilitySetSize = ariaSetsize ?? accessibilitySetSize; // Win32
101
+
102
+ let _accessibilityState: ?TextProps['accessibilityState'] =
103
+ accessibilityState;
104
+ if (
105
+ ariaBusy != null ||
106
+ ariaChecked != null ||
107
+ ariaDisabled != null ||
108
+ ariaExpanded != null ||
109
+ ariaSelected != null
110
+ ) {
111
+ if (_accessibilityState != null) {
112
+ _accessibilityState = {
113
+ busy: ariaBusy ?? _accessibilityState.busy,
114
+ checked: ariaChecked ?? _accessibilityState.checked,
115
+ disabled: ariaDisabled ?? _accessibilityState.disabled,
116
+ expanded: ariaExpanded ?? _accessibilityState.expanded,
117
+ multiselectable:
118
+ ariaMultiselectable ?? accessibilityState?.multiselectable, // Win32
119
+ required: ariaRequired ?? accessibilityState?.required, // Win32
120
+ selected: ariaSelected ?? _accessibilityState.selected,
121
+ };
122
+ } else {
123
+ _accessibilityState = {
124
+ busy: ariaBusy,
125
+ checked: ariaChecked,
126
+ disabled: ariaDisabled,
127
+ expanded: ariaExpanded,
128
+ multiselectable: ariaMultiselectable, // Win32,
129
+ required: ariaRequired, // Win32
130
+ selected: ariaSelected,
131
+ };
135
132
  }
133
+ }
136
134
 
137
- const _accessibilityStateDisabled = _accessibilityState?.disabled;
138
- const _disabled = disabled ?? _accessibilityStateDisabled;
135
+ const _accessibilityStateDisabled = _accessibilityState?.disabled;
136
+ const _disabled = disabled ?? _accessibilityStateDisabled;
139
137
 
140
- const isPressable =
141
- (onPress != null ||
142
- onLongPress != null ||
143
- onStartShouldSetResponder != null) &&
144
- _disabled !== true;
138
+ const isPressable =
139
+ (onPress != null ||
140
+ onLongPress != null ||
141
+ onStartShouldSetResponder != null) &&
142
+ _disabled !== true;
145
143
 
146
- // TODO: Move this processing to the view configuration.
147
- const _selectionColor =
148
- selectionColor != null ? processColor(selectionColor) : undefined;
144
+ // TODO: Move this processing to the view configuration.
145
+ const _selectionColor =
146
+ selectionColor != null ? processColor(selectionColor) : undefined;
149
147
 
150
- let _style = style;
151
- if (__DEV__) {
152
- if (PressabilityDebug.isEnabled() && onPress != null) {
153
- _style = [style, {color: 'magenta'}];
154
- }
148
+ let _style = style;
149
+ if (__DEV__) {
150
+ if (PressabilityDebug.isEnabled() && onPress != null) {
151
+ _style = [style, {color: 'magenta'}];
155
152
  }
153
+ }
156
154
 
157
- let _numberOfLines = numberOfLines;
158
- if (_numberOfLines != null && !(_numberOfLines >= 0)) {
159
- if (__DEV__) {
160
- console.error(
161
- `'numberOfLines' in <Text> must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`,
162
- );
163
- }
164
- _numberOfLines = 0;
155
+ let _numberOfLines = numberOfLines;
156
+ if (_numberOfLines != null && !(_numberOfLines >= 0)) {
157
+ if (__DEV__) {
158
+ console.error(
159
+ `'numberOfLines' in <Text> must be a non-negative number, received: ${_numberOfLines}. The value will be set to 0.`,
160
+ );
165
161
  }
166
-
167
- let _selectable = selectable;
168
-
169
- let processedStyle = flattenStyle<TextStyleProp>(_style);
170
- if (processedStyle != null) {
171
- let overrides: ?{...TextStyleInternal} = null;
172
- if (typeof processedStyle.fontWeight === 'number') {
173
- overrides = overrides || ({}: {...TextStyleInternal});
174
- overrides.fontWeight =
175
- // $FlowFixMe[incompatible-cast]
176
- (processedStyle.fontWeight.toString(): TextStyleInternal['fontWeight']);
177
- }
178
-
179
- if (processedStyle.userSelect != null) {
180
- _selectable = userSelectToSelectableMap[processedStyle.userSelect];
181
- overrides = overrides || ({}: {...TextStyleInternal});
182
- overrides.userSelect = undefined;
183
- }
184
-
185
- if (processedStyle.verticalAlign != null) {
186
- overrides = overrides || ({}: {...TextStyleInternal});
187
- overrides.textAlignVertical =
188
- verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign];
189
- overrides.verticalAlign = undefined;
190
- }
191
-
192
- if (overrides != null) {
193
- // $FlowFixMe[incompatible-type]
194
- _style = [_style, overrides];
195
- }
162
+ _numberOfLines = 0;
163
+ }
164
+
165
+ let _selectable = selectable;
166
+
167
+ let processedStyle = flattenStyle<TextStyleProp>(_style);
168
+ if (processedStyle != null) {
169
+ let overrides: ?{...TextStyleInternal} = null;
170
+ if (typeof processedStyle.fontWeight === 'number') {
171
+ overrides = overrides || ({}: {...TextStyleInternal});
172
+ overrides.fontWeight =
173
+ // $FlowFixMe[incompatible-cast]
174
+ (processedStyle.fontWeight.toString(): TextStyleInternal['fontWeight']);
196
175
  }
197
176
 
198
- const _nativeID = id ?? nativeID;
199
-
200
- const hasTextAncestor = useContext(TextAncestor);
201
- if (hasTextAncestor) {
202
- if (isPressable) {
203
- return (
204
- <NativePressableVirtualText
205
- ref={forwardedRef}
206
- textProps={{
207
- ...restProps,
208
- accessibilityLabel: _accessibilityLabel,
209
- accessibilityState: _accessibilityState,
210
- accessibilityControls: _accessibilityControls, // Win32
211
- accessibilityDescribedBy: _accessibilityDescribedBy, // Win32
212
- accessibilityDescription: _accessibilityDescription, // Win32
213
- accessibilityLevel: _accessibilityLevel, // Win32
214
- accessibilityPositionInSet: _accessibilityPositionInSet, // Win32
215
- accessibilitySetSize: _accessibilitySetSize, // Win32
216
- nativeID: _nativeID,
217
- numberOfLines: _numberOfLines,
218
- selectable: _selectable,
219
- selectionColor: _selectionColor,
220
- style: _style,
221
- disabled: disabled,
222
- children,
223
- }}
224
- textPressabilityProps={{
225
- onLongPress,
226
- onPress,
227
- onPressIn,
228
- onPressOut,
229
- onResponderGrant,
230
- onResponderMove,
231
- onResponderRelease,
232
- onResponderTerminate,
233
- onResponderTerminationRequest,
234
- onStartShouldSetResponder,
235
- pressRetentionOffset,
236
- suppressHighlighting,
237
- }}
238
- />
239
- );
240
- }
177
+ if (processedStyle.userSelect != null) {
178
+ _selectable = userSelectToSelectableMap[processedStyle.userSelect];
179
+ overrides = overrides || ({}: {...TextStyleInternal});
180
+ overrides.userSelect = undefined;
181
+ }
241
182
 
242
- return (
243
- <NativeVirtualText
244
- {...restProps}
245
- accessibilityLabel={_accessibilityLabel}
246
- accessibilityState={_accessibilityState}
247
- accessibilityControls={_accessibilityControls} // Win32
248
- accessibilityDescribedBy={_accessibilityDescribedBy} // Win32
249
- accessibilityDescription={_accessibilityDescription} // Win32
250
- accessibilityLevel={_accessibilityLevel} // Win32
251
- accessibilityPositionInSet={_accessibilityPositionInSet} // Win32
252
- accessibilitySetSize={_accessibilitySetSize} // Win32
253
- nativeID={_nativeID}
254
- numberOfLines={_numberOfLines}
255
- ref={forwardedRef}
256
- selectable={_selectable}
257
- selectionColor={_selectionColor}
258
- style={_style}
259
- disabled={disabled}>
260
- {children}
261
- </NativeVirtualText>
262
- );
183
+ if (processedStyle.verticalAlign != null) {
184
+ overrides = overrides || ({}: {...TextStyleInternal});
185
+ overrides.textAlignVertical =
186
+ verticalAlignToTextAlignVerticalMap[processedStyle.verticalAlign];
187
+ overrides.verticalAlign = undefined;
263
188
  }
264
189
 
265
- // If the disabled prop and accessibilityState.disabled are out of sync but not both in
266
- // falsy states we need to update the accessibilityState object to use the disabled prop.
267
- if (
268
- _disabled !== _accessibilityStateDisabled &&
269
- ((_disabled != null && _disabled !== false) ||
270
- (_accessibilityStateDisabled != null &&
271
- _accessibilityStateDisabled !== false))
272
- ) {
273
- _accessibilityState = {..._accessibilityState, disabled: _disabled};
190
+ if (overrides != null) {
191
+ // $FlowFixMe[incompatible-type]
192
+ _style = [_style, overrides];
274
193
  }
194
+ }
275
195
 
276
- const _accessible = Platform.select({
277
- ios: accessible !== false,
278
- android:
279
- accessible == null
280
- ? onPress != null || onLongPress != null
281
- : accessible,
282
- default: accessible !== false, // [Windows #13996 - default value is accessible !== false]
283
- });
196
+ const _nativeID = id ?? nativeID;
284
197
 
285
- let nativeText = null;
198
+ const hasTextAncestor = useContext(TextAncestor);
199
+ if (hasTextAncestor) {
286
200
  if (isPressable) {
287
- nativeText = (
288
- <NativePressableText
201
+ return (
202
+ <NativePressableVirtualText
289
203
  ref={forwardedRef}
290
204
  textProps={{
291
205
  ...restProps,
292
206
  accessibilityLabel: _accessibilityLabel,
293
207
  accessibilityState: _accessibilityState,
294
- accessible: _accessible,
295
- allowFontScaling: allowFontScaling !== false,
296
- disabled: _disabled,
297
- ellipsizeMode: ellipsizeMode ?? 'tail',
208
+ accessibilityControls: _accessibilityControls, // Win32
209
+ accessibilityDescribedBy: _accessibilityDescribedBy, // Win32
210
+ accessibilityDescription: _accessibilityDescription, // Win32
211
+ accessibilityLevel: _accessibilityLevel, // Win32
212
+ accessibilityPositionInSet: _accessibilityPositionInSet, // Win32
213
+ accessibilitySetSize: _accessibilitySetSize, // Win32
298
214
  nativeID: _nativeID,
299
215
  numberOfLines: _numberOfLines,
300
216
  selectable: _selectable,
301
217
  selectionColor: _selectionColor,
302
218
  style: _style,
219
+ disabled: disabled,
303
220
  children,
304
221
  }}
305
222
  textPressabilityProps={{
@@ -318,57 +235,135 @@ const TextImpl: component(
318
235
  }}
319
236
  />
320
237
  );
321
- } else {
322
- nativeText = (
323
- <NativeText
324
- {...restProps}
325
- accessibilityLabel={_accessibilityLabel}
326
- accessibilityState={_accessibilityState}
327
- accessible={_accessible}
328
- allowFontScaling={allowFontScaling !== false}
329
- disabled={_disabled}
330
- ellipsizeMode={ellipsizeMode ?? 'tail'}
331
- nativeID={_nativeID}
332
- numberOfLines={_numberOfLines}
333
- ref={forwardedRef}
334
- selectable={_selectable}
335
- selectionColor={_selectionColor}
336
- style={_style}>
337
- {children}
338
- </NativeText>
339
- );
340
238
  }
341
239
 
342
- if (children == null) {
343
- return nativeText;
344
- }
345
-
346
- // If the children do not contain a JSX element it would not be possible to have a
347
- // nested `Text` component so we can skip adding the `TextAncestor` context wrapper
348
- // which has a performance overhead. Since we do this for performance reasons we need
349
- // to keep the check simple to avoid regressing overall perf. For this reason the
350
- // `children.length` constant is set to `3`, this should be a reasonable tradeoff
351
- // to capture the majority of `Text` uses but also not make this check too expensive.
352
- if (Array.isArray(children) && children.length <= 3) {
353
- let hasNonTextChild = false;
354
- for (let child of children) {
355
- if (child != null && typeof child === 'object') {
356
- hasNonTextChild = true;
357
- break;
358
- }
359
- }
360
- if (!hasNonTextChild) {
361
- return nativeText;
240
+ return (
241
+ <NativeVirtualText
242
+ {...restProps}
243
+ accessibilityLabel={_accessibilityLabel}
244
+ accessibilityState={_accessibilityState}
245
+ accessibilityControls={_accessibilityControls} // Win32
246
+ accessibilityDescribedBy={_accessibilityDescribedBy} // Win32
247
+ accessibilityDescription={_accessibilityDescription} // Win32
248
+ accessibilityLevel={_accessibilityLevel} // Win32
249
+ accessibilityPositionInSet={_accessibilityPositionInSet} // Win32
250
+ accessibilitySetSize={_accessibilitySetSize} // Win32
251
+ nativeID={_nativeID}
252
+ numberOfLines={_numberOfLines}
253
+ ref={forwardedRef}
254
+ selectable={_selectable}
255
+ selectionColor={_selectionColor}
256
+ style={_style}
257
+ disabled={disabled}>
258
+ {children}
259
+ </NativeVirtualText>
260
+ );
261
+ }
262
+
263
+ // If the disabled prop and accessibilityState.disabled are out of sync but not both in
264
+ // falsy states we need to update the accessibilityState object to use the disabled prop.
265
+ if (
266
+ _disabled !== _accessibilityStateDisabled &&
267
+ ((_disabled != null && _disabled !== false) ||
268
+ (_accessibilityStateDisabled != null &&
269
+ _accessibilityStateDisabled !== false))
270
+ ) {
271
+ _accessibilityState = {..._accessibilityState, disabled: _disabled};
272
+ }
273
+
274
+ const _accessible = Platform.select({
275
+ ios: accessible !== false,
276
+ android:
277
+ accessible == null ? onPress != null || onLongPress != null : accessible,
278
+ default: accessible !== false, // [Windows #13996 - default value is accessible !== false]
279
+ });
280
+
281
+ let nativeText = null;
282
+ if (isPressable) {
283
+ nativeText = (
284
+ <NativePressableText
285
+ ref={forwardedRef}
286
+ textProps={{
287
+ ...restProps,
288
+ accessibilityLabel: _accessibilityLabel,
289
+ accessibilityState: _accessibilityState,
290
+ accessible: _accessible,
291
+ allowFontScaling: allowFontScaling !== false,
292
+ disabled: _disabled,
293
+ ellipsizeMode: ellipsizeMode ?? 'tail',
294
+ nativeID: _nativeID,
295
+ numberOfLines: _numberOfLines,
296
+ selectable: _selectable,
297
+ selectionColor: _selectionColor,
298
+ style: _style,
299
+ children,
300
+ }}
301
+ textPressabilityProps={{
302
+ onLongPress,
303
+ onPress,
304
+ onPressIn,
305
+ onPressOut,
306
+ onResponderGrant,
307
+ onResponderMove,
308
+ onResponderRelease,
309
+ onResponderTerminate,
310
+ onResponderTerminationRequest,
311
+ onStartShouldSetResponder,
312
+ pressRetentionOffset,
313
+ suppressHighlighting,
314
+ }}
315
+ />
316
+ );
317
+ } else {
318
+ nativeText = (
319
+ <NativeText
320
+ {...restProps}
321
+ accessibilityLabel={_accessibilityLabel}
322
+ accessibilityState={_accessibilityState}
323
+ accessible={_accessible}
324
+ allowFontScaling={allowFontScaling !== false}
325
+ disabled={_disabled}
326
+ ellipsizeMode={ellipsizeMode ?? 'tail'}
327
+ nativeID={_nativeID}
328
+ numberOfLines={_numberOfLines}
329
+ ref={forwardedRef}
330
+ selectable={_selectable}
331
+ selectionColor={_selectionColor}
332
+ style={_style}>
333
+ {children}
334
+ </NativeText>
335
+ );
336
+ }
337
+
338
+ if (children == null) {
339
+ return nativeText;
340
+ }
341
+
342
+ // If the children do not contain a JSX element it would not be possible to have a
343
+ // nested `Text` component so we can skip adding the `TextAncestor` context wrapper
344
+ // which has a performance overhead. Since we do this for performance reasons we need
345
+ // to keep the check simple to avoid regressing overall perf. For this reason the
346
+ // `children.length` constant is set to `3`, this should be a reasonable tradeoff
347
+ // to capture the majority of `Text` uses but also not make this check too expensive.
348
+ if (Array.isArray(children) && children.length <= 3) {
349
+ let hasNonTextChild = false;
350
+ for (let child of children) {
351
+ if (child != null && typeof child === 'object') {
352
+ hasNonTextChild = true;
353
+ break;
362
354
  }
363
- } else if (typeof children !== 'object') {
355
+ }
356
+ if (!hasNonTextChild) {
364
357
  return nativeText;
365
358
  }
359
+ } else if (typeof children !== 'object') {
360
+ return nativeText;
361
+ }
366
362
 
367
- return (
368
- <TextAncestor.Provider value={true}>{nativeText}</TextAncestor.Provider>
369
- );
370
- },
371
- );
363
+ return (
364
+ <TextAncestor.Provider value={true}>{nativeText}</TextAncestor.Provider>
365
+ );
366
+ };
372
367
 
373
368
  TextImpl.displayName = 'Text';
374
369
 
@@ -520,7 +515,14 @@ type NativePressableTextProps = $ReadOnly<{
520
515
  const NativePressableVirtualText: component(
521
516
  ref: React.RefSetter<TextForwardRef>,
522
517
  ...props: NativePressableTextProps
523
- ) = React.forwardRef(({textProps, textPressabilityProps}, forwardedRef) => {
518
+ ) = ({
519
+ ref: forwardedRef,
520
+ textProps,
521
+ textPressabilityProps,
522
+ }: {
523
+ ref?: React.RefSetter<TextForwardRef>,
524
+ ...NativePressableTextProps,
525
+ }) => {
524
526
  const [isHighlighted, eventHandlersForText] = useTextPressability(
525
527
  textPressabilityProps,
526
528
  );
@@ -534,7 +536,7 @@ const NativePressableVirtualText: component(
534
536
  ref={forwardedRef}
535
537
  />
536
538
  );
537
- });
539
+ };
538
540
 
539
541
  /**
540
542
  * Wrap the NativeText component and initialize pressability.
@@ -545,7 +547,14 @@ const NativePressableVirtualText: component(
545
547
  const NativePressableText: component(
546
548
  ref: React.RefSetter<TextForwardRef>,
547
549
  ...props: NativePressableTextProps
548
- ) = React.forwardRef(({textProps, textPressabilityProps}, forwardedRef) => {
550
+ ) = ({
551
+ ref: forwardedRef,
552
+ textProps,
553
+ textPressabilityProps,
554
+ }: {
555
+ ref?: React.RefSetter<TextForwardRef>,
556
+ ...NativePressableTextProps,
557
+ }) => {
549
558
  const [isHighlighted, eventHandlersForText] = useTextPressability(
550
559
  textPressabilityProps,
551
560
  );
@@ -559,7 +568,7 @@ const NativePressableText: component(
559
568
  ref={forwardedRef}
560
569
  />
561
570
  );
562
- });
571
+ };
563
572
 
564
573
  const userSelectToSelectableMap = {
565
574
  auto: true,
@@ -10,12 +10,13 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const React = require('react');
13
+ import * as React from 'react';
14
+ import {createContext} from 'react';
14
15
 
15
16
  /**
16
17
  * Whether the current element is the descendant of a <Text> element.
17
18
  */
18
- const TextAncestorContext: React.Context<boolean> = React.createContext(false);
19
+ const TextAncestorContext: React.Context<boolean> = createContext(false);
19
20
  if (__DEV__) {
20
21
  TextAncestorContext.displayName = 'TextAncestorContext';
21
22
  }