diff --git a/packages/sample-app-fabric/App.tsx b/packages/sample-app-fabric/App.tsx index 3ac27a50420..5bd37060a15 100644 --- a/packages/sample-app-fabric/App.tsx +++ b/packages/sample-app-fabric/App.tsx @@ -5,13 +5,44 @@ * @format */ -import React from 'react'; -import {SafeAreaView, StatusBar, useColorScheme} from 'react-native'; +/** + * Sample React Native App + * https://github.com/facebook/react-native + * + * @format + */ + +import React, {useState} from 'react'; +import {SafeAreaView, StatusBar, useColorScheme, View, Text, StyleSheet} from 'react-native'; import {NewAppScreen} from '@react-native/new-app-screen'; +import {CalendarView} from 'xaml-calendar-view'; + +type SectionProps = { + title: string; + children?: React.ReactNode; +}; + +function Section({title, children}: SectionProps): React.JSX.Element { + return ( + + {title} + {typeof children === 'string' ? ( + {children} + ) : ( + children + )} + + ); +} + function App(): React.JSX.Element { const isDarkMode = useColorScheme() === 'dark'; + // Adjust this type if your native event uses a different shape. + // Many RNW components emit strings or numbers; you can swap to Date if you convert it. + const [selectedDate, setSelectedDate] = useState(undefined); + return ( + + {/* Your app content below the new screen */} + +
+ + Showing a CalendarView here (displayMode=1 for month view). + + + { + setSelectedDate(e.nativeEvent.startDate); + }} + /> +
+ +
+ + {selectedDate ?? '—'} + +
+
+ {/* New RN welcome screen */}
); } +const styles = StyleSheet.create({ + content: { + paddingHorizontal: 24, + paddingVertical: 16, + }, + sectionContainer: { + marginTop: 16, + }, + sectionTitle: { + fontSize: 20, + fontWeight: '600', + marginBottom: 6, + }, + sectionDescription: { + fontSize: 16, + fontWeight: '400', + }, +}); + export default App; diff --git a/packages/sample-app-fabric/package.json b/packages/sample-app-fabric/package.json index 043278e0fc6..6e0bc1c439c 100644 --- a/packages/sample-app-fabric/package.json +++ b/packages/sample-app-fabric/package.json @@ -18,7 +18,8 @@ "@react-native/new-app-screen": "0.82.0-nightly-20250806-5936f29d6", "react": "^19.1.0", "react-native": "0.82.0-nightly-20250806-5936f29d6", - "react-native-windows": "^0.0.0-canary.1004" + "react-native-windows": "^0.0.0-canary.1004", + "xaml-calendar-view": "1.0.0" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/packages/sample-app-fabric/windows/SampleAppFabric.sln b/packages/sample-app-fabric/windows/SampleAppFabric.sln index 1eabd0cabef..8711ed0bd9d 100644 --- a/packages/sample-app-fabric/windows/SampleAppFabric.sln +++ b/packages/sample-app-fabric/windows/SampleAppFabric.sln @@ -35,63 +35,54 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mso", "..\..\..\vnext\Mso\M EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Include", "..\..\..\vnext\include\Include.vcxitems", "{EF074BA1-2D54-4D49-A28E-5E040B47CD2E}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XamlCalendarView", "..\..\..\node_modules\xaml-calendar-view\windows\XamlCalendarView\XamlCalendarView.vcxproj", "{3501592F-3196-4EE1-B4AA-FE4A5F29063B}" +EndProject Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ..\..\..\vnext\Shared\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9 - ..\..\..\vnext\Mso\Mso.vcxitems*{84e05bfa-cbaf-4f0d-bfb6-4ce85742a57e}*SharedItemsImports = 9 - ..\..\..\vnext\Chakra\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9 - ..\..\..\vnext\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9 - ..\..\..\vnext\include\Include.vcxitems*{ef074ba1-2d54-4d49-a28e-5e040b47cd2e}*SharedItemsImports = 9 - ..\..\..\vnext\Chakra\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 - ..\..\..\vnext\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 - ..\..\..\vnext\Mso\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 - ..\..\..\vnext\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 - Debug|ARM64 = Debug|ARM64 + Release|ARM64 = Release|ARM64 Release|x64 = Release|x64 Release|x86 = Release|x86 - Release|ARM64 = Release|ARM64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|ARM64.Build.0 = Debug|ARM64 + {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|ARM64.Deploy.0 = Debug|ARM64 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|x64.ActiveCfg = Debug|x64 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|x64.Build.0 = Debug|x64 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|x64.Deploy.0 = Debug|x64 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|x86.ActiveCfg = Debug|x86 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|x86.Build.0 = Debug|x86 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|x86.Deploy.0 = Debug|x86 - {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|ARM64.Build.0 = Debug|ARM64 - {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|ARM64.ActiveCfg = Release|ARM64 + {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|ARM64.Build.0 = Release|ARM64 + {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|ARM64.Deploy.0 = Release|ARM64 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|x64.ActiveCfg = Release|x64 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|x64.Build.0 = Release|x64 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|x64.Deploy.0 = Release|x64 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|x86.ActiveCfg = Release|x86 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|x86.Build.0 = Release|x86 {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|x86.Deploy.0 = Release|x86 - {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|ARM64.ActiveCfg = Release|ARM64 - {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|ARM64.Build.0 = Release|ARM64 - {7E2B86E3-E6B0-409D-812E-0D81DFFACA9D}.Release|ARM64.Deploy.0 = Release|ARM64 + {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|ARM64.Build.0 = Debug|ARM64 + {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|ARM64.Deploy.0 = Debug|ARM64 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|x64.ActiveCfg = Debug|x64 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|x64.Build.0 = Debug|x64 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|x64.Deploy.0 = Debug|x64 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|x86.ActiveCfg = Debug|Win32 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|x86.Build.0 = Debug|Win32 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|x86.Deploy.0 = Debug|Win32 - {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|ARM64.Build.0 = Debug|ARM64 - {E278ABE5-5A88-48C5-A949-CA00B489643F}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|ARM64.ActiveCfg = Release|ARM64 + {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|ARM64.Build.0 = Release|ARM64 + {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|ARM64.Deploy.0 = Release|ARM64 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|x64.ActiveCfg = Release|x64 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|x64.Build.0 = Release|x64 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|x64.Deploy.0 = Release|x64 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|x86.ActiveCfg = Release|Win32 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|x86.Build.0 = Release|Win32 {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|x86.Deploy.0 = Release|Win32 - {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|ARM64.ActiveCfg = Release|ARM64 - {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|ARM64.Build.0 = Release|ARM64 - {E278ABE5-5A88-48C5-A949-CA00B489643F}.Release|ARM64.Deploy.0 = Release|ARM64 {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64 {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.Build.0 = Debug|ARM64 {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.ActiveCfg = Debug|x64 @@ -104,6 +95,20 @@ Global {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64 {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32 {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|ARM64.Build.0 = Debug|ARM64 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x64.ActiveCfg = Debug|x64 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x64.Build.0 = Debug|x64 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.ActiveCfg = Debug|Win32 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.Build.0 = Debug|Win32 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.Deploy.0 = Debug|Win32 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|ARM64.ActiveCfg = Release|ARM64 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|ARM64.Build.0 = Release|ARM64 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x64.ActiveCfg = Release|x64 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x64.Build.0 = Release|x64 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.ActiveCfg = Release|Win32 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.Build.0 = Release|Win32 + {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.Deploy.0 = Release|Win32 {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64 {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.Build.0 = Debug|ARM64 {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.ActiveCfg = Debug|x64 @@ -140,26 +145,27 @@ Global {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64 {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32 {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|ARM64.Build.0 = Debug|ARM64 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x64.ActiveCfg = Debug|x64 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x64.Build.0 = Debug|x64 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.ActiveCfg = Debug|Win32 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.Build.0 = Debug|Win32 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Debug|x86.Deploy.0 = Debug|Win32 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|ARM64.ActiveCfg = Release|ARM64 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|ARM64.Build.0 = Release|ARM64 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x64.ActiveCfg = Release|x64 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x64.Build.0 = Release|x64 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.ActiveCfg = Release|Win32 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.Build.0 = Release|Win32 - {14B93DC8-FD93-4A6D-81CB-8BC96644501C}.Release|x86.Deploy.0 = Release|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|ARM64.Build.0 = Debug|ARM64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x64.ActiveCfg = Debug|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x64.Build.0 = Debug|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x86.ActiveCfg = Debug|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x86.Build.0 = Debug|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x86.Deploy.0 = Debug|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|ARM64.ActiveCfg = Release|ARM64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|ARM64.Build.0 = Release|ARM64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x64.ActiveCfg = Release|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x64.Build.0 = Release|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x86.ActiveCfg = Release|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x86.Build.0 = Release|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x86.Deploy.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {14B93DC8-FD93-4A6D-81CB-8BC96644501C} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} {C38970C0-5FBF-4D69-90D8-CBAC225AE895} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} @@ -168,9 +174,19 @@ Global {2049DBE9-8D13-42C9-AE4B-413AE38FFFD0} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} {84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} {EF074BA1-2D54-4D49-A28E-5E040B47CD2E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} - {14B93DC8-FD93-4A6D-81CB-8BC96644501C} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D43FAD39-F619-437D-BB40-04A3982ACB6A} EndGlobalSection + GlobalSection(SharedMSBuildProjectFiles) = preSolution + ..\..\..\vnext\Shared\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9 + ..\..\..\vnext\Mso\Mso.vcxitems*{84e05bfa-cbaf-4f0d-bfb6-4ce85742a57e}*SharedItemsImports = 9 + ..\..\..\vnext\Chakra\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9 + ..\..\..\vnext\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9 + ..\..\..\vnext\include\Include.vcxitems*{ef074ba1-2d54-4d49-a28e-5e040b47cd2e}*SharedItemsImports = 9 + ..\..\..\vnext\Chakra\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + ..\..\..\vnext\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + ..\..\..\vnext\Mso\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + ..\..\..\vnext\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + EndGlobalSection EndGlobal diff --git a/packages/sample-app-fabric/windows/SampleAppFabric/AutolinkedNativeModules.g.cpp b/packages/sample-app-fabric/windows/SampleAppFabric/AutolinkedNativeModules.g.cpp index 5821cfddc55..bc5c9b03d39 100644 --- a/packages/sample-app-fabric/windows/SampleAppFabric/AutolinkedNativeModules.g.cpp +++ b/packages/sample-app-fabric/windows/SampleAppFabric/AutolinkedNativeModules.g.cpp @@ -3,12 +3,16 @@ #include "pch.h" #include "AutolinkedNativeModules.g.h" +// Includes from xaml-calendar-view +#include + namespace winrt::Microsoft::ReactNative { void RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector const& packageProviders) { - UNREFERENCED_PARAMETER(packageProviders); + // IReactPackageProviders from xaml-calendar-view + packageProviders.Append(winrt::XamlCalendarView::ReactPackageProvider()); } } diff --git a/packages/sample-app-fabric/windows/SampleAppFabric/AutolinkedNativeModules.g.targets b/packages/sample-app-fabric/windows/SampleAppFabric/AutolinkedNativeModules.g.targets index 6a85ec51cd9..0d854874f0b 100644 --- a/packages/sample-app-fabric/windows/SampleAppFabric/AutolinkedNativeModules.g.targets +++ b/packages/sample-app-fabric/windows/SampleAppFabric/AutolinkedNativeModules.g.targets @@ -2,5 +2,9 @@ + + + {3501592F-3196-4EE1-B4AA-FE4A5F29063B} + diff --git a/packages/sample-app-fabric/windows/SampleAppFabric/packages.lock.json b/packages/sample-app-fabric/windows/SampleAppFabric/packages.lock.json index 83d8e870d2a..0fdb09a2480 100644 --- a/packages/sample-app-fabric/windows/SampleAppFabric/packages.lock.json +++ b/packages/sample-app-fabric/windows/SampleAppFabric/packages.lock.json @@ -99,6 +99,15 @@ "Folly": "[1.0.0, )", "boost": "[1.83.0, )" } + }, + "xamlcalendarview": { + "type": "Project", + "dependencies": { + "Microsoft.ReactNative": "[1.0.0, )", + "Microsoft.VCRTForwarders.140": "[1.0.2-rc, )", + "Microsoft.WindowsAppSDK": "[1.7.250401001, )", + "boost": "[1.83.0, )" + } } }, "native,Version=v0.0/win": { diff --git a/packages/xaml-calendar-view/.gitignore b/packages/xaml-calendar-view/.gitignore new file mode 100644 index 00000000000..6ec7c452937 --- /dev/null +++ b/packages/xaml-calendar-view/.gitignore @@ -0,0 +1 @@ +lib-commonjs/ diff --git a/packages/xaml-calendar-view/NuGet.config b/packages/xaml-calendar-view/NuGet.config new file mode 100644 index 00000000000..fe459fedd60 --- /dev/null +++ b/packages/xaml-calendar-view/NuGet.config @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/xaml-calendar-view/babel.config.js b/packages/xaml-calendar-view/babel.config.js new file mode 100644 index 00000000000..bb24878651d --- /dev/null +++ b/packages/xaml-calendar-view/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ['module:@rnw-scripts/babel-react-native-config'], +}; diff --git a/packages/xaml-calendar-view/jest.config.js b/packages/xaml-calendar-view/jest.config.js new file mode 100644 index 00000000000..8eb675e9bc6 --- /dev/null +++ b/packages/xaml-calendar-view/jest.config.js @@ -0,0 +1,3 @@ +module.exports = { + preset: 'react-native', +}; diff --git a/packages/xaml-calendar-view/just-task.js b/packages/xaml-calendar-view/just-task.js new file mode 100644 index 00000000000..6627cf0c945 --- /dev/null +++ b/packages/xaml-calendar-view/just-task.js @@ -0,0 +1,51 @@ +/** + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + * @format + * @ts-check + */ + +const {task, series} = require('just-scripts'); +const fs = require('fs'); +const glob = require('glob'); +const path = require('path'); + +// Use the shared base configuration +require('@rnw-scripts/just-task'); + +// The TS build process will strip all the types from the NativeComponent spec file. Which means that the codegen babel will not correctly generate the JS view config for the component. +// So here we manually run babel, overwriting the tsc output, so that we ship the generated code. +task('codegenNativeComponents', () => { + const babel = require('@babel/core'); + const matches = glob.sync('src/**/*NativeComponent.ts'); + + matches.forEach(matchedPath => { + const relativePath = path.relative( + path.resolve(process.cwd(), 'src'), + matchedPath, + ); + const code = fs.readFileSync(matchedPath).toString(); + const filename = path.resolve(process.cwd(), matchedPath); + + const res = babel.transformSync(code, { + ast: false, + filename, + cwd: process.cwd(), + sourceRoot: process.cwd(), + root: process.cwd(), + babelrc: true, + }); + + const relativeOutputPath = relativePath.replace(/\.ts$/, '.js'); + + fs.writeFileSync( + path.resolve(process.cwd(), 'lib-commonjs', relativeOutputPath), + res?.code, + ); + }); +}); + +task( + 'buildWithCodegetNativeComponents', + series('build', 'codegenNativeComponents'), +); diff --git a/packages/xaml-calendar-view/package.json b/packages/xaml-calendar-view/package.json new file mode 100644 index 00000000000..8b0380ccc5d --- /dev/null +++ b/packages/xaml-calendar-view/package.json @@ -0,0 +1,57 @@ +{ + "name": "xaml-calendar-view", + "version": "1.0.0", + "main": "lib-commonjs/index.js", + "types": "lib-commonjs/index.d.ts", + "license": "MIT", + "private": true, + "scripts": { + "build": "rnw-scripts buildWithCodegetNativeComponents", + "lint": "rnw-scripts lint", + "lint:fix": "rnw-scripts lint:fix" + }, + "codegenConfig": { + "name": "CalendarView", + "type": "all", + "jsSrcsDir": "src", + "windows": { + "generators": "componentsWindows", + "namespace": "winrt::XamlCalendarView::Codegen", + "outputDirectory": "windows/XamlCalendarView/codegen" + } + }, + "dependencies": { + "@types/react": "^19.0.0", + "react": "^19.0.0", + "react-native": "0.82.0-nightly-20250806-5936f29d6", + "react-native-windows": "^0.0.0-canary.1004" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/preset-env": "^7.25.3", + "@babel/preset-typescript": "^7.8.3", + "@babel/runtime": "^7.20.0", + "@react-native-community/cli": "20.0.0", + "@react-native/metro-config": "0.82.0-nightly-20250806-5936f29d6", + "@rnw-scripts/babel-node-config": "2.3.2", + "@rnw-scripts/babel-react-native-config": "0.0.0", + "@rnw-scripts/eslint-config": "1.2.38", + "@rnw-scripts/just-task": "2.3.57", + "@rnw-scripts/metro-dev-config": "0.0.0", + "@rnw-scripts/ts-config": "2.0.6", + "@rnx-kit/jest-preset": "^0.1.16", + "@types/react": "^19.0.0", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "babel-jest": "^29.6.3", + "eslint": "^8.19.0", + "glob": "^7.1.6", + "just-scripts": "^1.3.3", + "prettier": "2.8.8", + "typescript": "5.0.4" + }, + "engines": { + "node": ">=18" + } +} diff --git a/packages/xaml-calendar-view/src/CalendarView.tsx b/packages/xaml-calendar-view/src/CalendarView.tsx new file mode 100644 index 00000000000..8fe23b958df --- /dev/null +++ b/packages/xaml-calendar-view/src/CalendarView.tsx @@ -0,0 +1,15 @@ + +import * as React from 'react'; +import RawCalendarView from './CalendarViewNativeComponent'; + +import XamlHost from 'react-native-windows/Libraries/Components/Xaml/XamlHost'; + +function CalendarView(props: any) { + return ( + + + + ); +} + +export { CalendarView, RawCalendarView }; diff --git a/packages/xaml-calendar-view/src/CalendarViewNativeComponent.ts b/packages/xaml-calendar-view/src/CalendarViewNativeComponent.ts new file mode 100644 index 00000000000..7aab1a336fc --- /dev/null +++ b/packages/xaml-calendar-view/src/CalendarViewNativeComponent.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) Microsoft Corporation. + * Licensed under the MIT License. + */ + +import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; +import type { ViewProps } from 'react-native'; +import type {DirectEventHandler, Int32} from 'react-native/Libraries/Types/CodegenTypes'; + +type SelectedDatesChangedEvent = Readonly<{ + value: boolean; + startDate: string; +}>; + +export interface CalendarViewProps extends ViewProps { + displayMode : Int32; + onSelectedDatesChanged?: DirectEventHandler; +} + +export default codegenNativeComponent('CalendarView'); diff --git a/packages/xaml-calendar-view/src/index.tsx b/packages/xaml-calendar-view/src/index.tsx new file mode 100644 index 00000000000..5cb606a5706 --- /dev/null +++ b/packages/xaml-calendar-view/src/index.tsx @@ -0,0 +1,2 @@ +import { CalendarView, RawCalendarView} from './CalendarView'; +export { CalendarView, RawCalendarView }; diff --git a/packages/xaml-calendar-view/tsconfig.json b/packages/xaml-calendar-view/tsconfig.json new file mode 100644 index 00000000000..9fe5bc3cf9d --- /dev/null +++ b/packages/xaml-calendar-view/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@rnw-scripts/ts-config", + "include": ["src"], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/packages/xaml-calendar-view/windows/.gitignore b/packages/xaml-calendar-view/windows/.gitignore new file mode 100644 index 00000000000..5bc72a4416d --- /dev/null +++ b/packages/xaml-calendar-view/windows/.gitignore @@ -0,0 +1,41 @@ +*AppPackages* +*BundleArtifacts* + +#OS junk files +[Tt]humbs.db +*.DS_Store + +#Visual Studio files +*.[Oo]bj +*.user +*.aps +*.pch +*.vspscc +*.vssscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.[Cc]ache +*.ilk +*.log +*.lib +*.sbr +*.sdf +*.opensdf +*.opendb +*.unsuccessfulbuild +ipch/ +[Oo]bj/ +[Bb]in +[Dd]ebug*/ +[Rr]elease*/ +Ankh.NoLoad +.vs/ +# Visual C++ cache files + +#Files generated by the VS build +**/Generated Files/** diff --git a/packages/xaml-calendar-view/windows/ExperimentalFeatures.props b/packages/xaml-calendar-view/windows/ExperimentalFeatures.props new file mode 100644 index 00000000000..3153babecb8 --- /dev/null +++ b/packages/xaml-calendar-view/windows/ExperimentalFeatures.props @@ -0,0 +1,33 @@ + + + + + + true + + + false + + true + + + diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView.sln b/packages/xaml-calendar-view/windows/XamlCalendarView.sln new file mode 100644 index 00000000000..cb7fc4ee0b2 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32929.385 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XamlCalendarView", "XamlCalendarView\XamlCalendarView.vcxproj", "{3501592F-3196-4EE1-B4AA-FE4A5F29063B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Debug|ARM64 = Debug|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + Release|ARM64 = Release|ARM64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x64.ActiveCfg = Debug|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x64.Build.0 = Debug|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x64.Deploy.0 = Debug|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x86.ActiveCfg = Debug|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x86.Build.0 = Debug|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|x86.Deploy.0 = Debug|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|ARM64.Build.0 = Debug|ARM64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x64.ActiveCfg = Release|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x64.Build.0 = Release|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x64.Deploy.0 = Release|x64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x86.ActiveCfg = Release|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x86.Build.0 = Release|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|x86.Deploy.0 = Release|Win32 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|ARM64.ActiveCfg = Release|ARM64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|ARM64.Build.0 = Release|ARM64 + {3501592F-3196-4EE1-B4AA-FE4A5F29063B}.Release|ARM64.Deploy.0 = Release|ARM64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D43FAD39-F619-437D-BB40-04A3982ACB6A} + EndGlobalSection +EndGlobal diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/ReactPackageProvider.cpp b/packages/xaml-calendar-view/windows/XamlCalendarView/ReactPackageProvider.cpp new file mode 100644 index 00000000000..e2cff280d6c --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/ReactPackageProvider.cpp @@ -0,0 +1,22 @@ +#include "pch.h" + +#include "ReactPackageProvider.h" +#if __has_include("ReactPackageProvider.g.cpp") +#include "ReactPackageProvider.g.cpp" +#endif + +#include "XamlCalendarView.h" + +using namespace winrt::Microsoft::ReactNative; + +namespace winrt::XamlCalendarView::implementation +{ + +void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept +{ + AddAttributedModules(packageBuilder, true); + RegisterCalendarViewNativeComponent(packageBuilder); + //settings.PackageProviders().Append(winrt::Microsoft::ReactNative::Xaml::ReactPackageProvider()); +} + +} // namespace winrt::XamlCalendarView::implementation diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/ReactPackageProvider.h b/packages/xaml-calendar-view/windows/XamlCalendarView/ReactPackageProvider.h new file mode 100644 index 00000000000..7baeecd516c --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/ReactPackageProvider.h @@ -0,0 +1,24 @@ +#pragma once + +#include "ReactPackageProvider.g.h" + +using namespace winrt::Microsoft::ReactNative; + +namespace winrt::XamlCalendarView::implementation +{ + +struct ReactPackageProvider : ReactPackageProviderT +{ + ReactPackageProvider() = default; + + void CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept; +}; + +} // namespace winrt::XamlCalendarView::implementation + +namespace winrt::XamlCalendarView::factory_implementation +{ + +struct ReactPackageProvider : ReactPackageProviderT {}; + +} // namespace winrt::XamlCalendarView::factory_implementation diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/ReactPackageProvider.idl b/packages/xaml-calendar-view/windows/XamlCalendarView/ReactPackageProvider.idl new file mode 100644 index 00000000000..ce11fd77d80 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/ReactPackageProvider.idl @@ -0,0 +1,9 @@ +namespace XamlCalendarView +{ + [webhosthidden] + [default_interface] + runtimeclass ReactPackageProvider : Microsoft.ReactNative.IReactPackageProvider + { + ReactPackageProvider(); + }; +} diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.cpp b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.cpp new file mode 100644 index 00000000000..c1b5b954303 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.cpp @@ -0,0 +1,86 @@ +#include "pch.h" + +#include "XamlCalendarView.h" + +#include +#include + +namespace winrt::XamlCalendarView +{ + +struct CalendarView : public winrt::implements, + public Codegen::BaseCalendarView { + + winrt::Microsoft::UI::Xaml::UIElement GetXamlElement() { + if (m_calendarView == nullptr) { + CreateXamlCalendarView(); + } + return m_calendarView; + } + + void UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::com_ptr &newProps, + const winrt::com_ptr &oldProps) noexcept override { + Codegen::BaseCalendarView::UpdateProps(view, newProps, oldProps); + + if (m_calendarView && newProps) { + m_calendarView.DisplayMode(static_cast( + newProps->displayMode)); + } + } + + void CreateXamlCalendarView() { + m_calendarView = winrt::Microsoft::UI::Xaml::Controls::CalendarView(); + if (Props()) { + m_calendarView.DisplayMode( + static_cast( + Props()->displayMode)); + } + m_calendarView.SelectedDatesChanged([this](auto &&, auto &&) { + if (auto emitter = EventEmitter()) { + Codegen::CalendarView_OnSelectedDatesChanged args; + auto selectedDates = m_calendarView.SelectedDates(); + if (selectedDates.Size() == 0) { + args.startDate = "(none)"; + } else { + auto firstSelectedDate = selectedDates.GetAt(0); + + auto tt = winrt::clock::to_time_t(firstSelectedDate); + tm local{}; + localtime_s(&local, &tt); + auto timeStr = std::put_time(&local, "%F"); + + std::stringstream ss; + ss << (timeStr._Tptr->tm_year + 1900) << "-" << (timeStr._Tptr->tm_mon + 1) << "-" << timeStr._Tptr->tm_mday; + + args.startDate = ss.str(); + } + emitter->onSelectedDatesChanged(args); + } + }); + } + + + private: + winrt::Microsoft::UI::Xaml::Controls::CalendarView m_calendarView{ nullptr }; +}; + + +// See https://microsoft.github.io/react-native-windows/docs/native-modules for details on writing native modules + +void XamlCalendarView::Initialize(React::ReactContext const &reactContext) noexcept { + m_context = reactContext; +} + +double XamlCalendarView::multiply(double a, double b) noexcept { + return a * b; +} + +void RegisterCalendarViewNativeComponent( + winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder) noexcept { + Codegen::RegisterCalendarViewNativeComponent(packageBuilder, {}); +} + + +} // namespace winrt::XamlCalendarView diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.def b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.def new file mode 100644 index 00000000000..24e7c1235c3 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.def @@ -0,0 +1,3 @@ +EXPORTS +DllCanUnloadNow = WINRT_CanUnloadNow PRIVATE +DllGetActivationFactory = WINRT_GetActivationFactory PRIVATE diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.h b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.h new file mode 100644 index 00000000000..2f57b16c4ff --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.h @@ -0,0 +1,37 @@ +#pragma once + +#include "pch.h" +#include "resource.h" + +#if __has_include("codegen/NativeXamlCalendarViewDataTypes.g.h") + #include "codegen/NativeXamlCalendarViewDataTypes.g.h" +#endif + +#include "codegen/react/components/CalendarView/CalendarView.g.h" + +#include "NativeModules.h" + +namespace winrt::XamlCalendarView +{ + +REACT_MODULE(XamlCalendarView) +struct XamlCalendarView +{ + //using ModuleSpec = XamlCalendarViewCodegen::XamlCalendarViewSpec; + + REACT_INIT(Initialize) + void Initialize(React::ReactContext const &reactContext) noexcept; + + REACT_SYNC_METHOD(multiply) + double multiply(double a, double b) noexcept; + +private: + React::ReactContext m_context; +}; + +void RegisterCalendarViewNativeComponent( + winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder) noexcept; + +} // namespace winrt::XamlCalendarView + + diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.rc b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.rc new file mode 100644 index 00000000000..3212c105fce Binary files /dev/null and b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.rc differ diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.vcxproj b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.vcxproj new file mode 100644 index 00000000000..0d6a8c26676 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.vcxproj @@ -0,0 +1,140 @@ + + + + + + true + true + {3501592F-3196-4EE1-B4AA-FE4A5F29063B} + XamlCalendarView + Win32Proj + XamlCalendarView + 10.0 + en-US + 17.0 + false + + + $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), 'node_modules\react-native-windows\package.json'))\node_modules\react-native-windows\ + false + + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + Debug + ARM64 + + + Release + ARM64 + + + + DynamicLibrary + Unicode + v143 + false + + + true + + + false + true + + + + + + + + + + + + + Use + pch.h + $(IntDir)pch.pch + Level4 + true + %(AdditionalOptions) /bigobj + 4453;28204 + _WINRT_DLL;%(PreprocessorDefinitions) + $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories) + stdcpp20 + + + shell32.lib;user32.lib;windowsapp.lib;%(AdditionalDependenices) + Console + true + XamlCalendarView.def + + + + + _DEBUG;%(PreprocessorDefinitions) + + + + + NDEBUG;%(PreprocessorDefinitions) + + + + + + + ReactPackageProvider.idl + + + + + + + + + Create + + + ReactPackageProvider.idl + + + + + + + + + + + + + + + + + + This project references targets in your node_modules\react-native-windows folder. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.vcxproj.filters b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.vcxproj.filters new file mode 100644 index 00000000000..c14f7bdb9af --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/XamlCalendarView.vcxproj.filters @@ -0,0 +1,44 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/codegen/.clang-format b/packages/xaml-calendar-view/windows/XamlCalendarView/codegen/.clang-format new file mode 100644 index 00000000000..a43d914ec38 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/codegen/.clang-format @@ -0,0 +1,2 @@ +DisableFormat: true +SortIncludes: false \ No newline at end of file diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/codegen/react/components/CalendarView/CalendarView.g.h b/packages/xaml-calendar-view/windows/XamlCalendarView/codegen/react/components/CalendarView/CalendarView.g.h new file mode 100644 index 00000000000..e09befdfeb9 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/codegen/react/components/CalendarView/CalendarView.g.h @@ -0,0 +1,217 @@ + +/* + * This file is auto-generated from CalendarViewNativeComponent spec file in flow / TypeScript. + */ +// clang-format off +#pragma once + +#include + +#ifdef RNW_NEW_ARCH +#include + +#include +#include +#endif // #ifdef RNW_NEW_ARCH + +#ifdef RNW_NEW_ARCH + +namespace winrt::XamlCalendarView::Codegen { + +REACT_STRUCT(CalendarViewProps) +struct CalendarViewProps : winrt::implements { + CalendarViewProps(winrt::Microsoft::ReactNative::ViewProps props, const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) + : ViewProps(props) + { + if (cloneFrom) { + auto cloneFromProps = cloneFrom.as(); + displayMode = cloneFromProps->displayMode; + } + } + + void SetProp(uint32_t hash, winrt::hstring propName, winrt::Microsoft::ReactNative::IJSValueReader value) noexcept { + winrt::Microsoft::ReactNative::ReadProp(hash, propName, value, *this); + } + + REACT_FIELD(displayMode) + int32_t displayMode{}; + + const winrt::Microsoft::ReactNative::ViewProps ViewProps; +}; + +REACT_STRUCT(CalendarView_OnSelectedDatesChanged) +struct CalendarView_OnSelectedDatesChanged { + REACT_FIELD(value) + bool value{}; + + REACT_FIELD(startDate) + std::string startDate; +}; + +struct CalendarViewEventEmitter { + CalendarViewEventEmitter(const winrt::Microsoft::ReactNative::EventEmitter &eventEmitter) + : m_eventEmitter(eventEmitter) {} + + using OnSelectedDatesChanged = CalendarView_OnSelectedDatesChanged; + + void onSelectedDatesChanged(OnSelectedDatesChanged &value) const { + m_eventEmitter.DispatchEvent(L"selectedDatesChanged", [value](const winrt::Microsoft::ReactNative::IJSValueWriter writer) { + winrt::Microsoft::ReactNative::WriteValue(writer, value); + }); + } + + private: + winrt::Microsoft::ReactNative::EventEmitter m_eventEmitter{nullptr}; +}; + +template +struct BaseCalendarView { + + virtual void UpdateProps( + const winrt::Microsoft::ReactNative::ComponentView &/*view*/, + const winrt::com_ptr &newProps, + const winrt::com_ptr &/*oldProps*/) noexcept { + m_props = newProps; + } + + // UpdateLayoutMetrics will only be called if this method is overridden + virtual void UpdateLayoutMetrics( + const winrt::Microsoft::ReactNative::ComponentView &/*view*/, + const winrt::Microsoft::ReactNative::LayoutMetrics &/*newLayoutMetrics*/, + const winrt::Microsoft::ReactNative::LayoutMetrics &/*oldLayoutMetrics*/) noexcept { + } + + // UpdateState will only be called if this method is overridden + virtual void UpdateState( + const winrt::Microsoft::ReactNative::ComponentView &/*view*/, + const winrt::Microsoft::ReactNative::IComponentState &/*newState*/) noexcept { + } + + virtual void UpdateEventEmitter(const std::shared_ptr &eventEmitter) noexcept { + m_eventEmitter = eventEmitter; + } + + // MountChildComponentView will only be called if this method is overridden + virtual void MountChildComponentView(const winrt::Microsoft::ReactNative::ComponentView &/*view*/, + const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &/*args*/) noexcept { + } + + // UnmountChildComponentView will only be called if this method is overridden + virtual void UnmountChildComponentView(const winrt::Microsoft::ReactNative::ComponentView &/*view*/, + const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &/*args*/) noexcept { + } + + // Initialize will only be called if this method is overridden + virtual void Initialize(const winrt::Microsoft::ReactNative::ComponentView &/*view*/) noexcept { + } + + // CreateVisual will only be called if this method is overridden + virtual winrt::Microsoft::UI::Composition::Visual CreateVisual(const winrt::Microsoft::ReactNative::ComponentView &view) noexcept { + return view.as().Compositor().CreateSpriteVisual(); + } + + // FinalizeUpdate will only be called if this method is overridden + virtual void FinalizeUpdate(const winrt::Microsoft::ReactNative::ComponentView &/*view*/, + winrt::Microsoft::ReactNative::ComponentViewUpdateMask /*mask*/) noexcept { + } + + + + const std::shared_ptr& EventEmitter() const { return m_eventEmitter; } + const winrt::com_ptr& Props() const { return m_props; } + +private: + winrt::com_ptr m_props; + std::shared_ptr m_eventEmitter; +}; + +template +void RegisterCalendarViewNativeComponent( + winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder, + std::function builderCallback) noexcept { + packageBuilder.as().AddViewComponent( + L"CalendarView", [builderCallback](winrt::Microsoft::ReactNative::IReactViewComponentBuilder const &builder) noexcept { + auto compBuilder = builder.as(); + + builder.SetCreateProps([](winrt::Microsoft::ReactNative::ViewProps props, + const winrt::Microsoft::ReactNative::IComponentProps& cloneFrom) noexcept { + return winrt::make(props, cloneFrom); + }); + + builder.SetUpdatePropsHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::IComponentProps &newProps, + const winrt::Microsoft::ReactNative::IComponentProps &oldProps) noexcept { + auto userData = view.UserData().as(); + userData->UpdateProps(view, newProps ? newProps.as() : nullptr, oldProps ? oldProps.as() : nullptr); + }); + + compBuilder.SetUpdateLayoutMetricsHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::LayoutMetrics &newLayoutMetrics, + const winrt::Microsoft::ReactNative::LayoutMetrics &oldLayoutMetrics) noexcept { + auto userData = view.UserData().as(); + userData->UpdateLayoutMetrics(view, newLayoutMetrics, oldLayoutMetrics); + }); + + builder.SetUpdateEventEmitterHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::EventEmitter &eventEmitter) noexcept { + auto userData = view.UserData().as(); + userData->UpdateEventEmitter(std::make_shared(eventEmitter)); + }); + + if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::FinalizeUpdate != &BaseCalendarView::FinalizeUpdate) { + builder.SetFinalizeUpdateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + winrt::Microsoft::ReactNative::ComponentViewUpdateMask mask) noexcept { + auto userData = view.UserData().as(); + userData->FinalizeUpdate(view, mask); + }); + } + + if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UpdateState != &BaseCalendarView::UpdateState) { + builder.SetUpdateStateHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::IComponentState &newState) noexcept { + auto userData = view.UserData().as(); + userData->UpdateState(view, newState); + }); + } + + if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::MountChildComponentView != &BaseCalendarView::MountChildComponentView) { + builder.SetMountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::MountChildComponentViewArgs &args) noexcept { + auto userData = view.UserData().as(); + return userData->MountChildComponentView(view, args); + }); + } + + if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::UnmountChildComponentView != &BaseCalendarView::UnmountChildComponentView) { + builder.SetUnmountChildComponentViewHandler([](const winrt::Microsoft::ReactNative::ComponentView &view, + const winrt::Microsoft::ReactNative::UnmountChildComponentViewArgs &args) noexcept { + auto userData = view.UserData().as(); + return userData->UnmountChildComponentView(view, args); + }); + } + + compBuilder.SetViewComponentViewInitializer([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept { + auto userData = winrt::make_self(); + if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::Initialize != &BaseCalendarView::Initialize) { + userData->Initialize(view); + } + view.UserData(*userData); + }); + + if CONSTEXPR_SUPPORTED_ON_VIRTUAL_FN_ADDRESS (&TUserData::CreateVisual != &BaseCalendarView::CreateVisual) { + compBuilder.SetCreateVisualHandler([](const winrt::Microsoft::ReactNative::ComponentView &view) noexcept { + auto userData = view.UserData().as(); + return userData->CreateVisual(view); + }); + } + + // Allow app to further customize the builder + if (builderCallback) { + builderCallback(compBuilder); + } + }); +} + +} // namespace winrt::XamlCalendarView::Codegen + +#endif // #ifdef RNW_NEW_ARCH diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/packages.lock.json b/packages/xaml-calendar-view/windows/XamlCalendarView/packages.lock.json new file mode 100644 index 00000000000..957ffef6cca --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/packages.lock.json @@ -0,0 +1,104 @@ +{ + "version": 1, + "dependencies": { + "native,Version=v0.0": { + "boost": { + "type": "Direct", + "requested": "[1.83.0, )", + "resolved": "1.83.0", + "contentHash": "cy53VNMzysEMvhBixDe8ujPk67Fcj3v6FPHQnH91NYJNLHpc6jxa2xq9ruCaaJjE4M3YrGSHDi4uUSTGBWw6EQ==" + }, + "Microsoft.VCRTForwarders.140": { + "type": "Direct", + "requested": "[1.0.2-rc, )", + "resolved": "1.0.2-rc", + "contentHash": "/r+sjtEeCIGyDhobIZ5hSmYhC/dSyGZxf1SxYJpElUhB0LMCktOMFs9gXrauXypIFECpVynNyVjAmJt6hjJ5oQ==" + }, + "Microsoft.Windows.CppWinRT": { + "type": "Direct", + "requested": "[2.0.230706.1, )", + "resolved": "2.0.230706.1", + "contentHash": "l0D7oCw/5X+xIKHqZTi62TtV+1qeSz7KVluNFdrJ9hXsst4ghvqQ/Yhura7JqRdZWBXAuDS0G0KwALptdoxweQ==" + }, + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[1.7.250401001, )", + "resolved": "1.7.250401001", + "contentHash": "kPsJ2LZoo3Xs/6FtIWMZRGnQ2ZMx9zDa0ZpqRGz1qwZr0gwwlXZJTmngaA1Ym2AHmIa05NtX2jEE2He8CzfhTg==", + "dependencies": { + "Microsoft.Web.WebView2": "1.0.2903.40", + "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" + } + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "1.1.1", + "contentHash": "AT3HlgTjsqHnWpBHSNeR0KxbLZD7bztlZVj7I8vgeYG9SYqbeFGh0TM/KVtC6fg53nrWHl3VfZFvb5BiQFcY6Q==" + }, + "Microsoft.JavaScript.Hermes": { + "type": "Transitive", + "resolved": "0.0.0-2511.7001-d7ca19b3", + "contentHash": "/EGy/gbTWpFZPZ4Z81QxbGQxpZhqiOE3qrnSokZRgXAyHivl15s7zZkRLOy9daDmVyEfanq7YBCOMi0ha58uQA==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "1.1.1", + "contentHash": "WMcGpWKrmJmzrNeuaEb23bEMnbtR/vLmvZtkAP5qWu7vQsY59GqfRJd65sFpBszbd2k/bQ8cs8eWawQKAabkVg==" + }, + "Microsoft.SourceLink.GitHub": { + "type": "Transitive", + "resolved": "1.1.1", + "contentHash": "IaJGnOv/M7UQjRJks7B6p7pbPnOwisYGOIzqCz5ilGFTApZ3ktOR+6zJ12ZRPInulBmdAf1SrGdDG2MU8g6XTw==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "1.1.1", + "Microsoft.SourceLink.Common": "1.1.1" + } + }, + "Microsoft.Web.WebView2": { + "type": "Transitive", + "resolved": "1.0.2903.40", + "contentHash": "THrzYAnJgE3+cNH+9Epr44XjoZoRELdVpXlWGPs6K9C9G6TqyDfVCeVAR/Er8ljLitIUX5gaSkPsy9wRhD1sgQ==" + }, + "Microsoft.Windows.SDK.BuildTools": { + "type": "Transitive", + "resolved": "10.0.22621.756", + "contentHash": "7ZL2sFSioYm1Ry067Kw1hg0SCcW5kuVezC2SwjGbcPE61Nn+gTbH86T73G3LcEOVj0S3IZzNuE/29gZvOLS7VA==" + }, + "common": { + "type": "Project", + "dependencies": { + "boost": "[1.83.0, )" + } + }, + "fmt": { + "type": "Project" + }, + "folly": { + "type": "Project", + "dependencies": { + "boost": "[1.83.0, )", + "fmt": "[1.0.0, )" + } + }, + "microsoft.reactnative": { + "type": "Project", + "dependencies": { + "Common": "[1.0.0, )", + "Folly": "[1.0.0, )", + "Microsoft.JavaScript.Hermes": "[0.0.0-2511.7001-d7ca19b3, )", + "Microsoft.SourceLink.GitHub": "[1.1.1, )", + "Microsoft.WindowsAppSDK": "[1.7.250401001, )", + "ReactCommon": "[1.0.0, )", + "boost": "[1.83.0, )" + } + }, + "reactcommon": { + "type": "Project", + "dependencies": { + "Folly": "[1.0.0, )", + "boost": "[1.83.0, )" + } + } + } + } +} \ No newline at end of file diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/pch.cpp b/packages/xaml-calendar-view/windows/XamlCalendarView/pch.cpp new file mode 100644 index 00000000000..1d9f38c57d6 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/pch.h b/packages/xaml-calendar-view/windows/XamlCalendarView/pch.h new file mode 100644 index 00000000000..61d356df65a --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/pch.h @@ -0,0 +1,30 @@ +// pch.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +#include "targetver.h" + +#define NOMINMAX 1 +#define WIN32_LEAN_AND_MEAN 1 +#define WINRT_LEAN_AND_MEAN 1 + +// Windows Header Files +#include +#undef GetCurrentTime +#include + +// WinRT Header Files +#include +#include +#include + +// C RunTime Header Files +#include +#include +#include +#include + +// Reference additional headers your project requires here diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/resource.h b/packages/xaml-calendar-view/windows/XamlCalendarView/resource.h new file mode 100644 index 00000000000..c8bbf48db31 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/resource.h @@ -0,0 +1,5 @@ +// +// Microsoft Visual C++ generated include file. +// Used by XamlCalendarView.rc + +#pragma once diff --git a/packages/xaml-calendar-view/windows/XamlCalendarView/targetver.h b/packages/xaml-calendar-view/windows/XamlCalendarView/targetver.h new file mode 100644 index 00000000000..87c0086de75 --- /dev/null +++ b/packages/xaml-calendar-view/windows/XamlCalendarView/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include diff --git a/vnext/Microsoft.ReactNative/ReactNativeHost.cpp b/vnext/Microsoft.ReactNative/ReactNativeHost.cpp index 543a0c7d441..a1294c3f4ad 100644 --- a/vnext/Microsoft.ReactNative/ReactNativeHost.cpp +++ b/vnext/Microsoft.ReactNative/ReactNativeHost.cpp @@ -19,6 +19,8 @@ #include #include +#include "XamlHost.h" + using namespace winrt; using namespace Windows::Foundation; using namespace Windows::Foundation::Collections; @@ -96,6 +98,8 @@ IAsyncAction ReactNativeHost::ReloadInstance() noexcept { winrt::Microsoft::ReactNative::Composition::implementation::RegisterWindowsModalHostNativeComponent(m_packageBuilder); + RegisterXamlHostComponentView(m_packageBuilder); + if (auto packageProviders = InstanceSettings().PackageProviders()) { for (auto const &packageProvider : packageProviders) { packageProvider.CreatePackage(m_packageBuilder); diff --git a/vnext/Microsoft.ReactNative/XamlHost.h b/vnext/Microsoft.ReactNative/XamlHost.h index 7abc42b8241..6ffd845203c 100644 --- a/vnext/Microsoft.ReactNative/XamlHost.h +++ b/vnext/Microsoft.ReactNative/XamlHost.h @@ -2,6 +2,7 @@ #if defined(RNW_NEW_ARCH) -void RegisterXamlHostComponentView(winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder); +void RegisterXamlHostComponentView( + winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder); -#endif // defined(RNW_NEW_ARCH) && defined(USE_EXPERIMENTAL_WINUI3) +#endif // defined(RNW_NEW_ARCH) diff --git a/vnext/Microsoft.ReactNative/microsoft.reactnative.def b/vnext/Microsoft.ReactNative/microsoft.reactnative.def index d04a02ea81e..faff126f6c4 100644 --- a/vnext/Microsoft.ReactNative/microsoft.reactnative.def +++ b/vnext/Microsoft.ReactNative/microsoft.reactnative.def @@ -1,3 +1,4 @@ EXPORTS DllCanUnloadNow = WINRT_CanUnloadNow PRIVATE DllGetActivationFactory = WINRT_GetActivationFactory PRIVATE +RegisterXamlHostComponentView diff --git a/yarn.lock b/yarn.lock index 9fb9c64e0b3..1d5fe9128fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1051,20 +1051,7 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3": - version "7.28.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" - integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.5" - "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.5" - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.5" - debug "^4.3.1" - -"@babel/traverse@^7.23.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5": +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3", "@babel/traverse@^7.23.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== @@ -2258,6 +2245,11 @@ invariant "^2.2.4" nullthrows "^1.1.1" +"@rnw-scripts/babel-node-config@2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@rnw-scripts/babel-node-config/-/babel-node-config-2.3.2.tgz#9390105194f054269ae759ef8f4ab5b986c2097d" + integrity sha512-DBHZGG6bT4vN9OCrApc9NQcQqWPYeSxQxltaYZX3WY4rK3HutETmKdJHqa83MdYF/KMegFzBKROFv9/jAGYElw== + "@rnx-kit/align-deps@^2.5.0": version "2.5.5" resolved "https://registry.yarnpkg.com/@rnx-kit/align-deps/-/align-deps-2.5.5.tgz#708b4fd65941699e1ef33c728d34bc568e648b73" @@ -10361,7 +10353,7 @@ react-test-renderer@19.1.1: react-is "^19.1.1" scheduler "^0.26.0" -react@19.1.0, react@19.1.1, react@^19.1.0: +react@19.1.0, react@19.1.1, react@^19.0.0, react@^19.1.0: version "19.1.1" resolved "https://registry.yarnpkg.com/react/-/react-19.1.1.tgz#06d9149ec5e083a67f9a1e39ce97b06a03b644af" integrity sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ== @@ -11230,16 +11222,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@4.2.3, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@4.2.3, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -11347,14 +11330,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^5.0.0, strip-ansi@^5.2.0, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1, strip-ansi@^7.1.0, strip-ansi@^7.1.2: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^5.0.0, strip-ansi@^5.2.0, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1, strip-ansi@^7.1.0, strip-ansi@^7.1.2: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -12207,7 +12183,7 @@ workspace-tools@^0.38.2: js-yaml "^4.1.0" micromatch "^4.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -12225,15 +12201,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"