33 Commits

Author SHA1 Message Date
6d486f49 a339b67380 Version update test 2025-11-15 14:52:05 -05:00
6d486f49 fe1a583da9 Fixed bugs 2025-11-07 18:22:21 -05:00
6d486f49 8ce9084ffb Some stub map placeholder for future content 2025-11-07 12:04:11 -05:00
6d486f49 86580a9f5d WIP Tooltip code 2025-11-05 15:11:55 -05:00
6d486f49 3696f474e9 Direct database link feature 2025-11-04 16:56:43 -05:00
Jonathan b63d8330f7 Fixing harass calculator link 2025-08-10 18:35:36 -04:00
Jonathan ad7aabd9e0 Adding MIA footer, don't recall why it was missing 2025-06-22 22:53:23 -04:00
Jonathan 7680fae30b Removing variable service 2025-06-22 22:49:59 -04:00
Jonathan 9e9b25ae6f Removing pointless WebsiteService.cs 2025-06-22 22:46:45 -04:00
Jonathan cf3f6e647b Web page data refactor 2025-06-22 22:38:59 -04:00
Jonathan c0ea4a094e Splitting large data file for less cumbersome editing and IDE lag 2025-06-22 20:48:33 -04:00
Jonathan 1bc78306b8 Temp is depleted logic 2025-06-22 18:46:51 -04:00
Jonathan 826717c47f Harvest points can now be depleted 2025-06-21 21:10:06 -04:00
Jonathan a5964a68f8 Clean up 2025-06-21 21:09:32 -04:00
Jonathan 424fdd248a Cleanup 2025-06-21 21:09:32 -04:00
Jonathan 7ca2f82ad7 Other rider suggestions 2025-06-21 21:09:32 -04:00
Jonathan fd20f8ca7d Start of considering depleted values for Raw Ether surges and bases 2025-06-21 21:09:31 -04:00
Jonathan 5d4f141580 Removing broken link until fixed 2025-06-15 21:33:58 -04:00
Jonathan 2baa295e1f More data updates to playtest patch 2025-06-15 21:31:32 -04:00
Jonathan b8d2210cc5 Rider cleanup suggestions in calculator 2025-06-14 12:18:44 -04:00
Jonathan 8b5d5a05e4 Metadata fix on Armor Types note date 2025-06-13 18:45:04 -04:00
Jonathan 02d6e2f5e9 Additional legacy data cleanup 2025-06-13 18:44:25 -04:00
Jonathan 22d245972c Data cleanup 2025-06-13 18:43:24 -04:00
Jonathan c95ee06449 Removing all the meta agile and git stuff 2025-06-13 18:39:11 -04:00
Jonathan df5c5480d8 Removing SQL Convert project 2025-06-13 18:27:11 -04:00
Jonathan e641189c9d Removing SQL 2025-06-13 18:26:33 -04:00
Jonathan 071d2f5e35 More data fixes and added a bunch of disclaimers 2025-06-12 00:06:39 -04:00
Jonathan ff4941d38c More data, and minor updates to Build Calculator for June 2025 Playtest 2025-06-11 22:31:42 -04:00
Jonathan 4b2fe6d551 More data plus example flavour text UI 2025-06-11 20:41:31 -04:00
Jonathan b02232855d More information 2025-06-11 11:51:57 -04:00
Jonathan f5e8984ab8 More info 2025-06-10 18:27:34 -04:00
Jonathan 2ac56f9672 Atzlan data. Very WIP 2025-06-10 16:49:49 -04:00
Jonathan e464b9ecab Updated Masked Hunter Data 2025-06-10 10:39:49 -04:00
280 changed files with 126237 additions and 9226 deletions
+16
View File
@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
<StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.0" />
</ItemGroup>
</Project>
+19
View File
@@ -0,0 +1,19 @@
@page "/counter"
@rendermode InteractiveWebAssembly
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
+5
View File
@@ -0,0 +1,5 @@
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
var builder = WebAssemblyHostBuilder.CreateDefault(args);
await builder.Build().RunAsync();
+9
View File
@@ -0,0 +1,9 @@
@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 Client.Client
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
+15
View File
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Client.Client\Client.Client.csproj" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.0" />
</ItemGroup>
</Project>
+22
View File
@@ -0,0 +1,22 @@
<!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["lib/bootstrap/dist/css/bootstrap.min.css"]" />
<link rel="stylesheet" href="@Assets["app.css"]" />
<link rel="stylesheet" href="@Assets["Client.styles.css"]" />
<ImportMap />
<link rel="icon" type="image/png" href="favicon.png" />
<HeadOutlet />
</head>
<body>
<Routes />
<script src="@Assets["_framework/blazor.web.js"]"></script>
</body>
</html>
@@ -0,0 +1,23 @@
@inherits LayoutComponentBase
<div class="page">
<div class="sidebar">
<NavMenu />
</div>
<main>
<div class="top-row px-4">
<a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a>
</div>
<article class="content px-4">
@Body
</article>
</main>
</div>
<div id="blazor-error-ui" data-nosnippet>
An unhandled error has occurred.
<a href="." class="reload">Reload</a>
<span class="dismiss">🗙</span>
</div>
@@ -0,0 +1,98 @@
.page {
position: relative;
display: flex;
flex-direction: column;
}
main {
flex: 1;
}
.sidebar {
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
}
.top-row {
background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5;
justify-content: flex-end;
height: 3.5rem;
display: flex;
align-items: center;
}
.top-row ::deep a, .top-row ::deep .btn-link {
white-space: nowrap;
margin-left: 1.5rem;
text-decoration: none;
}
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
text-decoration: underline;
}
.top-row ::deep a:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
@media (max-width: 640.98px) {
.top-row {
justify-content: space-between;
}
.top-row ::deep a, .top-row ::deep .btn-link {
margin-left: 0;
}
}
@media (min-width: 641px) {
.page {
flex-direction: row;
}
.sidebar {
width: 250px;
height: 100vh;
position: sticky;
top: 0;
}
.top-row {
position: sticky;
top: 0;
z-index: 1;
}
.top-row.auth ::deep a:first-child {
flex: 1;
text-align: right;
width: 0;
}
.top-row, article {
padding-left: 2rem !important;
padding-right: 1.5rem !important;
}
}
#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;
}
@@ -0,0 +1,30 @@
<div class="top-row ps-3 navbar navbar-dark">
<div class="container-fluid">
<a class="navbar-brand" href="">Client</a>
</div>
</div>
<input type="checkbox" title="Navigation menu" class="navbar-toggler" />
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
<nav class="nav flex-column">
<div class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="counter">
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> Counter
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="weather">
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Weather
</NavLink>
</div>
</nav>
</div>
@@ -0,0 +1,105 @@
.navbar-toggler {
appearance: none;
cursor: pointer;
width: 3.5rem;
height: 2.5rem;
color: white;
position: absolute;
top: 0.5rem;
right: 1rem;
border: 1px solid rgba(255, 255, 255, 0.1);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
}
.navbar-toggler:checked {
background-color: rgba(255, 255, 255, 0.5);
}
.top-row {
min-height: 3.5rem;
background-color: rgba(0,0,0,0.4);
}
.navbar-brand {
font-size: 1.1rem;
}
.bi {
display: inline-block;
position: relative;
width: 1.25rem;
height: 1.25rem;
margin-right: 0.75rem;
top: -1px;
background-size: cover;
}
.bi-house-door-fill-nav-menu {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
}
.bi-plus-square-fill-nav-menu {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
}
.bi-list-nested-nav-menu {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
}
.nav-item {
font-size: 0.9rem;
padding-bottom: 0.5rem;
}
.nav-item:first-of-type {
padding-top: 1rem;
}
.nav-item:last-of-type {
padding-bottom: 1rem;
}
.nav-item ::deep .nav-link {
color: #d7d7d7;
background: none;
border: none;
border-radius: 4px;
height: 3rem;
display: flex;
align-items: center;
line-height: 3rem;
width: 100%;
}
.nav-item ::deep a.active {
background-color: rgba(255,255,255,0.37);
color: white;
}
.nav-item ::deep .nav-link:hover {
background-color: rgba(255,255,255,0.1);
color: white;
}
.nav-scrollable {
display: none;
}
.navbar-toggler:checked ~ .nav-scrollable {
display: block;
}
@media (min-width: 641px) {
.navbar-toggler {
display: none;
}
.nav-scrollable {
/* Never collapse the sidebar for wide screens */
display: block;
/* Allow sidebar to scroll for tall menus */
height: calc(100vh - 3.5rem);
overflow-y: auto;
}
}
@@ -0,0 +1,36 @@
@page "/Error"
@using System.Diagnostics
<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;
}
@@ -0,0 +1,7 @@
@page "/"
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
Welcome to your new app.
@@ -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>
@@ -0,0 +1,64 @@
@page "/weather"
@attribute [StreamRendering]
<PageTitle>Weather</PageTitle>
<h1>Weather</h1>
<p>This component demonstrates showing data.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th aria-label="Temperature in Celsius">Temp. (C)</th>
<th aria-label="Temperature in Fahrenheit">Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Date.ToShortDateString()</td>
<td>@forecast.TemperatureC</td>
<td>@forecast.TemperatureF</td>
<td>@forecast.Summary</td>
</tr>
}
</tbody>
</table>
}
@code {
private WeatherForecast[]? 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)]
}).ToArray();
}
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);
}
}
+6
View File
@@ -0,0 +1,6 @@
<Router AppAssembly="typeof(Program).Assembly" AdditionalAssemblies="new[] { typeof(Client._Imports).Assembly }" NotFoundPage="typeof(Pages.NotFound)">
<Found Context="routeData">
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
<FocusOnNavigate RouteData="routeData" Selector="h1" />
</Found>
</Router>
+12
View File
@@ -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.JSInterop
@using Client
@using Client.Client
@using Client.Components
@using Client.Components.Layout
+32
View File
@@ -0,0 +1,32 @@
using Client.Client.Pages;
using Client.Components;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorComponents()
.AddInteractiveWebAssemblyComponents();
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.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true);
app.UseHttpsRedirection();
app.UseAntiforgery();
app.MapStaticAssets();
app.MapRazorComponents<App>()
.AddInteractiveWebAssemblyRenderMode()
.AddAdditionalAssemblies(typeof(Client.Client._Imports).Assembly);
app.Run();
@@ -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:5029",
"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:7182;http://localhost:5029",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}
@@ -1,16 +1,9 @@
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
html, body { html, body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
} }
h1:focus {
outline: none;
}
a, .btn-link { a, .btn-link {
color: #0071c1; color: #006bb7;
} }
.btn-primary { .btn-primary {
@@ -19,39 +12,28 @@ a, .btn-link {
border-color: #1861ac; border-color: #1861ac;
} }
.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
}
.content { .content {
padding-top: 1.1rem; padding-top: 1.1rem;
} }
h1:focus {
outline: none;
}
.valid.modified:not([type=checkbox]) { .valid.modified:not([type=checkbox]) {
outline: 1px solid #26b050; outline: 1px solid #26b050;
} }
.invalid { .invalid {
outline: 1px solid red; outline: 1px solid #e50000;
} }
.validation-message { .validation-message {
color: red; color: #e50000;
}
#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;
}
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
} }
.blazor-error-boundary { .blazor-error-boundary {
@@ -60,39 +42,19 @@ a, .btn-link {
color: white; color: white;
} }
.blazor-error-boundary::after { .blazor-error-boundary::after {
content: "An error has occurred." content: "An error has occurred."
}
.darker-border-checkbox.form-check-input {
border-color: #929292;
} }
.loading-progress { .form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
position: relative; color: var(--bs-secondary-color);
display: block; text-align: end;
width: 8rem;
height: 8rem;
margin: 20vh auto 1rem auto;
} }
.loading-progress circle { .form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
fill: none; text-align: start;
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");
} }

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,597 @@
/*!
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-primary-text-emphasis: #052c65;
--bs-secondary-text-emphasis: #2b2f32;
--bs-success-text-emphasis: #0a3622;
--bs-info-text-emphasis: #055160;
--bs-warning-text-emphasis: #664d03;
--bs-danger-text-emphasis: #58151c;
--bs-light-text-emphasis: #495057;
--bs-dark-text-emphasis: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #e2e3e5;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #c4c8cb;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-heading-color: inherit;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-color: #212529;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-xxl: 2rem;
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
--bs-border-radius-pill: 50rem;
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
--bs-focus-ring-width: 0.25rem;
--bs-focus-ring-opacity: 0.25;
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
--bs-form-valid-color: #198754;
--bs-form-valid-border-color: #198754;
--bs-form-invalid-color: #dc3545;
--bs-form-invalid-border-color: #dc3545;
}
[data-bs-theme=dark] {
color-scheme: dark;
--bs-body-color: #dee2e6;
--bs-body-color-rgb: 222, 226, 230;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #fff;
--bs-emphasis-color-rgb: 255, 255, 255;
--bs-secondary-color: rgba(222, 226, 230, 0.75);
--bs-secondary-color-rgb: 222, 226, 230;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(222, 226, 230, 0.5);
--bs-tertiary-color-rgb: 222, 226, 230;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-primary-text-emphasis: #6ea8fe;
--bs-secondary-text-emphasis: #a7acb1;
--bs-success-text-emphasis: #75b798;
--bs-info-text-emphasis: #6edff6;
--bs-warning-text-emphasis: #ffda6a;
--bs-danger-text-emphasis: #ea868f;
--bs-light-text-emphasis: #f8f9fa;
--bs-dark-text-emphasis: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #161719;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #41464b;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #087990;
--bs-warning-border-subtle: #997404;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: inherit;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #8bb9fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 139, 185, 254;
--bs-code-color: #e685b5;
--bs-highlight-color: #dee2e6;
--bs-highlight-bg: #664d03;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
--bs-form-valid-color: #75b798;
--bs-form-valid-border-color: #75b798;
--bs-form-invalid-color: #ea868f;
--bs-form-invalid-border-color: #ea868f;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
border: 0;
border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
color: var(--bs-heading-color);
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-left: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.1875em;
color: var(--bs-highlight-color);
background-color: var(--bs-highlight-bg);
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: var(--bs-code-color);
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.1875rem 0.375rem;
font-size: 0.875em;
color: var(--bs-body-bg);
background-color: var(--bs-body-color);
border-radius: 0.25rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: var(--bs-secondary-color);
text-align: left;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
display: none !important;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: left;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: left;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
-webkit-appearance: textfield;
outline-offset: -2px;
}
/* rtl:raw:
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
::file-selector-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,594 @@
/*!
* Bootstrap Reboot v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
:root,
[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-primary-text-emphasis: #052c65;
--bs-secondary-text-emphasis: #2b2f32;
--bs-success-text-emphasis: #0a3622;
--bs-info-text-emphasis: #055160;
--bs-warning-text-emphasis: #664d03;
--bs-danger-text-emphasis: #58151c;
--bs-light-text-emphasis: #495057;
--bs-dark-text-emphasis: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #e2e3e5;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #c4c8cb;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-heading-color: inherit;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-color: #212529;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-xxl: 2rem;
--bs-border-radius-2xl: var(--bs-border-radius-xxl);
--bs-border-radius-pill: 50rem;
--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);
--bs-focus-ring-width: 0.25rem;
--bs-focus-ring-opacity: 0.25;
--bs-focus-ring-color: rgba(13, 110, 253, 0.25);
--bs-form-valid-color: #198754;
--bs-form-valid-border-color: #198754;
--bs-form-invalid-color: #dc3545;
--bs-form-invalid-border-color: #dc3545;
}
[data-bs-theme=dark] {
color-scheme: dark;
--bs-body-color: #dee2e6;
--bs-body-color-rgb: 222, 226, 230;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #fff;
--bs-emphasis-color-rgb: 255, 255, 255;
--bs-secondary-color: rgba(222, 226, 230, 0.75);
--bs-secondary-color-rgb: 222, 226, 230;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(222, 226, 230, 0.5);
--bs-tertiary-color-rgb: 222, 226, 230;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-primary-text-emphasis: #6ea8fe;
--bs-secondary-text-emphasis: #a7acb1;
--bs-success-text-emphasis: #75b798;
--bs-info-text-emphasis: #6edff6;
--bs-warning-text-emphasis: #ffda6a;
--bs-danger-text-emphasis: #ea868f;
--bs-light-text-emphasis: #f8f9fa;
--bs-dark-text-emphasis: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #161719;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #41464b;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #087990;
--bs-warning-border-subtle: #997404;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: inherit;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #8bb9fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 139, 185, 254;
--bs-code-color: #e685b5;
--bs-highlight-color: #dee2e6;
--bs-highlight-bg: #664d03;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
--bs-form-valid-color: #75b798;
--bs-form-valid-border-color: #75b798;
--bs-form-invalid-color: #ea868f;
--bs-form-invalid-border-color: #ea868f;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: var(--bs-body-font-family);
font-size: var(--bs-body-font-size);
font-weight: var(--bs-body-font-weight);
line-height: var(--bs-body-line-height);
color: var(--bs-body-color);
text-align: var(--bs-body-text-align);
background-color: var(--bs-body-bg);
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
border: 0;
border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
color: var(--bs-heading-color);
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-right: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-right: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.1875em;
color: var(--bs-highlight-color);
background-color: var(--bs-highlight-bg);
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
--bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: var(--bs-font-monospace);
font-size: 1em;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: var(--bs-code-color);
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.1875rem 0.375rem;
font-size: 0.875em;
color: var(--bs-body-bg);
background-color: var(--bs-body-color);
border-radius: 0.25rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: var(--bs-secondary-color);
text-align: right;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {
display: none !important;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: right;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: right;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
-webkit-appearance: textfield;
outline-offset: -2px;
}
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
::file-selector-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -1,9 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk.Razor"> <Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<LangVersion>14</LangVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
@@ -0,0 +1,79 @@
@inject ITooltipService TooltipService
@implements IDisposable
@if (Tooltip == null)
{
<div>Add tooltip object...</div>
}
else
{
<div onclick="@Dismiss" class="tooltipContainer">
<div class="tooltip">
@Tooltip.Message
</div>
</div>
}
<style>
.toastContainer {
border: 4px solid;
border-radius: 4px;
padding: 16px;
display: flex;
flex-direction: column;
justify-items: stretch;
width: 250px;
cursor: pointer;
}
.@SeverityType.Warning.ToLower() {
background-color: var(--severity-warning-color);
border-color: var(--severity-warning-border-color);
}
.@SeverityType.Error.ToLower() {
background-color: var(--severity-error-color);
border-color: var(--severity-error-border-color);
}
.@SeverityType.Information.ToLower() {
background-color: var(--severity-information-color);
border-color: var(--severity-information-border-color);
}
.@SeverityType.Success.ToLower() {
background-color: var(--severity-success-color);
border-color: var(--severity-success-border-color);
}
.toastTitle {
font-weight: 800;
}
</style>
@code {
[Parameter] public TooltipModel? Tooltip { get; set; }
protected override void OnInitialized()
{
base.OnInitialized();
TooltipService.Subscribe(OnUpdate);
}
void Dismiss()
{
TooltipService.RemoveTooltip(Tooltip!);
}
void IDisposable.Dispose()
{
TooltipService.Unsubscribe(OnUpdate);
}
void OnUpdate()
{
}
}
+1 -1
View File
@@ -16,7 +16,7 @@ else
[Parameter] public string EntityId { get; set; } = default!; [Parameter] public string EntityId { get; set; } = default!;
private EntityModel Entity => DATA.Get()[EntityId]; private EntityModel Entity => EntityData.Get()[EntityId];
void EntityLabelClicked() void EntityLabelClicked()
{ {
+1 -28
View File
@@ -1,33 +1,6 @@
@inject IVariableService VariableService <div class="footerContainer" xmlns="http://www.w3.org/1999/html">
<div class="footerContainer" xmlns="http://www.w3.org/1999/html">
<div class="footerSocials">
<a class="footerIcon" href="https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/discussions" target="_blank">
<i class="fa-brands fa-github"></i>
</a>
<a class="footerIcon" href="mailto:igpfanreference@jonathanmccaffrey.com" target="_blank">
<i class="fa-solid fa-envelope"></i>
</a>
<a class="footerIcon" href="https://discord.gg/uMq8bMGeeN" target="_blank">
<i class="fa-brands fa-discord"></i>
</a>
<a class="footerIcon" href="https://www.youtube.com/channel/UCQx88d5C12yp4l7uszNYrdQ" target="_blank">
<i class="fa-brands fa-youtube"></i>
</a>
<a class="footerIcon" href="https://www.twitch.tv/jonathanmccaffrey" target="_blank">
<i class="fa-brands fa-twitch"></i>
</a>
</div>
<div class="footerDivider"></div> <div class="footerDivider"></div>
<div class="footerLastUpdated">Website updated <a
href="https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/commits/main"><b>@VariableService.Variables["LastUpdated"]</b></a>
</div>
<div class="footerDisclaimer"> <div class="footerDisclaimer">
This website is fan-made and not affiliated with <b>SunSpear Games</b> in any way. This website is fan-made and not affiliated with <b>SunSpear Games</b> in any way.
</div> </div>
-29
View File
@@ -1,29 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DefineConstants>TRACE;</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DefineConstants>TRACE;</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.14"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.14">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Model\Model.csproj"/>
</ItemGroup>
</Project>
-36
View File
@@ -1,36 +0,0 @@
#if NO_SQL
#else
using Microsoft.EntityFrameworkCore;
using Model;
using Model.Doc;
using Model.Git;
using Model.Notes;
using Model.Website;
using Model.Work.Tasks;
namespace Contexts;
public class DatabaseContext : DbContext
{
public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options)
{
Database.EnsureCreated();
}
public DbSet<AgileSprintModel> AgileSprintModels { get; set; } = default!;
public DbSet<AgileTaskModel> AgileTaskModels { get; set; } = default!;
public DbSet<GitChangeModel> GitChangeModels { get; set; } = default!;
public DbSet<GitPatchModel> GitPatchModels { get; set; } = default!;
public DbSet<WebPageModel> WebPageModels { get; set; } = default!;
public DbSet<WebSectionModel> WebSectionModels { get; set; } = default!;
public DbSet<DocContentModel> DocContentModels { get; set; } = default!;
public DbSet<DocConnectionModel> DocConnectionModels { get; set; } = default!;
public DbSet<DocSectionModel> DocSectionModels { get; set; } = default!;
public DbSet<NoteContentModel> NoteContentModels { get; set; } = default!;
public DbSet<NoteConnectionModel> NoteConnectionModels { get; set; } = default!;
public DbSet<NoteSectionModel> NoteSectionModels { get; set; } = default!;
public DbSet<Variable> Variables { get; set; } = default!;
}
#endif
+1 -4
View File
@@ -1,5 +1,4 @@
@inject IVariableService VariableService @inject IStorageService StorageService
@inject IStorageService StorageService
@inject IPermissionService PermissionService @inject IPermissionService PermissionService
<Router AppAssembly="@typeof(App).Assembly"> <Router AppAssembly="@typeof(App).Assembly">
@@ -30,7 +29,6 @@
} }
<style> <style>
a { a {
color: white; color: white;
@@ -85,7 +83,6 @@
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
await VariableService.Load();
await StorageService.Load(); await StorageService.Load();
isLoaded = true; isLoaded = true;
StateHasChanged(); StateHasChanged();
BIN
View File
Binary file not shown.
+2 -2
View File
@@ -145,7 +145,7 @@
protected override void OnInitialized() protected override void OnInitialized()
{ {
base.OnInitialized(); base.OnInitialized();
entity = DATA.Get()[entityDialogService.GetEntityId() ?? string.Empty]; entity = EntityData.Get()[entityDialogService.GetEntityId() ?? string.Empty];
entityDialogService.Subscribe(OnUpdate); entityDialogService.Subscribe(OnUpdate);
} }
@@ -157,7 +157,7 @@
void OnUpdate() void OnUpdate()
{ {
entity = DATA.Get()[entityDialogService.GetEntityId()]; entity = EntityData.Get()[entityDialogService.GetEntityId()];
refresh++; refresh++;
StateHasChanged(); StateHasChanged();
+15 -15
View File
@@ -1,11 +1,11 @@
@implements IDisposable; @implements IDisposable;
@inject ISearchService searchService @inject ISearchService SearchService
@inject IJSRuntime jsRuntime @inject IJSRuntime JsRuntime
@inject NavigationManager navigationManager @inject NavigationManager NavigationManager
@if (searchService.IsLoaded() && searchService.IsVisible) @if (SearchService.IsLoaded() && SearchService.IsVisible)
{ {
<div id="searchBackground" class="searchBackground" onclick="@CloseDialog"> <div id="searchBackground" class="searchBackground" onclick="@CloseDialog">
<div class="searchContainer" <div class="searchContainer"
@@ -20,7 +20,7 @@
<div class="searchBox"> <div class="searchBox">
@if (SearchText.Length > 0) @if (SearchText.Length > 0)
{ {
foreach (var searchSection in searchService.Searches) foreach (var searchSection in SearchService.Searches)
{ {
var searchPoints = searchSection.Value.FindAll(x => x.Title.ToLower().Contains(SearchText.ToLower())); var searchPoints = searchSection.Value.FindAll(x => x.Title.ToLower().Contains(SearchText.ToLower()));
@@ -141,7 +141,7 @@
protected override void OnInitialized() protected override void OnInitialized()
{ {
searchService.Subscribe(OnSearchChanged); SearchService.Subscribe(OnSearchChanged);
timer = new Timer(200); timer = new Timer(200);
timer.Elapsed += FocusTimer; timer.Elapsed += FocusTimer;
@@ -151,7 +151,7 @@
private void FocusTimer(object? sender, ElapsedEventArgs e) private void FocusTimer(object? sender, ElapsedEventArgs e)
{ {
jsRuntime.InvokeVoidAsync("SetFocusToElement", "searchInput"); JsRuntime.InvokeVoidAsync("SetFocusToElement", "searchInput");
StateHasChanged(); StateHasChanged();
} }
@@ -159,9 +159,9 @@
private void OnSearchChanged() private void OnSearchChanged()
{ {
if (timer.Enabled != searchService.IsVisible) if (timer.Enabled != SearchService.IsVisible)
{ {
timer.Enabled = searchService.IsVisible; timer.Enabled = SearchService.IsVisible;
} }
StateHasChanged(); StateHasChanged();
@@ -169,26 +169,26 @@
public void Dispose() public void Dispose()
{ {
searchService.Unsubscribe(OnSearchChanged); SearchService.Unsubscribe(OnSearchChanged);
timer.Elapsed -= FocusTimer; timer.Elapsed -= FocusTimer;
} }
public void CloseDialog() public void CloseDialog()
{ {
searchService.Hide(); SearchService.Hide();
} }
public void NavigateTo(string url) public void NavigateTo(string url)
{ {
if (url.Contains("#")) if (url.Contains("#"))
{ {
navigationManager.NavigateTo(url, NavigationManager.NavigateTo(url,
navigationManager.Uri.Split("#").First().Contains(url.Split("#").First())); NavigationManager.Uri.Split("#").First().Contains(url.Split("#").First()));
} }
else else
{ {
navigationManager.NavigateTo(url); NavigationManager.NavigateTo(url);
} }
} }
@@ -200,7 +200,7 @@
private void OnSearch(SearchPointModel searchPoint) private void OnSearch(SearchPointModel searchPoint)
{ {
NavigateTo(searchPoint.Href); NavigateTo(searchPoint.Href);
searchService.Hide(); SearchService.Hide();
} }
private void OnFocus(object obj) private void OnFocus(object obj)
+8 -8
View File
@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest> <ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
<LangVersion>12</LangVersion> <LangVersion>14</LangVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
@@ -21,12 +21,12 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Blazor-Analytics" Version="3.11.0"/> <PackageReference Include="Blazor-Analytics" Version="4.0.0" />
<PackageReference Include="Markdig" Version="0.30.3"/> <PackageReference Include="Markdig" Version="0.43.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.14"/> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.14"/> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.14"/> <PackageReference Include="Microsoft.Extensions.Localization" Version="10.0.0" />
<PackageReference Include="MudBlazor" Version="8.5.1"/> <PackageReference Include="MudBlazor" Version="8.14.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
+13 -19
View File
@@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 18
VisualStudioVersion = 17.0.32112.339 VisualStudioVersion = 18.0.11205.157 d18.0
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IGP", "IGP.csproj", "{172D35E4-8E7B-40D1-96D6-BE2A2043CFCA}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IGP", "IGP.csproj", "{172D35E4-8E7B-40D1-96D6-BE2A2043CFCA}"
EndProject EndProject
@@ -9,15 +9,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "..\Model\Model.csp
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components", "..\Components\Components.csproj", "{0419E7CD-0971-4A56-A61F-C090DF60FAF6}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components", "..\Components\Components.csproj", "{0419E7CD-0971-4A56-A61F-C090DF60FAF6}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Contexts", "..\Contexts\Contexts.csproj", "{F7775F3A-E541-4292-B45F-A18C65637E33}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Services", "..\Services\Services.csproj", "{621178C8-4E8B-478E-80E5-7478F0E7B67E}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Services", "..\Services\Services.csproj", "{621178C8-4E8B-478E-80E5-7478F0E7B67E}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IGP_Convert", "..\IGP_Convert\IGP_Convert.csproj", "{82F1848E-4BF6-4B16-A9DD-574AF566712B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAutomation", "..\TestAutomation\TestAutomation.csproj", "{8B49D038-D013-460D-9C4F-817CAFFEB06F}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAutomation", "..\TestAutomation\TestAutomation.csproj", "{8B49D038-D013-460D-9C4F-817CAFFEB06F}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Playground", "..\Playground\Playground.csproj", "{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pyre", "..\Pyre\Pyre\Pyre.csproj", "{DFB453C5-6ADC-4474-9C8C-E9C9B8D977A5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pyre.Client", "..\Pyre\Pyre.Client\Pyre.Client.csproj", "{5AD4303E-6166-417F-BE8B-59081C0F627B}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -37,26 +35,22 @@ Global
{0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Debug|Any CPU.Build.0 = Debug|Any CPU {0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Release|Any CPU.ActiveCfg = Release|Any CPU {0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Release|Any CPU.Build.0 = Release|Any CPU {0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Release|Any CPU.Build.0 = Release|Any CPU
{F7775F3A-E541-4292-B45F-A18C65637E33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7775F3A-E541-4292-B45F-A18C65637E33}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7775F3A-E541-4292-B45F-A18C65637E33}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7775F3A-E541-4292-B45F-A18C65637E33}.Release|Any CPU.Build.0 = Release|Any CPU
{621178C8-4E8B-478E-80E5-7478F0E7B67E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {621178C8-4E8B-478E-80E5-7478F0E7B67E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{621178C8-4E8B-478E-80E5-7478F0E7B67E}.Debug|Any CPU.Build.0 = Debug|Any CPU {621178C8-4E8B-478E-80E5-7478F0E7B67E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{621178C8-4E8B-478E-80E5-7478F0E7B67E}.Release|Any CPU.ActiveCfg = Release|Any CPU {621178C8-4E8B-478E-80E5-7478F0E7B67E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{621178C8-4E8B-478E-80E5-7478F0E7B67E}.Release|Any CPU.Build.0 = Release|Any CPU {621178C8-4E8B-478E-80E5-7478F0E7B67E}.Release|Any CPU.Build.0 = Release|Any CPU
{82F1848E-4BF6-4B16-A9DD-574AF566712B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{82F1848E-4BF6-4B16-A9DD-574AF566712B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{82F1848E-4BF6-4B16-A9DD-574AF566712B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{82F1848E-4BF6-4B16-A9DD-574AF566712B}.Release|Any CPU.Build.0 = Release|Any CPU
{8B49D038-D013-460D-9C4F-817CAFFEB06F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8B49D038-D013-460D-9C4F-817CAFFEB06F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8B49D038-D013-460D-9C4F-817CAFFEB06F}.Debug|Any CPU.Build.0 = Debug|Any CPU {8B49D038-D013-460D-9C4F-817CAFFEB06F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8B49D038-D013-460D-9C4F-817CAFFEB06F}.Release|Any CPU.ActiveCfg = Release|Any CPU {8B49D038-D013-460D-9C4F-817CAFFEB06F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B49D038-D013-460D-9C4F-817CAFFEB06F}.Release|Any CPU.Build.0 = Release|Any CPU {8B49D038-D013-460D-9C4F-817CAFFEB06F}.Release|Any CPU.Build.0 = Release|Any CPU
{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DFB453C5-6ADC-4474-9C8C-E9C9B8D977A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}.Debug|Any CPU.Build.0 = Debug|Any CPU {DFB453C5-6ADC-4474-9C8C-E9C9B8D977A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}.Release|Any CPU.ActiveCfg = Release|Any CPU {DFB453C5-6ADC-4474-9C8C-E9C9B8D977A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}.Release|Any CPU.Build.0 = Release|Any CPU {DFB453C5-6ADC-4474-9C8C-E9C9B8D977A5}.Release|Any CPU.Build.0 = Release|Any CPU
{5AD4303E-6166-417F-BE8B-59081C0F627B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5AD4303E-6166-417F-BE8B-59081C0F627B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5AD4303E-6166-417F-BE8B-59081C0F627B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5AD4303E-6166-417F-BE8B-59081C0F627B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
+17 -41
View File
@@ -1,18 +1,16 @@
@inherits LayoutComponentBase @inherits LayoutComponentBase
@inject ISearchService SearchService @inject ISearchService SearchService
@inject IWebsiteService WebService
@inject IDataCollectionService DataCollectionService @inject IDataCollectionService DataCollectionService
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@using Model.Website.Data
@using Services.Website @using Services.Website
@implements IDisposable @implements IDisposable
<MudThemeProvider @ref="@_mudThemeProvider" @bind-IsDarkMode="@_isDarkMode"/> <MudThemeProvider @ref="@_mudThemeProvider" @bind-IsDarkMode="@_isDarkMode"/>
<MudPopoverProvider/> <MudPopoverProvider/>
<MudDialogProvider/> <MudDialogProvider/>
<MudSnackbarProvider/> <MudSnackbarProvider/>
<MudLayout> <MudLayout>
<MudAppBar Elevation="1"> <MudAppBar Elevation="1">
<MudHidden Breakpoint="Breakpoint.SmAndDown" Invert="true"> <MudHidden Breakpoint="Breakpoint.SmAndDown" Invert="true">
@@ -27,35 +25,16 @@
<MudText Typo="Typo.h5"> IGP Fan Reference</MudText> <MudText Typo="Typo.h5"> IGP Fan Reference</MudText>
</MudButton> </MudButton>
<MudHidden Breakpoint="Breakpoint.MdAndUp" Invert="true"> <MudHidden Breakpoint="Breakpoint.MdAndUp" Invert="true">
<MudButton Href="/build-calculator" @foreach (var page in WebsiteData.GetPages())
Variant="Variant.Text" {
Color="Color.Default" <MudButton Href="@(page.Href)"
Class="mr-4"> Variant="Variant.Text"
<MudIcon Icon="fa-solid fa-helmet-battle" Class="mr-2"/> Color="Color.Default"
Build Calculator Class="mr-4">
</MudButton> <MudIcon Icon="@(page.Icon)" Class="mr-2"/>
<MudButton Href="/harass-calculator" @(page.Name)
Variant="Variant.Text" </MudButton>
Color="Color.Default" }
Class="mr-4">
<MudIcon Icon="fa-solid fa-bow-arrow" Class="mr-2"/>
Harass Calculator
</MudButton>
<MudButton Href="/database"
Variant="Variant.Text"
Color="Color.Default"
Class="mr-4">
<MudIcon Icon="fa-solid fa-clipboard-list" Class="mr-2"/>
Database
</MudButton>
<MudButton Href="/data-tables"
Variant="Variant.Text"
Color="Color.Default"
Class="mr-4">
<MudIcon Icon="fa-solid fa-table-list" Class="mr-2"/>
Data Tables
</MudButton>
</MudHidden> </MudHidden>
<MudSpacer/> <MudSpacer/>
<SearchButtonComponent Id="desktop-searchButton"/> <SearchButtonComponent Id="desktop-searchButton"/>
@@ -64,11 +43,10 @@
<MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2"> <MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2">
<MudPaper Width="250px" Class="d-inline-flex py-3" Elevation="0"> <MudPaper Width="250px" Class="d-inline-flex py-3" Elevation="0">
<MudNavMenu Class="mud-width-full flex-grow-1"> <MudNavMenu Class="mud-width-full flex-grow-1">
<MudNavLink Href="/build-calculator" Icon="fa-solid fa-helmet-battle">Build Calculator</MudNavLink> @foreach (var page in WebsiteData.GetPages())
<MudNavLink Href="/harass-calculator" Icon="fa-solid fa-bow-arrow">Harass Calculator</MudNavLink> {
<MudNavLink Href="/database" Icon="fa-solid fa-clipboard-list">Database</MudNavLink> <MudNavLink Href="@(page.Href)" Icon="@(page.Icon)">@(page.Name)</MudNavLink>
<MudSpacer/> }
<MudDivider Class="my-2"/>
</MudNavMenu> </MudNavMenu>
</MudPaper> </MudPaper>
</MudDrawer> </MudDrawer>
@@ -83,6 +61,8 @@
</MudMainContent> </MudMainContent>
</MudLayout> </MudLayout>
<FooterComponent></FooterComponent>
@code { @code {
@@ -100,7 +80,6 @@
protected override void OnInitialized() protected override void OnInitialized()
{ {
base.OnInitialized(); base.OnInitialized();
WebService.Subscribe(HasChanged);
CollectFirstPageLoaded(); CollectFirstPageLoaded();
} }
@@ -131,8 +110,6 @@
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
await WebService.Load();
await Focus(); await Focus();
} }
@@ -148,7 +125,6 @@
void IDisposable.Dispose() void IDisposable.Dispose()
{ {
WebService.Unsubscribe(HasChanged);
} }
void HasChanged() void HasChanged()
@@ -25,6 +25,12 @@
Build Calculator hasn't been thoroughly tested. Bugs and inaccurate results assumed. Build Calculator hasn't been thoroughly tested. Bugs and inaccurate results assumed.
<br/> <br/>
Currently not considering running out of alloy and ether to harvest. Currently not considering running out of alloy and ether to harvest.
<br/>
<br/>
Build Calculator was built based on a much older version of the game and was only quickly modified for the
June 2025 Playtest version, so the above disclaimer is only more true.
<br/>
Expect even more oddities and invalid data then the above warning implies.
</Message> </Message>
</AlertComponent> </AlertComponent>
@@ -23,10 +23,8 @@ else
var x = int.Parse(point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax)); var x = int.Parse(point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax));
if (takenPixels.ContainsKey(x)) continue; if (takenPixels.ContainsKey(x)) continue;
takenPixels.Add(x, true); takenPixels.Add(x, true);
<div style="position: absolute; <div style="position: absolute;
bottom:@point.GetValue(chart.HighestValuePoint, chart.ValueDisplayMax)px; bottom:@point.GetValue(chart.HighestValuePoint, chart.ValueDisplayMax)px;
left:@point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax)px; left:@point.GetInterval(chart.HighestIntervalPoint, chart.IntervalDisplayMax)px;
@@ -226,21 +224,21 @@ else
var economyAtSecond = economyOverTime[interval]; var economyAtSecond = economyOverTime[interval];
var alloyWorkerHarvesters = from harvester in economyAtSecond.HarvestPoints var alloyWorkerHarvesters = from harvester in economyAtSecond.HarvestPoints
where harvester.Harvest() != null where harvester.Harvester() != null
where harvester.Harvest().RequiresWorker where harvester.Harvester().RequiresWorker
where harvester.Harvest().Resource == ResourceType.Alloy where harvester.Harvester().Resource == ResourceType.Alloy
select harvester; select harvester;
var alloyAutomaticHarvesters = from harvester in economyAtSecond.HarvestPoints var alloyAutomaticHarvesters = from harvester in economyAtSecond.HarvestPoints
where harvester.Harvest() != null where harvester.Harvester() != null
where harvester.Harvest().RequiresWorker == false where harvester.Harvester().RequiresWorker == false
where harvester.Harvest().Resource == ResourceType.Alloy where harvester.Harvester().Resource == ResourceType.Alloy
select harvester; select harvester;
var etherAutomaticHarvesters = from harvester in economyAtSecond.HarvestPoints var etherAutomaticHarvesters = from harvester in economyAtSecond.HarvestPoints
where harvester.Harvest() != null where harvester.Harvester() != null
where harvester.Harvest().RequiresWorker == false where harvester.Harvester().RequiresWorker == false
where harvester.Harvest().Resource == ResourceType.Ether where harvester.Harvester().Resource == ResourceType.Ether
select harvester; select harvester;
float autoAlloy = 0; float autoAlloy = 0;
@@ -252,7 +250,7 @@ else
foreach (var alloyAutoHarvester in alloyAutomaticHarvesters) foreach (var alloyAutoHarvester in alloyAutomaticHarvesters)
{ {
autoAlloy += alloyAutoHarvester.Harvest().Slots * alloyAutoHarvester.Harvest().HarvestedPerInterval; autoAlloy += alloyAutoHarvester.Harvester().Slots * alloyAutoHarvester.Harvester().HarvestedPerInterval;
var production = alloyAutoHarvester.Production(); var production = alloyAutoHarvester.Production();
if (production != null) if (production != null)
{ {
@@ -262,7 +260,7 @@ else
foreach (var alloyWorkerHarvester in alloyWorkerHarvesters) foreach (var alloyWorkerHarvester in alloyWorkerHarvesters)
{ {
workerSlots += alloyWorkerHarvester.Harvest().Slots; workerSlots += alloyWorkerHarvester.Harvester().Slots;
var production = alloyWorkerHarvester.Production(); var production = alloyWorkerHarvester.Production();
if (production != null) if (production != null)
{ {
@@ -272,7 +270,7 @@ else
foreach (var etherWorkerHarvester in etherAutomaticHarvesters) foreach (var etherWorkerHarvester in etherAutomaticHarvesters)
{ {
autoEther += etherWorkerHarvester.Harvest().Slots * etherWorkerHarvester.Harvest().HarvestedPerInterval; autoEther += etherWorkerHarvester.Harvester().Slots * etherWorkerHarvester.Harvester().HarvestedPerInterval;
var production = etherWorkerHarvester.Production(); var production = etherWorkerHarvester.Production();
if (production != null) if (production != null)
{ {
@@ -32,6 +32,10 @@
} }
@if (FilterService.GetFaction() == DataType.FACTION_Aru) @if (FilterService.GetFaction() == DataType.FACTION_Aru)
{ {
<option value="@DataType.IMMORTAL_Atzlan"
selected="@(FilterService.GetImmortal().Equals(DataType.IMMORTAL_Atzlan))">
Atzlan
</option>
<option value="@DataType.IMMORTAL_Mala" <option value="@DataType.IMMORTAL_Mala"
selected="@(FilterService.GetImmortal().Equals(DataType.IMMORTAL_Mala))"> selected="@(FilterService.GetImmortal().Equals(DataType.IMMORTAL_Mala))">
Mala Mala
@@ -42,7 +42,6 @@
} }
} }
</div> </div>
</div> </div>
<style> <style>
@@ -22,13 +22,13 @@
var color = (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText) var color = (hotkey.KeyText.Equals("SPACE") && KeyService.IsHoldingSpace()) || KeyService.GetAllPressedKeys().Contains(hotkey.KeyText)
? "#0a0f12" ? hotkey.GetColor()
: hotkey.GetColor(); : hotkey.GetColor();
var x = hotkey.PositionX * Size; var x = hotkey.PositionX * Size;
var y = hotkey.PositionY * Size + (hotkey.PositionY == 0 ? 5 : -50); var y = hotkey.PositionY * Size + (hotkey.PositionY == 0 ? 5 : -50);
var width = Size; var width = Size * hotkey.Width;
var height = hotkey.PositionY == 0 ? 50 : Size; var height = hotkey.PositionY == 0 ? 50 : Size;
var borderRadius = hotkey.PositionY == 0 ? 12 : 0; var borderRadius = hotkey.PositionY == 0 ? 12 : 0;
@@ -52,7 +52,7 @@
var keyText = hotkey.KeyText.Equals("CAPSLOCK") ? "Caps" var keyText = hotkey.KeyText.Equals("CAPSLOCK") ? "Caps"
: hotkey.KeyText.Equals("CONTROL") ? "Ctrl" : hotkey.KeyText.Equals("CONTROL") ? "Ctrl"
: hotkey.KeyText.Equals("SHIFT") ? "Shift" : hotkey.KeyText.Equals("SHIFT") ? "Shift"
: hotkey.KeyText.Equals("TAB") ? "Tab" : hotkey.KeyText.Equals("X") ? "X"
: hotkey.KeyText.Equals("SPACE") ? "Space" : hotkey.KeyText; : hotkey.KeyText.Equals("SPACE") ? "Space" : hotkey.KeyText;
@@ -292,9 +292,9 @@
controlGroup = "Z"; controlGroup = "Z";
} }
if (KeyService.GetAllPressedKeys().Contains("TAB")) if (KeyService.GetAllPressedKeys().Contains("X"))
{ {
controlGroup = "TAB"; controlGroup = "X";
} }
if (KeyService.GetAllPressedKeys().Contains("C")) if (KeyService.GetAllPressedKeys().Contains("C"))
@@ -343,34 +343,32 @@
{ {
var hotkey = KeyService.GetHotkey(); var hotkey = KeyService.GetHotkey();
if (hotkey == "") if (hotkey is "`")
{ HandleCancelEntity();
return;
}
if (hotkey == "`") if (EntityFromKey(hotkey, out var entity))
{ return;
BuildOrderService.RemoveLast();
if (BuildOrderService.Add(entity!, EconomyService))
EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval()); EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval());
return; }
}
private void HandleCancelEntity()
{
BuildOrderService.RemoveLast();
EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval());
}
private bool EntityFromKey(string? hotkey, out EntityModel? entity)
{
var hotkeyGroup = KeyService.GetHotkeyGroup(); var hotkeyGroup = KeyService.GetHotkeyGroup();
var isHoldSpace = KeyService.IsHoldingSpace(); var isHoldSpace = KeyService.IsHoldingSpace();
var faction = FilterService.GetFaction(); var faction = FilterService.GetFaction();
var immortal = FilterService.GetImmortal(); var immortal = FilterService.GetImmortal();
var entity = EntityModel.GetFrom(hotkey!, hotkeyGroup, isHoldSpace, faction, immortal); entity = EntityModel.GetFrom(hotkey!, hotkeyGroup, isHoldSpace, faction, immortal);
if (entity == null) return entity == null;
{
return;
}
if (BuildOrderService.Add(entity, EconomyService))
{
EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval());
}
} }
private void ButtonClicked(MouseEventArgs mouseEventArgs, HotkeyModel hotkey) private void ButtonClicked(MouseEventArgs mouseEventArgs, HotkeyModel hotkey)
@@ -6,6 +6,14 @@
<LayoutLargeContentComponent> <LayoutLargeContentComponent>
<WebsiteTitleComponent>Data Tables</WebsiteTitleComponent> <WebsiteTitleComponent>Data Tables</WebsiteTitleComponent>
<AlertComponent Type="@SeverityType.Warning">
<Title>Errors Present</Title>
<Message>
Incomplete feature for easily comparing unit stats.
</Message>
</AlertComponent>
<MudTabs Elevation="2"> <MudTabs Elevation="2">
<MudTabPanel Text="Attacks"> <MudTabPanel Text="Attacks">
<WeaponTable/> <WeaponTable/>
@@ -13,7 +13,7 @@
@code { @code {
readonly IEnumerable<EntityMovementModel> _data = DATA.Get() readonly IEnumerable<EntityMovementModel> _data = EntityData.Get()
.SelectMany(e => e.Value.EntityParts) .SelectMany(e => e.Value.EntityParts)
.OfType<EntityMovementModel>() .OfType<EntityMovementModel>()
.ToList(); .ToList();
@@ -14,7 +14,7 @@
@code { @code {
readonly IEnumerable<EntityProductionModel> data = DATA.Get() readonly IEnumerable<EntityProductionModel> data = EntityData.Get()
.SelectMany(e => e.Value.EntityParts) .SelectMany(e => e.Value.EntityParts)
.OfType<EntityProductionModel>() .OfType<EntityProductionModel>()
.ToList(); .ToList();
@@ -17,7 +17,7 @@
@code { @code {
readonly IEnumerable<EntityVitalityModel> _data = DATA.Get() readonly IEnumerable<EntityVitalityModel> _data = EntityData.Get()
.SelectMany(e => e.Value.EntityParts) .SelectMany(e => e.Value.EntityParts)
.OfType<EntityVitalityModel>() .OfType<EntityVitalityModel>()
.ToList(); .ToList();
+1 -1
View File
@@ -23,7 +23,7 @@
@code { @code {
readonly IEnumerable<EntityWeaponModel> _data = DATA.Get() readonly IEnumerable<EntityWeaponModel> _data = EntityData.Get()
.SelectMany(e => e.Value.EntityParts) .SelectMany(e => e.Value.EntityParts)
.OfType<EntityWeaponModel>() .OfType<EntityWeaponModel>()
.ToList(); .ToList();
-9
View File
@@ -85,15 +85,6 @@
Yup. The content is being transferred by hand, so some mistakes are expected. Yup. The content is being transferred by hand, so some mistakes are expected.
</InfoAnswerComponent> </InfoAnswerComponent>
</InfoBodyComponent> </InfoBodyComponent>
<InfoBodyComponent>
<InfoQuestionComponent>
Can I see this data as raw JSON?
</InfoQuestionComponent>
<InfoAnswerComponent>
<a href="/raw-database">raw json link</a>
</InfoAnswerComponent>
</InfoBodyComponent>
</PaperComponent> </PaperComponent>
</LayoutLargeContentComponent> </LayoutLargeContentComponent>
+2 -1
View File
@@ -10,6 +10,7 @@
<LayoutLargeContentComponent> <LayoutLargeContentComponent>
<PaperComponent> <PaperComponent>
<FormDisplayComponent Label="Patch"> <FormDisplayComponent Label="Patch">
<Display> <Display>
@@ -81,7 +82,7 @@
private void FocusEntity() private void FocusEntity()
{ {
foreach (var e in DATA.Get().Values) foreach (var e in EntityData.Get().Values)
{ {
if (e.Info().Name.ToLower().Equals(Text!.ToLower())) if (e.Info().Name.ToLower().Equals(Text!.ToLower()))
{ {
@@ -1,4 +1,6 @@
@if (StyleType.Equals("Plain")) @inject NavigationManager NavigationManager
@if (StyleType.Equals("Plain"))
{ {
<div> <div>
<b id="entityName">@Entity?.Info().Name</b> <b id="entityName">@Entity?.Info().Name</b>
@@ -11,9 +13,9 @@
else else
{ {
<div class="entityHeader"> <div class="entityHeader">
<div id="entityName" class="entityHeaderText"> <button id="entityName" class="entityHeaderText searchLink" @onclick="() => OnOpenStandalone()">
@Entity?.Info().Name @Entity?.Info().Name
</div> </button>
<div style="font-size:1.4rem;"> <div style="font-size:1.4rem;">
<b>@Entity?.EntityType.Replace("_", " ")</b> <b>@Entity?.EntityType.Replace("_", " ")</b>
@if (Entity?.Info().Descriptive != DescriptiveType.None) @if (Entity?.Info().Descriptive != DescriptiveType.None)
@@ -23,6 +25,17 @@ else
</span> </span>
} }
</div> </div>
<div>
@if (Entity.Info().FlavorText != "")
{
<div>
<i> @((MarkupString)Entity.Info().FlavorText)</i>
</div>
}
</div>
</div> </div>
<style> <style>
@@ -41,6 +54,10 @@ else
font-weight: 900; font-weight: 900;
} }
.searchLink:hover {
text-decoration: underline;
}
@@media only screen and (max-width: 1025px) { @@media only screen and (max-width: 1025px) {
.entityHeader { .entityHeader {
flex-direction: column; flex-direction: column;
@@ -58,4 +75,23 @@ else
[CascadingParameter] public string StyleType { get; set; } = "Detailed"; [CascadingParameter] public string StyleType { get; set; } = "Detailed";
public void NavigateTo(string url)
{
if (url.Contains("#"))
{
NavigationManager.NavigateTo(url,
NavigationManager.Uri.Split("#").First().Contains(url.Split("#").First()));
}
else
{
NavigationManager.NavigateTo(url);
}
}
private void OnOpenStandalone()
{
var url = NavigationManager.BaseUri;
var completeUrl = $"{url}database/{Entity!.Info().Name.ToLower().Replace(" ", "%20")}";
NavigateTo(completeUrl);
}
} }
@@ -14,13 +14,19 @@
</div> </div>
} }
@if (Entity.Info().FlavorText != "")
{
<div>
<i>@((MarkupString)Entity.Info().FlavorText)</i>
</div>
}
<div class="infoDisplayContainer"> <div class="infoDisplayContainer">
<div> <div>
@if (Entity.Faction() != null) @if (Entity.Faction() != null)
{ {
<div> <div>
<b>Faction:</b> @DATA.Get()[Entity.Faction().Faction].Info().Name <b>Faction:</b> @EntityData.Get()[Entity.Faction().Faction].Info().Name
</div> </div>
} }
@if (Entity.Tier() != null) @if (Entity.Tier() != null)
@@ -64,13 +70,12 @@ else
</div> </div>
} }
<div class="infoDisplayContainer"> <div class="infoDisplayContainer">
<div> <div>
@if (Entity.Faction() != null) @if (Entity.Faction() != null)
{ {
<div> <div>
<b>Faction:</b> @DATA.Get()[Entity.Faction().Faction].Info().Name <b>Faction:</b> @EntityData.Get()[Entity.Faction().Faction].Info().Name
</div> </div>
} }
@if (Entity.Tier() != null) @if (Entity.Tier() != null)
@@ -96,8 +101,11 @@ else
</div> </div>
} }
</div> </div>
</EntityDisplayComponent> </EntityDisplayComponent>
<style> <style>
.infoDisplayContainer { .infoDisplayContainer {
display: flex; display: flex;
@@ -51,7 +51,7 @@
{ {
@foreach (var requirement in requirements) @foreach (var requirement in requirements)
{ {
var requirementModel = DATA.Get()[requirement.Id]; var requirementModel = EntityData.Get()[requirement.Id];
<div> <div>
<span> <span>
<b>- @requirement.Requirement.Replace("_", " "):</b> @requirementModel.Info().Name <b>- @requirement.Requirement.Replace("_", " "):</b> @requirementModel.Info().Name
@@ -96,7 +96,7 @@
{ {
@foreach (var requirement in requirements) @foreach (var requirement in requirements)
{ {
var requirementModel = DATA.Get()[requirement.Id]; var requirementModel = EntityData.Get()[requirement.Id];
<div> <div>
<span> <span>
<b>@requirement.Requirement.Replace("_", " "):</b> @requirementModel.Info().Name <b>@requirement.Requirement.Replace("_", " "):</b> @requirementModel.Info().Name
@@ -7,7 +7,7 @@
<div> <div>
@foreach (var requirement in Requirements) @foreach (var requirement in Requirements)
{ {
var requirementModel = DATA.Get()[requirement.Id]; var requirementModel = EntityData.Get()[requirement.Id];
<div> <div>
<span> <span>
@@ -1,9 +1,9 @@
@if (Vanguard != null) @if (Vanguard != null)
{ {
var immortalId = Vanguard.ImmortalId; var immortalId = Vanguard.ImmortalId;
var immortal = DATA.Get()[immortalId]; var immortal = EntityData.Get()[immortalId];
var replaced = DATA.Get()[Vanguard.ReplaceId]; var replaced = EntityData.Get()[Vanguard.ReplaceId];
@if (StyleType.Equals("Plain")) @if (StyleType.Equals("Plain"))
{ {
@@ -8,9 +8,8 @@
var requirements = entity.Requirements(); var requirements = entity.Requirements();
var vanguardAdded = entity.VanguardAdded(); var vanguardAdded = entity.VanguardAdded();
var replaced = DATA.Get()[vanguardAdded.ReplaceId]; var replaced = EntityData.Get()[vanguardAdded.ReplaceId];
var immortal = DATA.Get()[vanguardAdded.ImmortalId]; var immortal = EntityData.Get()[vanguardAdded.ImmortalId];
var productionBuilding = (from building in requirements var productionBuilding = (from building in requirements
where building.Requirement == RequirementType.Production_Building where building.Requirement == RequirementType.Production_Building
@@ -14,7 +14,7 @@
class="choiceButton @styleClass"> class="choiceButton @styleClass">
@(choice == DataType.Any @(choice == DataType.Any
? DataType.Any ? DataType.Any
: DATA.Get()[choice].Info().Name) : EntityData.Get()[choice].Info().Name)
</button> </button>
} }
</div> </div>
@@ -24,7 +24,7 @@
<div class="filterContainer"> <div class="filterContainer">
@foreach (var choice in EntityFilterService.GetImmortalChoices()) @foreach (var choice in EntityFilterService.GetImmortalChoices())
{ {
var name = DATA.Get()[choice].Info().Name; var name = EntityData.Get()[choice].Info().Name;
var styleClass = ""; var styleClass = "";
if (choice.Equals(EntityFilterService.GetImmortalType())) if (choice.Equals(EntityFilterService.GetImmortalType()))
@@ -71,6 +71,7 @@
<FormLabelComponent>Immortal</FormLabelComponent> <FormLabelComponent>Immortal</FormLabelComponent>
<ChildContent> <ChildContent>
<option value="@DataType.Any" selected>Any</option> <option value="@DataType.Any" selected>Any</option>
<option value="@DataType.IMMORTAL_Atzlan">Atzlan</option>
<option value="@DataType.IMMORTAL_Mala">Mala</option> <option value="@DataType.IMMORTAL_Mala">Mala</option>
<option value="@DataType.IMMORTAL_Xol">Xol</option> <option value="@DataType.IMMORTAL_Xol">Xol</option>
<option value="@DataType.IMMORTAL_Orzum">Orzum</option> <option value="@DataType.IMMORTAL_Orzum">Orzum</option>

Some files were not shown because too many files have changed in this diff Show More