diff --git a/Serein.Workbench.Avalonia.Android/Icon.png b/Serein.Workbench.Avalonia.Android/Icon.png new file mode 100644 index 0000000..41a2a61 Binary files /dev/null and b/Serein.Workbench.Avalonia.Android/Icon.png differ diff --git a/Serein.Workbench.Avalonia.Android/MainActivity.cs b/Serein.Workbench.Avalonia.Android/MainActivity.cs new file mode 100644 index 0000000..7d5afa0 --- /dev/null +++ b/Serein.Workbench.Avalonia.Android/MainActivity.cs @@ -0,0 +1,22 @@ +using Android.App; +using Android.Content.PM; + +using Avalonia; +using Avalonia.Android; + +namespace Serein.Workbench.Avalonia.Android; + +[Activity( + Label = "Serein.Workbench.Avalonia.Android", + Theme = "@style/MyTheme.NoActionBar", + Icon = "@drawable/icon", + MainLauncher = true, + ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)] +public class MainActivity : AvaloniaMainActivity +{ + protected override AppBuilder CustomizeAppBuilder(AppBuilder builder) + { + return base.CustomizeAppBuilder(builder) + .WithInterFont(); + } +} diff --git a/Serein.Workbench.Avalonia.Android/Properties/AndroidManifest.xml b/Serein.Workbench.Avalonia.Android/Properties/AndroidManifest.xml new file mode 100644 index 0000000..a561c56 --- /dev/null +++ b/Serein.Workbench.Avalonia.Android/Properties/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Serein.Workbench.Avalonia.Android/Resources/drawable/splash_screen.xml b/Serein.Workbench.Avalonia.Android/Resources/drawable/splash_screen.xml new file mode 100644 index 0000000..2e920b4 --- /dev/null +++ b/Serein.Workbench.Avalonia.Android/Resources/drawable/splash_screen.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/Serein.Workbench.Avalonia.Android/Resources/values-night/colors.xml b/Serein.Workbench.Avalonia.Android/Resources/values-night/colors.xml new file mode 100644 index 0000000..3d47b6f --- /dev/null +++ b/Serein.Workbench.Avalonia.Android/Resources/values-night/colors.xml @@ -0,0 +1,4 @@ + + + #212121 + diff --git a/Serein.Workbench.Avalonia.Android/Resources/values/colors.xml b/Serein.Workbench.Avalonia.Android/Resources/values/colors.xml new file mode 100644 index 0000000..59279d5 --- /dev/null +++ b/Serein.Workbench.Avalonia.Android/Resources/values/colors.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + diff --git a/Serein.Workbench.Avalonia.Android/Resources/values/styles.xml b/Serein.Workbench.Avalonia.Android/Resources/values/styles.xml new file mode 100644 index 0000000..6e534de --- /dev/null +++ b/Serein.Workbench.Avalonia.Android/Resources/values/styles.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/Serein.Workbench.Avalonia.Android/Serein.Workbench.Avalonia.Android.csproj b/Serein.Workbench.Avalonia.Android/Serein.Workbench.Avalonia.Android.csproj new file mode 100644 index 0000000..94feb2b --- /dev/null +++ b/Serein.Workbench.Avalonia.Android/Serein.Workbench.Avalonia.Android.csproj @@ -0,0 +1,28 @@ + + + Exe + net8.0-android + 21 + enable + com.CompanyName.AvaloniaTest + 1 + 1.0 + apk + False + + + + + Resources\drawable\Icon.png + + + + + + + + + + + + diff --git a/Serein.Workbench.Avalonia.Browser/Program.cs b/Serein.Workbench.Avalonia.Browser/Program.cs new file mode 100644 index 0000000..3fd277e --- /dev/null +++ b/Serein.Workbench.Avalonia.Browser/Program.cs @@ -0,0 +1,17 @@ +using System.Runtime.Versioning; +using System.Threading.Tasks; + +using Avalonia; +using Avalonia.Browser; + +using Serein.Workbench.Avalonia; + +internal sealed partial class Program +{ + private static Task Main(string[] args) => BuildAvaloniaApp() + .WithInterFont() + .StartBrowserAppAsync("out"); + + public static AppBuilder BuildAvaloniaApp() + => AppBuilder.Configure(); +} diff --git a/Serein.Workbench.Avalonia.Browser/Properties/AssemblyInfo.cs b/Serein.Workbench.Avalonia.Browser/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..fb78795 --- /dev/null +++ b/Serein.Workbench.Avalonia.Browser/Properties/AssemblyInfo.cs @@ -0,0 +1 @@ +[assembly:System.Runtime.Versioning.SupportedOSPlatform("browser")] diff --git a/Serein.Workbench.Avalonia.Browser/Properties/launchSettings.json b/Serein.Workbench.Avalonia.Browser/Properties/launchSettings.json new file mode 100644 index 0000000..33ed958 --- /dev/null +++ b/Serein.Workbench.Avalonia.Browser/Properties/launchSettings.json @@ -0,0 +1,13 @@ +{ + "profiles": { + "Serein.Workbench.Avalonia.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}", + } + } +} diff --git a/Serein.Workbench.Avalonia.Browser/Serein.Workbench.Avalonia.Browser.csproj b/Serein.Workbench.Avalonia.Browser/Serein.Workbench.Avalonia.Browser.csproj new file mode 100644 index 0000000..a8f3adc --- /dev/null +++ b/Serein.Workbench.Avalonia.Browser/Serein.Workbench.Avalonia.Browser.csproj @@ -0,0 +1,15 @@ + + + net8.0-browser + Exe + true + + + + + + + + + + diff --git a/Serein.Workbench.Avalonia.Browser/runtimeconfig.template.json b/Serein.Workbench.Avalonia.Browser/runtimeconfig.template.json new file mode 100644 index 0000000..b96a943 --- /dev/null +++ b/Serein.Workbench.Avalonia.Browser/runtimeconfig.template.json @@ -0,0 +1,10 @@ +{ + "wasmHostProperties": { + "perHostConfig": [ + { + "name": "browser", + "host": "browser" + } + ] + } +} \ No newline at end of file diff --git a/Serein.Workbench.Avalonia.Browser/wwwroot/app.css b/Serein.Workbench.Avalonia.Browser/wwwroot/app.css new file mode 100644 index 0000000..1d6f754 --- /dev/null +++ b/Serein.Workbench.Avalonia.Browser/wwwroot/app.css @@ -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; +} diff --git a/Serein.Workbench.Avalonia.Browser/wwwroot/favicon.ico b/Serein.Workbench.Avalonia.Browser/wwwroot/favicon.ico new file mode 100644 index 0000000..da8d49f Binary files /dev/null and b/Serein.Workbench.Avalonia.Browser/wwwroot/favicon.ico differ diff --git a/Serein.Workbench.Avalonia.Browser/wwwroot/index.html b/Serein.Workbench.Avalonia.Browser/wwwroot/index.html new file mode 100644 index 0000000..276740d --- /dev/null +++ b/Serein.Workbench.Avalonia.Browser/wwwroot/index.html @@ -0,0 +1,36 @@ + + + + + Serein.Workbench.Avalonia + + + + + + +
+
+

+ Powered by + + + + + + + + + + + + + + +

+
+
+ + + + diff --git a/Serein.Workbench.Avalonia.Browser/wwwroot/main.js b/Serein.Workbench.Avalonia.Browser/wwwroot/main.js new file mode 100644 index 0000000..bf1555e --- /dev/null +++ b/Serein.Workbench.Avalonia.Browser/wwwroot/main.js @@ -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]);