@inject IJSRuntime JSRuntime @code { [Parameter] public EventCallback OnToggleDrawer { get; set; } private bool _showVersionBadge; protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { try { var lastSeen = await JSRuntime.InvokeAsync("localStorage.getItem", "lastSeenVersion"); var latest = timetracker.Client.Components.Pages.Changelog.LatestVersion; var isHighlighted = timetracker.Client.Components.Pages.Changelog.IsLatestHighlighted; _showVersionBadge = isHighlighted && lastSeen != latest; StateHasChanged(); } catch { // Ignored in SSR } } } private void ClearBadge() { _showVersionBadge = false; } private string GetInitials(string? name) { if (string.IsNullOrWhiteSpace(name)) return "U"; var parts = name.Split(' ', StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 1) return parts[0][..Math.Min(2, parts[0].Length)].ToUpper(); return $"{parts[0][0]}{parts[1][0]}".ToUpper(); } }