using Microsoft.JSInterop; namespace ChessCubing.App.Services; public sealed class BrowserBridge(IJSRuntime jsRuntime) { public ValueTask StartViewportAsync() => jsRuntime.InvokeVoidAsync("chesscubingViewport.start"); public ValueTask SetBodyStateAsync(string? page, string? bodyClass) => jsRuntime.InvokeVoidAsync("chesscubingPage.setBodyState", page, bodyClass ?? string.Empty); public ValueTask ReadMatchJsonAsync(string storageKey, string windowNameKey) => jsRuntime.InvokeAsync("chesscubingStorage.getMatchState", storageKey, windowNameKey); public ValueTask WriteMatchJsonAsync(string storageKey, string windowNameKey, string json) => jsRuntime.InvokeVoidAsync("chesscubingStorage.setMatchState", storageKey, windowNameKey, json); public ValueTask ClearMatchAsync(string storageKey, string windowNameKey) => jsRuntime.InvokeVoidAsync("chesscubingStorage.clearMatchState", storageKey, windowNameKey); public ValueTask PlayCubePhaseAlertAsync() => jsRuntime.InvokeAsync("chesscubingAudio.playCubePhaseAlert"); public ValueTask PrimeAudioAsync() => jsRuntime.InvokeVoidAsync("chesscubingAudio.prime"); public ValueTask ForceRefreshAsync(string path) => jsRuntime.InvokeVoidAsync("chesscubingBrowser.forceRefresh", path); }