diff --git a/src/Components/Endpoints/src/Builder/RazorComponentDataSourceOptions.cs b/src/Components/Endpoints/src/Builder/RazorComponentDataSourceOptions.cs index 953be437550b..89d9b9e4f43e 100644 --- a/src/Components/Endpoints/src/Builder/RazorComponentDataSourceOptions.cs +++ b/src/Components/Endpoints/src/Builder/RazorComponentDataSourceOptions.cs @@ -17,14 +17,14 @@ internal class RazorComponentDataSourceOptions .Create( equals: (x, y) => (x,y) switch { - (ServerRenderMode, ServerRenderMode) => true, - (WebAssemblyRenderMode, WebAssemblyRenderMode) => true, + (InteractiveServerRenderMode, InteractiveServerRenderMode) => true, + (InteractiveWebAssemblyRenderMode, InteractiveWebAssemblyRenderMode) => true, _ => false, }, getHashCode: obj => obj switch { - ServerRenderMode => 1, - WebAssemblyRenderMode => 2, + InteractiveServerRenderMode => 1, + InteractiveWebAssemblyRenderMode => 2, _ => throw new InvalidOperationException($"Unknown render mode: {obj}"), }); diff --git a/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSource.cs b/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSource.cs index 8013ab54794d..58a7ac8d656f 100644 --- a/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSource.cs +++ b/src/Components/Endpoints/src/Builder/RazorComponentEndpointDataSource.cs @@ -129,8 +129,8 @@ private void UpdateEndpoints() if (!found) { throw new InvalidOperationException($"Unable to find a provider for the render mode: {renderMode.GetType().FullName}. This generally " + - "means that a call to 'AddWebAssemblyComponents' or 'AddServerComponents' is missing. " + - "For example, change builder.Services.AddRazorComponents() to builder.Services.AddRazorComponents().AddServerComponents()."); + "means that a call to 'AddInteractiveWebAssemblyComponents' or 'AddInteractiveServerComponents' is missing. " + + "For example, change builder.Services.AddRazorComponents() to builder.Services.AddRazorComponents().AddInteractiveServerComponents()."); } } diff --git a/src/Components/Endpoints/src/Discovery/ComponentInfo.cs b/src/Components/Endpoints/src/Discovery/ComponentInfo.cs index 89b52d189d3d..00e74b52dae0 100644 --- a/src/Components/Endpoints/src/Discovery/ComponentInfo.cs +++ b/src/Components/Endpoints/src/Discovery/ComponentInfo.cs @@ -51,20 +51,20 @@ private string GetDebuggerDisplay() private string GetRenderMode() { - if (RenderMode is ServerRenderMode { Prerender: var server }) + if (RenderMode is InteractiveServerRenderMode { Prerender: var server }) { - var size = (nameof(ServerRenderMode).Length - "RenderModeComparer".Length); - return $"RenderModeComparer = {nameof(ServerRenderMode)[0..size]}, Prerendered = {server}"; + var size = (nameof(InteractiveServerRenderMode).Length - "RenderModeComparer".Length); + return $"RenderModeComparer = {nameof(InteractiveServerRenderMode)[0..size]}, Prerendered = {server}"; } - if (RenderMode is WebAssemblyRenderMode { Prerender: var wasm }) + if (RenderMode is InteractiveWebAssemblyRenderMode { Prerender: var wasm }) { - var size = (nameof(WebAssemblyRenderMode).Length - "RenderModeComparer".Length); - return $"RenderModeComparer = {nameof(WebAssemblyRenderMode)[0..size]}, Prerendered = {wasm}"; + var size = (nameof(InteractiveWebAssemblyRenderMode).Length - "RenderModeComparer".Length); + return $"RenderModeComparer = {nameof(InteractiveWebAssemblyRenderMode)[0..size]}, Prerendered = {wasm}"; } - if (RenderMode is AutoRenderMode { Prerender: var auto }) + if (RenderMode is InteractiveAutoRenderMode { Prerender: var auto }) { - var size = (nameof(AutoRenderMode).Length - "RenderModeComparer".Length); - return $"RenderModeComparer = {nameof(AutoRenderMode)[0..size]}, Prerendered = {auto}"; + var size = (nameof(InteractiveAutoRenderMode).Length - "RenderModeComparer".Length); + return $"RenderModeComparer = {nameof(InteractiveAutoRenderMode)[0..size]}, Prerendered = {auto}"; } return "RenderModeComparer = Unknown, Prerendered = Unknown"; diff --git a/src/Components/Endpoints/src/Discovery/RazorComponentApplication.cs b/src/Components/Endpoints/src/Discovery/RazorComponentApplication.cs index 1583c5ce8965..29f20f083e06 100644 --- a/src/Components/Endpoints/src/Discovery/RazorComponentApplication.cs +++ b/src/Components/Endpoints/src/Discovery/RazorComponentApplication.cs @@ -42,15 +42,15 @@ public ISet GetDeclaredRenderModesByDiscoveredComponents() var component = Components[i]; switch (component.RenderMode) { - case ServerRenderMode: - set.Add(RenderMode.Server); + case InteractiveServerRenderMode: + set.Add(RenderMode.InteractiveServer); break; - case WebAssemblyRenderMode: - set.Add(RenderMode.WebAssembly); + case InteractiveWebAssemblyRenderMode: + set.Add(RenderMode.InteractiveWebAssembly); break; - case AutoRenderMode: - set.Add(RenderMode.Server); - set.Add(RenderMode.WebAssembly); + case InteractiveAutoRenderMode: + set.Add(RenderMode.InteractiveServer); + set.Add(RenderMode.InteractiveWebAssembly); break; default: break; diff --git a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.PrerenderingState.cs b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.PrerenderingState.cs index baf91c157786..3b710374d38f 100644 --- a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.PrerenderingState.cs +++ b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.PrerenderingState.cs @@ -65,9 +65,9 @@ internal static void UpdateSaveStateRenderMode(HttpContext httpContext, ICompone { var currentInvocation = mode switch { - ServerRenderMode => InvokedRenderModes.Mode.Server, - WebAssemblyRenderMode => InvokedRenderModes.Mode.WebAssembly, - AutoRenderMode => throw new NotImplementedException("TODO: To be able to support AutoRenderMode, we have to serialize persisted state in both WebAssembly and Server formats, or unify the two formats."), + InteractiveServerRenderMode => InvokedRenderModes.Mode.Server, + InteractiveWebAssemblyRenderMode => InvokedRenderModes.Mode.WebAssembly, + InteractiveAutoRenderMode => throw new NotImplementedException("TODO: To be able to support InteractiveAutoRenderMode, we have to serialize persisted state in both WebAssembly and Server formats, or unify the two formats."), _ => throw new ArgumentException(Resources.FormatUnsupportedRenderMode(mode), nameof(mode)), }; @@ -88,9 +88,9 @@ internal static void UpdateSaveStateRenderMode(HttpContext httpContext, ICompone private static bool ModeEnablesPrerendering(IComponentRenderMode? mode) => mode switch { - ServerRenderMode { Prerender: true } => true, - WebAssemblyRenderMode { Prerender: true } => true, - AutoRenderMode { Prerender: true } => true, + InteractiveServerRenderMode { Prerender: true } => true, + InteractiveWebAssemblyRenderMode { Prerender: true } => true, + InteractiveAutoRenderMode { Prerender: true } => true, _ => false }; diff --git a/src/Components/Endpoints/src/Rendering/SSRRenderModeBoundary.cs b/src/Components/Endpoints/src/Rendering/SSRRenderModeBoundary.cs index f0ac9aaba6db..66a9331c0f1a 100644 --- a/src/Components/Endpoints/src/Rendering/SSRRenderModeBoundary.cs +++ b/src/Components/Endpoints/src/Rendering/SSRRenderModeBoundary.cs @@ -43,9 +43,9 @@ public SSRRenderModeBoundary( _renderMode = renderMode; _prerender = renderMode switch { - ServerRenderMode mode => mode.Prerender, - WebAssemblyRenderMode mode => mode.Prerender, - AutoRenderMode mode => mode.Prerender, + InteractiveServerRenderMode mode => mode.Prerender, + InteractiveWebAssemblyRenderMode mode => mode.Prerender, + InteractiveAutoRenderMode mode => mode.Prerender, _ => throw new ArgumentException($"Server-side rendering does not support the render mode '{renderMode}'.", nameof(renderMode)) }; } @@ -65,14 +65,14 @@ private static void AssertRenderModeIsConfigured(HttpContext httpContext, Type c var configuredModes = configuredRenderModesMetadata.ConfiguredRenderModes; // We have to allow for specified rendermodes being subclases of the known types - if (renderMode is ServerRenderMode || renderMode is AutoRenderMode) + if (renderMode is InteractiveServerRenderMode || renderMode is InteractiveAutoRenderMode) { - AssertRenderModeIsConfigured(componentType, renderMode, configuredModes, "AddServerRenderMode"); + AssertRenderModeIsConfigured(componentType, renderMode, configuredModes, "AddInteractiveServerRenderMode"); } - if (renderMode is WebAssemblyRenderMode || renderMode is AutoRenderMode) + if (renderMode is InteractiveWebAssemblyRenderMode || renderMode is InteractiveAutoRenderMode) { - AssertRenderModeIsConfigured(componentType, renderMode, configuredModes, "AddWebAssemblyRenderMode"); + AssertRenderModeIsConfigured(componentType, renderMode, configuredModes, "AddInteractiveWebAssemblyRenderMode"); } } @@ -165,13 +165,13 @@ public ComponentMarker ToMarker(HttpContext httpContext, int sequence, object? k var marker = _renderMode switch { - ServerRenderMode server => ComponentMarker.Create(ComponentMarker.ServerMarkerType, server.Prerender, _markerKey), - WebAssemblyRenderMode webAssembly => ComponentMarker.Create(ComponentMarker.WebAssemblyMarkerType, webAssembly.Prerender, _markerKey), - AutoRenderMode auto => ComponentMarker.Create(ComponentMarker.AutoMarkerType, auto.Prerender, _markerKey), + InteractiveServerRenderMode server => ComponentMarker.Create(ComponentMarker.ServerMarkerType, server.Prerender, _markerKey), + InteractiveWebAssemblyRenderMode webAssembly => ComponentMarker.Create(ComponentMarker.WebAssemblyMarkerType, webAssembly.Prerender, _markerKey), + InteractiveAutoRenderMode auto => ComponentMarker.Create(ComponentMarker.AutoMarkerType, auto.Prerender, _markerKey), _ => throw new UnreachableException($"Unknown render mode {_renderMode.GetType().FullName}"), }; - if (_renderMode is ServerRenderMode or AutoRenderMode) + if (_renderMode is InteractiveServerRenderMode or InteractiveAutoRenderMode) { // Lazy because we don't actually want to require a whole chain of services including Data Protection // to be required unless you actually use Server render mode. @@ -181,7 +181,7 @@ public ComponentMarker ToMarker(HttpContext httpContext, int sequence, object? k serverComponentSerializer.SerializeInvocation(ref marker, invocationId, _componentType, parameters); } - if (_renderMode is WebAssemblyRenderMode or AutoRenderMode) + if (_renderMode is InteractiveWebAssemblyRenderMode or InteractiveAutoRenderMode) { WebAssemblyComponentSerializer.SerializeInvocation(ref marker, _componentType, parameters); } diff --git a/src/Components/Endpoints/test/EndpointHtmlRendererTest.cs b/src/Components/Endpoints/test/EndpointHtmlRendererTest.cs index a2c730f1f21c..65c4d0692051 100644 --- a/src/Components/Endpoints/test/EndpointHtmlRendererTest.cs +++ b/src/Components/Endpoints/test/EndpointHtmlRendererTest.cs @@ -53,7 +53,7 @@ public async Task CanRender_ParameterlessComponent_ClientMode() var writer = new StringWriter(); // Act - var result = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), new WebAssemblyRenderMode(prerender: false), ParameterView.Empty); + var result = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), new InteractiveWebAssemblyRenderMode(prerender: false), ParameterView.Empty); await renderer.Dispatcher.InvokeAsync(() => result.WriteTo(writer, HtmlEncoder.Default)); var content = writer.ToString(); var match = Regex.Match(content, ComponentPattern); @@ -76,7 +76,7 @@ public async Task CanPrerender_ParameterlessComponent_ClientMode() var writer = new StringWriter(); // Act - var result = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), RenderMode.WebAssembly, ParameterView.Empty); + var result = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), RenderMode.InteractiveWebAssembly, ParameterView.Empty); await renderer.Dispatcher.InvokeAsync(() => result.WriteTo(writer, HtmlEncoder.Default)); var content = writer.ToString(); var match = Regex.Match(content, PrerenderedComponentPattern, RegexOptions.Multiline); @@ -115,7 +115,7 @@ public async Task CanRender_ComponentWithParameters_ClientMode() // Act var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), - new WebAssemblyRenderMode(prerender: false), + new InteractiveWebAssemblyRenderMode(prerender: false), ParameterView.FromDictionary(new Dictionary { { "Name", "Daniel" } @@ -152,7 +152,7 @@ public async Task CanRender_ComponentWithNullParameters_ClientMode() // Act var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), - new WebAssemblyRenderMode(prerender: false), + new InteractiveWebAssemblyRenderMode(prerender: false), ParameterView.FromDictionary(new Dictionary { { "Name", null } @@ -187,7 +187,7 @@ public async Task CanPrerender_ComponentWithParameters_ClientMode() // Act var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), - RenderMode.WebAssembly, + RenderMode.InteractiveWebAssembly, ParameterView.FromDictionary(new Dictionary { { "Name", "Daniel" } @@ -236,7 +236,7 @@ public async Task CanPrerender_ComponentWithNullParameters_ClientMode() // Act var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), - RenderMode.WebAssembly, + RenderMode.InteractiveWebAssembly, ParameterView.FromDictionary(new Dictionary { { "Name", null } @@ -300,7 +300,7 @@ public async Task CanRender_ParameterlessComponent_ServerMode() .ToTimeLimitedDataProtector(); // Act - var result = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), new ServerRenderMode(false), ParameterView.Empty); + var result = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), new InteractiveServerRenderMode(false), ParameterView.Empty); var content = await renderer.Dispatcher.InvokeAsync(() => HtmlContentToString(result)); var match = Regex.Match(content, ComponentPattern); @@ -332,7 +332,7 @@ public async Task CanPrerender_ParameterlessComponent_ServerMode() .ToTimeLimitedDataProtector(); // Act - var result = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), RenderMode.Server, ParameterView.Empty); + var result = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), RenderMode.InteractiveServer, ParameterView.Empty); var content = await renderer.Dispatcher.InvokeAsync(() => HtmlContentToString(result)); var match = Regex.Match(content, PrerenderedComponentPattern, RegexOptions.Multiline); @@ -376,8 +376,8 @@ public async Task Prerender_ServerAndClientComponentUpdatesInvokedPrerenderModes // Act var parameters = ParameterView.FromDictionary(new Dictionary { { "Name", "SomeName" } }); - var server = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), RenderMode.Server, parameters); - var client = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), RenderMode.WebAssembly, parameters); + var server = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), RenderMode.InteractiveServer, parameters); + var client = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), RenderMode.InteractiveWebAssembly, parameters); // Assert var (_, mode) = Assert.Single(httpContext.Items, (kvp) => kvp.Value is InvokedRenderModes); @@ -393,11 +393,11 @@ public async Task CanRenderMultipleServerComponents() .ToTimeLimitedDataProtector(); // Act - var firstResult = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), new ServerRenderMode(true), ParameterView.Empty); + var firstResult = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), new InteractiveServerRenderMode(true), ParameterView.Empty); var firstComponent = await renderer.Dispatcher.InvokeAsync(() => HtmlContentToString(firstResult)); var firstMatch = Regex.Match(firstComponent, PrerenderedComponentPattern, RegexOptions.Multiline); - var secondResult = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), new ServerRenderMode(false), ParameterView.Empty); + var secondResult = await renderer.PrerenderComponentAsync(httpContext, typeof(SimpleComponent), new InteractiveServerRenderMode(false), ParameterView.Empty); var secondComponent = await renderer.Dispatcher.InvokeAsync(() => HtmlContentToString(secondResult)); var secondMatch = Regex.Match(secondComponent, ComponentPattern); @@ -451,7 +451,7 @@ public async Task CanRender_ComponentWithParameters_ServerMode() // Act var parameters = ParameterView.FromDictionary(new Dictionary { { "Name", "SomeName" } }); - var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), new ServerRenderMode(false), parameters); + var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), new InteractiveServerRenderMode(false), parameters); var content = await renderer.Dispatcher.InvokeAsync(() => HtmlContentToString(result)); var match = Regex.Match(content, ComponentPattern); @@ -490,7 +490,7 @@ public async Task CanRender_ComponentWithNullParameters_ServerMode() // Act var parameters = ParameterView.FromDictionary(new Dictionary { { "Name", null } }); - var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), new ServerRenderMode(false), parameters); + var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), new InteractiveServerRenderMode(false), parameters); var content = await renderer.Dispatcher.InvokeAsync(() => HtmlContentToString(result)); var match = Regex.Match(content, ComponentPattern); @@ -529,7 +529,7 @@ public async Task CanPrerender_ComponentWithParameters_ServerPrerenderedMode() // Act var parameters = ParameterView.FromDictionary(new Dictionary { { "Name", "SomeName" } }); - var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), RenderMode.Server, parameters); + var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), RenderMode.InteractiveServer, parameters); var content = await renderer.Dispatcher.InvokeAsync(() => HtmlContentToString(result)); var match = Regex.Match(content, PrerenderedComponentPattern, RegexOptions.Multiline); @@ -580,7 +580,7 @@ public async Task CanPrerender_ComponentWithNullParameters_ServerPrerenderedMode // Act var parameters = ParameterView.FromDictionary(new Dictionary { { "Name", null } }); - var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), RenderMode.Server, parameters); + var result = await renderer.PrerenderComponentAsync(httpContext, typeof(GreetingComponent), RenderMode.InteractiveServer, parameters); var content = await renderer.Dispatcher.InvokeAsync(() => HtmlContentToString(result)); var match = Regex.Match(content, PrerenderedComponentPattern, RegexOptions.Multiline); diff --git a/src/Components/Endpoints/test/HotReloadServiceTests.cs b/src/Components/Endpoints/test/HotReloadServiceTests.cs index afa86e09971e..4250b6c66945 100644 --- a/src/Components/Endpoints/test/HotReloadServiceTests.cs +++ b/src/Components/Endpoints/test/HotReloadServiceTests.cs @@ -187,7 +187,7 @@ private static RazorComponentEndpointDataSource CreateDataSource CreateDataSource() }, @@ -186,7 +186,7 @@ public void NoDiscoveredModesDefaultsToStatic() // Webassembly explicitly configured and missing { - new IComponentRenderMode[] { RenderMode.WebAssembly }, + new IComponentRenderMode[] { RenderMode.InteractiveWebAssembly }, new [] { typeof(ServerEndpointProvider) }, Array.Empty() }, @@ -242,13 +242,13 @@ private RazorComponentEndpointDataSource CreateDataSource GetEndpointBuilders(IComponent 0); } - public override bool Supports(IComponentRenderMode renderMode) => renderMode is ServerRenderMode or AutoRenderMode; + public override bool Supports(IComponentRenderMode renderMode) => renderMode is InteractiveServerRenderMode or InteractiveAutoRenderMode; } private class WebassemblyEndpointProvider : RenderModeEndpointProvider @@ -274,7 +274,7 @@ public override IEnumerable GetEndpointBuilders(IComponent 0); } - public override bool Supports(IComponentRenderMode renderMode) => renderMode is WebAssemblyRenderMode or AutoRenderMode; + public override bool Supports(IComponentRenderMode renderMode) => renderMode is InteractiveWebAssemblyRenderMode or InteractiveAutoRenderMode; } } diff --git a/src/Components/Endpoints/test/SSRRenderModeBoundaryTest.cs b/src/Components/Endpoints/test/SSRRenderModeBoundaryTest.cs index 09e7ec399feb..a5db11e45c06 100644 --- a/src/Components/Endpoints/test/SSRRenderModeBoundaryTest.cs +++ b/src/Components/Endpoints/test/SSRRenderModeBoundaryTest.cs @@ -20,9 +20,9 @@ public void DoesNotAssertAboutConfiguredRenderModesOnUnknownEndpoints() httpContext.SetEndpoint(new Endpoint(null, new EndpointMetadataCollection(), null)); // Act/Assert: no exception means we're OK - new SSRRenderModeBoundary(httpContext, typeof(TestComponent), new ServerRenderMode()); - new SSRRenderModeBoundary(httpContext, typeof(TestComponent), new WebAssemblyRenderMode()); - new SSRRenderModeBoundary(httpContext, typeof(TestComponent), new AutoRenderMode()); + new SSRRenderModeBoundary(httpContext, typeof(TestComponent), new InteractiveServerRenderMode()); + new SSRRenderModeBoundary(httpContext, typeof(TestComponent), new InteractiveWebAssemblyRenderMode()); + new SSRRenderModeBoundary(httpContext, typeof(TestComponent), new InteractiveAutoRenderMode()); } [Fact] @@ -36,7 +36,7 @@ public void ThrowsIfServerRenderModeUsedAndNotConfigured() var ex = Assert.Throws(() => new SSRRenderModeBoundary( httpContext, typeof(TestComponent), new ServerRenderModeSubclass())); Assert.Contains($"A component of type '{typeof(TestComponent)}' has render mode '{nameof(ServerRenderModeSubclass)}'", ex.Message); - Assert.Contains($"add a call to 'AddServerRenderMode'", ex.Message); + Assert.Contains($"add a call to 'AddInteractiveServerRenderMode'", ex.Message); } [Fact] @@ -50,7 +50,7 @@ public void ThrowsIfWebAssemblyRenderModeUsedAndNotConfigured() var ex = Assert.Throws(() => new SSRRenderModeBoundary( httpContext, typeof(TestComponent), new WebAssemblyRenderModeSubclass())); Assert.Contains($"A component of type '{typeof(TestComponent)}' has render mode '{nameof(WebAssemblyRenderModeSubclass)}'", ex.Message); - Assert.Contains($"add a call to 'AddWebAssemblyRenderMode'", ex.Message); + Assert.Contains($"add a call to 'AddInteractiveWebAssemblyRenderMode'", ex.Message); } [Fact] @@ -64,7 +64,7 @@ public void ThrowsIfAutoRenderModeUsedAndServerNotConfigured() var ex = Assert.Throws(() => new SSRRenderModeBoundary( httpContext, typeof(TestComponent), new AutoRenderModeSubclass())); Assert.Contains($"A component of type '{typeof(TestComponent)}' has render mode '{nameof(AutoRenderModeSubclass)}'", ex.Message); - Assert.Contains($"add a call to 'AddServerRenderMode'", ex.Message); + Assert.Contains($"add a call to 'AddInteractiveServerRenderMode'", ex.Message); } [Fact] @@ -78,7 +78,7 @@ public void ThrowsIfAutoRenderModeUsedAndWebAssemblyNotConfigured() var ex = Assert.Throws(() => new SSRRenderModeBoundary( httpContext, typeof(TestComponent), new AutoRenderModeSubclass())); Assert.Contains($"A component of type '{typeof(TestComponent)}' has render mode '{nameof(AutoRenderModeSubclass)}'", ex.Message); - Assert.Contains($"add a call to 'AddWebAssemblyRenderMode'", ex.Message); + Assert.Contains($"add a call to 'AddInteractiveWebAssemblyRenderMode'", ex.Message); } private static void PrepareEndpoint(HttpContext httpContext, params IComponentRenderMode[] configuredModes) @@ -96,7 +96,7 @@ public Task SetParametersAsync(ParameterView parameters) => throw new NotImplementedException(); } - class ServerRenderModeSubclass : ServerRenderMode { } - class WebAssemblyRenderModeSubclass : WebAssemblyRenderMode { } - class AutoRenderModeSubclass : AutoRenderMode { } + class ServerRenderModeSubclass : InteractiveServerRenderMode { } + class WebAssemblyRenderModeSubclass : InteractiveWebAssemblyRenderMode { } + class AutoRenderModeSubclass : InteractiveAutoRenderMode { } } diff --git a/src/Components/Endpoints/test/TestComponents/InteractiveGreetingServer.razor b/src/Components/Endpoints/test/TestComponents/InteractiveGreetingServer.razor index 513134b3fae9..aa7f084f6773 100644 --- a/src/Components/Endpoints/test/TestComponents/InteractiveGreetingServer.razor +++ b/src/Components/Endpoints/test/TestComponents/InteractiveGreetingServer.razor @@ -1,5 +1,5 @@ @using Microsoft.AspNetCore.Components.Web -@attribute [RenderModeServer] +@attribute [RenderModeInteractiveServer]

Hello @(Name ?? "(null)")!

diff --git a/src/Components/Endpoints/test/TestComponents/InteractiveGreetingServerNonPrerendered.razor b/src/Components/Endpoints/test/TestComponents/InteractiveGreetingServerNonPrerendered.razor index 76aaea3b855f..689dc5341d1f 100644 --- a/src/Components/Endpoints/test/TestComponents/InteractiveGreetingServerNonPrerendered.razor +++ b/src/Components/Endpoints/test/TestComponents/InteractiveGreetingServerNonPrerendered.razor @@ -1,5 +1,5 @@ @using Microsoft.AspNetCore.Components.Web -@attribute [RenderModeServer(false)] +@attribute [RenderModeInteractiveServer(false)]

Hello @(Name ?? "(null)")!

diff --git a/src/Components/Endpoints/test/TestComponents/InteractiveGreetingWebAssembly.razor b/src/Components/Endpoints/test/TestComponents/InteractiveGreetingWebAssembly.razor index dc1573360f3b..ec1f31503186 100644 --- a/src/Components/Endpoints/test/TestComponents/InteractiveGreetingWebAssembly.razor +++ b/src/Components/Endpoints/test/TestComponents/InteractiveGreetingWebAssembly.razor @@ -1,5 +1,5 @@ @using Microsoft.AspNetCore.Components.Web -@attribute [RenderModeWebAssembly] +@attribute [RenderModeInteractiveWebAssembly]

Hello @(Name ?? "(null)")!

diff --git a/src/Components/Endpoints/test/TestComponents/InteractiveGreetingWebAssemblyNonPrerendered.razor b/src/Components/Endpoints/test/TestComponents/InteractiveGreetingWebAssemblyNonPrerendered.razor index 56293c9e76eb..e7ba8104493f 100644 --- a/src/Components/Endpoints/test/TestComponents/InteractiveGreetingWebAssemblyNonPrerendered.razor +++ b/src/Components/Endpoints/test/TestComponents/InteractiveGreetingWebAssemblyNonPrerendered.razor @@ -1,5 +1,5 @@ @using Microsoft.AspNetCore.Components.Web -@attribute [RenderModeWebAssembly(false)] +@attribute [RenderModeInteractiveWebAssembly(false)]

Hello @(Name ?? "(null)")!

diff --git a/src/Components/Endpoints/test/TestComponents/InteractiveWithInteractiveChild.razor b/src/Components/Endpoints/test/TestComponents/InteractiveWithInteractiveChild.razor index f16bb8ded8b0..1856ef793879 100644 --- a/src/Components/Endpoints/test/TestComponents/InteractiveWithInteractiveChild.razor +++ b/src/Components/Endpoints/test/TestComponents/InteractiveWithInteractiveChild.razor @@ -1,5 +1,5 @@ @using Microsoft.AspNetCore.Components.Web -@attribute [RenderModeWebAssembly] +@attribute [RenderModeInteractiveWebAssembly]

This is @nameof(InteractiveWithInteractiveChild)

diff --git a/src/Components/Server/src/Builder/InternalServerRenderMode.cs b/src/Components/Server/src/Builder/InternalServerRenderMode.cs index c690a8a7e25f..4bff43cca838 100644 --- a/src/Components/Server/src/Builder/InternalServerRenderMode.cs +++ b/src/Components/Server/src/Builder/InternalServerRenderMode.cs @@ -5,6 +5,6 @@ namespace Microsoft.AspNetCore.Builder; -internal class InternalServerRenderMode : ServerRenderMode +internal class InternalServerRenderMode : InteractiveServerRenderMode { } diff --git a/src/Components/Server/src/Builder/ServerRazorComponentsEndpointConventionBuilderExtensions.cs b/src/Components/Server/src/Builder/ServerRazorComponentsEndpointConventionBuilderExtensions.cs index 1930aed2448b..90ec6aea2e0f 100644 --- a/src/Components/Server/src/Builder/ServerRazorComponentsEndpointConventionBuilderExtensions.cs +++ b/src/Components/Server/src/Builder/ServerRazorComponentsEndpointConventionBuilderExtensions.cs @@ -12,10 +12,10 @@ namespace Microsoft.AspNetCore.Builder; public static class ServerRazorComponentsEndpointConventionBuilderExtensions { /// - /// Configures the for this application. + /// Configures the application to support the render mode. /// /// The . - public static RazorComponentsEndpointConventionBuilder AddServerRenderMode(this RazorComponentsEndpointConventionBuilder builder) + public static RazorComponentsEndpointConventionBuilder AddInteractiveServerRenderMode(this RazorComponentsEndpointConventionBuilder builder) { ComponentEndpointConventionBuilderHelper.AddRenderMode(builder, new InternalServerRenderMode()); return builder; diff --git a/src/Components/Server/src/Circuits/RemoteRenderer.cs b/src/Components/Server/src/Circuits/RemoteRenderer.cs index 991e936c1932..40f2f7a87a4c 100644 --- a/src/Components/Server/src/Circuits/RemoteRenderer.cs +++ b/src/Components/Server/src/Circuits/RemoteRenderer.cs @@ -386,7 +386,7 @@ public Task OnRenderCompletedAsync(long incomingBatchId, string? errorMessageOrN protected override IComponent ResolveComponentForRenderMode([DynamicallyAccessedMembers(Component)] Type componentType, int? parentComponentId, IComponentActivator componentActivator, IComponentRenderMode renderMode) => renderMode switch { - ServerRenderMode or AutoRenderMode => componentActivator.CreateInstance(componentType), + InteractiveServerRenderMode or InteractiveAutoRenderMode => componentActivator.CreateInstance(componentType), _ => throw new NotSupportedException($"Cannot create a component of type '{componentType}' because its render mode '{renderMode}' is not supported by interactive server-side rendering."), }; diff --git a/src/Components/Server/src/DependencyInjection/ServerRazorComponentsBuilderExtensions.cs b/src/Components/Server/src/DependencyInjection/ServerRazorComponentsBuilderExtensions.cs index 58ec3c70be01..4a52c20e7d6e 100644 --- a/src/Components/Server/src/DependencyInjection/ServerRazorComponentsBuilderExtensions.cs +++ b/src/Components/Server/src/DependencyInjection/ServerRazorComponentsBuilderExtensions.cs @@ -25,7 +25,7 @@ public static class ServerRazorComponentsBuilderExtensions /// A callback to configure . /// An that can be used to further customize the configuration. [RequiresUnreferencedCode("Server-side Blazor does not currently support native AOT.", Url = "https://aka.ms/aspnet/nativeaot")] - public static IServerSideBlazorBuilder AddServerComponents(this IRazorComponentsBuilder builder, Action? configure = null) + public static IServerSideBlazorBuilder AddInteractiveServerComponents(this IRazorComponentsBuilder builder, Action? configure = null) { ArgumentNullException.ThrowIfNull(builder, nameof(builder)); @@ -55,9 +55,9 @@ public override IEnumerable GetEndpointBuilders( { if (renderMode is not InternalServerRenderMode) { - if (renderMode is ServerRenderMode) + if (renderMode is InteractiveServerRenderMode) { - throw new InvalidOperationException("Invalid render mode. Use AddServerRenderMode() to configure the Server render mode."); + throw new InvalidOperationException("Invalid render mode. Use AddInteractiveServerRenderMode() to configure the Server render mode."); } return Array.Empty(); @@ -73,7 +73,7 @@ public override bool Supports(IComponentRenderMode renderMode) { return renderMode switch { - ServerRenderMode _ or AutoRenderMode _ => true, + InteractiveServerRenderMode _ or InteractiveAutoRenderMode _ => true, _ => false, }; } diff --git a/src/Components/Server/src/PublicAPI.Unshipped.txt b/src/Components/Server/src/PublicAPI.Unshipped.txt index ed39a35c63b5..dd03124a4909 100644 --- a/src/Components/Server/src/PublicAPI.Unshipped.txt +++ b/src/Components/Server/src/PublicAPI.Unshipped.txt @@ -3,6 +3,6 @@ Microsoft.AspNetCore.Builder.ServerRazorComponentsEndpointConventionBuilderExten Microsoft.AspNetCore.Components.Server.Circuits.CircuitInboundActivityContext Microsoft.AspNetCore.Components.Server.Circuits.CircuitInboundActivityContext.Circuit.get -> Microsoft.AspNetCore.Components.Server.Circuits.Circuit! Microsoft.Extensions.DependencyInjection.ServerRazorComponentsBuilderExtensions -static Microsoft.AspNetCore.Builder.ServerRazorComponentsEndpointConventionBuilderExtensions.AddServerRenderMode(this Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder) -> Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! -static Microsoft.Extensions.DependencyInjection.ServerRazorComponentsBuilderExtensions.AddServerComponents(this Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder! builder, System.Action? configure = null) -> Microsoft.Extensions.DependencyInjection.IServerSideBlazorBuilder! +static Microsoft.AspNetCore.Builder.ServerRazorComponentsEndpointConventionBuilderExtensions.AddInteractiveServerRenderMode(this Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder) -> Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! +static Microsoft.Extensions.DependencyInjection.ServerRazorComponentsBuilderExtensions.AddInteractiveServerComponents(this Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder! builder, System.Action? configure = null) -> Microsoft.Extensions.DependencyInjection.IServerSideBlazorBuilder! virtual Microsoft.AspNetCore.Components.Server.Circuits.CircuitHandler.CreateInboundActivityHandler(System.Func! next) -> System.Func! diff --git a/src/Components/Server/test/Circuits/RenderBatchWriterTest.cs b/src/Components/Server/test/Circuits/RenderBatchWriterTest.cs index 274670dce00a..cb84da770fa6 100644 --- a/src/Components/Server/test/Circuits/RenderBatchWriterTest.cs +++ b/src/Components/Server/test/Circuits/RenderBatchWriterTest.cs @@ -215,7 +215,7 @@ public void CanIncludeReferenceFrames() RenderTreeFrame.Markup(132, "Some markup"), RenderTreeFrame.Text(133, "\n\t "), RenderTreeFrame.NamedEvent(135, "SomeEventType", "Some assigned name"), - RenderTreeFrame.ComponentRenderModeFrame(136, RenderMode.Auto), + RenderTreeFrame.ComponentRenderModeFrame(136, RenderMode.InteractiveAuto), // Testing deduplication RenderTreeFrame.Attribute(200, "Attribute with string value", "String value"), diff --git a/src/Components/Web/src/PublicAPI.Unshipped.txt b/src/Components/Web/src/PublicAPI.Unshipped.txt index b23d101f56fb..dddd2a2fcceb 100644 --- a/src/Components/Web/src/PublicAPI.Unshipped.txt +++ b/src/Components/Web/src/PublicAPI.Unshipped.txt @@ -69,10 +69,6 @@ Microsoft.AspNetCore.Components.SupplyParameterFromFormAttribute.Name.set -> voi Microsoft.AspNetCore.Components.SupplyParameterFromFormAttribute.FormName.get -> string? Microsoft.AspNetCore.Components.SupplyParameterFromFormAttribute.FormName.set -> void Microsoft.AspNetCore.Components.SupplyParameterFromFormAttribute.SupplyParameterFromFormAttribute() -> void -Microsoft.AspNetCore.Components.Web.AutoRenderMode -Microsoft.AspNetCore.Components.Web.AutoRenderMode.AutoRenderMode() -> void -Microsoft.AspNetCore.Components.Web.AutoRenderMode.AutoRenderMode(bool prerender) -> void -Microsoft.AspNetCore.Components.Web.AutoRenderMode.Prerender.get -> bool Microsoft.AspNetCore.Components.Web.HtmlRenderer Microsoft.AspNetCore.Components.Web.HtmlRenderer.BeginRenderingComponent(System.Type! componentType) -> Microsoft.AspNetCore.Components.Web.HtmlRendering.HtmlRootComponent Microsoft.AspNetCore.Components.Web.HtmlRenderer.BeginRenderingComponent(System.Type! componentType, Microsoft.AspNetCore.Components.ParameterView parameters) -> Microsoft.AspNetCore.Components.Web.HtmlRendering.HtmlRootComponent @@ -91,35 +87,39 @@ Microsoft.AspNetCore.Components.Web.HtmlRendering.HtmlRootComponent.HtmlRootComp Microsoft.AspNetCore.Components.Web.HtmlRendering.HtmlRootComponent.QuiescenceTask.get -> System.Threading.Tasks.Task! Microsoft.AspNetCore.Components.Web.HtmlRendering.HtmlRootComponent.ToHtmlString() -> string! Microsoft.AspNetCore.Components.Web.HtmlRendering.HtmlRootComponent.WriteHtmlTo(System.IO.TextWriter! output) -> void +Microsoft.AspNetCore.Components.Web.InteractiveAutoRenderMode +Microsoft.AspNetCore.Components.Web.InteractiveAutoRenderMode.InteractiveAutoRenderMode() -> void +Microsoft.AspNetCore.Components.Web.InteractiveAutoRenderMode.InteractiveAutoRenderMode(bool prerender) -> void +Microsoft.AspNetCore.Components.Web.InteractiveAutoRenderMode.Prerender.get -> bool +Microsoft.AspNetCore.Components.Web.InteractiveServerRenderMode +Microsoft.AspNetCore.Components.Web.InteractiveServerRenderMode.InteractiveServerRenderMode() -> void +Microsoft.AspNetCore.Components.Web.InteractiveServerRenderMode.InteractiveServerRenderMode(bool prerender) -> void +Microsoft.AspNetCore.Components.Web.InteractiveServerRenderMode.Prerender.get -> bool +Microsoft.AspNetCore.Components.Web.InteractiveWebAssemblyRenderMode +Microsoft.AspNetCore.Components.Web.InteractiveWebAssemblyRenderMode.InteractiveWebAssemblyRenderMode() -> void +Microsoft.AspNetCore.Components.Web.InteractiveWebAssemblyRenderMode.InteractiveWebAssemblyRenderMode(bool prerender) -> void +Microsoft.AspNetCore.Components.Web.InteractiveWebAssemblyRenderMode.Prerender.get -> bool Microsoft.AspNetCore.Components.Web.RenderMode -Microsoft.AspNetCore.Components.Web.RenderModeAutoAttribute -Microsoft.AspNetCore.Components.Web.RenderModeAutoAttribute.RenderModeAutoAttribute() -> void -Microsoft.AspNetCore.Components.Web.RenderModeAutoAttribute.RenderModeAutoAttribute(bool prerender) -> void -Microsoft.AspNetCore.Components.Web.RenderModeServerAttribute -Microsoft.AspNetCore.Components.Web.RenderModeServerAttribute.RenderModeServerAttribute() -> void -Microsoft.AspNetCore.Components.Web.RenderModeServerAttribute.RenderModeServerAttribute(bool prerender) -> void -Microsoft.AspNetCore.Components.Web.RenderModeWebAssemblyAttribute -Microsoft.AspNetCore.Components.Web.RenderModeWebAssemblyAttribute.RenderModeWebAssemblyAttribute() -> void -Microsoft.AspNetCore.Components.Web.RenderModeWebAssemblyAttribute.RenderModeWebAssemblyAttribute(bool prerender) -> void -Microsoft.AspNetCore.Components.Web.ServerRenderMode -Microsoft.AspNetCore.Components.Web.ServerRenderMode.Prerender.get -> bool -Microsoft.AspNetCore.Components.Web.ServerRenderMode.ServerRenderMode() -> void -Microsoft.AspNetCore.Components.Web.ServerRenderMode.ServerRenderMode(bool prerender) -> void -Microsoft.AspNetCore.Components.Web.WebAssemblyRenderMode -Microsoft.AspNetCore.Components.Web.WebAssemblyRenderMode.Prerender.get -> bool -Microsoft.AspNetCore.Components.Web.WebAssemblyRenderMode.WebAssemblyRenderMode() -> void -Microsoft.AspNetCore.Components.Web.WebAssemblyRenderMode.WebAssemblyRenderMode(bool prerender) -> void +Microsoft.AspNetCore.Components.Web.RenderModeInteractiveAutoAttribute +Microsoft.AspNetCore.Components.Web.RenderModeInteractiveAutoAttribute.RenderModeInteractiveAutoAttribute() -> void +Microsoft.AspNetCore.Components.Web.RenderModeInteractiveAutoAttribute.RenderModeInteractiveAutoAttribute(bool prerender) -> void +Microsoft.AspNetCore.Components.Web.RenderModeInteractiveServerAttribute +Microsoft.AspNetCore.Components.Web.RenderModeInteractiveServerAttribute.RenderModeInteractiveServerAttribute() -> void +Microsoft.AspNetCore.Components.Web.RenderModeInteractiveServerAttribute.RenderModeInteractiveServerAttribute(bool prerender) -> void +Microsoft.AspNetCore.Components.Web.RenderModeInteractiveWebAssemblyAttribute +Microsoft.AspNetCore.Components.Web.RenderModeInteractiveWebAssemblyAttribute.RenderModeInteractiveWebAssemblyAttribute() -> void +Microsoft.AspNetCore.Components.Web.RenderModeInteractiveWebAssemblyAttribute.RenderModeInteractiveWebAssemblyAttribute(bool prerender) -> void override Microsoft.AspNetCore.Components.Forms.Editor.OnParametersSet() -> void override Microsoft.AspNetCore.Components.HtmlRendering.Infrastructure.StaticHtmlRenderer.Dispatcher.get -> Microsoft.AspNetCore.Components.Dispatcher! override Microsoft.AspNetCore.Components.HtmlRendering.Infrastructure.StaticHtmlRenderer.HandleException(System.Exception! exception) -> void override Microsoft.AspNetCore.Components.HtmlRendering.Infrastructure.StaticHtmlRenderer.UpdateDisplayAsync(in Microsoft.AspNetCore.Components.RenderTree.RenderBatch renderBatch) -> System.Threading.Tasks.Task! -override Microsoft.AspNetCore.Components.Web.RenderModeAutoAttribute.Mode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode! -override Microsoft.AspNetCore.Components.Web.RenderModeServerAttribute.Mode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode! -override Microsoft.AspNetCore.Components.Web.RenderModeWebAssemblyAttribute.Mode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode! +override Microsoft.AspNetCore.Components.Web.RenderModeInteractiveAutoAttribute.Mode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode! +override Microsoft.AspNetCore.Components.Web.RenderModeInteractiveServerAttribute.Mode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode! +override Microsoft.AspNetCore.Components.Web.RenderModeInteractiveWebAssemblyAttribute.Mode.get -> Microsoft.AspNetCore.Components.IComponentRenderMode! static Microsoft.AspNetCore.Components.Forms.Mapping.SupplyParameterFromFormServiceCollectionExtensions.AddSupplyValueFromFormProvider(this Microsoft.Extensions.DependencyInjection.IServiceCollection! serviceCollection) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! -static Microsoft.AspNetCore.Components.Web.RenderMode.Auto.get -> Microsoft.AspNetCore.Components.Web.AutoRenderMode! -static Microsoft.AspNetCore.Components.Web.RenderMode.Server.get -> Microsoft.AspNetCore.Components.Web.ServerRenderMode! -static Microsoft.AspNetCore.Components.Web.RenderMode.WebAssembly.get -> Microsoft.AspNetCore.Components.Web.WebAssemblyRenderMode! +static Microsoft.AspNetCore.Components.Web.RenderMode.InteractiveAuto.get -> Microsoft.AspNetCore.Components.Web.InteractiveAutoRenderMode! +static Microsoft.AspNetCore.Components.Web.RenderMode.InteractiveServer.get -> Microsoft.AspNetCore.Components.Web.InteractiveServerRenderMode! +static Microsoft.AspNetCore.Components.Web.RenderMode.InteractiveWebAssembly.get -> Microsoft.AspNetCore.Components.Web.InteractiveWebAssemblyRenderMode! virtual Microsoft.AspNetCore.Components.HtmlRendering.Infrastructure.StaticHtmlRenderer.RenderChildComponent(System.IO.TextWriter! output, ref Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame componentFrame) -> void virtual Microsoft.AspNetCore.Components.HtmlRendering.Infrastructure.StaticHtmlRenderer.WriteComponentHtml(int componentId, System.IO.TextWriter! output) -> void virtual Microsoft.AspNetCore.Components.RenderTree.WebRenderer.GetWebRendererId() -> int diff --git a/src/Components/Web/src/RenderMode/AutoRenderMode.cs b/src/Components/Web/src/RenderMode/InteractiveAutoRenderMode.cs similarity index 64% rename from src/Components/Web/src/RenderMode/AutoRenderMode.cs rename to src/Components/Web/src/RenderMode/InteractiveAutoRenderMode.cs index 5ff58281cf66..4368795c01dd 100644 --- a/src/Components/Web/src/RenderMode/AutoRenderMode.cs +++ b/src/Components/Web/src/RenderMode/InteractiveAutoRenderMode.cs @@ -4,22 +4,22 @@ namespace Microsoft.AspNetCore.Components.Web; /// -/// A indicating that the component's render mode should be determined automatically based on a policy. +/// A indicating that the component should be interactive, with its hosting platform determined automatically based on a policy. /// -public class AutoRenderMode : IComponentRenderMode +public class InteractiveAutoRenderMode : IComponentRenderMode { /// - /// Constructs an instance of . + /// Constructs an instance of . /// - public AutoRenderMode() : this(true) + public InteractiveAutoRenderMode() : this(true) { } /// - /// Constructs an instance of + /// Constructs an instance of /// /// A flag indicating whether the component should first prerender on the server. The default value is true. - public AutoRenderMode(bool prerender) + public InteractiveAutoRenderMode(bool prerender) { Prerender = prerender; } diff --git a/src/Components/Web/src/RenderMode/ServerRenderMode.cs b/src/Components/Web/src/RenderMode/InteractiveServerRenderMode.cs similarity index 71% rename from src/Components/Web/src/RenderMode/ServerRenderMode.cs rename to src/Components/Web/src/RenderMode/InteractiveServerRenderMode.cs index 2928be842e26..3b3fd1cd2ff9 100644 --- a/src/Components/Web/src/RenderMode/ServerRenderMode.cs +++ b/src/Components/Web/src/RenderMode/InteractiveServerRenderMode.cs @@ -6,20 +6,20 @@ namespace Microsoft.AspNetCore.Components.Web; /// /// A indicating that the component should be rendered interactively on the server using Blazor Server hosting. /// -public class ServerRenderMode : IComponentRenderMode +public class InteractiveServerRenderMode : IComponentRenderMode { /// - /// Constructs an instance of . + /// Constructs an instance of . /// - public ServerRenderMode() : this(true) + public InteractiveServerRenderMode() : this(true) { } /// - /// Constructs an instance of + /// Constructs an instance of /// /// A flag indicating whether the component should first prerender on the server. The default value is true. - public ServerRenderMode(bool prerender) + public InteractiveServerRenderMode(bool prerender) { Prerender = prerender; } diff --git a/src/Components/Web/src/RenderMode/WebAssemblyRenderMode.cs b/src/Components/Web/src/RenderMode/InteractiveWebAssemblyRenderMode.cs similarity index 63% rename from src/Components/Web/src/RenderMode/WebAssemblyRenderMode.cs rename to src/Components/Web/src/RenderMode/InteractiveWebAssemblyRenderMode.cs index d270a39e061b..5aedf3df8995 100644 --- a/src/Components/Web/src/RenderMode/WebAssemblyRenderMode.cs +++ b/src/Components/Web/src/RenderMode/InteractiveWebAssemblyRenderMode.cs @@ -4,22 +4,22 @@ namespace Microsoft.AspNetCore.Components.Web; /// -/// A indicating that the component should be rendered on the client using WebAssembly. +/// A indicating that the component should be rendered interactively on the client using WebAssembly. /// -public class WebAssemblyRenderMode : IComponentRenderMode +public class InteractiveWebAssemblyRenderMode : IComponentRenderMode { /// - /// Constructs an instance of . + /// Constructs an instance of . /// - public WebAssemblyRenderMode() : this(true) + public InteractiveWebAssemblyRenderMode() : this(true) { } /// - /// Constructs an instance of + /// Constructs an instance of /// /// A flag indicating whether the component should first prerender on the server. The default value is true. - public WebAssemblyRenderMode(bool prerender) + public InteractiveWebAssemblyRenderMode(bool prerender) { Prerender = prerender; } diff --git a/src/Components/Web/src/RenderMode/RenderMode.cs b/src/Components/Web/src/RenderMode/RenderMode.cs index dcb53491d565..eed3219eb520 100644 --- a/src/Components/Web/src/RenderMode/RenderMode.cs +++ b/src/Components/Web/src/RenderMode/RenderMode.cs @@ -12,16 +12,16 @@ public static class RenderMode /// Gets an that represents rendering interactively on the server via Blazor Server hosting /// with server-side prerendering. /// - public static ServerRenderMode Server { get; } = new(); + public static InteractiveServerRenderMode InteractiveServer { get; } = new(); /// /// Gets an that represents rendering interactively on the client via Blazor WebAssembly hosting /// with server-side prerendering. /// - public static WebAssemblyRenderMode WebAssembly { get; } = new(); + public static InteractiveWebAssemblyRenderMode InteractiveWebAssembly { get; } = new(); /// /// Gets an that means the render mode will be determined automatically based on a policy. /// - public static AutoRenderMode Auto { get; } = new(); + public static InteractiveAutoRenderMode InteractiveAuto { get; } = new(); } diff --git a/src/Components/Web/src/RenderMode/TemporaryRenderModeAttributes.cs b/src/Components/Web/src/RenderMode/TemporaryRenderModeAttributes.cs index 2f96d74a6bbb..4ca17cd802e3 100644 --- a/src/Components/Web/src/RenderMode/TemporaryRenderModeAttributes.cs +++ b/src/Components/Web/src/RenderMode/TemporaryRenderModeAttributes.cs @@ -7,22 +7,22 @@ namespace Microsoft.AspNetCore.Components.Web; /// Temporary attribute for indicating that a component should render interactively on the server. /// This will later be replaced by a @rendermode directive. /// -public class RenderModeServerAttribute : RenderModeAttribute +public class RenderModeInteractiveServerAttribute : RenderModeAttribute { /// - /// Constructs an instance of . + /// Constructs an instance of . /// - public RenderModeServerAttribute() : this(true) + public RenderModeInteractiveServerAttribute() : this(true) { } /// - /// Constructs an instance of . + /// Constructs an instance of . /// /// A flag indicating whether to prerender the component on the server. The default value is true. - public RenderModeServerAttribute(bool prerender) + public RenderModeInteractiveServerAttribute(bool prerender) { - Mode = new ServerRenderMode(prerender); + Mode = new InteractiveServerRenderMode(prerender); } /// @@ -33,22 +33,22 @@ public RenderModeServerAttribute(bool prerender) /// Temporary attribute for indicating that a component should render interactively using WebAssembly. /// This will later be replaced by a @rendermode directive. /// -public class RenderModeWebAssemblyAttribute : RenderModeAttribute +public class RenderModeInteractiveWebAssemblyAttribute : RenderModeAttribute { /// - /// Constructs an instance of . + /// Constructs an instance of . /// - public RenderModeWebAssemblyAttribute() : this(true) + public RenderModeInteractiveWebAssemblyAttribute() : this(true) { } /// - /// Constructs an instance of . + /// Constructs an instance of . /// /// A flag indicating whether to prerender the component on the server. The default value is true. - public RenderModeWebAssemblyAttribute(bool prerender) + public RenderModeInteractiveWebAssemblyAttribute(bool prerender) { - Mode = new WebAssemblyRenderMode(prerender); + Mode = new InteractiveWebAssemblyRenderMode(prerender); } /// @@ -60,22 +60,22 @@ public RenderModeWebAssemblyAttribute(bool prerender) /// a mode automatically determined. /// This will later be replaced by a @rendermode directive. /// -public class RenderModeAutoAttribute : RenderModeAttribute +public class RenderModeInteractiveAutoAttribute : RenderModeAttribute { /// - /// Constructs an instance of . + /// Constructs an instance of . /// - public RenderModeAutoAttribute() : this(true) + public RenderModeInteractiveAutoAttribute() : this(true) { } /// - /// Constructs an instance of . + /// Constructs an instance of . /// /// A flag indicating whether to prerender the component on the server. The default value is true. - public RenderModeAutoAttribute(bool prerender) + public RenderModeInteractiveAutoAttribute(bool prerender) { - Mode = new AutoRenderMode(prerender); + Mode = new InteractiveAutoRenderMode(prerender); } /// diff --git a/src/Components/WebAssembly/Server/src/Builder/WebAssemblyRazorComponentsEndpointConventionBuilderExtensions.cs b/src/Components/WebAssembly/Server/src/Builder/WebAssemblyRazorComponentsEndpointConventionBuilderExtensions.cs index da9dce4b3a4c..fdc27e415667 100644 --- a/src/Components/WebAssembly/Server/src/Builder/WebAssemblyRazorComponentsEndpointConventionBuilderExtensions.cs +++ b/src/Components/WebAssembly/Server/src/Builder/WebAssemblyRazorComponentsEndpointConventionBuilderExtensions.cs @@ -13,10 +13,10 @@ namespace Microsoft.AspNetCore.Builder; public static class WebAssemblyRazorComponentsEndpointConventionBuilderExtensions { /// - /// Configures the for this application. + /// Configures the application to support the render mode. /// /// The . - public static RazorComponentsEndpointConventionBuilder AddWebAssemblyRenderMode( + public static RazorComponentsEndpointConventionBuilder AddInteractiveWebAssemblyRenderMode( this RazorComponentsEndpointConventionBuilder builder, Action? callback = null) { diff --git a/src/Components/WebAssembly/Server/src/Builder/WebAssemblyRenderModeWithOptions.cs b/src/Components/WebAssembly/Server/src/Builder/WebAssemblyRenderModeWithOptions.cs index ed279b4a360f..1a6650aaa0e1 100644 --- a/src/Components/WebAssembly/Server/src/Builder/WebAssemblyRenderModeWithOptions.cs +++ b/src/Components/WebAssembly/Server/src/Builder/WebAssemblyRenderModeWithOptions.cs @@ -6,7 +6,7 @@ namespace Microsoft.AspNetCore.Builder; -internal class WebAssemblyRenderModeWithOptions(WebAssemblyComponentsEndpointOptions? options) : WebAssemblyRenderMode +internal class WebAssemblyRenderModeWithOptions(WebAssemblyComponentsEndpointOptions? options) : InteractiveWebAssemblyRenderMode { public WebAssemblyComponentsEndpointOptions? EndpointOptions => options; } diff --git a/src/Components/WebAssembly/Server/src/PublicAPI.Unshipped.txt b/src/Components/WebAssembly/Server/src/PublicAPI.Unshipped.txt index e8258a29cb6f..fc6526979e03 100644 --- a/src/Components/WebAssembly/Server/src/PublicAPI.Unshipped.txt +++ b/src/Components/WebAssembly/Server/src/PublicAPI.Unshipped.txt @@ -6,5 +6,5 @@ Microsoft.AspNetCore.Components.WebAssembly.Server.WebAssemblyComponentsEndpoint Microsoft.AspNetCore.Components.WebAssembly.Server.WebAssemblyComponentsEndpointOptions.PathPrefix.set -> void Microsoft.AspNetCore.Components.WebAssembly.Server.WebAssemblyComponentsEndpointOptions.WebAssemblyComponentsEndpointOptions() -> void Microsoft.Extensions.DependencyInjection.WebAssemblyRazorComponentsBuilderExtensions -static Microsoft.AspNetCore.Builder.WebAssemblyRazorComponentsEndpointConventionBuilderExtensions.AddWebAssemblyRenderMode(this Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder, System.Action? callback = null) -> Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! -static Microsoft.Extensions.DependencyInjection.WebAssemblyRazorComponentsBuilderExtensions.AddWebAssemblyComponents(this Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder! builder) -> Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder! +static Microsoft.AspNetCore.Builder.WebAssemblyRazorComponentsEndpointConventionBuilderExtensions.AddInteractiveWebAssemblyRenderMode(this Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! builder, System.Action? callback = null) -> Microsoft.AspNetCore.Builder.RazorComponentsEndpointConventionBuilder! +static Microsoft.Extensions.DependencyInjection.WebAssemblyRazorComponentsBuilderExtensions.AddInteractiveWebAssemblyComponents(this Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder! builder) -> Microsoft.Extensions.DependencyInjection.IRazorComponentsBuilder! diff --git a/src/Components/WebAssembly/Server/src/WebAssemblyRazorComponentsBuilderExtensions.cs b/src/Components/WebAssembly/Server/src/WebAssemblyRazorComponentsBuilderExtensions.cs index b06a812c904f..4e780879c83b 100644 --- a/src/Components/WebAssembly/Server/src/WebAssemblyRazorComponentsBuilderExtensions.cs +++ b/src/Components/WebAssembly/Server/src/WebAssemblyRazorComponentsBuilderExtensions.cs @@ -21,7 +21,7 @@ public static class WebAssemblyRazorComponentsBuilderExtensions /// /// The . /// An that can be used to further customize the configuration. - public static IRazorComponentsBuilder AddWebAssemblyComponents(this IRazorComponentsBuilder builder) + public static IRazorComponentsBuilder AddInteractiveWebAssemblyComponents(this IRazorComponentsBuilder builder) { ArgumentNullException.ThrowIfNull(builder, nameof(builder)); @@ -36,9 +36,9 @@ public override IEnumerable GetEndpointBuilders(IComponent { if (renderMode is not WebAssemblyRenderModeWithOptions wasmWithOptions) { - if (renderMode is WebAssemblyRenderMode) + if (renderMode is InteractiveWebAssemblyRenderMode) { - throw new InvalidOperationException("Invalid render mode. Use AddWebAssemblyRenderMode(Action) to configure the WebAssembly render mode."); + throw new InvalidOperationException("Invalid render mode. Use AddInteractiveWebAssemblyRenderMode(Action) to configure the WebAssembly render mode."); } return Array.Empty(); @@ -62,7 +62,7 @@ public override IEnumerable GetEndpointBuilders(IComponent } public override bool Supports(IComponentRenderMode renderMode) - => renderMode is WebAssemblyRenderMode or AutoRenderMode; + => renderMode is InteractiveWebAssemblyRenderMode or InteractiveAutoRenderMode; private class EndpointRouteBuilder : IEndpointRouteBuilder { diff --git a/src/Components/WebAssembly/WebAssembly/src/Rendering/WebAssemblyRenderer.cs b/src/Components/WebAssembly/WebAssembly/src/Rendering/WebAssemblyRenderer.cs index 47565b9e07bf..29085088e69e 100644 --- a/src/Components/WebAssembly/WebAssembly/src/Rendering/WebAssemblyRenderer.cs +++ b/src/Components/WebAssembly/WebAssembly/src/Rendering/WebAssemblyRenderer.cs @@ -221,7 +221,7 @@ protected override void HandleException(Exception exception) protected override IComponent ResolveComponentForRenderMode([DynamicallyAccessedMembers(Component)] Type componentType, int? parentComponentId, IComponentActivator componentActivator, IComponentRenderMode renderMode) => renderMode switch { - WebAssemblyRenderMode or AutoRenderMode => componentActivator.CreateInstance(componentType), + InteractiveWebAssemblyRenderMode or InteractiveAutoRenderMode => componentActivator.CreateInstance(componentType), _ => throw new NotSupportedException($"Cannot create a component of type '{componentType}' because its render mode '{renderMode}' is not supported by WebAssembly rendering."), }; diff --git a/src/Components/test/testassets/Components.TestServer/BlazorWebServerStartup.cs b/src/Components/test/testassets/Components.TestServer/BlazorWebServerStartup.cs index 82ffef9a70e5..5deffb0d94b1 100644 --- a/src/Components/test/testassets/Components.TestServer/BlazorWebServerStartup.cs +++ b/src/Components/test/testassets/Components.TestServer/BlazorWebServerStartup.cs @@ -22,7 +22,7 @@ public BlazorWebServerStartup(IConfiguration configuration) public void ConfigureServices(IServiceCollection services) { services.AddRazorComponents() - .AddServerComponents(); + .AddInteractiveServerComponents(); // Since tests run in parallel, we use an ephemeral key provider to avoid filesystem // contention issues. @@ -44,7 +44,7 @@ public virtual void Configure(IApplicationBuilder app, IWebHostEnvironment env, app.UseEndpoints(endpoints => { endpoints.MapRazorComponents() - .AddServerRenderMode(); + .AddInteractiveServerRenderMode(); }); }); } diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponentEndpointsStartup.cs b/src/Components/test/testassets/Components.TestServer/RazorComponentEndpointsStartup.cs index 9faafea5b2d5..f2f69e00df34 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponentEndpointsStartup.cs +++ b/src/Components/test/testassets/Components.TestServer/RazorComponentEndpointsStartup.cs @@ -30,8 +30,8 @@ public void ConfigureServices(IServiceCollection services) options.MaxFormMappingRecursionDepth = 5; options.MaxFormMappingCollectionSize = 100; }) - .AddWebAssemblyComponents() - .AddServerComponents(); + .AddInteractiveWebAssemblyComponents() + .AddInteractiveServerComponents(); services.AddHttpContextAccessor(); services.AddSingleton(); services.AddCascadingAuthenticationState(); @@ -59,8 +59,8 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { endpoints.MapRazorComponents() .AddAdditionalAssemblies(Assembly.Load("Components.WasmMinimal")) - .AddServerRenderMode() - .AddWebAssemblyRenderMode(options => options.PathPrefix = "/WasmMinimal"); + .AddInteractiveServerRenderMode() + .AddInteractiveWebAssemblyRenderMode(options => options.PathPrefix = "/WasmMinimal"); NotEnabledStreamingRenderingComponent.MapEndpoints(endpoints); StreamingRenderingForm.MapEndpoints(endpoints); diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/InteractiveStreamingRenderingComponent.razor b/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/InteractiveStreamingRenderingComponent.razor index e9d423e78f14..28ab8cd3690a 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/InteractiveStreamingRenderingComponent.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/InteractiveStreamingRenderingComponent.razor @@ -176,12 +176,12 @@ else { return renderMode switch { - RenderModeId.ServerPrerendered => RenderMode.Server, - RenderModeId.ServerNonPrerendered => new ServerRenderMode(false), - RenderModeId.WebAssemblyPrerendered => RenderMode.WebAssembly, - RenderModeId.WebAssemblyNonPrerendered => new WebAssemblyRenderMode(false), - RenderModeId.AutoPrerendered => RenderMode.Auto, - RenderModeId.AutoNonPrerendered => new AutoRenderMode(false), + RenderModeId.ServerPrerendered => RenderMode.InteractiveServer, + RenderModeId.ServerNonPrerendered => new InteractiveServerRenderMode(false), + RenderModeId.WebAssemblyPrerendered => RenderMode.InteractiveWebAssembly, + RenderModeId.WebAssemblyNonPrerendered => new InteractiveWebAssemblyRenderMode(false), + RenderModeId.AutoPrerendered => RenderMode.InteractiveAuto, + RenderModeId.AutoNonPrerendered => new InteractiveAutoRenderMode(false), _ => throw new InvalidOperationException($"Unknown render mode: {renderMode}"), }; } diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/ServerInteractiveCounter.razor b/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/ServerInteractiveCounter.razor index 7ca2b4b0468c..3c1cc95a98a7 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/ServerInteractiveCounter.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/Components/ServerInteractiveCounter.razor @@ -1,4 +1,4 @@ -@attribute [RenderModeServer] +@attribute [RenderModeInteractiveServer] Server counter diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Auth/InteractiveAuthenticationState.razor b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Auth/InteractiveAuthenticationState.razor index c4383dc6eb4e..9f1f897bea92 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Auth/InteractiveAuthenticationState.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Auth/InteractiveAuthenticationState.razor @@ -1,5 +1,5 @@ @page "/auth/interactive-authentication-state" -@attribute [RenderModeServer] +@attribute [RenderModeInteractiveServer] @inject NavigationManager Nav @using BasicTestApp.AuthTest diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/CallSiteInteractiveComponents.razor b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/CallSiteInteractiveComponents.razor index 92fe608662c3..0bf9207bdd74 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/CallSiteInteractiveComponents.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/CallSiteInteractiveComponents.razor @@ -5,13 +5,13 @@ @if (ServerIncrementAmount.HasValue) { - +
} @if (WebAssemblyIncrementAmount.HasValue) { - +
} diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/EnhancedNav/PageWithInteractiveComponentsThatNavigate.razor b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/EnhancedNav/PageWithInteractiveComponentsThatNavigate.razor index a16e927c4231..42709b0405d8 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/EnhancedNav/PageWithInteractiveComponentsThatNavigate.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/EnhancedNav/PageWithInteractiveComponentsThatNavigate.razor @@ -32,11 +32,11 @@ else { if (string.Equals("server", RenderMode, StringComparison.OrdinalIgnoreCase)) { - _renderMode = new ServerRenderMode(prerender: false); + _renderMode = new InteractiveServerRenderMode(prerender: false); } else if (string.Equals("webassembly", RenderMode, StringComparison.OrdinalIgnoreCase)) { - _renderMode = new WebAssemblyRenderMode(prerender: false); + _renderMode = new InteractiveWebAssemblyRenderMode(prerender: false); } } } diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Interactivity/VirtualizationTransitionToInteractivity.razor b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Interactivity/VirtualizationTransitionToInteractivity.razor index aa5ec155812a..5c750517e43c 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Interactivity/VirtualizationTransitionToInteractivity.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Interactivity/VirtualizationTransitionToInteractivity.razor @@ -3,11 +3,11 @@

Server

- +

WebAssembly

- + @code { private readonly string[] _items = Enumerable.Range(1, 50) diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Rendering/LargeHtml.razor b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Rendering/LargeHtml.razor index 435d7d150ad5..f201c2243509 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Rendering/LargeHtml.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/Pages/Rendering/LargeHtml.razor @@ -1,10 +1,10 @@ @page "/large-html-server"

WebAssembly with pre-rendering

- +

Server with pre-rendering

- +

Server without pre-rendering

- + diff --git a/src/Components/test/testassets/Components.TestServer/RazorComponents/Root.razor b/src/Components/test/testassets/Components.TestServer/RazorComponents/Root.razor index dda0852a805a..2673a96e0858 100644 --- a/src/Components/test/testassets/Components.TestServer/RazorComponents/Root.razor +++ b/src/Components/test/testassets/Components.TestServer/RazorComponents/Root.razor @@ -9,7 +9,7 @@ - + diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Pages/Counter.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Pages/Counter.razor index 8e77f9844411..2b7d39f349f2 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Pages/Counter.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Pages/Counter.razor @@ -1,12 +1,7 @@ @page "/counter" -@*#if (UseWebAssembly) --> - - - - - -##else -@attribute [RenderModeServer] +@*#if (!InteractiveAtRoot) --> +@attribute [RenderModeInteractiveServer] +##endif*@ Counter @@ -24,4 +19,3 @@ currentCount++; } } -##endif*@ diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Pages/Weather.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Pages/Weather.razor index 12a9986a8359..ccf7be47ec3e 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Pages/Weather.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Pages/Weather.razor @@ -1,11 +1,13 @@ @page "/weather" +@*#if (!InteractiveAtRoot) --> @attribute [StreamRendering(true)] +##endif*@ Weather

Weather

-

This component demonstrates showing data from the server.

+

This component demonstrates showing data.

@if (forecasts == null) { @@ -41,7 +43,11 @@ else protected override async Task OnInitializedAsync() { +@*#if (InteractiveAtRoot) --> + // Simulate asynchronous loading to demonstrate a loading indicator +##else // Simulate asynchronous loading to demonstrate streaming rendering +##endif*@ await Task.Delay(500); var startDate = DateOnly.FromDateTime(DateTime.Now); diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Routes.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Routes.razor index caaf8602c6fd..25a5e5887bfe 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Routes.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/Routes.razor @@ -1,7 +1,7 @@ -@*#if (UseWebAssembly) --> - +@*#if (UseWebAssembly && !InteractiveAtRoot) + ##else - + ##endif*@ diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/_Imports.razor b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/_Imports.razor index 1d7133e50d9a..68ab14b7c1e6 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/_Imports.razor +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Components/_Imports.razor @@ -6,4 +6,7 @@ @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using BlazorWeb_CSharp +@*#if (UseWebAssembly) --> +@using BlazorWeb_CSharp.Client +##endif*@ @using BlazorWeb_CSharp.Components diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.Main.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.Main.cs index ee561e30092c..c241a8dd7610 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.Main.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.Main.cs @@ -1,4 +1,6 @@ - +#if (UseWebAssembly) +using BlazorWeb_CSharp.Client.Pages; +#endif using BlazorWeb_CSharp.Components; namespace BlazorWeb_CSharp; @@ -15,12 +17,12 @@ public static void Main(string[] args) #else builder.Services.AddRazorComponents() #if (UseServer && UseWebAssembly) - .AddServerComponents() - .AddWebAssemblyComponents(); + .AddInteractiveServerComponents() + .AddInteractiveWebAssemblyComponents(); #elif(UseServer) - .AddServerComponents(); + .AddInteractiveServerComponents(); #elif(UseWebAssembly) - .AddWebAssemblyComponents(); + .AddInteractiveWebAssemblyComponents(); #endif #endif @@ -52,14 +54,16 @@ public static void Main(string[] args) #if (UseServer && UseWebAssembly) app.MapRazorComponents() - .AddServerRenderMode() - .AddWebAssemblyRenderMode(); + .AddInteractiveServerRenderMode() + .AddInteractiveWebAssemblyRenderMode() + .AddAdditionalAssemblies(typeof(Counter).Assembly); #elif (UseServer) app.MapRazorComponents() - .AddServerRenderMode(); + .AddInteractiveServerRenderMode(); #elif (UseWebAssembly) app.MapRazorComponents() - .AddWebAssemblyRenderMode(); + .AddInteractiveWebAssemblyRenderMode() + .AddAdditionalAssemblies(typeof(Counter).Assembly); #else app.MapRazorComponents(); #endif diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.cs index b292ab166695..5470d2ce484d 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/Program.cs @@ -1,3 +1,6 @@ +#if (UseWebAssembly) +using BlazorWeb_CSharp.Client.Pages; +#endif using BlazorWeb_CSharp.Components; var builder = WebApplication.CreateBuilder(args); @@ -8,12 +11,12 @@ #else builder.Services.AddRazorComponents() #if (UseServer && UseWebAssembly) - .AddServerComponents() - .AddWebAssemblyComponents(); + .AddInteractiveServerComponents() + .AddInteractiveWebAssemblyComponents(); #elif(UseServer) - .AddServerComponents(); + .AddInteractiveServerComponents(); #elif(UseWebAssembly) - .AddWebAssemblyComponents(); + .AddInteractiveWebAssemblyComponents(); #endif #endif @@ -45,14 +48,16 @@ #if (UseServer && UseWebAssembly) app.MapRazorComponents() - .AddServerRenderMode() - .AddWebAssemblyRenderMode(); + .AddInteractiveServerRenderMode() + .AddInteractiveWebAssemblyRenderMode() + .AddAdditionalAssemblies(typeof(Counter).Assembly); #elif (UseServer) app.MapRazorComponents() - .AddServerRenderMode(); + .AddInteractiveServerRenderMode(); #elif (UseWebAssembly) app.MapRazorComponents() - .AddWebAssemblyRenderMode(); + .AddInteractiveWebAssemblyRenderMode() + .AddAdditionalAssemblies(typeof(Counter).Assembly); #else app.MapRazorComponents(); #endif diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/wwwroot/app.css b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/wwwroot/app.css index 6e447a78f503..6aa275650f20 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/wwwroot/app.css +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWeb-CSharp/BlazorWeb-CSharp/wwwroot/app.css @@ -3,10 +3,6 @@ html, body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } -h1:focus { - outline: none; -} - a, .btn-link { color: #0071c1; } @@ -26,6 +22,10 @@ a, .btn-link { } /*#endif*/ +h1:focus { + outline: none; +} + .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } diff --git a/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorWebTemplateTest.cs b/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorWebTemplateTest.cs index 4a33d57d93c9..31b79308c7f5 100644 --- a/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorWebTemplateTest.cs +++ b/src/ProjectTemplates/test/Templates.Blazor.Tests/BlazorWebTemplateTest.cs @@ -69,7 +69,7 @@ public async Task BlazorWebTemplate_NoAuth(string[] args) } }; - if (args.Contains(ArgConstants.UseServer)) + if (!args.Contains(ArgConstants.NoInteractivity)) { pages.Add(new Page { @@ -102,10 +102,10 @@ public async Task BlazorWebTemplate_NoAuth(string[] args) new[] { ArgConstants.UseProgramMain }, new[] { ArgConstants.NoHttps }, new[] { ArgConstants.UseProgramMain, ArgConstants.NoHttps }, - new[] { ArgConstants.UseServer }, - new[] { ArgConstants.UseServer, ArgConstants.UseProgramMain }, - new[] { ArgConstants.UseServer, ArgConstants.NoHttps }, - new[] { ArgConstants.UseServer, ArgConstants.UseProgramMain, ArgConstants.NoHttps } + new[] { ArgConstants.NoInteractivity }, + new[] { ArgConstants.NoInteractivity, ArgConstants.UseProgramMain }, + new[] { ArgConstants.NoInteractivity, ArgConstants.NoHttps }, + new[] { ArgConstants.NoInteractivity, ArgConstants.UseProgramMain, ArgConstants.NoHttps } }; private string ReadFile(string basePath, string path) diff --git a/src/ProjectTemplates/test/Templates.Tests/template-baselines.json b/src/ProjectTemplates/test/Templates.Tests/template-baselines.json index 030ce2f80017..6b982d80f7b2 100644 --- a/src/ProjectTemplates/test/Templates.Tests/template-baselines.json +++ b/src/ProjectTemplates/test/Templates.Tests/template-baselines.json @@ -506,7 +506,7 @@ "blazor": { "NoInteractivity": { "Template": "blazor", - "Arguments": "new blazor --use-server false", + "Arguments": "new blazor --interactivity none", "Files": [ "appsettings.Development.json", "appsettings.json", @@ -556,8 +556,8 @@ "AuthOption": "None" }, "UseWebAssembly": { - "Template": "web", - "Arguments": "new blazor --use-server false --use-wasm", + "Template": "blazor", + "Arguments": "new blazor --interactivity webassembly", "Files": [ "{ProjectName}.sln", "{ProjectName}/appsettings.Development.json", @@ -571,7 +571,6 @@ "{ProjectName}/Components/Layout/MainLayout.razor.css", "{ProjectName}/Components/Layout/NavMenu.razor", "{ProjectName}/Components/Layout/NavMenu.razor.css", - "{ProjectName}/Components/Pages/Counter.razor", "{ProjectName}/Components/Pages/Home.razor", "{ProjectName}/Components/Pages/Weather.razor", "{ProjectName}/Properties/launchSettings.json", @@ -589,8 +588,8 @@ "AuthOption": "None" }, "UseServerAndWebAssembly": { - "Template": "web", - "Arguments": "new blazor --use-wasm", + "Template": "blazor", + "Arguments": "new blazor --interactivity auto", "Files": [ "{ProjectName}.sln", "{ProjectName}/appsettings.Development.json", @@ -604,7 +603,6 @@ "{ProjectName}/Components/Layout/MainLayout.razor.css", "{ProjectName}/Components/Layout/NavMenu.razor", "{ProjectName}/Components/Layout/NavMenu.razor.css", - "{ProjectName}/Components/Pages/Counter.razor", "{ProjectName}/Components/Pages/Home.razor", "{ProjectName}/Components/Pages/Weather.razor", "{ProjectName}/Properties/launchSettings.json", @@ -621,9 +619,99 @@ ], "AuthOption": "None" }, + "UseServerInteractiveAtRoot": { + "Template": "blazor", + "Arguments": "new blazor --all-interactive", + "Files": [ + "appsettings.Development.json", + "appsettings.json", + "Components/App.razor", + "Components/Layout/MainLayout.razor", + "Components/Layout/MainLayout.razor.css", + "Components/Layout/NavMenu.razor", + "Components/Layout/NavMenu.razor.css", + "Components/Pages/Counter.razor", + "Components/Pages/Home.razor", + "Components/Pages/Weather.razor", + "Components/Routes.razor", + "Components/_Imports.razor", + "Program.cs", + "Properties/launchSettings.json", + "{ProjectName}.csproj", + "wwwroot/app.css", + "wwwroot/bootstrap/bootstrap.min.css", + "wwwroot/bootstrap/bootstrap.min.css.map", + "wwwroot/favicon.png" + ], + "AuthOption": "None" + }, + "UseWebAssemblyInteractiveAtRoot": { + "Template": "blazor", + "Arguments": "new blazor --interactivity webassembly --all-interactive", + "Files": [ + "{ProjectName}/appsettings.Development.json", + "{ProjectName}/appsettings.json", + "{ProjectName}/Components/App.razor", + "{ProjectName}/Components/_Imports.razor", + "{ProjectName}/Program.cs", + "{ProjectName}/Properties/launchSettings.json", + "{ProjectName}/{ProjectName}.csproj", + "{ProjectName}/wwwroot/app.css", + "{ProjectName}/wwwroot/bootstrap/bootstrap.min.css", + "{ProjectName}/wwwroot/bootstrap/bootstrap.min.css.map", + "{ProjectName}/wwwroot/favicon.png", + "{ProjectName}.Client/Layout/MainLayout.razor", + "{ProjectName}.Client/Layout/MainLayout.razor.css", + "{ProjectName}.Client/Layout/NavMenu.razor", + "{ProjectName}.Client/Layout/NavMenu.razor.css", + "{ProjectName}.Client/Pages/Counter.razor", + "{ProjectName}.Client/Pages/Home.razor", + "{ProjectName}.Client/Pages/Weather.razor", + "{ProjectName}.Client/Program.cs", + "{ProjectName}.Client/Routes.razor", + "{ProjectName}.Client/{ProjectName}.Client.csproj", + "{ProjectName}.Client/wwwroot/appsettings.Development.json", + "{ProjectName}.Client/wwwroot/appsettings.json", + "{ProjectName}.Client/_Imports.razor", + "{ProjectName}.sln" + ], + "AuthOption": "None" + }, + "UseServerAndWebAssemblyInteractiveAtRoot": { + "Template": "blazor", + "Arguments": "new blazor --interactivity auto --all-interactive", + "Files": [ + "{ProjectName}/appsettings.Development.json", + "{ProjectName}/appsettings.json", + "{ProjectName}/Components/App.razor", + "{ProjectName}/Components/_Imports.razor", + "{ProjectName}/Program.cs", + "{ProjectName}/Properties/launchSettings.json", + "{ProjectName}/{ProjectName}.csproj", + "{ProjectName}/wwwroot/app.css", + "{ProjectName}/wwwroot/bootstrap/bootstrap.min.css", + "{ProjectName}/wwwroot/bootstrap/bootstrap.min.css.map", + "{ProjectName}/wwwroot/favicon.png", + "{ProjectName}.Client/Layout/MainLayout.razor", + "{ProjectName}.Client/Layout/MainLayout.razor.css", + "{ProjectName}.Client/Layout/NavMenu.razor", + "{ProjectName}.Client/Layout/NavMenu.razor.css", + "{ProjectName}.Client/Pages/Counter.razor", + "{ProjectName}.Client/Pages/Home.razor", + "{ProjectName}.Client/Pages/Weather.razor", + "{ProjectName}.Client/Program.cs", + "{ProjectName}.Client/Routes.razor", + "{ProjectName}.Client/{ProjectName}.Client.csproj", + "{ProjectName}.Client/wwwroot/appsettings.Development.json", + "{ProjectName}.Client/wwwroot/appsettings.json", + "{ProjectName}.Client/_Imports.razor", + "{ProjectName}.sln" + ], + "AuthOption": "None" + }, "EmptyNoInteractivity": { "Template": "blazor", - "Arguments": "new blazor --use-server false --empty", + "Arguments": "new blazor --interactivity none --empty", "Files": [ "appsettings.Development.json", "appsettings.json", @@ -660,8 +748,8 @@ "AuthOption": "None" }, "EmptyUseWebAssembly": { - "Template": "web", - "Arguments": "new blazor --use-server false --use-wasm --empty", + "Template": "blazor", + "Arguments": "new blazor --interactivity webassembly --empty", "Files": [ "{ProjectName}.sln", "{ProjectName}/appsettings.Development.json", @@ -683,8 +771,8 @@ "AuthOption": "None" }, "EmptyUseServerAndWebAssembly": { - "Template": "web", - "Arguments": "new blazor --use-wasm --empty", + "Template": "blazor", + "Arguments": "new blazor --interactivity auto --empty", "Files": [ "{ProjectName}.sln", "{ProjectName}/appsettings.Development.json",