From 8df9bb72110989872203f31cf7c1ab62a18b3b29 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sat, 26 Jul 2025 17:55:02 +0100 Subject: [PATCH] Add blazor skeleton. --- Directory.Packages.props | 2 + RomRepoMgr.Blazor/Components/App.razor | 20 ++ .../Components/Layout/MainLayout.razor | 26 +++ .../Components/Layout/NavMenu.razor | 19 ++ .../Components/Pages/Counter.razor | 22 ++ .../Components/Pages/Error.razor | 35 ++++ RomRepoMgr.Blazor/Components/Pages/Home.razor | 7 + .../Components/Pages/Weather.razor | 51 +++++ RomRepoMgr.Blazor/Components/Routes.razor | 6 + RomRepoMgr.Blazor/Components/_Imports.razor | 12 ++ RomRepoMgr.Blazor/Program.cs | 28 +++ .../Properties/launchSettings.json | 23 +++ RomRepoMgr.Blazor/RomRepoMgr.Blazor.csproj | 13 ++ .../appsettings.Development.json | 8 + RomRepoMgr.Blazor/appsettings.json | 9 + RomRepoMgr.Blazor/wwwroot/app.css | 191 ++++++++++++++++++ RomRepoMgr.Blazor/wwwroot/favicon.ico | Bin 0 -> 15086 bytes RomRepoMgr.sln | 6 + 18 files changed, 478 insertions(+) create mode 100644 RomRepoMgr.Blazor/Components/App.razor create mode 100644 RomRepoMgr.Blazor/Components/Layout/MainLayout.razor create mode 100644 RomRepoMgr.Blazor/Components/Layout/NavMenu.razor create mode 100644 RomRepoMgr.Blazor/Components/Pages/Counter.razor create mode 100644 RomRepoMgr.Blazor/Components/Pages/Error.razor create mode 100644 RomRepoMgr.Blazor/Components/Pages/Home.razor create mode 100644 RomRepoMgr.Blazor/Components/Pages/Weather.razor create mode 100644 RomRepoMgr.Blazor/Components/Routes.razor create mode 100644 RomRepoMgr.Blazor/Components/_Imports.razor create mode 100644 RomRepoMgr.Blazor/Program.cs create mode 100644 RomRepoMgr.Blazor/Properties/launchSettings.json create mode 100644 RomRepoMgr.Blazor/RomRepoMgr.Blazor.csproj create mode 100644 RomRepoMgr.Blazor/appsettings.Development.json create mode 100644 RomRepoMgr.Blazor/appsettings.json create mode 100644 RomRepoMgr.Blazor/wwwroot/app.css create mode 100644 RomRepoMgr.Blazor/wwwroot/favicon.ico diff --git a/Directory.Packages.props b/Directory.Packages.props index 903f739..e8262ad 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -46,5 +46,7 @@ + + \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Components/App.razor b/RomRepoMgr.Blazor/Components/App.razor new file mode 100644 index 0000000..be1e43f --- /dev/null +++ b/RomRepoMgr.Blazor/Components/App.razor @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Components/Layout/MainLayout.razor b/RomRepoMgr.Blazor/Components/Layout/MainLayout.razor new file mode 100644 index 0000000..fe28016 --- /dev/null +++ b/RomRepoMgr.Blazor/Components/Layout/MainLayout.razor @@ -0,0 +1,26 @@ +@inherits LayoutComponentBase + + + + RomRepoMgr.Blazor + + + + +
+ @Body +
+
+
+ + Documentation and demos + + About Blazor + +
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
\ No newline at end of file diff --git a/RomRepoMgr.Blazor/Components/Layout/NavMenu.razor b/RomRepoMgr.Blazor/Components/Layout/NavMenu.razor new file mode 100644 index 0000000..963bc94 --- /dev/null +++ b/RomRepoMgr.Blazor/Components/Layout/NavMenu.razor @@ -0,0 +1,19 @@ +@rendermode InteractiveServer + + + +@code { + private bool expanded = true; +} \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Components/Pages/Counter.razor b/RomRepoMgr.Blazor/Components/Pages/Counter.razor new file mode 100644 index 0000000..c0215cc --- /dev/null +++ b/RomRepoMgr.Blazor/Components/Pages/Counter.razor @@ -0,0 +1,22 @@ +@page "/counter" +@rendermode InteractiveServer + +Counter + +

Counter

+ +
+ Current count: @currentCount +
+ +Click me + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } + +} \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Components/Pages/Error.razor b/RomRepoMgr.Blazor/Components/Pages/Error.razor new file mode 100644 index 0000000..adab1c1 --- /dev/null +++ b/RomRepoMgr.Blazor/Components/Pages/Error.razor @@ -0,0 +1,35 @@ +@page "/Error" +@using System.Diagnostics + +Error + +

Error.

+

An error occurred while processing your request.

+ +@if(ShowRequestId) +{ +

+ Request ID: @RequestId +

+} + +

Development Mode

+

+ 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; +} \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Components/Pages/Home.razor b/RomRepoMgr.Blazor/Components/Pages/Home.razor new file mode 100644 index 0000000..96714a2 --- /dev/null +++ b/RomRepoMgr.Blazor/Components/Pages/Home.razor @@ -0,0 +1,7 @@ +@page "/" + +Home + +

Hello, world!

+ +Welcome to your new Fluent Blazor app. \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Components/Pages/Weather.razor b/RomRepoMgr.Blazor/Components/Pages/Weather.razor new file mode 100644 index 0000000..20f4ec8 --- /dev/null +++ b/RomRepoMgr.Blazor/Components/Pages/Weather.razor @@ -0,0 +1,51 @@ +@page "/weather" +@attribute [StreamRendering] + +Weather + +

Weather

+ +

This component demonstrates showing data.

+ + + + + + + + + +@code { + private IQueryable? forecasts; + + protected override async Task OnInitializedAsync() + { + // Simulate asynchronous loading to demonstrate streaming rendering + await Task.Delay(500); + + var startDate = DateOnly.FromDateTime(DateTime.Now); + + var summaries = new[] + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + + forecasts = Enumerable.Range(1, 5) + .Select(index => new WeatherForecast + { + Date = startDate.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = summaries[Random.Shared.Next(summaries.Length)] + }) + .AsQueryable(); + } + + private class WeatherForecast + { + public DateOnly Date { get; set; } + public int TemperatureC { get; set; } + public string? Summary { get; set; } + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + } + +} \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Components/Routes.razor b/RomRepoMgr.Blazor/Components/Routes.razor new file mode 100644 index 0000000..22b036e --- /dev/null +++ b/RomRepoMgr.Blazor/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Components/_Imports.razor b/RomRepoMgr.Blazor/Components/_Imports.razor new file mode 100644 index 0000000..33aea7d --- /dev/null +++ b/RomRepoMgr.Blazor/Components/_Imports.razor @@ -0,0 +1,12 @@ +@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.FluentUI.AspNetCore.Components +@using Icons = Microsoft.FluentUI.AspNetCore.Components.Icons +@using Microsoft.JSInterop +@using RomRepoMgr.Blazor +@using RomRepoMgr.Blazor.Components \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Program.cs b/RomRepoMgr.Blazor/Program.cs new file mode 100644 index 0000000..1a2cb7f --- /dev/null +++ b/RomRepoMgr.Blazor/Program.cs @@ -0,0 +1,28 @@ +using Microsoft.FluentUI.AspNetCore.Components; +using RomRepoMgr.Blazor.Components; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +builder.Services.AddRazorComponents().AddInteractiveServerComponents(); +builder.Services.AddFluentUIComponents(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if(!app.Environment.IsDevelopment()) +{ + 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.UseHttpsRedirection(); + +app.UseAntiforgery(); + +app.MapStaticAssets(); +app.MapRazorComponents().AddInteractiveServerRenderMode(); + +app.Run(); \ No newline at end of file diff --git a/RomRepoMgr.Blazor/Properties/launchSettings.json b/RomRepoMgr.Blazor/Properties/launchSettings.json new file mode 100644 index 0000000..3597ff3 --- /dev/null +++ b/RomRepoMgr.Blazor/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5079", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7057;http://localhost:5079", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } + } diff --git a/RomRepoMgr.Blazor/RomRepoMgr.Blazor.csproj b/RomRepoMgr.Blazor/RomRepoMgr.Blazor.csproj new file mode 100644 index 0000000..35ea963 --- /dev/null +++ b/RomRepoMgr.Blazor/RomRepoMgr.Blazor.csproj @@ -0,0 +1,13 @@ + + + + net9.0 + enable + enable + + + + + + + diff --git a/RomRepoMgr.Blazor/appsettings.Development.json b/RomRepoMgr.Blazor/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/RomRepoMgr.Blazor/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/RomRepoMgr.Blazor/appsettings.json b/RomRepoMgr.Blazor/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/RomRepoMgr.Blazor/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/RomRepoMgr.Blazor/wwwroot/app.css b/RomRepoMgr.Blazor/wwwroot/app.css new file mode 100644 index 0000000..77cf978 --- /dev/null +++ b/RomRepoMgr.Blazor/wwwroot/app.css @@ -0,0 +1,191 @@ +@import '_content/Microsoft.FluentUI.AspNetCore.Components/css/reboot.css'; + +body { + --body-font: "Segoe UI Variable", "Segoe UI", sans-serif; + font-family: var(--body-font); + font-size: var(--type-ramp-base-font-size); + line-height: var(--type-ramp-base-line-height); + margin: 0; +} + +.navmenu-icon { + display: none; +} + +.main { + min-height: calc(100dvh - 86px); + color: var(--neutral-foreground-rest); + align-items: stretch !important; +} + +.body-content { + align-self: stretch; + height: calc(100dvh - 86px) !important; + display: flex; +} + +.content { + padding: 0.5rem 1.5rem; + align-self: stretch !important; + width: 100%; +} + +.manage { + width: 100dvw; +} + +footer { + background: var(--neutral-layer-4); + color: var(--neutral-foreground-rest); + align-items: center; + padding: 10px 10px; +} + + footer a { + color: var(--neutral-foreground-rest); + text-decoration: none; + } + + footer a:focus { + outline: 1px dashed; + outline-offset: 3px; + } + + footer a:hover { + text-decoration: underline; + } + +.alert { + border: 1px dashed var(--accent-fill-rest); + padding: 5px; +} + + +#blazor-error-ui { + background: lightyellow; + bottom: 0; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + display: none; + left: 0; + padding: 0.6rem 1.25rem 0.7rem 1.25rem; + position: fixed; + width: 100%; + z-index: 1000; + margin: 20px 0; +} + + #blazor-error-ui .dismiss { + cursor: pointer; + position: absolute; + right: 0.75rem; + top: 0.5rem; + } + +.blazor-error-boundary { + background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121; + padding: 1rem 1rem 1rem 3.7rem; + color: white; +} + + .blazor-error-boundary::before { + content: "An error has occurred. " + } + +.loading-progress { + position: relative; + display: block; + width: 8rem; + height: 8rem; + margin: 20vh auto 1rem auto; +} + + .loading-progress circle { + fill: none; + stroke: #e0e0e0; + stroke-width: 0.6rem; + transform-origin: 50% 50%; + transform: rotate(-90deg); + } + + .loading-progress circle:last-child { + stroke: #1b6ec2; + stroke-dasharray: calc(3.141 * var(--blazor-load-percentage, 0%) * 0.8), 500%; + transition: stroke-dasharray 0.05s ease-in-out; + } + +.loading-progress-text { + position: absolute; + text-align: center; + font-weight: bold; + inset: calc(20vh + 3.25rem) 0 auto 0.2rem; +} + + .loading-progress-text:after { + content: var(--blazor-load-percentage-text, "Loading"); + } + +code { + color: #c02d76; +} + +@media (max-width: 600px) { + .header-gutters { + margin: 0.5rem 3rem 0.5rem 1.5rem !important; + } + + [dir="rtl"] .header-gutters { + margin: 0.5rem 1.5rem 0.5rem 3rem !important; + } + + .main { + flex-direction: column !important; + row-gap: 0 !important; + } + + nav.sitenav { + width: 100%; + height: 100%; + } + + #main-menu { + width: 100% !important; + } + + #main-menu > div:first-child:is(.expander) { + display: none; + } + + .navmenu { + width: 100%; + } + + #navmenu-toggle { + appearance: none; + } + + #navmenu-toggle ~ nav { + display: none; + } + + #navmenu-toggle:checked ~ nav { + display: block; + } + + .navmenu-icon { + cursor: pointer; + z-index: 10; + display: block; + position: absolute; + top: 15px; + left: unset; + right: 20px; + width: 20px; + height: 20px; + border: none; + } + + [dir="rtl"] .navmenu-icon { + left: 20px; + right: unset; + } +} diff --git a/RomRepoMgr.Blazor/wwwroot/favicon.ico b/RomRepoMgr.Blazor/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e189d8e579e552ab2b3c82a949bccbc5ea00f3ed GIT binary patch literal 15086 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 G1_l5&KT>r7 literal 0 HcmV?d00001 diff --git a/RomRepoMgr.sln b/RomRepoMgr.sln index b47832c..8084cb4 100644 --- a/RomRepoMgr.sln +++ b/RomRepoMgr.sln @@ -32,6 +32,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.DatTools", "Sabr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SabreTools.Reports", "SabreTools\SabreTools.Reports\SabreTools.Reports.csproj", "{E73767A7-0A65-4F89-B149-A520874F7B32}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RomRepoMgr.Blazor", "RomRepoMgr.Blazor\RomRepoMgr.Blazor.csproj", "{30DA0637-76C5-43DE-8203-403AECF5F859}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -78,5 +80,9 @@ Global {E73767A7-0A65-4F89-B149-A520874F7B32}.Debug|Any CPU.Build.0 = Debug|Any CPU {E73767A7-0A65-4F89-B149-A520874F7B32}.Release|Any CPU.ActiveCfg = Release|Any CPU {E73767A7-0A65-4F89-B149-A520874F7B32}.Release|Any CPU.Build.0 = Release|Any CPU + {30DA0637-76C5-43DE-8203-403AECF5F859}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30DA0637-76C5-43DE-8203-403AECF5F859}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30DA0637-76C5-43DE-8203-403AECF5F859}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30DA0637-76C5-43DE-8203-403AECF5F859}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal