react-native-windows 0.0.0-canary.992 → 0.0.0-canary.993

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 (195) hide show
  1. package/.flowconfig +3 -1
  2. package/Libraries/Animated/Animated.js +0 -1
  3. package/Libraries/Animated/Animated.js.flow +0 -1
  4. package/Libraries/Animated/AnimatedExports.js +0 -1
  5. package/Libraries/Animated/AnimatedExports.js.flow +1 -2
  6. package/Libraries/Animated/animations/Animation.js +5 -2
  7. package/Libraries/Animated/components/AnimatedScrollView.js +53 -52
  8. package/Libraries/Animated/createAnimatedComponent.js +37 -33
  9. package/Libraries/Animated/nodes/AnimatedObject.js +2 -3
  10. package/Libraries/Animated/nodes/AnimatedProps.js +1 -1
  11. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +6 -1
  12. package/Libraries/AppState/AppState.js +6 -1
  13. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +19 -18
  14. package/Libraries/Components/Button.js +2 -2
  15. package/Libraries/Components/Button.windows.js +2 -3
  16. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +2 -3
  17. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +2 -1
  18. package/Libraries/Components/LayoutConformance/LayoutConformance.js +0 -1
  19. package/Libraries/Components/Pressable/Pressable.js +9 -6
  20. package/Libraries/Components/Pressable/Pressable.windows.js +9 -6
  21. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +14 -13
  22. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +13 -1
  23. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +29 -20
  24. package/Libraries/Components/ScrollView/ScrollView.d.ts +9 -5
  25. package/Libraries/Components/ScrollView/ScrollView.js +18 -12
  26. package/Libraries/Components/ScrollView/ScrollView.windows.js +19 -12
  27. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -1
  28. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +1 -1
  29. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +19 -6
  30. package/Libraries/Components/Switch/Switch.js +8 -2
  31. package/Libraries/Components/Switch/Switch.windows.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.windows.js +1 -6
  35. package/Libraries/Components/TextInput/TextInput.js +26 -25
  36. package/Libraries/Components/TextInput/TextInput.windows.js +27 -25
  37. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +1 -5
  38. package/Libraries/Components/Touchable/TouchableBounce.js +9 -3
  39. package/Libraries/Components/Touchable/TouchableBounce.windows.js +9 -3
  40. package/Libraries/Components/Touchable/TouchableHighlight.js +9 -4
  41. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +9 -4
  42. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -1
  43. package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +2 -1
  44. package/Libraries/Components/Touchable/TouchableOpacity.js +7 -3
  45. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +7 -3
  46. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
  47. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +2 -2
  48. package/Libraries/Components/View/View.js +111 -25
  49. package/Libraries/Components/View/View.windows.js +427 -227
  50. package/Libraries/Core/Devtools/loadBundleFromServer.js +49 -7
  51. package/Libraries/Core/Devtools/loadBundleFromServer.windows.js +49 -7
  52. package/Libraries/Core/InitializeCore.js +1 -22
  53. package/Libraries/Core/ReactNativeVersion.js +3 -2
  54. package/Libraries/Debugging/DebuggingOverlay.js +6 -8
  55. package/Libraries/Debugging/DebuggingOverlayRegistry.js +0 -1
  56. package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +0 -1
  57. package/Libraries/EventEmitter/NativeEventEmitter.js +1 -1
  58. package/Libraries/Image/AssetRegistry.js +4 -10
  59. package/Libraries/Image/AssetSourceResolver.js +17 -4
  60. package/Libraries/Image/AssetSourceResolver.windows.js +17 -4
  61. package/Libraries/Image/Image.android.js +112 -106
  62. package/Libraries/Image/Image.ios.js +10 -2
  63. package/Libraries/Image/Image.windows.js +30 -20
  64. package/Libraries/Image/ImageAnalyticsTagContext.js +2 -2
  65. package/Libraries/Image/RelativeImageStub.js +1 -0
  66. package/Libraries/Lists/FlatList.d.ts +9 -5
  67. package/Libraries/Lists/FlatList.js +1 -1
  68. package/Libraries/Lists/SectionListModern.js +9 -3
  69. package/Libraries/LogBox/UI/LogBoxButton.js +2 -1
  70. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +2 -1
  71. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.windows.js +2 -1
  72. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +3 -2
  73. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +2 -1
  74. package/Libraries/ReactNative/AppContainer-dev.js +4 -4
  75. package/Libraries/ReactNative/AppContainer-prod.js +0 -1
  76. package/Libraries/ReactNative/RootTag.js +2 -2
  77. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -0
  78. package/Libraries/Renderer/shims/ReactNativeTypes.js +21 -25
  79. package/Libraries/Renderer/shims/ReactNativeTypes.windows.js +270 -0
  80. package/Libraries/StyleSheet/StyleSheetExports.js.flow +3 -1
  81. package/Libraries/StyleSheet/StyleSheetTypes.js +4 -3
  82. package/Libraries/StyleSheet/private/_TransformStyle.js +49 -21
  83. package/Libraries/StyleSheet/processBoxShadow.js +0 -1
  84. package/Libraries/StyleSheet/processFilter.js +0 -1
  85. package/Libraries/Text/Text.d.ts +1 -2
  86. package/Libraries/Text/Text.js +255 -244
  87. package/Libraries/Text/Text.windows.js +281 -300
  88. package/Libraries/Text/TextAncestor.js +3 -2
  89. package/Libraries/Text/TextProps.js +2 -34
  90. package/Libraries/Text/TextProps.windows.js +2 -34
  91. package/Libraries/Types/ReactDevToolsTypes.js +0 -1
  92. package/Libraries/Utilities/PerformanceLoggerContext.js +2 -2
  93. package/Libraries/Utilities/PlatformTypes.js +1 -1
  94. package/Libraries/vendor/core/ErrorUtils.js +28 -4
  95. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +1 -1
  96. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.h +1 -1
  97. package/Microsoft.ReactNative/Fabric/AbiShadowNode.h +1 -1
  98. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.h +1 -1
  99. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +2 -2
  100. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +10 -9
  101. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +21 -17
  102. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.h +4 -4
  103. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.cpp +19 -0
  104. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.h +76 -0
  105. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +6 -0
  106. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.cpp +19 -2
  107. package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +49 -0
  108. package/Microsoft.ReactNative/Utils/ThemeUtils.h +31 -0
  109. package/Microsoft.ReactNative/Views/ShadowNodeBase.cpp +36 -8
  110. package/Microsoft.ReactNative/Views/ShadowNodeRegistry.cpp +6 -2
  111. package/Microsoft.ReactNative/Views/ViewManagerBase.cpp +9 -1
  112. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Base.h +45 -34
  113. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bool.h +1 -1
  114. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bridging.h +1 -0
  115. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +36 -33
  116. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Number.h +10 -10
  117. package/PropertySheets/External/Microsoft.ReactNative.Cpp.Dependencies.props +10 -0
  118. package/PropertySheets/Generated/PackageVersion.g.props +2 -2
  119. package/PropertySheets/React.Cpp.props +1 -1
  120. package/ReactCommon/ReactCommon.vcxproj +10 -19
  121. package/ReactCommon/ReactCommon.vcxproj.filters +36 -13
  122. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/NativeToJsBridge.cpp +1 -1
  123. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +110 -0
  124. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/Bridging.h +1 -0
  125. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.cpp +19 -3
  126. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/dom/NativeDOM.h +9 -0
  127. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/ParagraphShadowNode.cpp +459 -0
  128. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/text/platform/android/react/renderer/components/text/ParagraphState.h +92 -0
  129. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +35 -0
  130. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityProps.cpp +28 -1
  131. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/css/CSSTokenizer.h +1 -2
  132. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +2 -1
  133. package/Scripts/creaternwapp.cmd +11 -8
  134. package/Shared/HermesRuntimeHolder.cpp +3 -1
  135. package/Shared/Shared.vcxitems +5 -1
  136. package/Shared/Shared.vcxitems.filters +4 -0
  137. package/codegen/NativeDOMSpec.g.h +6 -0
  138. package/codegen/NativeIntersectionObserverSpec.g.h +19 -5
  139. package/codegen/NativeMutationObserverSpec.g.h +11 -5
  140. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +104 -92
  141. package/codegen/react/components/rnwcore/States.h +8 -8
  142. package/codegen/rnwcoreJSI-generated.cpp +48 -3
  143. package/codegen/rnwcoreJSI.h +73 -10
  144. package/index.js +0 -1
  145. package/jest/mockNativeComponent.js +2 -1
  146. package/jest/renderer.js +0 -1
  147. package/jest/resolver.js +31 -0
  148. package/package.json +13 -13
  149. package/src/private/animated/NativeAnimatedHelper.js +6 -1
  150. package/src/private/animated/createAnimatedPropsHook.js +11 -4
  151. package/src/private/animated/createAnimatedPropsMemoHook.js +0 -1
  152. package/src/private/components/safeareaview/SafeAreaView_INTERNAL_DO_NOT_USE.js +0 -1
  153. package/src/private/components/scrollview/HScrollViewNativeComponents.js +0 -1
  154. package/src/private/components/scrollview/VScrollViewNativeComponents.js +0 -1
  155. package/src/private/devsupport/rndevtools/FuseboxSessionObserver.js +0 -1
  156. package/src/private/devsupport/rndevtools/ReactDevToolsSettingsManager.android.js +8 -9
  157. package/src/private/devsupport/rndevtools/ReactDevToolsSettingsManager.ios.js +12 -15
  158. package/src/private/devsupport/rndevtools/ReactDevToolsSettingsManager.windows.js +8 -9
  159. package/src/private/devsupport/rndevtools/setUpFuseboxReactDevToolsDispatcher.js +0 -1
  160. package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsRuntimeSettingsModule.js +0 -1
  161. package/src/private/featureflags/ReactNativeFeatureFlags.js +39 -4
  162. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +5 -2
  163. package/src/private/setup/setUpDefaultReactNativeEnvironment.js +44 -0
  164. package/src/private/styles/composeStyles.js +12 -5
  165. package/src/private/webapis/dom/events/Event.js +3 -0
  166. package/src/private/webapis/dom/events/EventTarget.js +3 -0
  167. package/src/private/webapis/dom/nodes/ReactNativeElement.js +6 -23
  168. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +3 -1
  169. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +38 -0
  170. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +3 -0
  171. package/src/private/webapis/dom/oldstylecollections/NodeList.js +3 -0
  172. package/src/private/webapis/errors/DOMException.js +166 -0
  173. package/src/private/webapis/geometry/DOMRect.js +5 -0
  174. package/src/private/webapis/geometry/DOMRectList.js +3 -0
  175. package/src/private/webapis/geometry/DOMRectReadOnly.js +6 -0
  176. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +15 -7
  177. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +3 -0
  178. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +80 -18
  179. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +12 -0
  180. package/src/private/webapis/mutationobserver/MutationObserver.js +23 -33
  181. package/src/private/webapis/mutationobserver/MutationRecord.js +3 -0
  182. package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +56 -24
  183. package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +4 -1
  184. package/src/private/webapis/performance/MemoryInfo.js +4 -1
  185. package/src/private/webapis/performance/Performance.js +19 -8
  186. package/src/private/webapis/performance/PerformanceEntry.js +4 -0
  187. package/src/private/webapis/performance/ReactNativeStartupTiming.js +4 -1
  188. package/src/private/webapis/performance/internals/RawPerformanceEntry.js +2 -0
  189. package/src/private/webapis/structuredClone/structuredClone.js +233 -0
  190. package/src/private/webapis/webidl/PlatformObjects.js +59 -0
  191. package/src/types/globals.d.ts +42 -0
  192. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +0 -1
  193. package/types/index.d.ts +1 -1
  194. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +0 -78
  195. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.h +0 -196
@@ -228,9 +228,15 @@ class TouchableBounce extends React.Component<
228
228
  }
229
229
  }
230
230
 
231
- export default (React.forwardRef((props, hostRef: React.RefSetter<mixed>) => (
232
- <TouchableBounce {...props} hostRef={hostRef} />
233
- )): component(
231
+ export default (function TouchableBounceWrapper({
232
+ ref: hostRef,
233
+ ...props
234
+ }: {
235
+ ref: React.RefSetter<mixed>,
236
+ ...$ReadOnly<Omit<TouchableBounceProps, 'hostRef'>>,
237
+ }) {
238
+ return <TouchableBounce {...props} hostRef={hostRef} />;
239
+ } as component(
234
240
  ref: React.RefSetter<mixed>,
235
241
  ...props: $ReadOnly<Omit<TouchableBounceProps, 'hostRef'>>
236
242
  ));
@@ -19,6 +19,7 @@ import {PressabilityDebugView} from '../../Pressability/PressabilityDebug';
19
19
  import StyleSheet, {type ViewStyleProp} from '../../StyleSheet/StyleSheet';
20
20
  import Platform from '../../Utilities/Platform';
21
21
  import * as React from 'react';
22
+ import {cloneElement} from 'react';
22
23
 
23
24
  type AndroidProps = $ReadOnly<{
24
25
  nextFocusDown?: ?number,
@@ -371,7 +372,7 @@ class TouchableHighlightImpl extends React.Component<
371
372
  testID={this.props.testID}
372
373
  ref={this.props.hostRef}
373
374
  {...eventHandlersWithoutBlurAndFocus}>
374
- {React.cloneElement(child, {
375
+ {cloneElement(child, {
375
376
  style: StyleSheet.compose(
376
377
  child.props.style,
377
378
  this.state.extraStyles?.child,
@@ -408,9 +409,13 @@ class TouchableHighlightImpl extends React.Component<
408
409
  const TouchableHighlight: component(
409
410
  ref?: React.RefSetter<React.ElementRef<typeof View>>,
410
411
  ...props: $ReadOnly<Omit<TouchableHighlightProps, 'hostRef'>>
411
- ) = React.forwardRef((props, hostRef) => (
412
- <TouchableHighlightImpl {...props} hostRef={hostRef} />
413
- ));
412
+ ) = ({
413
+ ref: hostRef,
414
+ ...props
415
+ }: {
416
+ ref?: React.RefSetter<React.ElementRef<typeof View>>,
417
+ ...$ReadOnly<Omit<TouchableHighlightProps, 'hostRef'>>,
418
+ }) => <TouchableHighlightImpl {...props} hostRef={hostRef} />;
414
419
 
415
420
  TouchableHighlight.displayName = 'TouchableHighlight';
416
421
 
@@ -19,6 +19,7 @@ import {PressabilityDebugView} from '../../Pressability/PressabilityDebug';
19
19
  import StyleSheet, {type ViewStyleProp} from '../../StyleSheet/StyleSheet';
20
20
  import Platform from '../../Utilities/Platform';
21
21
  import * as React from 'react';
22
+ import {cloneElement} from 'react';
22
23
 
23
24
  type AndroidProps = $ReadOnly<{
24
25
  nextFocusDown?: ?number,
@@ -396,7 +397,7 @@ class TouchableHighlightImpl extends React.Component<
396
397
  onMouseEnter={this.props.onMouseEnter} // [Windows]
397
398
  onMouseLeave={this.props.onMouseLeave} // [Windows]
398
399
  {...eventHandlersWithoutBlurAndFocus}>
399
- {React.cloneElement(child, {
400
+ {cloneElement(child, {
400
401
  style: StyleSheet.compose(
401
402
  child.props.style,
402
403
  this.state.extraStyles?.child,
@@ -433,9 +434,13 @@ class TouchableHighlightImpl extends React.Component<
433
434
  const TouchableHighlight: component(
434
435
  ref?: React.RefSetter<React.ElementRef<typeof View>>,
435
436
  ...props: $ReadOnly<Omit<TouchableHighlightProps, 'hostRef'>>
436
- ) = React.forwardRef((props, hostRef) => (
437
- <TouchableHighlightImpl {...props} hostRef={hostRef} />
438
- ));
437
+ ) = ({
438
+ ref: hostRef,
439
+ ...props
440
+ }: {
441
+ ref?: React.RefSetter<React.ElementRef<typeof View>>,
442
+ ...$ReadOnly<Omit<TouchableHighlightProps, 'hostRef'>>,
443
+ }) => <TouchableHighlightImpl {...props} hostRef={hostRef} />;
439
444
 
440
445
  TouchableHighlight.displayName = 'TouchableHighlight';
441
446
 
@@ -22,6 +22,7 @@ import Platform from '../../Utilities/Platform';
22
22
  import {Commands} from '../View/ViewNativeComponent';
23
23
  import invariant from 'invariant';
24
24
  import * as React from 'react';
25
+ import {cloneElement} from 'react';
25
26
 
26
27
  type TVProps = {
27
28
  /**
@@ -334,7 +335,7 @@ class TouchableNativeFeedback extends React.Component<
334
335
 
335
336
  const accessibilityLabel =
336
337
  this.props['aria-label'] ?? this.props.accessibilityLabel;
337
- return React.cloneElement(
338
+ return cloneElement(
338
339
  element,
339
340
  {
340
341
  ...eventHandlersWithoutBlurAndFocus,
@@ -22,6 +22,7 @@ import Platform from '../../Utilities/Platform';
22
22
  import {Commands} from '../View/ViewNativeComponent';
23
23
  import invariant from 'invariant';
24
24
  import * as React from 'react';
25
+ import {cloneElement} from 'react';
25
26
 
26
27
  type TVProps = {
27
28
  /**
@@ -341,7 +342,7 @@ class TouchableNativeFeedback extends React.Component<
341
342
 
342
343
  const accessibilityLabel =
343
344
  this.props['aria-label'] ?? this.props.accessibilityLabel;
344
- return React.cloneElement(
345
+ return cloneElement(
345
346
  element,
346
347
  {
347
348
  ...eventHandlersWithoutBlurAndFocus,
@@ -379,9 +379,13 @@ class TouchableOpacity extends React.Component<
379
379
  const Touchable: component(
380
380
  ref?: React.RefSetter<React.ElementRef<typeof Animated.View>>,
381
381
  ...props: TouchableOpacityProps
382
- ) = React.forwardRef((props, ref) => (
383
- <TouchableOpacity {...props} hostRef={ref} />
384
- ));
382
+ ) = ({
383
+ ref,
384
+ ...props
385
+ }: {
386
+ ref?: React.RefSetter<React.ElementRef<typeof Animated.View>>,
387
+ ...TouchableOpacityProps,
388
+ }) => <TouchableOpacity {...props} hostRef={ref} />;
385
389
 
386
390
  Touchable.displayName = 'TouchableOpacity';
387
391
 
@@ -401,9 +401,13 @@ class TouchableOpacity extends React.Component<
401
401
  const Touchable: component(
402
402
  ref?: React.RefSetter<React.ElementRef<typeof Animated.View>>,
403
403
  ...props: TouchableOpacityProps
404
- ) = React.forwardRef((props, ref) => (
405
- <TouchableOpacity {...props} hostRef={ref} />
406
- ));
404
+ ) = ({
405
+ ref,
406
+ ...props
407
+ }: {
408
+ ref?: React.RefSetter<React.ElementRef<typeof Animated.View>>,
409
+ ...TouchableOpacityProps,
410
+ }) => <TouchableOpacity {...props} hostRef={ref} />;
407
411
 
408
412
  Touchable.displayName = 'TouchableOpacity';
409
413
 
@@ -23,7 +23,7 @@ import {PressabilityDebugView} from '../../Pressability/PressabilityDebug';
23
23
  import usePressability from '../../Pressability/usePressability';
24
24
  import {type ViewStyleProp} from '../../StyleSheet/StyleSheet';
25
25
  import * as React from 'react';
26
- import {useMemo} from 'react';
26
+ import {cloneElement, useMemo} from 'react';
27
27
 
28
28
  export type TouchableWithoutFeedbackPropsIOS = {};
29
29
 
@@ -283,5 +283,5 @@ export default function TouchableWithoutFeedback(
283
283
  }
284
284
 
285
285
  // $FlowFixMe[incompatible-call]
286
- return React.cloneElement(element, elementProps, ...children);
286
+ return cloneElement(element, elementProps, ...children);
287
287
  }
@@ -24,7 +24,7 @@ import {PressabilityDebugView} from '../../Pressability/PressabilityDebug';
24
24
  import usePressability from '../../Pressability/usePressability';
25
25
  import {type ViewStyleProp} from '../../StyleSheet/StyleSheet';
26
26
  import * as React from 'react';
27
- import {useMemo} from 'react';
27
+ import {cloneElement, useMemo} from 'react';
28
28
  import Animated from '../../Animated/Animated'; // Windows
29
29
 
30
30
  export type TouchableWithoutFeedbackPropsIOS = {};
@@ -323,7 +323,7 @@ const TouchableWithoutFeedback: React.AbstractComponent<
323
323
  }
324
324
 
325
325
  // $FlowFixMe[incompatible-call]
326
- return React.cloneElement(element, {...elementProps, ref}, ...children);
326
+ return cloneElement(element, {...elementProps, ref}, ...children);
327
327
  });
328
328
 
329
329
  export default TouchableWithoutFeedback;
@@ -10,12 +10,19 @@
10
10
 
11
11
  import type {ViewProps} from './ViewPropTypes';
12
12
 
13
+ import * as ReactNativeFeatureFlags from '../../../src/private/featureflags/ReactNativeFeatureFlags';
13
14
  import TextAncestor from '../../Text/TextAncestor';
14
15
  import ViewNativeComponent from './ViewNativeComponent';
15
16
  import * as React from 'react';
17
+ import {use} from 'react';
16
18
 
17
19
  export type Props = ViewProps;
18
20
 
21
+ type PropsWithRef = $ReadOnly<{
22
+ ref?: React.RefSetter<React.ElementRef<typeof ViewNativeComponent>>,
23
+ ...ViewProps,
24
+ }>;
25
+
19
26
  /**
20
27
  * The most fundamental component for building a UI, View is a container that
21
28
  * supports layout with flexbox, style, some touch handling, and accessibility
@@ -23,12 +30,99 @@ export type Props = ViewProps;
23
30
  *
24
31
  * @see https://reactnative.dev/docs/view
25
32
  */
26
- const View: component(
27
- ref?: React.RefSetter<React.ElementRef<typeof ViewNativeComponent>>,
28
- ...props: ViewProps
29
- ) = React.forwardRef(
30
- (
31
- {
33
+ function View(props: PropsWithRef): React.Node {
34
+ const hasTextAncestor = use(TextAncestor);
35
+
36
+ let actualView;
37
+ if (ReactNativeFeatureFlags.reduceDefaultPropsInView()) {
38
+ const {
39
+ accessibilityState,
40
+ accessibilityValue,
41
+ 'aria-busy': ariaBusy,
42
+ 'aria-checked': ariaChecked,
43
+ 'aria-disabled': ariaDisabled,
44
+ 'aria-expanded': ariaExpanded,
45
+ 'aria-hidden': ariaHidden,
46
+ 'aria-label': ariaLabel,
47
+ 'aria-labelledby': ariaLabelledBy,
48
+ 'aria-live': ariaLive,
49
+ 'aria-selected': ariaSelected,
50
+ 'aria-valuemax': ariaValueMax,
51
+ 'aria-valuemin': ariaValueMin,
52
+ 'aria-valuenow': ariaValueNow,
53
+ 'aria-valuetext': ariaValueText,
54
+ id,
55
+ tabIndex,
56
+ ...otherProps
57
+ } = props;
58
+
59
+ // Since we destructured props, we can now treat it as mutable
60
+ const processedProps = otherProps as {...PropsWithRef};
61
+
62
+ const parsedAriaLabelledBy = ariaLabelledBy?.split(/\s*,\s*/g);
63
+ if (parsedAriaLabelledBy !== undefined) {
64
+ processedProps.accessibilityLabelledBy = parsedAriaLabelledBy;
65
+ }
66
+
67
+ if (ariaLabel !== undefined) {
68
+ processedProps.accessibilityLabel = ariaLabel;
69
+ }
70
+
71
+ if (ariaLive !== undefined) {
72
+ processedProps.accessibilityLiveRegion =
73
+ ariaLive === 'off' ? 'none' : ariaLive;
74
+ }
75
+
76
+ if (ariaHidden !== undefined) {
77
+ processedProps.accessibilityElementsHidden = ariaHidden;
78
+ if (ariaHidden === true) {
79
+ processedProps.importantForAccessibility = 'no-hide-descendants';
80
+ }
81
+ }
82
+
83
+ if (id !== undefined) {
84
+ processedProps.nativeID = id;
85
+ }
86
+
87
+ if (tabIndex !== undefined) {
88
+ processedProps.focusable = !tabIndex;
89
+ }
90
+
91
+ if (
92
+ accessibilityState != null ||
93
+ ariaBusy != null ||
94
+ ariaChecked != null ||
95
+ ariaDisabled != null ||
96
+ ariaExpanded != null ||
97
+ ariaSelected != null
98
+ ) {
99
+ processedProps.accessibilityState = {
100
+ busy: ariaBusy ?? accessibilityState?.busy,
101
+ checked: ariaChecked ?? accessibilityState?.checked,
102
+ disabled: ariaDisabled ?? accessibilityState?.disabled,
103
+ expanded: ariaExpanded ?? accessibilityState?.expanded,
104
+ selected: ariaSelected ?? accessibilityState?.selected,
105
+ };
106
+ }
107
+
108
+ if (
109
+ accessibilityValue != null ||
110
+ ariaValueMax != null ||
111
+ ariaValueMin != null ||
112
+ ariaValueNow != null ||
113
+ ariaValueText != null
114
+ ) {
115
+ processedProps.accessibilityValue = {
116
+ max: ariaValueMax ?? accessibilityValue?.max,
117
+ min: ariaValueMin ?? accessibilityValue?.min,
118
+ now: ariaValueNow ?? accessibilityValue?.now,
119
+ text: ariaValueText ?? accessibilityValue?.text,
120
+ };
121
+ }
122
+
123
+ actualView = <ViewNativeComponent {...processedProps} />;
124
+ } else {
125
+ const {
32
126
  accessibilityElementsHidden,
33
127
  accessibilityLabel,
34
128
  accessibilityLabelledBy,
@@ -54,10 +148,7 @@ const View: component(
54
148
  nativeID,
55
149
  tabIndex,
56
150
  ...otherProps
57
- }: ViewProps,
58
- forwardedRef,
59
- ) => {
60
- const hasTextAncestor = React.useContext(TextAncestor);
151
+ } = props;
61
152
  const _accessibilityLabelledBy =
62
153
  ariaLabelledBy?.split(/\s*,\s*/g) ?? accessibilityLabelledBy;
63
154
 
@@ -91,7 +182,7 @@ const View: component(
91
182
  }
92
183
  : undefined;
93
184
 
94
- const actualView = (
185
+ actualView = (
95
186
  <ViewNativeComponent
96
187
  {...otherProps}
97
188
  accessibilityLiveRegion={
@@ -109,22 +200,17 @@ const View: component(
109
200
  : importantForAccessibility
110
201
  }
111
202
  nativeID={id ?? nativeID}
112
- ref={forwardedRef}
113
203
  />
114
204
  );
205
+ }
115
206
 
116
- if (hasTextAncestor) {
117
- return (
118
- <TextAncestor.Provider value={false}>
119
- {actualView}
120
- </TextAncestor.Provider>
121
- );
122
- }
207
+ if (hasTextAncestor) {
208
+ return <TextAncestor value={false}>{actualView}</TextAncestor>;
209
+ }
210
+ return actualView;
211
+ }
123
212
 
124
- return actualView;
125
- },
213
+ export default View as component(
214
+ ref?: React.RefSetter<React.ElementRef<typeof ViewNativeComponent>>,
215
+ ...props: ViewProps
126
216
  );
127
-
128
- View.displayName = 'View';
129
-
130
- export default View;