From 818c0441f80b939949d544dfdf1637bda36df139 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Sat, 31 May 2025 00:24:29 -0500 Subject: [PATCH] init --- .gitignore | 3 + SessionZeroClient.sln | 16 ++++ SessionZeroClient/App.razor | 12 +++ SessionZeroClient/Components/Navigation.razor | 5 + .../Components/Navigation.razor.cs | 7 ++ .../Components/Navigation.razor.css | 0 SessionZeroClient/Layout/MainLayout.razor | 3 + SessionZeroClient/Pages/Home.razor | 6 ++ SessionZeroClient/Pages/Home.razor.css | 0 SessionZeroClient/Program.cs | 11 +++ .../Properties/launchSettings.json | 25 +++++ SessionZeroClient/SessionZeroClient.csproj | 19 ++++ SessionZeroClient/_Imports.razor | 10 ++ SessionZeroClient/wwwroot/css/app.css | 88 ++++++++++++++++++ SessionZeroClient/wwwroot/css/main.css | 13 +++ SessionZeroClient/wwwroot/icon-192.png | Bin 0 -> 11579 bytes SessionZeroClient/wwwroot/icon-512.png | Bin 0 -> 33775 bytes SessionZeroClient/wwwroot/index.html | 36 +++++++ .../wwwroot/manifest.webmanifest | 22 +++++ SessionZeroClient/wwwroot/service-worker.js | 4 + .../wwwroot/service-worker.published.js | 55 +++++++++++ 21 files changed, 335 insertions(+) create mode 100644 .gitignore create mode 100644 SessionZeroClient.sln create mode 100644 SessionZeroClient/App.razor create mode 100644 SessionZeroClient/Components/Navigation.razor create mode 100644 SessionZeroClient/Components/Navigation.razor.cs create mode 100644 SessionZeroClient/Components/Navigation.razor.css create mode 100644 SessionZeroClient/Layout/MainLayout.razor create mode 100644 SessionZeroClient/Pages/Home.razor create mode 100644 SessionZeroClient/Pages/Home.razor.css create mode 100644 SessionZeroClient/Program.cs create mode 100644 SessionZeroClient/Properties/launchSettings.json create mode 100644 SessionZeroClient/SessionZeroClient.csproj create mode 100644 SessionZeroClient/_Imports.razor create mode 100644 SessionZeroClient/wwwroot/css/app.css create mode 100644 SessionZeroClient/wwwroot/css/main.css create mode 100644 SessionZeroClient/wwwroot/icon-192.png create mode 100644 SessionZeroClient/wwwroot/icon-512.png create mode 100644 SessionZeroClient/wwwroot/index.html create mode 100644 SessionZeroClient/wwwroot/manifest.webmanifest create mode 100644 SessionZeroClient/wwwroot/service-worker.js create mode 100644 SessionZeroClient/wwwroot/service-worker.published.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dbad530 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea/ +SessionZeroClient/obj +SessionZeroClient/bin \ No newline at end of file diff --git a/SessionZeroClient.sln b/SessionZeroClient.sln new file mode 100644 index 0000000..6e0098b --- /dev/null +++ b/SessionZeroClient.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SessionZeroClient", "SessionZeroClient\SessionZeroClient.csproj", "{FB52EC9D-387C-4E96-A70B-2A8BD67BFC25}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FB52EC9D-387C-4E96-A70B-2A8BD67BFC25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB52EC9D-387C-4E96-A70B-2A8BD67BFC25}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB52EC9D-387C-4E96-A70B-2A8BD67BFC25}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB52EC9D-387C-4E96-A70B-2A8BD67BFC25}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/SessionZeroClient/App.razor b/SessionZeroClient/App.razor new file mode 100644 index 0000000..c7730d1 --- /dev/null +++ b/SessionZeroClient/App.razor @@ -0,0 +1,12 @@ + + + + + + + Not found + +

Sorry, there's nothing at this address.

+
+
+
\ No newline at end of file diff --git a/SessionZeroClient/Components/Navigation.razor b/SessionZeroClient/Components/Navigation.razor new file mode 100644 index 0000000..b3cf6b4 --- /dev/null +++ b/SessionZeroClient/Components/Navigation.razor @@ -0,0 +1,5 @@ + + +@code { + +} \ No newline at end of file diff --git a/SessionZeroClient/Components/Navigation.razor.cs b/SessionZeroClient/Components/Navigation.razor.cs new file mode 100644 index 0000000..efd6501 --- /dev/null +++ b/SessionZeroClient/Components/Navigation.razor.cs @@ -0,0 +1,7 @@ +using Microsoft.AspNetCore.Components; + +namespace SessionZeroClient.Components; + +public partial class Navigation : ComponentBase +{ +} \ No newline at end of file diff --git a/SessionZeroClient/Components/Navigation.razor.css b/SessionZeroClient/Components/Navigation.razor.css new file mode 100644 index 0000000..e69de29 diff --git a/SessionZeroClient/Layout/MainLayout.razor b/SessionZeroClient/Layout/MainLayout.razor new file mode 100644 index 0000000..53a4e95 --- /dev/null +++ b/SessionZeroClient/Layout/MainLayout.razor @@ -0,0 +1,3 @@ +@inherits LayoutComponentBase + +@Body \ No newline at end of file diff --git a/SessionZeroClient/Pages/Home.razor b/SessionZeroClient/Pages/Home.razor new file mode 100644 index 0000000..5aa3541 --- /dev/null +++ b/SessionZeroClient/Pages/Home.razor @@ -0,0 +1,6 @@ +@page "/" +@using SessionZeroClient.Components + +SessionZero - Home + + \ No newline at end of file diff --git a/SessionZeroClient/Pages/Home.razor.css b/SessionZeroClient/Pages/Home.razor.css new file mode 100644 index 0000000..e69de29 diff --git a/SessionZeroClient/Program.cs b/SessionZeroClient/Program.cs new file mode 100644 index 0000000..4181e18 --- /dev/null +++ b/SessionZeroClient/Program.cs @@ -0,0 +1,11 @@ +using Microsoft.AspNetCore.Components.Web; +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; +using SessionZeroClient; + +var builder = WebAssemblyHostBuilder.CreateDefault(args); +builder.RootComponents.Add("#app"); +builder.RootComponents.Add("head::after"); + +builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); + +await builder.Build().RunAsync(); \ No newline at end of file diff --git a/SessionZeroClient/Properties/launchSettings.json b/SessionZeroClient/Properties/launchSettings.json new file mode 100644 index 0000000..7c5647f --- /dev/null +++ b/SessionZeroClient/Properties/launchSettings.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "http://localhost:5023", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", + "applicationUrl": "https://localhost:7104;http://localhost:5023", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/SessionZeroClient/SessionZeroClient.csproj b/SessionZeroClient/SessionZeroClient.csproj new file mode 100644 index 0000000..fccd3b1 --- /dev/null +++ b/SessionZeroClient/SessionZeroClient.csproj @@ -0,0 +1,19 @@ + + + + net9.0 + enable + enable + service-worker-assets.js + + + + + + + + + + + + diff --git a/SessionZeroClient/_Imports.razor b/SessionZeroClient/_Imports.razor new file mode 100644 index 0000000..cdc1fb7 --- /dev/null +++ b/SessionZeroClient/_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.AspNetCore.Components.WebAssembly.Http +@using Microsoft.JSInterop +@using SessionZeroClient +@using SessionZeroClient.Layout \ No newline at end of file diff --git a/SessionZeroClient/wwwroot/css/app.css b/SessionZeroClient/wwwroot/css/app.css new file mode 100644 index 0000000..7bc88b2 --- /dev/null +++ b/SessionZeroClient/wwwroot/css/app.css @@ -0,0 +1,88 @@ +.valid.modified:not([type=checkbox]) { + outline: 1px solid #26b050; +} + +.invalid { + outline: 1px solid red; +} + +.validation-message { + color: red; +} + +#blazor-error-ui { + color-scheme: light only; + background: lightyellow; + bottom: 0; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); + box-sizing: border-box; + display: none; + left: 0; + padding: 0.6rem 1.25rem 0.7rem 1.25rem; + position: fixed; + width: 100%; + z-index: 1000; +} + + #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::after { + 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; +} + +.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder { + color: var(--bs-secondary-color); + text-align: end; +} + +.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder { + text-align: start; +} \ No newline at end of file diff --git a/SessionZeroClient/wwwroot/css/main.css b/SessionZeroClient/wwwroot/css/main.css new file mode 100644 index 0000000..73fb60c --- /dev/null +++ b/SessionZeroClient/wwwroot/css/main.css @@ -0,0 +1,13 @@ +:root { + --background-color: #2c3930; + --text-color: #dcd7c9; + --accent-color-green-1: #8fb49a; + --accent-color-green-2: #6a7b6f; + --accent-color-blue-1: #1d3947; + --accent-color-blue-2: #4c6878; +} + +html { + color: var(--text-color); + background-color: var(--background-color); +} \ No newline at end of file diff --git a/SessionZeroClient/wwwroot/icon-192.png b/SessionZeroClient/wwwroot/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..841a9db663e04cf0b69ede8f3832117632737f15 GIT binary patch literal 11579 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 sw&q0r_@so*J}_*hHSHk? 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 OQkK_{tB|n>`2PT5)*@2? literal 0 HcmV?d00001 diff --git a/SessionZeroClient/wwwroot/index.html b/SessionZeroClient/wwwroot/index.html new file mode 100644 index 0000000..ce6b376 --- /dev/null +++ b/SessionZeroClient/wwwroot/index.html @@ -0,0 +1,36 @@ + + + + + + + SessionZeroClient + + + + + + + + + + + +
+ + + + +
+
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + + diff --git a/SessionZeroClient/wwwroot/manifest.webmanifest b/SessionZeroClient/wwwroot/manifest.webmanifest new file mode 100644 index 0000000..9ea8a47 --- /dev/null +++ b/SessionZeroClient/wwwroot/manifest.webmanifest @@ -0,0 +1,22 @@ +{ + "name": "SessionZero", + "short_name": "SessionZero", + "id": "./", + "start_url": "./", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#03173d", + "prefer_related_applications": false, + "icons": [ + { + "src": "icon-512.png", + "type": "image/png", + "sizes": "512x512" + }, + { + "src": "icon-192.png", + "type": "image/png", + "sizes": "192x192" + } + ] +} diff --git a/SessionZeroClient/wwwroot/service-worker.js b/SessionZeroClient/wwwroot/service-worker.js new file mode 100644 index 0000000..fe614da --- /dev/null +++ b/SessionZeroClient/wwwroot/service-worker.js @@ -0,0 +1,4 @@ +// In development, always fetch from the network and do not enable offline support. +// This is because caching would make development more difficult (changes would not +// be reflected on the first load after each change). +self.addEventListener('fetch', () => { }); diff --git a/SessionZeroClient/wwwroot/service-worker.published.js b/SessionZeroClient/wwwroot/service-worker.published.js new file mode 100644 index 0000000..1f7f543 --- /dev/null +++ b/SessionZeroClient/wwwroot/service-worker.published.js @@ -0,0 +1,55 @@ +// Caution! Be sure you understand the caveats before publishing an application with +// offline support. See https://aka.ms/blazor-offline-considerations + +self.importScripts('./service-worker-assets.js'); +self.addEventListener('install', event => event.waitUntil(onInstall(event))); +self.addEventListener('activate', event => event.waitUntil(onActivate(event))); +self.addEventListener('fetch', event => event.respondWith(onFetch(event))); + +const cacheNamePrefix = 'offline-cache-'; +const cacheName = `${cacheNamePrefix}${self.assetsManifest.version}`; +const offlineAssetsInclude = [ /\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/ ]; +const offlineAssetsExclude = [ /^service-worker\.js$/ ]; + +// Replace with your base path if you are hosting on a subfolder. Ensure there is a trailing '/'. +const base = "/"; +const baseUrl = new URL(base, self.origin); +const manifestUrlList = self.assetsManifest.assets.map(asset => new URL(asset.url, baseUrl).href); + +async function onInstall(event) { + console.info('Service worker: Install'); + + // Fetch and cache all matching items from the assets manifest + const assetsRequests = self.assetsManifest.assets + .filter(asset => offlineAssetsInclude.some(pattern => pattern.test(asset.url))) + .filter(asset => !offlineAssetsExclude.some(pattern => pattern.test(asset.url))) + .map(asset => new Request(asset.url, { integrity: asset.hash, cache: 'no-cache' })); + await caches.open(cacheName).then(cache => cache.addAll(assetsRequests)); +} + +async function onActivate(event) { + console.info('Service worker: Activate'); + + // Delete unused caches + const cacheKeys = await caches.keys(); + await Promise.all(cacheKeys + .filter(key => key.startsWith(cacheNamePrefix) && key !== cacheName) + .map(key => caches.delete(key))); +} + +async function onFetch(event) { + let cachedResponse = null; + if (event.request.method === 'GET') { + // For all navigation requests, try to serve index.html from cache, + // unless that request is for an offline resource. + // If you need some URLs to be server-rendered, edit the following check to exclude those URLs + const shouldServeIndexHtml = event.request.mode === 'navigate' + && !manifestUrlList.some(url => url === event.request.url); + + const request = shouldServeIndexHtml ? 'index.html' : event.request; + const cache = await caches.open(cacheName); + cachedResponse = await cache.match(request); + } + + return cachedResponse || fetch(event.request); +}