.gitignore
+2
-0
diff --git a/.gitignore b/.gitignore
index e7495bb..ab8b75c 100644
@@ -6,6 +6,8 @@
# dotenv files
.env
receipt_printer.proto
# User-specific files
*.rsuser
*.suo
Receipt.AppHost/AppHost.cs
+3
-0
diff --git a/Receipt.AppHost/AppHost.cs b/Receipt.AppHost/AppHost.cs
index efcad4d..59793d1 100644
@@ -1,7 +1,10 @@
using Aspire.Hosting;
using Projects;
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Receipt_Web>("web");
using var app = builder.Build();
app.Run();
Receipt.AppHost/Properties/launchSettings.json
+2
-1
diff --git a/Receipt.AppHost/Properties/launchSettings.json b/Receipt.AppHost/Properties/launchSettings.json
index e340a9b..0f4d421 100644
@@ -10,7 +10,8 @@
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19182",
"ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20168"
"ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20168",
"ASPIRE_ALLOW_UNSECURED_TRANSPORT": "true"
}
}
}
Receipt.AppHost/Receipt.AppHost.csproj
+3
-0
diff --git a/Receipt.AppHost/Receipt.AppHost.csproj b/Receipt.AppHost/Receipt.AppHost.csproj
index 7967ebd..846e511 100644
@@ -9,4 +9,7 @@
<ItemGroup>
<PackageReference Include="Aspire.Hosting.AppHost" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Receipt.Web\Receipt.Web.csproj" />
</ItemGroup>
</Project>
Receipt.Web/Components/App.razor
+20
-0
diff --git a/Receipt.Web/Components/App.razor b/Receipt.Web/Components/App.razor
new file mode 100644
index 0000000..a1fbcef
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<base href="/" />
<ResourcePreloader />
<link rel="stylesheet" href="@Assets["app.css"]" />
<link rel="stylesheet" href="@Assets["Receipt.Web.styles.css"]" />
<ImportMap />
<HeadOutlet />
</head>
<body>
<Routes />
<script src="@Assets["_framework/blazor.web.js"]"></script>
</body>
</html>
Receipt.Web/Components/Layout/MainLayout.razor
+3
-0
diff --git a/Receipt.Web/Components/Layout/MainLayout.razor b/Receipt.Web/Components/Layout/MainLayout.razor
new file mode 100644
index 0000000..e1a9a75
@@ -0,0 +1,3 @@
@inherits LayoutComponentBase
@Body
Receipt.Web/Components/Layout/MainLayout.razor.css
+20
-0
diff --git a/Receipt.Web/Components/Layout/MainLayout.razor.css b/Receipt.Web/Components/Layout/MainLayout.razor.css
new file mode 100644
index 0000000..60cec92
@@ -0,0 +1,20 @@
#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;
}
Receipt.Web/Components/Pages/Error.razor
+37
-0
diff --git a/Receipt.Web/Components/Pages/Error.razor b/Receipt.Web/Components/Pages/Error.razor
new file mode 100644
index 0000000..911346d
@@ -0,0 +1,37 @@
@page "/Error"
@using System.Diagnostics
@using Microsoft.AspNetCore.Http
<PageTitle>Error</PageTitle>
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>
@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;
}
Receipt.Web/Components/Pages/Home.razor
+5
-0
diff --git a/Receipt.Web/Components/Pages/Home.razor b/Receipt.Web/Components/Pages/Home.razor
new file mode 100644
index 0000000..88e6be8
@@ -0,0 +1,5 @@
@page "/"
<PageTitle>Receipt Printer</PageTitle>
<h1>Print a receipt!</h1>
Receipt.Web/Components/Pages/NotFound.razor
+5
-0
diff --git a/Receipt.Web/Components/Pages/NotFound.razor b/Receipt.Web/Components/Pages/NotFound.razor
new file mode 100644
index 0000000..917ada1
@@ -0,0 +1,5 @@
@page "/not-found"
@layout MainLayout
<h3>Not Found</h3>
<p>Sorry, the content you are looking for does not exist.</p>
\ No newline at end of file
Receipt.Web/Components/Routes.razor
+6
-0
diff --git a/Receipt.Web/Components/Routes.razor b/Receipt.Web/Components/Routes.razor
new file mode 100644
index 0000000..105855d
@@ -0,0 +1,6 @@
<Router AppAssembly="typeof(Program).Assembly" NotFoundPage="typeof(Pages.NotFound)">
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
<FocusOnNavigate RouteData="routeData" Selector="h1" />
</Found>
</Router>
Receipt.Web/Components/_Imports.razor
+11
-0
diff --git a/Receipt.Web/Components/_Imports.razor b/Receipt.Web/Components/_Imports.razor
new file mode 100644
index 0000000..8557004
@@ -0,0 +1,11 @@
@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 Receipt.Web
@using Receipt.Web.Components
@using Receipt.Web.Components.Layout
Receipt.Web/Program.cs
+28
-0
diff --git a/Receipt.Web/Program.cs b/Receipt.Web/Program.cs
new file mode 100644
index 0000000..7afc79d
@@ -0,0 +1,28 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Receipt.Web.Components;
var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults();
// Add services to the container.
builder.Services.AddRazorComponents();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error", createScopeForErrors: true);
}
app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true);
app.UseAntiforgery();
app.MapStaticAssets();
app.MapRazorComponents<App>();
app.MapDefaultEndpoints();
app.Run();
Receipt.Web/Properties/launchSettings.json
+14
-0
diff --git a/Receipt.Web/Properties/launchSettings.json b/Receipt.Web/Properties/launchSettings.json
new file mode 100644
index 0000000..2b977c3
@@ -0,0 +1,14 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5212",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Receipt.Web/Receipt.Web.csproj
+11
-0
diff --git a/Receipt.Web/Receipt.Web.csproj b/Receipt.Web/Receipt.Web.csproj
new file mode 100644
index 0000000..46103f2
@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<AssemblyName>Receipt.Web</AssemblyName>
<RootNamespace>Receipt.Web</RootNamespace>
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
<UserSecretsId>1141a958-2e98-427d-8805-5a58bb312cfe</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Receipt.ServiceDefaults\Receipt.ServiceDefaults.csproj" />
</ItemGroup>
</Project>
Receipt.Web/appsettings.Development.json
+8
-0
diff --git a/Receipt.Web/appsettings.Development.json b/Receipt.Web/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
Receipt.Web/appsettings.json
+9
-0
diff --git a/Receipt.Web/appsettings.json b/Receipt.Web/appsettings.json
new file mode 100644
index 0000000..10f68b8
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
Receipt.Web/packages.lock.json
+209
-0
diff --git a/Receipt.Web/packages.lock.json b/Receipt.Web/packages.lock.json
new file mode 100644
index 0000000..fd92f4e
@@ -0,0 +1,209 @@
{
"version": 2,
"dependencies": {
"net10.0": {
"CSharpier.MsBuild": {
"type": "Direct",
"requested": "[1.2.6, )",
"resolved": "1.2.6",
"contentHash": "KMSJG+jfk7vjP52QkWB99qWespXCPAzG/IaMCMRHYWumJEAGKQYm2HtyWG6eqnOwDitH96i1cqq5EVesyOtPmg=="
},
"Microsoft.AspNetCore.App.Internal.Assets": {
"type": "Direct",
"requested": "[10.0.4, )",
"resolved": "10.0.4",
"contentHash": "M942X5Vy726SlvFBuoAC4cDczEMlPAFt1mmyFlrkw/QcpdVwVU0DkF4P9JabxX6eWNm9RvaYZHe25FN7oXoxpQ=="
},
"Microsoft.Extensions.AmbientMetadata.Application": {
"type": "Transitive",
"resolved": "10.4.0",
"contentHash": "bovnONzrr/JIc+w343i857rJEb7cQH9UzEjbV5n67agWBEYICGQb8xiqYz5+GoFXp6mKEKLwYCQGttMU1p5yXQ=="
},
"Microsoft.Extensions.Compliance.Abstractions": {
"type": "Transitive",
"resolved": "10.4.0",
"contentHash": "4WkknDbVrHNf+S6fwSt1OAXlGJ/G/QrtJlqx4aNzOLmeT3GRyxpGLZn+Q3UV+RMRAF6FfsijEZBg2ZAW8bTAkg=="
},
"Microsoft.Extensions.DependencyInjection.AutoActivation": {
"type": "Transitive",
"resolved": "10.4.0",
"contentHash": "ksmUG2SFTcXzYdyoLOdeSM/qYLRGN6qbbSzYVkwMK9xsctfR1hYkUayeOpFCMd7L+QSlYX72mK9wxwdgQxyS4g=="
},
"Microsoft.Extensions.Diagnostics.ExceptionSummarization": {
"type": "Transitive",
"resolved": "10.4.0",
"contentHash": "1/hQmONMWxRTKXuN0pQShQN9QsqIRTS1G4fdmKW0O9phuVZjyzIROQD9Fbfwyn2t+yvP8SzjatGAPX4jDRfgHg=="
},
"Microsoft.Extensions.Http.Diagnostics": {
"type": "Transitive",
"resolved": "10.4.0",
"contentHash": "ybx2QcCWROCnUCbSj/IyHXn1c58brjjHzTTbueKgBl/qHsWk69mu25mjQ3oaMsO1I0+EcS6AhVuhIopL2q3IDw==",
"dependencies": {
"Microsoft.Extensions.Telemetry": "10.4.0"
}
},
"Microsoft.Extensions.Resilience": {
"type": "Transitive",
"resolved": "10.4.0",
"contentHash": "41CCbJJPsDWU6NsmKfANHkfT/+KCBlZZqQ1eBoQhhW0xqGCiWmUlMdi2BoaM/GcwKHX5WiQL/IESROmgk0Owfw==",
"dependencies": {
"Microsoft.Extensions.Diagnostics.ExceptionSummarization": "10.4.0",
"Microsoft.Extensions.Telemetry.Abstractions": "10.4.0",
"Polly.Extensions": "8.4.2",
"Polly.RateLimiting": "8.4.2"
}
},
"Microsoft.Extensions.ServiceDiscovery.Abstractions": {
"type": "Transitive",
"resolved": "10.4.0",
"contentHash": "HkBb7cdi27tkQiQw1anQFbXe+A3pjRwDKgVbd/DD9fMAO2X9abK0FEyM/tNVXjW3lwOWl2tF+Xij/DqI6i+JTg=="
},
"Microsoft.Extensions.Telemetry": {
"type": "Transitive",
"resolved": "10.4.0",
"contentHash": "AbHleTzdpGPjA6RpOjKVHEYx7SoBRnJ2bwAbbPa3aGB7HiVwBmeTJhBGhtIBiuIW0VpKDS8x+bV5iWqpBRIf4w==",
"dependencies": {
"Microsoft.Extensions.AmbientMetadata.Application": "10.4.0",
"Microsoft.Extensions.DependencyInjection.AutoActivation": "10.4.0",
"Microsoft.Extensions.Telemetry.Abstractions": "10.4.0"
}
},
"Microsoft.Extensions.Telemetry.Abstractions": {
"type": "Transitive",
"resolved": "10.4.0",
"contentHash": "3b2uVa4voJfLLg39BPCKQS0ZgnpEZFkKf7YmnMVlM5FQJYBPOuePIQdnEK1/Oxd+w3GscxGYuE7IMOXDwixZtQ==",
"dependencies": {
"Microsoft.Extensions.Compliance.Abstractions": "10.4.0"
}
},
"OpenTelemetry": {
"type": "Transitive",
"resolved": "1.15.0",
"contentHash": "7mS/oZFF8S6xyqGQfMU1btp0nXJQUPWV535Vp/XMLYwRAUv36xQN+U4vufWBF1+z4HnRTOwuFHtUSGnHbyN6FQ==",
"dependencies": {
"OpenTelemetry.Api.ProviderBuilderExtensions": "1.15.0"
}
},
"OpenTelemetry.Api": {
"type": "Transitive",
"resolved": "1.15.0",
"contentHash": "vk5OGdf6K9kQScCWo3bRjhDWCv6Pqw92IpX4dlARZ8B1WL7/2NGTDtCkkw42eQf7UdwyoHKzVvMH/PtL8d6z7w=="
},
"OpenTelemetry.Api.ProviderBuilderExtensions": {
"type": "Transitive",
"resolved": "1.15.0",
"contentHash": "OnuSUlRpGvowkOzGFQfy+KZFu0cITfKfh2IYJJiZskxVJiOuexwOOuvfDAgpJdmTzVWAHjYdz2shcHZaJ06UjQ==",
"dependencies": {
"OpenTelemetry.Api": "1.15.0"
}
},
"Polly.Core": {
"type": "Transitive",
"resolved": "8.4.2",
"contentHash": "BpE2I6HBYYA5tF0Vn4eoQOGYTYIK1BlF5EXVgkWGn3mqUUjbXAr13J6fZVbp7Q3epRR8yshacBMlsHMhpOiV3g=="
},
"Polly.Extensions": {
"type": "Transitive",
"resolved": "8.4.2",
"contentHash": "GZ9vRVmR0jV2JtZavt+pGUsQ1O1cuRKG7R7VOZI6ZDy9y6RNPvRvXK1tuS4ffUrv8L0FTea59oEuQzgS0R7zSA==",
"dependencies": {
"Polly.Core": "8.4.2"
}
},
"Polly.RateLimiting": {
"type": "Transitive",
"resolved": "8.4.2",
"contentHash": "ehTImQ/eUyO07VYW2WvwSmU9rRH200SKJ/3jku9rOkyWE0A2JxNFmAVms8dSn49QLSjmjFRRSgfNyOgr/2PSmA==",
"dependencies": {
"Polly.Core": "8.4.2"
}
},
"receipt.servicedefaults": {
"type": "Project",
"dependencies": {
"Microsoft.Extensions.Http.Resilience": "[10.4.0, )",
"Microsoft.Extensions.ServiceDiscovery": "[10.4.0, )",
"OpenTelemetry.Exporter.OpenTelemetryProtocol": "[1.15.0, )",
"OpenTelemetry.Extensions.Hosting": "[1.15.0, )",
"OpenTelemetry.Instrumentation.AspNetCore": "[1.15.1, )",
"OpenTelemetry.Instrumentation.GrpcNetClient": "[1.15.0-beta.1, )",
"OpenTelemetry.Instrumentation.Http": "[1.15.0, )",
"OpenTelemetry.Instrumentation.Runtime": "[1.15.0, )"
}
},
"Microsoft.Extensions.Http.Resilience": {
"type": "CentralTransitive",
"requested": "[10.4.0, )",
"resolved": "10.4.0",
"contentHash": "HbkUsPUC7vLy2TaDbdA9aooW64n9yX4sUppRuiJ1cOzzU1FUW+MVEotm6kYVq6AuUI9xwFSBhRFzA03blmk3VA==",
"dependencies": {
"Microsoft.Extensions.Http.Diagnostics": "10.4.0",
"Microsoft.Extensions.Resilience": "10.4.0"
}
},
"Microsoft.Extensions.ServiceDiscovery": {
"type": "CentralTransitive",
"requested": "[10.4.0, )",
"resolved": "10.4.0",
"contentHash": "RznZAH6L4RNvroECT5JpqfFQJjHTn+8N7+ThSgYutbshkuymFeL/uBIZt1CM8LOdpPPhn4//a5fLUah9/k7ayQ==",
"dependencies": {
"Microsoft.Extensions.ServiceDiscovery.Abstractions": "10.4.0"
}
},
"OpenTelemetry.Exporter.OpenTelemetryProtocol": {
"type": "CentralTransitive",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "VH8ANc/js9IRvfYt0Q2UaAxNCOWm+IU+vWrtoH7pfx4oWPVdISUt+9uWfBCFMWZg5WzQip5dhslyDjeyZXXfSQ==",
"dependencies": {
"OpenTelemetry": "1.15.0"
}
},
"OpenTelemetry.Extensions.Hosting": {
"type": "CentralTransitive",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "RixjKyB1pbYGhWdvPto4KJs+exdQknJsnjUO9WszdLles5Vcd0EYzxPNJdwmLjYfP+Jfbr4B5nktM4ZgeHSWtg==",
"dependencies": {
"OpenTelemetry": "1.15.0"
}
},
"OpenTelemetry.Instrumentation.AspNetCore": {
"type": "CentralTransitive",
"requested": "[1.15.1, )",
"resolved": "1.15.1",
"contentHash": "wXaZTu6LHY8xcbRd6ClcrtjHqGVoGYCcArXEZA3iUjUcYSVYwDGyPU0PdkwTfylxv8JeCCVDQhVb0fT7xBJjGA==",
"dependencies": {
"OpenTelemetry.Api.ProviderBuilderExtensions": "[1.15.0, 2.0.0)"
}
},
"OpenTelemetry.Instrumentation.GrpcNetClient": {
"type": "CentralTransitive",
"requested": "[1.15.0-beta.1, )",
"resolved": "1.15.0-beta.1",
"contentHash": "SBas5+C4kGUqoy8OPpQis+QIgJ7/aaJl4H3oLzHCJnZLCb8TXZmQL2/r753RXXJUH8oIeLIzdW+EXgujSy+cpQ==",
"dependencies": {
"OpenTelemetry": "[1.15.0, 2.0.0)"
}
},
"OpenTelemetry.Instrumentation.Http": {
"type": "CentralTransitive",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "uToc7bUp8IEdb0ny9mKsL6FrrYelINPzxxiSShJgOf4XmQc4Azww6S5RjRj24YhsOn2a1MABOrxfVTZXtDk4Eg==",
"dependencies": {
"OpenTelemetry.Api.ProviderBuilderExtensions": "[1.15.0, 2.0.0)"
}
},
"OpenTelemetry.Instrumentation.Runtime": {
"type": "CentralTransitive",
"requested": "[1.15.0, )",
"resolved": "1.15.0",
"contentHash": "OOvpqR/j2Pb6+tWhHNODIbSJ53Or/MDtTiXEyrsWI02K2lLAgvBFcxUOrHggS/8015cYR3AdSaXv6NZrkz5yQA==",
"dependencies": {
"OpenTelemetry.Api": "[1.15.0, 2.0.0)"
}
}
}
}
}
\ No newline at end of file
Receipt.Web/wwwroot/app.css
+38
-0
diff --git a/Receipt.Web/wwwroot/app.css b/Receipt.Web/wwwroot/app.css
new file mode 100644
index 0000000..5388357
@@ -0,0 +1,38 @@
h1:focus {
outline: none;
}
.valid.modified:not([type=checkbox]) {
outline: 1px solid #26b050;
}
.invalid {
outline: 1px solid #e50000;
}
.validation-message {
color: #e50000;
}
.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."
}
.darker-border-checkbox.form-check-input {
border-color: #929292;
}
.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
Receipt.slnx
+1
-0
diff --git a/Receipt.slnx b/Receipt.slnx
index 1e567cd..46b8aef 100644
@@ -1,4 +1,5 @@
<Solution>
<Project Path="Receipt.AppHost/Receipt.AppHost.csproj" />
<Project Path="Receipt.ServiceDefaults/Receipt.ServiceDefaults.csproj" />
<Project Path="Receipt.Web/Receipt.Web.csproj" />
</Solution>
dotnet-tools.json
+13
-0
diff --git a/dotnet-tools.json b/dotnet-tools.json
new file mode 100644
index 0000000..97f37dc
@@ -0,0 +1,13 @@
{
"version": 1,
"isRoot": true,
"tools": {
"csharpier": {
"version": "1.2.6",
"commands": [
"csharpier"
],
"rollForward": false
}
}
}
\ No newline at end of file