Neue navbar

This commit is contained in:
MarcWieland
2026-06-09 00:06:18 +02:00
parent 2029524379
commit 1def618e34
4 changed files with 442 additions and 198 deletions
@@ -2,26 +2,27 @@
@inject AuthenticationStateProvider AuthStateProvider
@inject NavigationManager Nav
@inject IUserNotificationService UserNotificationService
@inject IJSRuntime JSRuntime
@implements IDisposable
@using System.Security.Claims
<MudThemeProvider Theme="_theme" />
<MudThemeProvider Theme="_theme" @bind-IsDarkMode="_isDarkMode" />
<MudPopoverProvider />
<MudDialogProvider />
<MudSnackbarProvider />
<MudLayout>
<MudAppBar Elevation="2" Style="background: #0F172A;">
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="ToggleDrawer" />
<MudStack Row="true" AlignItems="AlignItems.Center" Spacing="2" Class="ml-2">
<MudIcon Icon="@Icons.Material.Filled.AccessTime" Style="color:white; font-size:1.6rem" />
<MudText Typo="Typo.h6" Style="color:white; font-weight:700; letter-spacing:0.5px">Timetracker</MudText>
</MudStack>
<MudAppBar Elevation="0" Style="background: #0F172A; border-bottom: 1px solid rgba(255, 255, 255, 0.08);">
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="ToggleDrawer" Class="d-flex d-md-none mr-2" />
<MudSpacer />
<MudIconButton Icon="@(_isDarkMode ? Icons.Material.Filled.LightMode : Icons.Material.Filled.DarkMode)"
Color="Color.Inherit"
OnClick="ToggleDarkMode"
Class="mr-2" />
</MudAppBar>
<MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Always" Elevation="2">
<NavMenu />
<MudDrawer @bind-Open="_drawerOpen" ClipMode="DrawerClipMode.Never" Elevation="0" Variant="DrawerVariant.Mini" OpenMiniOnHover="false" Class="modern-drawer">
<NavMenu OnToggleDrawer="ToggleDrawer" />
</MudDrawer>
<MudMainContent>
@@ -39,12 +40,39 @@
@code {
private bool _drawerOpen = true;
private bool _isDarkMode;
protected override void OnInitialized()
{
UserNotificationService.OnUserDeleted += HandleUserDeleted;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
try
{
var saved = await JSRuntime.InvokeAsync<string>("localStorage.getItem", "darkMode");
if (!string.IsNullOrEmpty(saved))
{
_isDarkMode = bool.Parse(saved);
StateHasChanged();
}
}
catch
{
// Ignored during prerendering/SSR
}
}
}
private async Task ToggleDarkMode()
{
_isDarkMode = !_isDarkMode;
await JSRuntime.InvokeVoidAsync("localStorage.setItem", "darkMode", _isDarkMode.ToString().ToLower());
}
private async Task HandleUserDeleted(int deletedUserId)
{
var state = await AuthStateProvider.GetAuthenticationStateAsync();
@@ -71,10 +99,31 @@
SecondaryDarken = "#0284C7",
AppbarBackground = "#0F172A",
Background = "#F8FAFC",
DrawerBackground = "#FFFFFF",
DrawerBackground = "#0F172A",
DrawerText = "#94A3B8",
DrawerIcon = "#94A3B8",
Surface = "#FFFFFF",
TextPrimary = "#0F172A",
TextSecondary = "#475569",
},
PaletteDark = new PaletteDark
{
Primary = "#0EA5E9",
PrimaryDarken = "#0284C7",
PrimaryLighten = "#38BDF8",
Secondary = "#0EA5E9",
SecondaryDarken = "#0284C7",
AppbarBackground = "#0F172A",
AppbarText = "#F8FAFC",
Background = "#0B0F19",
DrawerBackground = "#0F172A",
DrawerText = "#94A3B8",
DrawerIcon = "#94A3B8",
Surface = "#1E293B",
TextPrimary = "#F8FAFC",
TextSecondary = "#94A3B8",
ActionDefault = "#94A3B8",
Divider = "rgba(255, 255, 255, 0.08)",
}
};