@using EnvelopeGenerator.Server.Client.Services @rendermode InteractiveWebAssembly @implements IDisposable @inject ThemeService ThemeService
@* Moon — left end (blazing-dark) *@ @* Track wrapper: range input + left/mid/right ticks *@
@* Left tick *@
@* Mid tick (marks the middle position) *@
@* Right tick *@
@* Sun — right end (purple) *@
@code { private Action? _themeChangeHandler; /// /// Maps the active theme to a 0-based slider step. /// 0 = blazing-dark (🌙 left) /// 1 = blazing-berry (middle) /// 2 = purple (☀️ right) /// private int SliderValue => ThemeService.ThemeName switch { "blazing-dark" => 0, "purple" => 2, _ => 1 }; protected override void OnInitialized() { _themeChangeHandler = () => InvokeAsync(StateHasChanged); ThemeService.OnChange += _themeChangeHandler; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) await ThemeService.InitializeAsync(); } private async Task OnSliderChanged(ChangeEventArgs e) { if (!int.TryParse(e.Value?.ToString(), out var step)) return; var themeName = step switch { 0 => "blazing-dark", 2 => "purple", _ => "blazing-berry" }; await ThemeService.SetThemeAsync(themeName); } public void Dispose() => ThemeService.OnChange -= _themeChangeHandler; }