react-native-windows 0.74.11 → 0.74.12

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 (35) hide show
  1. package/Common/Common.vcxproj +8 -0
  2. package/Directory.Build.targets +5 -0
  3. package/Folly/Folly.vcxproj +10 -2
  4. package/Folly/Folly.vcxproj.filters +0 -7
  5. package/Libraries/Text/Text.windows.js +1 -0
  6. package/Microsoft.ReactNative/Composition.Input.idl +3 -3
  7. package/Microsoft.ReactNative/CompositionSwitcher.idl +1 -0
  8. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.cpp +3 -0
  9. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +2 -2
  10. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +4 -4
  11. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +10 -0
  12. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +16 -27
  13. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +1 -1
  14. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +81 -47
  15. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +4 -0
  16. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +19 -15
  17. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +4 -2
  18. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +42 -5
  19. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +22 -16
  20. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +30 -6
  21. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +2 -0
  22. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +3 -2
  23. package/Microsoft.ReactNative/packages.lock.json +10 -0
  24. package/PropertySheets/ARM64EC.props +13 -0
  25. package/PropertySheets/Application/ARM64EC.props +13 -0
  26. package/PropertySheets/DynamicLibrary/ARM64EC.props +13 -0
  27. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  28. package/PropertySheets/JSEngine.props +2 -0
  29. package/PropertySheets/StaticLibrary/ARM64EC.props +13 -0
  30. package/ReactCommon/ReactCommon.vcxproj +9 -1
  31. package/ReactCommon/ReactCommon.vcxproj.filters +16 -12
  32. package/Scripts/OfficeReact.Win32.nuspec +16 -18
  33. package/Scripts/StripAdditionalPlatformsFromNuspec.ps1 +1 -1
  34. package/fmt/fmt.vcxproj +9 -1
  35. package/package.json +1 -1
@@ -11,10 +11,18 @@
11
11
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
12
12
  <Import Project="$(ReactNativeWindowsDir)PropertySheets\React.Cpp.props" />
13
13
  <ItemGroup Label="ProjectConfigurations">
14
+ <ProjectConfiguration Include="Debug|ARM64EC">
15
+ <Configuration>Debug</Configuration>
16
+ <Platform>ARM64EC</Platform>
17
+ </ProjectConfiguration>
14
18
  <ProjectConfiguration Include="Debug|x64">
15
19
  <Configuration>Debug</Configuration>
16
20
  <Platform>x64</Platform>
17
21
  </ProjectConfiguration>
22
+ <ProjectConfiguration Include="Release|ARM64EC">
23
+ <Configuration>Release</Configuration>
24
+ <Platform>ARM64EC</Platform>
25
+ </ProjectConfiguration>
18
26
  <ProjectConfiguration Include="Release|x64">
19
27
  <Configuration>Release</Configuration>
20
28
  <Platform>x64</Platform>
@@ -21,4 +21,9 @@
21
21
  <MSBuild Projects="$(MSBuildProjectFile)" Targets="Restore" Properties="RestoreProjectStyle=PackagesConfig;RestorePackagesConfig=true;RestoreUseStaticGraphEvaluation=false" />
22
22
  </Target>
23
23
 
24
+ <PropertyGroup Label="WindowsAppSDKOverrides" Condition="'$(Platform)' == 'ARM64EC'">
25
+ <Ixp-Platform>win10-x64</Ixp-Platform>
26
+ <_WindowsAppSDKFoundationPlatform>x64</_WindowsAppSDKFoundationPlatform>
27
+ <_MrtCoreRuntimeIdentifier>x64</_MrtCoreRuntimeIdentifier>
28
+ </PropertyGroup>
24
29
  </Project>
@@ -17,6 +17,10 @@
17
17
  <Configuration>Debug</Configuration>
18
18
  <Platform>ARM64</Platform>
19
19
  </ProjectConfiguration>
20
+ <ProjectConfiguration Include="Debug|ARM64EC">
21
+ <Configuration>Debug</Configuration>
22
+ <Platform>ARM64EC</Platform>
23
+ </ProjectConfiguration>
20
24
  <ProjectConfiguration Include="Release|ARM64">
21
25
  <Configuration>Release</Configuration>
22
26
  <Platform>ARM64</Platform>
@@ -25,6 +29,10 @@
25
29
  <Configuration>Debug</Configuration>
26
30
  <Platform>x64</Platform>
27
31
  </ProjectConfiguration>
32
+ <ProjectConfiguration Include="Release|ARM64EC">
33
+ <Configuration>Release</Configuration>
34
+ <Platform>ARM64EC</Platform>
35
+ </ProjectConfiguration>
28
36
  <ProjectConfiguration Include="Release|x64">
29
37
  <Configuration>Release</Configuration>
30
38
  <Platform>x64</Platform>
@@ -279,7 +287,7 @@
279
287
  SourceUrl="https://github.com/facebook/folly/archive/v$(FollyVersion).zip"
280
288
  DestinationFileName="$(FollyZipFile)"
281
289
  DestinationFolder="$(FollyZipDir)"
282
- Retries="10"/>
290
+ Retries="10" />
283
291
  </Target>
284
292
  <Target Name="UnzipFolly" BeforeTargets="PrepareForBuild" DependsOnTargets="DownloadFolly">
285
293
  <Message Condition="!Exists('$(FollyDir)folly\dynamic.h')" Importance="High" Text="Unzipping folly to $([MSBuild]::NormalizePath($(FollyDir)..))." />
@@ -328,4 +336,4 @@
328
336
  <ItemGroup>
329
337
  <ProjectReference Include="..\Fmt\Fmt.vcxproj" Project="{14b93DC8-FD93-4A6D-81CB-8BC96644501C}" />
330
338
  </ItemGroup>
331
- </Project>
339
+ </Project>
@@ -83,13 +83,6 @@
83
83
  </ClCompile>
84
84
  <ClCompile Include="pch.cpp" />
85
85
  <ClCompile Include="$(FollyDir)\folly\system\AtFork.cpp" />
86
- <ClCompile Include="$(FollyDir)\folly\SharedMutex.cpp" />
87
- <ClCompile Include="$(FollyDir)\folly\concurrency\CacheLocality.cpp" />
88
- <ClCompile Include="$(FollyDir)\folly\detail\Futex.cpp" />
89
- <ClCompile Include="$(FollyDir)\folly\synchronization\ParkingLot.cpp" />
90
- <ClCompile Include="$(FollyDir)\folly\synchronization\SanitizeThread.cpp" />
91
- <ClCompile Include="$(FollyDir)\folly\portability\SysResource.cpp" />
92
- <ClCompile Include="$(FollyDir)\folly\portability\Unistd.cpp" />
93
86
  </ItemGroup>
94
87
  <ItemGroup>
95
88
  <ClInclude Include="$(FollyDir)\folly\portability\Asm.h">
@@ -279,6 +279,7 @@ const Text: React.AbstractComponent<
279
279
  } else {
280
280
  let styleProps: ViewStyleProp = (restProps.style: any);
281
281
  if (
282
+ global.RN$Bridgeless !== true && // [Windows] Fabric text handles borders, but on paper we need to wrap it in an extra view
282
283
  styleProps &&
283
284
  styleProps.borderColor &&
284
285
  (styleProps.borderWidth ||
@@ -8,7 +8,7 @@ namespace Microsoft.ReactNative.Composition.Input
8
8
  {
9
9
  interface KeyboardSource
10
10
  {
11
- Windows.UI.Core.CoreVirtualKeyStates GetKeyState(Windows.System.VirtualKey key);
11
+ Microsoft.UI.Input.VirtualKeyStates GetKeyState(Windows.System.VirtualKey key);
12
12
  }
13
13
 
14
14
  interface RoutedEventArgs
@@ -21,14 +21,14 @@ namespace Microsoft.ReactNative.Composition.Input
21
21
  String DeviceId { get; };
22
22
  Boolean Handled { get; set; };
23
23
  Windows.System.VirtualKey Key { get; };
24
- Windows.UI.Core.CorePhysicalKeyStatus KeyStatus { get; };
24
+ Microsoft.UI.Input.PhysicalKeyStatus KeyStatus { get; };
25
25
  Windows.System.VirtualKey OriginalKey { get; };
26
26
  }
27
27
 
28
28
  interface CharacterReceivedRoutedEventArgs requires RoutedEventArgs
29
29
  {
30
30
  Boolean Handled { get; set; };
31
- Windows.UI.Core.CorePhysicalKeyStatus KeyStatus { get; };
31
+ Microsoft.UI.Input.PhysicalKeyStatus KeyStatus { get; };
32
32
  Int32 KeyCode { get; };
33
33
  };
34
34
 
@@ -106,6 +106,7 @@ namespace Microsoft.ReactNative.Composition.Experimental
106
106
  interface IScrollVisual requires IVisual
107
107
  {
108
108
  void Brush(IBrush brush);
109
+ void ScrollEnabled(Boolean isScrollEnabled);
109
110
  event Windows.Foundation.EventHandler<IScrollPositionChangedArgs> ScrollPositionChanged;
110
111
  void ContentSize(Windows.Foundation.Numerics.Vector2 size);
111
112
  Windows.Foundation.Numerics.Vector3 ScrollPosition { get; };
@@ -120,6 +120,9 @@ void ComponentViewRegistry::enqueueComponentViewWithComponentHandle(
120
120
  ComponentViewDescriptor componentViewDescriptor) noexcept {
121
121
  assert(m_registry.find(tag) != m_registry.end());
122
122
 
123
+ winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(componentViewDescriptor.view)
124
+ ->prepareForRecycle();
125
+
123
126
  m_registry.erase(tag);
124
127
  }
125
128
  } // namespace Microsoft::ReactNative
@@ -68,7 +68,7 @@ winrt::Windows::System::VirtualKey KeyRoutedEventArgs::Key() noexcept {
68
68
  return m_key;
69
69
  }
70
70
 
71
- winrt::Windows::UI::Core::CorePhysicalKeyStatus KeyRoutedEventArgs::KeyStatus() noexcept {
71
+ winrt::Microsoft::UI::Input::PhysicalKeyStatus KeyRoutedEventArgs::KeyStatus() noexcept {
72
72
  return m_keyStatus;
73
73
  }
74
74
 
@@ -118,7 +118,7 @@ void CharacterReceivedRoutedEventArgs::Handled(bool value) noexcept {
118
118
  int32_t CharacterReceivedRoutedEventArgs::KeyCode() noexcept {
119
119
  return m_keycode;
120
120
  }
121
- winrt::Windows::UI::Core::CorePhysicalKeyStatus CharacterReceivedRoutedEventArgs::KeyStatus() noexcept {
121
+ winrt::Microsoft::UI::Input::PhysicalKeyStatus CharacterReceivedRoutedEventArgs::KeyStatus() noexcept {
122
122
  return m_keyStatus;
123
123
  }
124
124
 
@@ -31,14 +31,14 @@ struct KeyRoutedEventArgs : winrt::implements<
31
31
  bool Handled() noexcept;
32
32
  void Handled(bool value) noexcept;
33
33
  winrt::Windows::System::VirtualKey Key() noexcept;
34
- winrt::Windows::UI::Core::CorePhysicalKeyStatus KeyStatus() noexcept;
34
+ winrt::Microsoft::UI::Input::PhysicalKeyStatus KeyStatus() noexcept;
35
35
  winrt::Windows::System::VirtualKey OriginalKey() noexcept;
36
36
 
37
37
  private:
38
38
  facebook::react::Tag m_tag{-1};
39
39
  bool m_handled{false};
40
40
  winrt::Windows::System::VirtualKey m_key;
41
- winrt::Windows::UI::Core::CorePhysicalKeyStatus m_keyStatus;
41
+ winrt::Microsoft::UI::Input::PhysicalKeyStatus m_keyStatus;
42
42
  };
43
43
 
44
44
  struct CharacterReceivedRoutedEventArgs
@@ -57,13 +57,13 @@ struct CharacterReceivedRoutedEventArgs
57
57
  bool Handled() noexcept;
58
58
  void Handled(bool value) noexcept;
59
59
  int32_t KeyCode() noexcept;
60
- winrt::Windows::UI::Core::CorePhysicalKeyStatus KeyStatus() noexcept;
60
+ winrt::Microsoft::UI::Input::PhysicalKeyStatus KeyStatus() noexcept;
61
61
 
62
62
  private:
63
63
  facebook::react::Tag m_tag{-1};
64
64
  bool m_handled{false};
65
65
  int32_t m_keycode;
66
- winrt::Windows::UI::Core::CorePhysicalKeyStatus m_keyStatus;
66
+ winrt::Microsoft::UI::Input::PhysicalKeyStatus m_keyStatus;
67
67
  };
68
68
 
69
69
  struct Pointer : PointerT<Pointer> {
@@ -795,6 +795,16 @@ struct CompScrollerVisual : winrt::implements<
795
795
  m_visual.Brush(TTypeRedirects::CompositionContextHelper::InnerBrush(brush));
796
796
  }
797
797
 
798
+ void ScrollEnabled(bool isScrollEnabled) noexcept {
799
+ if (isScrollEnabled) {
800
+ m_visualInteractionSource.ManipulationRedirectionMode(
801
+ TTypeRedirects::VisualInteractionSourceRedirectionMode::CapableTouchpadAndPointerWheel);
802
+ } else {
803
+ m_visualInteractionSource.ManipulationRedirectionMode(
804
+ TTypeRedirects::VisualInteractionSourceRedirectionMode::Off);
805
+ }
806
+ }
807
+
798
808
  void Opacity(float opacity) noexcept {
799
809
  m_visual.Opacity(opacity);
800
810
  }
@@ -101,9 +101,9 @@ struct CompositionKeyboardSource
101
101
  : winrt::implements<CompositionKeyboardSource, winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource> {
102
102
  CompositionKeyboardSource(CompositionEventHandler *outer) : m_outer(outer) {}
103
103
 
104
- winrt::Windows::UI::Core::CoreVirtualKeyStates GetKeyState(winrt::Windows::System::VirtualKey key) noexcept {
104
+ winrt::Microsoft::UI::Input::VirtualKeyStates GetKeyState(winrt::Windows::System::VirtualKey key) noexcept {
105
105
  if (!m_outer)
106
- return winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
106
+ return winrt::Microsoft::UI::Input::VirtualKeyStates::None;
107
107
  return m_outer->GetKeyState(key);
108
108
  }
109
109
 
@@ -121,23 +121,11 @@ struct CompositionInputKeyboardSource : winrt::implements<
121
121
  winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource> {
122
122
  CompositionInputKeyboardSource(winrt::Microsoft::UI::Input::InputKeyboardSource source) : m_source(source) {}
123
123
 
124
- winrt::Windows::UI::Core::CoreVirtualKeyStates GetKeyState(winrt::Windows::System::VirtualKey key) noexcept {
124
+ winrt::Microsoft::UI::Input::VirtualKeyStates GetKeyState(winrt::Windows::System::VirtualKey key) noexcept {
125
125
  if (!m_source)
126
- return winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
127
-
128
- static_assert(
129
- static_cast<winrt::Windows::UI::Core::CoreVirtualKeyStates>(
130
- winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ==
131
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down);
132
- static_assert(
133
- static_cast<winrt::Windows::UI::Core::CoreVirtualKeyStates>(
134
- winrt::Microsoft::UI::Input::VirtualKeyStates::Locked) ==
135
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Locked);
136
- static_assert(
137
- static_cast<winrt::Windows::UI::Core::CoreVirtualKeyStates>(
138
- winrt::Microsoft::UI::Input::VirtualKeyStates::None) ==
139
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None);
140
- return static_cast<winrt::Windows::UI::Core::CoreVirtualKeyStates>(m_source.GetKeyState(key));
126
+ return winrt::Microsoft::UI::Input::VirtualKeyStates::None;
127
+
128
+ return m_source.GetKeyState(key);
141
129
  }
142
130
 
143
131
  void Disconnect() noexcept {
@@ -360,16 +348,15 @@ void CompositionEventHandler::onPointerWheelChanged(
360
348
  }
361
349
  }
362
350
 
363
- winrt::Windows::UI::Core::CoreVirtualKeyStates CompositionEventHandler::GetKeyState(
351
+ winrt::Microsoft::UI::Input::VirtualKeyStates CompositionEventHandler::GetKeyState(
364
352
  winrt::Windows::System::VirtualKey key) noexcept {
365
- winrt::Windows::UI::Core::CoreVirtualKeyStates coreKeyState = winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
353
+ winrt::Microsoft::UI::Input::VirtualKeyStates coreKeyState = winrt::Microsoft::UI::Input::VirtualKeyStates::None;
366
354
  SHORT keyState = ::GetKeyState(static_cast<int>(key));
367
355
  if (keyState & 0x01) {
368
- coreKeyState = winrt::Windows::UI::Core::CoreVirtualKeyStates::Locked;
356
+ coreKeyState = winrt::Microsoft::UI::Input::VirtualKeyStates::Locked;
369
357
  }
370
358
  if (keyState & 0x8000) {
371
- coreKeyState = static_cast<winrt::Windows::UI::Core::CoreVirtualKeyStates>(
372
- static_cast<int>(coreKeyState) | static_cast<int>(winrt::Windows::UI::Core::CoreVirtualKeyStates::Down));
359
+ coreKeyState = coreKeyState | winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
373
360
  }
374
361
 
375
362
  return coreKeyState;
@@ -510,10 +497,12 @@ void CompositionEventHandler::onKeyDown(
510
497
  return;
511
498
  }
512
499
 
513
- bool fShift = source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) ==
514
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down;
515
- bool fCtrl = source.GetKeyState(winrt::Windows::System::VirtualKey::Control) ==
516
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down;
500
+ bool fShift =
501
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) &
502
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
503
+ bool fCtrl =
504
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Control) &
505
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
517
506
 
518
507
  if (fShift && fCtrl && args.Key() == static_cast<winrt::Windows::System::VirtualKey>(VkKeyScanA('d')) &&
519
508
  Mso::React::ReactOptions::UseDeveloperSupport(m_context.Properties().Handle())) {
@@ -36,7 +36,7 @@ class CompositionEventHandler {
36
36
 
37
37
  int64_t SendMessage(HWND hwnd, uint32_t msg, uint64_t wParam, int64_t lParam) noexcept;
38
38
  void RemoveTouchHandlers();
39
- winrt::Windows::UI::Core::CoreVirtualKeyStates GetKeyState(winrt::Windows::System::VirtualKey key) noexcept;
39
+ winrt::Microsoft::UI::Input::VirtualKeyStates GetKeyState(winrt::Windows::System::VirtualKey key) noexcept;
40
40
 
41
41
  bool CapturePointer(
42
42
  const winrt::Microsoft::ReactNative::Composition::Input::Pointer &pointer,
@@ -16,6 +16,7 @@
16
16
  #include <Utils/ValueUtils.h>
17
17
  #include <Views/FrameworkElementTransferProperties.h>
18
18
  #include <winrt/Microsoft.ReactNative.Composition.Experimental.h>
19
+ #include <winrt/Microsoft.UI.Input.h>
19
20
  #include <winrt/Windows.UI.Composition.h>
20
21
  #include "CompositionContextHelper.h"
21
22
  #include "CompositionDynamicAutomationProvider.h"
@@ -179,11 +180,46 @@ const facebook::react::LayoutMetrics &ComponentView::layoutMetrics() const noexc
179
180
  return m_layoutMetrics;
180
181
  }
181
182
 
183
+ void ComponentView::FinalizeTransform(
184
+ facebook::react::LayoutMetrics const &layoutMetrics,
185
+ const facebook::react::ViewProps &viewProps) noexcept {
186
+ const auto resolveTransformMatrix = viewProps.resolveTransform(layoutMetrics);
187
+ winrt::Windows::Foundation::Numerics::float4x4 transformMatrix;
188
+ transformMatrix.m11 = resolveTransformMatrix.matrix[0];
189
+ transformMatrix.m12 = resolveTransformMatrix.matrix[1];
190
+ transformMatrix.m13 = resolveTransformMatrix.matrix[2];
191
+ transformMatrix.m14 = resolveTransformMatrix.matrix[3];
192
+ transformMatrix.m21 = resolveTransformMatrix.matrix[4];
193
+ transformMatrix.m22 = resolveTransformMatrix.matrix[5];
194
+ transformMatrix.m23 = resolveTransformMatrix.matrix[6];
195
+ transformMatrix.m24 = resolveTransformMatrix.matrix[7];
196
+ transformMatrix.m31 = resolveTransformMatrix.matrix[8];
197
+ transformMatrix.m32 = resolveTransformMatrix.matrix[9];
198
+ transformMatrix.m33 = resolveTransformMatrix.matrix[10];
199
+ transformMatrix.m34 = resolveTransformMatrix.matrix[11];
200
+ transformMatrix.m41 = resolveTransformMatrix.matrix[12];
201
+ transformMatrix.m42 = resolveTransformMatrix.matrix[13];
202
+ transformMatrix.m43 = resolveTransformMatrix.matrix[14];
203
+ transformMatrix.m44 = resolveTransformMatrix.matrix[15];
204
+
205
+ auto centerPointPropSet = EnsureCenterPointPropertySet();
206
+ if (centerPointPropSet) {
207
+ centerPointPropSet.InsertMatrix4x4(L"transform", transformMatrix);
208
+ }
209
+
210
+ EnsureTransformMatrixFacade();
211
+ m_FinalizeTransform = false;
212
+ }
213
+
182
214
  void ComponentView::FinalizeUpdates(winrt::Microsoft::ReactNative::ComponentViewUpdateMask updateMask) noexcept {
183
215
  if ((m_flags & ComponentViewFeatures::NativeBorder) == ComponentViewFeatures::NativeBorder) {
184
216
  finalizeBorderUpdates(m_layoutMetrics, *viewProps());
185
217
  }
186
218
 
219
+ if (m_FinalizeTransform) {
220
+ FinalizeTransform(m_layoutMetrics, *viewProps());
221
+ }
222
+
187
223
  base_type::FinalizeUpdates(updateMask);
188
224
  }
189
225
 
@@ -1245,30 +1281,7 @@ void ComponentView::updateTransformProps(
1245
1281
 
1246
1282
  // Transform - TODO doesn't handle multiple of the same kind of transform -- Doesn't handle hittesting updates
1247
1283
  if (oldViewProps.transform != newViewProps.transform) {
1248
- winrt::Windows::Foundation::Numerics::float4x4 transformMatrix;
1249
- transformMatrix.m11 = newViewProps.transform.matrix[0];
1250
- transformMatrix.m12 = newViewProps.transform.matrix[1];
1251
- transformMatrix.m13 = newViewProps.transform.matrix[2];
1252
- transformMatrix.m14 = newViewProps.transform.matrix[3];
1253
- transformMatrix.m21 = newViewProps.transform.matrix[4];
1254
- transformMatrix.m22 = newViewProps.transform.matrix[5];
1255
- transformMatrix.m23 = newViewProps.transform.matrix[6];
1256
- transformMatrix.m24 = newViewProps.transform.matrix[7];
1257
- transformMatrix.m31 = newViewProps.transform.matrix[8];
1258
- transformMatrix.m32 = newViewProps.transform.matrix[9];
1259
- transformMatrix.m33 = newViewProps.transform.matrix[10];
1260
- transformMatrix.m34 = newViewProps.transform.matrix[11];
1261
- transformMatrix.m41 = newViewProps.transform.matrix[12];
1262
- transformMatrix.m42 = newViewProps.transform.matrix[13];
1263
- transformMatrix.m43 = newViewProps.transform.matrix[14];
1264
- transformMatrix.m44 = newViewProps.transform.matrix[15];
1265
-
1266
- auto centerPointPropSet = EnsureCenterPointPropertySet();
1267
- if (centerPointPropSet) {
1268
- centerPointPropSet.InsertMatrix4x4(L"transform", transformMatrix);
1269
- }
1270
-
1271
- EnsureTransformMatrixFacade();
1284
+ m_FinalizeTransform = true;
1272
1285
  }
1273
1286
  }
1274
1287
 
@@ -1617,7 +1630,10 @@ inline winrt::Windows::System::VirtualKey GetLeftOrRightModifiedKey(
1617
1630
  const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
1618
1631
  winrt::Windows::System::VirtualKey leftKey,
1619
1632
  winrt::Windows::System::VirtualKey rightKey) {
1620
- return (source.GetKeyState(leftKey) == winrt::Windows::UI::Core::CoreVirtualKeyStates::Down) ? leftKey : rightKey;
1633
+ return ((source.GetKeyState(leftKey) & winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ==
1634
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down)
1635
+ ? leftKey
1636
+ : rightKey;
1621
1637
  }
1622
1638
 
1623
1639
  std::string CodeFromVirtualKey(
@@ -1650,16 +1666,20 @@ void ViewComponentView::OnKeyDown(
1650
1666
  const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
1651
1667
  const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept {
1652
1668
  auto eventCode = CodeFromVirtualKey(source, args.Key());
1653
- bool fShift = source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) !=
1654
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
1655
- bool fAlt = source.GetKeyState(winrt::Windows::System::VirtualKey::Menu) !=
1656
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
1657
- bool fCtrl = source.GetKeyState(winrt::Windows::System::VirtualKey::Control) !=
1658
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
1659
- bool fMeta = (source.GetKeyState(winrt::Windows::System::VirtualKey::LeftWindows) !=
1660
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None) ||
1661
- (source.GetKeyState(winrt::Windows::System::VirtualKey::RightWindows) !=
1662
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None);
1669
+ bool fShift =
1670
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) &
1671
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
1672
+ bool fAlt =
1673
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Menu) &
1674
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
1675
+ bool fCtrl =
1676
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Control) &
1677
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
1678
+ bool fMeta =
1679
+ ((source.GetKeyState(winrt::Windows::System::VirtualKey::LeftWindows) &
1680
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ||
1681
+ ((source.GetKeyState(winrt::Windows::System::VirtualKey::RightWindows) &
1682
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down);
1663
1683
 
1664
1684
  if (args.OriginalSource() == Tag() && !args.Handled()) {
1665
1685
  facebook::react::KeyEvent event;
@@ -1668,7 +1688,12 @@ void ViewComponentView::OnKeyDown(
1668
1688
  event.altKey = fAlt;
1669
1689
  event.metaKey = fMeta;
1670
1690
 
1671
- event.key = ::Microsoft::ReactNative::FromVirtualKey(args.Key(), event.shiftKey, !!(GetKeyState(VK_CAPITAL) & 1));
1691
+ event.key = ::Microsoft::ReactNative::FromVirtualKey(
1692
+ args.Key(),
1693
+ event.shiftKey,
1694
+ !!((source.GetKeyState(winrt::Windows::System::VirtualKey::CapitalLock) &
1695
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Locked) ==
1696
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Locked));
1672
1697
  event.code = eventCode;
1673
1698
  m_eventEmitter->onKeyDown(event);
1674
1699
  }
@@ -1689,16 +1714,20 @@ void ViewComponentView::OnKeyUp(
1689
1714
  const winrt::Microsoft::ReactNative::Composition::Input::KeyboardSource &source,
1690
1715
  const winrt::Microsoft::ReactNative::Composition::Input::KeyRoutedEventArgs &args) noexcept {
1691
1716
  auto eventCode = CodeFromVirtualKey(source, args.Key());
1692
- bool fShift = source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) !=
1693
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
1694
- bool fAlt = source.GetKeyState(winrt::Windows::System::VirtualKey::Menu) !=
1695
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
1696
- bool fCtrl = source.GetKeyState(winrt::Windows::System::VirtualKey::Control) !=
1697
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None;
1698
- bool fMeta = (source.GetKeyState(winrt::Windows::System::VirtualKey::LeftWindows) !=
1699
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None) ||
1700
- (source.GetKeyState(winrt::Windows::System::VirtualKey::RightWindows) !=
1701
- winrt::Windows::UI::Core::CoreVirtualKeyStates::None);
1717
+ bool fShift =
1718
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) &
1719
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
1720
+ bool fAlt =
1721
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Menu) &
1722
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
1723
+ bool fCtrl =
1724
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Control) &
1725
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
1726
+ bool fMeta =
1727
+ ((source.GetKeyState(winrt::Windows::System::VirtualKey::LeftWindows) &
1728
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ||
1729
+ ((source.GetKeyState(winrt::Windows::System::VirtualKey::RightWindows) &
1730
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down);
1702
1731
 
1703
1732
  if (args.OriginalSource() == Tag()) {
1704
1733
  facebook::react::KeyEvent event;
@@ -1707,7 +1736,12 @@ void ViewComponentView::OnKeyUp(
1707
1736
  event.altKey = fAlt;
1708
1737
  event.metaKey = fMeta;
1709
1738
 
1710
- event.key = ::Microsoft::ReactNative::FromVirtualKey(args.Key(), event.shiftKey, !!(GetKeyState(VK_CAPITAL) & 1));
1739
+ event.key = ::Microsoft::ReactNative::FromVirtualKey(
1740
+ args.Key(),
1741
+ event.shiftKey,
1742
+ !!((source.GetKeyState(winrt::Windows::System::VirtualKey::CapitalLock) &
1743
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ==
1744
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down));
1711
1745
  event.code = eventCode;
1712
1746
  m_eventEmitter->onKeyUp(event);
1713
1747
  }
@@ -168,7 +168,11 @@ struct ComponentView
168
168
  std::array<winrt::Microsoft::ReactNative::Composition::Experimental::ISpriteVisual, SpecialBorderLayerCount>
169
169
  FindSpecialBorderLayers() const noexcept;
170
170
  void UpdateCenterPropertySet() noexcept;
171
+ void FinalizeTransform(
172
+ facebook::react::LayoutMetrics const &layoutMetrics,
173
+ const facebook::react::ViewProps &viewProps) noexcept;
171
174
 
175
+ bool m_FinalizeTransform{false};
172
176
  ComponentViewFeatures m_flags;
173
177
  void showFocusVisual(bool show) noexcept;
174
178
  winrt::Microsoft::ReactNative::Composition::Experimental::IFocusVisual m_focusVisual{nullptr};
@@ -30,9 +30,9 @@ extern "C" HRESULT WINAPI WICCreateImagingFactory_Proxy(UINT SDKVersion, IWICIma
30
30
 
31
31
  namespace winrt::Microsoft::ReactNative::Composition::implementation {
32
32
 
33
- ImageComponentView::WindowsImageResponseObserver::WindowsImageResponseObserver(ImageComponentView &image) {
34
- m_image.copy_from(&image);
35
- }
33
+ ImageComponentView::WindowsImageResponseObserver::WindowsImageResponseObserver(
34
+ winrt::weak_ref<winrt::Microsoft::ReactNative::Composition::implementation::ImageComponentView> wkImage)
35
+ : m_wkImage(std::move(wkImage)) {}
36
36
 
37
37
  void ImageComponentView::WindowsImageResponseObserver::didReceiveProgress(float progress) const {
38
38
  // TODO progress?
@@ -40,13 +40,20 @@ void ImageComponentView::WindowsImageResponseObserver::didReceiveProgress(float
40
40
 
41
41
  void ImageComponentView::WindowsImageResponseObserver::didReceiveImage(
42
42
  facebook::react::ImageResponse const &imageResponse) const {
43
- auto imageResponseImage = std::static_pointer_cast<ImageResponseImage>(imageResponse.getImage());
44
- m_image->m_reactContext.UIDispatcher().Post(
45
- [imageResponseImage, image = m_image]() { image->didReceiveImage(imageResponseImage); });
43
+ if (auto imgComponentView{m_wkImage.get()}) {
44
+ auto imageResponseImage = std::static_pointer_cast<ImageResponseImage>(imageResponse.getImage());
45
+ imgComponentView->m_reactContext.UIDispatcher().Post([imageResponseImage, wkImage = m_wkImage]() {
46
+ if (auto image{wkImage.get()}) {
47
+ image->didReceiveImage(imageResponseImage);
48
+ }
49
+ });
50
+ }
46
51
  }
47
52
 
48
53
  void ImageComponentView::WindowsImageResponseObserver::didReceiveFailure() const {
49
- m_image->didReceiveFailureFromObserver();
54
+ if (auto imgComponentView{m_wkImage.get()}) {
55
+ imgComponentView->didReceiveFailureFromObserver();
56
+ }
50
57
  }
51
58
 
52
59
  facebook::react::SharedViewProps ImageComponentView::defaultProps() noexcept {
@@ -142,14 +149,7 @@ void ImageComponentView::updateState(
142
149
  auto newImageState = std::static_pointer_cast<facebook::react::ImageShadowNode::ConcreteState const>(state);
143
150
 
144
151
  if (!m_imageResponseObserver) {
145
- // Should ViewComponents enable_shared_from_this? then we don't need this dance to get a shared_ptr
146
- std::shared_ptr<::Microsoft::ReactNative::FabricUIManager> fabricuiManager =
147
- ::Microsoft::ReactNative::FabricUIManager::FromProperties(m_reactContext.Properties());
148
- auto componentViewDescriptor = fabricuiManager->GetViewRegistry().componentViewDescriptorWithTag(m_tag);
149
-
150
- m_imageResponseObserver = std::make_shared<WindowsImageResponseObserver>(
151
- *componentViewDescriptor.view
152
- .as<winrt::Microsoft::ReactNative::Composition::implementation::ImageComponentView>());
152
+ m_imageResponseObserver = std::make_shared<WindowsImageResponseObserver>(get_weak());
153
153
  }
154
154
 
155
155
  setStateAndResubscribeImageResponseObserver(newImageState);
@@ -178,6 +178,10 @@ void ImageComponentView::setStateAndResubscribeImageResponseObserver(
178
178
  }
179
179
  }
180
180
 
181
+ void ImageComponentView::prepareForRecycle() noexcept {
182
+ setStateAndResubscribeImageResponseObserver(nullptr);
183
+ }
184
+
181
185
  winrt::Microsoft::ReactNative::ImageProps ImageComponentView::ImageProps() noexcept {
182
186
  // We do not currently support custom ImageComponentView's
183
187
  // If we did we would need to create a AbiImageProps and possibly return them here
@@ -47,6 +47,7 @@ struct ImageComponentView : ImageComponentViewT<ImageComponentView, ViewComponen
47
47
  override;
48
48
  void updateState(facebook::react::State::Shared const &state, facebook::react::State::Shared const &oldState) noexcept
49
49
  override;
50
+ void prepareForRecycle() noexcept override;
50
51
  void OnRenderingDeviceLost() noexcept override;
51
52
  void onThemeChanged() noexcept override;
52
53
 
@@ -69,13 +70,14 @@ struct ImageComponentView : ImageComponentViewT<ImageComponentView, ViewComponen
69
70
  private:
70
71
  struct WindowsImageResponseObserver : facebook::react::ImageResponseObserver {
71
72
  public:
72
- WindowsImageResponseObserver(ImageComponentView &image);
73
+ WindowsImageResponseObserver(
74
+ winrt::weak_ref<winrt::Microsoft::ReactNative::Composition::implementation::ImageComponentView> wkImage);
73
75
  void didReceiveProgress(float progress) const override;
74
76
  void didReceiveImage(facebook::react::ImageResponse const &imageResponse) const override;
75
77
  void didReceiveFailure() const override;
76
78
 
77
79
  private:
78
- winrt::com_ptr<ImageComponentView> m_image;
80
+ winrt::weak_ref<winrt::Microsoft::ReactNative::Composition::implementation::ImageComponentView> m_wkImage;
79
81
  };
80
82
 
81
83
  void ensureDrawingSurface() noexcept;
@@ -65,13 +65,14 @@ struct ScrollBarComponent {
65
65
 
66
66
  updateShy(true);
67
67
  onScaleChanged();
68
- OnThemeChanged();
68
+ UpdateColorForScrollBarRegions();
69
69
  }
70
70
 
71
- void OnThemeChanged() noexcept {
71
+ void UpdateColorForScrollBarRegions() noexcept {
72
72
  updateHighlight(ScrollbarHitRegion::ArrowFirst);
73
73
  updateHighlight(ScrollbarHitRegion::ArrowLast);
74
74
  updateHighlight(ScrollbarHitRegion::Thumb);
75
+
75
76
  m_trackVisual.Brush(
76
77
  winrt::get_self<winrt::Microsoft::ReactNative::Composition::implementation::Theme>(m_outer.Theme())
77
78
  ->InternalPlatformBrush(L"ScrollBarTrackFill"));
@@ -726,6 +727,14 @@ void ScrollViewComponentView::updateProps(
726
727
 
727
728
  // update BaseComponentView props
728
729
  base_type::updateProps(props, oldProps);
730
+
731
+ // Update the color only after updating the m_props in BaseComponentView
732
+ // to avoid scrollbarcomponents reading outdated scrollEnabled value.
733
+ if (!oldProps || oldViewProps.scrollEnabled != newViewProps.scrollEnabled) {
734
+ m_scrollVisual.ScrollEnabled(newViewProps.scrollEnabled);
735
+ m_horizontalScrollbarComponent->UpdateColorForScrollBarRegions();
736
+ m_verticalScrollbarComponent->UpdateColorForScrollBarRegions();
737
+ }
729
738
  }
730
739
 
731
740
  void ScrollViewComponentView::updateState(
@@ -825,8 +834,8 @@ void ScrollViewComponentView::OnPointerDown(const winrt::Windows::UI::Input::Poi
825
834
 
826
835
  void ScrollViewComponentView::onThemeChanged() noexcept {
827
836
  updateBackgroundColor(std::static_pointer_cast<const facebook::react::ScrollViewProps>(viewProps())->backgroundColor);
828
- m_verticalScrollbarComponent->OnThemeChanged();
829
- m_horizontalScrollbarComponent->OnThemeChanged();
837
+ m_verticalScrollbarComponent->UpdateColorForScrollBarRegions();
838
+ m_horizontalScrollbarComponent->UpdateColorForScrollBarRegions();
830
839
  Super::onThemeChanged();
831
840
  }
832
841
 
@@ -919,6 +928,10 @@ void ScrollViewComponentView::OnKeyDown(
919
928
  }
920
929
 
921
930
  bool ScrollViewComponentView::scrollToEnd(bool animate) noexcept {
931
+ if (!std::static_pointer_cast<const facebook::react::ScrollViewProps>(viewProps())->scrollEnabled) {
932
+ return false;
933
+ }
934
+
922
935
  if ((((m_contentSize.height - m_layoutMetrics.frame.size.height) * m_layoutMetrics.pointScaleFactor) -
923
936
  m_scrollVisual.ScrollPosition().y) < 1.0f) {
924
937
  return false;
@@ -931,6 +944,10 @@ bool ScrollViewComponentView::scrollToEnd(bool animate) noexcept {
931
944
  }
932
945
 
933
946
  bool ScrollViewComponentView::scrollToStart(bool animate) noexcept {
947
+ if (!std::static_pointer_cast<const facebook::react::ScrollViewProps>(viewProps())->scrollEnabled) {
948
+ return false;
949
+ }
950
+
934
951
  m_scrollVisual.TryUpdatePosition({0.0f, 0.0f, 0.0f}, animate);
935
952
  return true;
936
953
  }
@@ -960,6 +977,10 @@ bool ScrollViewComponentView::lineRight(bool animate) noexcept {
960
977
  }
961
978
 
962
979
  bool ScrollViewComponentView::scrollDown(float delta, bool animate) noexcept {
980
+ if (!std::static_pointer_cast<const facebook::react::ScrollViewProps>(viewProps())->scrollEnabled) {
981
+ return false;
982
+ }
983
+
963
984
  if (((m_contentSize.height - m_layoutMetrics.frame.size.height) * m_layoutMetrics.pointScaleFactor) -
964
985
  m_scrollVisual.ScrollPosition().y <
965
986
  1.0f) {
@@ -971,6 +992,10 @@ bool ScrollViewComponentView::scrollDown(float delta, bool animate) noexcept {
971
992
  }
972
993
 
973
994
  bool ScrollViewComponentView::scrollUp(float delta, bool animate) noexcept {
995
+ if (!std::static_pointer_cast<const facebook::react::ScrollViewProps>(viewProps())->scrollEnabled) {
996
+ return false;
997
+ }
998
+
974
999
  if (m_scrollVisual.ScrollPosition().y <= 0.0f) {
975
1000
  return false;
976
1001
  }
@@ -980,6 +1005,10 @@ bool ScrollViewComponentView::scrollUp(float delta, bool animate) noexcept {
980
1005
  }
981
1006
 
982
1007
  bool ScrollViewComponentView::scrollLeft(float delta, bool animate) noexcept {
1008
+ if (!std::static_pointer_cast<const facebook::react::ScrollViewProps>(viewProps())->scrollEnabled) {
1009
+ return false;
1010
+ }
1011
+
983
1012
  if (m_scrollVisual.ScrollPosition().x <= 0.0f) {
984
1013
  return false;
985
1014
  }
@@ -989,6 +1018,10 @@ bool ScrollViewComponentView::scrollLeft(float delta, bool animate) noexcept {
989
1018
  }
990
1019
 
991
1020
  bool ScrollViewComponentView::scrollRight(float delta, bool animate) noexcept {
1021
+ if (!std::static_pointer_cast<const facebook::react::ScrollViewProps>(viewProps())->scrollEnabled) {
1022
+ return false;
1023
+ }
1024
+
992
1025
  if (((m_contentSize.width - m_layoutMetrics.frame.size.width) * m_layoutMetrics.pointScaleFactor) -
993
1026
  m_scrollVisual.ScrollPosition().x <
994
1027
  1.0f) {
@@ -1025,6 +1058,10 @@ void ScrollViewComponentView::HandleCommand(
1025
1058
  }
1026
1059
 
1027
1060
  void ScrollViewComponentView::scrollTo(winrt::Windows::Foundation::Numerics::float3 offset, bool animate) noexcept {
1061
+ if (!std::static_pointer_cast<const facebook::react::ScrollViewProps>(viewProps())->scrollEnabled) {
1062
+ return;
1063
+ }
1064
+
1028
1065
  m_scrollVisual.TryUpdatePosition(offset, animate);
1029
1066
  }
1030
1067
 
@@ -1097,7 +1134,7 @@ void ScrollViewComponentView::StartBringIntoView(
1097
1134
  scrollToHorizontal = options.TargetRect->getMidX() - (viewerWidth * options.HorizontalAlignmentRatio);
1098
1135
  }
1099
1136
 
1100
- if (needsScroll) {
1137
+ if (needsScroll && std::static_pointer_cast<const facebook::react::ScrollViewProps>(viewProps())->scrollEnabled) {
1101
1138
  m_scrollVisual.TryUpdatePosition(
1102
1139
  {static_cast<float>(scrollToHorizontal), static_cast<float>(scrollToVertical), 0.0f}, options.AnimationDesired);
1103
1140
  }
@@ -11,6 +11,7 @@
11
11
  #include <Utils/ValueUtils.h>
12
12
  #include <tom.h>
13
13
  #include <unicode.h>
14
+ #include <winrt/Microsoft.UI.Input.h>
14
15
  #include <winrt/Windows.System.h>
15
16
  #include <winrt/Windows.UI.h>
16
17
  #include "../CompositionHelpers.h"
@@ -754,8 +755,8 @@ void WindowsTextInputComponentView::OnKeyDown(
754
755
  // Do not forward tab keys into the TextInput, since we want that to do the tab loop instead. This aligns with WinUI
755
756
  // behavior We do forward Ctrl+Tab to the textinput.
756
757
  if (args.Key() != winrt::Windows::System::VirtualKey::Tab ||
757
- source.GetKeyState(winrt::Windows::System::VirtualKey::Control) ==
758
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down) {
758
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Control) &
759
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down) {
759
760
  WPARAM wParam = static_cast<WPARAM>(args.Key());
760
761
  LPARAM lParam = 0;
761
762
  lParam = args.KeyStatus().RepeatCount; // bits 0-15
@@ -784,8 +785,8 @@ void WindowsTextInputComponentView::OnKeyUp(
784
785
  // Do not forward tab keys into the TextInput, since we want that to do the tab loop instead. This aligns with WinUI
785
786
  // behavior We do forward Ctrl+Tab to the textinput.
786
787
  if (args.Key() != winrt::Windows::System::VirtualKey::Tab ||
787
- source.GetKeyState(winrt::Windows::System::VirtualKey::Control) ==
788
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down) {
788
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::Control) &
789
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) == winrt::Microsoft::UI::Input::VirtualKeyStates::Down) {
789
790
  WPARAM wParam = static_cast<WPARAM>(args.Key());
790
791
  LPARAM lParam = 1;
791
792
  lParam = args.KeyStatus().RepeatCount; // bits 0-15
@@ -823,16 +824,21 @@ bool WindowsTextInputComponentView::ShouldSubmit(
823
824
  // If 'submitKeyEvents' are supplied, use them to determine whether to emit onSubmitEditing' for either
824
825
  // single-line or multi-line TextInput
825
826
  if (args.KeyCode() == '\r') {
826
- bool shiftDown = source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) ==
827
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down;
828
- bool ctrlDown = source.GetKeyState(winrt::Windows::System::VirtualKey::Control) ==
829
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down;
830
- bool altDown = source.GetKeyState(winrt::Windows::System::VirtualKey::Control) ==
831
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down;
832
- bool metaDown = source.GetKeyState(winrt::Windows::System::VirtualKey::LeftWindows) ==
833
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down ||
834
- source.GetKeyState(winrt::Windows::System::VirtualKey::RightWindows) ==
835
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down;
827
+ bool shiftDown = (source.GetKeyState(winrt::Windows::System::VirtualKey::Shift) &
828
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ==
829
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
830
+ bool ctrlDown = (source.GetKeyState(winrt::Windows::System::VirtualKey::Control) &
831
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ==
832
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
833
+ bool altDown = (source.GetKeyState(winrt::Windows::System::VirtualKey::Control) &
834
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ==
835
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
836
+ bool metaDown = (source.GetKeyState(winrt::Windows::System::VirtualKey::LeftWindows) &
837
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ==
838
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down ||
839
+ (source.GetKeyState(winrt::Windows::System::VirtualKey::RightWindows) &
840
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) ==
841
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down;
836
842
  return (submitKeyEvent.shiftKey && shiftDown) || (submitKeyEvent.ctrlKey && ctrlDown) ||
837
843
  (submitKeyEvent.altKey && altDown) || (submitKeyEvent.metaKey && metaDown) ||
838
844
  (!submitKeyEvent.shiftKey && !submitKeyEvent.altKey && !submitKeyEvent.metaKey && !submitKeyEvent.altKey &&
@@ -853,8 +859,8 @@ void WindowsTextInputComponentView::OnCharacterReceived(
853
859
  // Do not forward tab keys into the TextInput, since we want that to do the tab loop instead. This aligns with WinUI
854
860
  // behavior We do forward Ctrl+Tab to the textinput.
855
861
  if ((args.KeyCode() == '\t') &&
856
- (source.GetKeyState(winrt::Windows::System::VirtualKey::Control) !=
857
- winrt::Windows::UI::Core::CoreVirtualKeyStates::Down)) {
862
+ ((source.GetKeyState(winrt::Windows::System::VirtualKey::Control) &
863
+ winrt::Microsoft::UI::Input::VirtualKeyStates::Down) != winrt::Microsoft::UI::Input::VirtualKeyStates::Down)) {
858
864
  return;
859
865
  }
860
866
 
@@ -194,7 +194,17 @@ void FabricUIManager::constraintSurfaceLayout(
194
194
  m_surfaceManager->constraintSurfaceLayout(surfaceId, layoutConstraints, layoutContext);
195
195
  }
196
196
 
197
- void FabricUIManager::didMountComponentsWithRootTag(facebook::react::SurfaceId surfaceId) noexcept {}
197
+ winrt::Microsoft::ReactNative::ReactNotificationId<facebook::react::SurfaceId>
198
+ FabricUIManager::NotifyMountedId() noexcept {
199
+ return {L"ReactNative.Fabric", L"Mounted"};
200
+ }
201
+
202
+ void FabricUIManager::didMountComponentsWithRootTag(facebook::react::SurfaceId surfaceId) noexcept {
203
+ m_context.UIDispatcher().Post([context = m_context, self = shared_from_this(), surfaceId]() {
204
+ self->m_scheduler->reportMount(surfaceId);
205
+ context.Notifications().SendNotification(NotifyMountedId(), surfaceId);
206
+ });
207
+ }
198
208
 
199
209
  void FabricUIManager::RCTPerformMountInstructions(
200
210
  facebook::react::ShadowViewMutationList const &mutations,
@@ -212,11 +222,25 @@ void FabricUIManager::RCTPerformMountInstructions(
212
222
  }
213
223
 
214
224
  case facebook::react::ShadowViewMutation::Delete: {
215
- auto &oldChildShadowView = mutation.oldChildShadowView;
216
- auto &oldChildViewDescriptor = m_registry.componentViewDescriptorWithTag(oldChildShadowView.tag);
217
- // observerCoordinator.unregisterViewComponentDescriptor(oldChildViewDescriptor, surfaceId);
218
- m_registry.enqueueComponentViewWithComponentHandle(
219
- oldChildShadowView.componentHandle, oldChildShadowView.tag, oldChildViewDescriptor);
225
+ // #define DETECT_COMPONENT_OUTLIVE_DELETE_MUTATION
226
+ #ifdef DETECT_COMPONENT_OUTLIVE_DELETE_MUTATION
227
+ winrt::weak_ref<winrt::Microsoft::ReactNative::ComponentView> wkView;
228
+ #endif
229
+ {
230
+ auto &oldChildShadowView = mutation.oldChildShadowView;
231
+ auto &oldChildViewDescriptor = m_registry.componentViewDescriptorWithTag(oldChildShadowView.tag);
232
+ // observerCoordinator.unregisterViewComponentDescriptor(oldChildViewDescriptor, surfaceId);
233
+ #ifdef DETECT_COMPONENT_OUTLIVE_DELETE_MUTATION
234
+ wkView = winrt::make_weak(oldChildViewDescriptor.view);
235
+ #endif
236
+ m_registry.enqueueComponentViewWithComponentHandle(
237
+ oldChildShadowView.componentHandle, oldChildShadowView.tag, oldChildViewDescriptor);
238
+ }
239
+ #ifdef DETECT_COMPONENT_OUTLIVE_DELETE_MUTATION
240
+ // After handling a delete mutation, nothing should be holding on to the view. If there is thats an indication
241
+ // of a leak, or at least something holding on to a view longer than it should
242
+ assert(!wkView.get());
243
+ #endif
220
244
  break;
221
245
  }
222
246
 
@@ -52,6 +52,8 @@ struct FabricUIManager final : public std::enable_shared_from_this<FabricUIManag
52
52
  winrt::Microsoft::ReactNative::ReactNativeIsland GetReactNativeIsland(
53
53
  facebook::react::SurfaceId surfaceId) const noexcept;
54
54
 
55
+ static winrt::Microsoft::ReactNative::ReactNotificationId<facebook::react::SurfaceId> NotifyMountedId() noexcept;
56
+
55
57
  private:
56
58
  void installFabricUIManager() noexcept;
57
59
  void initiateTransaction(facebook::react::MountingCoordinator::Shared mountingCoordinator);
@@ -337,7 +337,7 @@ void ReactInstanceWin::LoadModules(
337
337
  };
338
338
 
339
339
  #ifdef USE_FABRIC
340
- if (!m_options.UseWebDebugger()) {
340
+ if (Microsoft::ReactNative::IsFabricEnabled(m_reactContext->Properties())) {
341
341
  registerTurboModule(
342
342
  L"FabricUIManagerBinding",
343
343
  winrt::Microsoft::ReactNative::MakeModuleProvider<::Microsoft::ReactNative::FabricUIManager>());
@@ -602,7 +602,8 @@ void ReactInstanceWin::InitializeBridgeless() noexcept {
602
602
 
603
603
  m_jsMessageThread.Load()->runOnQueueSync([&]() {
604
604
  ::SetThreadDescription(GetCurrentThread(), L"React-Native JavaScript Thread");
605
- auto timerRegistry = ::Microsoft::ReactNative::TimerRegistry::CreateTimerRegistry(m_options.Properties);
605
+ auto timerRegistry =
606
+ ::Microsoft::ReactNative::TimerRegistry::CreateTimerRegistry(m_reactContext->Properties());
606
607
  auto timerRegistryRaw = timerRegistry.get();
607
608
 
608
609
  auto timerManager = std::make_shared<facebook::react::TimerManager>(std::move(timerRegistry));
@@ -24,6 +24,16 @@
24
24
  "Microsoft.SourceLink.Common": "1.1.1"
25
25
  }
26
26
  },
27
+ "Microsoft.SourceLink.GitHub": {
28
+ "type": "Direct",
29
+ "requested": "[1.1.1, )",
30
+ "resolved": "1.1.1",
31
+ "contentHash": "IaJGnOv/M7UQjRJks7B6p7pbPnOwisYGOIzqCz5ilGFTApZ3ktOR+6zJ12ZRPInulBmdAf1SrGdDG2MU8g6XTw==",
32
+ "dependencies": {
33
+ "Microsoft.Build.Tasks.Git": "1.1.1",
34
+ "Microsoft.SourceLink.Common": "1.1.1"
35
+ }
36
+ },
27
37
  "Microsoft.Windows.CppWinRT": {
28
38
  "type": "Direct",
29
39
  "requested": "[2.0.230706.1, )",
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+
4
+ <PropertyGroup Label="Globals">
5
+ </PropertyGroup>
6
+
7
+ <PropertyGroup Label="Configuration">
8
+ </PropertyGroup>
9
+
10
+ <ItemDefinitionGroup>
11
+ </ItemDefinitionGroup>
12
+
13
+ </Project>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+
4
+ <PropertyGroup Label="Globals">
5
+ </PropertyGroup>
6
+
7
+ <PropertyGroup Label="Configuration">
8
+ </PropertyGroup>
9
+
10
+ <ItemDefinitionGroup>
11
+ </ItemDefinitionGroup>
12
+
13
+ </Project>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+
4
+ <PropertyGroup Label="Globals">
5
+ </PropertyGroup>
6
+
7
+ <PropertyGroup Label="Configuration">
8
+ </PropertyGroup>
9
+
10
+ <ItemDefinitionGroup>
11
+ </ItemDefinitionGroup>
12
+
13
+ </Project>
@@ -10,11 +10,11 @@
10
10
  -->
11
11
  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
12
12
  <PropertyGroup>
13
- <ReactNativeWindowsVersion>0.74.11</ReactNativeWindowsVersion>
13
+ <ReactNativeWindowsVersion>0.74.12</ReactNativeWindowsVersion>
14
14
  <ReactNativeWindowsMajor>0</ReactNativeWindowsMajor>
15
15
  <ReactNativeWindowsMinor>74</ReactNativeWindowsMinor>
16
- <ReactNativeWindowsPatch>11</ReactNativeWindowsPatch>
16
+ <ReactNativeWindowsPatch>12</ReactNativeWindowsPatch>
17
17
  <ReactNativeWindowsCanary>false</ReactNativeWindowsCanary>
18
- <ReactNativeWindowsCommitId>71a102ac500541f38b7b8bf3b919c5cc8f3494a6</ReactNativeWindowsCommitId>
18
+ <ReactNativeWindowsCommitId>696f0bbbb4ba8dde034eb8d55d5c9ae57325ae2f</ReactNativeWindowsCommitId>
19
19
  </PropertyGroup>
20
20
  </Project>
@@ -14,12 +14,14 @@
14
14
  <HermesNoLink Condition="'$(HermesNoLink)' == '' and '$(Configuration)' == 'Release' and '$(EnableHermesInspectorInReleaseFlavor)' != 'true'">true</HermesNoLink>
15
15
  <!-- Use Hermes bytecode bundles provided by metro hermes compiler when available -->
16
16
  <EnableDevServerHBCBundles Condition="'$(EnableDevServerHBCBundles)' == ''">false</EnableDevServerHBCBundles>
17
+ <HermesPlatform Condition="'$(Platform)' == 'ARM64EC'">x64</HermesPlatform>
17
18
 
18
19
  <UseV8 Condition="'$(UseV8)' == ''">false</UseV8>
19
20
  <V8Version Condition="'$(V8Version)' == ''">0.71.8</V8Version>
20
21
  <V8PackageName>ReactNative.V8Jsi.Windows</V8PackageName>
21
22
  <V8PackageName Condition="'$(V8AppPlatform)' != 'win32'">$(V8PackageName).UWP</V8PackageName>
22
23
  <V8Package>$(NuGetPackageRoot)\$(V8PackageName).$(V8Version)</V8Package>
24
+ <V8Platform Condition="'$(Platform)' == 'ARM64EC'">x64</V8Platform>
23
25
  </PropertyGroup>
24
26
 
25
27
  </Project>
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+
4
+ <PropertyGroup Label="Globals">
5
+ </PropertyGroup>
6
+
7
+ <PropertyGroup Label="Configuration">
8
+ </PropertyGroup>
9
+
10
+ <ItemDefinitionGroup>
11
+ </ItemDefinitionGroup>
12
+
13
+ </Project>
@@ -16,6 +16,10 @@
16
16
  <Configuration>Debug</Configuration>
17
17
  <Platform>ARM64</Platform>
18
18
  </ProjectConfiguration>
19
+ <ProjectConfiguration Include="Debug|ARM64EC">
20
+ <Configuration>Debug</Configuration>
21
+ <Platform>ARM64EC</Platform>
22
+ </ProjectConfiguration>
19
23
  <ProjectConfiguration Include="Release|ARM64">
20
24
  <Configuration>Release</Configuration>
21
25
  <Platform>ARM64</Platform>
@@ -24,6 +28,10 @@
24
28
  <Configuration>Debug</Configuration>
25
29
  <Platform>x64</Platform>
26
30
  </ProjectConfiguration>
31
+ <ProjectConfiguration Include="Release|ARM64EC">
32
+ <Configuration>Release</Configuration>
33
+ <Platform>ARM64EC</Platform>
34
+ </ProjectConfiguration>
27
35
  <ProjectConfiguration Include="Release|x64">
28
36
  <Configuration>Release</Configuration>
29
37
  <Platform>x64</Platform>
@@ -251,4 +259,4 @@
251
259
  <Copy DestinationFiles="@(NodeApiJsiFiles->'$(ReactNativeDir)\ReactCommon\jsi\%(RecursiveDir)%(Filename)%(Extension)')" SourceFiles="@(NodeApiJsiFiles)" />
252
260
  <Copy DestinationFiles="@(TemporaryReactCommonPatchFiles->'$(ReactNativeDir)\ReactCommon\%(RecursiveDir)%(Filename)%(Extension)')" SourceFiles="@(TemporaryReactCommonPatchFiles)" />
253
261
  </Target>
254
- </Project>
262
+ </Project>
@@ -117,18 +117,12 @@
117
117
  <ClCompile Include="$(ReactNativeDir)\ReactCommon\jsiexecutor\jsireact\JSINativeModules.cpp">
118
118
  <Filter>jsiexecutor\jsireact</Filter>
119
119
  </ClCompile>
120
- <ClCompile Include="$(YogaDir)\yoga\Utils.cpp">
121
- <Filter>yoga</Filter>
122
- </ClCompile>
123
120
  <ClCompile Include="$(YogaDir)\yoga\YGConfig.cpp">
124
121
  <Filter>yoga</Filter>
125
122
  </ClCompile>
126
123
  <ClCompile Include="$(YogaDir)\yoga\YGEnums.cpp">
127
124
  <Filter>yoga</Filter>
128
125
  </ClCompile>
129
- <ClCompile Include="$(YogaDir)\yoga\YGLayout.cpp">
130
- <Filter>yoga</Filter>
131
- </ClCompile>
132
126
  <ClCompile Include="$(YogaDir)\yoga\YGNode.cpp">
133
127
  <Filter>yoga</Filter>
134
128
  </ClCompile>
@@ -138,9 +132,6 @@
138
132
  <ClCompile Include="$(YogaDir)\yoga\YGNodeStyle.cpp">
139
133
  <Filter>yoga</Filter>
140
134
  </ClCompile>
141
- <ClCompile Include="$(YogaDir)\yoga\YGNodePrint.cpp">
142
- <Filter>yoga</Filter>
143
- </ClCompile>
144
135
  <ClCompile Include="$(YogaDir)\yoga\YGPixelGrid.cpp">
145
136
  <Filter>yoga</Filter>
146
137
  </ClCompile>
@@ -156,9 +147,6 @@
156
147
  <ClCompile Include="$(YogaDir)\yoga\YGValue.cpp">
157
148
  <Filter>yoga</Filter>
158
149
  </ClCompile>
159
- <ClCompile Include="$(YogaDir)\yoga\log.cpp">
160
- <Filter>yoga</Filter>
161
- </ClCompile>
162
150
  <ClCompile Include="$(ReactNativeDir)\ReactCommon\react\nativemodule\core\ReactCommon\TurboModuleBinding.cpp">
163
151
  <Filter>turbomodule\core</Filter>
164
152
  </ClCompile>
@@ -208,6 +196,18 @@
208
196
  <ClCompile Include="$(ReactNativeDir)\ReactCommon\react\renderer\telemetry\TransactionTelemetry.cpp">
209
197
  <Filter>react\renderer\telemetry</Filter>
210
198
  </ClCompile>
199
+ <ClCompile Include="$(ReactNativeDir)\ReactCommon\jsinspector-modern\InspectorInterfaces.cpp" />
200
+ <ClCompile Include="$(YogaDir)\yoga\algorithm\AbsoluteLayout.cpp" />
201
+ <ClCompile Include="$(YogaDir)\yoga\algorithm\Baseline.cpp" />
202
+ <ClCompile Include="$(YogaDir)\yoga\algorithm\Cache.cpp" />
203
+ <ClCompile Include="$(YogaDir)\yoga\algorithm\CalculateLayout.cpp" />
204
+ <ClCompile Include="$(YogaDir)\yoga\algorithm\FlexLine.cpp" />
205
+ <ClCompile Include="$(YogaDir)\yoga\algorithm\PixelGrid.cpp" />
206
+ <ClCompile Include="$(YogaDir)\yoga\config\Config.cpp" />
207
+ <ClCompile Include="$(YogaDir)\yoga\debug\AssertFatal.cpp" />
208
+ <ClCompile Include="$(YogaDir)\yoga\debug\Log.cpp" />
209
+ <ClCompile Include="$(YogaDir)\yoga\node\LayoutResults.cpp" />
210
+ <ClCompile Include="$(YogaDir)\yoga\node\Node.cpp" />
211
211
  </ItemGroup>
212
212
  <ItemGroup>
213
213
  <ClInclude Include="..\stubs\sys\mman.h">
@@ -325,5 +325,9 @@
325
325
  <ClInclude Include="$(ReactNativeDir)\ReactCommon\react\bridging\CallbackWrapper.h">
326
326
  <Filter>react\bridging</Filter>
327
327
  </ClInclude>
328
+ <ClInclude Include="$(ReactNativeDir)\ReactCommon\jsinspector-modern\InspectorInterfaces.h" />
329
+ <ClInclude Include="$(ReactNativeDir)\ReactCommon\react\renderer\runtimescheduler\RuntimeScheduler_Legacy.h" />
330
+ <ClInclude Include="$(ReactNativeDir)\ReactCommon\react\renderer\runtimescheduler\RuntimeScheduler_Modern.h" />
331
+ <ClInclude Include="$(ReactNativeDir)\ReactCommon\react\renderer\core\PropsParserContext.h" />
328
332
  </ItemGroup>
329
333
  </Project>
@@ -15,25 +15,23 @@
15
15
  </metadata>
16
16
  <files>
17
17
 
18
- <file src="$nugetroot$\x86\Debug\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\debug\x86" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
19
- <file src="$nugetroot$\x64\Debug\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\debug\x64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
20
- <file src="$nugetroot$\ARM64\Debug\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\debug\ARM64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
21
- <file src="$nugetroot$\x86\Release\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\ship\x86" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
22
- <file src="$nugetroot$\x64\Release\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\ship\x64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
23
- <file src="$nugetroot$\ARM64\Release\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\ship\ARM64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
24
- <file src="$nugetroot$\x86\Debug\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\debug\x86"/>
25
- <file src="$nugetroot$\x64\Debug\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\debug\x64"/>
26
- <file src="$nugetroot$\ARM64\Debug\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\debug\ARM64"/>
27
- <file src="$nugetroot$\x86\Release\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\ship\x86"/>
28
- <file src="$nugetroot$\x64\Release\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\ship\x64"/>
29
- <file src="$nugetroot$\ARM64\Release\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\ship\ARM64"/>
18
+ <file src="$nugetroot$\x86\Debug\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\debug\x86" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
19
+ <file src="$nugetroot$\x64\Debug\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\debug\x64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
20
+ <file src="$nugetroot$\ARM64EC\Debug\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\debug\ARM64EC" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
21
+ <file src="$nugetroot$\x86\Release\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\ship\x86" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
22
+ <file src="$nugetroot$\x64\Release\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\ship\x64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
23
+ <file src="$nugetroot$\ARM64EC\Release\React.Windows.Desktop.DLL\react-native-win32.*" target="lib\ship\ARM64EC" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
24
+ <file src="$nugetroot$\x86\Debug\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\debug\x86"/>
25
+ <file src="$nugetroot$\x64\Debug\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\debug\x64"/>
26
+ <file src="$nugetroot$\ARM64EC\Debug\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\debug\ARM64EC"/>
27
+ <file src="$nugetroot$\x86\Release\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\ship\x86"/>
28
+ <file src="$nugetroot$\x64\Release\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\ship\x64"/>
29
+ <file src="$nugetroot$\ARM64EC\Release\React.Windows.Desktop\Microsoft.ReactNative.winmd" target="lib\ship\ARM64EC"/>
30
30
 
31
- <file src="$nugetroot$\x86\Debug\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\debug\x86" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
32
- <file src="$nugetroot$\x64\Debug\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\debug\x64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
33
- <file src="$nugetroot$\ARM64\Debug\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\debug\ARM64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
34
- <file src="$nugetroot$\x86\Release\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\ship\x86" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
35
- <file src="$nugetroot$\x64\Release\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\ship\x64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
36
- <file src="$nugetroot$\ARM64\Release\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\ship\ARM64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
31
+ <file src="$nugetroot$\x86\Debug\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\debug\x86" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
32
+ <file src="$nugetroot$\x64\Debug\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\debug\x64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
33
+ <file src="$nugetroot$\x86\Release\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\ship\x86" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
34
+ <file src="$nugetroot$\x64\Release\React.Windows.Desktop.Test.DLL\React.Windows.Desktop.Test.**" target="lib\ship\x64" exclude="**\*.iobj;**\*.ipdb;**\*.exp;**\*.ilk" />
37
35
 
38
36
  <file src="$nugetroot$\inc\callinvoker\ReactCommon\CallInvoker.h" target="inc\ReactCommon"/>
39
37
  <file src="$nugetroot$\inc\callinvoker\ReactCommon\SchedulerPriority.h" target="inc\ReactCommon"/>
@@ -16,7 +16,7 @@ If ($PSBoundParameters['Debug']) {
16
16
  Write-Output "Creating filtered version of : $nuspec"
17
17
  $xml = [xml](gc $nuspec)
18
18
 
19
- $allSlices = @("x64.Release", "x64.Debug", "x86.Release", "x86.Debug", "ARM64.Release", "ARM64.Debug")
19
+ $allSlices = @("x64.Release", "x64.Debug", "x86.Release", "x86.Debug", "ARM64.Release", "ARM64.Debug", "ARM64EC.Debug", "ARM64EC.Release")
20
20
 
21
21
  $nodesToRemove = @();
22
22
 
package/fmt/fmt.vcxproj CHANGED
@@ -17,6 +17,10 @@
17
17
  <Configuration>Debug</Configuration>
18
18
  <Platform>ARM64</Platform>
19
19
  </ProjectConfiguration>
20
+ <ProjectConfiguration Include="Debug|ARM64EC">
21
+ <Configuration>Debug</Configuration>
22
+ <Platform>ARM64EC</Platform>
23
+ </ProjectConfiguration>
20
24
  <ProjectConfiguration Include="Release|ARM64">
21
25
  <Configuration>Release</Configuration>
22
26
  <Platform>ARM64</Platform>
@@ -25,6 +29,10 @@
25
29
  <Configuration>Debug</Configuration>
26
30
  <Platform>x64</Platform>
27
31
  </ProjectConfiguration>
32
+ <ProjectConfiguration Include="Release|ARM64EC">
33
+ <Configuration>Release</Configuration>
34
+ <Platform>ARM64EC</Platform>
35
+ </ProjectConfiguration>
28
36
  <ProjectConfiguration Include="Release|x64">
29
37
  <Configuration>Release</Configuration>
30
38
  <Platform>x64</Platform>
@@ -110,7 +118,7 @@
110
118
  Retries="10" />
111
119
  </Target>
112
120
  <Target Name="UnzipFmt" BeforeTargets="PrepareForBuild" DependsOnTargets="DownloadFmt">
113
- <Message Condition="!Exists('$(FmtDir)src\format.cc')" Importance="High" Text="Unzipping fmt to $([MSBuild]::NormalizePath($(FmtDir)..))."/>
121
+ <Message Condition="!Exists('$(FmtDir)src\format.cc')" Importance="High" Text="Unzipping fmt to $([MSBuild]::NormalizePath($(FmtDir)..))." />
114
122
  <Unzip
115
123
  Condition="!Exists('$(FmtDir)src\format.cc')"
116
124
  SourceFiles="$(FmtZipFile)"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-windows",
3
- "version": "0.74.11",
3
+ "version": "0.74.12",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",