using Microsoft.JSInterop; namespace ColorControl.UI.Services; public class RectDimension { public double X { get; set; } public double Y { get; set; } public double Width { get; set; } public double Height { get; set; } } public class JSHelper(IJSRuntime jsRuntime) { private IJSObjectReference? jsModule; public async Task IsFormValid(string id) { return await InvokeAsync("FormValid", id); } public async Task OpenModal(string id) { await InvokeVoidAsync("OpenModal", id); } public async Task CloseModal(string id) { await InvokeVoidAsync("CloseModal", id); } public async Task IsModalShown() { return await InvokeAsync("IsModalShown"); } public async Task ShowToast(string id) { await InvokeVoidAsync("ShowToast", id); } public async Task NavigateTo(string uri, int timeout = 0) { await InvokeVoidAsync("NavigateTo", uri, timeout); } public async Task GetElementDimensions(string id) { jsModule = await LoadModule(); return await jsModule.InvokeAsync("GetElementDimensions", id); } public async Task GetElementClassName(string id) { jsModule = await LoadModule(); return await jsModule.InvokeAsync("GetElementClassName", id); } private async ValueTask InvokeAsync(string identifier, params object?[]? names) where T : struct { jsModule = await LoadModule(); return await jsModule.InvokeAsync(identifier, names); } private async ValueTask InvokeVoidAsync(string identifier, params object?[]? names) { jsModule = await LoadModule(); await jsModule.InvokeVoidAsync(identifier, names); } private async Task LoadModule() { return jsModule ??= await jsRuntime.InvokeAsync("import", "./helper.js"); } }