+ Swapping to Development environment will display more detailed information about the error that occurred.
+
+
+ The Development environment shouldn't be enabled for deployed applications.
+ It can result in displaying sensitive information from exceptions to end users.
+ For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development
+ and restarting the app.
+
+
+@code{
+ [CascadingParameter]
+ private HttpContext? HttpContext { get; set; }
+
+ private string? RequestId { get; set; }
+ private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
+
+ protected override void OnInitialized() =>
+ RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
+}
diff --git a/FruitBankHybrid.Web/Components/_Imports.razor b/FruitBankHybrid.Web/Components/_Imports.razor
new file mode 100644
index 00000000..83cba545
--- /dev/null
+++ b/FruitBankHybrid.Web/Components/_Imports.razor
@@ -0,0 +1,14 @@
+@using System.Net.Http
+@using System.Net.Http.Json
+@using Microsoft.AspNetCore.Components.Forms
+@using Microsoft.AspNetCore.Components.Routing
+@using Microsoft.AspNetCore.Components.Web
+@using static Microsoft.AspNetCore.Components.Web.RenderMode
+@using Microsoft.AspNetCore.Components.Web.Virtualization
+@using Microsoft.JSInterop
+@using FruitBankHybrid.Shared
+@using FruitBankHybrid.Web
+@using FruitBankHybrid.Web.Client
+@using FruitBankHybrid.Web.Components
+
+@using DevExpress.Blazor
\ No newline at end of file
diff --git a/FruitBankHybrid.Web/FruitBankHybrid.Web.csproj b/FruitBankHybrid.Web/FruitBankHybrid.Web.csproj
new file mode 100644
index 00000000..dda96997
--- /dev/null
+++ b/FruitBankHybrid.Web/FruitBankHybrid.Web.csproj
@@ -0,0 +1,83 @@
+
+
+
+ net9.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Core.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Core.Server.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Entities.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Entities.Server.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Interfaces.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Interfaces.Server.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Models.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Models.Server.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Services.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Services.Server.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Utils.dll
+
+
+ C:\Program Files\DevExpress 25.1\Components\Bin\NetCore\DevExpress.Blazor.Resources.v25.1.dll
+
+
+ C:\Program Files\DevExpress 25.1\Components\Bin\NetCore\DevExpress.Blazor.v25.1.dll
+
+
+ C:\Program Files\DevExpress 25.1\Components\Bin\NetCore\DevExpress.Blazor.v25.1.Viewer.dll
+
+
+ C:\Program Files\DevExpress 25.1\Components\Bin\NetCore\DevExpress.Data.v25.1.dll
+
+
+ C:\Program Files\DevExpress 25.1\Components\Bin\NetCore\DevExpress.Utils.v25.1.dll
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FruitBankHybrid.Web/Program.cs b/FruitBankHybrid.Web/Program.cs
new file mode 100644
index 00000000..e746452b
--- /dev/null
+++ b/FruitBankHybrid.Web/Program.cs
@@ -0,0 +1,53 @@
+using AyCode.Core.Loggers;
+using FruitBank.Common;
+using FruitBank.Common.Server.Services.Loggers;
+using FruitBank.Common.Server.Services.SignalRs;
+using FruitBankHybrid.Shared.Services;
+using FruitBankHybrid.Web.Components;
+using FruitBankHybrid.Web.Services;
+
+var builder = WebApplication.CreateBuilder(args);
+
+builder.Services.AddRazorComponents().AddInteractiveServerComponents().AddInteractiveWebAssemblyComponents();
+builder.Services.AddDevExpressBlazor();
+builder.Services.AddMvc();
+
+builder.Services.AddSingleton();
+
+builder.Services.AddSingleton();
+builder.Services.AddSingleton();
+//builder.Services.AddSingleton();
+
+//builder.Services.AddScoped();
+builder.Services.AddSignalR(options => options.MaximumReceiveMessageSize = 256 * 1024);
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+if (app.Environment.IsDevelopment())
+{
+ app.UseWebAssemblyDebugging();
+}
+else
+{
+ app.UseExceptionHandler("/Error", createScopeForErrors: true);
+ // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+ app.UseHsts();
+}
+
+app.MapHub($"/{FruitBankConstClient.LoggerHubName}");
+app.MapHub($"/{FruitBankConstClient.DefaultHubName}");
+
+app.UseHttpsRedirection();
+
+app.UseStaticFiles();
+app.UseAntiforgery();
+app.MapStaticAssets();
+
+app.MapRazorComponents()
+ //.AddInteractiveServerRenderMode()
+ .AddInteractiveWebAssemblyRenderMode()
+ .AddAdditionalAssemblies(
+ typeof(FruitBankHybrid.Shared._Imports).Assembly,
+ typeof(FruitBankHybrid.Web.Client._Imports).Assembly);
+
+app.Run();
diff --git a/FruitBankHybrid.Web/Services/FormFactor.cs b/FruitBankHybrid.Web/Services/FormFactor.cs
new file mode 100644
index 00000000..027d96d5
--- /dev/null
+++ b/FruitBankHybrid.Web/Services/FormFactor.cs
@@ -0,0 +1,17 @@
+using FruitBankHybrid.Shared.Services;
+
+namespace FruitBankHybrid.Web.Services
+{
+ public class FormFactor : IFormFactor
+ {
+ public string GetFormFactor()
+ {
+ return "Web";
+ }
+
+ public string GetPlatform()
+ {
+ return Environment.OSVersion.ToString();
+ }
+ }
+}
diff --git a/FruitBankHybrid.Web/appsettings.Development.json b/FruitBankHybrid.Web/appsettings.Development.json
new file mode 100644
index 00000000..0c208ae9
--- /dev/null
+++ b/FruitBankHybrid.Web/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/FruitBankHybrid.Web/appsettings.json b/FruitBankHybrid.Web/appsettings.json
new file mode 100644
index 00000000..48f2d688
--- /dev/null
+++ b/FruitBankHybrid.Web/appsettings.json
@@ -0,0 +1,28 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*",
+
+ "AyCode": {
+ "ProjectId": "aad53443-2ee2-4650-8a99-97e907265e4e",
+ "Urls": {
+ "BaseUrl": "https://localhost:7144",
+ "ApiBaseUrl": "https://localhost:7144"
+ },
+ "Logger": {
+ "AppType": "Server",
+ "LogLevel": "Detail",
+ "LogWriters": [
+ {
+ "LogLevel": "Detail",
+ "LogWriterType": "FruitBank.Common.Server.Services.Loggers.ConsoleLogWriter, FruitBank.Common.Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
+ }
+ ]
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/FruitBankHybrid.sln b/FruitBankHybrid.sln
new file mode 100644
index 00000000..19de8bfb
--- /dev/null
+++ b/FruitBankHybrid.sln
@@ -0,0 +1,67 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36414.22
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FruitBankHybrid", "FruitBankHybrid\FruitBankHybrid.csproj", "{85ADEDE3-C271-47DF-B273-2EDB32792CEF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FruitBankHybrid.Shared", "FruitBankHybrid.Shared\FruitBankHybrid.Shared.csproj", "{899988C3-8F36-4B19-A1DE-1D1D85F114D2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FruitBankHybrid.Web", "FruitBankHybrid.Web\FruitBankHybrid.Web.csproj", "{AB2ED973-EBCD-4098-BF7B-045382221D1B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FruitBankHybrid.Web.Client", "FruitBankHybrid.Web.Client\FruitBankHybrid.Web.Client.csproj", "{4E4B641B-1757-4A37-8FFE-769F6E0C98EC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FruitBank.Common", "FruitBank.Common\FruitBank.Common.csproj", "{843805DF-6643-1364-D890-14B2E4826278}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FruitBank.Common.Server", "FruitBank.Common.Server\FruitBank.Common.Server.csproj", "{95069D8D-BCD5-77C6-DFAB-3F4C5ADBA85B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FruitBankHybrid.Shared.Common", "FruitBankHybrid.Shared.Common\FruitBankHybrid.Shared.Common.csproj", "{ABEDC482-1EC3-A770-227F-D69CE16F36A5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FruitBankHybrid.Shared.Tests", "FruitBankHybrid.Shared.Tests\FruitBankHybrid.Shared.Tests.csproj", "{4E4E4917-1CA3-A7D7-40A8-A24A08673EC1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {85ADEDE3-C271-47DF-B273-2EDB32792CEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {85ADEDE3-C271-47DF-B273-2EDB32792CEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {85ADEDE3-C271-47DF-B273-2EDB32792CEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {85ADEDE3-C271-47DF-B273-2EDB32792CEF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {899988C3-8F36-4B19-A1DE-1D1D85F114D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {899988C3-8F36-4B19-A1DE-1D1D85F114D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {899988C3-8F36-4B19-A1DE-1D1D85F114D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {899988C3-8F36-4B19-A1DE-1D1D85F114D2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AB2ED973-EBCD-4098-BF7B-045382221D1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AB2ED973-EBCD-4098-BF7B-045382221D1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AB2ED973-EBCD-4098-BF7B-045382221D1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AB2ED973-EBCD-4098-BF7B-045382221D1B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4E4B641B-1757-4A37-8FFE-769F6E0C98EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4E4B641B-1757-4A37-8FFE-769F6E0C98EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4E4B641B-1757-4A37-8FFE-769F6E0C98EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4E4B641B-1757-4A37-8FFE-769F6E0C98EC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {843805DF-6643-1364-D890-14B2E4826278}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {843805DF-6643-1364-D890-14B2E4826278}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {843805DF-6643-1364-D890-14B2E4826278}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {843805DF-6643-1364-D890-14B2E4826278}.Release|Any CPU.Build.0 = Release|Any CPU
+ {95069D8D-BCD5-77C6-DFAB-3F4C5ADBA85B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {95069D8D-BCD5-77C6-DFAB-3F4C5ADBA85B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {95069D8D-BCD5-77C6-DFAB-3F4C5ADBA85B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {95069D8D-BCD5-77C6-DFAB-3F4C5ADBA85B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ABEDC482-1EC3-A770-227F-D69CE16F36A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ABEDC482-1EC3-A770-227F-D69CE16F36A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ABEDC482-1EC3-A770-227F-D69CE16F36A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ABEDC482-1EC3-A770-227F-D69CE16F36A5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4E4E4917-1CA3-A7D7-40A8-A24A08673EC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4E4E4917-1CA3-A7D7-40A8-A24A08673EC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4E4E4917-1CA3-A7D7-40A8-A24A08673EC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4E4E4917-1CA3-A7D7-40A8-A24A08673EC1}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {56AB8345-FF24-4E15-AB54-5A898A5EC496}
+ EndGlobalSection
+EndGlobal
diff --git a/FruitBankHybrid/App.xaml b/FruitBankHybrid/App.xaml
new file mode 100644
index 00000000..861da899
--- /dev/null
+++ b/FruitBankHybrid/App.xaml
@@ -0,0 +1,32 @@
+
+
+
+
+
+ #512bdf
+ White
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FruitBankHybrid/App.xaml.cs b/FruitBankHybrid/App.xaml.cs
new file mode 100644
index 00000000..c3e25977
--- /dev/null
+++ b/FruitBankHybrid/App.xaml.cs
@@ -0,0 +1,15 @@
+namespace FruitBankHybrid
+{
+ public partial class App : Application
+ {
+ public App()
+ {
+ InitializeComponent();
+ }
+
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new MainPage()) { Title = "FruitBankHybrid" };
+ }
+ }
+}
diff --git a/FruitBankHybrid/Components/_Imports.razor b/FruitBankHybrid/Components/_Imports.razor
new file mode 100644
index 00000000..d884772d
--- /dev/null
+++ b/FruitBankHybrid/Components/_Imports.razor
@@ -0,0 +1,10 @@
+@using System.Net.Http
+@using System.Net.Http.Json
+@using Microsoft.AspNetCore.Components.Forms
+@using Microsoft.AspNetCore.Components.Routing
+@using Microsoft.AspNetCore.Components.Web
+@using Microsoft.AspNetCore.Components.Web.Virtualization
+@using Microsoft.JSInterop
+@using FruitBankHybrid
+@using FruitBankHybrid.Components
+@using FruitBankHybrid.Shared
diff --git a/FruitBankHybrid/FruitBankHybrid.csproj b/FruitBankHybrid/FruitBankHybrid.csproj
new file mode 100644
index 00000000..29156b20
--- /dev/null
+++ b/FruitBankHybrid/FruitBankHybrid.csproj
@@ -0,0 +1,89 @@
+
+
+
+ net9.0-android;net9.0-ios
+ $(TargetFrameworks);net9.0-windows10.0.19041.0
+
+ Exe
+ FruitBankHybrid
+ true
+ true
+ enable
+ false
+ enable
+
+
+ FruitBank Measuring
+
+
+ com.companyname.blazorapp.1
+
+
+ 1.0
+ 1
+
+
+ None
+
+ 15.0
+ 15.0
+ 24.0
+ 10.0.17763.0
+ 10.0.17763.0
+
+
+
+ true
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Core.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Services.dll
+
+
+ ..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Entities.dll
+
+
+
+
+
diff --git a/FruitBankHybrid/MainPage.xaml b/FruitBankHybrid/MainPage.xaml
new file mode 100644
index 00000000..a1840d96
--- /dev/null
+++ b/FruitBankHybrid/MainPage.xaml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FruitBankHybrid/MainPage.xaml.cs b/FruitBankHybrid/MainPage.xaml.cs
new file mode 100644
index 00000000..3e09fa47
--- /dev/null
+++ b/FruitBankHybrid/MainPage.xaml.cs
@@ -0,0 +1,15 @@
+namespace FruitBankHybrid
+{
+ public partial class MainPage : ContentPage
+ {
+ public MainPage()
+ {
+ InitializeComponent();
+ }
+
+ private void OnActionButtonClick(object sender, EventArgs e)
+ {
+ //Add some code here to show how to communicate with a control in BlazorWebView
+ }
+ }
+}
diff --git a/FruitBankHybrid/MauiProgram.cs b/FruitBankHybrid/MauiProgram.cs
new file mode 100644
index 00000000..049506a1
--- /dev/null
+++ b/FruitBankHybrid/MauiProgram.cs
@@ -0,0 +1,52 @@
+using FruitBankHybrid.Services;
+using FruitBankHybrid.Shared.Services;
+//using DevExpress.Maui;
+using Microsoft.Extensions.Logging;
+using FruitBankHybrid.Shared.Services.SignalRs;
+using FruitBank.Common.Loggers;
+using AyCode.Core.Loggers;
+using FruitBankHybrid.Services.Loggers;
+
+namespace FruitBankHybrid
+{
+ public static class MauiProgram
+ {
+ public static MauiApp CreateMauiApp()
+ {
+ var builder = MauiApp.CreateBuilder();
+ builder.UseMauiApp()
+ //.UseDevExpress(useLocalization: false)
+ //.UseDevExpressCollectionView()
+ //.UseDevExpressControls()
+ //.UseDevExpressEditors()
+ .ConfigureFonts(fonts =>
+ {
+ fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
+ });
+
+ // Add device-specific services used by the FruitBankHybrid.Shared project
+ builder.Services.AddSingleton();
+ //builder.Services.AddScoped();
+ builder.Services.AddScoped();
+
+
+#if DEBUG
+ builder.Services.AddSingleton();
+
+#endif
+
+ builder.Services.AddSingleton();
+
+
+ builder.Services.AddMauiBlazorWebView();
+ builder.Services.AddDevExpressBlazor();
+
+#if DEBUG
+ builder.Services.AddBlazorWebViewDeveloperTools();
+ builder.Logging.AddDebug();
+#endif
+
+ return builder.Build();
+ }
+ }
+}
diff --git a/FruitBankHybrid/Platforms/Android/AndroidManifest.xml b/FruitBankHybrid/Platforms/Android/AndroidManifest.xml
new file mode 100644
index 00000000..dbf9e7e5
--- /dev/null
+++ b/FruitBankHybrid/Platforms/Android/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FruitBankHybrid/Platforms/Android/MainActivity.cs b/FruitBankHybrid/Platforms/Android/MainActivity.cs
new file mode 100644
index 00000000..1f9fc2be
--- /dev/null
+++ b/FruitBankHybrid/Platforms/Android/MainActivity.cs
@@ -0,0 +1,11 @@
+using Android.App;
+using Android.Content.PM;
+using Android.OS;
+
+namespace FruitBankHybrid
+{
+ [Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
+ public class MainActivity : MauiAppCompatActivity
+ {
+ }
+}
diff --git a/FruitBankHybrid/Platforms/Android/MainApplication.cs b/FruitBankHybrid/Platforms/Android/MainApplication.cs
new file mode 100644
index 00000000..06546c8c
--- /dev/null
+++ b/FruitBankHybrid/Platforms/Android/MainApplication.cs
@@ -0,0 +1,16 @@
+using Android.App;
+using Android.Runtime;
+
+namespace FruitBankHybrid
+{
+ [Application]
+ public class MainApplication : MauiApplication
+ {
+ public MainApplication(IntPtr handle, JniHandleOwnership ownership)
+ : base(handle, ownership)
+ {
+ }
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ }
+}
diff --git a/FruitBankHybrid/Platforms/Android/Resources/values/colors.xml b/FruitBankHybrid/Platforms/Android/Resources/values/colors.xml
new file mode 100644
index 00000000..c04d7492
--- /dev/null
+++ b/FruitBankHybrid/Platforms/Android/Resources/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #512BD4
+ #2B0B98
+ #2B0B98
+
\ No newline at end of file
diff --git a/FruitBankHybrid/Platforms/MacCatalyst/AppDelegate.cs b/FruitBankHybrid/Platforms/MacCatalyst/AppDelegate.cs
new file mode 100644
index 00000000..4d466a18
--- /dev/null
+++ b/FruitBankHybrid/Platforms/MacCatalyst/AppDelegate.cs
@@ -0,0 +1,10 @@
+using Foundation;
+
+namespace FruitBankHybrid
+{
+ [Register("AppDelegate")]
+ public class AppDelegate : MauiUIApplicationDelegate
+ {
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ }
+}
diff --git a/FruitBankHybrid/Platforms/MacCatalyst/Entitlements.plist b/FruitBankHybrid/Platforms/MacCatalyst/Entitlements.plist
new file mode 100644
index 00000000..de4adc94
--- /dev/null
+++ b/FruitBankHybrid/Platforms/MacCatalyst/Entitlements.plist
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ com.apple.security.app-sandbox
+
+
+ com.apple.security.network.client
+
+
+
+
diff --git a/FruitBankHybrid/Platforms/MacCatalyst/Info.plist b/FruitBankHybrid/Platforms/MacCatalyst/Info.plist
new file mode 100644
index 00000000..7b1e6e62
--- /dev/null
+++ b/FruitBankHybrid/Platforms/MacCatalyst/Info.plist
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UIDeviceFamily
+
+ 2
+
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ XSAppIconAssets
+ Assets.xcassets/appicon.appiconset
+
+
diff --git a/FruitBankHybrid/Platforms/MacCatalyst/Program.cs b/FruitBankHybrid/Platforms/MacCatalyst/Program.cs
new file mode 100644
index 00000000..3429183e
--- /dev/null
+++ b/FruitBankHybrid/Platforms/MacCatalyst/Program.cs
@@ -0,0 +1,16 @@
+using ObjCRuntime;
+using UIKit;
+
+namespace FruitBankHybrid
+{
+ public class Program
+ {
+ // This is the main entry point of the application.
+ static void Main(string[] args)
+ {
+ // if you want to use a different Application Delegate class from "AppDelegate"
+ // you can specify it here.
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+ }
+}
\ No newline at end of file
diff --git a/FruitBankHybrid/Platforms/Windows/App.xaml b/FruitBankHybrid/Platforms/Windows/App.xaml
new file mode 100644
index 00000000..59b17fa3
--- /dev/null
+++ b/FruitBankHybrid/Platforms/Windows/App.xaml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/FruitBankHybrid/Platforms/Windows/App.xaml.cs b/FruitBankHybrid/Platforms/Windows/App.xaml.cs
new file mode 100644
index 00000000..381afcd1
--- /dev/null
+++ b/FruitBankHybrid/Platforms/Windows/App.xaml.cs
@@ -0,0 +1,25 @@
+using Microsoft.UI.Xaml;
+
+// To learn more about WinUI, the WinUI project structure,
+// and more about our project templates, see: http://aka.ms/winui-project-info.
+
+namespace FruitBankHybrid.WinUI
+{
+ ///
+ /// Provides application-specific behavior to supplement the default Application class.
+ ///
+ public partial class App : MauiWinUIApplication
+ {
+ ///
+ /// Initializes the singleton application object. This is the first line of authored code
+ /// executed, and as such is the logical equivalent of main() or WinMain().
+ ///
+ public App()
+ {
+ this.InitializeComponent();
+ }
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ }
+
+}
diff --git a/FruitBankHybrid/Platforms/Windows/Package.appxmanifest b/FruitBankHybrid/Platforms/Windows/Package.appxmanifest
new file mode 100644
index 00000000..7bfc691e
--- /dev/null
+++ b/FruitBankHybrid/Platforms/Windows/Package.appxmanifest
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+ $placeholder$
+ User Name
+ $placeholder$.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FruitBankHybrid/Platforms/Windows/app.manifest b/FruitBankHybrid/Platforms/Windows/app.manifest
new file mode 100644
index 00000000..caf380e8
--- /dev/null
+++ b/FruitBankHybrid/Platforms/Windows/app.manifest
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+ true/PM
+ PerMonitorV2, PerMonitor
+
+
+
diff --git a/FruitBankHybrid/Platforms/iOS/AppDelegate.cs b/FruitBankHybrid/Platforms/iOS/AppDelegate.cs
new file mode 100644
index 00000000..4d466a18
--- /dev/null
+++ b/FruitBankHybrid/Platforms/iOS/AppDelegate.cs
@@ -0,0 +1,10 @@
+using Foundation;
+
+namespace FruitBankHybrid
+{
+ [Register("AppDelegate")]
+ public class AppDelegate : MauiUIApplicationDelegate
+ {
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+ }
+}
diff --git a/FruitBankHybrid/Platforms/iOS/Info.plist b/FruitBankHybrid/Platforms/iOS/Info.plist
new file mode 100644
index 00000000..ecb7f719
--- /dev/null
+++ b/FruitBankHybrid/Platforms/iOS/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ LSRequiresIPhoneOS
+
+ UIDeviceFamily
+
+ 1
+ 2
+
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ XSAppIconAssets
+ Assets.xcassets/appicon.appiconset
+
+
diff --git a/FruitBankHybrid/Platforms/iOS/Program.cs b/FruitBankHybrid/Platforms/iOS/Program.cs
new file mode 100644
index 00000000..1ae88d9d
--- /dev/null
+++ b/FruitBankHybrid/Platforms/iOS/Program.cs
@@ -0,0 +1,16 @@
+using ObjCRuntime;
+using UIKit;
+
+namespace FruitBankHybrid
+{
+ public class Program
+ {
+ // This is the main entry point of the application.
+ static void Main(string[] args)
+ {
+ // if you want to use a different Application Delegate class from "AppDelegate"
+ // you can specify it here.
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+ }
+}
diff --git a/FruitBankHybrid/Resources/AppIcon/appicon.svg b/FruitBankHybrid/Resources/AppIcon/appicon.svg
new file mode 100644
index 00000000..9d63b651
--- /dev/null
+++ b/FruitBankHybrid/Resources/AppIcon/appicon.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/FruitBankHybrid/Resources/AppIcon/appiconfg.svg b/FruitBankHybrid/Resources/AppIcon/appiconfg.svg
new file mode 100644
index 00000000..21dfb25f
--- /dev/null
+++ b/FruitBankHybrid/Resources/AppIcon/appiconfg.svg
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/FruitBankHybrid/Resources/Fonts/OpenSans-Regular.ttf b/FruitBankHybrid/Resources/Fonts/OpenSans-Regular.ttf
new file mode 100644
index 00000000..29bfd35a
Binary files /dev/null and b/FruitBankHybrid/Resources/Fonts/OpenSans-Regular.ttf differ
diff --git a/FruitBankHybrid/Resources/Images/dotnet_bot.svg b/FruitBankHybrid/Resources/Images/dotnet_bot.svg
new file mode 100644
index 00000000..abfaff26
--- /dev/null
+++ b/FruitBankHybrid/Resources/Images/dotnet_bot.svg
@@ -0,0 +1,93 @@
+
diff --git a/FruitBankHybrid/Resources/Raw/AboutAssets.txt b/FruitBankHybrid/Resources/Raw/AboutAssets.txt
new file mode 100644
index 00000000..6de1c152
--- /dev/null
+++ b/FruitBankHybrid/Resources/Raw/AboutAssets.txt
@@ -0,0 +1,15 @@
+Any raw assets you want to be deployed with your application can be placed in
+this directory (and child directories). Deployment of the asset to your application
+is automatically handled by the following `MauiAsset` Build Action within your `.csproj`.
+
+
+
+These files will be deployed with your package and will be accessible using Essentials:
+
+ async Task LoadMauiAsset()
+ {
+ using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");
+ using var reader = new StreamReader(stream);
+
+ var contents = reader.ReadToEnd();
+ }
diff --git a/FruitBankHybrid/Resources/Splash/splash.svg b/FruitBankHybrid/Resources/Splash/splash.svg
new file mode 100644
index 00000000..21dfb25f
--- /dev/null
+++ b/FruitBankHybrid/Resources/Splash/splash.svg
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/FruitBankHybrid/Services/FormFactor.cs b/FruitBankHybrid/Services/FormFactor.cs
new file mode 100644
index 00000000..65b8b4ee
--- /dev/null
+++ b/FruitBankHybrid/Services/FormFactor.cs
@@ -0,0 +1,17 @@
+using FruitBankHybrid.Shared.Services;
+
+namespace FruitBankHybrid.Services
+{
+ public class FormFactor : IFormFactor
+ {
+ public string GetFormFactor()
+ {
+ return DeviceInfo.Idiom.ToString();
+ }
+
+ public string GetPlatform()
+ {
+ return DeviceInfo.Platform.ToString() + " - " + DeviceInfo.VersionString;
+ }
+ }
+}
diff --git a/FruitBankHybrid/Services/Loggers/BrowserConsoleLogWriter.cs b/FruitBankHybrid/Services/Loggers/BrowserConsoleLogWriter.cs
new file mode 100644
index 00000000..aebfe845
--- /dev/null
+++ b/FruitBankHybrid/Services/Loggers/BrowserConsoleLogWriter.cs
@@ -0,0 +1,13 @@
+using AyCode.Core.Enums;
+using AyCode.Core.Loggers;
+using AyCode.Services.Loggers;
+using FruitBank.Common;
+using Microsoft.JSInterop;
+using LogLevel = AyCode.Core.Loggers.LogLevel;
+
+namespace FruitBankHybrid.Services.Loggers;
+
+public class BrowserConsoleLogWriter(IJSRuntime jsRuntime) : AcBrowserConsoleLogWriter(jsRuntime, AppType.Web, FruitBankConstClient.DefaultLogLevelClient)
+{
+}
+
diff --git a/FruitBankHybrid/wwwroot/app.css b/FruitBankHybrid/wwwroot/app.css
new file mode 100644
index 00000000..4e9b695e
--- /dev/null
+++ b/FruitBankHybrid/wwwroot/app.css
@@ -0,0 +1,19 @@
+.status-bar-safe-area {
+ display: none;
+}
+
+@supports (-webkit-touch-callout: none) {
+ .status-bar-safe-area {
+ display: flex;
+ position: sticky;
+ top: 0;
+ height: env(safe-area-inset-top);
+ background-color: #f7f7f7;
+ width: 100%;
+ z-index: 1;
+ }
+
+ .flex-column, .navbar-brand {
+ padding-left: env(safe-area-inset-left);
+ }
+}
diff --git a/FruitBankHybrid/wwwroot/index.html b/FruitBankHybrid/wwwroot/index.html
new file mode 100644
index 00000000..cfbe8537
--- /dev/null
+++ b/FruitBankHybrid/wwwroot/index.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+ FruitBankHybrid Measuring
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+