diff --git a/.gitignore b/.gitignore
index 5b8dfe9c11..b9576fda4c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@
*.user
*.userosscache
*.sln.docstates
+*.editorconfig
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
diff --git a/framework/.editorconfig b/framework/.editorconfig
deleted file mode 100644
index 9f20b90112..0000000000
--- a/framework/.editorconfig
+++ /dev/null
@@ -1,131 +0,0 @@
-# Rules in this file were initially inferred by Visual Studio IntelliCode from the D:\Projects\Volosoft\abp\framework codebase based on best match to current usage at 2.10.2020.
-# You can modify the rules from these initially generated values to suit your own policies
-# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
-[*.cs]
-
-
-#Core editorconfig formatting - indentation
-
-#use soft tabs (spaces) for indentation
-indent_style = space
-
-#Formatting - indentation options
-
-#indent switch case contents.
-csharp_indent_case_contents = true
-#indent switch labels
-csharp_indent_switch_labels = true
-
-#Formatting - new line options
-
-#place catch statements on a new line
-csharp_new_line_before_catch = true
-#place else statements on a new line
-csharp_new_line_before_else = true
-#require members of object intializers to be on separate lines
-csharp_new_line_before_members_in_object_initializers = true
-#require braces to be on a new line for accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, and properties (also known as "Allman" style)
-csharp_new_line_before_open_brace = accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, properties
-
-#Formatting - organize using options
-
-#sort System.* using directives alphabetically, and place them before other usings
-dotnet_sort_system_directives_first = true
-
-#Formatting - spacing options
-
-csharp_space_after_cast = false
-csharp_space_after_colon_in_inheritance_clause = true
-csharp_space_after_comma = true
-csharp_space_after_dot = false
-csharp_space_after_keywords_in_control_flow_statements = true
-csharp_space_after_semicolon_in_for_statement = true
-csharp_space_around_binary_operators = before_and_after
-csharp_space_around_declaration_statements = false
-csharp_space_before_colon_in_inheritance_clause = true
-csharp_space_before_comma = false
-csharp_space_before_dot = false
-csharp_space_before_open_square_brackets = false
-csharp_space_before_semicolon_in_for_statement = false
-csharp_space_between_empty_square_brackets = false
-csharp_space_between_method_call_empty_parameter_list_parentheses = false
-csharp_space_between_method_call_name_and_opening_parenthesis = false
-csharp_space_between_method_call_parameter_list_parentheses = false
-csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
-csharp_space_between_method_declaration_name_and_open_parenthesis = false
-csharp_space_between_method_declaration_parameter_list_parentheses = false
-csharp_space_between_parentheses = false
-csharp_space_between_square_brackets = false
-
-#Formatting - wrapping options
-
-#leave code block on single line
-csharp_preserve_single_line_blocks = true
-
-#Style - Code block preferences
-
-#prefer curly braces even for one line of code
-csharp_prefer_braces = true:suggestion
-
-#Style - expression bodied member options
-
-#prefer block bodies for constructors
-csharp_style_expression_bodied_constructors = false:suggestion
-#prefer block bodies for methods
-csharp_style_expression_bodied_methods = false:suggestion
-#prefer expression-bodied members for properties
-csharp_style_expression_bodied_properties = true:suggestion
-
-#Style - expression level options
-
-#prefer out variables to be declared inline in the argument list of a method call when possible
-csharp_style_inlined_variable_declaration = true:suggestion
-#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them
-dotnet_style_predefined_type_for_member_access = true:suggestion
-
-#Style - Expression-level preferences
-
-#prefer default over default(T)
-csharp_prefer_simple_default_expression = true:suggestion
-#prefer objects to be initialized using object initializers when possible
-dotnet_style_object_initializer = true:suggestion
-#prefer inferred tuple element names
-dotnet_style_prefer_inferred_tuple_names = true:suggestion
-
-#Style - implicit and explicit types
-
-#prefer var over explicit type in all cases, unless overridden by another code style rule
-csharp_style_var_elsewhere = true:suggestion
-#prefer var is used to declare variables with built-in system types such as int
-csharp_style_var_for_built_in_types = true:suggestion
-#prefer var when the type is already mentioned on the right-hand side of a declaration expression
-csharp_style_var_when_type_is_apparent = true:suggestion
-
-#Style - language keyword and framework type options
-
-#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them
-dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
-
-#Style - modifier options
-
-#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods.
-dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
-
-#Style - Modifier preferences
-
-#when this rule is set to a list of modifiers, prefer the specified ordering.
-csharp_preferred_modifier_order = public,protected,private,virtual,async,static,override,readonly,abstract:suggestion
-
-#Style - Pattern matching
-
-#prefer pattern matching instead of is expression with type casts
-csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
-
-#Style - qualification options
-
-#prefer fields not to be prefaced with this. or Me. in Visual Basic
-dotnet_style_qualification_for_field = false:suggestion
-#prefer methods not to be prefaced with this. or Me. in Visual Basic
-dotnet_style_qualification_for_method = false:suggestion
-#prefer properties not to be prefaced with this. or Me. in Visual Basic
-dotnet_style_qualification_for_property = false:suggestion
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor
index 45496a7984..20b96bef45 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor
@@ -22,4 +22,5 @@
@Body
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs
index a9816dc325..753dad4dcd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs
@@ -1,12 +1,13 @@
-using System.Threading.Tasks;
+using System;
+using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Components.WebAssembly
{
public interface IUiNotificationService
{
- Task Info(string message);
- Task Success(string message);
- Task Warn(string message);
- Task Error(string message);
+ Task Info(string message, string title = null, Action options = null);
+ Task Success(string message, string title = null, Action options = null);
+ Task Warn(string message, string title = null, Action options = null);
+ Task Error(string message, string title = null, Action options = null);
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs
index 85ee10287c..950cca3047 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs
@@ -1,25 +1,26 @@
-using System.Threading.Tasks;
+using System;
+using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Components.WebAssembly
{
public class NullUiNotificationService : IUiNotificationService, ITransientDependency
{
- public Task Info(string message)
+ public Task Info(string message, string title = null, Action options = null)
{
return Task.CompletedTask;
}
- public Task Success(string message)
+ public Task Success(string message, string title = null, Action options = null)
{
return Task.CompletedTask;
}
- public Task Warn(string message)
+ public Task Warn(string message, string title = null, Action options = null)
{
return Task.CompletedTask;
}
- public Task Error(string message)
+ public Task Error(string message, string title = null, Action options = null)
{
return Task.CompletedTask;
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationEventArgs.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationEventArgs.cs
new file mode 100644
index 0000000000..402bfb329b
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationEventArgs.cs
@@ -0,0 +1,23 @@
+using System;
+
+namespace Volo.Abp.AspNetCore.Components.WebAssembly
+{
+ public class UiNotificationEventArgs : EventArgs
+ {
+ public UiNotificationEventArgs(UiNotificationType notificationType, string message, string title, UiNotificationOptions options)
+ {
+ NotificationType = notificationType;
+ Message = message;
+ Title = title;
+ Options = options;
+ }
+
+ public UiNotificationType NotificationType { get; set; }
+
+ public string Message { get; }
+
+ public string Title { get; }
+
+ public UiNotificationOptions Options { get; }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs
new file mode 100644
index 0000000000..ae8a400368
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationOptions.cs
@@ -0,0 +1,20 @@
+using Volo.Abp.Localization;
+
+namespace Volo.Abp.AspNetCore.Components.WebAssembly
+{
+ ///
+ /// Options to override notification appearance.
+ ///
+ public class UiNotificationOptions
+ {
+ ///
+ /// Custom text for the Ok button.
+ ///
+ public ILocalizableString OkButtonText { get; set; }
+
+ ///
+ /// Custom icon for the Ok button.
+ ///
+ public object OkButtonIcon { get; set; }
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationType.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationType.cs
new file mode 100644
index 0000000000..78f3a86bb5
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiNotificationType.cs
@@ -0,0 +1,10 @@
+namespace Volo.Abp.AspNetCore.Components.WebAssembly
+{
+ public enum UiNotificationType
+ {
+ Info,
+ Success,
+ Warning,
+ Error,
+ }
+}
diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs
index 549a1f4d07..05c1cd5163 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs
+++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiNotificationService.cs
@@ -1,40 +1,73 @@
-using System.Threading.Tasks;
-using Microsoft.Extensions.Logging;
-using Microsoft.Extensions.Logging.Abstractions;
+using System;
+using System.Threading.Tasks;
+using Localization.Resources.AbpUi;
+using Microsoft.Extensions.Localization;
using Volo.Abp.AspNetCore.Components.WebAssembly;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.BlazoriseUI
{
[Dependency(ReplaceServices = true)]
- public class BlazoriseUiNotificationService : IUiNotificationService, ITransientDependency
+ public class BlazoriseUiNotificationService : IUiNotificationService, IScopedDependency
{
- public ILogger Logger { get; set; }
+ ///
+ /// An event raised after the notification is received.
+ ///
+ public event EventHandler NotificationReceived;
- public BlazoriseUiNotificationService()
+ private readonly IStringLocalizer localizer;
+
+ public BlazoriseUiNotificationService(
+ IStringLocalizer localizer)
{
- Logger = NullLogger.Instance;
+ this.localizer = localizer;
}
- public Task Info(string message)
+ public Task Info(string message, string title = null, Action options = null)
{
- Logger.LogInformation(message);
+ var uiNotificationOptions = CreateDefaultOptions();
+ options?.Invoke(uiNotificationOptions);
+
+ NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Info, message, title, uiNotificationOptions));
+
return Task.CompletedTask;
}
- public Task Success(string message)
+ public Task Success(string message, string title = null, Action options = null)
{
+ var uiNotificationOptions = CreateDefaultOptions();
+ options?.Invoke(uiNotificationOptions);
+
+ NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Success, message, title, uiNotificationOptions));
+
return Task.CompletedTask;
}
- public Task Warn(string message)
+ public Task Warn(string message, string title = null, Action options = null)
{
+ var uiNotificationOptions = CreateDefaultOptions();
+ options?.Invoke(uiNotificationOptions);
+
+ NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Warning, message, title, uiNotificationOptions));
+
return Task.CompletedTask;
}
- public Task Error(string message)
+ public Task Error(string message, string title = null, Action options = null)
{
+ var uiNotificationOptions = CreateDefaultOptions();
+ options?.Invoke(uiNotificationOptions);
+
+ NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Error, message, title, uiNotificationOptions));
+
return Task.CompletedTask;
}
+
+ protected virtual UiNotificationOptions CreateDefaultOptions()
+ {
+ return new UiNotificationOptions
+ {
+ };
+ }
}
}
diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor
new file mode 100644
index 0000000000..349eee2c40
--- /dev/null
+++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs
new file mode 100644
index 0000000000..67c890f922
--- /dev/null
+++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiNotificationAlert.razor.cs
@@ -0,0 +1,76 @@
+using System;
+using System.Threading.Tasks;
+using Blazorise.Snackbar;
+using Microsoft.AspNetCore.Components;
+using Microsoft.Extensions.Localization;
+using Volo.Abp.AspNetCore.Components.WebAssembly;
+
+namespace Volo.Abp.BlazoriseUI.Components
+{
+ public partial class UiNotificationAlert : ComponentBase, IDisposable
+ {
+ protected SnackbarStack SnackbarStack { get; set; }
+
+ [Parameter] public UiNotificationType NotificationType { get; set; }
+
+ [Parameter] public string Message { get; set; }
+
+ [Parameter] public string Title { get; set; }
+
+ [Parameter] public UiNotificationOptions Options { get; set; }
+
+ [Parameter] public EventCallback Okayed { get; set; }
+
+ [Parameter] public EventCallback Closed { get; set; }
+
+ [Inject] protected BlazoriseUiNotificationService UiNotificationService { get; set; }
+
+ [Inject] protected IStringLocalizerFactory StringLocalizerFactory { get; set; }
+
+ protected virtual SnackbarColor GetSnackbarColor(UiNotificationType notificationType)
+ {
+ return notificationType switch
+ {
+ UiNotificationType.Info => SnackbarColor.Info,
+ UiNotificationType.Success => SnackbarColor.Success,
+ UiNotificationType.Warning => SnackbarColor.Warning,
+ UiNotificationType.Error => SnackbarColor.Danger,
+ _ => SnackbarColor.None,
+ };
+ }
+
+ protected override void OnInitialized()
+ {
+ base.OnInitialized();
+
+ UiNotificationService.NotificationReceived += OnNotificationReceived;
+ }
+
+ protected virtual void OnNotificationReceived(object sender, UiNotificationEventArgs e)
+ {
+ NotificationType = e.NotificationType;
+ Message = e.Message;
+ Title = e.Title;
+ Options = e.Options;
+
+ var okButtonText = Options?.OkButtonText?.Localize(StringLocalizerFactory);
+
+ SnackbarStack.Push(Message, GetSnackbarColor( e.NotificationType ), okButtonText);
+ }
+
+ public virtual void Dispose()
+ {
+ if (UiNotificationService != null)
+ {
+ UiNotificationService.NotificationReceived -= OnNotificationReceived;
+ }
+ }
+
+ protected virtual Task OnSnackbarClosed(SnackbarClosedEventArgs eventArgs)
+ {
+ return eventArgs.CloseReason == SnackbarCloseReason.UserClosed
+ ? Okayed.InvokeAsync()
+ : Closed.InvokeAsync();
+ }
+ }
+}
diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
index 47e8b32f00..7a63fe11c0 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
+++ b/framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
@@ -14,6 +14,7 @@
+
diff --git a/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor b/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor
index 37be71828c..0aae8ed947 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor
+++ b/framework/src/Volo.Abp.BlazoriseUI/_Imports.razor
@@ -1,2 +1,3 @@
@using Microsoft.AspNetCore.Components.Web
-@using Blazorise
\ No newline at end of file
+@using Blazorise
+@using Blazorise.Snackbar
\ No newline at end of file
diff --git a/modules/identity/.editorconfig b/modules/identity/.editorconfig
deleted file mode 100644
index 9f20b90112..0000000000
--- a/modules/identity/.editorconfig
+++ /dev/null
@@ -1,131 +0,0 @@
-# Rules in this file were initially inferred by Visual Studio IntelliCode from the D:\Projects\Volosoft\abp\framework codebase based on best match to current usage at 2.10.2020.
-# You can modify the rules from these initially generated values to suit your own policies
-# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
-[*.cs]
-
-
-#Core editorconfig formatting - indentation
-
-#use soft tabs (spaces) for indentation
-indent_style = space
-
-#Formatting - indentation options
-
-#indent switch case contents.
-csharp_indent_case_contents = true
-#indent switch labels
-csharp_indent_switch_labels = true
-
-#Formatting - new line options
-
-#place catch statements on a new line
-csharp_new_line_before_catch = true
-#place else statements on a new line
-csharp_new_line_before_else = true
-#require members of object intializers to be on separate lines
-csharp_new_line_before_members_in_object_initializers = true
-#require braces to be on a new line for accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, and properties (also known as "Allman" style)
-csharp_new_line_before_open_brace = accessors, methods, lambdas, object_collection_array_initializers, control_blocks, types, properties
-
-#Formatting - organize using options
-
-#sort System.* using directives alphabetically, and place them before other usings
-dotnet_sort_system_directives_first = true
-
-#Formatting - spacing options
-
-csharp_space_after_cast = false
-csharp_space_after_colon_in_inheritance_clause = true
-csharp_space_after_comma = true
-csharp_space_after_dot = false
-csharp_space_after_keywords_in_control_flow_statements = true
-csharp_space_after_semicolon_in_for_statement = true
-csharp_space_around_binary_operators = before_and_after
-csharp_space_around_declaration_statements = false
-csharp_space_before_colon_in_inheritance_clause = true
-csharp_space_before_comma = false
-csharp_space_before_dot = false
-csharp_space_before_open_square_brackets = false
-csharp_space_before_semicolon_in_for_statement = false
-csharp_space_between_empty_square_brackets = false
-csharp_space_between_method_call_empty_parameter_list_parentheses = false
-csharp_space_between_method_call_name_and_opening_parenthesis = false
-csharp_space_between_method_call_parameter_list_parentheses = false
-csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
-csharp_space_between_method_declaration_name_and_open_parenthesis = false
-csharp_space_between_method_declaration_parameter_list_parentheses = false
-csharp_space_between_parentheses = false
-csharp_space_between_square_brackets = false
-
-#Formatting - wrapping options
-
-#leave code block on single line
-csharp_preserve_single_line_blocks = true
-
-#Style - Code block preferences
-
-#prefer curly braces even for one line of code
-csharp_prefer_braces = true:suggestion
-
-#Style - expression bodied member options
-
-#prefer block bodies for constructors
-csharp_style_expression_bodied_constructors = false:suggestion
-#prefer block bodies for methods
-csharp_style_expression_bodied_methods = false:suggestion
-#prefer expression-bodied members for properties
-csharp_style_expression_bodied_properties = true:suggestion
-
-#Style - expression level options
-
-#prefer out variables to be declared inline in the argument list of a method call when possible
-csharp_style_inlined_variable_declaration = true:suggestion
-#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them
-dotnet_style_predefined_type_for_member_access = true:suggestion
-
-#Style - Expression-level preferences
-
-#prefer default over default(T)
-csharp_prefer_simple_default_expression = true:suggestion
-#prefer objects to be initialized using object initializers when possible
-dotnet_style_object_initializer = true:suggestion
-#prefer inferred tuple element names
-dotnet_style_prefer_inferred_tuple_names = true:suggestion
-
-#Style - implicit and explicit types
-
-#prefer var over explicit type in all cases, unless overridden by another code style rule
-csharp_style_var_elsewhere = true:suggestion
-#prefer var is used to declare variables with built-in system types such as int
-csharp_style_var_for_built_in_types = true:suggestion
-#prefer var when the type is already mentioned on the right-hand side of a declaration expression
-csharp_style_var_when_type_is_apparent = true:suggestion
-
-#Style - language keyword and framework type options
-
-#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them
-dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
-
-#Style - modifier options
-
-#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods.
-dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
-
-#Style - Modifier preferences
-
-#when this rule is set to a list of modifiers, prefer the specified ordering.
-csharp_preferred_modifier_order = public,protected,private,virtual,async,static,override,readonly,abstract:suggestion
-
-#Style - Pattern matching
-
-#prefer pattern matching instead of is expression with type casts
-csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
-
-#Style - qualification options
-
-#prefer fields not to be prefaced with this. or Me. in Visual Basic
-dotnet_style_qualification_for_field = false:suggestion
-#prefer methods not to be prefaced with this. or Me. in Visual Basic
-dotnet_style_qualification_for_method = false:suggestion
-#prefer properties not to be prefaced with this. or Me. in Visual Basic
-dotnet_style_qualification_for_property = false:suggestion
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html
index c9a25182e4..bf8c9d7902 100644
--- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html
+++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html
@@ -12,6 +12,7 @@
+