- init: init repo

This commit is contained in:
2026-04-10 11:17:17 +03:00
commit fc632663f2
74 changed files with 1086 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
bin/
obj/
/packages/
riderModule.iml
/_ReSharper.Caches/

15
.idea/.idea.LaborWork/.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,15 @@
# Default ignored files
/shelf/
/workspace.xml
# Rider ignored files
/projectSettingsUpdater.xml
/.idea.LaborWork.iml
/modules.xml
/contentModel.xml
# Ignored default folder with query files
/queries/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.activity.activity">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.activity.activity/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.activity.activity/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.annotation.annotation">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.annotation/1.9.1.3/jar/androidx.annotation.annotation.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.annotation.annotation-experimental">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.annotation.annotation-experimental/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.annotation.annotation-experimental/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.annotation.annotation-jvm">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.annotation.jvm/1.9.1.3/jar/androidx.annotation.annotation-jvm.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.appcompat.appcompat">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.appcompat.appcompat/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.appcompat.appcompat/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.appcompat.appcompat-resources">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.appcompat.appcompat-resources/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.appcompat.appcompat-resources/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.arch.core.core-common">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.arch.core.common/2.2.0.5/jar/androidx.arch.core.core-common.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.arch.core.core-runtime">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.arch.core.core-runtime/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.arch.core.core-runtime/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.collection.collection">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.collection/1.3.0.1/jar/androidx.collection.collection.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.collection.collection-jvm">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.collection.jvm/1.3.0.1/jar/androidx.collection.collection-jvm.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.concurrent.concurrent-futures">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.concurrent.futures/1.1.0.16/jar/androidx.concurrent.concurrent-futures.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.core.core">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.core.core/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.core.core/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.core.core-ktx">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.core.core-ktx/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.core.core-ktx/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.core.core-splashscreen">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.core.core-splashscreen/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.core.core-splashscreen/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.cursoradapter.cursoradapter">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.cursoradapter.cursoradapter/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.customview.customview">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.customview.customview/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.drawerlayout.drawerlayout">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.drawerlayout.drawerlayout/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.drawerlayout.drawerlayout/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.emoji2.emoji2">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.emoji2.emoji2/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.emoji2.emoji2/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.emoji2.emoji2-views-helper">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.emoji2.emoji2-views-helper/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.emoji2.emoji2-views-helper/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.fragment.fragment">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.fragment.fragment/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.fragment.fragment/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.interpolator.interpolator">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.interpolator.interpolator/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-common">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.lifecycle.common/2.6.2.2/jar/androidx.lifecycle.lifecycle-common.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-livedata-core">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-livedata-core/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-livedata-core/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-process">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-process/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-process/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-runtime">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-runtime/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-runtime/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-viewmodel">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-viewmodel/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-viewmodel/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.lifecycle.lifecycle-viewmodel-savedstate">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-viewmodel-savedstate/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.lifecycle.lifecycle-viewmodel-savedstate/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.loader.loader">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.loader.loader/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.profileinstaller.profileinstaller">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.profileinstaller.profileinstaller/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.profileinstaller.profileinstaller/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.resourceinspection.resourceinspection-annotation">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.androidx.resourceinspection.annotation/1.0.1.9/jar/androidx.resourceinspection.resourceinspection-annotation.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.savedstate.savedstate">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.savedstate.savedstate/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.savedstate.savedstate/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.startup.startup-runtime">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.startup.startup-runtime/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.startup.startup-runtime/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="androidx.tracing.tracing">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.tracing.tracing/classes.jar" />
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.tracing.tracing/res" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.vectordrawable.vectordrawable">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.vectordrawable.vectordrawable/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.vectordrawable.vectordrawable-animated">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.vectordrawable.vectordrawable-animated/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.versionedparcelable.versionedparcelable">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.versionedparcelable.versionedparcelable/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="androidx.viewpager.viewpager">
<CLASSES>
<root url="file://$USER_HOME$/AppData/Local/Temp/JetBrains/xamarinAarPackages/androidx.viewpager.viewpager/classes.jar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="guava-listenablefuture">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.google.guava.listenablefuture/1.0.0.16/jar/guava-listenablefuture.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlin.kotlin-stdlib-common-1.9.10">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlin.stdlib.common/1.9.10.2/jar/org.jetbrains.kotlin.kotlin-stdlib-common-1.9.10.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.9.10">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlin.stdlib.jdk7/1.9.10.2/jar/org.jetbrains.kotlin.kotlin-stdlib-jdk7-1.9.10.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlin.kotlin-stdlib-jdk8-1.9.10">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlin.stdlib.jdk8/1.9.10.2/jar/org.jetbrains.kotlin.kotlin-stdlib-jdk8-1.9.10.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlinx.kotlinx-coroutines-android-1.7.3">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlinx.coroutines.android/1.7.3.2/jar/org.jetbrains.kotlinx.kotlinx-coroutines-android-1.7.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.7.3">
<CLASSES>
<root url="jar://$USER_HOME$/.nuget/packages/xamarin.kotlinx.coroutines.core.jvm/1.7.3.2/jar/org.jetbrains.kotlinx.kotlinx-coroutines-core-jvm-1.7.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

6
.idea/.idea.LaborWork/.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

21
Directory.Packages.props Normal file
View File

@@ -0,0 +1,21 @@
<Project>
<!-- https://learn.microsoft.com/en-us/nuget/consume-packages/central-package-management -->
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<!-- Avalonia packages -->
<!-- Important: keep version in sync! -->
<PackageVersion Include="Avalonia" Version="11.3.12" />
<PackageVersion Include="Avalonia.Labs.Panels" Version="11.3.1" />
<PackageVersion Include="Avalonia.Themes.Fluent" Version="11.3.12" />
<PackageVersion Include="Avalonia.Fonts.Inter" Version="11.3.12" />
<PackageVersion Include="Avalonia.Diagnostics" Version="11.3.12" />
<PackageVersion Include="Avalonia.Desktop" Version="11.3.12" />
<PackageVersion Include="Avalonia.iOS" Version="11.3.12" />
<PackageVersion Include="Avalonia.Browser" Version="11.3.12" />
<PackageVersion Include="Avalonia.Android" Version="11.3.12" />
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageVersion Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.0.1.15" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk.WebAssembly">
<PropertyGroup>
<TargetFramework>net10.0-browser</TargetFramework>
<OutputType>Exe</OutputType>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia.Browser"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LaborWork\LaborWork.csproj"/>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,15 @@
using System.Runtime.Versioning;
using System.Threading.Tasks;
using Avalonia;
using Avalonia.Browser;
using LaborWork;
internal sealed partial class Program
{
private static Task Main(string[] args) => BuildAvaloniaApp()
.WithInterFont()
.StartBrowserAppAsync("out");
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>();
}

View File

@@ -0,0 +1 @@
[assembly: System.Runtime.Versioning.SupportedOSPlatform("browser")]

View File

@@ -0,0 +1,13 @@
{
"profiles": {
"LaborWork.Browser": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:7169;http://localhost:5235",
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}"
}
}
}

View File

@@ -0,0 +1,10 @@
{
"wasmHostProperties": {
"perHostConfig": [
{
"name": "browser",
"host": "browser"
}
]
}
}

View File

@@ -0,0 +1,58 @@
/* HTML styles for the splash screen */
.avalonia-splash {
position: absolute;
height: 100%;
width: 100%;
background: white;
font-family: 'Outfit', sans-serif;
justify-content: center;
align-items: center;
display: flex;
pointer-events: none;
}
/* Light theme styles */
@media (prefers-color-scheme: light) {
.avalonia-splash {
background: white;
}
.avalonia-splash h2 {
color: #1b2a4e;
}
.avalonia-splash a {
color: #0D6EFD;
}
}
@media (prefers-color-scheme: dark) {
.avalonia-splash {
background: #1b2a4e;
}
.avalonia-splash h2 {
color: white;
}
.avalonia-splash a {
color: white;
}
}
.avalonia-splash h2 {
font-weight: 400;
font-size: 1.5rem;
}
.avalonia-splash a {
text-decoration: none;
font-size: 2.5rem;
display: block;
}
.avalonia-splash.splash-close {
transition: opacity 200ms, display 200ms;
display: none;
opacity: 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

View File

@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<title>LaborWork.Browser</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./app.css" />
</head>
<body style="margin: 0; overflow: hidden">
<div id="out">
<div class="avalonia-splash">
<h2>
Загрузка...
</h2>
</div>
</div>
<script type='module' src="./main.js"></script>
</body>
</html>

View File

@@ -0,0 +1,13 @@
import { dotnet } from './_framework/dotnet.js'
const is_browser = typeof window != "undefined";
if (!is_browser) throw new Error(`Expected to be running in a browser`);
const dotnetRuntime = await dotnet
.withDiagnosticTracing(false)
.withApplicationArgumentsFromQuery()
.create();
const config = dotnetRuntime.getConfig();
await dotnetRuntime.runMain(config.mainAssemblyName, [globalThis.location.href]);

36
LaborWork.sln Normal file
View File

@@ -0,0 +1,36 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32811.315
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LaborWork", "LaborWork\LaborWork.csproj", "{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LaborWork.Browser", "LaborWork.Browser\LaborWork.Browser.csproj", "{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3DA99C4E-89E3-4049-9C22-0A7EC60D83D8}"
ProjectSection(SolutionItems) = preProject
Directory.Packages.props = Directory.Packages.props
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Release|Any CPU.Build.0 = Release|Any CPU
{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1C1A049E-235C-4CD0-B6FA-D53AC418F4DA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {83CB65B8-011F-4ED7-BCD3-A6CFA935EF7E}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,3 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFlexPanel_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fd89f5cdd6fcc709bf64bb344b6d9a7e136391412b56d89776722229aa8109c_003FFlexPanel_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ALayoutable_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003F1edefc737d6d841fe8ded6818ca6b2f86522867bc89937ba54a07e7b7df7de_003FLayoutable_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>

15
LaborWork/App.axaml Normal file
View File

@@ -0,0 +1,15 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:LaborWork"
x:Class="LaborWork.App"
RequestedThemeVariant="Default">
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
<Application.DataTemplates>
<local:ViewLocator/>
</Application.DataTemplates>
<Application.Styles>
<FluentTheme />
</Application.Styles>
</Application>

54
LaborWork/App.axaml.cs Normal file
View File

@@ -0,0 +1,54 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core;
using Avalonia.Data.Core.Plugins;
using System.Linq;
using Avalonia.Markup.Xaml;
using LaborWork.ViewModels;
using LaborWork.Views;
namespace LaborWork;
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
// Avoid duplicate validations from both Avalonia and the CommunityToolkit.
// More info: https://docs.avaloniaui.net/docs/guides/development-guides/data-validation#manage-validationplugins
DisableAvaloniaDataAnnotationValidation();
desktop.MainWindow = new MainWindow
{
DataContext = new MainViewModel()
};
}
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
{
singleViewPlatform.MainView = new MainView
{
DataContext = new MainViewModel()
};
}
base.OnFrameworkInitializationCompleted();
}
private void DisableAvaloniaDataAnnotationValidation()
{
// Get an array of plugins to remove
var dataValidationPluginsToRemove =
BindingPlugins.DataValidators.OfType<DataAnnotationsValidationPlugin>().ToArray();
// remove each entry found
foreach (var plugin in dataValidationPluginsToRemove)
{
BindingPlugins.DataValidators.Remove(plugin);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

25
LaborWork/Converters.cs Normal file
View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using Avalonia.Data.Converters;
namespace LaborWork;
public class HeightConverter : IMultiValueConverter
{
public static readonly HeightConverter Instance = new();
public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)
{
if (values.Count >= 2 && values[0] is int value && values[1] is double windowHeight)
{
Console.WriteLine("YAY");
// value - это число от 10 до 100
// windowHeight - высота окна
// Делаем отступ снизу 50 пикселей
return (value / 100.0) * (windowHeight - 50);
}
Console.WriteLine($"NOO " + values[0].GetType().Name);
return 0;
}
}

View File

@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
</PropertyGroup>
<ItemGroup>
<AvaloniaResource Include="Assets\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" />
<PackageReference Include="Avalonia.Labs.Panels" />
<PackageReference Include="Avalonia.Themes.Fluent" />
<PackageReference Include="Avalonia.Fonts.Inter" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Include="Avalonia.Diagnostics">
<IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
</PackageReference>
<PackageReference Include="CommunityToolkit.Mvvm" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,10 @@
namespace LaborWork.Models;
public enum ItemState
{
Default, // Обычный цвет
Pivot, // Опорный элемент (красный)
Compare, // Сравниваемые элементы (желтый)
Swap, // Элементы при обмене (оранжевый)
Sorted // Отсортированная часть (зеленый)
}

View File

@@ -0,0 +1,48 @@
using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Avalonia.Media;
namespace LaborWork.Models;
public class SortItem : INotifyPropertyChanged
{
private float _value;
private ItemState _state;
public float Value
{
get => _value;
set { _value = value; OnPropertyChanged(); }
}
public ItemState State
{
get => _state;
set { _state = value; OnPropertyChanged(); OnPropertyChanged(nameof(Color)); }
}
// Вспомогательное свойство для привязки цвета в XAML
public IBrush Color
{
get
{
return State switch
{
ItemState.Pivot => Brushes.Red,
ItemState.Compare => Brushes.Yellow,
ItemState.Swap => Brushes.Orange,
ItemState.Sorted => Brushes.Green,
_ => Brushes.DodgerBlue
};
}
}
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

37
LaborWork/ViewLocator.cs Normal file
View File

@@ -0,0 +1,37 @@
using System;
using System.Diagnostics.CodeAnalysis;
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using LaborWork.ViewModels;
namespace LaborWork;
/// <summary>
/// Given a view model, returns the corresponding view if possible.
/// </summary>
[RequiresUnreferencedCode(
"Default implementation of ViewLocator involves reflection which may be trimmed away.",
Url = "https://docs.avaloniaui.net/docs/concepts/view-locator")]
public class ViewLocator : IDataTemplate
{
public Control? Build(object? param)
{
if (param is null)
return null;
var name = param.GetType().FullName!.Replace("ViewModel", "View", StringComparison.Ordinal);
var type = Type.GetType(name);
if (type != null)
{
return (Control)Activator.CreateInstance(type)!;
}
return new TextBlock { Text = "Not Found: " + name };
}
public bool Match(object? data)
{
return data is ViewModelBase;
}
}

View File

@@ -0,0 +1,109 @@
using System;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using LaborWork.Models;
namespace LaborWork.ViewModels;
public partial class MainViewModel : ViewModelBase
{
[ObservableProperty] private int _arraySize = 30;
[ObservableProperty] private bool _isSorting;
[ObservableProperty] private ObservableCollection<SortItem> _items = new();
[ObservableProperty] private int _speed = 50;
[RelayCommand]
private void GenerateArray()
{
if (IsSorting) return;
Items.Clear();
var random = new Random();
for (var i = 0; i < ArraySize; i++)
Items.Add(new SortItem { Value = (float)(50 + random.NextDouble() * 220), State = ItemState.Default });
}
[RelayCommand]
private async Task StartSort()
{
if (IsSorting || Items.Count == 0) return;
IsSorting = true;
foreach (var item in Items) item.State = ItemState.Default;
await QuickSort(0, Items.Count - 1);
foreach (var item in Items) item.State = IsSorting ? ItemState.Sorted : ItemState.Default;
IsSorting = false;
}
[RelayCommand]
private void StopSort()
{
IsSorting = false;
}
private async Task QuickSort(int left, int right)
{
if (left >= right) return;
var pivotIndex = left + (right - left) / 2;
var pivotValue = Items[pivotIndex].Value;
Items[pivotIndex].State = ItemState.Pivot;
await Task.Delay(Speed);
var i = left;
var j = right;
while (i <= j)
{
while (Items[i].Value < pivotValue)
{
if(!IsSorting) return;
Items[i].State = ItemState.Compare;
await Task.Delay(Speed / 2);
Items[i].State = ItemState.Default;
i++;
}
while (Items[j].Value > pivotValue)
{
if(!IsSorting) return;
Items[j].State = ItemState.Compare;
await Task.Delay(Speed / 2);
Items[j].State = ItemState.Default;
j--;
}
if (i <= j)
{
// Обмен местами
Items[i].State = ItemState.Swap;
Items[j].State = ItemState.Swap;
(Items[i].Value, Items[j].Value) = (Items[j].Value, Items[i].Value);
await Task.Delay(Speed);
Items[i].State = ItemState.Default;
Items[j].State = ItemState.Default;
i++;
j--;
}
}
Items[pivotIndex].State = ItemState.Default;
await QuickSort(left, j);
await QuickSort(i, right);
}
}

View File

@@ -0,0 +1,7 @@
using CommunityToolkit.Mvvm.ComponentModel;
namespace LaborWork.ViewModels;
public abstract class ViewModelBase : ObservableObject
{
}

View File

@@ -0,0 +1,68 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:LaborWork"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:LaborWork.ViewModels"
xmlns:panels="clr-namespace:Avalonia.Labs.Panels;assembly=Avalonia.Labs.Panels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="600"
x:Class="LaborWork.Views.MainView"
x:DataType="viewModels:MainViewModel">
<DockPanel Margin="20">
<panels:FlexPanel DockPanel.Dock="Top"
Direction="Row"
AlignItems="Center" Wrap="Wrap"
Margin="0 0 0 20">
<Button Command="{Binding GenerateArrayCommand}" Content="Сгенерировать" Width="120"/>
<Button Command="{Binding StartSortCommand}" Content="Старт" Width="120"
IsVisible="{Binding !IsSorting}"/>
<Button Command="{Binding StopSortCommand}" Content="Стоп" Width="120"
IsVisible="{Binding IsSorting}"/>
<StackPanel Spacing="5" Orientation="Horizontal">
<TextBlock Text="Размер:" VerticalAlignment="Center"/>
<Slider Value="{Binding ArraySize}" Minimum="10" Maximum="100" Width="150"/>
<TextBlock VerticalAlignment="Center" Text="{Binding ArraySize}" Width="30"/>
</StackPanel>
<StackPanel Spacing="5" Orientation="Horizontal">
<TextBlock Text="Скорость:" VerticalAlignment="Center"/>
<Slider Value="{Binding Speed}" Minimum="10" Maximum="500" Width="150"
TickFrequency="10" IsSnapToTickEnabled="True"/>
</StackPanel>
</panels:FlexPanel>
<Border BorderBrush="Gray" BorderThickness="1" CornerRadius="5" Background="#1E1E1E">
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Spacing="2"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Panel>
<Border Width="20"
Background="{Binding Color}"
CornerRadius="2 2 0 0" VerticalAlignment="Bottom"
ToolTip.Tip="{Binding Value}" Height="{Binding Value}">
</Border>
<LayoutTransformControl VerticalAlignment="Bottom">
<LayoutTransformControl.LayoutTransform>
<RotateTransform Angle="90"/>
</LayoutTransformControl.LayoutTransform>
<TextBlock
Text="{Binding Value, StringFormat={}{0:0.00}}"/>
</LayoutTransformControl>
</Panel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
</DockPanel>
</UserControl>

View File

@@ -0,0 +1,11 @@
using Avalonia.Controls;
namespace LaborWork.Views;
public partial class MainView : UserControl
{
public MainView()
{
InitializeComponent();
}
}

View File

@@ -0,0 +1,12 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:LaborWork.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="using:LaborWork.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="LaborWork.Views.MainWindow"
Icon="/Assets/avalonia-logo.ico"
Title="LaborWork">
<views:MainView />
</Window>

View File

@@ -0,0 +1,11 @@
using Avalonia.Controls;
namespace LaborWork.Views;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}