react-native-windows 0.83.0-preview.3 → 0.84.0-preview.10

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 (237) hide show
  1. package/.flowconfig +2 -2
  2. package/Folly/Folly.vcxproj +2 -0
  3. package/Libraries/Animated/AnimatedEvent.js +2 -2
  4. package/Libraries/Animated/animations/Animation.js +1 -3
  5. package/Libraries/Animated/createAnimatedComponent.js +8 -5
  6. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  7. package/Libraries/Animated/nodes/AnimatedInterpolation.js +40 -4
  8. package/Libraries/Animated/nodes/AnimatedNode.js +3 -3
  9. package/Libraries/Animated/nodes/AnimatedObject.js +16 -11
  10. package/Libraries/Animated/nodes/AnimatedProps.js +43 -12
  11. package/Libraries/Animated/nodes/AnimatedStyle.js +12 -12
  12. package/Libraries/Animated/nodes/AnimatedValue.js +6 -3
  13. package/Libraries/Animated/nodes/AnimatedValueXY.js +1 -1
  14. package/Libraries/BatchedBridge/MessageQueue.js +24 -22
  15. package/Libraries/Blob/URL.js +34 -3
  16. package/Libraries/Blob/URLSearchParams.js +1 -0
  17. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +9 -1
  18. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +6 -1
  19. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +6 -1
  20. package/Libraries/Components/Button.js +2 -5
  21. package/Libraries/Components/Button.windows.js +2 -5
  22. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -1
  23. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidTypes.js +4 -4
  24. package/Libraries/Components/Keyboard/Keyboard.js +2 -2
  25. package/Libraries/Components/Pressable/Pressable.js +8 -8
  26. package/Libraries/Components/Pressable/Pressable.windows.js +14 -13
  27. package/Libraries/Components/TextInput/TextInput.flow.js +13 -13
  28. package/Libraries/Components/TextInput/TextInput.flow.windows.js +19 -18
  29. package/Libraries/Components/TextInput/TextInput.js +33 -34
  30. package/Libraries/Components/TextInput/TextInput.windows.js +40 -39
  31. package/Libraries/Components/Touchable/PooledClass.js +2 -2
  32. package/Libraries/Components/Touchable/TouchableBounce.js +3 -3
  33. package/Libraries/Components/Touchable/TouchableBounce.windows.js +3 -3
  34. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  35. package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +1 -1
  36. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +9 -9
  37. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +9 -9
  38. package/Libraries/Components/View/ViewPropTypes.js +16 -6
  39. package/Libraries/Components/View/ViewPropTypes.windows.js +21 -11
  40. package/Libraries/Core/Devtools/loadBundleFromServer.js +6 -3
  41. package/Libraries/Core/Devtools/loadBundleFromServer.windows.js +6 -3
  42. package/Libraries/Core/Devtools/symbolicateStackTrace.js +1 -1
  43. package/Libraries/Core/ExceptionsManager.js +3 -3
  44. package/Libraries/Core/RawEventEmitter.js +1 -1
  45. package/Libraries/Core/ReactFiberErrorDialog.js +1 -1
  46. package/Libraries/Core/ReactNativeVersion.js +2 -2
  47. package/Libraries/Core/setUpDeveloperTools.js +1 -1
  48. package/Libraries/Core/setUpErrorHandling.js +1 -1
  49. package/Libraries/Core/setUpReactDevTools.js +6 -23
  50. package/Libraries/EventEmitter/NativeEventEmitter.js +2 -2
  51. package/Libraries/Image/Image.android.js +2 -2
  52. package/Libraries/Image/Image.ios.js +2 -2
  53. package/Libraries/Image/Image.windows.js +2 -2
  54. package/Libraries/Image/ImageProps.js +1 -1
  55. package/Libraries/Image/ImageTypes.flow.js +2 -2
  56. package/Libraries/Interaction/InteractionManager.js +3 -3
  57. package/Libraries/Interaction/PanResponder.js +1 -1
  58. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -1
  59. package/Libraries/Linking/Linking.js +1 -1
  60. package/Libraries/Lists/FlatList.js +2 -2
  61. package/Libraries/LogBox/Data/LogBoxData.js +31 -4
  62. package/Libraries/LogBox/Data/LogBoxLog.js +2 -2
  63. package/Libraries/LogBox/Data/LogBoxSymbolication.js +1 -1
  64. package/Libraries/LogBox/Data/parseLogBoxLog.js +5 -5
  65. package/Libraries/LogBox/LogBox.js +7 -7
  66. package/Libraries/Modal/Modal.windows.js +1 -7
  67. package/Libraries/NativeComponent/BaseViewConfig.android.js +12 -0
  68. package/Libraries/NativeComponent/StaticViewConfigValidator.js +4 -4
  69. package/Libraries/NativeComponent/ViewConfigIgnore.js +1 -1
  70. package/Libraries/NativeComponent/ViewConfigIgnore.windows.js +1 -1
  71. package/Libraries/Network/RCTNetworking.android.js +3 -3
  72. package/Libraries/Network/RCTNetworking.ios.js +2 -2
  73. package/Libraries/Network/RCTNetworking.js.flow +2 -2
  74. package/Libraries/Network/RCTNetworking.windows.js +2 -2
  75. package/Libraries/Pressability/Pressability.js +9 -9
  76. package/Libraries/Pressability/Pressability.windows.js +17 -16
  77. package/Libraries/ReactNative/AppRegistry.flow.js +1 -1
  78. package/Libraries/ReactNative/BridgelessUIManager.js +1 -1
  79. package/Libraries/ReactNative/FabricUIManager.js +1 -1
  80. package/Libraries/ReactNative/PaperUIManager.js +1 -1
  81. package/Libraries/ReactNative/PaperUIManager.windows.js +1 -1
  82. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +1 -1
  83. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstanceUtils.js +2 -2
  84. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +1 -1
  85. package/Libraries/ReactNative/RendererImplementation.js +1 -1
  86. package/Libraries/ReactNative/getNativeComponentAttributes.js +1 -1
  87. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +1 -2
  88. package/Libraries/Renderer/implementations/ReactFabric-dev.js +3 -3
  89. package/Libraries/Renderer/implementations/ReactFabric-prod.js +3 -3
  90. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3 -3
  91. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +11 -4
  92. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +11 -4
  93. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +11 -4
  94. package/Libraries/Renderer/shims/ReactFabric.js +3 -1
  95. package/Libraries/Renderer/shims/ReactFeatureFlags.js +3 -1
  96. package/Libraries/Renderer/shims/ReactNative.js +2 -2
  97. package/Libraries/Renderer/shims/ReactNativeTypes.js +3 -1
  98. package/Libraries/Renderer/shims/ReactNativeTypes.windows.js +3 -1
  99. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -1
  100. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +3 -1
  101. package/Libraries/Settings/Settings.ios.js +1 -1
  102. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +2 -2
  103. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
  104. package/Libraries/StyleSheet/PlatformColorValueTypes.js.flow +4 -2
  105. package/Libraries/StyleSheet/StyleSheetExports.js +1 -1
  106. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +99 -4
  107. package/Libraries/StyleSheet/StyleSheetTypes.js +6 -8
  108. package/Libraries/StyleSheet/processFilter.js +1 -1
  109. package/Libraries/Text/Text.js +46 -6
  110. package/Libraries/Text/Text.windows.js +46 -6
  111. package/Libraries/Text/TextNativeComponent.js +1 -1
  112. package/Libraries/Text/TextProps.js +7 -7
  113. package/Libraries/Text/TextProps.windows.js +7 -7
  114. package/Libraries/Types/CodegenTypes.js +1 -1
  115. package/Libraries/Types/CoreEventTypes.js +31 -0
  116. package/Libraries/Types/CoreEventTypes.windows.js +31 -13
  117. package/Libraries/Types/ReactDevToolsTypes.js +2 -2
  118. package/Libraries/Utilities/Appearance.js +2 -2
  119. package/Libraries/Utilities/DevLoadingView.js +8 -1
  120. package/Libraries/Utilities/DevSettings.js +3 -3
  121. package/Libraries/Utilities/HMRClient.js +4 -3
  122. package/Libraries/Utilities/RCTLog.js +3 -3
  123. package/Libraries/Utilities/ReactNativeTestTools.js +1 -1
  124. package/Libraries/Utilities/SceneTracker.js +1 -1
  125. package/Libraries/Utilities/codegenNativeCommands.js +1 -1
  126. package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +3 -3
  127. package/Libraries/Utilities/logError.js +1 -1
  128. package/Libraries/Utilities/stringifySafe.js +7 -7
  129. package/Libraries/Utilities/useRefEffect.js +1 -1
  130. package/Libraries/WebSocket/WebSocketInterceptor.js +3 -3
  131. package/Libraries/promiseRejectionTrackingOptions.js +8 -8
  132. package/Libraries/vendor/core/ErrorUtils.js +10 -10
  133. package/Libraries/vendor/emitter/EventEmitter.js +6 -6
  134. package/Microsoft.ReactNative/Fabric/AbiViewProps.cpp +5 -0
  135. package/Microsoft.ReactNative/Fabric/AbiViewProps.h +1 -0
  136. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +58 -20
  137. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +5 -0
  138. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +302 -67
  139. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +19 -4
  140. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +23 -12
  141. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +4 -0
  142. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +1 -0
  143. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +0 -2
  144. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +98 -44
  145. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +4 -2
  146. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +2 -3
  147. package/Microsoft.ReactNative/Fabric/ReactTaggedView.h +2 -2
  148. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.cpp +3 -3
  149. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.h +3 -1
  150. package/Microsoft.ReactNative/Fabric/WindowsImageManager.cpp +0 -1
  151. package/Microsoft.ReactNative/IReactCompositionViewComponentBuilder.idl +2 -0
  152. package/Microsoft.ReactNative/Modules/Animated/AnimatedNode.cpp +3 -3
  153. package/Microsoft.ReactNative/Modules/Animated/AnimatedNode.h +3 -2
  154. package/Microsoft.ReactNative/Modules/Timing.h +2 -1
  155. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +6 -0
  156. package/Microsoft.ReactNative/ViewProps.idl +9 -0
  157. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +12 -2
  158. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  159. package/PropertySheets/JSEngine.props +1 -1
  160. package/ReactCommon/ReactCommon.vcxproj +7 -1
  161. package/ReactCommon/ReactCommon.vcxproj.filters +0 -3
  162. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSIndexedRAMBundle.cpp +5 -5
  163. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/ReactMarker.cpp +0 -1
  164. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsiexecutor/jsireact/JSIExecutor.cpp +2 -43
  165. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +12 -2
  166. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/attributedstring/TextAttributes.cpp +291 -0
  167. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/EventDispatcher.cpp +0 -1
  168. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/EventQueueProcessor.cpp +1 -3
  169. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/core/propsConversions.h +199 -0
  170. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManager.cpp +6 -0
  171. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +17 -10
  172. package/Scripts/creaternwapp.cmd +8 -1
  173. package/Scripts/creaternwlib.cmd +21 -2
  174. package/Shared/DevSettings.h +0 -3
  175. package/Shared/Modules/WebSocketModule.cpp +0 -1
  176. package/Shared/Modules/WebSocketModule.h +62 -3
  177. package/Shared/OInstance.cpp +5 -0
  178. package/Shared/Shared.vcxitems +4 -6
  179. package/Shared/Shared.vcxitems.filters +218 -709
  180. package/codegen/NativeAccessibilityManagerSpec.g.h +2 -0
  181. package/codegen/NativeAnimatedModuleSpec.g.h +21 -15
  182. package/codegen/NativeDevLoadingViewSpec.g.h +3 -3
  183. package/codegen/NativeIntentAndroidSpec.g.h +16 -3
  184. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +209 -191
  185. package/codegen/react/components/rnwcore/EventEmitters.h +1 -0
  186. package/codegen/react/components/rnwcore/Props.h +14 -0
  187. package/codegen/rnwcoreJSI.h +246 -211
  188. package/index.js +3 -0
  189. package/index.windows.js +3 -0
  190. package/jest/mock.js +2 -2
  191. package/jest/mockComponent.js +1 -1
  192. package/jest/setup.js +1 -1
  193. package/package.json +22 -21
  194. package/src/private/animated/NativeAnimatedHelper.js +130 -125
  195. package/src/private/animated/NativeAnimatedValidation.js +7 -4
  196. package/src/private/animated/createAnimatedPropsHook.js +13 -5
  197. package/src/private/animated/createAnimatedPropsMemoHook.js +10 -10
  198. package/src/private/components/virtualview/VirtualView.js +16 -9
  199. package/src/private/components/virtualview/logger/VirtualViewLogger.js +21 -0
  200. package/src/private/components/virtualview/logger/VirtualViewLoggerTypes.js +24 -0
  201. package/src/private/devsupport/devmenu/elementinspector/ElementProperties.js +1 -1
  202. package/src/private/devsupport/devmenu/elementinspector/Inspector.js +6 -25
  203. package/src/private/devsupport/devmenu/elementinspector/InspectorPanel.js +1 -27
  204. package/src/private/devsupport/devmenu/elementinspector/XHRInterceptor.js +3 -2
  205. package/src/private/featureflags/ReactNativeFeatureFlags.js +63 -42
  206. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +3 -3
  207. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +12 -9
  208. package/src/private/renderer/errorhandling/ErrorHandlers.js +7 -4
  209. package/src/private/specs_DEPRECATED/modules/NativeAccessibilityManager.js +1 -1
  210. package/src/private/specs_DEPRECATED/modules/NativeAnimatedModule.js +4 -0
  211. package/src/private/specs_DEPRECATED/modules/NativeDevLoadingView.js +1 -0
  212. package/src/private/webapis/dom/events/CustomEvent.js +3 -3
  213. package/src/private/webapis/dom/nodes/internals/ReactNativeDocumentElementInstanceHandle.js +1 -1
  214. package/src/private/webapis/dom/nodes/internals/ReactNativeDocumentInstanceHandle.js +1 -1
  215. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +29 -29
  216. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +1 -1
  217. package/src/private/webapis/dom/oldstylecollections/NodeList.js +2 -2
  218. package/src/private/webapis/geometry/DOMRectReadOnly.js +1 -1
  219. package/src/private/webapis/html/events/MessageEvent.js +3 -3
  220. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +3 -3
  221. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +53 -5
  222. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +2 -2
  223. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +4 -4
  224. package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +1 -1
  225. package/src/private/webapis/mutationobserver/MutationObserver.js +1 -1
  226. package/src/private/webapis/mutationobserver/MutationRecord.js +1 -1
  227. package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +4 -4
  228. package/src/private/webapis/performance/Performance.js +1 -1
  229. package/src/private/webapis/performance/UserTiming.js +1 -1
  230. package/src/private/webapis/performance/specs/NativePerformance.js +3 -3
  231. package/src/private/webapis/structuredClone/structuredClone.js +3 -3
  232. package/src/types/globals.d.ts +30 -1
  233. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/image/conversions.h +0 -178
  234. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/imagemanager/primitives.h +0 -183
  235. package/Shared/Modules/WebSocketTurboModule.h +0 -71
  236. package/src/private/devsupport/devmenu/elementinspector/NetworkOverlay.js +0 -628
  237. package/src/private/devsupport/devmenu/perfmonitor/PerformanceOverlay.js +0 -66
@@ -12,8 +12,15 @@ import typeof {enable} from 'promise/setimmediate/rejection-tracking';
12
12
 
13
13
  import ExceptionsManager from './Core/ExceptionsManager';
14
14
 
15
- let rejectionTrackingOptions: $NonMaybeType<Parameters<enable>[0]> = {
15
+ const rejectionTrackingOptions: NonNullable<Parameters<enable>[0]> = {
16
16
  allRejections: true,
17
+ onHandled: id => {
18
+ const warning =
19
+ `Promise rejection handled (id: ${id})\n` +
20
+ 'This means you can ignore any previous messages of the form ' +
21
+ `"Uncaught (in promise, id: ${id})"`;
22
+ console.warn(warning);
23
+ },
17
24
  onUnhandled: (id, rejection) => {
18
25
  let message: string;
19
26
 
@@ -46,13 +53,6 @@ let rejectionTrackingOptions: $NonMaybeType<Parameters<enable>[0]> = {
46
53
  false /* isFatal */,
47
54
  );
48
55
  },
49
- onHandled: id => {
50
- const warning =
51
- `Promise rejection handled (id: ${id})\n` +
52
- 'This means you can ignore any previous messages of the form ' +
53
- `"Uncaught (in promise, id: ${id})"`;
54
- console.warn(warning);
55
- },
56
56
  };
57
57
 
58
58
  export default rejectionTrackingOptions;
@@ -9,30 +9,30 @@
9
9
  */
10
10
 
11
11
  // From @react-native/js-polyfills
12
- type ErrorHandler = (error: mixed, isFatal: boolean) => void;
13
- type Fn<Args: $ReadOnlyArray<mixed>, Return> = (...Args) => Return;
12
+ type ErrorHandler = (error: unknown, isFatal: boolean) => void;
13
+ type Fn<Args: $ReadOnlyArray<unknown>, Return> = (...Args) => Return;
14
14
  export type ErrorUtils = {
15
- applyWithGuard<TArgs: $ReadOnlyArray<mixed>, TOut>(
15
+ applyWithGuard<TArgs: $ReadOnlyArray<unknown>, TOut>(
16
16
  fun: Fn<TArgs, TOut>,
17
- context?: mixed,
17
+ context?: unknown,
18
18
  args?: ?TArgs,
19
19
  unused_onError?: null,
20
20
  unused_name?: ?string,
21
21
  ): ?TOut,
22
- applyWithGuardIfNeeded<TArgs: $ReadOnlyArray<mixed>, TOut>(
22
+ applyWithGuardIfNeeded<TArgs: $ReadOnlyArray<unknown>, TOut>(
23
23
  fun: Fn<TArgs, TOut>,
24
- context?: mixed,
24
+ context?: unknown,
25
25
  args?: ?TArgs,
26
26
  ): ?TOut,
27
27
  getGlobalHandler(): ErrorHandler,
28
- guard<TArgs: $ReadOnlyArray<mixed>, TOut>(
28
+ guard<TArgs: $ReadOnlyArray<unknown>, TOut>(
29
29
  fun: Fn<TArgs, TOut>,
30
30
  name?: ?string,
31
- context?: mixed,
31
+ context?: unknown,
32
32
  ): ?(...TArgs) => ?TOut,
33
33
  inGuard(): boolean,
34
- reportError(error: mixed): void,
35
- reportFatalError(error: mixed): void,
34
+ reportError(error: unknown): void,
35
+ reportFatalError(error: unknown): void,
36
36
  setGlobalHandler(fun: ErrorHandler): void,
37
37
  };
38
38
 
@@ -20,8 +20,8 @@ export interface IEventEmitter<
20
20
  > {
21
21
  addListener<TEvent: $Keys<TEventToArgsMap>>(
22
22
  eventType: TEvent,
23
- listener: (...args: TEventToArgsMap[TEvent]) => mixed,
24
- context?: mixed,
23
+ listener: (...args: TEventToArgsMap[TEvent]) => unknown,
24
+ context?: unknown,
25
25
  ): EventSubscription;
26
26
 
27
27
  emit<TEvent: $Keys<TEventToArgsMap>>(
@@ -35,8 +35,8 @@ export interface IEventEmitter<
35
35
  }
36
36
 
37
37
  interface Registration<TArgs> {
38
- +context: mixed;
39
- +listener: (...args: TArgs) => mixed;
38
+ +context: unknown;
39
+ +listener: (...args: TArgs) => unknown;
40
40
  +remove: () => void;
41
41
  }
42
42
 
@@ -85,8 +85,8 @@ export default class EventEmitter<
85
85
  */
86
86
  addListener<TEvent: $Keys<TEventToArgsMap>>(
87
87
  eventType: TEvent,
88
- listener: (...args: TEventToArgsMap[TEvent]) => mixed,
89
- context: mixed,
88
+ listener: (...args: TEventToArgsMap[TEvent]) => unknown,
89
+ context: unknown,
90
90
  ): EventSubscription {
91
91
  if (typeof listener !== 'function') {
92
92
  throw new TypeError(
@@ -226,6 +226,11 @@ winrt::hstring ViewProps::AccessibilityLabel() noexcept {
226
226
  return m_viewProps ? winrt::to_hstring(m_viewProps->accessibilityLabel) : winrt::hstring{};
227
227
  }
228
228
 
229
+ winrt::Microsoft::ReactNative::Overflow ViewProps::Overflow() noexcept {
230
+ return m_viewProps ? static_cast<winrt::Microsoft::ReactNative::Overflow>(m_viewProps->yogaStyle.overflow())
231
+ : winrt::Microsoft::ReactNative::Overflow::Visible;
232
+ }
233
+
229
234
  ImageProps::ImageProps(facebook::react::SharedViewProps props) noexcept : Super(props) {}
230
235
 
231
236
  winrt::Windows::Foundation::Collections::IVectorView<winrt::Microsoft::ReactNative::ImageSource>
@@ -99,6 +99,7 @@ struct ViewProps : ViewPropsT<ViewProps> {
99
99
  winrt::Microsoft::ReactNative::Color BackgroundColor() noexcept;
100
100
  winrt::hstring TestId() noexcept;
101
101
  winrt::hstring AccessibilityLabel() noexcept;
102
+ winrt::Microsoft::ReactNative::Overflow Overflow() noexcept;
102
103
 
103
104
  protected:
104
105
  facebook::react::SharedViewProps m_props;
@@ -2,6 +2,9 @@
2
2
  #include "pch.h"
3
3
  #include "CompositionContextHelper.h"
4
4
  #include <algorithm>
5
+ #include <cassert>
6
+ #include <exception>
7
+ #include <vector>
5
8
  #if __has_include("Composition.Experimental.SystemCompositionContextHelper.g.cpp")
6
9
  #include "Composition.Experimental.SystemCompositionContextHelper.g.cpp"
7
10
  #endif
@@ -431,30 +434,43 @@ struct CompVisualImpl {
431
434
  void InsertAt(
432
435
  const winrt::Microsoft::ReactNative::Composition::Experimental::IVisual &visual,
433
436
  uint32_t index) noexcept {
437
+ if (index > m_childrenCache.size()) {
438
+ std::terminate();
439
+ }
434
440
  auto containerChildren = InnerVisual().as<typename TTypeRedirects::ContainerVisual>().Children();
435
441
  auto compVisual = TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
436
442
  if (index == 0) {
437
443
  containerChildren.InsertAtBottom(compVisual);
438
- return;
444
+ } else {
445
+ auto insertAfter = containerChildren.First();
446
+ for (uint32_t i = 1; i < index; i++)
447
+ insertAfter.MoveNext();
448
+ containerChildren.InsertAbove(compVisual, insertAfter.Current());
449
+ }
450
+ if (index >= m_childrenCache.size()) {
451
+ m_childrenCache.push_back(visual);
452
+ } else {
453
+ m_childrenCache.insert(m_childrenCache.begin() + index, visual);
439
454
  }
440
- auto insertAfter = containerChildren.First();
441
- for (uint32_t i = 1; i < index; i++)
442
- insertAfter.MoveNext();
443
- containerChildren.InsertAbove(compVisual, insertAfter.Current());
444
455
  }
445
456
 
446
457
  void Remove(const winrt::Microsoft::ReactNative::Composition::Experimental::IVisual &visual) noexcept {
447
458
  auto compVisual = TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
448
459
  auto containerChildren = InnerVisual().as<typename TTypeRedirects::ContainerVisual>().Children();
449
460
  containerChildren.Remove(compVisual);
461
+ auto it = std::find_if(
462
+ m_childrenCache.begin(), m_childrenCache.end(), [&visual](const auto &cached) { return cached == visual; });
463
+ if (it != m_childrenCache.end()) {
464
+ m_childrenCache.erase(it);
465
+ }
450
466
  }
451
467
 
452
468
  winrt::Microsoft::ReactNative::Composition::Experimental::IVisual GetAt(uint32_t index) noexcept {
453
- auto containerChildren = m_visual.as<typename TTypeRedirects::ContainerVisual>().Children();
454
- auto it = containerChildren.First();
455
- for (uint32_t i = 0; i < index; i++)
456
- it.MoveNext();
457
- return TTypeRedirects::CompositionContextHelper::CreateVisual(it.Current());
469
+ if (index < m_childrenCache.size()) {
470
+ return m_childrenCache[index];
471
+ }
472
+ assert(false && "GetAt called with out-of-range index");
473
+ return nullptr;
458
474
  }
459
475
 
460
476
  void SetClippingPath(ID2D1Geometry *clippingPath) noexcept {
@@ -534,6 +550,7 @@ struct CompVisualImpl {
534
550
 
535
551
  protected:
536
552
  TVisual m_visual;
553
+ std::vector<winrt::Microsoft::ReactNative::Composition::Experimental::IVisual> m_childrenCache;
537
554
  };
538
555
 
539
556
  template <typename TTypeRedirects>
@@ -848,30 +865,43 @@ struct CompScrollerVisual : winrt::implements<
848
865
  void InsertAt(
849
866
  const winrt::Microsoft::ReactNative::Composition::Experimental::IVisual &visual,
850
867
  uint32_t index) noexcept {
868
+ if (index > m_childrenCache.size()) {
869
+ std::terminate();
870
+ }
851
871
  auto containerChildren = m_contentVisual.Children();
852
872
  auto compVisual = TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
853
873
  if (index == 0) {
854
874
  containerChildren.InsertAtBottom(compVisual);
855
- return;
875
+ } else {
876
+ auto insertAfter = containerChildren.First();
877
+ for (uint32_t i = 1; i < index; i++)
878
+ insertAfter.MoveNext();
879
+ containerChildren.InsertAbove(compVisual, insertAfter.Current());
880
+ }
881
+ if (index >= m_childrenCache.size()) {
882
+ m_childrenCache.push_back(visual);
883
+ } else {
884
+ m_childrenCache.insert(m_childrenCache.begin() + index, visual);
856
885
  }
857
- auto insertAfter = containerChildren.First();
858
- for (uint32_t i = 1; i < index; i++)
859
- insertAfter.MoveNext();
860
- containerChildren.InsertAbove(compVisual, insertAfter.Current());
861
886
  }
862
887
 
863
888
  void Remove(const winrt::Microsoft::ReactNative::Composition::Experimental::IVisual &visual) noexcept {
864
889
  auto compVisual = TTypeRedirects::CompositionContextHelper::InnerVisual(visual);
865
890
  auto containerChildren = m_contentVisual.Children();
866
891
  containerChildren.Remove(compVisual);
892
+ auto it = std::find_if(
893
+ m_childrenCache.begin(), m_childrenCache.end(), [&visual](const auto &cached) { return cached == visual; });
894
+ if (it != m_childrenCache.end()) {
895
+ m_childrenCache.erase(it);
896
+ }
867
897
  }
868
898
 
869
899
  winrt::Microsoft::ReactNative::Composition::Experimental::IVisual GetAt(uint32_t index) noexcept {
870
- auto containerChildren = m_visual.as<typename TTypeRedirects::ContainerVisual>().Children();
871
- auto it = containerChildren.First();
872
- for (uint32_t i = 0; i < index; i++)
873
- it.MoveNext();
874
- return TTypeRedirects::CompositionContextHelper::CreateVisual(it.Current());
900
+ if (index < m_childrenCache.size()) {
901
+ return m_childrenCache[index];
902
+ }
903
+ assert(false && "GetAt called with out-of-range index");
904
+ return nullptr;
875
905
  }
876
906
 
877
907
  void Brush(const winrt::Microsoft::ReactNative::Composition::Experimental::IBrush &brush) noexcept {
@@ -1255,6 +1285,12 @@ struct CompScrollerVisual : winrt::implements<
1255
1285
  std::sort(snapPositions.begin(), snapPositions.end());
1256
1286
  snapPositions.erase(std::unique(snapPositions.begin(), snapPositions.end()), snapPositions.end());
1257
1287
 
1288
+ // Skip reconfiguration if snap points haven't changed
1289
+ if (snapPositions == m_previousSnapPositions) {
1290
+ return;
1291
+ }
1292
+ m_previousSnapPositions = snapPositions;
1293
+
1258
1294
  std::vector<typename TTypeRedirects::InteractionTrackerInertiaRestingValue> restingValues;
1259
1295
 
1260
1296
  for (size_t i = 0; i < snapPositions.size(); ++i) {
@@ -1384,6 +1420,7 @@ struct CompScrollerVisual : winrt::implements<
1384
1420
  winrt::Microsoft::ReactNative::Composition::Experimental::SnapPointsAlignment m_snapToAlignment{
1385
1421
  winrt::Microsoft::ReactNative::Composition::Experimental::SnapPointsAlignment::Near};
1386
1422
  std::vector<float> m_snapToOffsets;
1423
+ std::vector<float> m_previousSnapPositions;
1387
1424
  bool m_inertia{false};
1388
1425
  bool m_custom{false};
1389
1426
  bool m_interacting{false};
@@ -1410,6 +1447,7 @@ struct CompScrollerVisual : winrt::implements<
1410
1447
  typename TTypeRedirects::SpriteVisual m_contentVisual{nullptr};
1411
1448
  typename TTypeRedirects::InteractionTracker m_interactionTracker{nullptr};
1412
1449
  typename TTypeRedirects::VisualInteractionSource m_visualInteractionSource{nullptr};
1450
+ std::vector<winrt::Microsoft::ReactNative::Composition::Experimental::IVisual> m_childrenCache;
1413
1451
  };
1414
1452
  using WindowsCompScrollerVisual = CompScrollerVisual<WindowsTypeRedirects>;
1415
1453
  using MicrosoftCompScrollerVisual = CompScrollerVisual<MicrosoftTypeRedirects>;
@@ -1064,6 +1064,11 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::get_SelectionContainer(I
1064
1064
  *pRetVal = nullptr;
1065
1065
 
1066
1066
  auto selectionContainerView = GetSelectionContainer();
1067
+ // Per UIA spec, returning S_OK with *pRetVal == nullptr is correct when the element
1068
+ // is not contained within a selection container.
1069
+ if (!selectionContainerView)
1070
+ return S_OK;
1071
+
1067
1072
  auto uiaProvider =
1068
1073
  winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(selectionContainerView)
1069
1074
  ->EnsureUiaProvider();