RSCG – Blazorators
RSCG – Blazorators
name | Blazorators |
nuget | https://www.nuget.org/packages/Blazor.SourceGenerators/ |
link | https://github.com/IEvangelist/blazorators/ |
author | David Pine |
Generate javascript interop code for Blazor WASM projects.
This is how you can use Blazorators .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.1" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.1" PrivateAssets="all" /> </ItemGroup> <ItemGroup> <PackageReference Include="Blazor.Serialization" Version="8.0.0" /> <PackageReference Include="Blazor.SourceGenerators" Version="8.0.0" OutputItemType="Analyzer" SetTargetFramework="TargetFramework=netstandard2.0" ReferenceOutputAssembly="false"> </PackageReference> </ItemGroup> <PropertyGroup> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath> </PropertyGroup> </Project>
The code that you will use is
using BlazorApp2; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add<App>("#app"); builder.RootComponents.Add<HeadOutlet>("head::after"); builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); builder.Services.AddLocalStorageServices(); await builder.Build().RunAsync();
namespace BlazorApp2; [JSAutoGenericInterop( TypeName = "Storage", Implementation = "window.localStorage", Url = "https://developer.mozilla.org/docs/Web/API/Window/localStorage", GenericMethodDescriptors = new[] { "getItem", "setItem:value" })] public partial interface ILocalStorageService { }
@page "/" @inject ILocalStorageService MyLocalStorage; <PageTitle>Home</PageTitle> <h1>Hello, world!</h1> Please refresh the page to see the value persisted in local storage. @{ var name = MyLocalStorage.GetItem<string>("name"); if (name != null) { <p>Hi, @name</p> } else { <p>Hi, stranger</p> } MyLocalStorage.SetItem("name", "Andrei Ignat"); }
The code that is generated is
/// <summary> /// The Blazor hosting model source, either WebAssembly or Server. /// </summary> public enum BlazorHostingModel { /// <summary> /// This is the default. Use this to source generate targeting the synchronous <c>IJSInProcessRuntime</c> type. /// </summary> WebAssembly, /// <summary> /// Use this to source generate targeting the synchronous <c>IJSRuntime</c> type. /// </summary> Server };
// Copyright (c) David Pine. All rights reserved. // Licensed under the MIT License: // https://bit.ly/blazorators-license // Auto-generated by blazorators. using Blazor.Serialization.Extensions; using System.Text.Json; #nullable enable namespace BlazorApp2; /// <summary> /// Source generated interface definition of the <c>Storage</c> type. /// </summary> public partial interface ILocalStorageService { /// <summary> /// Source generated implementation of <c>window.localStorage.clear</c>. /// <a href="https://developer.mozilla.org/docs/Web/API/Storage/clear"></a> /// </summary> void Clear(); /// <summary> /// Source generated implementation of <c>window.localStorage.getItem</c>. /// <a href="https://developer.mozilla.org/docs/Web/API/Storage/getItem"></a> /// </summary> TValue? GetItem<TValue>(string key, JsonSerializerOptions? options = null); /// <summary> /// Source generated implementation of <c>window.localStorage.key</c>. /// <a href="https://developer.mozilla.org/docs/Web/API/Storage/key"></a> /// </summary> string? Key(double index); /// <summary> /// Source generated implementation of <c>window.localStorage.removeItem</c>. /// <a href="https://developer.mozilla.org/docs/Web/API/Storage/removeItem"></a> /// </summary> void RemoveItem(string key); /// <summary> /// Source generated implementation of <c>window.localStorage.setItem</c>. /// <a href="https://developer.mozilla.org/docs/Web/API/Storage/setItem"></a> /// </summary> void SetItem<TValue>(string key, TValue value, JsonSerializerOptions? options = null); /// <summary> /// Source generated implementation of <c>window.localStorage.length</c>. /// <a href="https://developer.mozilla.org/docs/Web/API/Storage/length"></a> /// </summary> double Length { get; } }
#nullable enable /// <summary> /// Use this attribute on <code>public static partial</code> extension method classes. /// For example: /// <example> /// <code> /// [JSAutoGenericInterop( /// TypeName = "Storage", /// Implementation = "window.localStorage", /// HostingModel = BlazorHostingModel.WebAssembly, /// Url = "https://developer.mozilla.org/docs/Web/API/Window/localStorage", /// GenericMethodDescriptors = new[] /// { /// "getItem", /// "setItem:value" /// })] /// public static partial LocalStorageExtensions /// { /// } /// </code> /// </example> /// This will source generate all the extension methods for the IJSInProcessRuntime type for the localStorage APIs. /// </summary> public class JSAutoGenericInteropAttribute : JSAutoInteropAttribute { /// <summary> /// The descriptors that define which APIs are to use default JSON serialization and support generics. /// For example: /// <code> /// new[] /// { /// "getItem", // Serializes the return type of getItem as TValue /// "setItem:value" // Serializes the value parameter of the setItem TValue /// } /// </code> /// </summary> public string[] GenericMethodDescriptors { get; set; } = null!; /// <summary> /// The overrides that define which APIs to override (only applicable for pure JavaScript). /// For example: /// <code> /// new[] /// { /// "getVoices", // A pure JS method with by this name will have a custom impl. /// } /// </code> /// </summary> public string[] PureJavaScriptOverrides { get; set; } = null!; }
#nullable enable /// <summary> /// Use this attribute on <code>public static partial</code> extension method classes. /// For example: /// <code> /// [JSAutoInterop( /// TypeName = "Storage", /// Implementation = "window.localStorage", /// HostingModel = BlazorHostingModel.WebAssembly, /// Url = "https://developer.mozilla.org/docs/Web/API/Window/localStorage")] /// public static partial LocalStorageExtensions /// { /// } /// </code> /// This will source generate all the extension methods for the IJSInProcessRuntime type for the localStorage APIs. /// </summary> [AttributeUsage( AttributeTargets.Interface, Inherited = false, AllowMultiple = false)] public class JSAutoInteropAttribute : Attribute { /// <summary> /// The type name that corresponds to the lib.dom.d.ts interface. For example, <c>"Geolocation"</c>. /// For more information, search 'interface {Name}' /// <a href='https://raw.githubusercontent.com/microsoft/TypeScript/main/lib/lib.dom.d.ts'>here for types</a>. /// </summary> public string TypeName { get; set; } = null!; /// <summary> /// The path from the <c>window</c> object to the corresponding <see cref="TypeName"/> implementation. /// For example, if the <see cref="TypeName"/> was <c>"Geolocation"</c>, this would be /// <c>"window.navigator.geolocation"</c> (or <c>"navigator.geolocation"</c>). /// </summary> public string Implementation { get; set; } = null!; /// <summary> /// Whether to generate only pure JavaScript functions that do not require callbacks. /// For example, <c>"Geolocation.clearWatch"</c> is consider pure, but <c>"Geolocation.watchPosition"</c> is not. /// Defaults to <c>true</c>. /// </summary> public bool OnlyGeneratePureJS { get; set; } = true; /// <summary> /// The Blazor hosting model to generate source for. WebAssembly creates <c>IJSInProcessRuntime</c> extensions, /// while Server creates <c>IJSRuntime</c> extensions. Defaults to <see cref="BlazorHostingModel.WebAssembly" />. /// </summary> public BlazorHostingModel HostingModel { get; set; } = BlazorHostingModel.WebAssembly; /// <summary> /// The optional URL to the corresponding API. /// </summary> public string? Url { get; set; } /// <summary> /// An optional array of TypeScript type declarations sources. Valid values are URLs or file paths. /// </summary> public string[]? TypeDeclarationSources { get; set; } }
// Copyright (c) David Pine. All rights reserved. // Licensed under the MIT License: // https://bit.ly/blazorators-license // Auto-generated by blazorators. using Blazor.Serialization.Extensions; using System.Text.Json; #nullable enable namespace BlazorApp2; /// <inheritdoc/> internal sealed class LocalStorageService : ILocalStorageService { internal readonly IJSInProcessRuntime _javaScript = null !; public LocalStorageService(IJSInProcessRuntime javaScript) => _javaScript = javaScript; /// <inheritdoc cref = "ILocalStorageService.Clear"/> void ILocalStorageService.Clear() => _javaScript.InvokeVoid("window.localStorage.clear"); /// <inheritdoc cref = "ILocalStorageService.GetItem"/> TValue? ILocalStorageService.GetItem<TValue>(string key, JsonSerializerOptions? options) where TValue : default => _javaScript.Invoke<string?>("window.localStorage.getItem", key).FromJson<TValue>(options); /// <inheritdoc cref = "ILocalStorageService.Key"/> string? ILocalStorageService.Key(double index) => _javaScript.Invoke<string?>("window.localStorage.key", index); /// <inheritdoc cref = "ILocalStorageService.RemoveItem"/> void ILocalStorageService.RemoveItem(string key) => _javaScript.InvokeVoid("window.localStorage.removeItem", key); /// <inheritdoc cref = "ILocalStorageService.SetItem"/> void ILocalStorageService.SetItem<TValue>(string key, TValue value, JsonSerializerOptions? options) => _javaScript.InvokeVoid("window.localStorage.setItem", key, value.ToJson(options)); /// <inheritdoc cref = "ILocalStorageService.Length"/> double ILocalStorageService.Length => _javaScript.Invoke<double>("eval", "window.localStorage.length"); }
// Copyright (c) David Pine. All rights reserved. // Licensed under the MIT License: // https://github.com/IEvangelist/blazorators/blob/main/LICENSE // Auto-generated by blazorators. using Microsoft.JSInterop; namespace Microsoft.Extensions.DependencyInjection; /// <summary></summary> public static class LocalStorageServiceCollectionExtensions { /// <summary> /// Adds the <see cref="ILocalStorageService" /> service to the service collection. /// </summary> public static IServiceCollection AddLocalStorageServices( this IServiceCollection services) => services.AddSingleton<IJSInProcessRuntime>(serviceProvider => (IJSInProcessRuntime)serviceProvider.GetRequiredService<IJSRuntime>()) .AddSingleton<ILocalStorageService, LocalStorageService>(); }
using System.ComponentModel; namespace System.Runtime.CompilerServices { [EditorBrowsable(EditorBrowsableState.Never)] internal class IsExternalInit { } }
#pragma checksum "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\App.razor" "{8829d00f-11b8-4213-878b-770e8597ac16}" "ca69fbc161c0130d6d7831728befc975abb17b04491a271bc49266261055543b" // <auto-generated/> #pragma warning disable 1591 namespace BlazorApp2 { #line hidden using global::System; using global::System.Collections.Generic; using global::System.Linq; using global::System.Threading.Tasks; using global::Microsoft.AspNetCore.Components; #nullable restore #line 1 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http; #line default #line hidden #nullable disable #nullable restore #line 2 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http.Json; #line default #line hidden #nullable disable #nullable restore #line 3 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Forms; #line default #line hidden #nullable disable #nullable restore #line 4 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Routing; #line default #line hidden #nullable disable #nullable restore #line 5 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web; #line default #line hidden #nullable disable #nullable restore #line 6 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web.Virtualization; #line default #line hidden #nullable disable #nullable restore #line 7 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.WebAssembly.Http; #line default #line hidden #nullable disable #nullable restore #line 8 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.JSInterop; #line default #line hidden #nullable disable #nullable restore #line 9 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2; #line default #line hidden #nullable disable #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2.Layout; #line default #line hidden #nullable disable public partial class App : global::Microsoft.AspNetCore.Components.ComponentBase { #pragma warning disable 1998 protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder) { __builder.OpenComponent<global::Microsoft.AspNetCore.Components.Routing.Router>(0); __builder.AddComponentParameter(1, "AppAssembly", global::Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers.TypeCheck<global::System.Reflection.Assembly>( #nullable restore #line 1 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\App.razor" typeof(App).Assembly #line default #line hidden #nullable disable )); __builder.AddAttribute(2, "Found", (global::Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.RouteData>)((routeData) => (__builder2) => { __builder2.OpenComponent<global::Microsoft.AspNetCore.Components.RouteView>(3); __builder2.AddComponentParameter(4, "RouteData", global::Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers.TypeCheck<global::Microsoft.AspNetCore.Components.RouteData>( #nullable restore #line 3 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\App.razor" routeData #line default #line hidden #nullable disable )); __builder2.AddComponentParameter(5, "DefaultLayout", global::Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers.TypeCheck<global::System.Type>( #nullable restore #line 3 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\App.razor" typeof(MainLayout) #line default #line hidden #nullable disable )); __builder2.CloseComponent(); __builder2.AddMarkupContent(6, "\r\n "); __builder2.OpenComponent<global::Microsoft.AspNetCore.Components.Routing.FocusOnNavigate>(7); __builder2.AddComponentParameter(8, "RouteData", global::Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers.TypeCheck<global::Microsoft.AspNetCore.Components.RouteData>( #nullable restore #line 4 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\App.razor" routeData #line default #line hidden #nullable disable )); __builder2.AddComponentParameter(9, "Selector", "h1"); __builder2.CloseComponent(); } )); __builder.AddAttribute(10, "NotFound", (global::Microsoft.AspNetCore.Components.RenderFragment)((__builder2) => { __builder2.OpenComponent<global::Microsoft.AspNetCore.Components.Web.PageTitle>(11); __builder2.AddAttribute(12, "ChildContent", (global::Microsoft.AspNetCore.Components.RenderFragment)((__builder3) => { __builder3.AddContent(13, "Not found"); } )); __builder2.CloseComponent(); __builder2.AddMarkupContent(14, "\r\n "); __builder2.OpenComponent<global::Microsoft.AspNetCore.Components.LayoutView>(15); __builder2.AddComponentParameter(16, "Layout", global::Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers.TypeCheck<global::System.Type>( #nullable restore #line 8 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\App.razor" typeof(MainLayout) #line default #line hidden #nullable disable )); __builder2.AddAttribute(17, "ChildContent", (global::Microsoft.AspNetCore.Components.RenderFragment)((__builder3) => { __builder3.AddMarkupContent(18, "<p role=\"alert\">Sorry, there\'s nothing at this address.</p>"); } )); __builder2.CloseComponent(); } )); __builder.CloseComponent(); } #pragma warning restore 1998 } } #pragma warning restore 1591
#pragma checksum "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Layout\MainLayout.razor" "{8829d00f-11b8-4213-878b-770e8597ac16}" "93d4b940f2ce228e270b07368e54f6d439ffc44bc31096274325558e65d2157f" // <auto-generated/> #pragma warning disable 1591 namespace BlazorApp2.Layout { #line hidden using global::System; using global::System.Collections.Generic; using global::System.Linq; using global::System.Threading.Tasks; using global::Microsoft.AspNetCore.Components; #nullable restore #line 1 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http; #line default #line hidden #nullable disable #nullable restore #line 2 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http.Json; #line default #line hidden #nullable disable #nullable restore #line 3 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Forms; #line default #line hidden #nullable disable #nullable restore #line 4 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Routing; #line default #line hidden #nullable disable #nullable restore #line 5 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web; #line default #line hidden #nullable disable #nullable restore #line 6 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web.Virtualization; #line default #line hidden #nullable disable #nullable restore #line 7 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.WebAssembly.Http; #line default #line hidden #nullable disable #nullable restore #line 8 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.JSInterop; #line default #line hidden #nullable disable #nullable restore #line 9 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2; #line default #line hidden #nullable disable #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2.Layout; #line default #line hidden #nullable disable public partial class MainLayout : LayoutComponentBase { #pragma warning disable 1998 protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder) { __builder.OpenElement(0, "div"); __builder.AddAttribute(1, "class", "page"); __builder.AddAttribute(2, "b-iwvdxzpj6w"); __builder.OpenElement(3, "div"); __builder.AddAttribute(4, "class", "sidebar"); __builder.AddAttribute(5, "b-iwvdxzpj6w"); __builder.OpenComponent<global::BlazorApp2.Layout.NavMenu>(6); __builder.CloseComponent(); __builder.CloseElement(); __builder.AddMarkupContent(7, "\r\n\r\n "); __builder.OpenElement(8, "main"); __builder.AddAttribute(9, "b-iwvdxzpj6w"); __builder.AddMarkupContent(10, "<div class=\"top-row px-4\" b-iwvdxzpj6w><a href=\"https://learn.microsoft.com/aspnet/core/\" target=\"_blank\" b-iwvdxzpj6w>About</a></div>\r\n\r\n "); __builder.OpenElement(11, "article"); __builder.AddAttribute(12, "class", "content px-4"); __builder.AddAttribute(13, "b-iwvdxzpj6w"); #nullable restore #line (13,14)-(13,18) 25 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Layout\MainLayout.razor" __builder.AddContent(14, Body); #line default #line hidden #nullable disable __builder.CloseElement(); __builder.CloseElement(); __builder.CloseElement(); } #pragma warning restore 1998 } } #pragma warning restore 1591
#pragma checksum "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Layout\NavMenu.razor" "{8829d00f-11b8-4213-878b-770e8597ac16}" "4ed23773930f65532bdb0b17b15ff5e805d3c4e59aad805d432503d0191cd0a9" // <auto-generated/> #pragma warning disable 1591 namespace BlazorApp2.Layout { #line hidden using global::System; using global::System.Collections.Generic; using global::System.Linq; using global::System.Threading.Tasks; using global::Microsoft.AspNetCore.Components; #nullable restore #line 1 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http; #line default #line hidden #nullable disable #nullable restore #line 2 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http.Json; #line default #line hidden #nullable disable #nullable restore #line 3 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Forms; #line default #line hidden #nullable disable #nullable restore #line 4 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Routing; #line default #line hidden #nullable disable #nullable restore #line 5 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web; #line default #line hidden #nullable disable #nullable restore #line 6 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web.Virtualization; #line default #line hidden #nullable disable #nullable restore #line 7 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.WebAssembly.Http; #line default #line hidden #nullable disable #nullable restore #line 8 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.JSInterop; #line default #line hidden #nullable disable #nullable restore #line 9 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2; #line default #line hidden #nullable disable #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2.Layout; #line default #line hidden #nullable disable public partial class NavMenu : global::Microsoft.AspNetCore.Components.ComponentBase { #pragma warning disable 1998 protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder) { __builder.OpenElement(0, "div"); __builder.AddAttribute(1, "class", "top-row ps-3 navbar navbar-dark"); __builder.AddAttribute(2, "b-18uzve78me"); __builder.OpenElement(3, "div"); __builder.AddAttribute(4, "class", "container-fluid"); __builder.AddAttribute(5, "b-18uzve78me"); __builder.AddMarkupContent(6, "<a class=\"navbar-brand\" href b-18uzve78me>BlazorApp2</a>\r\n "); __builder.OpenElement(7, "button"); __builder.AddAttribute(8, "title", "Navigation menu"); __builder.AddAttribute(9, "class", "navbar-toggler"); __builder.AddAttribute(10, "onclick", global::Microsoft.AspNetCore.Components.EventCallback.Factory.Create<global::Microsoft.AspNetCore.Components.Web.MouseEventArgs>(this, #nullable restore #line 4 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Layout\NavMenu.razor" ToggleNavMenu #line default #line hidden #nullable disable )); __builder.AddAttribute(11, "b-18uzve78me"); __builder.AddMarkupContent(12, "<span class=\"navbar-toggler-icon\" b-18uzve78me></span>"); __builder.CloseElement(); __builder.CloseElement(); __builder.CloseElement(); __builder.AddMarkupContent(13, "\r\n\r\n"); __builder.OpenElement(14, "div"); __builder.AddAttribute(15, "class", ( #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Layout\NavMenu.razor" NavMenuCssClass #line default #line hidden #nullable disable ) + " nav-scrollable"); __builder.AddAttribute(16, "onclick", global::Microsoft.AspNetCore.Components.EventCallback.Factory.Create<global::Microsoft.AspNetCore.Components.Web.MouseEventArgs>(this, #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Layout\NavMenu.razor" ToggleNavMenu #line default #line hidden #nullable disable )); __builder.AddAttribute(17, "b-18uzve78me"); __builder.OpenElement(18, "nav"); __builder.AddAttribute(19, "class", "flex-column"); __builder.AddAttribute(20, "b-18uzve78me"); __builder.OpenElement(21, "div"); __builder.AddAttribute(22, "class", "nav-item px-3"); __builder.AddAttribute(23, "b-18uzve78me"); __builder.OpenComponent<global::Microsoft.AspNetCore.Components.Routing.NavLink>(24); __builder.AddComponentParameter(25, "class", "nav-link"); __builder.AddComponentParameter(26, "href", ""); __builder.AddComponentParameter(27, "Match", global::Microsoft.AspNetCore.Components.CompilerServices.RuntimeHelpers.TypeCheck<global::Microsoft.AspNetCore.Components.Routing.NavLinkMatch>( #nullable restore #line 13 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Layout\NavMenu.razor" NavLinkMatch.All #line default #line hidden #nullable disable )); __builder.AddAttribute(28, "ChildContent", (global::Microsoft.AspNetCore.Components.RenderFragment)((__builder2) => { __builder2.AddMarkupContent(29, "<span class=\"bi bi-house-door-fill-nav-menu\" aria-hidden=\"true\" b-18uzve78me></span> Home\r\n "); } )); __builder.CloseComponent(); __builder.CloseElement(); __builder.AddMarkupContent(30, "\r\n "); __builder.OpenElement(31, "div"); __builder.AddAttribute(32, "class", "nav-item px-3"); __builder.AddAttribute(33, "b-18uzve78me"); __builder.OpenComponent<global::Microsoft.AspNetCore.Components.Routing.NavLink>(34); __builder.AddComponentParameter(35, "class", "nav-link"); __builder.AddComponentParameter(36, "href", "counter"); __builder.AddAttribute(37, "ChildContent", (global::Microsoft.AspNetCore.Components.RenderFragment)((__builder2) => { __builder2.AddMarkupContent(38, "<span class=\"bi bi-plus-square-fill-nav-menu\" aria-hidden=\"true\" b-18uzve78me></span> Counter\r\n "); } )); __builder.CloseComponent(); __builder.CloseElement(); __builder.AddMarkupContent(39, "\r\n "); __builder.OpenElement(40, "div"); __builder.AddAttribute(41, "class", "nav-item px-3"); __builder.AddAttribute(42, "b-18uzve78me"); __builder.OpenComponent<global::Microsoft.AspNetCore.Components.Routing.NavLink>(43); __builder.AddComponentParameter(44, "class", "nav-link"); __builder.AddComponentParameter(45, "href", "weather"); __builder.AddAttribute(46, "ChildContent", (global::Microsoft.AspNetCore.Components.RenderFragment)((__builder2) => { __builder2.AddMarkupContent(47, "<span class=\"bi bi-list-nested-nav-menu\" aria-hidden=\"true\" b-18uzve78me></span> Weather\r\n "); } )); __builder.CloseComponent(); __builder.CloseElement(); __builder.CloseElement(); __builder.CloseElement(); } #pragma warning restore 1998 #nullable restore #line 30 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Layout\NavMenu.razor" private bool collapseNavMenu = true; private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null; private void ToggleNavMenu() { collapseNavMenu = !collapseNavMenu; } #line default #line hidden #nullable disable } } #pragma warning restore 1591
#pragma checksum "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Counter.razor" "{8829d00f-11b8-4213-878b-770e8597ac16}" "886d5e15f1c63f4cc1caec7ff58936690cc18dd69931479d26471f7575854ec2" // <auto-generated/> #pragma warning disable 1591 namespace BlazorApp2.Pages { #line hidden using global::System; using global::System.Collections.Generic; using global::System.Linq; using global::System.Threading.Tasks; using global::Microsoft.AspNetCore.Components; #nullable restore #line 1 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http; #line default #line hidden #nullable disable #nullable restore #line 2 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http.Json; #line default #line hidden #nullable disable #nullable restore #line 3 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Forms; #line default #line hidden #nullable disable #nullable restore #line 4 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Routing; #line default #line hidden #nullable disable #nullable restore #line 5 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web; #line default #line hidden #nullable disable #nullable restore #line 6 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web.Virtualization; #line default #line hidden #nullable disable #nullable restore #line 7 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.WebAssembly.Http; #line default #line hidden #nullable disable #nullable restore #line 8 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.JSInterop; #line default #line hidden #nullable disable #nullable restore #line 9 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2; #line default #line hidden #nullable disable #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2.Layout; #line default #line hidden #nullable disable [global::Microsoft.AspNetCore.Components.RouteAttribute("/counter")] public partial class Counter : global::Microsoft.AspNetCore.Components.ComponentBase { #pragma warning disable 1998 protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder) { __builder.OpenComponent<global::Microsoft.AspNetCore.Components.Web.PageTitle>(0); __builder.AddAttribute(1, "ChildContent", (global::Microsoft.AspNetCore.Components.RenderFragment)((__builder2) => { __builder2.AddContent(2, "Counter"); } )); __builder.CloseComponent(); __builder.AddMarkupContent(3, "\r\n\r\n"); __builder.AddMarkupContent(4, "<h1>Counter</h1>\r\n\r\n"); __builder.OpenElement(5, "p"); __builder.AddAttribute(6, "role", "status"); __builder.AddContent(7, "Current count: "); #nullable restore #line (7,34)-(7,46) 24 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Counter.razor" __builder.AddContent(8, currentCount); #line default #line hidden #nullable disable __builder.CloseElement(); __builder.AddMarkupContent(9, "\r\n\r\n"); __builder.OpenElement(10, "button"); __builder.AddAttribute(11, "class", "btn btn-primary"); __builder.AddAttribute(12, "onclick", global::Microsoft.AspNetCore.Components.EventCallback.Factory.Create<global::Microsoft.AspNetCore.Components.Web.MouseEventArgs>(this, #nullable restore #line 9 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Counter.razor" IncrementCount #line default #line hidden #nullable disable )); __builder.AddContent(13, "Click me"); __builder.CloseElement(); } #pragma warning restore 1998 #nullable restore #line 11 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Counter.razor" private int currentCount = 0; private void IncrementCount() { currentCount++; } #line default #line hidden #nullable disable } } #pragma warning restore 1591
#pragma checksum "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Home.razor" "{8829d00f-11b8-4213-878b-770e8597ac16}" "3aa0919abc135f80e5cf81940d496935db1ecddffc2b0b077d38018b20b6d726" // <auto-generated/> #pragma warning disable 1591 namespace BlazorApp2.Pages { #line hidden using global::System; using global::System.Collections.Generic; using global::System.Linq; using global::System.Threading.Tasks; using global::Microsoft.AspNetCore.Components; #nullable restore #line 1 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http; #line default #line hidden #nullable disable #nullable restore #line 2 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http.Json; #line default #line hidden #nullable disable #nullable restore #line 3 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Forms; #line default #line hidden #nullable disable #nullable restore #line 4 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Routing; #line default #line hidden #nullable disable #nullable restore #line 5 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web; #line default #line hidden #nullable disable #nullable restore #line 6 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web.Virtualization; #line default #line hidden #nullable disable #nullable restore #line 7 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.WebAssembly.Http; #line default #line hidden #nullable disable #nullable restore #line 8 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.JSInterop; #line default #line hidden #nullable disable #nullable restore #line 9 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2; #line default #line hidden #nullable disable #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2.Layout; #line default #line hidden #nullable disable [global::Microsoft.AspNetCore.Components.RouteAttribute("/")] public partial class Home : global::Microsoft.AspNetCore.Components.ComponentBase { #pragma warning disable 1998 protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder) { __builder.OpenComponent<global::Microsoft.AspNetCore.Components.Web.PageTitle>(0); __builder.AddAttribute(1, "ChildContent", (global::Microsoft.AspNetCore.Components.RenderFragment)((__builder2) => { __builder2.AddContent(2, "Home"); } )); __builder.CloseComponent(); __builder.AddMarkupContent(3, "\r\n\r\n"); __builder.AddMarkupContent(4, "<h1>Hello, world!</h1>\r\n\r\nPlease refresh the page to see the value persisted in local storage.\r\n"); #nullable restore #line 9 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Home.razor" var name = MyLocalStorage.GetItem<string>("name"); if (name != null) { #line default #line hidden #nullable disable __builder.OpenElement(5, "p"); __builder.AddContent(6, "Hi, "); #nullable restore #line (13,17)-(13,21) 24 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Home.razor" __builder.AddContent(7, name); #line default #line hidden #nullable disable __builder.CloseElement(); #nullable restore #line 14 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Home.razor" } else { #line default #line hidden #nullable disable __builder.AddMarkupContent(8, "<p>Hi, stranger</p>"); #nullable restore #line 18 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Home.razor" } MyLocalStorage.SetItem("name", "Andrei Ignat"); #line default #line hidden #nullable disable } #pragma warning restore 1998 [global::Microsoft.AspNetCore.Components.InjectAttribute] private ILocalStorageService MyLocalStorage { get; set; } } } #pragma warning restore 1591
#pragma checksum "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" "{8829d00f-11b8-4213-878b-770e8597ac16}" "91e0cba167af58d4c1dbd17785187574d7b8431106eb9fc9b48193bb1e109a61" // <auto-generated/> #pragma warning disable 1591 namespace BlazorApp2.Pages { #line hidden using global::System; using global::System.Collections.Generic; using global::System.Linq; using global::System.Threading.Tasks; using global::Microsoft.AspNetCore.Components; #nullable restore #line 1 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http; #line default #line hidden #nullable disable #nullable restore #line 2 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http.Json; #line default #line hidden #nullable disable #nullable restore #line 3 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Forms; #line default #line hidden #nullable disable #nullable restore #line 4 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Routing; #line default #line hidden #nullable disable #nullable restore #line 5 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web; #line default #line hidden #nullable disable #nullable restore #line 6 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web.Virtualization; #line default #line hidden #nullable disable #nullable restore #line 7 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.WebAssembly.Http; #line default #line hidden #nullable disable #nullable restore #line 8 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.JSInterop; #line default #line hidden #nullable disable #nullable restore #line 9 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2; #line default #line hidden #nullable disable #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2.Layout; #line default #line hidden #nullable disable [global::Microsoft.AspNetCore.Components.RouteAttribute("/weather")] public partial class Weather : global::Microsoft.AspNetCore.Components.ComponentBase { #pragma warning disable 1998 protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder) { __builder.OpenComponent<global::Microsoft.AspNetCore.Components.Web.PageTitle>(0); __builder.AddAttribute(1, "ChildContent", (global::Microsoft.AspNetCore.Components.RenderFragment)((__builder2) => { __builder2.AddContent(2, "Weather"); } )); __builder.CloseComponent(); __builder.AddMarkupContent(3, "\r\n\r\n"); __builder.AddMarkupContent(4, "<h1>Weather</h1>\r\n\r\n"); __builder.AddMarkupContent(5, "<p>This component demonstrates fetching data from the server.</p>"); #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" if (forecasts == null) { #line default #line hidden #nullable disable __builder.AddMarkupContent(6, "<p><em>Loading...</em></p>"); #nullable restore #line 13 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" } else { #line default #line hidden #nullable disable __builder.OpenElement(7, "table"); __builder.AddAttribute(8, "class", "table"); __builder.AddMarkupContent(9, "<thead><tr><th>Date</th>\r\n <th>Temp. (C)</th>\r\n <th>Temp. (F)</th>\r\n <th>Summary</th></tr></thead>\r\n "); __builder.OpenElement(10, "tbody"); #nullable restore #line 26 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" foreach (var forecast in forecasts) { #line default #line hidden #nullable disable __builder.OpenElement(11, "tr"); __builder.OpenElement(12, "td"); #nullable restore #line (29,26)-(29,59) 25 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" __builder.AddContent(13, forecast.Date.ToShortDateString()); #line default #line hidden #nullable disable __builder.CloseElement(); __builder.AddMarkupContent(14, "\r\n "); __builder.OpenElement(15, "td"); #nullable restore #line (30,26)-(30,47) 25 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" __builder.AddContent(16, forecast.TemperatureC); #line default #line hidden #nullable disable __builder.CloseElement(); __builder.AddMarkupContent(17, "\r\n "); __builder.OpenElement(18, "td"); #nullable restore #line (31,26)-(31,47) 25 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" __builder.AddContent(19, forecast.TemperatureF); #line default #line hidden #nullable disable __builder.CloseElement(); __builder.AddMarkupContent(20, "\r\n "); __builder.OpenElement(21, "td"); #nullable restore #line (32,26)-(32,42) 25 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" __builder.AddContent(22, forecast.Summary); #line default #line hidden #nullable disable __builder.CloseElement(); __builder.CloseElement(); #nullable restore #line 34 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" } #line default #line hidden #nullable disable __builder.CloseElement(); __builder.CloseElement(); #nullable restore #line 37 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" } #line default #line hidden #nullable disable } #pragma warning restore 1998 #nullable restore #line 39 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\Pages\Weather.razor" private WeatherForecast[]? forecasts; protected override async Task OnInitializedAsync() { forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json"); } public class WeatherForecast { public DateOnly Date { get; set; } public int TemperatureC { get; set; } public string? Summary { get; set; } public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); } #line default #line hidden #nullable disable [global::Microsoft.AspNetCore.Components.InjectAttribute] private HttpClient Http { get; set; } } } #pragma warning restore 1591
#pragma checksum "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" "{8829d00f-11b8-4213-878b-770e8597ac16}" "d065d06a7544abc87a0d6ac6e4b47ca33ed0bc373f5ec7b85b2aa4d888f77d3e" // <auto-generated/> #pragma warning disable 1591 namespace BlazorApp2 { #line hidden using global::System; using global::System.Collections.Generic; using global::System.Linq; using global::System.Threading.Tasks; using global::Microsoft.AspNetCore.Components; #nullable restore #line 1 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http; #line default #line hidden #nullable disable #nullable restore #line 2 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using System.Net.Http.Json; #line default #line hidden #nullable disable #nullable restore #line 3 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Forms; #line default #line hidden #nullable disable #nullable restore #line 4 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Routing; #line default #line hidden #nullable disable #nullable restore #line 5 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web; #line default #line hidden #nullable disable #nullable restore #line 6 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.Web.Virtualization; #line default #line hidden #nullable disable #nullable restore #line 7 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.AspNetCore.Components.WebAssembly.Http; #line default #line hidden #nullable disable #nullable restore #line 8 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using Microsoft.JSInterop; #line default #line hidden #nullable disable #nullable restore #line 9 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2; #line default #line hidden #nullable disable #nullable restore #line 10 "C:\Users\ignat\Downloads\BlazorAppFullRef1\BlazorApp2\_Imports.razor" using BlazorApp2.Layout; #line default #line hidden #nullable disable public partial class _Imports : global::Microsoft.AspNetCore.Components.ComponentBase { #pragma warning disable 1998 protected override void BuildRenderTree(global::Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder __builder) { } #pragma warning restore 1998 } } #pragma warning restore 1591
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/Blazorators
Leave a Reply