Merge branch 'main' into update/dependencies/uno.wasm.bootstrap
|
@ -13,6 +13,12 @@
|
|||
"commands": [
|
||||
"xstyler"
|
||||
]
|
||||
},
|
||||
"microsoft.visualstudio.slngen.tool": {
|
||||
"version": "9.5.4",
|
||||
"commands": [
|
||||
"slngen"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -15,6 +15,11 @@ on:
|
|||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
DOTNET_VERSION: ${{ '6.0.x' }}
|
||||
ENABLE_DIAGNOSTICS: false
|
||||
#COREHOST_TRACE: 1
|
||||
COREHOST_TRACEFILE: corehosttrace.log
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
|
@ -24,10 +29,10 @@ jobs:
|
|||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
- name: Install .NET 6 SDK
|
||||
- name: Install .NET SDK v${{ env.DOTNET_VERSION }}
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: '6.0.x'
|
||||
dotnet-version: ${{ env.DOTNET_VERSION }}
|
||||
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- name: Checkout Repository
|
||||
|
@ -51,12 +56,21 @@ jobs:
|
|||
matrix:
|
||||
platform: [WinUI2, WinUI3]
|
||||
|
||||
env:
|
||||
# faux-ternary expression to select which platforms to build for each platform vs. duplicating step below.
|
||||
TARGET_PLATFORMS: ${{ matrix.platform != 'WinUI3' && 'all' || 'all-uwp' }}
|
||||
TEST_PLATFORM: ${{ matrix.platform != 'WinUI3' && 'UWP' || 'WinAppSdk' }}
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
- name: Install .NET 6 SDK
|
||||
- name: Install .NET SDK v${{ env.DOTNET_VERSION }}
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: '6.0.x'
|
||||
dotnet-version: ${{ env.DOTNET_VERSION }}
|
||||
|
||||
- name: .NET Info (if diagnostics)
|
||||
if: ${{ env.ENABLE_DIAGNOSTICS == 'true' }}
|
||||
run: dotnet --info
|
||||
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- name: Checkout Repository
|
||||
|
@ -70,17 +84,18 @@ jobs:
|
|||
run: dotnet tool run uno-check --ci --fix --non-interactive --skip wsl --skip androidemulator --verbose
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.0.3
|
||||
uses: microsoft/setup-msbuild@v1.3.1
|
||||
|
||||
- name: Enable all TargetFrameworks
|
||||
working-directory: ./common/Scripts/
|
||||
run: powershell -version 5.1 -command "./UseTargetFrameworks.ps1 all" -ErrorAction Stop
|
||||
- name: Enable ${{ env.TARGET_PLATFORMS }} TargetFrameworks
|
||||
working-directory: ./common/MultiTarget/
|
||||
run: powershell -version 5.1 -command "./UseTargetFrameworks.ps1 ${{ env.TARGET_PLATFORMS }}" -ErrorAction Stop
|
||||
|
||||
- name: Generate solution
|
||||
run: powershell -version 5.1 -command "./GenerateAllSolution.ps1" -ErrorAction Stop
|
||||
- name: Generate solution w/ ${{ env.TEST_PLATFORM }} Tests
|
||||
working-directory: ./
|
||||
run: powershell -version 5.1 -command "./common/GenerateAllSolution.ps1 -IncludeHeads ${{ env.TEST_PLATFORM }}${{ env.ENABLE_DIAGNOSTICS == 'true' && ' -UseDiagnostics' || '' }}" -ErrorAction Stop
|
||||
|
||||
- name: Enable Uno.WinUI (in WinUI3 matrix only)
|
||||
working-directory: ./common/Scripts/
|
||||
working-directory: ./common/MultiTarget/
|
||||
run: powershell -version 5.1 -command "./UseUnoWinUI.ps1 3" -ErrorAction Stop
|
||||
if: ${{ matrix.platform == 'WinUI3' }}
|
||||
|
||||
|
@ -94,11 +109,11 @@ jobs:
|
|||
|
||||
# Push Packages to our DevOps Artifacts Feed
|
||||
- name: Add source
|
||||
if: ${{github.ref == 'refs/heads/main'}}
|
||||
if: ${{ github.ref == 'refs/heads/main' }}
|
||||
run: dotnet nuget add source "https://pkgs.dev.azure.com/dotnet/CommunityToolkit/_packaging/CommunityToolkit-Labs/nuget/v3/index.json" --name LabsFeed --username dummy --password ${{ secrets.DEVOPS_PACKAGE_PUSH_TOKEN }}
|
||||
|
||||
- name: Push packages
|
||||
if: ${{github.ref == 'refs/heads/main'}}
|
||||
if: ${{ github.ref == 'refs/heads/main' }}
|
||||
run: dotnet nuget push "**/*.nupkg" --api-key dummy --source LabsFeed --skip-duplicate
|
||||
|
||||
# Run tests
|
||||
|
@ -112,56 +127,82 @@ jobs:
|
|||
|
||||
- name: Run SourceGenerators tests
|
||||
id: test-generator
|
||||
run: vstest.console.exe ./common/CommunityToolkit.Labs.Core.SourceGenerators.Tests/CommunityToolkit.Labs.Core.SourceGenerators.Tests/bin/Release/net6.0/CommunityToolkit.Labs.Core.SourceGenerators.Tests.dll /logger:"trx;LogFileName=SourceGenerators.trx"
|
||||
run: vstest.console.exe ./common/CommunityToolkit.Tooling.SampleGen.Tests/bin/Release/net6.0/CommunityToolkit.Tooling.SampleGen.Tests.dll /logger:"trx;LogFileName=SourceGenerators.trx"
|
||||
|
||||
- name: Run experiment tests against UWP
|
||||
id: test-uwp
|
||||
run: vstest.console.exe ./tests/**/CommunityToolkit.Labs.Tests.UWP.build.appxrecipe /Framework:FrameworkUap10 /logger:"trx;LogFileName=UWP.trx"
|
||||
|
||||
- name: Run experiment tests against WinAppSDK
|
||||
id: test-winappsdk
|
||||
run: vstest.console.exe ./tests/**/CommunityToolkit.Labs.Tests.WinAppSdk.build.appxrecipe /Framework:FrameworkUap10 /logger:"trx;LogFileName=WinAppSdk.trx"
|
||||
- name: Run experiment tests against ${{ env.TEST_PLATFORM }}
|
||||
id: test-platform
|
||||
run: vstest.console.exe ./common/**/CommunityToolkit.Tests.${{ env.TEST_PLATFORM }}.build.appxrecipe /Framework:FrameworkUap10 /logger:"trx;LogFileName=${{ env.TEST_PLATFORM }}.trx"
|
||||
|
||||
- name: Create test reports
|
||||
run: |
|
||||
testspace '[${{ matrix.platform }}]./TestResults/*.trx'
|
||||
if: ${{ always() && (steps.test-generator.conclusion == 'success' || steps.test-uwp.conclusion == 'success' || steps.test-winappsdk.conclusion == 'success') }}
|
||||
if: ${{ always() && (steps.test-generator.conclusion == 'success' || steps.test-platform.conclusion == 'success') }}
|
||||
|
||||
- name: Artifact - Diagnostic Logs
|
||||
uses: actions/upload-artifact@v3
|
||||
if: ${{ (env.ENABLE_DIAGNOSTICS == 'true' || env.COREHOST_TRACE != '') && always() }}
|
||||
with:
|
||||
name: build-logs
|
||||
path: ./**/*.*log
|
||||
|
||||
# Test job to build a single experiment to ensure our changes work for both our main types of solutions at the moment
|
||||
new-experiment:
|
||||
needs: [Xaml-Style-Check]
|
||||
# TODO: We should only run this if something in the common or template folder changed...
|
||||
runs-on: windows-latest
|
||||
env:
|
||||
PROJECT_DIRECTORY: template/ProjectTemplate
|
||||
TEST_PROJECT_NAME: CiTestExp
|
||||
TEST_PROJECT_DIRECTORY: components/CiTestExp
|
||||
|
||||
steps:
|
||||
- name: Install .NET 6 SDK
|
||||
- name: Install .NET SDK v${{ env.DOTNET_VERSION }}
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: '6.0.x'
|
||||
dotnet-version: ${{ env.DOTNET_VERSION }}
|
||||
|
||||
- name: .NET Info (if diagnostics)
|
||||
if: ${{ env.ENABLE_DIAGNOSTICS == 'true' }}
|
||||
run: dotnet --info
|
||||
|
||||
- name: Enable git long paths
|
||||
run: git config --system core.longpaths true
|
||||
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.0.3
|
||||
uses: microsoft/setup-msbuild@v1.3.1
|
||||
|
||||
- name: Add project heads to ProjectTemplate
|
||||
working-directory: ./${{ env.PROJECT_DIRECTORY }}
|
||||
run: ${{ github.workspace }}/common/ProjectHeads/GenerateSingleSampleHeads.ps1 -componentPath ${{ github.workspace }}/${{ env.PROJECT_DIRECTORY }}${{ env.ENABLE_DIAGNOSTICS == 'true' && ' -UseDiagnostics' || '' }}
|
||||
|
||||
# Build and use template for creating new experiments
|
||||
- name: Build ProjectTemplate
|
||||
working-directory: ./template/lab
|
||||
working-directory: ./${{ env.PROJECT_DIRECTORY }}
|
||||
run: msbuild.exe ProjectTemplate.sln /restore /nowarn:MSB4011 -p:Configuration=Debug
|
||||
|
||||
- name: Clean environment
|
||||
working-directory: ./
|
||||
run: git clean -xdf
|
||||
|
||||
# Create a new experiment from the template and test using that
|
||||
- name: Install template
|
||||
working-directory: ./template/lab
|
||||
working-directory: ${{ env.PROJECT_DIRECTORY }}
|
||||
run: dotnet new --install ./
|
||||
|
||||
- name: Create new experiment
|
||||
working-directory: ./labs
|
||||
run: dotnet new labexp -n CiTestExp
|
||||
working-directory: ./components
|
||||
run: dotnet new labexp -n ${{ env.TEST_PROJECT_NAME }}
|
||||
|
||||
- name: Add project heads to ${{ env.TEST_PROJECT_NAME }}
|
||||
working-directory: ./${{ env.TEST_PROJECT_DIRECTORY }}
|
||||
run: ${{ github.workspace }}/common/ProjectHeads/GenerateSingleSampleHeads.ps1 -componentPath ${{ github.workspace }}/${{ env.TEST_PROJECT_DIRECTORY }}${{ env.ENABLE_DIAGNOSTICS == 'true' && ' -UseDiagnostics' || '' }}
|
||||
|
||||
- name: MSBuild
|
||||
working-directory: ./labs/CiTestExp
|
||||
run: msbuild.exe CiTestExp.sln /restore /nowarn:MSB4011 -p:Configuration=Release
|
||||
working-directory: ./${{ env.TEST_PROJECT_DIRECTORY }}
|
||||
run: msbuild.exe ${{ env.TEST_PROJECT_NAME }}.sln /restore /nowarn:MSB4011 -p:Configuration=Release
|
||||
|
||||
# Run tests
|
||||
- name: Setup VSTest Path
|
||||
|
@ -174,42 +215,64 @@ jobs:
|
|||
|
||||
- name: Run tests in the generated experiment against UWP
|
||||
id: test-uwp
|
||||
run: vstest.console.exe ./labs/CiTestExp/**/CiTestExp.Tests.UWP.build.appxrecipe /Framework:FrameworkUap10 /logger:"trx;LogFileName=CiTestExpUWP.trx"
|
||||
run: vstest.console.exe ./components/${{ env.TEST_PROJECT_NAME }}/**/${{ env.TEST_PROJECT_NAME }}.Tests.UWP.build.appxrecipe /Framework:FrameworkUap10 /logger:"trx;LogFileName=${{ env.TEST_PROJECT_NAME }}UWP.trx"
|
||||
|
||||
- name: Run tests in the generated experiment against WinAppSDK
|
||||
id: test-winappsdk
|
||||
run: vstest.console.exe ./labs/CiTestExp/**/CiTestExp.Tests.WinAppSdk.build.appxrecipe /Framework:FrameworkUap10 /logger:"trx;LogFileName=CiTestExpWinAppSdk.trx"
|
||||
run: vstest.console.exe ./components/${{ env.TEST_PROJECT_NAME }}/**/${{ env.TEST_PROJECT_NAME }}.Tests.WinAppSdk.build.appxrecipe /Framework:FrameworkUap10 /logger:"trx;LogFileName=${{ env.TEST_PROJECT_NAME }}WinAppSdk.trx"
|
||||
|
||||
- name: Create test reports
|
||||
run: |
|
||||
testspace '[New Experiment]./TestResults/*.trx'
|
||||
if: ${{ always() && (steps.test-uwp.conclusion == 'success' || steps.test-winappsdk.conclusion == 'success') }}
|
||||
|
||||
- name: Artifact - Diagnostic Logs
|
||||
uses: actions/upload-artifact@v3
|
||||
if: ${{ (env.ENABLE_DIAGNOSTICS == 'true' || env.COREHOST_TRACE != '') && always() }}
|
||||
with:
|
||||
name: new-experiment-logs
|
||||
path: ./**/*.*log
|
||||
|
||||
wasm-linux:
|
||||
needs: [Xaml-Style-Check]
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Install .NET 6 SDK
|
||||
- name: Install .NET SDK v${{ env.DOTNET_VERSION }}
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: '6.0.x'
|
||||
dotnet-version: ${{ env.DOTNET_VERSION }}
|
||||
|
||||
- name: .NET Info (if diagnostics)
|
||||
if: ${{ env.ENABLE_DIAGNOSTICS == 'true' }}
|
||||
run: dotnet --info
|
||||
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Restore Tools from Manifest list in the Repository
|
||||
- name: Restore dotnet tools
|
||||
run: dotnet tool restore
|
||||
|
||||
- name: Generate solution
|
||||
shell: pwsh
|
||||
run: ./GenerateAllSolution.ps1
|
||||
working-directory: ./
|
||||
run: ./common/GenerateAllSolution.ps1${{ env.ENABLE_DIAGNOSTICS == 'true' && ' -UseDiagnostics' || '' }}
|
||||
|
||||
- name: Install ninja for WASM native dependencies
|
||||
run: sudo apt-get install ninja-build
|
||||
|
||||
# Issue with Comment Links currently, see: https://github.com/mrlacey/CommentLinks/issues/38
|
||||
# See launch.json configuration file for analogous command we're emulating here to build LINK: ../../.vscode/launch.json:CommunityToolkit.Labs.Wasm.csproj
|
||||
# See launch.json configuration file for analogous command we're emulating here to build LINK: ../../.vscode/launch.json:CommunityToolkit.App.Wasm.csproj
|
||||
- name: dotnet build
|
||||
working-directory: ./platforms/CommunityToolkit.Labs.Wasm/
|
||||
working-directory: ./common/ProjectHeads/AllComponents/Wasm/
|
||||
run: dotnet build /r /bl /p:UnoSourceGeneratorUseGenerationHost=true /p:UnoSourceGeneratorUseGenerationController=false
|
||||
|
||||
# TODO: Do we want to run tests here? Can we do that on linux easily?
|
||||
|
||||
- name: Artifact - Diagnostic Logs
|
||||
uses: actions/upload-artifact@v3
|
||||
if: ${{ (env.ENABLE_DIAGNOSTICS == 'true' || env.COREHOST_TRACE != '') && always() }}
|
||||
with:
|
||||
name: linux-logs
|
||||
path: ./**/*.*log
|
||||
|
|
|
@ -358,3 +358,7 @@ MigrationBackup/
|
|||
# Community Toolkit Labs generated files
|
||||
Toolkit.Labs.All.sln
|
||||
common/MultiTarget/Generated/**
|
||||
heads/
|
||||
|
||||
# We use slngen to generate solutions
|
||||
*.sln
|
||||
|
|
|
@ -14,13 +14,13 @@
|
|||
"/p:UnoSourceGeneratorUseGenerationHost=true",
|
||||
"/p:UnoSourceGeneratorUseGenerationController=false",
|
||||
"/p:UnoRemoteControlPort=443",
|
||||
"--project=${workspaceFolder}/platforms/CommunityToolkit.Labs.Wasm/CommunityToolkit.Labs.Wasm.csproj"
|
||||
"--project=${workspaceFolder}/common/ProjectHeads/AllComponents/CommunityToolkit.Labs.Wasm/CommunityToolkit.Labs.Wasm.csproj"
|
||||
],
|
||||
"presentation": {
|
||||
"group": "1",
|
||||
"order": 1
|
||||
},
|
||||
"cwd": "${workspaceFolder}/platforms/CommunityToolkit.Labs.Wasm",
|
||||
"cwd": "${workspaceFolder}/common/ProjectHeads/AllComponents/CommunityToolkit.Labs.Wasm",
|
||||
"preLaunchTask": "generateAllSolution"
|
||||
},
|
||||
{
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
{
|
||||
"label": "generateAllSolution",
|
||||
"type": "shell",
|
||||
"command": "pwsh ./GenerateAllSolution.ps1",
|
||||
"command": "pwsh ./common/GenerateAllSolution.ps1",
|
||||
"group": "build"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -18,4 +18,11 @@
|
|||
<None Include="$(RepositoryDirectory)ThirdPartyNotices.txt" Pack="true" PackagePath="\" />
|
||||
</ItemGroup>-->
|
||||
|
||||
<ItemGroup>
|
||||
<SlnGenSolutionItem Include="$(MSBuildThisFileDirectory).editorconfig" />
|
||||
<SlnGenSolutionItem Include="$(MSBuildThisFileDirectory)settings.xamlstyler" />
|
||||
<SlnGenSolutionItem Include="$(MSBuildThisFileDirectory)*.md" />
|
||||
<SlnGenSolutionItem Include="$(MSBuildThisFileDirectory)common\GlobalUsings*.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,5 @@
|
|||
@ECHO OFF
|
||||
SET "IncludeHeads=%1"
|
||||
IF "%IncludeHeads%"=="" SET "IncludeHeads=all"
|
||||
|
||||
powershell .\common\GenerateAllSolution.ps1 -IncludeHeads %IncludeHeads%
|
|
@ -1,249 +0,0 @@
|
|||
Param (
|
||||
[Parameter(HelpMessage = "The WinUI version to use when building an Uno head.", ParameterSetName = "UseUnoWinUI")]
|
||||
[ValidateSet('2', '3')]
|
||||
[string]$UseUnoWinUI = 2
|
||||
)
|
||||
|
||||
# Generate required props for "All" solution.
|
||||
& ./common/MultiTarget/GenerateAllProjectReferences.ps1
|
||||
& ./common/GenerateVSCodeLaunchConfig.ps1
|
||||
|
||||
# Set WinUI version for Uno projects
|
||||
$originalWorkingDirectory = Get-Location;
|
||||
|
||||
Set-Location common/Scripts/
|
||||
& ./UseUnoWinUI.ps1 $UseUnoWinUI
|
||||
|
||||
Set-Location $originalWorkingDirectory;
|
||||
|
||||
# Set up contant values
|
||||
$templatedProjectFolderConfigTemplateMarker = "[TemplatedProjectFolderConfig]";
|
||||
$templatedProjectConfigurationTemplateMarker = "[TemplatedProjectConfigurations]";
|
||||
$templatedProjectDefinitionsMarker = "[TemplatedProjectDefinitions]";
|
||||
$templatedSharedTestProjectSelfDefinitionsMarker = "[TemplatedSharedTestProjectDefinitions]";
|
||||
$templatedSharedTestUwpProjectSelfDefinitionsMarker = "[TemplatedSharedTestUwpProjectDefinitions]";
|
||||
$templatedSharedTestWinAppSdkProjectSelfDefinitionsMarker = "[TemplatedSharedTestWinAppSdkProjectDefinitions]";
|
||||
|
||||
$sampleProjectTypeGuid = "9A19103F-16F7-4668-BE54-9A1E7A4F7556";
|
||||
$sharedProjectTypeGuid = "D954291E-2A0B-460D-934E-DC6B0785DB48";
|
||||
$libProjectTypeGuid = $sampleProjectTypeGuid;
|
||||
|
||||
$solutionTemplatePath = 'common/Toolkit.Labs.All.sln.template';
|
||||
$generatedSolutionFilePath = 'Toolkit.Labs.All.sln'
|
||||
|
||||
function CreateProjectConfiguration {
|
||||
param (
|
||||
[string]$projectGuid
|
||||
)
|
||||
|
||||
# Solution files are VERY picky about the unicode characters used as newlines and tabs.
|
||||
# These characters act strange when paired next to characters found in ASCII, so we append
|
||||
# as separate strings.
|
||||
#
|
||||
# Not doing this would cause Visual Studio to fix the file on load, and always ask the user
|
||||
# if they want to save the changes.
|
||||
return "
|
||||
" + " " + "{$projectGuid}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|ARM64.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|ARM64.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|x64.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Ad-Hoc|x86.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.AppStore|Any CPU.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.AppStore|ARM.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.AppStore|ARM.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.AppStore|ARM64.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.AppStore|ARM64.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.AppStore|iPhone.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.AppStore|iPhone.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.AppStore|x64.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.AppStore|x64.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.AppStore|x86.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.AppStore|x86.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{$projectGuid}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{$projectGuid}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{$projectGuid}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{$projectGuid}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||
{$projectGuid}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||
{$projectGuid}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{$projectGuid}.Debug|iPhone.Build.0 = Debug|Any CPU
|
||||
{$projectGuid}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{$projectGuid}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
|
||||
{$projectGuid}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{$projectGuid}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{$projectGuid}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{$projectGuid}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{$projectGuid}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Release|ARM64.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Release|iPhone.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Release|x64.Build.0 = Release|Any CPU
|
||||
{$projectGuid}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{$projectGuid}.Release|x86.Build.0 = Release|Any CPU";
|
||||
}
|
||||
|
||||
function CreateProjectDefinition {
|
||||
param (
|
||||
[string]$projectTypeGuid,
|
||||
[string]$projectGuid,
|
||||
[string]$projectName,
|
||||
[string]$projectPath
|
||||
)
|
||||
|
||||
return "
|
||||
Project(`"{$projectTypeGuid}`") = `"$projectName`", `"$projectPath`", `"{$projectGuid}`"
|
||||
EndProject";
|
||||
}
|
||||
|
||||
function CreateSharedProjectDefinition {
|
||||
param (
|
||||
[string]$projectGuid,
|
||||
[string]$sharedProjectPath,
|
||||
[string]$id
|
||||
)
|
||||
|
||||
return "
|
||||
"+ " " + "$sharedProjectPath*{$projectGuid}*SharedItemsImports = $id";
|
||||
}
|
||||
|
||||
function CreateFolderPlacementForProject {
|
||||
param (
|
||||
[string]$projectGuid,
|
||||
[string]$folderGuid
|
||||
)
|
||||
|
||||
return [System.Environment]::NewLine + " " + "{$projectGuid} = {$folderGuid}";
|
||||
}
|
||||
|
||||
function GetFolderGuid {
|
||||
param (
|
||||
[string]$templateContents,
|
||||
[string]$folderName
|
||||
)
|
||||
|
||||
$folderDefinitionRegex = "Project\(`"{2150E333-8FDC-42A3-9474-1A3956D46DE8}`"\) = `"$folderName`", `"$folderName`", `"\{(.+?)\}`"";
|
||||
|
||||
if (-not ($templateContents -match $folderDefinitionRegex)) {
|
||||
Write-Error "Folder `"$folderName`" was not found";
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
return $Matches[1];
|
||||
}
|
||||
|
||||
function AddProjectsToSolution {
|
||||
param (
|
||||
$templateContents,
|
||||
[string]$projectPath,
|
||||
[string]$projectTypeGuid,
|
||||
[string]$solutionFolder,
|
||||
[string]$projectGuid,
|
||||
[bool]$omitConfiguration
|
||||
)
|
||||
|
||||
if ($projectGuid.Length -eq 0) {
|
||||
$projectGuid = (New-Guid).ToString().ToUpper();
|
||||
}
|
||||
|
||||
$projectPath = Resolve-Path -Relative -Path $projectPath;
|
||||
$projectName = [System.IO.Path]::GetFileNameWithoutExtension($projectPath);
|
||||
|
||||
$sampleFolderGuid = GetFolderGuid $solutionTemplate $solutionFolder;
|
||||
|
||||
Write-Host "Adding $projectName to solution folder $solutionFolder";
|
||||
|
||||
$definition = CreateProjectDefinition $projectTypeGuid $projectGuid $projectName $projectPath;
|
||||
|
||||
$templateContents = $templateContents -replace [regex]::escape($templatedProjectDefinitionsMarker), ($templatedProjectDefinitionsMarker + $definition);
|
||||
|
||||
if (-not $omitConfiguration) {
|
||||
$configuration = CreateProjectConfiguration $projectGuid;
|
||||
$templateContents = $templateContents -replace [regex]::escape($templatedProjectConfigurationTemplateMarker), ($templatedProjectConfigurationTemplateMarker + $configuration);
|
||||
}
|
||||
|
||||
$folderPlacement = CreateFolderPlacementForProject $projectGuid $sampleFolderGuid;
|
||||
$templateContents = $templateContents -replace [regex]::escape($templatedProjectFolderConfigTemplateMarker), ($templatedProjectFolderConfigTemplateMarker + $folderPlacement);
|
||||
|
||||
return $templateContents;
|
||||
}
|
||||
|
||||
# Execute solution generation from template
|
||||
$solutionTemplate = Get-Content -Path $solutionTemplatePath;
|
||||
Write-Output "Loaded solution template from $solutionTemplatePath";
|
||||
|
||||
# Add sample projects
|
||||
foreach ($sampleProjectPath in Get-ChildItem -Recurse -Path 'labs/*/samples/*.Samples/*.Samples.csproj') {
|
||||
$solutionTemplate = AddProjectsToSolution $solutionTemplate $sampleProjectPath $sampleProjectTypeGuid "Samples"
|
||||
}
|
||||
|
||||
# Add library projects
|
||||
foreach ($sampleProjectPath in Get-ChildItem -Recurse -Path 'labs/*/src/*.csproj') {
|
||||
$solutionTemplate = AddProjectsToSolution $solutionTemplate $sampleProjectPath $libProjectTypeGuid "Library"
|
||||
}
|
||||
|
||||
# Add shared test projects
|
||||
foreach ($sharedProjectItemsPath in Get-ChildItem -Recurse -Path 'labs/*/tests/*.projitems') {
|
||||
$projitemsContents = Get-Content -Path $sharedProjectItemsPath;
|
||||
|
||||
$projectGuidRegex = '<SharedGUID>(.+?)<\/SharedGUID>';
|
||||
|
||||
$regex = Select-String -Pattern $projectGuidRegex -InputObject $projitemsContents;
|
||||
|
||||
if ($null -eq $regex -or $null -eq $regex.Matches -or $null -eq $regex.Matches.Groups -or $regex.Matches.Groups.Length -lt 2) {
|
||||
Write-Error "Couldn't get SharedGUID property from $sharedProjectItemsPath";
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
$projectGuid = $regex.Matches.Groups[1].Value;
|
||||
|
||||
$sharedProjectItemsPath = Resolve-Path -Relative -Path $sharedProjectItemsPath;
|
||||
|
||||
$sharedProjectPath = $sharedProjectItemsPath -replace "projitems", "shproj";
|
||||
$solutionTemplate = AddProjectsToSolution $solutionTemplate $sharedProjectPath $sharedProjectTypeGuid "Experiments" $projectGuid.ToUpper() $true;
|
||||
|
||||
$sharedProjectItemsName = [System.IO.Path]::GetFileNameWithoutExtension($sharedProjectItemsPath);
|
||||
|
||||
Write-Output "Linking $sharedProjectItemsName.projitems to $sharedProjectItemsName";
|
||||
$sharedProjectDefinition = CreateSharedProjectDefinition $projectGuid $sharedProjectItemsPath "13"
|
||||
$solutionTemplate = $solutionTemplate -replace [regex]::escape($templatedSharedTestProjectSelfDefinitionsMarker), ($templatedSharedTestProjectSelfDefinitionsMarker + $sharedProjectDefinition);
|
||||
|
||||
Write-Output "Linking $sharedProjectItemsName.projitems to CommunityToolkit.Labs.Tests.Uwp";
|
||||
$uwpSharedProjectDefinition = CreateSharedProjectDefinition "fd78002e-c4e6-4bf8-9ec3-c06250dfef34" $sharedProjectItemsPath "4"
|
||||
$solutionTemplate = $solutionTemplate -replace [regex]::escape($templatedSharedTestUwpProjectSelfDefinitionsMarker), ($templatedSharedTestUwpProjectSelfDefinitionsMarker + $uwpSharedProjectDefinition);
|
||||
|
||||
Write-Output "Linking $sharedProjectItemsName.projitems to CommunityToolkit.Labs.Tests.WinAppSdk";
|
||||
$winAppSdkSharedProjectDefinition = CreateSharedProjectDefinition "53892f07-fe54-4e36-81d8-105427d097e5" $sharedProjectItemsPath "5"
|
||||
$solutionTemplate = $solutionTemplate -replace [regex]::escape($templatedSharedTestWinAppSdkProjectSelfDefinitionsMarker), ($templatedSharedTestWinAppSdkProjectSelfDefinitionsMarker + $winAppSdkSharedProjectDefinition);
|
||||
}
|
||||
|
||||
# Clean up template markers
|
||||
$solutionTemplate = $solutionTemplate -replace [regex]::escape($templatedProjectFolderConfigTemplateMarker), "";
|
||||
$solutionTemplate = $solutionTemplate -replace [regex]::escape($templatedProjectConfigurationTemplateMarker), "";
|
||||
$solutionTemplate = $solutionTemplate -replace [regex]::escape($templatedProjectDefinitionsMarker), "";
|
||||
$solutionTemplate = $solutionTemplate -replace [regex]::escape($templatedSharedTestProjectSelfDefinitionsMarker), "";
|
||||
$solutionTemplate = $solutionTemplate -replace [regex]::escape($templatedSharedTestUwpProjectSelfDefinitionsMarker), "";
|
||||
$solutionTemplate = $solutionTemplate -replace [regex]::escape($templatedSharedTestWinAppSdkProjectSelfDefinitionsMarker), "";
|
||||
$solutionTemplate = $solutionTemplate -replace "(?m)^\s*`r`n", "";
|
||||
|
||||
# Save
|
||||
Set-Content -Path $generatedSolutionFilePath -Value $solutionTemplate;
|
||||
Write-Output "Solution generated at $generatedSolutionFilePath";
|
|
@ -19,7 +19,7 @@ You can find the corresponding `CommunityToolkit.Labs` packages in our Azure Dev
|
|||
|
||||
If you find an experiment useful, please up-vote 👍 its corresponding issue and comment with any feedback. Each experiment has an issue assigned to it with the `experiment` label for tracking. Please file any feedback or issues about that experiment on that singular issue. For any other questions or concerns, please [open a Discussion](https://github.com/CommunityToolkit/Labs-Windows/discussions).
|
||||
|
||||
Otherwise, you can clone the repo, open the `labs` directory, navigate within the folder for a particular experiment and open up it's solution file in Visual Studio. Run one of the project heads (_ExperimentName.Uwp/Wasm/WinAppSDK_) to see its samples.
|
||||
Otherwise, you can clone the repo, open the `components` directory, navigate within the folder for a particular experiment and open up it's solution file in Visual Studio. Run one of the project heads (_ExperimentName.Uwp/Wasm/WinAppSDK_) to see its samples.
|
||||
|
||||
## Build Requirements
|
||||
|
||||
|
@ -39,9 +39,9 @@ Once there is traction and your idea is approved, an issue will be created to tr
|
|||
Then you can fork the Labs repo, create a new branch, and start working on your feature (or porting over your existing prototype).
|
||||
|
||||
```ascii
|
||||
dotnet new --install .\template\lab\
|
||||
dotnet new --install .\template\ProjectTemplate\
|
||||
|
||||
cd labs
|
||||
cd components
|
||||
|
||||
dotnet new labexp -n MyExperimentNameHere
|
||||
```
|
||||
|
@ -68,7 +68,7 @@ Open up an issue on the main Toolkit repo using the `Toolkit Labs Transfer` Issu
|
|||
|
||||
## Building the Sample App
|
||||
|
||||
You can build the main Sample App solution to see all the experiments currently available in this repository by running the `GenerateAllSolution.ps1` PowerShell script in the repo root. Then just open the `Toolkit.Labs.All.sln` solution in Visual Studio. You can run one of the project heads under the platforms folder such as `CommunityToolkit.Labs.WinAppSdk` to run the sample app for that platform.
|
||||
You can build the main Sample App solution to see all the experiments currently available in this repository by running the `GenerateAllSolution.bat` script in the repo root. Then just open the `Toolkit.Labs.All.sln` solution in Visual Studio. You can run one of the project heads such as `CommunityToolkit.App.WinAppSdk` to run the sample app for that platform.
|
||||
|
||||
If you'd like to run a head beyond UWP, Wasm, or the WinAppSDK, you'll need to run the `UseTargetFrameworks.ps1` script first in the `common/Scripts` directory. e.g. `.\UseTargetFrameworks.ps1 -targets all`
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->
|
||||
<Application x:Class="CommunityToolkit.Labs.Shared.App"
|
||||
<Application x:Class="CommunityToolkit.App.Shared.App"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Application.Resources>
|
|
@ -2,7 +2,7 @@
|
|||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
namespace CommunityToolkit.Labs.Shared;
|
||||
namespace CommunityToolkit.App.Shared;
|
||||
|
||||
/// <summary>
|
||||
/// Provides application-specific behavior to supplement the default Application class.
|
|
@ -1,9 +1,9 @@
|
|||
<!-- Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE file in the project root for more information. -->
|
||||
<Page x:Class="CommunityToolkit.Labs.Shared.AppLoadingView"
|
||||
<Page x:Class="CommunityToolkit.App.Shared.AppLoadingView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="using:CommunityToolkit.Labs.Shared"
|
||||
xmlns:local="using:CommunityToolkit.App.Shared"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
|
||||
mc:Ignorable="d">
|
|
@ -2,11 +2,11 @@
|
|||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using CommunityToolkit.Labs.Core.SourceGenerators.Metadata;
|
||||
using CommunityToolkit.Labs.Core.SourceGenerators;
|
||||
using CommunityToolkit.Tooling.SampleGen.Metadata;
|
||||
using CommunityToolkit.Tooling.SampleGen;
|
||||
using System.Runtime.InteropServices.WindowsRuntime;
|
||||
using Windows.Foundation.Collections;
|
||||
using CommunityToolkit.Labs.Shared.Pages;
|
||||
using CommunityToolkit.App.Shared.Pages;
|
||||
|
||||
#if !WINAPPSDK
|
||||
using Windows.System;
|
||||
|
@ -24,7 +24,7 @@ using Microsoft.UI.Xaml.Media;
|
|||
using Microsoft.UI.Xaml.Navigation;
|
||||
#endif
|
||||
|
||||
namespace CommunityToolkit.Labs.Shared;
|
||||
namespace CommunityToolkit.App.Shared;
|
||||
|
||||
/// <summary>
|
||||
/// Kicks off the loading process and determines whether to display a single-sample or multi-sample view.
|
До Ширина: | Высота: | Размер: 637 B После Ширина: | Высота: | Размер: 637 B |
До Ширина: | Высота: | Размер: 806 B После Ширина: | Высота: | Размер: 806 B |
До Ширина: | Высота: | Размер: 960 B После Ширина: | Высота: | Размер: 960 B |
До Ширина: | Высота: | Размер: 1.3 KiB После Ширина: | Высота: | Размер: 1.3 KiB |
До Ширина: | Высота: | Размер: 3.4 KiB После Ширина: | Высота: | Размер: 3.4 KiB |
До Ширина: | Высота: | Размер: 3.2 KiB После Ширина: | Высота: | Размер: 3.2 KiB |
До Ширина: | Высота: | Размер: 6.0 KiB После Ширина: | Высота: | Размер: 6.0 KiB |
До Ширина: | Высота: | Размер: 3.2 KiB После Ширина: | Высота: | Размер: 3.2 KiB |
До Ширина: | Высота: | Размер: 4.6 KiB После Ширина: | Высота: | Размер: 4.6 KiB |
До Ширина: | Высота: | Размер: 3.6 KiB После Ширина: | Высота: | Размер: 3.6 KiB |
До Ширина: | Высота: | Размер: 346 KiB После Ширина: | Высота: | Размер: 346 KiB |
До Ширина: | Высота: | Размер: 359 KiB После Ширина: | Высота: | Размер: 359 KiB |
До Ширина: | Высота: | Размер: 7.6 KiB После Ширина: | Высота: | Размер: 7.6 KiB |
До Ширина: | Высота: | Размер: 8.4 KiB После Ширина: | Высота: | Размер: 8.4 KiB |
До Ширина: | Высота: | Размер: 11 KiB После Ширина: | Высота: | Размер: 11 KiB |
До Ширина: | Высота: | Размер: 11 KiB После Ширина: | Высота: | Размер: 11 KiB |
До Ширина: | Высота: | Размер: 16 KiB После Ширина: | Высота: | Размер: 16 KiB |
До Ширина: | Высота: | Размер: 16 KiB После Ширина: | Высота: | Размер: 16 KiB |
До Ширина: | Высота: | Размер: 20 KiB После Ширина: | Высота: | Размер: 20 KiB |
До Ширина: | Высота: | Размер: 20 KiB После Ширина: | Высота: | Размер: 20 KiB |
До Ширина: | Высота: | Размер: 33 KiB После Ширина: | Высота: | Размер: 33 KiB |
До Ширина: | Высота: | Размер: 33 KiB После Ширина: | Высота: | Размер: 33 KiB |
До Ширина: | Высота: | Размер: 107 KiB После Ширина: | Высота: | Размер: 107 KiB |
До Ширина: | Высота: | Размер: 107 KiB После Ширина: | Высота: | Размер: 107 KiB |
До Ширина: | Высота: | Размер: 1.4 KiB После Ширина: | Высота: | Размер: 1.4 KiB |
До Ширина: | Высота: | Размер: 3.0 KiB После Ширина: | Высота: | Размер: 3.0 KiB |
До Ширина: | Высота: | Размер: 3.0 KiB После Ширина: | Высота: | Размер: 3.0 KiB |
До Ширина: | Высота: | Размер: 4.6 KiB После Ширина: | Высота: | Размер: 4.6 KiB |
До Ширина: | Высота: | Размер: 4.6 KiB После Ширина: | Высота: | Размер: 4.6 KiB |
До Ширина: | Высота: | Размер: 5.8 KiB После Ширина: | Высота: | Размер: 5.8 KiB |
До Ширина: | Высота: | Размер: 5.8 KiB После Ширина: | Высота: | Размер: 5.8 KiB |
До Ширина: | Высота: | Размер: 8.9 KiB После Ширина: | Высота: | Размер: 8.9 KiB |
До Ширина: | Высота: | Размер: 8.9 KiB После Ширина: | Высота: | Размер: 8.9 KiB |
До Ширина: | Высота: | Размер: 28 KiB После Ширина: | Высота: | Размер: 28 KiB |
До Ширина: | Высота: | Размер: 28 KiB После Ширина: | Высота: | Размер: 28 KiB |
До Ширина: | Высота: | Размер: 11 KiB После Ширина: | Высота: | Размер: 11 KiB |
До Ширина: | Высота: | Размер: 11 KiB После Ширина: | Высота: | Размер: 11 KiB |
До Ширина: | Высота: | Размер: 11 KiB После Ширина: | Высота: | Размер: 11 KiB |
До Ширина: | Высота: | Размер: 11 KiB После Ширина: | Высота: | Размер: 11 KiB |
До Ширина: | Высота: | Размер: 18 KiB После Ширина: | Высота: | Размер: 18 KiB |
До Ширина: | Высота: | Размер: 18 KiB После Ширина: | Высота: | Размер: 18 KiB |
До Ширина: | Высота: | Размер: 18 KiB После Ширина: | Высота: | Размер: 18 KiB |
До Ширина: | Высота: | Размер: 22 KiB После Ширина: | Высота: | Размер: 22 KiB |
До Ширина: | Высота: | Размер: 22 KiB После Ширина: | Высота: | Размер: 22 KiB |
До Ширина: | Высота: | Размер: 22 KiB После Ширина: | Высота: | Размер: 22 KiB |
До Ширина: | Высота: | Размер: 35 KiB После Ширина: | Высота: | Размер: 35 KiB |
До Ширина: | Высота: | Размер: 35 KiB После Ширина: | Высота: | Размер: 35 KiB |
До Ширина: | Высота: | Размер: 35 KiB После Ширина: | Высота: | Размер: 35 KiB |
До Ширина: | Высота: | Размер: 114 KiB После Ширина: | Высота: | Размер: 114 KiB |
До Ширина: | Высота: | Размер: 114 KiB После Ширина: | Высота: | Размер: 114 KiB |
До Ширина: | Высота: | Размер: 114 KiB После Ширина: | Высота: | Размер: 114 KiB |
До Ширина: | Высота: | Размер: 4.5 KiB После Ширина: | Высота: | Размер: 4.5 KiB |
До Ширина: | Высота: | Размер: 4.6 KiB После Ширина: | Высота: | Размер: 4.6 KiB |
До Ширина: | Высота: | Размер: 4.6 KiB После Ширина: | Высота: | Размер: 4.6 KiB |
До Ширина: | Высота: | Размер: 6.7 KiB После Ширина: | Высота: | Размер: 6.7 KiB |
До Ширина: | Высота: | Размер: 6.7 KiB После Ширина: | Высота: | Размер: 6.7 KiB |
До Ширина: | Высота: | Размер: 9.3 KiB После Ширина: | Высота: | Размер: 9.3 KiB |
До Ширина: | Высота: | Размер: 9.3 KiB После Ширина: | Высота: | Размер: 9.3 KiB |
До Ширина: | Высота: | Размер: 13 KiB После Ширина: | Высота: | Размер: 13 KiB |
До Ширина: | Высота: | Размер: 13 KiB После Ширина: | Высота: | Размер: 13 KiB |
До Ширина: | Высота: | Размер: 42 KiB После Ширина: | Высота: | Размер: 42 KiB |
До Ширина: | Высота: | Размер: 42 KiB После Ширина: | Высота: | Размер: 42 KiB |
До Ширина: | Высота: | Размер: 1.6 KiB После Ширина: | Высота: | Размер: 1.6 KiB |
До Ширина: | Высота: | Размер: 1.4 KiB После Ширина: | Высота: | Размер: 1.4 KiB |
До Ширина: | Высота: | Размер: 1.4 KiB После Ширина: | Высота: | Размер: 1.4 KiB |
До Ширина: | Высота: | Размер: 1.9 KiB После Ширина: | Высота: | Размер: 1.9 KiB |
До Ширина: | Высота: | Размер: 1.9 KiB После Ширина: | Высота: | Размер: 1.9 KiB |
До Ширина: | Высота: | Размер: 2.5 KiB После Ширина: | Высота: | Размер: 2.5 KiB |
До Ширина: | Высота: | Размер: 2.5 KiB После Ширина: | Высота: | Размер: 2.5 KiB |
До Ширина: | Высота: | Размер: 3.6 KiB После Ширина: | Высота: | Размер: 3.6 KiB |
До Ширина: | Высота: | Размер: 3.6 KiB После Ширина: | Высота: | Размер: 3.6 KiB |
До Ширина: | Высота: | Размер: 9.9 KiB После Ширина: | Высота: | Размер: 9.9 KiB |
До Ширина: | Высота: | Размер: 9.9 KiB После Ширина: | Высота: | Размер: 9.9 KiB |
До Ширина: | Высота: | Размер: 637 B После Ширина: | Высота: | Размер: 637 B |
До Ширина: | Высота: | Размер: 637 B После Ширина: | Высота: | Размер: 637 B |
До Ширина: | Высота: | Размер: 637 B После Ширина: | Высота: | Размер: 637 B |
До Ширина: | Высота: | Размер: 806 B После Ширина: | Высота: | Размер: 806 B |
До Ширина: | Высота: | Размер: 806 B После Ширина: | Высота: | Размер: 806 B |
До Ширина: | Высота: | Размер: 806 B После Ширина: | Высота: | Размер: 806 B |
До Ширина: | Высота: | Размер: 960 B После Ширина: | Высота: | Размер: 960 B |
До Ширина: | Высота: | Размер: 960 B После Ширина: | Высота: | Размер: 960 B |
До Ширина: | Высота: | Размер: 960 B После Ширина: | Высота: | Размер: 960 B |
До Ширина: | Высота: | Размер: 29 KiB После Ширина: | Высота: | Размер: 29 KiB |
До Ширина: | Высота: | Размер: 29 KiB После Ширина: | Высота: | Размер: 29 KiB |
До Ширина: | Высота: | Размер: 29 KiB После Ширина: | Высота: | Размер: 29 KiB |
До Ширина: | Высота: | Размер: 1.3 KiB После Ширина: | Высота: | Размер: 1.3 KiB |
До Ширина: | Высота: | Размер: 1.3 KiB После Ширина: | Высота: | Размер: 1.3 KiB |