diff --git a/Chrono/Web/Layout/MainLayout.razor b/Chrono/Web/Layout/MainLayout.razor index c3bc89a..1bdc6e9 100644 --- a/Chrono/Web/Layout/MainLayout.razor +++ b/Chrono/Web/Layout/MainLayout.razor @@ -6,7 +6,9 @@
- @Body + + @Body +
\ No newline at end of file diff --git a/Chrono/Web/Layout/NavMenu.razor b/Chrono/Web/Layout/NavMenu.razor index f1ce1d6..5ae94bc 100644 --- a/Chrono/Web/Layout/NavMenu.razor +++ b/Chrono/Web/Layout/NavMenu.razor @@ -11,12 +11,17 @@ @@ -32,4 +37,4 @@ collapseNavMenu = !collapseNavMenu; } -} \ No newline at end of file +} diff --git a/Chrono/Web/Layout/NavMenu.razor.css b/Chrono/Web/Layout/NavMenu.razor.css index 617b89c..7d733ad 100644 --- a/Chrono/Web/Layout/NavMenu.razor.css +++ b/Chrono/Web/Layout/NavMenu.razor.css @@ -11,26 +11,11 @@ font-size: 1.1rem; } -.bi { - display: inline-block; - position: relative; - width: 1.25rem; - height: 1.25rem; +.nav-icon { 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"); + font-size: 1.05rem; + width: 1.25rem; + text-align: center; } .nav-item { @@ -71,12 +56,10 @@ } .collapse { - /* Never collapse the sidebar for wide screens */ display: block; } .nav-scrollable { - /* Allow sidebar to scroll for tall menus */ height: calc(100vh - 3.5rem); overflow-y: auto; } diff --git a/Chrono/Web/Pages/Agents.razor b/Chrono/Web/Pages/Agents.razor new file mode 100644 index 0000000..6e88b9e --- /dev/null +++ b/Chrono/Web/Pages/Agents.razor @@ -0,0 +1,58 @@ +@page "/agents" +@using Chrono.Model + +Agents + +
+
+

Agents

+

@agents.Count agents in the database

+
+ + + + + + + + + + + + + + + + + +
+ +@code { + private List agents = []; + + protected override void OnInitialized() + { + agents = CardDatabase.Cards + .Where(c => c.Category == "Agent") + .OrderBy(c => c.Cost) + .ThenBy(c => c.Name) + .ToList(); + } +} diff --git a/Chrono/Web/Pages/Agents.razor.css b/Chrono/Web/Pages/Agents.razor.css new file mode 100644 index 0000000..5342394 --- /dev/null +++ b/Chrono/Web/Pages/Agents.razor.css @@ -0,0 +1,113 @@ +.agents-page { + --kendo-color-app-surface: oklch(5.3% 0.013 270deg); + --kendo-color-subtle: oklch(64% 0.018 270deg); + --kendo-color-surface: oklch(10% 0.015 270deg); + --kendo-color-border: oklch(25% 0.025 270deg / 0.7); + --kendo-color-border-alt: oklch(30% 0.03 270deg / 0.5); + --kendo-color-base: oklch(16% 0.02 270deg); + --kendo-color-primary: oklch(55% 0.23 275deg); + --kendo-color-secondary: oklch(35% 0 0deg); + --kendo-color-tertiary: oklch(55% 0.15 240deg); + --kendo-color-info: oklch(65% 0.15 250deg); + --kendo-color-success: oklch(60% 0.15 140deg); + --kendo-color-warning: oklch(75% 0.14 85deg); + --kendo-color-error: oklch(55% 0.20 30deg); + --kendo-color-inverse: oklch(85% 0.01 270deg); + --kendo-color-series: oklch(55% 0.23 275deg); + max-width: 1400px; + margin: 0 auto; + padding: 1.5rem; +} + +.agents-page ::deep .k-grid, +.agents-page ::deep .k-grid-container, +.agents-page ::deep .k-grid-content, +.agents-page ::deep .k-grid-header-wrap { + background: transparent; + color: inherit; +} + +.agents-page ::deep .k-grid-header, +.agents-page ::deep .k-grid-footer, +.agents-page ::deep .k-pager-wrap { + background: var(--bg-elevated); +} + +.agents-page ::deep .k-grid-header .k-header, +.agents-page ::deep .k-grid-header .k-column-title, +.agents-page ::deep .k-grid-header .k-link, +.agents-page ::deep .k-grid-header .k-grid-filter { + color: #e8e8f0; +} + +.agents-page ::deep .k-grid-header .k-link:hover, +.agents-page ::deep .k-grid-header .k-grid-filter:hover { + color: #ffffff; +} + +.agents-page ::deep .k-grid td, +.agents-page ::deep .k-grid-header th.k-header { + border-color: oklch(25% 0.025 270deg / 0.7); +} + +.agents-page ::deep .k-grid tr.k-alt { + background: oklch(12% 0.015 270deg); +} + +.agents-page ::deep .k-grid tr:hover { + background: oklch(20% 0.025 270deg); +} + +.agents-page ::deep .k-grid-filter, +.agents-page ::deep .k-grid-filter:hover { + color: var(--text-secondary); +} + +.agents-page ::deep .k-input, +.agents-page ::deep .k-picker { + color: var(--text-primary); + background: var(--bg-surface); + border-color: var(--border); +} + +.agents-page ::deep .k-button-solid-base { + color: var(--text-secondary); + background: var(--bg-elevated); + border-color: var(--border); +} + +.agents-page ::deep .k-button-solid-base:hover { + background: var(--bg-hover); + color: var(--text-primary); +} + +.agents-page ::deep .k-pager-nav { + color: var(--text-secondary); +} + +.agents-header { + margin-bottom: 1.5rem; +} + +.agents-header h1 { + margin-bottom: 0.25rem; +} + +.agents-header p { + font-size: 0.9rem; + margin: 0; +} + +.agent-name-cell { + display: flex; + align-items: center; + gap: 0.6rem; +} + +.agent-thumb { + width: 36px; + height: 50px; + object-fit: cover; + border-radius: 4px; + flex-shrink: 0; +} diff --git a/Chrono/Web/Program.cs b/Chrono/Web/Program.cs index 66a967b..3506ebc 100644 --- a/Chrono/Web/Program.cs +++ b/Chrono/Web/Program.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; +using Telerik.Blazor; using Web; var builder = WebAssemblyHostBuilder.CreateDefault(args); @@ -7,5 +8,6 @@ builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after"); builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); +builder.Services.AddTelerikBlazor(); await builder.Build().RunAsync(); \ No newline at end of file diff --git a/Chrono/Web/Web.csproj b/Chrono/Web/Web.csproj index 4316e38..4d53c6d 100644 --- a/Chrono/Web/Web.csproj +++ b/Chrono/Web/Web.csproj @@ -10,6 +10,7 @@ + diff --git a/Chrono/Web/_Imports.razor b/Chrono/Web/_Imports.razor index df57159..ac8f359 100644 --- a/Chrono/Web/_Imports.razor +++ b/Chrono/Web/_Imports.razor @@ -8,4 +8,6 @@ @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop @using Web -@using Web.Layout \ No newline at end of file +@using Web.Layout +@using Telerik.Blazor +@using Telerik.Blazor.Components \ No newline at end of file diff --git a/Chrono/Web/wwwroot/index.html b/Chrono/Web/wwwroot/index.html index b92d16b..f578fc3 100644 --- a/Chrono/Web/wwwroot/index.html +++ b/Chrono/Web/wwwroot/index.html @@ -13,6 +13,7 @@ +