diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 4b5b456a934..d296a49ed4e 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -3,6 +3,8 @@ "allow": [ "Bash(yarn nx g:*)", "Bash(npx vitest:*)", + "Bash(xargs:*)", + "Bash(dotnet build:*)", "Bash(git show:*)" ] } diff --git a/Directory.Packages.props b/Directory.Packages.props index 38b4c5066a3..15f9016131a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -23,6 +23,7 @@ + diff --git a/docs/en/package-version-changes.md b/docs/en/package-version-changes.md index 17e29d7e10b..25fc187fa68 100644 --- a/docs/en/package-version-changes.md +++ b/docs/en/package-version-changes.md @@ -74,6 +74,12 @@ | System.Text.Encodings.Web | 10.0.2 | 10.0.7 | #25313 | | System.Text.Json | 10.0.2 | 10.0.7 | #25313 | +**Added:** + +| Package | Version | PR | +|---------|---------|-----| +| MudBlazor | 8.0.0 | #25235 | + ## 10.3.1 | Package | Old Version | New Version | PR | diff --git a/framework/Volo.Abp.slnx b/framework/Volo.Abp.slnx index df59da0515c..5eb6bd5e38f 100644 --- a/framework/Volo.Abp.slnx +++ b/framework/Volo.Abp.slnx @@ -10,13 +10,19 @@ + + + + + + @@ -137,6 +143,7 @@ + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/AbpAspNetCoreComponentsMauiBlazorThemingMudBlazorBundlingModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/AbpAspNetCoreComponentsMauiBlazorThemingMudBlazorBundlingModule.cs new file mode 100644 index 00000000000..f803cd89851 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/AbpAspNetCoreComponentsMauiBlazorThemingMudBlazorBundlingModule.cs @@ -0,0 +1,34 @@ +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling; + +[DependsOn( + typeof(AbpAspNetCoreMvcUiBundlingAbstractionsModule) +)] +public class AbpAspNetCoreComponentsMauiBlazorThemingMudBlazorBundlingModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.GlobalAssets.Enabled = true; + options.GlobalAssets.GlobalStyleBundleName = MauiBlazorMudBlazorStandardBundles.Styles.Global; + options.GlobalAssets.GlobalScriptBundleName = MauiBlazorMudBlazorStandardBundles.Scripts.Global; + + options + .StyleBundles + .Add(MauiBlazorMudBlazorStandardBundles.Styles.Global, bundle => + { + bundle.AddContributors(typeof(MauiBlazorMudBlazorStyleContributor)); + }); + + options + .ScriptBundles + .Add(MauiBlazorMudBlazorStandardBundles.Scripts.Global, bundle => + { + bundle.AddContributors(typeof(MauiBlazorMudBlazorScriptContributor)); + }); + }); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/FodyWeavers.xml new file mode 100644 index 00000000000..7e9f94ead6f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/FodyWeavers.xsd new file mode 100644 index 00000000000..e6bb89a4a12 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorScriptContributor.cs new file mode 100644 index 00000000000..73bb95c5bd1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorScriptContributor.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling; + +public class MauiBlazorMudBlazorScriptContributor : BundleContributor +{ + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("_content/MudBlazor/MudBlazor.min.js"); + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/js/abp.js"); + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/js/lang-utils.js"); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorStandardBundles.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorStandardBundles.cs new file mode 100644 index 00000000000..54a460d0c4e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorStandardBundles.cs @@ -0,0 +1,14 @@ +namespace Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling; + +public class MauiBlazorMudBlazorStandardBundles +{ + public static class Styles + { + public static string Global = "MauiBlazorMudBlazor.Global"; + } + + public static class Scripts + { + public static string Global = "MauiBlazorMudBlazor.Global"; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorStyleContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorStyleContributor.cs new file mode 100644 index 00000000000..c78f1474d21 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorStyleContributor.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling; + +public class MauiBlazorMudBlazorStyleContributor : BundleContributor +{ + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/libs/fontawesome/css/all.css"); + context.Files.AddIfNotContains("_content/MudBlazor/MudBlazor.min.css"); + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/css/abp.css"); + context.Files.AddIfNotContains("_content/Volo.Abp.MudBlazorUI/volo.abp.mudblazorui.css"); + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/libs/flag-icon/css/flag-icon.css"); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling.csproj b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling.csproj new file mode 100644 index 00000000000..b33c5a2adf3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling.csproj @@ -0,0 +1,16 @@ + + + + + + + net10.0 + enable + Nullable + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/AbpAspNetCoreComponentsMauiBlazorThemingMudBlazorModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/AbpAspNetCoreComponentsMauiBlazorThemingMudBlazorModule.cs new file mode 100644 index 00000000000..48cc5a794f2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/AbpAspNetCoreComponentsMauiBlazorThemingMudBlazorModule.cs @@ -0,0 +1,15 @@ +using Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; +using Volo.Abp.AspNetCore.Components.MauiBlazor; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor; + +[DependsOn( + typeof(AbpAspNetCoreComponentsMauiBlazorThemingMudBlazorBundlingModule), + typeof(AbpAspNetCoreComponentsWebThemingMudBlazorModule), + typeof(AbpAspNetCoreComponentsMauiBlazorModule) +)] +public class AbpAspNetCoreComponentsMauiBlazorThemingMudBlazorModule : AbpModule +{ +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/FodyWeavers.xml new file mode 100644 index 00000000000..7e9f94ead6f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/FodyWeavers.xsd new file mode 100644 index 00000000000..ffa6fc4b782 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.csproj b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.csproj new file mode 100644 index 00000000000..5a24de82c0e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.csproj @@ -0,0 +1,18 @@ + + + + + + + net10.0 + enable + Nullable + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/AbpAspNetCoreComponentsServerThemingMudBlazorModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/AbpAspNetCoreComponentsServerThemingMudBlazorModule.cs new file mode 100644 index 00000000000..7d7a7842561 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/AbpAspNetCoreComponentsServerThemingMudBlazorModule.cs @@ -0,0 +1,36 @@ +using Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.Bundling; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.Modularity; +using Volo.Abp.AspNetCore.Mvc.UI.Packages; + +namespace Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor; + +[DependsOn( + typeof(AbpAspNetCoreComponentsServerModule), + typeof(AbpAspNetCoreMvcUiPackagesModule), + typeof(AbpAspNetCoreComponentsWebThemingMudBlazorModule), + typeof(AbpAspNetCoreMvcUiBundlingModule) + )] +public class AbpAspNetCoreComponentsServerThemingMudBlazorModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options + .StyleBundles + .Add(BlazorServerMudBlazorStandardBundles.Styles.Global, bundle => + { + bundle.AddContributors(typeof(BlazorServerMudBlazorStyleContributor)); + }); + + options + .ScriptBundles + .Add(BlazorServerMudBlazorStandardBundles.Scripts.Global, bundle => + { + bundle.AddContributors(typeof(BlazorServerMudBlazorScriptContributor)); + }); + }); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorComponentBundleManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorComponentBundleManager.cs new file mode 100644 index 00000000000..09a67ef6fa7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorComponentBundleManager.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Bundling; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Bundling; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.Bundling; + +public class BlazorServerMudBlazorComponentBundleManager : IComponentBundleManager, ITransientDependency +{ + protected IBundleManager BundleManager { get; } + + public BlazorServerMudBlazorComponentBundleManager(IBundleManager bundleManager) + { + BundleManager = bundleManager; + } + + public virtual async Task> GetStyleBundleFilesAsync(string bundleName) + { + return (await BundleManager.GetStyleBundleFilesAsync(bundleName)).Select(f => f.FileName).ToList(); + } + + public virtual async Task> GetScriptBundleFilesAsync(string bundleName) + { + return (await BundleManager.GetScriptBundleFilesAsync(bundleName)).Select(f => f.FileName).ToList(); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorScriptContributor.cs new file mode 100644 index 00000000000..72a49486ee5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorScriptContributor.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.AspNetCore.Components.Web; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.Bundling; + +public class BlazorServerMudBlazorScriptContributor : BundleContributor +{ + public override void ConfigureBundle(BundleConfigurationContext context) + { + var options = context.ServiceProvider.GetRequiredService>().Value; + if (!options.IsBlazorWebApp) + { + context.Files.AddIfNotContains("/_framework/blazor.server.js"); + } + context.Files.AddIfNotContains("/_content/MudBlazor/MudBlazor.min.js"); + context.Files.AddIfNotContains("/_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/js/abp.js"); + context.Files.AddIfNotContains("/_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/js/authentication-state-listener.js"); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorStandardBundles.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorStandardBundles.cs new file mode 100644 index 00000000000..1b463f8871a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorStandardBundles.cs @@ -0,0 +1,14 @@ +namespace Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.Bundling; + +public class BlazorServerMudBlazorStandardBundles +{ + public static class Styles + { + public static string Global = "Blazor.Global"; + } + + public static class Scripts + { + public static string Global = "Blazor.Global"; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorStyleContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorStyleContributor.cs new file mode 100644 index 00000000000..c2f76d35ed4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorStyleContributor.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.Bundling; + +public class BlazorServerMudBlazorStyleContributor : BundleContributor +{ + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("/_content/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/libs/fontawesome/css/all.css"); + context.Files.AddIfNotContains("/_content/MudBlazor/MudBlazor.min.css"); + context.Files.AddIfNotContains("/_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/css/abp.css"); + context.Files.AddIfNotContains("/_content/Volo.Abp.MudBlazorUI/volo.abp.mudblazorui.css"); + context.Files.AddIfNotContains("/_content/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/libs/flag-icon/css/flag-icon.css"); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/FodyWeavers.xml new file mode 100644 index 00000000000..7e9f94ead6f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/FodyWeavers.xsd new file mode 100644 index 00000000000..ffa6fc4b782 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.abppkg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.abppkg new file mode 100644 index 00000000000..e0c33eaab11 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.framework" +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.csproj new file mode 100644 index 00000000000..b4464b5367c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.csproj @@ -0,0 +1,20 @@ + + + + + + + net10.0 + enable + Nullable + true + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.css b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.css new file mode 100644 index 00000000000..b54375090bb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.css @@ -0,0 +1,1568 @@ +.flag-icon-background { + background-size: contain; + background-position: 50%; + background-repeat: no-repeat; +} +.flag-icon { + background-size: contain; + background-position: 50%; + background-repeat: no-repeat; + position: relative; + display: inline-block; + width: 1.33333333em; + line-height: 1em; +} +.flag-icon:before { + content: "\00a0"; +} +.flag-icon.flag-icon-squared { + width: 1em; +} +.flag-icon-ad { + background-image: url(../flags/4x3/ad.svg); +} +.flag-icon-ad.flag-icon-squared { + background-image: url(../flags/1x1/ad.svg); +} +.flag-icon-ae { + background-image: url(../flags/4x3/ae.svg); +} +.flag-icon-ae.flag-icon-squared { + background-image: url(../flags/1x1/ae.svg); +} +.flag-icon-af { + background-image: url(../flags/4x3/af.svg); +} +.flag-icon-af.flag-icon-squared { + background-image: url(../flags/1x1/af.svg); +} +.flag-icon-ag { + background-image: url(../flags/4x3/ag.svg); +} +.flag-icon-ag.flag-icon-squared { + background-image: url(../flags/1x1/ag.svg); +} +.flag-icon-ai { + background-image: url(../flags/4x3/ai.svg); +} +.flag-icon-ai.flag-icon-squared { + background-image: url(../flags/1x1/ai.svg); +} +.flag-icon-al { + background-image: url(../flags/4x3/al.svg); +} +.flag-icon-al.flag-icon-squared { + background-image: url(../flags/1x1/al.svg); +} +.flag-icon-am { + background-image: url(../flags/4x3/am.svg); +} +.flag-icon-am.flag-icon-squared { + background-image: url(../flags/1x1/am.svg); +} +.flag-icon-ao { + background-image: url(../flags/4x3/ao.svg); +} +.flag-icon-ao.flag-icon-squared { + background-image: url(../flags/1x1/ao.svg); +} +.flag-icon-aq { + background-image: url(../flags/4x3/aq.svg); +} +.flag-icon-aq.flag-icon-squared { + background-image: url(../flags/1x1/aq.svg); +} +.flag-icon-ar { + background-image: url(../flags/4x3/ar.svg); +} +.flag-icon-ar.flag-icon-squared { + background-image: url(../flags/1x1/ar.svg); +} +.flag-icon-as { + background-image: url(../flags/4x3/as.svg); +} +.flag-icon-as.flag-icon-squared { + background-image: url(../flags/1x1/as.svg); +} +.flag-icon-at { + background-image: url(../flags/4x3/at.svg); +} +.flag-icon-at.flag-icon-squared { + background-image: url(../flags/1x1/at.svg); +} +.flag-icon-au { + background-image: url(../flags/4x3/au.svg); +} +.flag-icon-au.flag-icon-squared { + background-image: url(../flags/1x1/au.svg); +} +.flag-icon-aw { + background-image: url(../flags/4x3/aw.svg); +} +.flag-icon-aw.flag-icon-squared { + background-image: url(../flags/1x1/aw.svg); +} +.flag-icon-ax { + background-image: url(../flags/4x3/ax.svg); +} +.flag-icon-ax.flag-icon-squared { + background-image: url(../flags/1x1/ax.svg); +} +.flag-icon-az { + background-image: url(../flags/4x3/az.svg); +} +.flag-icon-az.flag-icon-squared { + background-image: url(../flags/1x1/az.svg); +} +.flag-icon-ba { + background-image: url(../flags/4x3/ba.svg); +} +.flag-icon-ba.flag-icon-squared { + background-image: url(../flags/1x1/ba.svg); +} +.flag-icon-bb { + background-image: url(../flags/4x3/bb.svg); +} +.flag-icon-bb.flag-icon-squared { + background-image: url(../flags/1x1/bb.svg); +} +.flag-icon-bd { + background-image: url(../flags/4x3/bd.svg); +} +.flag-icon-bd.flag-icon-squared { + background-image: url(../flags/1x1/bd.svg); +} +.flag-icon-be { + background-image: url(../flags/4x3/be.svg); +} +.flag-icon-be.flag-icon-squared { + background-image: url(../flags/1x1/be.svg); +} +.flag-icon-bf { + background-image: url(../flags/4x3/bf.svg); +} +.flag-icon-bf.flag-icon-squared { + background-image: url(../flags/1x1/bf.svg); +} +.flag-icon-bg { + background-image: url(../flags/4x3/bg.svg); +} +.flag-icon-bg.flag-icon-squared { + background-image: url(../flags/1x1/bg.svg); +} +.flag-icon-bh { + background-image: url(../flags/4x3/bh.svg); +} +.flag-icon-bh.flag-icon-squared { + background-image: url(../flags/1x1/bh.svg); +} +.flag-icon-bi { + background-image: url(../flags/4x3/bi.svg); +} +.flag-icon-bi.flag-icon-squared { + background-image: url(../flags/1x1/bi.svg); +} +.flag-icon-bj { + background-image: url(../flags/4x3/bj.svg); +} +.flag-icon-bj.flag-icon-squared { + background-image: url(../flags/1x1/bj.svg); +} +.flag-icon-bl { + background-image: url(../flags/4x3/bl.svg); +} +.flag-icon-bl.flag-icon-squared { + background-image: url(../flags/1x1/bl.svg); +} +.flag-icon-bm { + background-image: url(../flags/4x3/bm.svg); +} +.flag-icon-bm.flag-icon-squared { + background-image: url(../flags/1x1/bm.svg); +} +.flag-icon-bn { + background-image: url(../flags/4x3/bn.svg); +} +.flag-icon-bn.flag-icon-squared { + background-image: url(../flags/1x1/bn.svg); +} +.flag-icon-bo { + background-image: url(../flags/4x3/bo.svg); +} +.flag-icon-bo.flag-icon-squared { + background-image: url(../flags/1x1/bo.svg); +} +.flag-icon-bq { + background-image: url(../flags/4x3/bq.svg); +} +.flag-icon-bq.flag-icon-squared { + background-image: url(../flags/1x1/bq.svg); +} +.flag-icon-br { + background-image: url(../flags/4x3/br.svg); +} +.flag-icon-br.flag-icon-squared { + background-image: url(../flags/1x1/br.svg); +} +.flag-icon-bs { + background-image: url(../flags/4x3/bs.svg); +} +.flag-icon-bs.flag-icon-squared { + background-image: url(../flags/1x1/bs.svg); +} +.flag-icon-bt { + background-image: url(../flags/4x3/bt.svg); +} +.flag-icon-bt.flag-icon-squared { + background-image: url(../flags/1x1/bt.svg); +} +.flag-icon-bv { + background-image: url(../flags/4x3/bv.svg); +} +.flag-icon-bv.flag-icon-squared { + background-image: url(../flags/1x1/bv.svg); +} +.flag-icon-bw { + background-image: url(../flags/4x3/bw.svg); +} +.flag-icon-bw.flag-icon-squared { + background-image: url(../flags/1x1/bw.svg); +} +.flag-icon-by { + background-image: url(../flags/4x3/by.svg); +} +.flag-icon-by.flag-icon-squared { + background-image: url(../flags/1x1/by.svg); +} +.flag-icon-bz { + background-image: url(../flags/4x3/bz.svg); +} +.flag-icon-bz.flag-icon-squared { + background-image: url(../flags/1x1/bz.svg); +} +.flag-icon-ca { + background-image: url(../flags/4x3/ca.svg); +} +.flag-icon-ca.flag-icon-squared { + background-image: url(../flags/1x1/ca.svg); +} +.flag-icon-cc { + background-image: url(../flags/4x3/cc.svg); +} +.flag-icon-cc.flag-icon-squared { + background-image: url(../flags/1x1/cc.svg); +} +.flag-icon-cd { + background-image: url(../flags/4x3/cd.svg); +} +.flag-icon-cd.flag-icon-squared { + background-image: url(../flags/1x1/cd.svg); +} +.flag-icon-cf { + background-image: url(../flags/4x3/cf.svg); +} +.flag-icon-cf.flag-icon-squared { + background-image: url(../flags/1x1/cf.svg); +} +.flag-icon-cg { + background-image: url(../flags/4x3/cg.svg); +} +.flag-icon-cg.flag-icon-squared { + background-image: url(../flags/1x1/cg.svg); +} +.flag-icon-ch { + background-image: url(../flags/4x3/ch.svg); +} +.flag-icon-ch.flag-icon-squared { + background-image: url(../flags/1x1/ch.svg); +} +.flag-icon-ci { + background-image: url(../flags/4x3/ci.svg); +} +.flag-icon-ci.flag-icon-squared { + background-image: url(../flags/1x1/ci.svg); +} +.flag-icon-ck { + background-image: url(../flags/4x3/ck.svg); +} +.flag-icon-ck.flag-icon-squared { + background-image: url(../flags/1x1/ck.svg); +} +.flag-icon-cl { + background-image: url(../flags/4x3/cl.svg); +} +.flag-icon-cl.flag-icon-squared { + background-image: url(../flags/1x1/cl.svg); +} +.flag-icon-cm { + background-image: url(../flags/4x3/cm.svg); +} +.flag-icon-cm.flag-icon-squared { + background-image: url(../flags/1x1/cm.svg); +} +.flag-icon-cn { + background-image: url(../flags/4x3/cn.svg); +} +.flag-icon-cn.flag-icon-squared { + background-image: url(../flags/1x1/cn.svg); +} +.flag-icon-co { + background-image: url(../flags/4x3/co.svg); +} +.flag-icon-co.flag-icon-squared { + background-image: url(../flags/1x1/co.svg); +} +.flag-icon-cr { + background-image: url(../flags/4x3/cr.svg); +} +.flag-icon-cr.flag-icon-squared { + background-image: url(../flags/1x1/cr.svg); +} +.flag-icon-cu { + background-image: url(../flags/4x3/cu.svg); +} +.flag-icon-cu.flag-icon-squared { + background-image: url(../flags/1x1/cu.svg); +} +.flag-icon-cv { + background-image: url(../flags/4x3/cv.svg); +} +.flag-icon-cv.flag-icon-squared { + background-image: url(../flags/1x1/cv.svg); +} +.flag-icon-cw { + background-image: url(../flags/4x3/cw.svg); +} +.flag-icon-cw.flag-icon-squared { + background-image: url(../flags/1x1/cw.svg); +} +.flag-icon-cx { + background-image: url(../flags/4x3/cx.svg); +} +.flag-icon-cx.flag-icon-squared { + background-image: url(../flags/1x1/cx.svg); +} +.flag-icon-cy { + background-image: url(../flags/4x3/cy.svg); +} +.flag-icon-cy.flag-icon-squared { + background-image: url(../flags/1x1/cy.svg); +} +.flag-icon-cz { + background-image: url(../flags/4x3/cz.svg); +} +.flag-icon-cz.flag-icon-squared { + background-image: url(../flags/1x1/cz.svg); +} +.flag-icon-de { + background-image: url(../flags/4x3/de.svg); +} +.flag-icon-de.flag-icon-squared { + background-image: url(../flags/1x1/de.svg); +} +.flag-icon-dj { + background-image: url(../flags/4x3/dj.svg); +} +.flag-icon-dj.flag-icon-squared { + background-image: url(../flags/1x1/dj.svg); +} +.flag-icon-dk { + background-image: url(../flags/4x3/dk.svg); +} +.flag-icon-dk.flag-icon-squared { + background-image: url(../flags/1x1/dk.svg); +} +.flag-icon-dm { + background-image: url(../flags/4x3/dm.svg); +} +.flag-icon-dm.flag-icon-squared { + background-image: url(../flags/1x1/dm.svg); +} +.flag-icon-do { + background-image: url(../flags/4x3/do.svg); +} +.flag-icon-do.flag-icon-squared { + background-image: url(../flags/1x1/do.svg); +} +.flag-icon-dz { + background-image: url(../flags/4x3/dz.svg); +} +.flag-icon-dz.flag-icon-squared { + background-image: url(../flags/1x1/dz.svg); +} +.flag-icon-ec { + background-image: url(../flags/4x3/ec.svg); +} +.flag-icon-ec.flag-icon-squared { + background-image: url(../flags/1x1/ec.svg); +} +.flag-icon-ee { + background-image: url(../flags/4x3/ee.svg); +} +.flag-icon-ee.flag-icon-squared { + background-image: url(../flags/1x1/ee.svg); +} +.flag-icon-eg { + background-image: url(../flags/4x3/eg.svg); +} +.flag-icon-eg.flag-icon-squared { + background-image: url(../flags/1x1/eg.svg); +} +.flag-icon-eh { + background-image: url(../flags/4x3/eh.svg); +} +.flag-icon-eh.flag-icon-squared { + background-image: url(../flags/1x1/eh.svg); +} +.flag-icon-er { + background-image: url(../flags/4x3/er.svg); +} +.flag-icon-er.flag-icon-squared { + background-image: url(../flags/1x1/er.svg); +} +.flag-icon-es { + background-image: url(../flags/4x3/es.svg); +} +.flag-icon-es.flag-icon-squared { + background-image: url(../flags/1x1/es.svg); +} +.flag-icon-et { + background-image: url(../flags/4x3/et.svg); +} +.flag-icon-et.flag-icon-squared { + background-image: url(../flags/1x1/et.svg); +} +.flag-icon-fi { + background-image: url(../flags/4x3/fi.svg); +} +.flag-icon-fi.flag-icon-squared { + background-image: url(../flags/1x1/fi.svg); +} +.flag-icon-fj { + background-image: url(../flags/4x3/fj.svg); +} +.flag-icon-fj.flag-icon-squared { + background-image: url(../flags/1x1/fj.svg); +} +.flag-icon-fk { + background-image: url(../flags/4x3/fk.svg); +} +.flag-icon-fk.flag-icon-squared { + background-image: url(../flags/1x1/fk.svg); +} +.flag-icon-fm { + background-image: url(../flags/4x3/fm.svg); +} +.flag-icon-fm.flag-icon-squared { + background-image: url(../flags/1x1/fm.svg); +} +.flag-icon-fo { + background-image: url(../flags/4x3/fo.svg); +} +.flag-icon-fo.flag-icon-squared { + background-image: url(../flags/1x1/fo.svg); +} +.flag-icon-fr { + background-image: url(../flags/4x3/fr.svg); +} +.flag-icon-fr.flag-icon-squared { + background-image: url(../flags/1x1/fr.svg); +} +.flag-icon-ga { + background-image: url(../flags/4x3/ga.svg); +} +.flag-icon-ga.flag-icon-squared { + background-image: url(../flags/1x1/ga.svg); +} +.flag-icon-gb { + background-image: url(../flags/4x3/gb.svg); +} +.flag-icon-gb.flag-icon-squared { + background-image: url(../flags/1x1/gb.svg); +} +.flag-icon-gd { + background-image: url(../flags/4x3/gd.svg); +} +.flag-icon-gd.flag-icon-squared { + background-image: url(../flags/1x1/gd.svg); +} +.flag-icon-ge { + background-image: url(../flags/4x3/ge.svg); +} +.flag-icon-ge.flag-icon-squared { + background-image: url(../flags/1x1/ge.svg); +} +.flag-icon-gf { + background-image: url(../flags/4x3/gf.svg); +} +.flag-icon-gf.flag-icon-squared { + background-image: url(../flags/1x1/gf.svg); +} +.flag-icon-gg { + background-image: url(../flags/4x3/gg.svg); +} +.flag-icon-gg.flag-icon-squared { + background-image: url(../flags/1x1/gg.svg); +} +.flag-icon-gh { + background-image: url(../flags/4x3/gh.svg); +} +.flag-icon-gh.flag-icon-squared { + background-image: url(../flags/1x1/gh.svg); +} +.flag-icon-gi { + background-image: url(../flags/4x3/gi.svg); +} +.flag-icon-gi.flag-icon-squared { + background-image: url(../flags/1x1/gi.svg); +} +.flag-icon-gl { + background-image: url(../flags/4x3/gl.svg); +} +.flag-icon-gl.flag-icon-squared { + background-image: url(../flags/1x1/gl.svg); +} +.flag-icon-gm { + background-image: url(../flags/4x3/gm.svg); +} +.flag-icon-gm.flag-icon-squared { + background-image: url(../flags/1x1/gm.svg); +} +.flag-icon-gn { + background-image: url(../flags/4x3/gn.svg); +} +.flag-icon-gn.flag-icon-squared { + background-image: url(../flags/1x1/gn.svg); +} +.flag-icon-gp { + background-image: url(../flags/4x3/gp.svg); +} +.flag-icon-gp.flag-icon-squared { + background-image: url(../flags/1x1/gp.svg); +} +.flag-icon-gq { + background-image: url(../flags/4x3/gq.svg); +} +.flag-icon-gq.flag-icon-squared { + background-image: url(../flags/1x1/gq.svg); +} +.flag-icon-gr { + background-image: url(../flags/4x3/gr.svg); +} +.flag-icon-gr.flag-icon-squared { + background-image: url(../flags/1x1/gr.svg); +} +.flag-icon-gs { + background-image: url(../flags/4x3/gs.svg); +} +.flag-icon-gs.flag-icon-squared { + background-image: url(../flags/1x1/gs.svg); +} +.flag-icon-gt { + background-image: url(../flags/4x3/gt.svg); +} +.flag-icon-gt.flag-icon-squared { + background-image: url(../flags/1x1/gt.svg); +} +.flag-icon-gu { + background-image: url(../flags/4x3/gu.svg); +} +.flag-icon-gu.flag-icon-squared { + background-image: url(../flags/1x1/gu.svg); +} +.flag-icon-gw { + background-image: url(../flags/4x3/gw.svg); +} +.flag-icon-gw.flag-icon-squared { + background-image: url(../flags/1x1/gw.svg); +} +.flag-icon-gy { + background-image: url(../flags/4x3/gy.svg); +} +.flag-icon-gy.flag-icon-squared { + background-image: url(../flags/1x1/gy.svg); +} +.flag-icon-hk { + background-image: url(../flags/4x3/hk.svg); +} +.flag-icon-hk.flag-icon-squared { + background-image: url(../flags/1x1/hk.svg); +} +.flag-icon-hm { + background-image: url(../flags/4x3/hm.svg); +} +.flag-icon-hm.flag-icon-squared { + background-image: url(../flags/1x1/hm.svg); +} +.flag-icon-hn { + background-image: url(../flags/4x3/hn.svg); +} +.flag-icon-hn.flag-icon-squared { + background-image: url(../flags/1x1/hn.svg); +} +.flag-icon-hr { + background-image: url(../flags/4x3/hr.svg); +} +.flag-icon-hr.flag-icon-squared { + background-image: url(../flags/1x1/hr.svg); +} +.flag-icon-ht { + background-image: url(../flags/4x3/ht.svg); +} +.flag-icon-ht.flag-icon-squared { + background-image: url(../flags/1x1/ht.svg); +} +.flag-icon-hu { + background-image: url(../flags/4x3/hu.svg); +} +.flag-icon-hu.flag-icon-squared { + background-image: url(../flags/1x1/hu.svg); +} +.flag-icon-id { + background-image: url(../flags/4x3/id.svg); +} +.flag-icon-id.flag-icon-squared { + background-image: url(../flags/1x1/id.svg); +} +.flag-icon-ie { + background-image: url(../flags/4x3/ie.svg); +} +.flag-icon-ie.flag-icon-squared { + background-image: url(../flags/1x1/ie.svg); +} +.flag-icon-il { + background-image: url(../flags/4x3/il.svg); +} +.flag-icon-il.flag-icon-squared { + background-image: url(../flags/1x1/il.svg); +} +.flag-icon-im { + background-image: url(../flags/4x3/im.svg); +} +.flag-icon-im.flag-icon-squared { + background-image: url(../flags/1x1/im.svg); +} +.flag-icon-in { + background-image: url(../flags/4x3/in.svg); +} +.flag-icon-in.flag-icon-squared { + background-image: url(../flags/1x1/in.svg); +} +.flag-icon-io { + background-image: url(../flags/4x3/io.svg); +} +.flag-icon-io.flag-icon-squared { + background-image: url(../flags/1x1/io.svg); +} +.flag-icon-iq { + background-image: url(../flags/4x3/iq.svg); +} +.flag-icon-iq.flag-icon-squared { + background-image: url(../flags/1x1/iq.svg); +} +.flag-icon-ir { + background-image: url(../flags/4x3/ir.svg); +} +.flag-icon-ir.flag-icon-squared { + background-image: url(../flags/1x1/ir.svg); +} +.flag-icon-is { + background-image: url(../flags/4x3/is.svg); +} +.flag-icon-is.flag-icon-squared { + background-image: url(../flags/1x1/is.svg); +} +.flag-icon-it { + background-image: url(../flags/4x3/it.svg); +} +.flag-icon-it.flag-icon-squared { + background-image: url(../flags/1x1/it.svg); +} +.flag-icon-je { + background-image: url(../flags/4x3/je.svg); +} +.flag-icon-je.flag-icon-squared { + background-image: url(../flags/1x1/je.svg); +} +.flag-icon-jm { + background-image: url(../flags/4x3/jm.svg); +} +.flag-icon-jm.flag-icon-squared { + background-image: url(../flags/1x1/jm.svg); +} +.flag-icon-jo { + background-image: url(../flags/4x3/jo.svg); +} +.flag-icon-jo.flag-icon-squared { + background-image: url(../flags/1x1/jo.svg); +} +.flag-icon-jp { + background-image: url(../flags/4x3/jp.svg); +} +.flag-icon-jp.flag-icon-squared { + background-image: url(../flags/1x1/jp.svg); +} +.flag-icon-ke { + background-image: url(../flags/4x3/ke.svg); +} +.flag-icon-ke.flag-icon-squared { + background-image: url(../flags/1x1/ke.svg); +} +.flag-icon-kg { + background-image: url(../flags/4x3/kg.svg); +} +.flag-icon-kg.flag-icon-squared { + background-image: url(../flags/1x1/kg.svg); +} +.flag-icon-kh { + background-image: url(../flags/4x3/kh.svg); +} +.flag-icon-kh.flag-icon-squared { + background-image: url(../flags/1x1/kh.svg); +} +.flag-icon-ki { + background-image: url(../flags/4x3/ki.svg); +} +.flag-icon-ki.flag-icon-squared { + background-image: url(../flags/1x1/ki.svg); +} +.flag-icon-km { + background-image: url(../flags/4x3/km.svg); +} +.flag-icon-km.flag-icon-squared { + background-image: url(../flags/1x1/km.svg); +} +.flag-icon-kn { + background-image: url(../flags/4x3/kn.svg); +} +.flag-icon-kn.flag-icon-squared { + background-image: url(../flags/1x1/kn.svg); +} +.flag-icon-kp { + background-image: url(../flags/4x3/kp.svg); +} +.flag-icon-kp.flag-icon-squared { + background-image: url(../flags/1x1/kp.svg); +} +.flag-icon-kr { + background-image: url(../flags/4x3/kr.svg); +} +.flag-icon-kr.flag-icon-squared { + background-image: url(../flags/1x1/kr.svg); +} +.flag-icon-kw { + background-image: url(../flags/4x3/kw.svg); +} +.flag-icon-kw.flag-icon-squared { + background-image: url(../flags/1x1/kw.svg); +} +.flag-icon-ky { + background-image: url(../flags/4x3/ky.svg); +} +.flag-icon-ky.flag-icon-squared { + background-image: url(../flags/1x1/ky.svg); +} +.flag-icon-kz { + background-image: url(../flags/4x3/kz.svg); +} +.flag-icon-kz.flag-icon-squared { + background-image: url(../flags/1x1/kz.svg); +} +.flag-icon-la { + background-image: url(../flags/4x3/la.svg); +} +.flag-icon-la.flag-icon-squared { + background-image: url(../flags/1x1/la.svg); +} +.flag-icon-lb { + background-image: url(../flags/4x3/lb.svg); +} +.flag-icon-lb.flag-icon-squared { + background-image: url(../flags/1x1/lb.svg); +} +.flag-icon-lc { + background-image: url(../flags/4x3/lc.svg); +} +.flag-icon-lc.flag-icon-squared { + background-image: url(../flags/1x1/lc.svg); +} +.flag-icon-li { + background-image: url(../flags/4x3/li.svg); +} +.flag-icon-li.flag-icon-squared { + background-image: url(../flags/1x1/li.svg); +} +.flag-icon-lk { + background-image: url(../flags/4x3/lk.svg); +} +.flag-icon-lk.flag-icon-squared { + background-image: url(../flags/1x1/lk.svg); +} +.flag-icon-lr { + background-image: url(../flags/4x3/lr.svg); +} +.flag-icon-lr.flag-icon-squared { + background-image: url(../flags/1x1/lr.svg); +} +.flag-icon-ls { + background-image: url(../flags/4x3/ls.svg); +} +.flag-icon-ls.flag-icon-squared { + background-image: url(../flags/1x1/ls.svg); +} +.flag-icon-lt { + background-image: url(../flags/4x3/lt.svg); +} +.flag-icon-lt.flag-icon-squared { + background-image: url(../flags/1x1/lt.svg); +} +.flag-icon-lu { + background-image: url(../flags/4x3/lu.svg); +} +.flag-icon-lu.flag-icon-squared { + background-image: url(../flags/1x1/lu.svg); +} +.flag-icon-lv { + background-image: url(../flags/4x3/lv.svg); +} +.flag-icon-lv.flag-icon-squared { + background-image: url(../flags/1x1/lv.svg); +} +.flag-icon-ly { + background-image: url(../flags/4x3/ly.svg); +} +.flag-icon-ly.flag-icon-squared { + background-image: url(../flags/1x1/ly.svg); +} +.flag-icon-ma { + background-image: url(../flags/4x3/ma.svg); +} +.flag-icon-ma.flag-icon-squared { + background-image: url(../flags/1x1/ma.svg); +} +.flag-icon-mc { + background-image: url(../flags/4x3/mc.svg); +} +.flag-icon-mc.flag-icon-squared { + background-image: url(../flags/1x1/mc.svg); +} +.flag-icon-md { + background-image: url(../flags/4x3/md.svg); +} +.flag-icon-md.flag-icon-squared { + background-image: url(../flags/1x1/md.svg); +} +.flag-icon-me { + background-image: url(../flags/4x3/me.svg); +} +.flag-icon-me.flag-icon-squared { + background-image: url(../flags/1x1/me.svg); +} +.flag-icon-mf { + background-image: url(../flags/4x3/mf.svg); +} +.flag-icon-mf.flag-icon-squared { + background-image: url(../flags/1x1/mf.svg); +} +.flag-icon-mg { + background-image: url(../flags/4x3/mg.svg); +} +.flag-icon-mg.flag-icon-squared { + background-image: url(../flags/1x1/mg.svg); +} +.flag-icon-mh { + background-image: url(../flags/4x3/mh.svg); +} +.flag-icon-mh.flag-icon-squared { + background-image: url(../flags/1x1/mh.svg); +} +.flag-icon-mk { + background-image: url(../flags/4x3/mk.svg); +} +.flag-icon-mk.flag-icon-squared { + background-image: url(../flags/1x1/mk.svg); +} +.flag-icon-ml { + background-image: url(../flags/4x3/ml.svg); +} +.flag-icon-ml.flag-icon-squared { + background-image: url(../flags/1x1/ml.svg); +} +.flag-icon-mm { + background-image: url(../flags/4x3/mm.svg); +} +.flag-icon-mm.flag-icon-squared { + background-image: url(../flags/1x1/mm.svg); +} +.flag-icon-mn { + background-image: url(../flags/4x3/mn.svg); +} +.flag-icon-mn.flag-icon-squared { + background-image: url(../flags/1x1/mn.svg); +} +.flag-icon-mo { + background-image: url(../flags/4x3/mo.svg); +} +.flag-icon-mo.flag-icon-squared { + background-image: url(../flags/1x1/mo.svg); +} +.flag-icon-mp { + background-image: url(../flags/4x3/mp.svg); +} +.flag-icon-mp.flag-icon-squared { + background-image: url(../flags/1x1/mp.svg); +} +.flag-icon-mq { + background-image: url(../flags/4x3/mq.svg); +} +.flag-icon-mq.flag-icon-squared { + background-image: url(../flags/1x1/mq.svg); +} +.flag-icon-mr { + background-image: url(../flags/4x3/mr.svg); +} +.flag-icon-mr.flag-icon-squared { + background-image: url(../flags/1x1/mr.svg); +} +.flag-icon-ms { + background-image: url(../flags/4x3/ms.svg); +} +.flag-icon-ms.flag-icon-squared { + background-image: url(../flags/1x1/ms.svg); +} +.flag-icon-mt { + background-image: url(../flags/4x3/mt.svg); +} +.flag-icon-mt.flag-icon-squared { + background-image: url(../flags/1x1/mt.svg); +} +.flag-icon-mu { + background-image: url(../flags/4x3/mu.svg); +} +.flag-icon-mu.flag-icon-squared { + background-image: url(../flags/1x1/mu.svg); +} +.flag-icon-mv { + background-image: url(../flags/4x3/mv.svg); +} +.flag-icon-mv.flag-icon-squared { + background-image: url(../flags/1x1/mv.svg); +} +.flag-icon-mw { + background-image: url(../flags/4x3/mw.svg); +} +.flag-icon-mw.flag-icon-squared { + background-image: url(../flags/1x1/mw.svg); +} +.flag-icon-mx { + background-image: url(../flags/4x3/mx.svg); +} +.flag-icon-mx.flag-icon-squared { + background-image: url(../flags/1x1/mx.svg); +} +.flag-icon-my { + background-image: url(../flags/4x3/my.svg); +} +.flag-icon-my.flag-icon-squared { + background-image: url(../flags/1x1/my.svg); +} +.flag-icon-mz { + background-image: url(../flags/4x3/mz.svg); +} +.flag-icon-mz.flag-icon-squared { + background-image: url(../flags/1x1/mz.svg); +} +.flag-icon-na { + background-image: url(../flags/4x3/na.svg); +} +.flag-icon-na.flag-icon-squared { + background-image: url(../flags/1x1/na.svg); +} +.flag-icon-nc { + background-image: url(../flags/4x3/nc.svg); +} +.flag-icon-nc.flag-icon-squared { + background-image: url(../flags/1x1/nc.svg); +} +.flag-icon-ne { + background-image: url(../flags/4x3/ne.svg); +} +.flag-icon-ne.flag-icon-squared { + background-image: url(../flags/1x1/ne.svg); +} +.flag-icon-nf { + background-image: url(../flags/4x3/nf.svg); +} +.flag-icon-nf.flag-icon-squared { + background-image: url(../flags/1x1/nf.svg); +} +.flag-icon-ng { + background-image: url(../flags/4x3/ng.svg); +} +.flag-icon-ng.flag-icon-squared { + background-image: url(../flags/1x1/ng.svg); +} +.flag-icon-ni { + background-image: url(../flags/4x3/ni.svg); +} +.flag-icon-ni.flag-icon-squared { + background-image: url(../flags/1x1/ni.svg); +} +.flag-icon-nl { + background-image: url(../flags/4x3/nl.svg); +} +.flag-icon-nl.flag-icon-squared { + background-image: url(../flags/1x1/nl.svg); +} +.flag-icon-no { + background-image: url(../flags/4x3/no.svg); +} +.flag-icon-no.flag-icon-squared { + background-image: url(../flags/1x1/no.svg); +} +.flag-icon-np { + background-image: url(../flags/4x3/np.svg); +} +.flag-icon-np.flag-icon-squared { + background-image: url(../flags/1x1/np.svg); +} +.flag-icon-nr { + background-image: url(../flags/4x3/nr.svg); +} +.flag-icon-nr.flag-icon-squared { + background-image: url(../flags/1x1/nr.svg); +} +.flag-icon-nu { + background-image: url(../flags/4x3/nu.svg); +} +.flag-icon-nu.flag-icon-squared { + background-image: url(../flags/1x1/nu.svg); +} +.flag-icon-nz { + background-image: url(../flags/4x3/nz.svg); +} +.flag-icon-nz.flag-icon-squared { + background-image: url(../flags/1x1/nz.svg); +} +.flag-icon-om { + background-image: url(../flags/4x3/om.svg); +} +.flag-icon-om.flag-icon-squared { + background-image: url(../flags/1x1/om.svg); +} +.flag-icon-pa { + background-image: url(../flags/4x3/pa.svg); +} +.flag-icon-pa.flag-icon-squared { + background-image: url(../flags/1x1/pa.svg); +} +.flag-icon-pe { + background-image: url(../flags/4x3/pe.svg); +} +.flag-icon-pe.flag-icon-squared { + background-image: url(../flags/1x1/pe.svg); +} +.flag-icon-pf { + background-image: url(../flags/4x3/pf.svg); +} +.flag-icon-pf.flag-icon-squared { + background-image: url(../flags/1x1/pf.svg); +} +.flag-icon-pg { + background-image: url(../flags/4x3/pg.svg); +} +.flag-icon-pg.flag-icon-squared { + background-image: url(../flags/1x1/pg.svg); +} +.flag-icon-ph { + background-image: url(../flags/4x3/ph.svg); +} +.flag-icon-ph.flag-icon-squared { + background-image: url(../flags/1x1/ph.svg); +} +.flag-icon-pk { + background-image: url(../flags/4x3/pk.svg); +} +.flag-icon-pk.flag-icon-squared { + background-image: url(../flags/1x1/pk.svg); +} +.flag-icon-pl { + background-image: url(../flags/4x3/pl.svg); +} +.flag-icon-pl.flag-icon-squared { + background-image: url(../flags/1x1/pl.svg); +} +.flag-icon-pm { + background-image: url(../flags/4x3/pm.svg); +} +.flag-icon-pm.flag-icon-squared { + background-image: url(../flags/1x1/pm.svg); +} +.flag-icon-pn { + background-image: url(../flags/4x3/pn.svg); +} +.flag-icon-pn.flag-icon-squared { + background-image: url(../flags/1x1/pn.svg); +} +.flag-icon-pr { + background-image: url(../flags/4x3/pr.svg); +} +.flag-icon-pr.flag-icon-squared { + background-image: url(../flags/1x1/pr.svg); +} +.flag-icon-ps { + background-image: url(../flags/4x3/ps.svg); +} +.flag-icon-ps.flag-icon-squared { + background-image: url(../flags/1x1/ps.svg); +} +.flag-icon-pt { + background-image: url(../flags/4x3/pt.svg); +} +.flag-icon-pt.flag-icon-squared { + background-image: url(../flags/1x1/pt.svg); +} +.flag-icon-pw { + background-image: url(../flags/4x3/pw.svg); +} +.flag-icon-pw.flag-icon-squared { + background-image: url(../flags/1x1/pw.svg); +} +.flag-icon-py { + background-image: url(../flags/4x3/py.svg); +} +.flag-icon-py.flag-icon-squared { + background-image: url(../flags/1x1/py.svg); +} +.flag-icon-qa { + background-image: url(../flags/4x3/qa.svg); +} +.flag-icon-qa.flag-icon-squared { + background-image: url(../flags/1x1/qa.svg); +} +.flag-icon-re { + background-image: url(../flags/4x3/re.svg); +} +.flag-icon-re.flag-icon-squared { + background-image: url(../flags/1x1/re.svg); +} +.flag-icon-ro { + background-image: url(../flags/4x3/ro.svg); +} +.flag-icon-ro.flag-icon-squared { + background-image: url(../flags/1x1/ro.svg); +} +.flag-icon-rs { + background-image: url(../flags/4x3/rs.svg); +} +.flag-icon-rs.flag-icon-squared { + background-image: url(../flags/1x1/rs.svg); +} +.flag-icon-ru { + background-image: url(../flags/4x3/ru.svg); +} +.flag-icon-ru.flag-icon-squared { + background-image: url(../flags/1x1/ru.svg); +} +.flag-icon-rw { + background-image: url(../flags/4x3/rw.svg); +} +.flag-icon-rw.flag-icon-squared { + background-image: url(../flags/1x1/rw.svg); +} +.flag-icon-sa { + background-image: url(../flags/4x3/sa.svg); +} +.flag-icon-sa.flag-icon-squared { + background-image: url(../flags/1x1/sa.svg); +} +.flag-icon-sb { + background-image: url(../flags/4x3/sb.svg); +} +.flag-icon-sb.flag-icon-squared { + background-image: url(../flags/1x1/sb.svg); +} +.flag-icon-sc { + background-image: url(../flags/4x3/sc.svg); +} +.flag-icon-sc.flag-icon-squared { + background-image: url(../flags/1x1/sc.svg); +} +.flag-icon-sd { + background-image: url(../flags/4x3/sd.svg); +} +.flag-icon-sd.flag-icon-squared { + background-image: url(../flags/1x1/sd.svg); +} +.flag-icon-se { + background-image: url(../flags/4x3/se.svg); +} +.flag-icon-se.flag-icon-squared { + background-image: url(../flags/1x1/se.svg); +} +.flag-icon-sg { + background-image: url(../flags/4x3/sg.svg); +} +.flag-icon-sg.flag-icon-squared { + background-image: url(../flags/1x1/sg.svg); +} +.flag-icon-sh { + background-image: url(../flags/4x3/sh.svg); +} +.flag-icon-sh.flag-icon-squared { + background-image: url(../flags/1x1/sh.svg); +} +.flag-icon-si { + background-image: url(../flags/4x3/si.svg); +} +.flag-icon-si.flag-icon-squared { + background-image: url(../flags/1x1/si.svg); +} +.flag-icon-sj { + background-image: url(../flags/4x3/sj.svg); +} +.flag-icon-sj.flag-icon-squared { + background-image: url(../flags/1x1/sj.svg); +} +.flag-icon-sk { + background-image: url(../flags/4x3/sk.svg); +} +.flag-icon-sk.flag-icon-squared { + background-image: url(../flags/1x1/sk.svg); +} +.flag-icon-sl { + background-image: url(../flags/4x3/sl.svg); +} +.flag-icon-sl.flag-icon-squared { + background-image: url(../flags/1x1/sl.svg); +} +.flag-icon-sm { + background-image: url(../flags/4x3/sm.svg); +} +.flag-icon-sm.flag-icon-squared { + background-image: url(../flags/1x1/sm.svg); +} +.flag-icon-sn { + background-image: url(../flags/4x3/sn.svg); +} +.flag-icon-sn.flag-icon-squared { + background-image: url(../flags/1x1/sn.svg); +} +.flag-icon-so { + background-image: url(../flags/4x3/so.svg); +} +.flag-icon-so.flag-icon-squared { + background-image: url(../flags/1x1/so.svg); +} +.flag-icon-sr { + background-image: url(../flags/4x3/sr.svg); +} +.flag-icon-sr.flag-icon-squared { + background-image: url(../flags/1x1/sr.svg); +} +.flag-icon-ss { + background-image: url(../flags/4x3/ss.svg); +} +.flag-icon-ss.flag-icon-squared { + background-image: url(../flags/1x1/ss.svg); +} +.flag-icon-st { + background-image: url(../flags/4x3/st.svg); +} +.flag-icon-st.flag-icon-squared { + background-image: url(../flags/1x1/st.svg); +} +.flag-icon-sv { + background-image: url(../flags/4x3/sv.svg); +} +.flag-icon-sv.flag-icon-squared { + background-image: url(../flags/1x1/sv.svg); +} +.flag-icon-sx { + background-image: url(../flags/4x3/sx.svg); +} +.flag-icon-sx.flag-icon-squared { + background-image: url(../flags/1x1/sx.svg); +} +.flag-icon-sy { + background-image: url(../flags/4x3/sy.svg); +} +.flag-icon-sy.flag-icon-squared { + background-image: url(../flags/1x1/sy.svg); +} +.flag-icon-sz { + background-image: url(../flags/4x3/sz.svg); +} +.flag-icon-sz.flag-icon-squared { + background-image: url(../flags/1x1/sz.svg); +} +.flag-icon-tc { + background-image: url(../flags/4x3/tc.svg); +} +.flag-icon-tc.flag-icon-squared { + background-image: url(../flags/1x1/tc.svg); +} +.flag-icon-td { + background-image: url(../flags/4x3/td.svg); +} +.flag-icon-td.flag-icon-squared { + background-image: url(../flags/1x1/td.svg); +} +.flag-icon-tf { + background-image: url(../flags/4x3/tf.svg); +} +.flag-icon-tf.flag-icon-squared { + background-image: url(../flags/1x1/tf.svg); +} +.flag-icon-tg { + background-image: url(../flags/4x3/tg.svg); +} +.flag-icon-tg.flag-icon-squared { + background-image: url(../flags/1x1/tg.svg); +} +.flag-icon-th { + background-image: url(../flags/4x3/th.svg); +} +.flag-icon-th.flag-icon-squared { + background-image: url(../flags/1x1/th.svg); +} +.flag-icon-tj { + background-image: url(../flags/4x3/tj.svg); +} +.flag-icon-tj.flag-icon-squared { + background-image: url(../flags/1x1/tj.svg); +} +.flag-icon-tk { + background-image: url(../flags/4x3/tk.svg); +} +.flag-icon-tk.flag-icon-squared { + background-image: url(../flags/1x1/tk.svg); +} +.flag-icon-tl { + background-image: url(../flags/4x3/tl.svg); +} +.flag-icon-tl.flag-icon-squared { + background-image: url(../flags/1x1/tl.svg); +} +.flag-icon-tm { + background-image: url(../flags/4x3/tm.svg); +} +.flag-icon-tm.flag-icon-squared { + background-image: url(../flags/1x1/tm.svg); +} +.flag-icon-tn { + background-image: url(../flags/4x3/tn.svg); +} +.flag-icon-tn.flag-icon-squared { + background-image: url(../flags/1x1/tn.svg); +} +.flag-icon-to { + background-image: url(../flags/4x3/to.svg); +} +.flag-icon-to.flag-icon-squared { + background-image: url(../flags/1x1/to.svg); +} +.flag-icon-tr { + background-image: url(../flags/4x3/tr.svg); +} +.flag-icon-tr.flag-icon-squared { + background-image: url(../flags/1x1/tr.svg); +} +.flag-icon-tt { + background-image: url(../flags/4x3/tt.svg); +} +.flag-icon-tt.flag-icon-squared { + background-image: url(../flags/1x1/tt.svg); +} +.flag-icon-tv { + background-image: url(../flags/4x3/tv.svg); +} +.flag-icon-tv.flag-icon-squared { + background-image: url(../flags/1x1/tv.svg); +} +.flag-icon-tw { + background-image: url(../flags/4x3/tw.svg); +} +.flag-icon-tw.flag-icon-squared { + background-image: url(../flags/1x1/tw.svg); +} +.flag-icon-tz { + background-image: url(../flags/4x3/tz.svg); +} +.flag-icon-tz.flag-icon-squared { + background-image: url(../flags/1x1/tz.svg); +} +.flag-icon-ua { + background-image: url(../flags/4x3/ua.svg); +} +.flag-icon-ua.flag-icon-squared { + background-image: url(../flags/1x1/ua.svg); +} +.flag-icon-ug { + background-image: url(../flags/4x3/ug.svg); +} +.flag-icon-ug.flag-icon-squared { + background-image: url(../flags/1x1/ug.svg); +} +.flag-icon-um { + background-image: url(../flags/4x3/um.svg); +} +.flag-icon-um.flag-icon-squared { + background-image: url(../flags/1x1/um.svg); +} +.flag-icon-us { + background-image: url(../flags/4x3/us.svg); +} +.flag-icon-us.flag-icon-squared { + background-image: url(../flags/1x1/us.svg); +} +.flag-icon-uy { + background-image: url(../flags/4x3/uy.svg); +} +.flag-icon-uy.flag-icon-squared { + background-image: url(../flags/1x1/uy.svg); +} +.flag-icon-uz { + background-image: url(../flags/4x3/uz.svg); +} +.flag-icon-uz.flag-icon-squared { + background-image: url(../flags/1x1/uz.svg); +} +.flag-icon-va { + background-image: url(../flags/4x3/va.svg); +} +.flag-icon-va.flag-icon-squared { + background-image: url(../flags/1x1/va.svg); +} +.flag-icon-vc { + background-image: url(../flags/4x3/vc.svg); +} +.flag-icon-vc.flag-icon-squared { + background-image: url(../flags/1x1/vc.svg); +} +.flag-icon-ve { + background-image: url(../flags/4x3/ve.svg); +} +.flag-icon-ve.flag-icon-squared { + background-image: url(../flags/1x1/ve.svg); +} +.flag-icon-vg { + background-image: url(../flags/4x3/vg.svg); +} +.flag-icon-vg.flag-icon-squared { + background-image: url(../flags/1x1/vg.svg); +} +.flag-icon-vi { + background-image: url(../flags/4x3/vi.svg); +} +.flag-icon-vi.flag-icon-squared { + background-image: url(../flags/1x1/vi.svg); +} +.flag-icon-vn { + background-image: url(../flags/4x3/vn.svg); +} +.flag-icon-vn.flag-icon-squared { + background-image: url(../flags/1x1/vn.svg); +} +.flag-icon-vu { + background-image: url(../flags/4x3/vu.svg); +} +.flag-icon-vu.flag-icon-squared { + background-image: url(../flags/1x1/vu.svg); +} +.flag-icon-wf { + background-image: url(../flags/4x3/wf.svg); +} +.flag-icon-wf.flag-icon-squared { + background-image: url(../flags/1x1/wf.svg); +} +.flag-icon-ws { + background-image: url(../flags/4x3/ws.svg); +} +.flag-icon-ws.flag-icon-squared { + background-image: url(../flags/1x1/ws.svg); +} +.flag-icon-ye { + background-image: url(../flags/4x3/ye.svg); +} +.flag-icon-ye.flag-icon-squared { + background-image: url(../flags/1x1/ye.svg); +} +.flag-icon-yt { + background-image: url(../flags/4x3/yt.svg); +} +.flag-icon-yt.flag-icon-squared { + background-image: url(../flags/1x1/yt.svg); +} +.flag-icon-za { + background-image: url(../flags/4x3/za.svg); +} +.flag-icon-za.flag-icon-squared { + background-image: url(../flags/1x1/za.svg); +} +.flag-icon-zm { + background-image: url(../flags/4x3/zm.svg); +} +.flag-icon-zm.flag-icon-squared { + background-image: url(../flags/1x1/zm.svg); +} +.flag-icon-zw { + background-image: url(../flags/4x3/zw.svg); +} +.flag-icon-zw.flag-icon-squared { + background-image: url(../flags/1x1/zw.svg); +} +.flag-icon-es-ca { + background-image: url(../flags/4x3/es-ca.svg); +} +.flag-icon-es-ca.flag-icon-squared { + background-image: url(../flags/1x1/es-ca.svg); +} +.flag-icon-es-ga { + background-image: url(../flags/4x3/es-ga.svg); +} +.flag-icon-es-ga.flag-icon-squared { + background-image: url(../flags/1x1/es-ga.svg); +} +.flag-icon-eu { + background-image: url(../flags/4x3/eu.svg); +} +.flag-icon-eu.flag-icon-squared { + background-image: url(../flags/1x1/eu.svg); +} +.flag-icon-gb-eng { + background-image: url(../flags/4x3/gb-eng.svg); +} +.flag-icon-gb-eng.flag-icon-squared { + background-image: url(../flags/1x1/gb-eng.svg); +} +.flag-icon-gb-nir { + background-image: url(../flags/4x3/gb-nir.svg); +} +.flag-icon-gb-nir.flag-icon-squared { + background-image: url(../flags/1x1/gb-nir.svg); +} +.flag-icon-gb-sct { + background-image: url(../flags/4x3/gb-sct.svg); +} +.flag-icon-gb-sct.flag-icon-squared { + background-image: url(../flags/1x1/gb-sct.svg); +} +.flag-icon-gb-wls { + background-image: url(../flags/4x3/gb-wls.svg); +} +.flag-icon-gb-wls.flag-icon-squared { + background-image: url(../flags/1x1/gb-wls.svg); +} +.flag-icon-un { + background-image: url(../flags/4x3/un.svg); +} +.flag-icon-un.flag-icon-squared { + background-image: url(../flags/1x1/un.svg); +} +.flag-icon-xk { + background-image: url(../flags/4x3/xk.svg); +} +.flag-icon-xk.flag-icon-squared { + background-image: url(../flags/1x1/xk.svg); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.min.css b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.min.css new file mode 100644 index 00000000000..3d049b39537 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.min.css @@ -0,0 +1 @@ +.flag-icon-background{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat;position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:'\00a0'}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(../flags/4x3/ad.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(../flags/1x1/ad.svg)}.flag-icon-ae{background-image:url(../flags/4x3/ae.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(../flags/1x1/ae.svg)}.flag-icon-af{background-image:url(../flags/4x3/af.svg)}.flag-icon-af.flag-icon-squared{background-image:url(../flags/1x1/af.svg)}.flag-icon-ag{background-image:url(../flags/4x3/ag.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(../flags/1x1/ag.svg)}.flag-icon-ai{background-image:url(../flags/4x3/ai.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(../flags/1x1/ai.svg)}.flag-icon-al{background-image:url(../flags/4x3/al.svg)}.flag-icon-al.flag-icon-squared{background-image:url(../flags/1x1/al.svg)}.flag-icon-am{background-image:url(../flags/4x3/am.svg)}.flag-icon-am.flag-icon-squared{background-image:url(../flags/1x1/am.svg)}.flag-icon-ao{background-image:url(../flags/4x3/ao.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(../flags/1x1/ao.svg)}.flag-icon-aq{background-image:url(../flags/4x3/aq.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(../flags/1x1/aq.svg)}.flag-icon-ar{background-image:url(../flags/4x3/ar.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(../flags/1x1/ar.svg)}.flag-icon-as{background-image:url(../flags/4x3/as.svg)}.flag-icon-as.flag-icon-squared{background-image:url(../flags/1x1/as.svg)}.flag-icon-at{background-image:url(../flags/4x3/at.svg)}.flag-icon-at.flag-icon-squared{background-image:url(../flags/1x1/at.svg)}.flag-icon-au{background-image:url(../flags/4x3/au.svg)}.flag-icon-au.flag-icon-squared{background-image:url(../flags/1x1/au.svg)}.flag-icon-aw{background-image:url(../flags/4x3/aw.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(../flags/1x1/aw.svg)}.flag-icon-ax{background-image:url(../flags/4x3/ax.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(../flags/1x1/ax.svg)}.flag-icon-az{background-image:url(../flags/4x3/az.svg)}.flag-icon-az.flag-icon-squared{background-image:url(../flags/1x1/az.svg)}.flag-icon-ba{background-image:url(../flags/4x3/ba.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(../flags/1x1/ba.svg)}.flag-icon-bb{background-image:url(../flags/4x3/bb.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(../flags/1x1/bb.svg)}.flag-icon-bd{background-image:url(../flags/4x3/bd.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(../flags/1x1/bd.svg)}.flag-icon-be{background-image:url(../flags/4x3/be.svg)}.flag-icon-be.flag-icon-squared{background-image:url(../flags/1x1/be.svg)}.flag-icon-bf{background-image:url(../flags/4x3/bf.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(../flags/1x1/bf.svg)}.flag-icon-bg{background-image:url(../flags/4x3/bg.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(../flags/1x1/bg.svg)}.flag-icon-bh{background-image:url(../flags/4x3/bh.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(../flags/1x1/bh.svg)}.flag-icon-bi{background-image:url(../flags/4x3/bi.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(../flags/1x1/bi.svg)}.flag-icon-bj{background-image:url(../flags/4x3/bj.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(../flags/1x1/bj.svg)}.flag-icon-bl{background-image:url(../flags/4x3/bl.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(../flags/1x1/bl.svg)}.flag-icon-bm{background-image:url(../flags/4x3/bm.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(../flags/1x1/bm.svg)}.flag-icon-bn{background-image:url(../flags/4x3/bn.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(../flags/1x1/bn.svg)}.flag-icon-bo{background-image:url(../flags/4x3/bo.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(../flags/1x1/bo.svg)}.flag-icon-bq{background-image:url(../flags/4x3/bq.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(../flags/1x1/bq.svg)}.flag-icon-br{background-image:url(../flags/4x3/br.svg)}.flag-icon-br.flag-icon-squared{background-image:url(../flags/1x1/br.svg)}.flag-icon-bs{background-image:url(../flags/4x3/bs.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(../flags/1x1/bs.svg)}.flag-icon-bt{background-image:url(../flags/4x3/bt.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(../flags/1x1/bt.svg)}.flag-icon-bv{background-image:url(../flags/4x3/bv.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(../flags/1x1/bv.svg)}.flag-icon-bw{background-image:url(../flags/4x3/bw.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(../flags/1x1/bw.svg)}.flag-icon-by{background-image:url(../flags/4x3/by.svg)}.flag-icon-by.flag-icon-squared{background-image:url(../flags/1x1/by.svg)}.flag-icon-bz{background-image:url(../flags/4x3/bz.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(../flags/1x1/bz.svg)}.flag-icon-ca{background-image:url(../flags/4x3/ca.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(../flags/1x1/ca.svg)}.flag-icon-cc{background-image:url(../flags/4x3/cc.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(../flags/1x1/cc.svg)}.flag-icon-cd{background-image:url(../flags/4x3/cd.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(../flags/1x1/cd.svg)}.flag-icon-cf{background-image:url(../flags/4x3/cf.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(../flags/1x1/cf.svg)}.flag-icon-cg{background-image:url(../flags/4x3/cg.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(../flags/1x1/cg.svg)}.flag-icon-ch{background-image:url(../flags/4x3/ch.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(../flags/1x1/ch.svg)}.flag-icon-ci{background-image:url(../flags/4x3/ci.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(../flags/1x1/ci.svg)}.flag-icon-ck{background-image:url(../flags/4x3/ck.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(../flags/1x1/ck.svg)}.flag-icon-cl{background-image:url(../flags/4x3/cl.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(../flags/1x1/cl.svg)}.flag-icon-cm{background-image:url(../flags/4x3/cm.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(../flags/1x1/cm.svg)}.flag-icon-cn{background-image:url(../flags/4x3/cn.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(../flags/1x1/cn.svg)}.flag-icon-co{background-image:url(../flags/4x3/co.svg)}.flag-icon-co.flag-icon-squared{background-image:url(../flags/1x1/co.svg)}.flag-icon-cr{background-image:url(../flags/4x3/cr.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(../flags/1x1/cr.svg)}.flag-icon-cu{background-image:url(../flags/4x3/cu.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(../flags/1x1/cu.svg)}.flag-icon-cv{background-image:url(../flags/4x3/cv.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(../flags/1x1/cv.svg)}.flag-icon-cw{background-image:url(../flags/4x3/cw.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(../flags/1x1/cw.svg)}.flag-icon-cx{background-image:url(../flags/4x3/cx.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(../flags/1x1/cx.svg)}.flag-icon-cy{background-image:url(../flags/4x3/cy.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(../flags/1x1/cy.svg)}.flag-icon-cz{background-image:url(../flags/4x3/cz.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(../flags/1x1/cz.svg)}.flag-icon-de{background-image:url(../flags/4x3/de.svg)}.flag-icon-de.flag-icon-squared{background-image:url(../flags/1x1/de.svg)}.flag-icon-dj{background-image:url(../flags/4x3/dj.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(../flags/1x1/dj.svg)}.flag-icon-dk{background-image:url(../flags/4x3/dk.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(../flags/1x1/dk.svg)}.flag-icon-dm{background-image:url(../flags/4x3/dm.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(../flags/1x1/dm.svg)}.flag-icon-do{background-image:url(../flags/4x3/do.svg)}.flag-icon-do.flag-icon-squared{background-image:url(../flags/1x1/do.svg)}.flag-icon-dz{background-image:url(../flags/4x3/dz.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(../flags/1x1/dz.svg)}.flag-icon-ec{background-image:url(../flags/4x3/ec.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(../flags/1x1/ec.svg)}.flag-icon-ee{background-image:url(../flags/4x3/ee.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(../flags/1x1/ee.svg)}.flag-icon-eg{background-image:url(../flags/4x3/eg.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(../flags/1x1/eg.svg)}.flag-icon-eh{background-image:url(../flags/4x3/eh.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(../flags/1x1/eh.svg)}.flag-icon-er{background-image:url(../flags/4x3/er.svg)}.flag-icon-er.flag-icon-squared{background-image:url(../flags/1x1/er.svg)}.flag-icon-es{background-image:url(../flags/4x3/es.svg)}.flag-icon-es.flag-icon-squared{background-image:url(../flags/1x1/es.svg)}.flag-icon-et{background-image:url(../flags/4x3/et.svg)}.flag-icon-et.flag-icon-squared{background-image:url(../flags/1x1/et.svg)}.flag-icon-fi{background-image:url(../flags/4x3/fi.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(../flags/1x1/fi.svg)}.flag-icon-fj{background-image:url(../flags/4x3/fj.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(../flags/1x1/fj.svg)}.flag-icon-fk{background-image:url(../flags/4x3/fk.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(../flags/1x1/fk.svg)}.flag-icon-fm{background-image:url(../flags/4x3/fm.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(../flags/1x1/fm.svg)}.flag-icon-fo{background-image:url(../flags/4x3/fo.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(../flags/1x1/fo.svg)}.flag-icon-fr{background-image:url(../flags/4x3/fr.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(../flags/1x1/fr.svg)}.flag-icon-ga{background-image:url(../flags/4x3/ga.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(../flags/1x1/ga.svg)}.flag-icon-gb{background-image:url(../flags/4x3/gb.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(../flags/1x1/gb.svg)}.flag-icon-gd{background-image:url(../flags/4x3/gd.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(../flags/1x1/gd.svg)}.flag-icon-ge{background-image:url(../flags/4x3/ge.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(../flags/1x1/ge.svg)}.flag-icon-gf{background-image:url(../flags/4x3/gf.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(../flags/1x1/gf.svg)}.flag-icon-gg{background-image:url(../flags/4x3/gg.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(../flags/1x1/gg.svg)}.flag-icon-gh{background-image:url(../flags/4x3/gh.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(../flags/1x1/gh.svg)}.flag-icon-gi{background-image:url(../flags/4x3/gi.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(../flags/1x1/gi.svg)}.flag-icon-gl{background-image:url(../flags/4x3/gl.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(../flags/1x1/gl.svg)}.flag-icon-gm{background-image:url(../flags/4x3/gm.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(../flags/1x1/gm.svg)}.flag-icon-gn{background-image:url(../flags/4x3/gn.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(../flags/1x1/gn.svg)}.flag-icon-gp{background-image:url(../flags/4x3/gp.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(../flags/1x1/gp.svg)}.flag-icon-gq{background-image:url(../flags/4x3/gq.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(../flags/1x1/gq.svg)}.flag-icon-gr{background-image:url(../flags/4x3/gr.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(../flags/1x1/gr.svg)}.flag-icon-gs{background-image:url(../flags/4x3/gs.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(../flags/1x1/gs.svg)}.flag-icon-gt{background-image:url(../flags/4x3/gt.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(../flags/1x1/gt.svg)}.flag-icon-gu{background-image:url(../flags/4x3/gu.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(../flags/1x1/gu.svg)}.flag-icon-gw{background-image:url(../flags/4x3/gw.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(../flags/1x1/gw.svg)}.flag-icon-gy{background-image:url(../flags/4x3/gy.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(../flags/1x1/gy.svg)}.flag-icon-hk{background-image:url(../flags/4x3/hk.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(../flags/1x1/hk.svg)}.flag-icon-hm{background-image:url(../flags/4x3/hm.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(../flags/1x1/hm.svg)}.flag-icon-hn{background-image:url(../flags/4x3/hn.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(../flags/1x1/hn.svg)}.flag-icon-hr{background-image:url(../flags/4x3/hr.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(../flags/1x1/hr.svg)}.flag-icon-ht{background-image:url(../flags/4x3/ht.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(../flags/1x1/ht.svg)}.flag-icon-hu{background-image:url(../flags/4x3/hu.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(../flags/1x1/hu.svg)}.flag-icon-id{background-image:url(../flags/4x3/id.svg)}.flag-icon-id.flag-icon-squared{background-image:url(../flags/1x1/id.svg)}.flag-icon-ie{background-image:url(../flags/4x3/ie.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(../flags/1x1/ie.svg)}.flag-icon-il{background-image:url(../flags/4x3/il.svg)}.flag-icon-il.flag-icon-squared{background-image:url(../flags/1x1/il.svg)}.flag-icon-im{background-image:url(../flags/4x3/im.svg)}.flag-icon-im.flag-icon-squared{background-image:url(../flags/1x1/im.svg)}.flag-icon-in{background-image:url(../flags/4x3/in.svg)}.flag-icon-in.flag-icon-squared{background-image:url(../flags/1x1/in.svg)}.flag-icon-io{background-image:url(../flags/4x3/io.svg)}.flag-icon-io.flag-icon-squared{background-image:url(../flags/1x1/io.svg)}.flag-icon-iq{background-image:url(../flags/4x3/iq.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(../flags/1x1/iq.svg)}.flag-icon-ir{background-image:url(../flags/4x3/ir.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(../flags/1x1/ir.svg)}.flag-icon-is{background-image:url(../flags/4x3/is.svg)}.flag-icon-is.flag-icon-squared{background-image:url(../flags/1x1/is.svg)}.flag-icon-it{background-image:url(../flags/4x3/it.svg)}.flag-icon-it.flag-icon-squared{background-image:url(../flags/1x1/it.svg)}.flag-icon-je{background-image:url(../flags/4x3/je.svg)}.flag-icon-je.flag-icon-squared{background-image:url(../flags/1x1/je.svg)}.flag-icon-jm{background-image:url(../flags/4x3/jm.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(../flags/1x1/jm.svg)}.flag-icon-jo{background-image:url(../flags/4x3/jo.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(../flags/1x1/jo.svg)}.flag-icon-jp{background-image:url(../flags/4x3/jp.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(../flags/1x1/jp.svg)}.flag-icon-ke{background-image:url(../flags/4x3/ke.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(../flags/1x1/ke.svg)}.flag-icon-kg{background-image:url(../flags/4x3/kg.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(../flags/1x1/kg.svg)}.flag-icon-kh{background-image:url(../flags/4x3/kh.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(../flags/1x1/kh.svg)}.flag-icon-ki{background-image:url(../flags/4x3/ki.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(../flags/1x1/ki.svg)}.flag-icon-km{background-image:url(../flags/4x3/km.svg)}.flag-icon-km.flag-icon-squared{background-image:url(../flags/1x1/km.svg)}.flag-icon-kn{background-image:url(../flags/4x3/kn.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(../flags/1x1/kn.svg)}.flag-icon-kp{background-image:url(../flags/4x3/kp.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(../flags/1x1/kp.svg)}.flag-icon-kr{background-image:url(../flags/4x3/kr.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(../flags/1x1/kr.svg)}.flag-icon-kw{background-image:url(../flags/4x3/kw.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(../flags/1x1/kw.svg)}.flag-icon-ky{background-image:url(../flags/4x3/ky.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(../flags/1x1/ky.svg)}.flag-icon-kz{background-image:url(../flags/4x3/kz.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(../flags/1x1/kz.svg)}.flag-icon-la{background-image:url(../flags/4x3/la.svg)}.flag-icon-la.flag-icon-squared{background-image:url(../flags/1x1/la.svg)}.flag-icon-lb{background-image:url(../flags/4x3/lb.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(../flags/1x1/lb.svg)}.flag-icon-lc{background-image:url(../flags/4x3/lc.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(../flags/1x1/lc.svg)}.flag-icon-li{background-image:url(../flags/4x3/li.svg)}.flag-icon-li.flag-icon-squared{background-image:url(../flags/1x1/li.svg)}.flag-icon-lk{background-image:url(../flags/4x3/lk.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(../flags/1x1/lk.svg)}.flag-icon-lr{background-image:url(../flags/4x3/lr.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(../flags/1x1/lr.svg)}.flag-icon-ls{background-image:url(../flags/4x3/ls.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(../flags/1x1/ls.svg)}.flag-icon-lt{background-image:url(../flags/4x3/lt.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(../flags/1x1/lt.svg)}.flag-icon-lu{background-image:url(../flags/4x3/lu.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(../flags/1x1/lu.svg)}.flag-icon-lv{background-image:url(../flags/4x3/lv.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(../flags/1x1/lv.svg)}.flag-icon-ly{background-image:url(../flags/4x3/ly.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(../flags/1x1/ly.svg)}.flag-icon-ma{background-image:url(../flags/4x3/ma.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(../flags/1x1/ma.svg)}.flag-icon-mc{background-image:url(../flags/4x3/mc.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(../flags/1x1/mc.svg)}.flag-icon-md{background-image:url(../flags/4x3/md.svg)}.flag-icon-md.flag-icon-squared{background-image:url(../flags/1x1/md.svg)}.flag-icon-me{background-image:url(../flags/4x3/me.svg)}.flag-icon-me.flag-icon-squared{background-image:url(../flags/1x1/me.svg)}.flag-icon-mf{background-image:url(../flags/4x3/mf.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(../flags/1x1/mf.svg)}.flag-icon-mg{background-image:url(../flags/4x3/mg.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(../flags/1x1/mg.svg)}.flag-icon-mh{background-image:url(../flags/4x3/mh.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(../flags/1x1/mh.svg)}.flag-icon-mk{background-image:url(../flags/4x3/mk.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(../flags/1x1/mk.svg)}.flag-icon-ml{background-image:url(../flags/4x3/ml.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(../flags/1x1/ml.svg)}.flag-icon-mm{background-image:url(../flags/4x3/mm.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(../flags/1x1/mm.svg)}.flag-icon-mn{background-image:url(../flags/4x3/mn.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(../flags/1x1/mn.svg)}.flag-icon-mo{background-image:url(../flags/4x3/mo.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(../flags/1x1/mo.svg)}.flag-icon-mp{background-image:url(../flags/4x3/mp.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(../flags/1x1/mp.svg)}.flag-icon-mq{background-image:url(../flags/4x3/mq.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(../flags/1x1/mq.svg)}.flag-icon-mr{background-image:url(../flags/4x3/mr.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(../flags/1x1/mr.svg)}.flag-icon-ms{background-image:url(../flags/4x3/ms.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(../flags/1x1/ms.svg)}.flag-icon-mt{background-image:url(../flags/4x3/mt.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(../flags/1x1/mt.svg)}.flag-icon-mu{background-image:url(../flags/4x3/mu.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(../flags/1x1/mu.svg)}.flag-icon-mv{background-image:url(../flags/4x3/mv.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(../flags/1x1/mv.svg)}.flag-icon-mw{background-image:url(../flags/4x3/mw.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(../flags/1x1/mw.svg)}.flag-icon-mx{background-image:url(../flags/4x3/mx.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(../flags/1x1/mx.svg)}.flag-icon-my{background-image:url(../flags/4x3/my.svg)}.flag-icon-my.flag-icon-squared{background-image:url(../flags/1x1/my.svg)}.flag-icon-mz{background-image:url(../flags/4x3/mz.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(../flags/1x1/mz.svg)}.flag-icon-na{background-image:url(../flags/4x3/na.svg)}.flag-icon-na.flag-icon-squared{background-image:url(../flags/1x1/na.svg)}.flag-icon-nc{background-image:url(../flags/4x3/nc.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(../flags/1x1/nc.svg)}.flag-icon-ne{background-image:url(../flags/4x3/ne.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(../flags/1x1/ne.svg)}.flag-icon-nf{background-image:url(../flags/4x3/nf.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(../flags/1x1/nf.svg)}.flag-icon-ng{background-image:url(../flags/4x3/ng.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(../flags/1x1/ng.svg)}.flag-icon-ni{background-image:url(../flags/4x3/ni.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(../flags/1x1/ni.svg)}.flag-icon-nl{background-image:url(../flags/4x3/nl.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(../flags/1x1/nl.svg)}.flag-icon-no{background-image:url(../flags/4x3/no.svg)}.flag-icon-no.flag-icon-squared{background-image:url(../flags/1x1/no.svg)}.flag-icon-np{background-image:url(../flags/4x3/np.svg)}.flag-icon-np.flag-icon-squared{background-image:url(../flags/1x1/np.svg)}.flag-icon-nr{background-image:url(../flags/4x3/nr.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(../flags/1x1/nr.svg)}.flag-icon-nu{background-image:url(../flags/4x3/nu.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(../flags/1x1/nu.svg)}.flag-icon-nz{background-image:url(../flags/4x3/nz.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(../flags/1x1/nz.svg)}.flag-icon-om{background-image:url(../flags/4x3/om.svg)}.flag-icon-om.flag-icon-squared{background-image:url(../flags/1x1/om.svg)}.flag-icon-pa{background-image:url(../flags/4x3/pa.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(../flags/1x1/pa.svg)}.flag-icon-pe{background-image:url(../flags/4x3/pe.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(../flags/1x1/pe.svg)}.flag-icon-pf{background-image:url(../flags/4x3/pf.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(../flags/1x1/pf.svg)}.flag-icon-pg{background-image:url(../flags/4x3/pg.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(../flags/1x1/pg.svg)}.flag-icon-ph{background-image:url(../flags/4x3/ph.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(../flags/1x1/ph.svg)}.flag-icon-pk{background-image:url(../flags/4x3/pk.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(../flags/1x1/pk.svg)}.flag-icon-pl{background-image:url(../flags/4x3/pl.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(../flags/1x1/pl.svg)}.flag-icon-pm{background-image:url(../flags/4x3/pm.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(../flags/1x1/pm.svg)}.flag-icon-pn{background-image:url(../flags/4x3/pn.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(../flags/1x1/pn.svg)}.flag-icon-pr{background-image:url(../flags/4x3/pr.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(../flags/1x1/pr.svg)}.flag-icon-ps{background-image:url(../flags/4x3/ps.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(../flags/1x1/ps.svg)}.flag-icon-pt{background-image:url(../flags/4x3/pt.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(../flags/1x1/pt.svg)}.flag-icon-pw{background-image:url(../flags/4x3/pw.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(../flags/1x1/pw.svg)}.flag-icon-py{background-image:url(../flags/4x3/py.svg)}.flag-icon-py.flag-icon-squared{background-image:url(../flags/1x1/py.svg)}.flag-icon-qa{background-image:url(../flags/4x3/qa.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(../flags/1x1/qa.svg)}.flag-icon-re{background-image:url(../flags/4x3/re.svg)}.flag-icon-re.flag-icon-squared{background-image:url(../flags/1x1/re.svg)}.flag-icon-ro{background-image:url(../flags/4x3/ro.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(../flags/1x1/ro.svg)}.flag-icon-rs{background-image:url(../flags/4x3/rs.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(../flags/1x1/rs.svg)}.flag-icon-ru{background-image:url(../flags/4x3/ru.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(../flags/1x1/ru.svg)}.flag-icon-rw{background-image:url(../flags/4x3/rw.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(../flags/1x1/rw.svg)}.flag-icon-sa{background-image:url(../flags/4x3/sa.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(../flags/1x1/sa.svg)}.flag-icon-sb{background-image:url(../flags/4x3/sb.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(../flags/1x1/sb.svg)}.flag-icon-sc{background-image:url(../flags/4x3/sc.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(../flags/1x1/sc.svg)}.flag-icon-sd{background-image:url(../flags/4x3/sd.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(../flags/1x1/sd.svg)}.flag-icon-se{background-image:url(../flags/4x3/se.svg)}.flag-icon-se.flag-icon-squared{background-image:url(../flags/1x1/se.svg)}.flag-icon-sg{background-image:url(../flags/4x3/sg.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(../flags/1x1/sg.svg)}.flag-icon-sh{background-image:url(../flags/4x3/sh.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(../flags/1x1/sh.svg)}.flag-icon-si{background-image:url(../flags/4x3/si.svg)}.flag-icon-si.flag-icon-squared{background-image:url(../flags/1x1/si.svg)}.flag-icon-sj{background-image:url(../flags/4x3/sj.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(../flags/1x1/sj.svg)}.flag-icon-sk{background-image:url(../flags/4x3/sk.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(../flags/1x1/sk.svg)}.flag-icon-sl{background-image:url(../flags/4x3/sl.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(../flags/1x1/sl.svg)}.flag-icon-sm{background-image:url(../flags/4x3/sm.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(../flags/1x1/sm.svg)}.flag-icon-sn{background-image:url(../flags/4x3/sn.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(../flags/1x1/sn.svg)}.flag-icon-so{background-image:url(../flags/4x3/so.svg)}.flag-icon-so.flag-icon-squared{background-image:url(../flags/1x1/so.svg)}.flag-icon-sr{background-image:url(../flags/4x3/sr.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(../flags/1x1/sr.svg)}.flag-icon-ss{background-image:url(../flags/4x3/ss.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(../flags/1x1/ss.svg)}.flag-icon-st{background-image:url(../flags/4x3/st.svg)}.flag-icon-st.flag-icon-squared{background-image:url(../flags/1x1/st.svg)}.flag-icon-sv{background-image:url(../flags/4x3/sv.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(../flags/1x1/sv.svg)}.flag-icon-sx{background-image:url(../flags/4x3/sx.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(../flags/1x1/sx.svg)}.flag-icon-sy{background-image:url(../flags/4x3/sy.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(../flags/1x1/sy.svg)}.flag-icon-sz{background-image:url(../flags/4x3/sz.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(../flags/1x1/sz.svg)}.flag-icon-tc{background-image:url(../flags/4x3/tc.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(../flags/1x1/tc.svg)}.flag-icon-td{background-image:url(../flags/4x3/td.svg)}.flag-icon-td.flag-icon-squared{background-image:url(../flags/1x1/td.svg)}.flag-icon-tf{background-image:url(../flags/4x3/tf.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(../flags/1x1/tf.svg)}.flag-icon-tg{background-image:url(../flags/4x3/tg.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(../flags/1x1/tg.svg)}.flag-icon-th{background-image:url(../flags/4x3/th.svg)}.flag-icon-th.flag-icon-squared{background-image:url(../flags/1x1/th.svg)}.flag-icon-tj{background-image:url(../flags/4x3/tj.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(../flags/1x1/tj.svg)}.flag-icon-tk{background-image:url(../flags/4x3/tk.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(../flags/1x1/tk.svg)}.flag-icon-tl{background-image:url(../flags/4x3/tl.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(../flags/1x1/tl.svg)}.flag-icon-tm{background-image:url(../flags/4x3/tm.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(../flags/1x1/tm.svg)}.flag-icon-tn{background-image:url(../flags/4x3/tn.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(../flags/1x1/tn.svg)}.flag-icon-to{background-image:url(../flags/4x3/to.svg)}.flag-icon-to.flag-icon-squared{background-image:url(../flags/1x1/to.svg)}.flag-icon-tr{background-image:url(../flags/4x3/tr.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(../flags/1x1/tr.svg)}.flag-icon-tt{background-image:url(../flags/4x3/tt.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(../flags/1x1/tt.svg)}.flag-icon-tv{background-image:url(../flags/4x3/tv.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(../flags/1x1/tv.svg)}.flag-icon-tw{background-image:url(../flags/4x3/tw.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(../flags/1x1/tw.svg)}.flag-icon-tz{background-image:url(../flags/4x3/tz.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(../flags/1x1/tz.svg)}.flag-icon-ua{background-image:url(../flags/4x3/ua.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(../flags/1x1/ua.svg)}.flag-icon-ug{background-image:url(../flags/4x3/ug.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(../flags/1x1/ug.svg)}.flag-icon-um{background-image:url(../flags/4x3/um.svg)}.flag-icon-um.flag-icon-squared{background-image:url(../flags/1x1/um.svg)}.flag-icon-us{background-image:url(../flags/4x3/us.svg)}.flag-icon-us.flag-icon-squared{background-image:url(../flags/1x1/us.svg)}.flag-icon-uy{background-image:url(../flags/4x3/uy.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(../flags/1x1/uy.svg)}.flag-icon-uz{background-image:url(../flags/4x3/uz.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(../flags/1x1/uz.svg)}.flag-icon-va{background-image:url(../flags/4x3/va.svg)}.flag-icon-va.flag-icon-squared{background-image:url(../flags/1x1/va.svg)}.flag-icon-vc{background-image:url(../flags/4x3/vc.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(../flags/1x1/vc.svg)}.flag-icon-ve{background-image:url(../flags/4x3/ve.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(../flags/1x1/ve.svg)}.flag-icon-vg{background-image:url(../flags/4x3/vg.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(../flags/1x1/vg.svg)}.flag-icon-vi{background-image:url(../flags/4x3/vi.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(../flags/1x1/vi.svg)}.flag-icon-vn{background-image:url(../flags/4x3/vn.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(../flags/1x1/vn.svg)}.flag-icon-vu{background-image:url(../flags/4x3/vu.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(../flags/1x1/vu.svg)}.flag-icon-wf{background-image:url(../flags/4x3/wf.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(../flags/1x1/wf.svg)}.flag-icon-ws{background-image:url(../flags/4x3/ws.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(../flags/1x1/ws.svg)}.flag-icon-ye{background-image:url(../flags/4x3/ye.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(../flags/1x1/ye.svg)}.flag-icon-yt{background-image:url(../flags/4x3/yt.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(../flags/1x1/yt.svg)}.flag-icon-za{background-image:url(../flags/4x3/za.svg)}.flag-icon-za.flag-icon-squared{background-image:url(../flags/1x1/za.svg)}.flag-icon-zm{background-image:url(../flags/4x3/zm.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(../flags/1x1/zm.svg)}.flag-icon-zw{background-image:url(../flags/4x3/zw.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(../flags/1x1/zw.svg)}.flag-icon-es-ca{background-image:url(../flags/4x3/es-ca.svg)}.flag-icon-es-ca.flag-icon-squared{background-image:url(../flags/1x1/es-ca.svg)}.flag-icon-es-ga{background-image:url(../flags/4x3/es-ga.svg)}.flag-icon-es-ga.flag-icon-squared{background-image:url(../flags/1x1/es-ga.svg)}.flag-icon-eu{background-image:url(../flags/4x3/eu.svg)}.flag-icon-eu.flag-icon-squared{background-image:url(../flags/1x1/eu.svg)}.flag-icon-gb-eng{background-image:url(../flags/4x3/gb-eng.svg)}.flag-icon-gb-eng.flag-icon-squared{background-image:url(../flags/1x1/gb-eng.svg)}.flag-icon-gb-nir{background-image:url(../flags/4x3/gb-nir.svg)}.flag-icon-gb-nir.flag-icon-squared{background-image:url(../flags/1x1/gb-nir.svg)}.flag-icon-gb-sct{background-image:url(../flags/4x3/gb-sct.svg)}.flag-icon-gb-sct.flag-icon-squared{background-image:url(../flags/1x1/gb-sct.svg)}.flag-icon-gb-wls{background-image:url(../flags/4x3/gb-wls.svg)}.flag-icon-gb-wls.flag-icon-squared{background-image:url(../flags/1x1/gb-wls.svg)}.flag-icon-un{background-image:url(../flags/4x3/un.svg)}.flag-icon-un.flag-icon-squared{background-image:url(../flags/1x1/un.svg)}.flag-icon-xk{background-image:url(../flags/4x3/xk.svg)}.flag-icon-xk.flag-icon-squared{background-image:url(../flags/1x1/xk.svg)} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ad.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ad.svg new file mode 100644 index 00000000000..e7fc56abbca --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ad.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ae.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ae.svg new file mode 100644 index 00000000000..739c5d4646e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/af.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/af.svg new file mode 100644 index 00000000000..90c34b8d5a6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ag.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ag.svg new file mode 100644 index 00000000000..d0b2a83cbe6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ai.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ai.svg new file mode 100644 index 00000000000..472be200e76 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ai.svg @@ -0,0 +1,763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/al.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/al.svg new file mode 100644 index 00000000000..75995ecde62 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/am.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/am.svg new file mode 100644 index 00000000000..1198be035ff --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ao.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ao.svg new file mode 100644 index 00000000000..a5a25bf1075 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aq.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aq.svg new file mode 100644 index 00000000000..80e682abd63 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ar.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ar.svg new file mode 100644 index 00000000000..1730ecac9e0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ar.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/as.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/as.svg new file mode 100644 index 00000000000..b8d8162d0a3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/as.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/at.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/at.svg new file mode 100644 index 00000000000..649d6efe0a7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/at.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/au.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/au.svg new file mode 100644 index 00000000000..ca5d607ea0f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/au.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aw.svg new file mode 100644 index 00000000000..248a08d69b8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ax.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ax.svg new file mode 100644 index 00000000000..cdeb07e2736 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/az.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/az.svg new file mode 100644 index 00000000000..0119e1ab4e0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ba.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ba.svg new file mode 100644 index 00000000000..5b92b0ab54a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bb.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bb.svg new file mode 100644 index 00000000000..9d627842f1e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bd.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bd.svg new file mode 100644 index 00000000000..4cb38cf503e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/be.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/be.svg new file mode 100644 index 00000000000..01496c3cace --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bf.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bf.svg new file mode 100644 index 00000000000..a3c7c44a4fa --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bg.svg new file mode 100644 index 00000000000..5abe67f6424 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bh.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bh.svg new file mode 100644 index 00000000000..22fba621a99 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bh.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bi.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bi.svg new file mode 100644 index 00000000000..cc11dcff2c4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bj.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bj.svg new file mode 100644 index 00000000000..07c4c117ca6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bl.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bl.svg new file mode 100644 index 00000000000..0fa74e1c3cc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bm.svg new file mode 100644 index 00000000000..a7057d24c03 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bm.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bn.svg new file mode 100644 index 00000000000..2e93aea3267 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bo.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bo.svg new file mode 100644 index 00000000000..52a534fe2b7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bo.svg @@ -0,0 +1,678 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bq.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bq.svg new file mode 100644 index 00000000000..cc872ef1b88 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/br.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/br.svg new file mode 100644 index 00000000000..8353e823fcd --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bs.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bs.svg new file mode 100644 index 00000000000..decdebb1efc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bt.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bt.svg new file mode 100644 index 00000000000..3bbbfaac749 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bv.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bv.svg new file mode 100644 index 00000000000..01c9ee147d7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bw.svg new file mode 100644 index 00000000000..0bc5d3d34f5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/by.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/by.svg new file mode 100644 index 00000000000..73e14f7a236 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/by.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bz.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bz.svg new file mode 100644 index 00000000000..0e9a27ca6a0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ca.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ca.svg new file mode 100644 index 00000000000..6882f6da65a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cc.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cc.svg new file mode 100644 index 00000000000..dd6e20003eb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cd.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cd.svg new file mode 100644 index 00000000000..5da2a96892d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cf.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cf.svg new file mode 100644 index 00000000000..e924621528c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cg.svg new file mode 100644 index 00000000000..a52ba7e2114 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ch.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ch.svg new file mode 100644 index 00000000000..773cdc8a3eb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ci.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ci.svg new file mode 100644 index 00000000000..bd1e3f41418 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ck.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ck.svg new file mode 100644 index 00000000000..f2df0dbe345 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ck.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cl.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cl.svg new file mode 100644 index 00000000000..b8088967210 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cm.svg new file mode 100644 index 00000000000..08b710bb87d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cn.svg new file mode 100644 index 00000000000..7873c1b4fad --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/co.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/co.svg new file mode 100644 index 00000000000..18d1c5f450e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cr.svg new file mode 100644 index 00000000000..a60a6dd6144 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cu.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cu.svg new file mode 100644 index 00000000000..396817620db --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cv.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cv.svg new file mode 100644 index 00000000000..a8311b2f83c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cw.svg new file mode 100644 index 00000000000..d7ba21865b4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cx.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cx.svg new file mode 100644 index 00000000000..ef82c453631 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cy.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cy.svg new file mode 100644 index 00000000000..ba2b0f89086 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cz.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cz.svg new file mode 100644 index 00000000000..9557b6e88da --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/de.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/de.svg new file mode 100644 index 00000000000..b9ea8a61348 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dj.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dj.svg new file mode 100644 index 00000000000..3f6b2e4f351 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dk.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dk.svg new file mode 100644 index 00000000000..51ff69feb05 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dm.svg new file mode 100644 index 00000000000..405a4b6b96e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/do.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/do.svg new file mode 100644 index 00000000000..03d3f3547b6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/do.svg @@ -0,0 +1,6745 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dz.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dz.svg new file mode 100644 index 00000000000..37df0c8bbab --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ec.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ec.svg new file mode 100644 index 00000000000..65fd0bad2e6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ee.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ee.svg new file mode 100644 index 00000000000..fbc9e339439 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ee.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eg.svg new file mode 100644 index 00000000000..2965b6afa07 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eh.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eh.svg new file mode 100644 index 00000000000..4c3feba1b33 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eh.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/er.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/er.svg new file mode 100644 index 00000000000..86343349e32 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/er.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg new file mode 100644 index 00000000000..2a50685ddb3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg new file mode 100644 index 00000000000..5c55ff855ba --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es.svg new file mode 100644 index 00000000000..d7030eb2921 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es.svg @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/et.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/et.svg new file mode 100644 index 00000000000..8b02f6b7cad --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eu.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eu.svg new file mode 100644 index 00000000000..b031d2d3365 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fi.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fi.svg new file mode 100644 index 00000000000..aff1304c6bf --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fj.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fj.svg new file mode 100644 index 00000000000..9d9c3029e1b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fj.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fk.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fk.svg new file mode 100644 index 00000000000..12a34c46dc8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fk.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fm.svg new file mode 100644 index 00000000000..791fde99298 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fo.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fo.svg new file mode 100644 index 00000000000..b28915c013a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fr.svg new file mode 100644 index 00000000000..f8e3ca0d57f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ga.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ga.svg new file mode 100644 index 00000000000..16c81b3029a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg new file mode 100644 index 00000000000..18026d29413 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg new file mode 100644 index 00000000000..6d8a3a39745 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg new file mode 100644 index 00000000000..6987b0886b7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg new file mode 100644 index 00000000000..3931a17954e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb.svg new file mode 100644 index 00000000000..ef048dc2a14 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gd.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gd.svg new file mode 100644 index 00000000000..cca37ba483f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ge.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ge.svg new file mode 100644 index 00000000000..ac1d87bb490 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gf.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gf.svg new file mode 100644 index 00000000000..c00a576342f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gg.svg new file mode 100644 index 00000000000..2d06a9f86f0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gh.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gh.svg new file mode 100644 index 00000000000..4b6446d645a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gi.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gi.svg new file mode 100644 index 00000000000..39f5b2770c2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gl.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gl.svg new file mode 100644 index 00000000000..7a026d995fe --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gm.svg new file mode 100644 index 00000000000..b06ab6cb585 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gm.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gn.svg new file mode 100644 index 00000000000..8f8855da4b8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gp.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gp.svg new file mode 100644 index 00000000000..0a5bdb0056c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gq.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gq.svg new file mode 100644 index 00000000000..8149406de41 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gr.svg new file mode 100644 index 00000000000..4bc68fc1fa3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gs.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gs.svg new file mode 100644 index 00000000000..48f68b8b67a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gs.svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L + + + E + + + O + + + T + + + E + + + R + + + R + + + R + + + R + + + R + + + E + + + O + + + O + + + A + + + A + + + A + + + M + + + P + + + P + + + P + + + I + + + T + + + T + + + M + + + G + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gt.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gt.svg new file mode 100644 index 00000000000..761801ca47f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gt.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gu.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gu.svg new file mode 100644 index 00000000000..d6f5d535ca5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gu.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + G + + + U + + + A + + + M + + + + + + + + G + + + U + + + A + + + M + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gw.svg new file mode 100644 index 00000000000..064a5934732 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gy.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gy.svg new file mode 100644 index 00000000000..57eb5209035 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hk.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hk.svg new file mode 100644 index 00000000000..024c070555b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hk.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hm.svg new file mode 100644 index 00000000000..7e1f7e7e647 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hm.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hn.svg new file mode 100644 index 00000000000..c7c4c4acfd1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hr.svg new file mode 100644 index 00000000000..7ea00410d5a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hr.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ht.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ht.svg new file mode 100644 index 00000000000..920833a66ec --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hu.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hu.svg new file mode 100644 index 00000000000..94bc29f134c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/id.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/id.svg new file mode 100644 index 00000000000..6d2cf0941ea --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/id.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ie.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ie.svg new file mode 100644 index 00000000000..60448a9ded5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/il.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/il.svg new file mode 100644 index 00000000000..6cb4b1c1f79 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/im.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/im.svg new file mode 100644 index 00000000000..0f487f67d7f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/in.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/in.svg new file mode 100644 index 00000000000..e6557cd01a9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/io.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/io.svg new file mode 100644 index 00000000000..4d809e03e65 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/io.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/iq.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/iq.svg new file mode 100644 index 00000000000..6b96774d970 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ir.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ir.svg new file mode 100644 index 00000000000..79f66324f18 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/is.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/is.svg new file mode 100644 index 00000000000..08d1e683835 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/it.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/it.svg new file mode 100644 index 00000000000..615c58fb8f9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/je.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/je.svg new file mode 100644 index 00000000000..c63ccb29ec9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/je.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jm.svg new file mode 100644 index 00000000000..c261da09718 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jo.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jo.svg new file mode 100644 index 00000000000..ab1c62aaa15 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jp.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jp.svg new file mode 100644 index 00000000000..dc7a64a5c75 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ke.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ke.svg new file mode 100644 index 00000000000..0b82f3a6c39 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kg.svg new file mode 100644 index 00000000000..71ee7b8df55 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kg.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kh.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kh.svg new file mode 100644 index 00000000000..8c888f16811 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ki.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ki.svg new file mode 100644 index 00000000000..bfc5ccab46e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/km.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/km.svg new file mode 100644 index 00000000000..8f842ea8c0b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kn.svg new file mode 100644 index 00000000000..4b2a2488be8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kp.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kp.svg new file mode 100644 index 00000000000..8eda6be8741 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kr.svg new file mode 100644 index 00000000000..2db51b02a64 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kr.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kw.svg new file mode 100644 index 00000000000..3d4047fff5e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ky.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ky.svg new file mode 100644 index 00000000000..b4ae00aa861 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ky.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kz.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kz.svg new file mode 100644 index 00000000000..f17bd6e0f85 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kz.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/la.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/la.svg new file mode 100644 index 00000000000..1e7686a9350 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lb.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lb.svg new file mode 100644 index 00000000000..a047b0b9480 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lc.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lc.svg new file mode 100644 index 00000000000..b13b8852aac --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/li.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/li.svg new file mode 100644 index 00000000000..cbed5cc84cb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lk.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lk.svg new file mode 100644 index 00000000000..2b112155f66 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lr.svg new file mode 100644 index 00000000000..0ae34e72824 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ls.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ls.svg new file mode 100644 index 00000000000..e71bb5bb70e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lt.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lt.svg new file mode 100644 index 00000000000..aa96cf3236e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lu.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lu.svg new file mode 100644 index 00000000000..62936716027 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lv.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lv.svg new file mode 100644 index 00000000000..5556de1a3d9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ly.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ly.svg new file mode 100644 index 00000000000..fe0ed81b607 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ma.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ma.svg new file mode 100644 index 00000000000..85c99b3b9e0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mc.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mc.svg new file mode 100644 index 00000000000..d38822ddacd --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/md.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/md.svg new file mode 100644 index 00000000000..86b2a961498 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/md.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/me.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/me.svg new file mode 100644 index 00000000000..56a19ed0a07 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/me.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mf.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mf.svg new file mode 100644 index 00000000000..310afce4074 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mg.svg new file mode 100644 index 00000000000..f0375cc6bee --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mh.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mh.svg new file mode 100644 index 00000000000..97f34631af6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mh.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mk.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mk.svg new file mode 100644 index 00000000000..da2e9a4c408 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ml.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ml.svg new file mode 100644 index 00000000000..1e4d98900cd --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mm.svg new file mode 100644 index 00000000000..5076184c320 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mm.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mn.svg new file mode 100644 index 00000000000..568fda088a9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mo.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mo.svg new file mode 100644 index 00000000000..83d04ea28a4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mp.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mp.svg new file mode 100644 index 00000000000..54a0ede9f23 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mq.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mq.svg new file mode 100644 index 00000000000..7a69fb58429 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mq.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mr.svg new file mode 100644 index 00000000000..7da23e5f4e3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ms.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ms.svg new file mode 100644 index 00000000000..d7d910d020f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ms.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mt.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mt.svg new file mode 100644 index 00000000000..96acc15e730 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mt.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mu.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mu.svg new file mode 100644 index 00000000000..773d3d59eec --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mv.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mv.svg new file mode 100644 index 00000000000..aa5ed5333ef --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mw.svg new file mode 100644 index 00000000000..a9521a08c1a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mx.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mx.svg new file mode 100644 index 00000000000..a4406568073 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mx.svg @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/my.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/my.svg new file mode 100644 index 00000000000..7ebe064b74b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/my.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mz.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mz.svg new file mode 100644 index 00000000000..113a2057925 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/na.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/na.svg new file mode 100644 index 00000000000..b934fc157c7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nc.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nc.svg new file mode 100644 index 00000000000..2bdf6ee5b5c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nc.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ne.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ne.svg new file mode 100644 index 00000000000..e76e44c0bbc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nf.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nf.svg new file mode 100644 index 00000000000..21495222f65 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nf.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ng.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ng.svg new file mode 100644 index 00000000000..57d65d380a0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ni.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ni.svg new file mode 100644 index 00000000000..8f68d422554 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nl.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nl.svg new file mode 100644 index 00000000000..9db233dd4ba --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/no.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/no.svg new file mode 100644 index 00000000000..08ea5728d27 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/np.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/np.svg new file mode 100644 index 00000000000..f34ee8c6387 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/np.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nr.svg new file mode 100644 index 00000000000..282d80fa14e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nu.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nu.svg new file mode 100644 index 00000000000..aced440dc1d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nu.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nz.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nz.svg new file mode 100644 index 00000000000..5283a96ed48 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nz.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/om.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/om.svg new file mode 100644 index 00000000000..055d1e69867 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pa.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pa.svg new file mode 100644 index 00000000000..57965b9ea22 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pa.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pe.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pe.svg new file mode 100644 index 00000000000..40b87badbb9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pe.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pf.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pf.svg new file mode 100644 index 00000000000..94ff90cb2c4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pf.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pg.svg new file mode 100644 index 00000000000..73977541821 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pg.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ph.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ph.svg new file mode 100644 index 00000000000..681cf23ff50 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ph.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pk.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pk.svg new file mode 100644 index 00000000000..06b6022f0c2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pl.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pl.svg new file mode 100644 index 00000000000..f7c12a1843d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pm.svg new file mode 100644 index 00000000000..3d4014a4143 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pm.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pn.svg new file mode 100644 index 00000000000..47b0749a0ab --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pn.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pr.svg new file mode 100644 index 00000000000..79cf4c09917 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ps.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ps.svg new file mode 100644 index 00000000000..7c1ea3f9a6d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ps.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pt.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pt.svg new file mode 100644 index 00000000000..425515054ad --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pw.svg new file mode 100644 index 00000000000..83bc3f71d53 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/py.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/py.svg new file mode 100644 index 00000000000..88f55e6f020 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/py.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/qa.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/qa.svg new file mode 100644 index 00000000000..0bf30ea37ff --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/re.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/re.svg new file mode 100644 index 00000000000..027c9f32ce5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/re.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ro.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ro.svg new file mode 100644 index 00000000000..994992ab662 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rs.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rs.svg new file mode 100644 index 00000000000..3270f304c4e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rs.svg @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ru.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ru.svg new file mode 100644 index 00000000000..d6430874302 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ru.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rw.svg new file mode 100644 index 00000000000..26e41f6ad79 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sa.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sa.svg new file mode 100644 index 00000000000..1cc41b80bfd --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sa.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sb.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sb.svg new file mode 100644 index 00000000000..f61bafd6a90 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sc.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sc.svg new file mode 100644 index 00000000000..65d8943d64d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sc.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sd.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sd.svg new file mode 100644 index 00000000000..72a729708b1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/se.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/se.svg new file mode 100644 index 00000000000..e824395ebb1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/se.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sg.svg new file mode 100644 index 00000000000..1444e5b6ab1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sh.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sh.svg new file mode 100644 index 00000000000..599a09d73bb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sh.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/si.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/si.svg new file mode 100644 index 00000000000..6de77ef4730 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sj.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sj.svg new file mode 100644 index 00000000000..f4e5829735d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sk.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sk.svg new file mode 100644 index 00000000000..fd728680b0e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sl.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sl.svg new file mode 100644 index 00000000000..18c76d781bc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sl.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sm.svg new file mode 100644 index 00000000000..1ed18eed6cb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sm.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L + + + I + + + B + + + E + + + R + + + T + + + A + + + S + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sn.svg new file mode 100644 index 00000000000..fbbad5e026c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/so.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/so.svg new file mode 100644 index 00000000000..96d88a992a1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sr.svg new file mode 100644 index 00000000000..a0ca03e367b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ss.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ss.svg new file mode 100644 index 00000000000..7e6a47ffd9f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/st.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/st.svg new file mode 100644 index 00000000000..da5df2990d1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sv.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sv.svg new file mode 100644 index 00000000000..65b44baeec8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sv.svg @@ -0,0 +1,596 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sx.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sx.svg new file mode 100644 index 00000000000..5d9fadfa2ec --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sy.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sy.svg new file mode 100644 index 00000000000..904dc1f65c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sz.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sz.svg new file mode 100644 index 00000000000..b3009e4d92f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sz.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tc.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tc.svg new file mode 100644 index 00000000000..1029615f551 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tc.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/td.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/td.svg new file mode 100644 index 00000000000..e3e81ce2fd1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tf.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tf.svg new file mode 100644 index 00000000000..2061867c96b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tg.svg new file mode 100644 index 00000000000..2c1fd98fd48 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/th.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/th.svg new file mode 100644 index 00000000000..86850f5fbf6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tj.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tj.svg new file mode 100644 index 00000000000..853a4a4555b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tj.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tk.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tk.svg new file mode 100644 index 00000000000..c5ff6b4cb43 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tl.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tl.svg new file mode 100644 index 00000000000..ec6d44bd139 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tm.svg new file mode 100644 index 00000000000..d856424fe68 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tm.svg @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tn.svg new file mode 100644 index 00000000000..d46a1cd9aad --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/to.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/to.svg new file mode 100644 index 00000000000..201d6bc39d2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tr.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tr.svg new file mode 100644 index 00000000000..861d4ea5800 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tt.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tt.svg new file mode 100644 index 00000000000..87e439a07d2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tv.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tv.svg new file mode 100644 index 00000000000..f30c8f37107 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tv.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tw.svg new file mode 100644 index 00000000000..5f284fc6124 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tz.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tz.svg new file mode 100644 index 00000000000..f993ff15d69 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tz.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ua.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ua.svg new file mode 100644 index 00000000000..18ebe0d49dc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ug.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ug.svg new file mode 100644 index 00000000000..d9be9459452 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/um.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/um.svg new file mode 100644 index 00000000000..25b08ce6ab3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/um.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/un.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/un.svg new file mode 100644 index 00000000000..1d50ea92508 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/us.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/us.svg new file mode 100644 index 00000000000..31f90c6c3a8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/us.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uy.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uy.svg new file mode 100644 index 00000000000..0194a7cb0b6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uz.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uz.svg new file mode 100644 index 00000000000..641af1b8269 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/va.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/va.svg new file mode 100644 index 00000000000..7da6d3e7391 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/va.svg @@ -0,0 +1,479 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vc.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vc.svg new file mode 100644 index 00000000000..ee72f781ac8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ve.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ve.svg new file mode 100644 index 00000000000..205fe848a3b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vg.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vg.svg new file mode 100644 index 00000000000..9572de34805 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vg.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vi.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vi.svg new file mode 100644 index 00000000000..2740f24ffac --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vn.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vn.svg new file mode 100644 index 00000000000..6b158145ad0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vu.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vu.svg new file mode 100644 index 00000000000..397d30e60ba --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vu.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/wf.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/wf.svg new file mode 100644 index 00000000000..bb726a7c2e1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/wf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ws.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ws.svg new file mode 100644 index 00000000000..155ad7b5580 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/xk.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/xk.svg new file mode 100644 index 00000000000..69146ca449f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/xk.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ye.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ye.svg new file mode 100644 index 00000000000..d49d2c414ee --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/yt.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/yt.svg new file mode 100644 index 00000000000..7bf38373797 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/yt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/za.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/za.svg new file mode 100644 index 00000000000..9bae96fe3ed --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zm.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zm.svg new file mode 100644 index 00000000000..105f1076ad8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zw.svg b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zw.svg new file mode 100644 index 00000000000..ca5b7a20f9d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/css/all.css b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/css/all.css new file mode 100644 index 00000000000..1893247a7d9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/css/all.css @@ -0,0 +1,8003 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); + unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); + unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.ttf b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.ttf new file mode 100644 index 00000000000..5efb1d4f964 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.ttf differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.woff2 b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.woff2 new file mode 100644 index 00000000000..36fbda7d334 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.woff2 differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.ttf b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.ttf new file mode 100644 index 00000000000..838b4e2cfec Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.ttf differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.woff2 b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.woff2 new file mode 100644 index 00000000000..b6cabbacb67 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.woff2 differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.ttf b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.ttf new file mode 100644 index 00000000000..ec24749db90 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.woff2 b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 00000000000..824d518eb4c Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.ttf b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.ttf new file mode 100644 index 00000000000..b175aa8ece8 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.ttf differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.woff2 b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 00000000000..e09b5a55009 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.woff2 differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/AbpAspNetCoreComponentsWebThemingMudBlazorModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/AbpAspNetCoreComponentsWebThemingMudBlazorModule.cs new file mode 100644 index 00000000000..08b43b5cb19 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/AbpAspNetCoreComponentsWebThemingMudBlazorModule.cs @@ -0,0 +1,22 @@ +using Volo.Abp.AspNetCore.Components.Web.Security; +using Volo.Abp.Modularity; +using Volo.Abp.MudBlazorUI; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; + +[DependsOn( + typeof(AbpMudBlazorUIModule), + typeof(AbpUiNavigationModule) +)] +public class AbpAspNetCoreComponentsWebThemingMudBlazorModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Components.Add(typeof(AbpAuthenticationState), null); + }); + } +} + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/AbpDynamicLayoutComponentOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/AbpDynamicLayoutComponentOptions.cs new file mode 100644 index 00000000000..ab6b516004a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/AbpDynamicLayoutComponentOptions.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; + +public class AbpDynamicLayoutComponentOptions +{ + /// + /// Used to define components that renders in the layout + /// + [NotNull] + public Dictionary?> Components { get; set; } + + public AbpDynamicLayoutComponentOptions() + { + Components = new Dictionary?>(); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Bundling/AbpScripts.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Bundling/AbpScripts.razor new file mode 100644 index 00000000000..436a22fc0e0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Bundling/AbpScripts.razor @@ -0,0 +1,61 @@ +@implements IDisposable +@inject IComponentBundleManager BundleManager +@inject PersistentComponentState ApplicationState +@if (ScriptFiles != null) +{ + foreach (var file in ScriptFiles) + { + var src = file; + if (!AppBasePath.IsNullOrWhiteSpace()) + { + src = AppBasePath.EnsureEndsWith('/') + file.RemovePreFix("/"); + } + + } +} + +@code { + + private const string PrerenderedKey = "abp_script_prerendered"; + + [Parameter] + public List? WebAssemblyScriptFiles { get; set; } + + [Parameter] + public string? BundleName { get; set; } + + [Parameter] + public string? AppBasePath { get; set; } + + private List? ScriptFiles { get; set; } + + private PersistingComponentStateSubscription _persistingSubscription; + + protected override async Task OnInitializedAsync() + { + _persistingSubscription = ApplicationState.RegisterOnPersisting(Callback); + if (!ApplicationState.TryTakeFromJson(PrerenderedKey, out _)) + { + // We are in prerendering mode + if (!BundleName.IsNullOrWhiteSpace()) + { + ScriptFiles = (await BundleManager.GetScriptBundleFilesAsync(BundleName!)).ToList(); + } + } + else + { + if (OperatingSystem.IsBrowser() && WebAssemblyScriptFiles != null) + { + ScriptFiles = WebAssemblyScriptFiles; + } + } + } + + private Task Callback() + { + ApplicationState.PersistAsJson(PrerenderedKey, PrerenderedKey); + return Task.CompletedTask; + } + + public void Dispose() => _persistingSubscription.Dispose(); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Bundling/AbpStyles.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Bundling/AbpStyles.razor new file mode 100644 index 00000000000..1c2ede488f6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Bundling/AbpStyles.razor @@ -0,0 +1,75 @@ +@implements IDisposable +@inject IComponentBundleManager BundleManager +@inject PersistentComponentState ApplicationState +@if (StyleFiles != null) +{ + foreach (var file in StyleFiles) + { + var href = file; + if (!AppBasePath.IsNullOrWhiteSpace()) + { + href = AppBasePath.EnsureEndsWith('/') + file.RemovePreFix("/"); + } + + } +} + +@code { + + private const string PrerenderedKey = "abp_style_prerendered"; + + [Parameter] + public List? WebAssemblyStyleFiles { get; set; } + + [Parameter] + public string? BundleName { get; set; } + + [Parameter] + public string? AppBasePath { get; set; } + + private List? StyleFiles { get; set; } + + private PersistingComponentStateSubscription _persistingSubscription; + + protected override async Task OnInitializedAsync() + { + _persistingSubscription = ApplicationState.RegisterOnPersisting(Callback); + if (!ApplicationState.TryTakeFromJson>(PrerenderedKey, out var scriptFiles)) + { + // We are in prerendering mode + if (!BundleName.IsNullOrWhiteSpace()) + { + StyleFiles = (await BundleManager.GetStyleBundleFilesAsync(BundleName!)).ToList(); + } + } + else + { + StyleFiles = scriptFiles; + if (OperatingSystem.IsBrowser() && StyleFiles != null && WebAssemblyStyleFiles != null) + { + StyleFiles.AddIfNotContains(WebAssemblyStyleFiles); + } + } + } + + private bool _hasRemoveServerStyle = false; + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (!_hasRemoveServerStyle && OperatingSystem.IsBrowser() && WebAssemblyStyleFiles != null) + { + _hasRemoveServerStyle = true; + await Task.Delay(3000); + StyleFiles = WebAssemblyStyleFiles; + StateHasChanged(); + } + } + + private Task Callback() + { + ApplicationState.PersistAsJson(PrerenderedKey, StyleFiles); + return Task.CompletedTask; + } + + public void Dispose() => _persistingSubscription.Dispose(); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Bundling/IComponentBundleManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Bundling/IComponentBundleManager.cs new file mode 100644 index 00000000000..8fe8aa710f3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Bundling/IComponentBundleManager.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Bundling; + +public interface IComponentBundleManager +{ + Task> GetStyleBundleFilesAsync(string bundleName); + + Task> GetScriptBundleFilesAsync(string bundleName); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/DynamicLayoutComponent.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/DynamicLayoutComponent.razor new file mode 100644 index 00000000000..7119f6a54c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/DynamicLayoutComponent.razor @@ -0,0 +1,7 @@ +@if (AbpDynamicLayoutComponentOptions.Value.Components.Any()) +{ + foreach (var (componentType, parameters) in AbpDynamicLayoutComponentOptions.Value.Components) + { + + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/DynamicLayoutComponent.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/DynamicLayoutComponent.razor.cs new file mode 100644 index 00000000000..5b9ba2bb66e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/DynamicLayoutComponent.razor.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Options; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components; + +public partial class DynamicLayoutComponent : ComponentBase +{ + [Inject] + protected IOptions AbpDynamicLayoutComponentOptions { get; set; } = default!; +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/LayoutHooks/LayoutHook.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/LayoutHooks/LayoutHook.razor new file mode 100644 index 00000000000..d7c5718d7b5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/LayoutHooks/LayoutHook.razor @@ -0,0 +1,7 @@ +@if (LayoutHookViewModel.Hooks.Any()) +{ + foreach (var hook in LayoutHookViewModel.Hooks) + { + + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/LayoutHooks/LayoutHook.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/LayoutHooks/LayoutHook.razor.cs new file mode 100644 index 00000000000..3cf75df16f6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Components/LayoutHooks/LayoutHook.razor.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Options; +using Volo.Abp.Ui.LayoutHooks; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components.LayoutHooks; + +public partial class LayoutHook : ComponentBase +{ + [Parameter] + public string Name { get; set; } = default!; + + [Parameter] + public string? Layout { get; set; } + + [Inject] + protected IOptions LayoutHookOptions { get; set; } = default!; + + protected LayoutHookViewModel LayoutHookViewModel { get; private set; } = default!; + + protected override Task OnInitializedAsync() + { + if (LayoutHookOptions.Value.Hooks.TryGetValue(Name, out var layoutHooks)) + { + layoutHooks = layoutHooks + .Where(x => IsComponentBase(x) && (string.IsNullOrWhiteSpace(x.Layout) || x.Layout == Layout)) + .ToList(); + } + + layoutHooks ??= new List(); + + LayoutHookViewModel = new LayoutHookViewModel(layoutHooks.ToArray(), Layout); + + return Task.CompletedTask; + } + + protected virtual bool IsComponentBase(LayoutHookInfo layoutHook) + { + return typeof(ComponentBase).IsAssignableFrom(layoutHook.ComponentType); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/FodyWeavers.xml new file mode 100644 index 00000000000..7e9f94ead6f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/FodyWeavers.xsd new file mode 100644 index 00000000000..ffa6fc4b782 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageHeader.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageHeader.razor new file mode 100644 index 00000000000..0560bcb9709 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageHeader.razor @@ -0,0 +1,65 @@ +@using global::MudBlazor +@using Microsoft.Extensions.Options +@using Microsoft.AspNetCore.Components.Web +@using Volo.Abp.Ui.Branding + +@inject IOptions Options +@inject IBrandingProvider BrandingProvider + + + + @if (PageLayout.Title.IsNullOrEmpty()) + { + @BrandingProvider.AppName + } + else + { + @PageLayout.Title | @BrandingProvider.AppName + } + + @if(Options.Value.RenderPageTitle) + { + + @PageLayout.Title + + } + + @if (Options.Value.RenderBreadcrumbs && PageLayout.BreadcrumbItems.Any()) + { + + + + + @if (!string.IsNullOrEmpty(item.Icon)) + { + + } + @item.Text + + + + + + + + } + + @if(Options.Value.RenderToolbar) + { + + + @if (Toolbar == null) + { + @ChildContent + } + + @foreach (var toolbarItemRender in ToolbarItemRenders) + { + + @toolbarItemRender + + } + + + } + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageHeader.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageHeader.razor.cs new file mode 100644 index 00000000000..301045d6b71 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageHeader.razor.cs @@ -0,0 +1,191 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout; + +public partial class PageHeader : ComponentBase, IDisposable +{ + protected List ToolbarItemRenders { get; set; } + + private List _breadcrumbItems = new(); + + public IPageToolbarManager PageToolbarManager { get; set; } = default!; + + [Inject] + public PageLayout PageLayout { get; private set; } = default!; + + [Parameter] // TODO: Consider removing this property in future and use only PageLayout. + public string? Title { get => PageLayout.Title; set => PageLayout.Title = value; } + + [Parameter] + public bool BreadcrumbShowHome { get; set; } = true; + + [Parameter] + public bool BreadcrumbShowCurrent { get; set; } = true; + + [Parameter] + public RenderFragment ChildContent { get; set; } = default!; + + [Parameter] // TODO: Consider removing this property in future and use only PageLayout. + public List BreadcrumbItems { + get => PageLayout.BreadcrumbItems.ToList(); + set + { + PageLayout.BreadcrumbItems.Clear(); + foreach (var item in value) + { + PageLayout.BreadcrumbItems.Add(item); + } + } + } + + [Parameter] + public PageToolbar? Toolbar { get; set; } + + public PageHeader() + { + ToolbarItemRenders = new List(); + } + + protected override async Task OnParametersSetAsync() + { + await base.OnParametersSetAsync(); + + // Build MudBlazor breadcrumb items + BuildBreadcrumbItems(); + + if (Toolbar != null) + { + var toolbarItems = await PageToolbarManager.GetItemsAsync(Toolbar); + + if (!ShouldRenderToolbarItems(toolbarItems)) + { + return; + } + + ToolbarItemRenders.Clear(); + + if (!Options.Value.RenderToolbar) + { + PageLayout.ToolbarItems.Clear(); + foreach (var item in toolbarItems) + { + PageLayout.ToolbarItems.Add(item); + } + return; + } + + foreach (var item in toolbarItems) + { + var sequence = 0; + ToolbarItemRenders.Add(builder => + { + builder.OpenComponent(sequence, item.ComponentType); + if (item.Arguments != null) + { + foreach (var argument in item.Arguments) + { + sequence++; + builder.AddAttribute(sequence, argument.Key, argument.Value); + } + } + builder.CloseComponent(); + }); + } + } + } + + private void BuildBreadcrumbItems() + { + _breadcrumbItems.Clear(); + + if (BreadcrumbShowHome) + { + _breadcrumbItems.Add(new BreadcrumbItem(string.Empty, href: "/", icon: Icons.Material.Filled.Home)); + } + + var pageItems = PageLayout.BreadcrumbItems.ToList(); + for (var i = 0; i < pageItems.Count; i++) + { + var item = pageItems[i]; + var isLast = i == pageItems.Count - 1; + + var mudIcon = ConvertToMudIcon(item.Icon); + + // If BreadcrumbShowCurrent is false, skip the last item or make it non-clickable + if (isLast && !BreadcrumbShowCurrent) + { + continue; + } + + _breadcrumbItems.Add(new BreadcrumbItem( + item.Text, + href: isLast ? null : item.Href, + disabled: isLast, + icon: mudIcon)); + } + } + + private static string? ConvertToMudIcon(object? icon) + { + if (icon == null) + { + return null; + } + + if (icon is string iconString) + { + return iconString; + } + + var iconName = icon.ToString(); + + return iconName switch + { + "Home" => Icons.Material.Filled.Home, + "Edit" => Icons.Material.Filled.Edit, + "Delete" => Icons.Material.Filled.Delete, + "Add" => Icons.Material.Filled.Add, + "Search" => Icons.Material.Filled.Search, + "Settings" => Icons.Material.Filled.Settings, + "User" => Icons.Material.Filled.Person, + "Users" => Icons.Material.Filled.People, + "File" => Icons.Material.Filled.InsertDriveFile, + "Folder" => Icons.Material.Filled.Folder, + "Dashboard" => Icons.Material.Filled.Dashboard, + "List" => Icons.Material.Filled.List, + "Check" => Icons.Material.Filled.Check, + "Times" => Icons.Material.Filled.Close, + "Warning" => Icons.Material.Filled.Warning, + "Info" => Icons.Material.Filled.Info, + "Question" => Icons.Material.Filled.Help, + _ => null // Return null for unmapped icons + }; + } + + protected virtual bool ShouldRenderToolbarItems(PageToolbarItem[] items) + { + if (items.Length != PageLayout.ToolbarItems.Count) + { + return true; + } + + return items.Where((t, i) => t.ComponentType != PageLayout.ToolbarItems[i].ComponentType).Any(); + } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + } + + public void Dispose() + { + PageLayout.Reset(); + ToolbarItemRenders.Clear(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageHeaderOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageHeaderOptions.cs new file mode 100644 index 00000000000..68492898d58 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageHeaderOptions.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout; + +public class PageHeaderOptions +{ + public bool RenderPageTitle { get; set; } = true; + public bool RenderBreadcrumbs { get; set; } = true; + public bool RenderToolbar { get; set; } = true; +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageLayout.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageLayout.cs new file mode 100644 index 00000000000..de1ba5e35b8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/PageLayout.cs @@ -0,0 +1,54 @@ +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout; + +public class PageLayout : IScopedDependency, INotifyPropertyChanged +{ + private string? title; + + // TODO: Consider using this property for setting Page Title too. + public virtual string? Title { + get => title; + set { + title = value; + OnPropertyChanged(); + } + } + + private string? menuItemName; + + public string? MenuItemName { + get => menuItemName; + set + { + menuItemName = value; + OnPropertyChanged(); + } + } + + public bool ShowToolbar { get; set; } = true; + + public virtual ObservableCollection BreadcrumbItems { get; } = new(); + + public virtual ObservableCollection ToolbarItems { get; } = new(); + + public event PropertyChangedEventHandler? PropertyChanged; + + protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + + public void Reset() + { + Title = string.Empty; + MenuItemName = string.Empty; + BreadcrumbItems.Clear(); + ToolbarItems.Clear(); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/StandardLayouts.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/StandardLayouts.cs new file mode 100644 index 00000000000..bc25f503bd7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Layout/StandardLayouts.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout; + +public static class StandardLayouts +{ + public const string Application = "Application"; + public const string Account = "Account"; + public const string Public = "Public"; + public const string Empty = "Empty"; +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/IPageToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/IPageToolbarContributor.cs new file mode 100644 index 00000000000..f1f5b230f48 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/IPageToolbarContributor.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public interface IPageToolbarContributor +{ + Task ContributeAsync(PageToolbarContributionContext context); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/IPageToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/IPageToolbarManager.cs new file mode 100644 index 00000000000..58f5833249b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/IPageToolbarManager.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public interface IPageToolbarManager +{ + Task GetItemsAsync(PageToolbar toolbar); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudPageToolbarButton.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudPageToolbarButton.razor new file mode 100644 index 00000000000..e37ccee5c38 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudPageToolbarButton.razor @@ -0,0 +1,21 @@ +@using global::MudBlazor + + + @Text + + +@code { + private string? IconString => Icon?.ToString(); + + private async Task OnClickHandler() + { + if (OnClickAsync != null) + { + await OnClickAsync(); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudPageToolbarButton.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudPageToolbarButton.razor.cs new file mode 100644 index 00000000000..a8918a5f182 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/MudPageToolbarButton.razor.cs @@ -0,0 +1,24 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public partial class MudPageToolbarButton : ComponentBase +{ + [Parameter] + public Color Color { get; set; } = Color.Primary; + + [Parameter] + public object? Icon { get; set; } + + [Parameter] + public string Text { get; set; } = default!; + + [Parameter] + public Func? OnClickAsync { get; set; } + + [Parameter] + public bool Disabled { get; set; } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbar.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbar.cs new file mode 100644 index 00000000000..1f808816ab4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbar.cs @@ -0,0 +1,11 @@ +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public class PageToolbar +{ + public PageToolbarContributorList Contributors { get; set; } + + public PageToolbar() + { + Contributors = new PageToolbarContributorList(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarContributionContext.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarContributionContext.cs new file mode 100644 index 00000000000..37f7677cf9e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarContributionContext.cs @@ -0,0 +1,20 @@ +using System; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public class PageToolbarContributionContext +{ + [NotNull] + public IServiceProvider ServiceProvider { get; } + + [NotNull] + public PageToolbarItemList Items { get; } + + public PageToolbarContributionContext( + [NotNull] IServiceProvider serviceProvider) + { + ServiceProvider = Check.NotNull(serviceProvider, nameof(serviceProvider)); + Items = new PageToolbarItemList(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarContributor.cs new file mode 100644 index 00000000000..92fb22838e4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarContributor.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public abstract class PageToolbarContributor : IPageToolbarContributor +{ + public abstract Task ContributeAsync(PageToolbarContributionContext context); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarContributorList.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarContributorList.cs new file mode 100644 index 00000000000..0723bbe5715 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarContributorList.cs @@ -0,0 +1,7 @@ +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public class PageToolbarContributorList : List +{ +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarDictionary.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarDictionary.cs new file mode 100644 index 00000000000..2016008a5e1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarDictionary.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public class PageToolbarDictionary : Dictionary +{ + +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarExtensions.cs new file mode 100644 index 00000000000..136a95c6893 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarExtensions.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using MudBlazor; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public static class PageToolbarExtensions +{ + public static PageToolbar AddComponent( + this PageToolbar toolbar, + Dictionary? arguments = null, + int order = 0, + string? requiredPolicyName = null) + { + return toolbar.AddComponent( + typeof(TComponent), + arguments, + order, + requiredPolicyName + ); + } + + public static PageToolbar AddComponent( + this PageToolbar toolbar, + Type componentType, + Dictionary? arguments = null, + int order = 0, + string? requiredPolicyName = null) + { + toolbar.Contributors.Add( + new SimplePageToolbarContributor( + componentType, + arguments, + order, + requiredPolicyName + ) + ); + + return toolbar; + } + + public static PageToolbar AddButton( + this PageToolbar toolbar, + string text, + Func clicked, + object? icon = null, + Color? color = null, + bool disabled = false, + int order = 0, + string? requiredPolicyName = null) + { + toolbar.AddComponent( + new Dictionary + { + { nameof(MudPageToolbarButton.Color), color ?? Color.Primary }, + { nameof(MudPageToolbarButton.Text), text }, + { nameof(MudPageToolbarButton.Disabled), disabled }, + { nameof(MudPageToolbarButton.Icon), icon }, + { nameof(MudPageToolbarButton.OnClickAsync), clicked }, + }, + order, + requiredPolicyName + ); + + return toolbar; + } + + public static PageToolbar AddMudButton( + this PageToolbar toolbar, + string text, + Func clicked, + string? icon = null, + Color? color = null, + bool disabled = false, + int order = 0, + string? requiredPolicyName = null) + { + return toolbar.AddButton(text, clicked, icon, color, disabled, order, requiredPolicyName); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarItem.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarItem.cs new file mode 100644 index 00000000000..f5820599d4f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarItem.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public class PageToolbarItem +{ + [NotNull] + public Type ComponentType { get; } + + public Dictionary? Arguments { get; set; } + + public int Order { get; set; } + + public PageToolbarItem( + [NotNull] Type componentType, + Dictionary? arguments = null, + int order = 0) + { + ComponentType = Check.NotNull(componentType, nameof(componentType)); + Arguments = arguments; + Order = order; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarItemList.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarItemList.cs new file mode 100644 index 00000000000..761efa01ed5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarItemList.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public class PageToolbarItemList : List +{ + +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarManager.cs new file mode 100644 index 00000000000..24efd89e1b6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/PageToolbarManager.cs @@ -0,0 +1,38 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public class PageToolbarManager : IPageToolbarManager, ITransientDependency +{ + protected IServiceScopeFactory ServiceScopeFactory { get; } + + public PageToolbarManager( + IServiceScopeFactory serviceScopeFactory) + { + ServiceScopeFactory = serviceScopeFactory; + } + + public virtual async Task GetItemsAsync(PageToolbar toolbar) + { + if (toolbar == null || !toolbar.Contributors.Any()) + { + return Array.Empty(); + } + + using (var scope = ServiceScopeFactory.CreateScope()) + { + var context = new PageToolbarContributionContext(scope.ServiceProvider); + + foreach (var contributor in toolbar.Contributors) + { + await contributor.ContributeAsync(context); + } + + return context.Items.OrderBy(i => i.Order).ToArray(); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/SimplePageToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/SimplePageToolbarContributor.cs new file mode 100644 index 00000000000..4b333e2b900 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/PageToolbars/SimplePageToolbarContributor.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; + +public class SimplePageToolbarContributor : IPageToolbarContributor +{ + public Type ComponentType { get; } + + public Dictionary? Arguments { get; set; } + + public int Order { get; } + + public string? RequiredPolicyName { get; } + + private bool? _shouldAddComponent; + + public SimplePageToolbarContributor( + Type componentType, + Dictionary? arguments = null, + int order = 0, + string? requiredPolicyName = null) + { + ComponentType = componentType; + Arguments = arguments; + Order = order; + RequiredPolicyName = requiredPolicyName; + } + + public async Task ContributeAsync(PageToolbarContributionContext context) + { + if (await ShouldAddComponentAsync(context)) + { + context.Items.Add(new PageToolbarItem(ComponentType, Arguments, Order)); + } + } + + protected virtual async Task ShouldAddComponentAsync(PageToolbarContributionContext context) + { + if (_shouldAddComponent.HasValue) + { + return _shouldAddComponent.Value; + } + + if (RequiredPolicyName == null) + { + _shouldAddComponent = true; + return _shouldAddComponent.Value; + } + + var authorizationService = context.ServiceProvider.GetRequiredService(); + _shouldAddComponent = await authorizationService.IsGrantedAsync(RequiredPolicyName); + return _shouldAddComponent.Value; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Routing/AbpRouterOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Routing/AbpRouterOptions.cs new file mode 100644 index 00000000000..390322da3b8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Routing/AbpRouterOptions.cs @@ -0,0 +1,15 @@ +using System.Reflection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; + +public class AbpRouterOptions +{ + public Assembly AppAssembly { get; set; } = default!; + + public RouterAssemblyList AdditionalAssemblies { get; } + + public AbpRouterOptions() + { + AdditionalAssemblies = new RouterAssemblyList(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Routing/RouterAssemblyList.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Routing/RouterAssemblyList.cs new file mode 100644 index 00000000000..a23841c13e0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Routing/RouterAssemblyList.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; +using System.Reflection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; + +public class RouterAssemblyList : List +{ + +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/AbpThemingOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/AbpThemingOptions.cs new file mode 100644 index 00000000000..4fd7d8958c0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/AbpThemingOptions.cs @@ -0,0 +1,13 @@ +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +public class AbpThemingOptions +{ + public ThemeDictionary Themes { get; } + + public string? DefaultThemeName { get; set; } + + public AbpThemingOptions() + { + Themes = new ThemeDictionary(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/DefaultThemeManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/DefaultThemeManager.cs new file mode 100644 index 00000000000..30bf198a9f0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/DefaultThemeManager.cs @@ -0,0 +1,34 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +public class DefaultThemeManager : IThemeManager, IScopedDependency, IServiceProviderAccessor +{ + public IServiceProvider ServiceProvider { get; } + public ITheme CurrentTheme => GetCurrentTheme(); + + private ITheme? _currentTheme; + + protected IThemeSelector ThemeSelector { get; } + + public DefaultThemeManager( + IServiceProvider serviceProvider, + IThemeSelector themeSelector) + { + ServiceProvider = serviceProvider; + ThemeSelector = themeSelector; + } + + protected virtual ITheme GetCurrentTheme() + { + if (_currentTheme != null) + { + return _currentTheme; + } + + _currentTheme = (ITheme)ServiceProvider.GetRequiredService(ThemeSelector.GetCurrentThemeInfo().ThemeType); + return _currentTheme; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/DefaultThemeSelector.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/DefaultThemeSelector.cs new file mode 100644 index 00000000000..18fa99744c0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/DefaultThemeSelector.cs @@ -0,0 +1,36 @@ +using System.Linq; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +public class DefaultThemeSelector : IThemeSelector, ITransientDependency +{ + protected AbpThemingOptions Options { get; } + + public DefaultThemeSelector(IOptions options) + { + Options = options.Value; + } + + public virtual ThemeInfo GetCurrentThemeInfo() + { + if (!Options.Themes.Any()) + { + throw new AbpException($"No theme registered! Use {nameof(AbpThemingOptions)} to register themes."); + } + + if (Options.DefaultThemeName == null) + { + return Options.Themes.Values.First(); + } + + var themeInfo = Options.Themes.Values.FirstOrDefault(t => t.Name == Options.DefaultThemeName); + if (themeInfo == null) + { + throw new AbpException("Default theme is configured but it's not found in the registered themes: " + Options.DefaultThemeName); + } + + return themeInfo; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ITheme.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ITheme.cs new file mode 100644 index 00000000000..270ff2c4272 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ITheme.cs @@ -0,0 +1,8 @@ +using System; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +public interface ITheme +{ + Type GetLayout(string name, bool fallbackToDefault = true); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/IThemeManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/IThemeManager.cs new file mode 100644 index 00000000000..663ce4716cb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/IThemeManager.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +public interface IThemeManager +{ + ITheme CurrentTheme { get; } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/IThemeSelector.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/IThemeSelector.cs new file mode 100644 index 00000000000..51809a6f542 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/IThemeSelector.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +public interface IThemeSelector +{ + ThemeInfo GetCurrentThemeInfo(); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeDictionary.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeDictionary.cs new file mode 100644 index 00000000000..e2361c2c6a1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeDictionary.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +public class ThemeDictionary : Dictionary +{ + public ThemeInfo Add() + where TTheme : ITheme + { + return Add(typeof(TTheme)); + } + + public ThemeInfo Add(Type themeType) + { + if (ContainsKey(themeType)) + { + throw new AbpException("This theme is already added before: " + themeType.AssemblyQualifiedName); + } + + return this[themeType] = new ThemeInfo(themeType); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeExtensions.cs new file mode 100644 index 00000000000..09798cecea5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeExtensions.cs @@ -0,0 +1,27 @@ +using System; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +public static class ThemeExtensions +{ + public static Type GetApplicationLayout(this ITheme theme, bool fallbackToDefault = true) + { + return theme.GetLayout(StandardLayouts.Application, fallbackToDefault); + } + + public static Type GetAccountLayout(this ITheme theme, bool fallbackToDefault = true) + { + return theme.GetLayout(StandardLayouts.Account, fallbackToDefault); + } + + public static Type GetPublicLayout(this ITheme theme, bool fallbackToDefault = true) + { + return theme.GetLayout(StandardLayouts.Public, fallbackToDefault); + } + + public static Type GetEmptyLayout(this ITheme theme, bool fallbackToDefault = true) + { + return theme.GetLayout(StandardLayouts.Empty, fallbackToDefault); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeInfo.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeInfo.cs new file mode 100644 index 00000000000..d9525cd7582 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeInfo.cs @@ -0,0 +1,24 @@ +using System; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +public class ThemeInfo +{ + public Type ThemeType { get; } + + public string Name { get; } + + public ThemeInfo([NotNull] Type themeType) + { + Check.NotNull(themeType, nameof(themeType)); + + if (!typeof(ITheme).IsAssignableFrom(themeType)) + { + throw new AbpException($"Given {nameof(themeType)} ({themeType.AssemblyQualifiedName}) should be type of {typeof(ITheme).AssemblyQualifiedName}"); + } + + ThemeType = themeType; + Name = ThemeNameAttribute.GetName(themeType); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeNameAttribute.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeNameAttribute.cs new file mode 100644 index 00000000000..fc85e1e5cd6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Theming/ThemeNameAttribute.cs @@ -0,0 +1,23 @@ +using System; +using System.Linq; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; + +[AttributeUsage(AttributeTargets.Class)] +public class ThemeNameAttribute : Attribute +{ + public string Name { get; set; } + + public ThemeNameAttribute(string name) + { + Name = name; + } + + public static string GetName(Type themeType) + { + return themeType + .GetCustomAttributes(true) + .OfType() + .FirstOrDefault()?.Name ?? themeType.Name; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/AbpToolbarOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/AbpToolbarOptions.cs new file mode 100644 index 00000000000..e096cebbc2c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/AbpToolbarOptions.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +public class AbpToolbarOptions +{ + [NotNull] + public List Contributors { get; } + + public AbpToolbarOptions() + { + Contributors = new List(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/IToolbarConfigurationContext.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/IToolbarConfigurationContext.cs new file mode 100644 index 00000000000..b019b269d83 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/IToolbarConfigurationContext.cs @@ -0,0 +1,27 @@ +using System; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Localization; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +public interface IToolbarConfigurationContext : IServiceProviderAccessor +{ + Toolbar Toolbar { get; } + + IAuthorizationService AuthorizationService { get; } + + IStringLocalizerFactory StringLocalizerFactory { get; } + + Task IsGrantedAsync(string policyName); + + IStringLocalizer? GetDefaultLocalizer(); + + [NotNull] + public IStringLocalizer GetLocalizer(); + + [NotNull] + public IStringLocalizer GetLocalizer(Type resourceType); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/IToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/IToolbarContributor.cs new file mode 100644 index 00000000000..973509464cb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/IToolbarContributor.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +public interface IToolbarContributor +{ + Task ConfigureToolbarAsync(IToolbarConfigurationContext context); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/IToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/IToolbarManager.cs new file mode 100644 index 00000000000..cb483092d9d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/IToolbarManager.cs @@ -0,0 +1,8 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +public interface IToolbarManager +{ + Task GetAsync(string name); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/StandardToolbars.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/StandardToolbars.cs new file mode 100644 index 00000000000..c3443f7efdc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/StandardToolbars.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +public static class StandardToolbars +{ + public const string Main = "Main"; +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/Toolbar.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/Toolbar.cs new file mode 100644 index 00000000000..5a0d8291249 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/Toolbar.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +public class Toolbar +{ + public string Name { get; } + + public List Items { get; } + + public Toolbar([NotNull] string name) + { + Name = Check.NotNull(name, nameof(name)); + Items = new List(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/ToolbarConfigurationContext.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/ToolbarConfigurationContext.cs new file mode 100644 index 00000000000..1fdff594b08 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/ToolbarConfigurationContext.cs @@ -0,0 +1,51 @@ +using System; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +public class ToolbarConfigurationContext : IToolbarConfigurationContext +{ + public IServiceProvider ServiceProvider { get; } + + private readonly IAbpLazyServiceProvider _lazyServiceProvider; + + public IAuthorizationService AuthorizationService => _lazyServiceProvider.LazyGetRequiredService(); + + public IStringLocalizerFactory StringLocalizerFactory => _lazyServiceProvider.LazyGetRequiredService(); + + public Toolbar Toolbar { get; } + + public ToolbarConfigurationContext(Toolbar toolbar, IServiceProvider serviceProvider) + { + Toolbar = toolbar; + ServiceProvider = serviceProvider; + _lazyServiceProvider = ServiceProvider.GetRequiredService(); + } + + public Task IsGrantedAsync(string policyName) + { + return AuthorizationService.IsGrantedAsync(policyName); + } + + public IStringLocalizer? GetDefaultLocalizer() + { + return StringLocalizerFactory.CreateDefaultOrNull(); + } + + [NotNull] + public IStringLocalizer GetLocalizer() + { + return StringLocalizerFactory.Create(); + } + + [NotNull] + public IStringLocalizer GetLocalizer(Type resourceType) + { + return StringLocalizerFactory.Create(resourceType); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/ToolbarItem.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/ToolbarItem.cs new file mode 100644 index 00000000000..31b2839cc60 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/ToolbarItem.cs @@ -0,0 +1,21 @@ +using System; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +public class ToolbarItem +{ + public Type ComponentType { + get => _componentType; + set => _componentType = Check.NotNull(value, nameof(value)); + } + private Type _componentType = default!; + + public int Order { get; set; } + + public ToolbarItem([NotNull] Type componentType, int order = 0) + { + Order = order; + ComponentType = Check.NotNull(componentType, nameof(componentType)); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/ToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/ToolbarManager.cs new file mode 100644 index 00000000000..cfdfcfd1e72 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Toolbars/ToolbarManager.cs @@ -0,0 +1,38 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +public class ToolbarManager : IToolbarManager, ITransientDependency +{ + protected AbpToolbarOptions Options { get; } + protected IServiceProvider ServiceProvider { get; } + + public ToolbarManager( + IOptions options, + IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + Options = options.Value; + } + + public async Task GetAsync(string name) + { + var toolbar = new Toolbar(name); + + using (var scope = ServiceProvider.CreateScope()) + { + var context = new ToolbarConfigurationContext(toolbar, scope.ServiceProvider); + + foreach (var contributor in Options.Contributors) + { + await contributor.ConfigureToolbarAsync(context); + } + } + + return toolbar; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.abppkg b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.abppkg new file mode 100644 index 00000000000..e0c33eaab11 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.framework" +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.csproj new file mode 100644 index 00000000000..0e174f1ab8f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.csproj @@ -0,0 +1,22 @@ + + + + + + + net10.0 + enable + Nullable + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorBundlingModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorBundlingModule.cs new file mode 100644 index 00000000000..aabe62e604b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorBundlingModule.cs @@ -0,0 +1,37 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling; + +[DependsOn( + typeof(AbpAspNetCoreMvcUiBundlingAbstractionsModule) +)] +public class AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorBundlingModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.GlobalAssets.Enabled = true; + options.GlobalAssets.GlobalStyleBundleName = BlazorWebAssemblyMudBlazorStandardBundles.Styles.Global; + options.GlobalAssets.GlobalScriptBundleName = BlazorWebAssemblyMudBlazorStandardBundles.Scripts.Global; + + options + .StyleBundles + .Add(BlazorWebAssemblyMudBlazorStandardBundles.Styles.Global, bundle => + { + bundle.AddContributors(typeof(BlazorWebAssemblyMudBlazorStyleContributor)); + }); + + options + .ScriptBundles + .Add(BlazorWebAssemblyMudBlazorStandardBundles.Scripts.Global, bundle => + { + bundle.AddContributors(typeof(BlazorWebAssemblyMudBlazorScriptContributor)); + }); + + options.MinificationIgnoredFiles.Add("_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"); + }); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorScriptContributor.cs new file mode 100644 index 00000000000..246f32f15b9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorScriptContributor.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling; + +public class BlazorWebAssemblyMudBlazorScriptContributor : BundleContributor +{ + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"); + context.Files.AddIfNotContains("_content/MudBlazor/MudBlazor.min.js"); + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/js/abp.js"); + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/js/lang-utils.js"); + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/js/authentication-state-listener.js"); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorStandardBundles.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorStandardBundles.cs new file mode 100644 index 00000000000..de5b72cc2e1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorStandardBundles.cs @@ -0,0 +1,14 @@ +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling; + +public class BlazorWebAssemblyMudBlazorStandardBundles +{ + public static class Styles + { + public static string Global = "BlazorWebAssemblyMudBlazor.Global"; + } + + public static class Scripts + { + public static string Global = "BlazorWebAssemblyMudBlazor.Global"; + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorStyleContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorStyleContributor.cs new file mode 100644 index 00000000000..32d6563d74f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorStyleContributor.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling; + +public class BlazorWebAssemblyMudBlazorStyleContributor : BundleContributor +{ + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/libs/fontawesome/css/all.css"); + context.Files.AddIfNotContains("_content/MudBlazor/MudBlazor.min.css"); + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/css/abp.css"); + context.Files.AddIfNotContains("_content/Volo.Abp.MudBlazorUI/volo.abp.mudblazorui.css"); + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/libs/flag-icon/css/flag-icon.css"); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/FodyWeavers.xml new file mode 100644 index 00000000000..7e9f94ead6f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/FodyWeavers.xsd new file mode 100644 index 00000000000..e6bb89a4a12 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling.csproj b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling.csproj new file mode 100644 index 00000000000..adb6c6260d3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling.csproj @@ -0,0 +1,16 @@ + + + + + + + net10.0 + enable + Nullable + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule.cs new file mode 100644 index 00000000000..6476687904b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule.cs @@ -0,0 +1,35 @@ +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling; +using Volo.Abp.AspNetCore.Components.WebAssembly; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorBundlingModule), + typeof(AbpAspNetCoreComponentsWebThemingMudBlazorModule), + typeof(AbpAspNetCoreComponentsWebAssemblyModule) +)] +public class AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options + .StyleBundles + .Add(BlazorWebAssemblyMudBlazorStandardBundles.Styles.Global, bundle => + { + bundle.AddContributors(typeof(BlazorWebAssemblyMudBlazorStyleContributor)); + }); + + options + .ScriptBundles + .Add(BlazorWebAssemblyMudBlazorStandardBundles.Scripts.Global, bundle => + { + bundle.AddContributors(typeof(BlazorWebAssemblyMudBlazorScriptContributor)); + }); + }); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/CultureAwareRedirectToLoginHelper.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/CultureAwareRedirectToLoginHelper.cs new file mode 100644 index 00000000000..2ad0bdea79c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/CultureAwareRedirectToLoginHelper.cs @@ -0,0 +1,28 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.Extensions.Options; +using Volo.Abp.AspNetCore.Components.Web; +using Volo.Abp.AspNetCore.Components.WebAssembly; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; + +public static class CultureAwareRedirectToLoginHelper +{ + public static async Task RedirectAsync( + NavigationManager navigation, + string loginUrl, + IRouteBasedCultureUrlHelper cultureUrlHelper, + IOptions webOptions) + { + var cultureLoginUrl = await cultureUrlHelper.PrependCulturePrefixAsync(loginUrl); + if (webOptions.Value.IsBlazorWebApp) + { + navigation.NavigateTo(cultureLoginUrl, forceLoad: true); + } + else + { + navigation.NavigateToLogin(cultureLoginUrl); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/FodyWeavers.xml b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/FodyWeavers.xml new file mode 100644 index 00000000000..7e9f94ead6f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/FodyWeavers.xsd b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/FodyWeavers.xsd new file mode 100644 index 00000000000..ffa6fc4b782 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.abppkg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.abppkg new file mode 100644 index 00000000000..e0c33eaab11 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.abppkg @@ -0,0 +1,3 @@ +{ + "role": "lib.framework" +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.csproj b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.csproj new file mode 100644 index 00000000000..1f830fa1621 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.csproj @@ -0,0 +1,18 @@ + + + + + + + net10.0 + enable + Nullable + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/WebAssemblyMudBlazorComponentBundleManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/WebAssemblyMudBlazorComponentBundleManager.cs new file mode 100644 index 00000000000..c6a3a446f35 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/WebAssemblyMudBlazorComponentBundleManager.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Bundling; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; + +public class WebAssemblyMudBlazorComponentBundleManager: IComponentBundleManager, ITransientDependency +{ + public virtual Task> GetStyleBundleFilesAsync(string bundleName) + { + return Task.FromResult>(new List()); + } + + public virtual Task> GetScriptBundleFilesAsync(string bundleName) + { + return Task.FromResult>(new List()); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.css b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.css new file mode 100644 index 00000000000..b54375090bb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.css @@ -0,0 +1,1568 @@ +.flag-icon-background { + background-size: contain; + background-position: 50%; + background-repeat: no-repeat; +} +.flag-icon { + background-size: contain; + background-position: 50%; + background-repeat: no-repeat; + position: relative; + display: inline-block; + width: 1.33333333em; + line-height: 1em; +} +.flag-icon:before { + content: "\00a0"; +} +.flag-icon.flag-icon-squared { + width: 1em; +} +.flag-icon-ad { + background-image: url(../flags/4x3/ad.svg); +} +.flag-icon-ad.flag-icon-squared { + background-image: url(../flags/1x1/ad.svg); +} +.flag-icon-ae { + background-image: url(../flags/4x3/ae.svg); +} +.flag-icon-ae.flag-icon-squared { + background-image: url(../flags/1x1/ae.svg); +} +.flag-icon-af { + background-image: url(../flags/4x3/af.svg); +} +.flag-icon-af.flag-icon-squared { + background-image: url(../flags/1x1/af.svg); +} +.flag-icon-ag { + background-image: url(../flags/4x3/ag.svg); +} +.flag-icon-ag.flag-icon-squared { + background-image: url(../flags/1x1/ag.svg); +} +.flag-icon-ai { + background-image: url(../flags/4x3/ai.svg); +} +.flag-icon-ai.flag-icon-squared { + background-image: url(../flags/1x1/ai.svg); +} +.flag-icon-al { + background-image: url(../flags/4x3/al.svg); +} +.flag-icon-al.flag-icon-squared { + background-image: url(../flags/1x1/al.svg); +} +.flag-icon-am { + background-image: url(../flags/4x3/am.svg); +} +.flag-icon-am.flag-icon-squared { + background-image: url(../flags/1x1/am.svg); +} +.flag-icon-ao { + background-image: url(../flags/4x3/ao.svg); +} +.flag-icon-ao.flag-icon-squared { + background-image: url(../flags/1x1/ao.svg); +} +.flag-icon-aq { + background-image: url(../flags/4x3/aq.svg); +} +.flag-icon-aq.flag-icon-squared { + background-image: url(../flags/1x1/aq.svg); +} +.flag-icon-ar { + background-image: url(../flags/4x3/ar.svg); +} +.flag-icon-ar.flag-icon-squared { + background-image: url(../flags/1x1/ar.svg); +} +.flag-icon-as { + background-image: url(../flags/4x3/as.svg); +} +.flag-icon-as.flag-icon-squared { + background-image: url(../flags/1x1/as.svg); +} +.flag-icon-at { + background-image: url(../flags/4x3/at.svg); +} +.flag-icon-at.flag-icon-squared { + background-image: url(../flags/1x1/at.svg); +} +.flag-icon-au { + background-image: url(../flags/4x3/au.svg); +} +.flag-icon-au.flag-icon-squared { + background-image: url(../flags/1x1/au.svg); +} +.flag-icon-aw { + background-image: url(../flags/4x3/aw.svg); +} +.flag-icon-aw.flag-icon-squared { + background-image: url(../flags/1x1/aw.svg); +} +.flag-icon-ax { + background-image: url(../flags/4x3/ax.svg); +} +.flag-icon-ax.flag-icon-squared { + background-image: url(../flags/1x1/ax.svg); +} +.flag-icon-az { + background-image: url(../flags/4x3/az.svg); +} +.flag-icon-az.flag-icon-squared { + background-image: url(../flags/1x1/az.svg); +} +.flag-icon-ba { + background-image: url(../flags/4x3/ba.svg); +} +.flag-icon-ba.flag-icon-squared { + background-image: url(../flags/1x1/ba.svg); +} +.flag-icon-bb { + background-image: url(../flags/4x3/bb.svg); +} +.flag-icon-bb.flag-icon-squared { + background-image: url(../flags/1x1/bb.svg); +} +.flag-icon-bd { + background-image: url(../flags/4x3/bd.svg); +} +.flag-icon-bd.flag-icon-squared { + background-image: url(../flags/1x1/bd.svg); +} +.flag-icon-be { + background-image: url(../flags/4x3/be.svg); +} +.flag-icon-be.flag-icon-squared { + background-image: url(../flags/1x1/be.svg); +} +.flag-icon-bf { + background-image: url(../flags/4x3/bf.svg); +} +.flag-icon-bf.flag-icon-squared { + background-image: url(../flags/1x1/bf.svg); +} +.flag-icon-bg { + background-image: url(../flags/4x3/bg.svg); +} +.flag-icon-bg.flag-icon-squared { + background-image: url(../flags/1x1/bg.svg); +} +.flag-icon-bh { + background-image: url(../flags/4x3/bh.svg); +} +.flag-icon-bh.flag-icon-squared { + background-image: url(../flags/1x1/bh.svg); +} +.flag-icon-bi { + background-image: url(../flags/4x3/bi.svg); +} +.flag-icon-bi.flag-icon-squared { + background-image: url(../flags/1x1/bi.svg); +} +.flag-icon-bj { + background-image: url(../flags/4x3/bj.svg); +} +.flag-icon-bj.flag-icon-squared { + background-image: url(../flags/1x1/bj.svg); +} +.flag-icon-bl { + background-image: url(../flags/4x3/bl.svg); +} +.flag-icon-bl.flag-icon-squared { + background-image: url(../flags/1x1/bl.svg); +} +.flag-icon-bm { + background-image: url(../flags/4x3/bm.svg); +} +.flag-icon-bm.flag-icon-squared { + background-image: url(../flags/1x1/bm.svg); +} +.flag-icon-bn { + background-image: url(../flags/4x3/bn.svg); +} +.flag-icon-bn.flag-icon-squared { + background-image: url(../flags/1x1/bn.svg); +} +.flag-icon-bo { + background-image: url(../flags/4x3/bo.svg); +} +.flag-icon-bo.flag-icon-squared { + background-image: url(../flags/1x1/bo.svg); +} +.flag-icon-bq { + background-image: url(../flags/4x3/bq.svg); +} +.flag-icon-bq.flag-icon-squared { + background-image: url(../flags/1x1/bq.svg); +} +.flag-icon-br { + background-image: url(../flags/4x3/br.svg); +} +.flag-icon-br.flag-icon-squared { + background-image: url(../flags/1x1/br.svg); +} +.flag-icon-bs { + background-image: url(../flags/4x3/bs.svg); +} +.flag-icon-bs.flag-icon-squared { + background-image: url(../flags/1x1/bs.svg); +} +.flag-icon-bt { + background-image: url(../flags/4x3/bt.svg); +} +.flag-icon-bt.flag-icon-squared { + background-image: url(../flags/1x1/bt.svg); +} +.flag-icon-bv { + background-image: url(../flags/4x3/bv.svg); +} +.flag-icon-bv.flag-icon-squared { + background-image: url(../flags/1x1/bv.svg); +} +.flag-icon-bw { + background-image: url(../flags/4x3/bw.svg); +} +.flag-icon-bw.flag-icon-squared { + background-image: url(../flags/1x1/bw.svg); +} +.flag-icon-by { + background-image: url(../flags/4x3/by.svg); +} +.flag-icon-by.flag-icon-squared { + background-image: url(../flags/1x1/by.svg); +} +.flag-icon-bz { + background-image: url(../flags/4x3/bz.svg); +} +.flag-icon-bz.flag-icon-squared { + background-image: url(../flags/1x1/bz.svg); +} +.flag-icon-ca { + background-image: url(../flags/4x3/ca.svg); +} +.flag-icon-ca.flag-icon-squared { + background-image: url(../flags/1x1/ca.svg); +} +.flag-icon-cc { + background-image: url(../flags/4x3/cc.svg); +} +.flag-icon-cc.flag-icon-squared { + background-image: url(../flags/1x1/cc.svg); +} +.flag-icon-cd { + background-image: url(../flags/4x3/cd.svg); +} +.flag-icon-cd.flag-icon-squared { + background-image: url(../flags/1x1/cd.svg); +} +.flag-icon-cf { + background-image: url(../flags/4x3/cf.svg); +} +.flag-icon-cf.flag-icon-squared { + background-image: url(../flags/1x1/cf.svg); +} +.flag-icon-cg { + background-image: url(../flags/4x3/cg.svg); +} +.flag-icon-cg.flag-icon-squared { + background-image: url(../flags/1x1/cg.svg); +} +.flag-icon-ch { + background-image: url(../flags/4x3/ch.svg); +} +.flag-icon-ch.flag-icon-squared { + background-image: url(../flags/1x1/ch.svg); +} +.flag-icon-ci { + background-image: url(../flags/4x3/ci.svg); +} +.flag-icon-ci.flag-icon-squared { + background-image: url(../flags/1x1/ci.svg); +} +.flag-icon-ck { + background-image: url(../flags/4x3/ck.svg); +} +.flag-icon-ck.flag-icon-squared { + background-image: url(../flags/1x1/ck.svg); +} +.flag-icon-cl { + background-image: url(../flags/4x3/cl.svg); +} +.flag-icon-cl.flag-icon-squared { + background-image: url(../flags/1x1/cl.svg); +} +.flag-icon-cm { + background-image: url(../flags/4x3/cm.svg); +} +.flag-icon-cm.flag-icon-squared { + background-image: url(../flags/1x1/cm.svg); +} +.flag-icon-cn { + background-image: url(../flags/4x3/cn.svg); +} +.flag-icon-cn.flag-icon-squared { + background-image: url(../flags/1x1/cn.svg); +} +.flag-icon-co { + background-image: url(../flags/4x3/co.svg); +} +.flag-icon-co.flag-icon-squared { + background-image: url(../flags/1x1/co.svg); +} +.flag-icon-cr { + background-image: url(../flags/4x3/cr.svg); +} +.flag-icon-cr.flag-icon-squared { + background-image: url(../flags/1x1/cr.svg); +} +.flag-icon-cu { + background-image: url(../flags/4x3/cu.svg); +} +.flag-icon-cu.flag-icon-squared { + background-image: url(../flags/1x1/cu.svg); +} +.flag-icon-cv { + background-image: url(../flags/4x3/cv.svg); +} +.flag-icon-cv.flag-icon-squared { + background-image: url(../flags/1x1/cv.svg); +} +.flag-icon-cw { + background-image: url(../flags/4x3/cw.svg); +} +.flag-icon-cw.flag-icon-squared { + background-image: url(../flags/1x1/cw.svg); +} +.flag-icon-cx { + background-image: url(../flags/4x3/cx.svg); +} +.flag-icon-cx.flag-icon-squared { + background-image: url(../flags/1x1/cx.svg); +} +.flag-icon-cy { + background-image: url(../flags/4x3/cy.svg); +} +.flag-icon-cy.flag-icon-squared { + background-image: url(../flags/1x1/cy.svg); +} +.flag-icon-cz { + background-image: url(../flags/4x3/cz.svg); +} +.flag-icon-cz.flag-icon-squared { + background-image: url(../flags/1x1/cz.svg); +} +.flag-icon-de { + background-image: url(../flags/4x3/de.svg); +} +.flag-icon-de.flag-icon-squared { + background-image: url(../flags/1x1/de.svg); +} +.flag-icon-dj { + background-image: url(../flags/4x3/dj.svg); +} +.flag-icon-dj.flag-icon-squared { + background-image: url(../flags/1x1/dj.svg); +} +.flag-icon-dk { + background-image: url(../flags/4x3/dk.svg); +} +.flag-icon-dk.flag-icon-squared { + background-image: url(../flags/1x1/dk.svg); +} +.flag-icon-dm { + background-image: url(../flags/4x3/dm.svg); +} +.flag-icon-dm.flag-icon-squared { + background-image: url(../flags/1x1/dm.svg); +} +.flag-icon-do { + background-image: url(../flags/4x3/do.svg); +} +.flag-icon-do.flag-icon-squared { + background-image: url(../flags/1x1/do.svg); +} +.flag-icon-dz { + background-image: url(../flags/4x3/dz.svg); +} +.flag-icon-dz.flag-icon-squared { + background-image: url(../flags/1x1/dz.svg); +} +.flag-icon-ec { + background-image: url(../flags/4x3/ec.svg); +} +.flag-icon-ec.flag-icon-squared { + background-image: url(../flags/1x1/ec.svg); +} +.flag-icon-ee { + background-image: url(../flags/4x3/ee.svg); +} +.flag-icon-ee.flag-icon-squared { + background-image: url(../flags/1x1/ee.svg); +} +.flag-icon-eg { + background-image: url(../flags/4x3/eg.svg); +} +.flag-icon-eg.flag-icon-squared { + background-image: url(../flags/1x1/eg.svg); +} +.flag-icon-eh { + background-image: url(../flags/4x3/eh.svg); +} +.flag-icon-eh.flag-icon-squared { + background-image: url(../flags/1x1/eh.svg); +} +.flag-icon-er { + background-image: url(../flags/4x3/er.svg); +} +.flag-icon-er.flag-icon-squared { + background-image: url(../flags/1x1/er.svg); +} +.flag-icon-es { + background-image: url(../flags/4x3/es.svg); +} +.flag-icon-es.flag-icon-squared { + background-image: url(../flags/1x1/es.svg); +} +.flag-icon-et { + background-image: url(../flags/4x3/et.svg); +} +.flag-icon-et.flag-icon-squared { + background-image: url(../flags/1x1/et.svg); +} +.flag-icon-fi { + background-image: url(../flags/4x3/fi.svg); +} +.flag-icon-fi.flag-icon-squared { + background-image: url(../flags/1x1/fi.svg); +} +.flag-icon-fj { + background-image: url(../flags/4x3/fj.svg); +} +.flag-icon-fj.flag-icon-squared { + background-image: url(../flags/1x1/fj.svg); +} +.flag-icon-fk { + background-image: url(../flags/4x3/fk.svg); +} +.flag-icon-fk.flag-icon-squared { + background-image: url(../flags/1x1/fk.svg); +} +.flag-icon-fm { + background-image: url(../flags/4x3/fm.svg); +} +.flag-icon-fm.flag-icon-squared { + background-image: url(../flags/1x1/fm.svg); +} +.flag-icon-fo { + background-image: url(../flags/4x3/fo.svg); +} +.flag-icon-fo.flag-icon-squared { + background-image: url(../flags/1x1/fo.svg); +} +.flag-icon-fr { + background-image: url(../flags/4x3/fr.svg); +} +.flag-icon-fr.flag-icon-squared { + background-image: url(../flags/1x1/fr.svg); +} +.flag-icon-ga { + background-image: url(../flags/4x3/ga.svg); +} +.flag-icon-ga.flag-icon-squared { + background-image: url(../flags/1x1/ga.svg); +} +.flag-icon-gb { + background-image: url(../flags/4x3/gb.svg); +} +.flag-icon-gb.flag-icon-squared { + background-image: url(../flags/1x1/gb.svg); +} +.flag-icon-gd { + background-image: url(../flags/4x3/gd.svg); +} +.flag-icon-gd.flag-icon-squared { + background-image: url(../flags/1x1/gd.svg); +} +.flag-icon-ge { + background-image: url(../flags/4x3/ge.svg); +} +.flag-icon-ge.flag-icon-squared { + background-image: url(../flags/1x1/ge.svg); +} +.flag-icon-gf { + background-image: url(../flags/4x3/gf.svg); +} +.flag-icon-gf.flag-icon-squared { + background-image: url(../flags/1x1/gf.svg); +} +.flag-icon-gg { + background-image: url(../flags/4x3/gg.svg); +} +.flag-icon-gg.flag-icon-squared { + background-image: url(../flags/1x1/gg.svg); +} +.flag-icon-gh { + background-image: url(../flags/4x3/gh.svg); +} +.flag-icon-gh.flag-icon-squared { + background-image: url(../flags/1x1/gh.svg); +} +.flag-icon-gi { + background-image: url(../flags/4x3/gi.svg); +} +.flag-icon-gi.flag-icon-squared { + background-image: url(../flags/1x1/gi.svg); +} +.flag-icon-gl { + background-image: url(../flags/4x3/gl.svg); +} +.flag-icon-gl.flag-icon-squared { + background-image: url(../flags/1x1/gl.svg); +} +.flag-icon-gm { + background-image: url(../flags/4x3/gm.svg); +} +.flag-icon-gm.flag-icon-squared { + background-image: url(../flags/1x1/gm.svg); +} +.flag-icon-gn { + background-image: url(../flags/4x3/gn.svg); +} +.flag-icon-gn.flag-icon-squared { + background-image: url(../flags/1x1/gn.svg); +} +.flag-icon-gp { + background-image: url(../flags/4x3/gp.svg); +} +.flag-icon-gp.flag-icon-squared { + background-image: url(../flags/1x1/gp.svg); +} +.flag-icon-gq { + background-image: url(../flags/4x3/gq.svg); +} +.flag-icon-gq.flag-icon-squared { + background-image: url(../flags/1x1/gq.svg); +} +.flag-icon-gr { + background-image: url(../flags/4x3/gr.svg); +} +.flag-icon-gr.flag-icon-squared { + background-image: url(../flags/1x1/gr.svg); +} +.flag-icon-gs { + background-image: url(../flags/4x3/gs.svg); +} +.flag-icon-gs.flag-icon-squared { + background-image: url(../flags/1x1/gs.svg); +} +.flag-icon-gt { + background-image: url(../flags/4x3/gt.svg); +} +.flag-icon-gt.flag-icon-squared { + background-image: url(../flags/1x1/gt.svg); +} +.flag-icon-gu { + background-image: url(../flags/4x3/gu.svg); +} +.flag-icon-gu.flag-icon-squared { + background-image: url(../flags/1x1/gu.svg); +} +.flag-icon-gw { + background-image: url(../flags/4x3/gw.svg); +} +.flag-icon-gw.flag-icon-squared { + background-image: url(../flags/1x1/gw.svg); +} +.flag-icon-gy { + background-image: url(../flags/4x3/gy.svg); +} +.flag-icon-gy.flag-icon-squared { + background-image: url(../flags/1x1/gy.svg); +} +.flag-icon-hk { + background-image: url(../flags/4x3/hk.svg); +} +.flag-icon-hk.flag-icon-squared { + background-image: url(../flags/1x1/hk.svg); +} +.flag-icon-hm { + background-image: url(../flags/4x3/hm.svg); +} +.flag-icon-hm.flag-icon-squared { + background-image: url(../flags/1x1/hm.svg); +} +.flag-icon-hn { + background-image: url(../flags/4x3/hn.svg); +} +.flag-icon-hn.flag-icon-squared { + background-image: url(../flags/1x1/hn.svg); +} +.flag-icon-hr { + background-image: url(../flags/4x3/hr.svg); +} +.flag-icon-hr.flag-icon-squared { + background-image: url(../flags/1x1/hr.svg); +} +.flag-icon-ht { + background-image: url(../flags/4x3/ht.svg); +} +.flag-icon-ht.flag-icon-squared { + background-image: url(../flags/1x1/ht.svg); +} +.flag-icon-hu { + background-image: url(../flags/4x3/hu.svg); +} +.flag-icon-hu.flag-icon-squared { + background-image: url(../flags/1x1/hu.svg); +} +.flag-icon-id { + background-image: url(../flags/4x3/id.svg); +} +.flag-icon-id.flag-icon-squared { + background-image: url(../flags/1x1/id.svg); +} +.flag-icon-ie { + background-image: url(../flags/4x3/ie.svg); +} +.flag-icon-ie.flag-icon-squared { + background-image: url(../flags/1x1/ie.svg); +} +.flag-icon-il { + background-image: url(../flags/4x3/il.svg); +} +.flag-icon-il.flag-icon-squared { + background-image: url(../flags/1x1/il.svg); +} +.flag-icon-im { + background-image: url(../flags/4x3/im.svg); +} +.flag-icon-im.flag-icon-squared { + background-image: url(../flags/1x1/im.svg); +} +.flag-icon-in { + background-image: url(../flags/4x3/in.svg); +} +.flag-icon-in.flag-icon-squared { + background-image: url(../flags/1x1/in.svg); +} +.flag-icon-io { + background-image: url(../flags/4x3/io.svg); +} +.flag-icon-io.flag-icon-squared { + background-image: url(../flags/1x1/io.svg); +} +.flag-icon-iq { + background-image: url(../flags/4x3/iq.svg); +} +.flag-icon-iq.flag-icon-squared { + background-image: url(../flags/1x1/iq.svg); +} +.flag-icon-ir { + background-image: url(../flags/4x3/ir.svg); +} +.flag-icon-ir.flag-icon-squared { + background-image: url(../flags/1x1/ir.svg); +} +.flag-icon-is { + background-image: url(../flags/4x3/is.svg); +} +.flag-icon-is.flag-icon-squared { + background-image: url(../flags/1x1/is.svg); +} +.flag-icon-it { + background-image: url(../flags/4x3/it.svg); +} +.flag-icon-it.flag-icon-squared { + background-image: url(../flags/1x1/it.svg); +} +.flag-icon-je { + background-image: url(../flags/4x3/je.svg); +} +.flag-icon-je.flag-icon-squared { + background-image: url(../flags/1x1/je.svg); +} +.flag-icon-jm { + background-image: url(../flags/4x3/jm.svg); +} +.flag-icon-jm.flag-icon-squared { + background-image: url(../flags/1x1/jm.svg); +} +.flag-icon-jo { + background-image: url(../flags/4x3/jo.svg); +} +.flag-icon-jo.flag-icon-squared { + background-image: url(../flags/1x1/jo.svg); +} +.flag-icon-jp { + background-image: url(../flags/4x3/jp.svg); +} +.flag-icon-jp.flag-icon-squared { + background-image: url(../flags/1x1/jp.svg); +} +.flag-icon-ke { + background-image: url(../flags/4x3/ke.svg); +} +.flag-icon-ke.flag-icon-squared { + background-image: url(../flags/1x1/ke.svg); +} +.flag-icon-kg { + background-image: url(../flags/4x3/kg.svg); +} +.flag-icon-kg.flag-icon-squared { + background-image: url(../flags/1x1/kg.svg); +} +.flag-icon-kh { + background-image: url(../flags/4x3/kh.svg); +} +.flag-icon-kh.flag-icon-squared { + background-image: url(../flags/1x1/kh.svg); +} +.flag-icon-ki { + background-image: url(../flags/4x3/ki.svg); +} +.flag-icon-ki.flag-icon-squared { + background-image: url(../flags/1x1/ki.svg); +} +.flag-icon-km { + background-image: url(../flags/4x3/km.svg); +} +.flag-icon-km.flag-icon-squared { + background-image: url(../flags/1x1/km.svg); +} +.flag-icon-kn { + background-image: url(../flags/4x3/kn.svg); +} +.flag-icon-kn.flag-icon-squared { + background-image: url(../flags/1x1/kn.svg); +} +.flag-icon-kp { + background-image: url(../flags/4x3/kp.svg); +} +.flag-icon-kp.flag-icon-squared { + background-image: url(../flags/1x1/kp.svg); +} +.flag-icon-kr { + background-image: url(../flags/4x3/kr.svg); +} +.flag-icon-kr.flag-icon-squared { + background-image: url(../flags/1x1/kr.svg); +} +.flag-icon-kw { + background-image: url(../flags/4x3/kw.svg); +} +.flag-icon-kw.flag-icon-squared { + background-image: url(../flags/1x1/kw.svg); +} +.flag-icon-ky { + background-image: url(../flags/4x3/ky.svg); +} +.flag-icon-ky.flag-icon-squared { + background-image: url(../flags/1x1/ky.svg); +} +.flag-icon-kz { + background-image: url(../flags/4x3/kz.svg); +} +.flag-icon-kz.flag-icon-squared { + background-image: url(../flags/1x1/kz.svg); +} +.flag-icon-la { + background-image: url(../flags/4x3/la.svg); +} +.flag-icon-la.flag-icon-squared { + background-image: url(../flags/1x1/la.svg); +} +.flag-icon-lb { + background-image: url(../flags/4x3/lb.svg); +} +.flag-icon-lb.flag-icon-squared { + background-image: url(../flags/1x1/lb.svg); +} +.flag-icon-lc { + background-image: url(../flags/4x3/lc.svg); +} +.flag-icon-lc.flag-icon-squared { + background-image: url(../flags/1x1/lc.svg); +} +.flag-icon-li { + background-image: url(../flags/4x3/li.svg); +} +.flag-icon-li.flag-icon-squared { + background-image: url(../flags/1x1/li.svg); +} +.flag-icon-lk { + background-image: url(../flags/4x3/lk.svg); +} +.flag-icon-lk.flag-icon-squared { + background-image: url(../flags/1x1/lk.svg); +} +.flag-icon-lr { + background-image: url(../flags/4x3/lr.svg); +} +.flag-icon-lr.flag-icon-squared { + background-image: url(../flags/1x1/lr.svg); +} +.flag-icon-ls { + background-image: url(../flags/4x3/ls.svg); +} +.flag-icon-ls.flag-icon-squared { + background-image: url(../flags/1x1/ls.svg); +} +.flag-icon-lt { + background-image: url(../flags/4x3/lt.svg); +} +.flag-icon-lt.flag-icon-squared { + background-image: url(../flags/1x1/lt.svg); +} +.flag-icon-lu { + background-image: url(../flags/4x3/lu.svg); +} +.flag-icon-lu.flag-icon-squared { + background-image: url(../flags/1x1/lu.svg); +} +.flag-icon-lv { + background-image: url(../flags/4x3/lv.svg); +} +.flag-icon-lv.flag-icon-squared { + background-image: url(../flags/1x1/lv.svg); +} +.flag-icon-ly { + background-image: url(../flags/4x3/ly.svg); +} +.flag-icon-ly.flag-icon-squared { + background-image: url(../flags/1x1/ly.svg); +} +.flag-icon-ma { + background-image: url(../flags/4x3/ma.svg); +} +.flag-icon-ma.flag-icon-squared { + background-image: url(../flags/1x1/ma.svg); +} +.flag-icon-mc { + background-image: url(../flags/4x3/mc.svg); +} +.flag-icon-mc.flag-icon-squared { + background-image: url(../flags/1x1/mc.svg); +} +.flag-icon-md { + background-image: url(../flags/4x3/md.svg); +} +.flag-icon-md.flag-icon-squared { + background-image: url(../flags/1x1/md.svg); +} +.flag-icon-me { + background-image: url(../flags/4x3/me.svg); +} +.flag-icon-me.flag-icon-squared { + background-image: url(../flags/1x1/me.svg); +} +.flag-icon-mf { + background-image: url(../flags/4x3/mf.svg); +} +.flag-icon-mf.flag-icon-squared { + background-image: url(../flags/1x1/mf.svg); +} +.flag-icon-mg { + background-image: url(../flags/4x3/mg.svg); +} +.flag-icon-mg.flag-icon-squared { + background-image: url(../flags/1x1/mg.svg); +} +.flag-icon-mh { + background-image: url(../flags/4x3/mh.svg); +} +.flag-icon-mh.flag-icon-squared { + background-image: url(../flags/1x1/mh.svg); +} +.flag-icon-mk { + background-image: url(../flags/4x3/mk.svg); +} +.flag-icon-mk.flag-icon-squared { + background-image: url(../flags/1x1/mk.svg); +} +.flag-icon-ml { + background-image: url(../flags/4x3/ml.svg); +} +.flag-icon-ml.flag-icon-squared { + background-image: url(../flags/1x1/ml.svg); +} +.flag-icon-mm { + background-image: url(../flags/4x3/mm.svg); +} +.flag-icon-mm.flag-icon-squared { + background-image: url(../flags/1x1/mm.svg); +} +.flag-icon-mn { + background-image: url(../flags/4x3/mn.svg); +} +.flag-icon-mn.flag-icon-squared { + background-image: url(../flags/1x1/mn.svg); +} +.flag-icon-mo { + background-image: url(../flags/4x3/mo.svg); +} +.flag-icon-mo.flag-icon-squared { + background-image: url(../flags/1x1/mo.svg); +} +.flag-icon-mp { + background-image: url(../flags/4x3/mp.svg); +} +.flag-icon-mp.flag-icon-squared { + background-image: url(../flags/1x1/mp.svg); +} +.flag-icon-mq { + background-image: url(../flags/4x3/mq.svg); +} +.flag-icon-mq.flag-icon-squared { + background-image: url(../flags/1x1/mq.svg); +} +.flag-icon-mr { + background-image: url(../flags/4x3/mr.svg); +} +.flag-icon-mr.flag-icon-squared { + background-image: url(../flags/1x1/mr.svg); +} +.flag-icon-ms { + background-image: url(../flags/4x3/ms.svg); +} +.flag-icon-ms.flag-icon-squared { + background-image: url(../flags/1x1/ms.svg); +} +.flag-icon-mt { + background-image: url(../flags/4x3/mt.svg); +} +.flag-icon-mt.flag-icon-squared { + background-image: url(../flags/1x1/mt.svg); +} +.flag-icon-mu { + background-image: url(../flags/4x3/mu.svg); +} +.flag-icon-mu.flag-icon-squared { + background-image: url(../flags/1x1/mu.svg); +} +.flag-icon-mv { + background-image: url(../flags/4x3/mv.svg); +} +.flag-icon-mv.flag-icon-squared { + background-image: url(../flags/1x1/mv.svg); +} +.flag-icon-mw { + background-image: url(../flags/4x3/mw.svg); +} +.flag-icon-mw.flag-icon-squared { + background-image: url(../flags/1x1/mw.svg); +} +.flag-icon-mx { + background-image: url(../flags/4x3/mx.svg); +} +.flag-icon-mx.flag-icon-squared { + background-image: url(../flags/1x1/mx.svg); +} +.flag-icon-my { + background-image: url(../flags/4x3/my.svg); +} +.flag-icon-my.flag-icon-squared { + background-image: url(../flags/1x1/my.svg); +} +.flag-icon-mz { + background-image: url(../flags/4x3/mz.svg); +} +.flag-icon-mz.flag-icon-squared { + background-image: url(../flags/1x1/mz.svg); +} +.flag-icon-na { + background-image: url(../flags/4x3/na.svg); +} +.flag-icon-na.flag-icon-squared { + background-image: url(../flags/1x1/na.svg); +} +.flag-icon-nc { + background-image: url(../flags/4x3/nc.svg); +} +.flag-icon-nc.flag-icon-squared { + background-image: url(../flags/1x1/nc.svg); +} +.flag-icon-ne { + background-image: url(../flags/4x3/ne.svg); +} +.flag-icon-ne.flag-icon-squared { + background-image: url(../flags/1x1/ne.svg); +} +.flag-icon-nf { + background-image: url(../flags/4x3/nf.svg); +} +.flag-icon-nf.flag-icon-squared { + background-image: url(../flags/1x1/nf.svg); +} +.flag-icon-ng { + background-image: url(../flags/4x3/ng.svg); +} +.flag-icon-ng.flag-icon-squared { + background-image: url(../flags/1x1/ng.svg); +} +.flag-icon-ni { + background-image: url(../flags/4x3/ni.svg); +} +.flag-icon-ni.flag-icon-squared { + background-image: url(../flags/1x1/ni.svg); +} +.flag-icon-nl { + background-image: url(../flags/4x3/nl.svg); +} +.flag-icon-nl.flag-icon-squared { + background-image: url(../flags/1x1/nl.svg); +} +.flag-icon-no { + background-image: url(../flags/4x3/no.svg); +} +.flag-icon-no.flag-icon-squared { + background-image: url(../flags/1x1/no.svg); +} +.flag-icon-np { + background-image: url(../flags/4x3/np.svg); +} +.flag-icon-np.flag-icon-squared { + background-image: url(../flags/1x1/np.svg); +} +.flag-icon-nr { + background-image: url(../flags/4x3/nr.svg); +} +.flag-icon-nr.flag-icon-squared { + background-image: url(../flags/1x1/nr.svg); +} +.flag-icon-nu { + background-image: url(../flags/4x3/nu.svg); +} +.flag-icon-nu.flag-icon-squared { + background-image: url(../flags/1x1/nu.svg); +} +.flag-icon-nz { + background-image: url(../flags/4x3/nz.svg); +} +.flag-icon-nz.flag-icon-squared { + background-image: url(../flags/1x1/nz.svg); +} +.flag-icon-om { + background-image: url(../flags/4x3/om.svg); +} +.flag-icon-om.flag-icon-squared { + background-image: url(../flags/1x1/om.svg); +} +.flag-icon-pa { + background-image: url(../flags/4x3/pa.svg); +} +.flag-icon-pa.flag-icon-squared { + background-image: url(../flags/1x1/pa.svg); +} +.flag-icon-pe { + background-image: url(../flags/4x3/pe.svg); +} +.flag-icon-pe.flag-icon-squared { + background-image: url(../flags/1x1/pe.svg); +} +.flag-icon-pf { + background-image: url(../flags/4x3/pf.svg); +} +.flag-icon-pf.flag-icon-squared { + background-image: url(../flags/1x1/pf.svg); +} +.flag-icon-pg { + background-image: url(../flags/4x3/pg.svg); +} +.flag-icon-pg.flag-icon-squared { + background-image: url(../flags/1x1/pg.svg); +} +.flag-icon-ph { + background-image: url(../flags/4x3/ph.svg); +} +.flag-icon-ph.flag-icon-squared { + background-image: url(../flags/1x1/ph.svg); +} +.flag-icon-pk { + background-image: url(../flags/4x3/pk.svg); +} +.flag-icon-pk.flag-icon-squared { + background-image: url(../flags/1x1/pk.svg); +} +.flag-icon-pl { + background-image: url(../flags/4x3/pl.svg); +} +.flag-icon-pl.flag-icon-squared { + background-image: url(../flags/1x1/pl.svg); +} +.flag-icon-pm { + background-image: url(../flags/4x3/pm.svg); +} +.flag-icon-pm.flag-icon-squared { + background-image: url(../flags/1x1/pm.svg); +} +.flag-icon-pn { + background-image: url(../flags/4x3/pn.svg); +} +.flag-icon-pn.flag-icon-squared { + background-image: url(../flags/1x1/pn.svg); +} +.flag-icon-pr { + background-image: url(../flags/4x3/pr.svg); +} +.flag-icon-pr.flag-icon-squared { + background-image: url(../flags/1x1/pr.svg); +} +.flag-icon-ps { + background-image: url(../flags/4x3/ps.svg); +} +.flag-icon-ps.flag-icon-squared { + background-image: url(../flags/1x1/ps.svg); +} +.flag-icon-pt { + background-image: url(../flags/4x3/pt.svg); +} +.flag-icon-pt.flag-icon-squared { + background-image: url(../flags/1x1/pt.svg); +} +.flag-icon-pw { + background-image: url(../flags/4x3/pw.svg); +} +.flag-icon-pw.flag-icon-squared { + background-image: url(../flags/1x1/pw.svg); +} +.flag-icon-py { + background-image: url(../flags/4x3/py.svg); +} +.flag-icon-py.flag-icon-squared { + background-image: url(../flags/1x1/py.svg); +} +.flag-icon-qa { + background-image: url(../flags/4x3/qa.svg); +} +.flag-icon-qa.flag-icon-squared { + background-image: url(../flags/1x1/qa.svg); +} +.flag-icon-re { + background-image: url(../flags/4x3/re.svg); +} +.flag-icon-re.flag-icon-squared { + background-image: url(../flags/1x1/re.svg); +} +.flag-icon-ro { + background-image: url(../flags/4x3/ro.svg); +} +.flag-icon-ro.flag-icon-squared { + background-image: url(../flags/1x1/ro.svg); +} +.flag-icon-rs { + background-image: url(../flags/4x3/rs.svg); +} +.flag-icon-rs.flag-icon-squared { + background-image: url(../flags/1x1/rs.svg); +} +.flag-icon-ru { + background-image: url(../flags/4x3/ru.svg); +} +.flag-icon-ru.flag-icon-squared { + background-image: url(../flags/1x1/ru.svg); +} +.flag-icon-rw { + background-image: url(../flags/4x3/rw.svg); +} +.flag-icon-rw.flag-icon-squared { + background-image: url(../flags/1x1/rw.svg); +} +.flag-icon-sa { + background-image: url(../flags/4x3/sa.svg); +} +.flag-icon-sa.flag-icon-squared { + background-image: url(../flags/1x1/sa.svg); +} +.flag-icon-sb { + background-image: url(../flags/4x3/sb.svg); +} +.flag-icon-sb.flag-icon-squared { + background-image: url(../flags/1x1/sb.svg); +} +.flag-icon-sc { + background-image: url(../flags/4x3/sc.svg); +} +.flag-icon-sc.flag-icon-squared { + background-image: url(../flags/1x1/sc.svg); +} +.flag-icon-sd { + background-image: url(../flags/4x3/sd.svg); +} +.flag-icon-sd.flag-icon-squared { + background-image: url(../flags/1x1/sd.svg); +} +.flag-icon-se { + background-image: url(../flags/4x3/se.svg); +} +.flag-icon-se.flag-icon-squared { + background-image: url(../flags/1x1/se.svg); +} +.flag-icon-sg { + background-image: url(../flags/4x3/sg.svg); +} +.flag-icon-sg.flag-icon-squared { + background-image: url(../flags/1x1/sg.svg); +} +.flag-icon-sh { + background-image: url(../flags/4x3/sh.svg); +} +.flag-icon-sh.flag-icon-squared { + background-image: url(../flags/1x1/sh.svg); +} +.flag-icon-si { + background-image: url(../flags/4x3/si.svg); +} +.flag-icon-si.flag-icon-squared { + background-image: url(../flags/1x1/si.svg); +} +.flag-icon-sj { + background-image: url(../flags/4x3/sj.svg); +} +.flag-icon-sj.flag-icon-squared { + background-image: url(../flags/1x1/sj.svg); +} +.flag-icon-sk { + background-image: url(../flags/4x3/sk.svg); +} +.flag-icon-sk.flag-icon-squared { + background-image: url(../flags/1x1/sk.svg); +} +.flag-icon-sl { + background-image: url(../flags/4x3/sl.svg); +} +.flag-icon-sl.flag-icon-squared { + background-image: url(../flags/1x1/sl.svg); +} +.flag-icon-sm { + background-image: url(../flags/4x3/sm.svg); +} +.flag-icon-sm.flag-icon-squared { + background-image: url(../flags/1x1/sm.svg); +} +.flag-icon-sn { + background-image: url(../flags/4x3/sn.svg); +} +.flag-icon-sn.flag-icon-squared { + background-image: url(../flags/1x1/sn.svg); +} +.flag-icon-so { + background-image: url(../flags/4x3/so.svg); +} +.flag-icon-so.flag-icon-squared { + background-image: url(../flags/1x1/so.svg); +} +.flag-icon-sr { + background-image: url(../flags/4x3/sr.svg); +} +.flag-icon-sr.flag-icon-squared { + background-image: url(../flags/1x1/sr.svg); +} +.flag-icon-ss { + background-image: url(../flags/4x3/ss.svg); +} +.flag-icon-ss.flag-icon-squared { + background-image: url(../flags/1x1/ss.svg); +} +.flag-icon-st { + background-image: url(../flags/4x3/st.svg); +} +.flag-icon-st.flag-icon-squared { + background-image: url(../flags/1x1/st.svg); +} +.flag-icon-sv { + background-image: url(../flags/4x3/sv.svg); +} +.flag-icon-sv.flag-icon-squared { + background-image: url(../flags/1x1/sv.svg); +} +.flag-icon-sx { + background-image: url(../flags/4x3/sx.svg); +} +.flag-icon-sx.flag-icon-squared { + background-image: url(../flags/1x1/sx.svg); +} +.flag-icon-sy { + background-image: url(../flags/4x3/sy.svg); +} +.flag-icon-sy.flag-icon-squared { + background-image: url(../flags/1x1/sy.svg); +} +.flag-icon-sz { + background-image: url(../flags/4x3/sz.svg); +} +.flag-icon-sz.flag-icon-squared { + background-image: url(../flags/1x1/sz.svg); +} +.flag-icon-tc { + background-image: url(../flags/4x3/tc.svg); +} +.flag-icon-tc.flag-icon-squared { + background-image: url(../flags/1x1/tc.svg); +} +.flag-icon-td { + background-image: url(../flags/4x3/td.svg); +} +.flag-icon-td.flag-icon-squared { + background-image: url(../flags/1x1/td.svg); +} +.flag-icon-tf { + background-image: url(../flags/4x3/tf.svg); +} +.flag-icon-tf.flag-icon-squared { + background-image: url(../flags/1x1/tf.svg); +} +.flag-icon-tg { + background-image: url(../flags/4x3/tg.svg); +} +.flag-icon-tg.flag-icon-squared { + background-image: url(../flags/1x1/tg.svg); +} +.flag-icon-th { + background-image: url(../flags/4x3/th.svg); +} +.flag-icon-th.flag-icon-squared { + background-image: url(../flags/1x1/th.svg); +} +.flag-icon-tj { + background-image: url(../flags/4x3/tj.svg); +} +.flag-icon-tj.flag-icon-squared { + background-image: url(../flags/1x1/tj.svg); +} +.flag-icon-tk { + background-image: url(../flags/4x3/tk.svg); +} +.flag-icon-tk.flag-icon-squared { + background-image: url(../flags/1x1/tk.svg); +} +.flag-icon-tl { + background-image: url(../flags/4x3/tl.svg); +} +.flag-icon-tl.flag-icon-squared { + background-image: url(../flags/1x1/tl.svg); +} +.flag-icon-tm { + background-image: url(../flags/4x3/tm.svg); +} +.flag-icon-tm.flag-icon-squared { + background-image: url(../flags/1x1/tm.svg); +} +.flag-icon-tn { + background-image: url(../flags/4x3/tn.svg); +} +.flag-icon-tn.flag-icon-squared { + background-image: url(../flags/1x1/tn.svg); +} +.flag-icon-to { + background-image: url(../flags/4x3/to.svg); +} +.flag-icon-to.flag-icon-squared { + background-image: url(../flags/1x1/to.svg); +} +.flag-icon-tr { + background-image: url(../flags/4x3/tr.svg); +} +.flag-icon-tr.flag-icon-squared { + background-image: url(../flags/1x1/tr.svg); +} +.flag-icon-tt { + background-image: url(../flags/4x3/tt.svg); +} +.flag-icon-tt.flag-icon-squared { + background-image: url(../flags/1x1/tt.svg); +} +.flag-icon-tv { + background-image: url(../flags/4x3/tv.svg); +} +.flag-icon-tv.flag-icon-squared { + background-image: url(../flags/1x1/tv.svg); +} +.flag-icon-tw { + background-image: url(../flags/4x3/tw.svg); +} +.flag-icon-tw.flag-icon-squared { + background-image: url(../flags/1x1/tw.svg); +} +.flag-icon-tz { + background-image: url(../flags/4x3/tz.svg); +} +.flag-icon-tz.flag-icon-squared { + background-image: url(../flags/1x1/tz.svg); +} +.flag-icon-ua { + background-image: url(../flags/4x3/ua.svg); +} +.flag-icon-ua.flag-icon-squared { + background-image: url(../flags/1x1/ua.svg); +} +.flag-icon-ug { + background-image: url(../flags/4x3/ug.svg); +} +.flag-icon-ug.flag-icon-squared { + background-image: url(../flags/1x1/ug.svg); +} +.flag-icon-um { + background-image: url(../flags/4x3/um.svg); +} +.flag-icon-um.flag-icon-squared { + background-image: url(../flags/1x1/um.svg); +} +.flag-icon-us { + background-image: url(../flags/4x3/us.svg); +} +.flag-icon-us.flag-icon-squared { + background-image: url(../flags/1x1/us.svg); +} +.flag-icon-uy { + background-image: url(../flags/4x3/uy.svg); +} +.flag-icon-uy.flag-icon-squared { + background-image: url(../flags/1x1/uy.svg); +} +.flag-icon-uz { + background-image: url(../flags/4x3/uz.svg); +} +.flag-icon-uz.flag-icon-squared { + background-image: url(../flags/1x1/uz.svg); +} +.flag-icon-va { + background-image: url(../flags/4x3/va.svg); +} +.flag-icon-va.flag-icon-squared { + background-image: url(../flags/1x1/va.svg); +} +.flag-icon-vc { + background-image: url(../flags/4x3/vc.svg); +} +.flag-icon-vc.flag-icon-squared { + background-image: url(../flags/1x1/vc.svg); +} +.flag-icon-ve { + background-image: url(../flags/4x3/ve.svg); +} +.flag-icon-ve.flag-icon-squared { + background-image: url(../flags/1x1/ve.svg); +} +.flag-icon-vg { + background-image: url(../flags/4x3/vg.svg); +} +.flag-icon-vg.flag-icon-squared { + background-image: url(../flags/1x1/vg.svg); +} +.flag-icon-vi { + background-image: url(../flags/4x3/vi.svg); +} +.flag-icon-vi.flag-icon-squared { + background-image: url(../flags/1x1/vi.svg); +} +.flag-icon-vn { + background-image: url(../flags/4x3/vn.svg); +} +.flag-icon-vn.flag-icon-squared { + background-image: url(../flags/1x1/vn.svg); +} +.flag-icon-vu { + background-image: url(../flags/4x3/vu.svg); +} +.flag-icon-vu.flag-icon-squared { + background-image: url(../flags/1x1/vu.svg); +} +.flag-icon-wf { + background-image: url(../flags/4x3/wf.svg); +} +.flag-icon-wf.flag-icon-squared { + background-image: url(../flags/1x1/wf.svg); +} +.flag-icon-ws { + background-image: url(../flags/4x3/ws.svg); +} +.flag-icon-ws.flag-icon-squared { + background-image: url(../flags/1x1/ws.svg); +} +.flag-icon-ye { + background-image: url(../flags/4x3/ye.svg); +} +.flag-icon-ye.flag-icon-squared { + background-image: url(../flags/1x1/ye.svg); +} +.flag-icon-yt { + background-image: url(../flags/4x3/yt.svg); +} +.flag-icon-yt.flag-icon-squared { + background-image: url(../flags/1x1/yt.svg); +} +.flag-icon-za { + background-image: url(../flags/4x3/za.svg); +} +.flag-icon-za.flag-icon-squared { + background-image: url(../flags/1x1/za.svg); +} +.flag-icon-zm { + background-image: url(../flags/4x3/zm.svg); +} +.flag-icon-zm.flag-icon-squared { + background-image: url(../flags/1x1/zm.svg); +} +.flag-icon-zw { + background-image: url(../flags/4x3/zw.svg); +} +.flag-icon-zw.flag-icon-squared { + background-image: url(../flags/1x1/zw.svg); +} +.flag-icon-es-ca { + background-image: url(../flags/4x3/es-ca.svg); +} +.flag-icon-es-ca.flag-icon-squared { + background-image: url(../flags/1x1/es-ca.svg); +} +.flag-icon-es-ga { + background-image: url(../flags/4x3/es-ga.svg); +} +.flag-icon-es-ga.flag-icon-squared { + background-image: url(../flags/1x1/es-ga.svg); +} +.flag-icon-eu { + background-image: url(../flags/4x3/eu.svg); +} +.flag-icon-eu.flag-icon-squared { + background-image: url(../flags/1x1/eu.svg); +} +.flag-icon-gb-eng { + background-image: url(../flags/4x3/gb-eng.svg); +} +.flag-icon-gb-eng.flag-icon-squared { + background-image: url(../flags/1x1/gb-eng.svg); +} +.flag-icon-gb-nir { + background-image: url(../flags/4x3/gb-nir.svg); +} +.flag-icon-gb-nir.flag-icon-squared { + background-image: url(../flags/1x1/gb-nir.svg); +} +.flag-icon-gb-sct { + background-image: url(../flags/4x3/gb-sct.svg); +} +.flag-icon-gb-sct.flag-icon-squared { + background-image: url(../flags/1x1/gb-sct.svg); +} +.flag-icon-gb-wls { + background-image: url(../flags/4x3/gb-wls.svg); +} +.flag-icon-gb-wls.flag-icon-squared { + background-image: url(../flags/1x1/gb-wls.svg); +} +.flag-icon-un { + background-image: url(../flags/4x3/un.svg); +} +.flag-icon-un.flag-icon-squared { + background-image: url(../flags/1x1/un.svg); +} +.flag-icon-xk { + background-image: url(../flags/4x3/xk.svg); +} +.flag-icon-xk.flag-icon-squared { + background-image: url(../flags/1x1/xk.svg); +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.min.css b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.min.css new file mode 100644 index 00000000000..3d049b39537 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/css/flag-icon.min.css @@ -0,0 +1 @@ +.flag-icon-background{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat;position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:'\00a0'}.flag-icon.flag-icon-squared{width:1em}.flag-icon-ad{background-image:url(../flags/4x3/ad.svg)}.flag-icon-ad.flag-icon-squared{background-image:url(../flags/1x1/ad.svg)}.flag-icon-ae{background-image:url(../flags/4x3/ae.svg)}.flag-icon-ae.flag-icon-squared{background-image:url(../flags/1x1/ae.svg)}.flag-icon-af{background-image:url(../flags/4x3/af.svg)}.flag-icon-af.flag-icon-squared{background-image:url(../flags/1x1/af.svg)}.flag-icon-ag{background-image:url(../flags/4x3/ag.svg)}.flag-icon-ag.flag-icon-squared{background-image:url(../flags/1x1/ag.svg)}.flag-icon-ai{background-image:url(../flags/4x3/ai.svg)}.flag-icon-ai.flag-icon-squared{background-image:url(../flags/1x1/ai.svg)}.flag-icon-al{background-image:url(../flags/4x3/al.svg)}.flag-icon-al.flag-icon-squared{background-image:url(../flags/1x1/al.svg)}.flag-icon-am{background-image:url(../flags/4x3/am.svg)}.flag-icon-am.flag-icon-squared{background-image:url(../flags/1x1/am.svg)}.flag-icon-ao{background-image:url(../flags/4x3/ao.svg)}.flag-icon-ao.flag-icon-squared{background-image:url(../flags/1x1/ao.svg)}.flag-icon-aq{background-image:url(../flags/4x3/aq.svg)}.flag-icon-aq.flag-icon-squared{background-image:url(../flags/1x1/aq.svg)}.flag-icon-ar{background-image:url(../flags/4x3/ar.svg)}.flag-icon-ar.flag-icon-squared{background-image:url(../flags/1x1/ar.svg)}.flag-icon-as{background-image:url(../flags/4x3/as.svg)}.flag-icon-as.flag-icon-squared{background-image:url(../flags/1x1/as.svg)}.flag-icon-at{background-image:url(../flags/4x3/at.svg)}.flag-icon-at.flag-icon-squared{background-image:url(../flags/1x1/at.svg)}.flag-icon-au{background-image:url(../flags/4x3/au.svg)}.flag-icon-au.flag-icon-squared{background-image:url(../flags/1x1/au.svg)}.flag-icon-aw{background-image:url(../flags/4x3/aw.svg)}.flag-icon-aw.flag-icon-squared{background-image:url(../flags/1x1/aw.svg)}.flag-icon-ax{background-image:url(../flags/4x3/ax.svg)}.flag-icon-ax.flag-icon-squared{background-image:url(../flags/1x1/ax.svg)}.flag-icon-az{background-image:url(../flags/4x3/az.svg)}.flag-icon-az.flag-icon-squared{background-image:url(../flags/1x1/az.svg)}.flag-icon-ba{background-image:url(../flags/4x3/ba.svg)}.flag-icon-ba.flag-icon-squared{background-image:url(../flags/1x1/ba.svg)}.flag-icon-bb{background-image:url(../flags/4x3/bb.svg)}.flag-icon-bb.flag-icon-squared{background-image:url(../flags/1x1/bb.svg)}.flag-icon-bd{background-image:url(../flags/4x3/bd.svg)}.flag-icon-bd.flag-icon-squared{background-image:url(../flags/1x1/bd.svg)}.flag-icon-be{background-image:url(../flags/4x3/be.svg)}.flag-icon-be.flag-icon-squared{background-image:url(../flags/1x1/be.svg)}.flag-icon-bf{background-image:url(../flags/4x3/bf.svg)}.flag-icon-bf.flag-icon-squared{background-image:url(../flags/1x1/bf.svg)}.flag-icon-bg{background-image:url(../flags/4x3/bg.svg)}.flag-icon-bg.flag-icon-squared{background-image:url(../flags/1x1/bg.svg)}.flag-icon-bh{background-image:url(../flags/4x3/bh.svg)}.flag-icon-bh.flag-icon-squared{background-image:url(../flags/1x1/bh.svg)}.flag-icon-bi{background-image:url(../flags/4x3/bi.svg)}.flag-icon-bi.flag-icon-squared{background-image:url(../flags/1x1/bi.svg)}.flag-icon-bj{background-image:url(../flags/4x3/bj.svg)}.flag-icon-bj.flag-icon-squared{background-image:url(../flags/1x1/bj.svg)}.flag-icon-bl{background-image:url(../flags/4x3/bl.svg)}.flag-icon-bl.flag-icon-squared{background-image:url(../flags/1x1/bl.svg)}.flag-icon-bm{background-image:url(../flags/4x3/bm.svg)}.flag-icon-bm.flag-icon-squared{background-image:url(../flags/1x1/bm.svg)}.flag-icon-bn{background-image:url(../flags/4x3/bn.svg)}.flag-icon-bn.flag-icon-squared{background-image:url(../flags/1x1/bn.svg)}.flag-icon-bo{background-image:url(../flags/4x3/bo.svg)}.flag-icon-bo.flag-icon-squared{background-image:url(../flags/1x1/bo.svg)}.flag-icon-bq{background-image:url(../flags/4x3/bq.svg)}.flag-icon-bq.flag-icon-squared{background-image:url(../flags/1x1/bq.svg)}.flag-icon-br{background-image:url(../flags/4x3/br.svg)}.flag-icon-br.flag-icon-squared{background-image:url(../flags/1x1/br.svg)}.flag-icon-bs{background-image:url(../flags/4x3/bs.svg)}.flag-icon-bs.flag-icon-squared{background-image:url(../flags/1x1/bs.svg)}.flag-icon-bt{background-image:url(../flags/4x3/bt.svg)}.flag-icon-bt.flag-icon-squared{background-image:url(../flags/1x1/bt.svg)}.flag-icon-bv{background-image:url(../flags/4x3/bv.svg)}.flag-icon-bv.flag-icon-squared{background-image:url(../flags/1x1/bv.svg)}.flag-icon-bw{background-image:url(../flags/4x3/bw.svg)}.flag-icon-bw.flag-icon-squared{background-image:url(../flags/1x1/bw.svg)}.flag-icon-by{background-image:url(../flags/4x3/by.svg)}.flag-icon-by.flag-icon-squared{background-image:url(../flags/1x1/by.svg)}.flag-icon-bz{background-image:url(../flags/4x3/bz.svg)}.flag-icon-bz.flag-icon-squared{background-image:url(../flags/1x1/bz.svg)}.flag-icon-ca{background-image:url(../flags/4x3/ca.svg)}.flag-icon-ca.flag-icon-squared{background-image:url(../flags/1x1/ca.svg)}.flag-icon-cc{background-image:url(../flags/4x3/cc.svg)}.flag-icon-cc.flag-icon-squared{background-image:url(../flags/1x1/cc.svg)}.flag-icon-cd{background-image:url(../flags/4x3/cd.svg)}.flag-icon-cd.flag-icon-squared{background-image:url(../flags/1x1/cd.svg)}.flag-icon-cf{background-image:url(../flags/4x3/cf.svg)}.flag-icon-cf.flag-icon-squared{background-image:url(../flags/1x1/cf.svg)}.flag-icon-cg{background-image:url(../flags/4x3/cg.svg)}.flag-icon-cg.flag-icon-squared{background-image:url(../flags/1x1/cg.svg)}.flag-icon-ch{background-image:url(../flags/4x3/ch.svg)}.flag-icon-ch.flag-icon-squared{background-image:url(../flags/1x1/ch.svg)}.flag-icon-ci{background-image:url(../flags/4x3/ci.svg)}.flag-icon-ci.flag-icon-squared{background-image:url(../flags/1x1/ci.svg)}.flag-icon-ck{background-image:url(../flags/4x3/ck.svg)}.flag-icon-ck.flag-icon-squared{background-image:url(../flags/1x1/ck.svg)}.flag-icon-cl{background-image:url(../flags/4x3/cl.svg)}.flag-icon-cl.flag-icon-squared{background-image:url(../flags/1x1/cl.svg)}.flag-icon-cm{background-image:url(../flags/4x3/cm.svg)}.flag-icon-cm.flag-icon-squared{background-image:url(../flags/1x1/cm.svg)}.flag-icon-cn{background-image:url(../flags/4x3/cn.svg)}.flag-icon-cn.flag-icon-squared{background-image:url(../flags/1x1/cn.svg)}.flag-icon-co{background-image:url(../flags/4x3/co.svg)}.flag-icon-co.flag-icon-squared{background-image:url(../flags/1x1/co.svg)}.flag-icon-cr{background-image:url(../flags/4x3/cr.svg)}.flag-icon-cr.flag-icon-squared{background-image:url(../flags/1x1/cr.svg)}.flag-icon-cu{background-image:url(../flags/4x3/cu.svg)}.flag-icon-cu.flag-icon-squared{background-image:url(../flags/1x1/cu.svg)}.flag-icon-cv{background-image:url(../flags/4x3/cv.svg)}.flag-icon-cv.flag-icon-squared{background-image:url(../flags/1x1/cv.svg)}.flag-icon-cw{background-image:url(../flags/4x3/cw.svg)}.flag-icon-cw.flag-icon-squared{background-image:url(../flags/1x1/cw.svg)}.flag-icon-cx{background-image:url(../flags/4x3/cx.svg)}.flag-icon-cx.flag-icon-squared{background-image:url(../flags/1x1/cx.svg)}.flag-icon-cy{background-image:url(../flags/4x3/cy.svg)}.flag-icon-cy.flag-icon-squared{background-image:url(../flags/1x1/cy.svg)}.flag-icon-cz{background-image:url(../flags/4x3/cz.svg)}.flag-icon-cz.flag-icon-squared{background-image:url(../flags/1x1/cz.svg)}.flag-icon-de{background-image:url(../flags/4x3/de.svg)}.flag-icon-de.flag-icon-squared{background-image:url(../flags/1x1/de.svg)}.flag-icon-dj{background-image:url(../flags/4x3/dj.svg)}.flag-icon-dj.flag-icon-squared{background-image:url(../flags/1x1/dj.svg)}.flag-icon-dk{background-image:url(../flags/4x3/dk.svg)}.flag-icon-dk.flag-icon-squared{background-image:url(../flags/1x1/dk.svg)}.flag-icon-dm{background-image:url(../flags/4x3/dm.svg)}.flag-icon-dm.flag-icon-squared{background-image:url(../flags/1x1/dm.svg)}.flag-icon-do{background-image:url(../flags/4x3/do.svg)}.flag-icon-do.flag-icon-squared{background-image:url(../flags/1x1/do.svg)}.flag-icon-dz{background-image:url(../flags/4x3/dz.svg)}.flag-icon-dz.flag-icon-squared{background-image:url(../flags/1x1/dz.svg)}.flag-icon-ec{background-image:url(../flags/4x3/ec.svg)}.flag-icon-ec.flag-icon-squared{background-image:url(../flags/1x1/ec.svg)}.flag-icon-ee{background-image:url(../flags/4x3/ee.svg)}.flag-icon-ee.flag-icon-squared{background-image:url(../flags/1x1/ee.svg)}.flag-icon-eg{background-image:url(../flags/4x3/eg.svg)}.flag-icon-eg.flag-icon-squared{background-image:url(../flags/1x1/eg.svg)}.flag-icon-eh{background-image:url(../flags/4x3/eh.svg)}.flag-icon-eh.flag-icon-squared{background-image:url(../flags/1x1/eh.svg)}.flag-icon-er{background-image:url(../flags/4x3/er.svg)}.flag-icon-er.flag-icon-squared{background-image:url(../flags/1x1/er.svg)}.flag-icon-es{background-image:url(../flags/4x3/es.svg)}.flag-icon-es.flag-icon-squared{background-image:url(../flags/1x1/es.svg)}.flag-icon-et{background-image:url(../flags/4x3/et.svg)}.flag-icon-et.flag-icon-squared{background-image:url(../flags/1x1/et.svg)}.flag-icon-fi{background-image:url(../flags/4x3/fi.svg)}.flag-icon-fi.flag-icon-squared{background-image:url(../flags/1x1/fi.svg)}.flag-icon-fj{background-image:url(../flags/4x3/fj.svg)}.flag-icon-fj.flag-icon-squared{background-image:url(../flags/1x1/fj.svg)}.flag-icon-fk{background-image:url(../flags/4x3/fk.svg)}.flag-icon-fk.flag-icon-squared{background-image:url(../flags/1x1/fk.svg)}.flag-icon-fm{background-image:url(../flags/4x3/fm.svg)}.flag-icon-fm.flag-icon-squared{background-image:url(../flags/1x1/fm.svg)}.flag-icon-fo{background-image:url(../flags/4x3/fo.svg)}.flag-icon-fo.flag-icon-squared{background-image:url(../flags/1x1/fo.svg)}.flag-icon-fr{background-image:url(../flags/4x3/fr.svg)}.flag-icon-fr.flag-icon-squared{background-image:url(../flags/1x1/fr.svg)}.flag-icon-ga{background-image:url(../flags/4x3/ga.svg)}.flag-icon-ga.flag-icon-squared{background-image:url(../flags/1x1/ga.svg)}.flag-icon-gb{background-image:url(../flags/4x3/gb.svg)}.flag-icon-gb.flag-icon-squared{background-image:url(../flags/1x1/gb.svg)}.flag-icon-gd{background-image:url(../flags/4x3/gd.svg)}.flag-icon-gd.flag-icon-squared{background-image:url(../flags/1x1/gd.svg)}.flag-icon-ge{background-image:url(../flags/4x3/ge.svg)}.flag-icon-ge.flag-icon-squared{background-image:url(../flags/1x1/ge.svg)}.flag-icon-gf{background-image:url(../flags/4x3/gf.svg)}.flag-icon-gf.flag-icon-squared{background-image:url(../flags/1x1/gf.svg)}.flag-icon-gg{background-image:url(../flags/4x3/gg.svg)}.flag-icon-gg.flag-icon-squared{background-image:url(../flags/1x1/gg.svg)}.flag-icon-gh{background-image:url(../flags/4x3/gh.svg)}.flag-icon-gh.flag-icon-squared{background-image:url(../flags/1x1/gh.svg)}.flag-icon-gi{background-image:url(../flags/4x3/gi.svg)}.flag-icon-gi.flag-icon-squared{background-image:url(../flags/1x1/gi.svg)}.flag-icon-gl{background-image:url(../flags/4x3/gl.svg)}.flag-icon-gl.flag-icon-squared{background-image:url(../flags/1x1/gl.svg)}.flag-icon-gm{background-image:url(../flags/4x3/gm.svg)}.flag-icon-gm.flag-icon-squared{background-image:url(../flags/1x1/gm.svg)}.flag-icon-gn{background-image:url(../flags/4x3/gn.svg)}.flag-icon-gn.flag-icon-squared{background-image:url(../flags/1x1/gn.svg)}.flag-icon-gp{background-image:url(../flags/4x3/gp.svg)}.flag-icon-gp.flag-icon-squared{background-image:url(../flags/1x1/gp.svg)}.flag-icon-gq{background-image:url(../flags/4x3/gq.svg)}.flag-icon-gq.flag-icon-squared{background-image:url(../flags/1x1/gq.svg)}.flag-icon-gr{background-image:url(../flags/4x3/gr.svg)}.flag-icon-gr.flag-icon-squared{background-image:url(../flags/1x1/gr.svg)}.flag-icon-gs{background-image:url(../flags/4x3/gs.svg)}.flag-icon-gs.flag-icon-squared{background-image:url(../flags/1x1/gs.svg)}.flag-icon-gt{background-image:url(../flags/4x3/gt.svg)}.flag-icon-gt.flag-icon-squared{background-image:url(../flags/1x1/gt.svg)}.flag-icon-gu{background-image:url(../flags/4x3/gu.svg)}.flag-icon-gu.flag-icon-squared{background-image:url(../flags/1x1/gu.svg)}.flag-icon-gw{background-image:url(../flags/4x3/gw.svg)}.flag-icon-gw.flag-icon-squared{background-image:url(../flags/1x1/gw.svg)}.flag-icon-gy{background-image:url(../flags/4x3/gy.svg)}.flag-icon-gy.flag-icon-squared{background-image:url(../flags/1x1/gy.svg)}.flag-icon-hk{background-image:url(../flags/4x3/hk.svg)}.flag-icon-hk.flag-icon-squared{background-image:url(../flags/1x1/hk.svg)}.flag-icon-hm{background-image:url(../flags/4x3/hm.svg)}.flag-icon-hm.flag-icon-squared{background-image:url(../flags/1x1/hm.svg)}.flag-icon-hn{background-image:url(../flags/4x3/hn.svg)}.flag-icon-hn.flag-icon-squared{background-image:url(../flags/1x1/hn.svg)}.flag-icon-hr{background-image:url(../flags/4x3/hr.svg)}.flag-icon-hr.flag-icon-squared{background-image:url(../flags/1x1/hr.svg)}.flag-icon-ht{background-image:url(../flags/4x3/ht.svg)}.flag-icon-ht.flag-icon-squared{background-image:url(../flags/1x1/ht.svg)}.flag-icon-hu{background-image:url(../flags/4x3/hu.svg)}.flag-icon-hu.flag-icon-squared{background-image:url(../flags/1x1/hu.svg)}.flag-icon-id{background-image:url(../flags/4x3/id.svg)}.flag-icon-id.flag-icon-squared{background-image:url(../flags/1x1/id.svg)}.flag-icon-ie{background-image:url(../flags/4x3/ie.svg)}.flag-icon-ie.flag-icon-squared{background-image:url(../flags/1x1/ie.svg)}.flag-icon-il{background-image:url(../flags/4x3/il.svg)}.flag-icon-il.flag-icon-squared{background-image:url(../flags/1x1/il.svg)}.flag-icon-im{background-image:url(../flags/4x3/im.svg)}.flag-icon-im.flag-icon-squared{background-image:url(../flags/1x1/im.svg)}.flag-icon-in{background-image:url(../flags/4x3/in.svg)}.flag-icon-in.flag-icon-squared{background-image:url(../flags/1x1/in.svg)}.flag-icon-io{background-image:url(../flags/4x3/io.svg)}.flag-icon-io.flag-icon-squared{background-image:url(../flags/1x1/io.svg)}.flag-icon-iq{background-image:url(../flags/4x3/iq.svg)}.flag-icon-iq.flag-icon-squared{background-image:url(../flags/1x1/iq.svg)}.flag-icon-ir{background-image:url(../flags/4x3/ir.svg)}.flag-icon-ir.flag-icon-squared{background-image:url(../flags/1x1/ir.svg)}.flag-icon-is{background-image:url(../flags/4x3/is.svg)}.flag-icon-is.flag-icon-squared{background-image:url(../flags/1x1/is.svg)}.flag-icon-it{background-image:url(../flags/4x3/it.svg)}.flag-icon-it.flag-icon-squared{background-image:url(../flags/1x1/it.svg)}.flag-icon-je{background-image:url(../flags/4x3/je.svg)}.flag-icon-je.flag-icon-squared{background-image:url(../flags/1x1/je.svg)}.flag-icon-jm{background-image:url(../flags/4x3/jm.svg)}.flag-icon-jm.flag-icon-squared{background-image:url(../flags/1x1/jm.svg)}.flag-icon-jo{background-image:url(../flags/4x3/jo.svg)}.flag-icon-jo.flag-icon-squared{background-image:url(../flags/1x1/jo.svg)}.flag-icon-jp{background-image:url(../flags/4x3/jp.svg)}.flag-icon-jp.flag-icon-squared{background-image:url(../flags/1x1/jp.svg)}.flag-icon-ke{background-image:url(../flags/4x3/ke.svg)}.flag-icon-ke.flag-icon-squared{background-image:url(../flags/1x1/ke.svg)}.flag-icon-kg{background-image:url(../flags/4x3/kg.svg)}.flag-icon-kg.flag-icon-squared{background-image:url(../flags/1x1/kg.svg)}.flag-icon-kh{background-image:url(../flags/4x3/kh.svg)}.flag-icon-kh.flag-icon-squared{background-image:url(../flags/1x1/kh.svg)}.flag-icon-ki{background-image:url(../flags/4x3/ki.svg)}.flag-icon-ki.flag-icon-squared{background-image:url(../flags/1x1/ki.svg)}.flag-icon-km{background-image:url(../flags/4x3/km.svg)}.flag-icon-km.flag-icon-squared{background-image:url(../flags/1x1/km.svg)}.flag-icon-kn{background-image:url(../flags/4x3/kn.svg)}.flag-icon-kn.flag-icon-squared{background-image:url(../flags/1x1/kn.svg)}.flag-icon-kp{background-image:url(../flags/4x3/kp.svg)}.flag-icon-kp.flag-icon-squared{background-image:url(../flags/1x1/kp.svg)}.flag-icon-kr{background-image:url(../flags/4x3/kr.svg)}.flag-icon-kr.flag-icon-squared{background-image:url(../flags/1x1/kr.svg)}.flag-icon-kw{background-image:url(../flags/4x3/kw.svg)}.flag-icon-kw.flag-icon-squared{background-image:url(../flags/1x1/kw.svg)}.flag-icon-ky{background-image:url(../flags/4x3/ky.svg)}.flag-icon-ky.flag-icon-squared{background-image:url(../flags/1x1/ky.svg)}.flag-icon-kz{background-image:url(../flags/4x3/kz.svg)}.flag-icon-kz.flag-icon-squared{background-image:url(../flags/1x1/kz.svg)}.flag-icon-la{background-image:url(../flags/4x3/la.svg)}.flag-icon-la.flag-icon-squared{background-image:url(../flags/1x1/la.svg)}.flag-icon-lb{background-image:url(../flags/4x3/lb.svg)}.flag-icon-lb.flag-icon-squared{background-image:url(../flags/1x1/lb.svg)}.flag-icon-lc{background-image:url(../flags/4x3/lc.svg)}.flag-icon-lc.flag-icon-squared{background-image:url(../flags/1x1/lc.svg)}.flag-icon-li{background-image:url(../flags/4x3/li.svg)}.flag-icon-li.flag-icon-squared{background-image:url(../flags/1x1/li.svg)}.flag-icon-lk{background-image:url(../flags/4x3/lk.svg)}.flag-icon-lk.flag-icon-squared{background-image:url(../flags/1x1/lk.svg)}.flag-icon-lr{background-image:url(../flags/4x3/lr.svg)}.flag-icon-lr.flag-icon-squared{background-image:url(../flags/1x1/lr.svg)}.flag-icon-ls{background-image:url(../flags/4x3/ls.svg)}.flag-icon-ls.flag-icon-squared{background-image:url(../flags/1x1/ls.svg)}.flag-icon-lt{background-image:url(../flags/4x3/lt.svg)}.flag-icon-lt.flag-icon-squared{background-image:url(../flags/1x1/lt.svg)}.flag-icon-lu{background-image:url(../flags/4x3/lu.svg)}.flag-icon-lu.flag-icon-squared{background-image:url(../flags/1x1/lu.svg)}.flag-icon-lv{background-image:url(../flags/4x3/lv.svg)}.flag-icon-lv.flag-icon-squared{background-image:url(../flags/1x1/lv.svg)}.flag-icon-ly{background-image:url(../flags/4x3/ly.svg)}.flag-icon-ly.flag-icon-squared{background-image:url(../flags/1x1/ly.svg)}.flag-icon-ma{background-image:url(../flags/4x3/ma.svg)}.flag-icon-ma.flag-icon-squared{background-image:url(../flags/1x1/ma.svg)}.flag-icon-mc{background-image:url(../flags/4x3/mc.svg)}.flag-icon-mc.flag-icon-squared{background-image:url(../flags/1x1/mc.svg)}.flag-icon-md{background-image:url(../flags/4x3/md.svg)}.flag-icon-md.flag-icon-squared{background-image:url(../flags/1x1/md.svg)}.flag-icon-me{background-image:url(../flags/4x3/me.svg)}.flag-icon-me.flag-icon-squared{background-image:url(../flags/1x1/me.svg)}.flag-icon-mf{background-image:url(../flags/4x3/mf.svg)}.flag-icon-mf.flag-icon-squared{background-image:url(../flags/1x1/mf.svg)}.flag-icon-mg{background-image:url(../flags/4x3/mg.svg)}.flag-icon-mg.flag-icon-squared{background-image:url(../flags/1x1/mg.svg)}.flag-icon-mh{background-image:url(../flags/4x3/mh.svg)}.flag-icon-mh.flag-icon-squared{background-image:url(../flags/1x1/mh.svg)}.flag-icon-mk{background-image:url(../flags/4x3/mk.svg)}.flag-icon-mk.flag-icon-squared{background-image:url(../flags/1x1/mk.svg)}.flag-icon-ml{background-image:url(../flags/4x3/ml.svg)}.flag-icon-ml.flag-icon-squared{background-image:url(../flags/1x1/ml.svg)}.flag-icon-mm{background-image:url(../flags/4x3/mm.svg)}.flag-icon-mm.flag-icon-squared{background-image:url(../flags/1x1/mm.svg)}.flag-icon-mn{background-image:url(../flags/4x3/mn.svg)}.flag-icon-mn.flag-icon-squared{background-image:url(../flags/1x1/mn.svg)}.flag-icon-mo{background-image:url(../flags/4x3/mo.svg)}.flag-icon-mo.flag-icon-squared{background-image:url(../flags/1x1/mo.svg)}.flag-icon-mp{background-image:url(../flags/4x3/mp.svg)}.flag-icon-mp.flag-icon-squared{background-image:url(../flags/1x1/mp.svg)}.flag-icon-mq{background-image:url(../flags/4x3/mq.svg)}.flag-icon-mq.flag-icon-squared{background-image:url(../flags/1x1/mq.svg)}.flag-icon-mr{background-image:url(../flags/4x3/mr.svg)}.flag-icon-mr.flag-icon-squared{background-image:url(../flags/1x1/mr.svg)}.flag-icon-ms{background-image:url(../flags/4x3/ms.svg)}.flag-icon-ms.flag-icon-squared{background-image:url(../flags/1x1/ms.svg)}.flag-icon-mt{background-image:url(../flags/4x3/mt.svg)}.flag-icon-mt.flag-icon-squared{background-image:url(../flags/1x1/mt.svg)}.flag-icon-mu{background-image:url(../flags/4x3/mu.svg)}.flag-icon-mu.flag-icon-squared{background-image:url(../flags/1x1/mu.svg)}.flag-icon-mv{background-image:url(../flags/4x3/mv.svg)}.flag-icon-mv.flag-icon-squared{background-image:url(../flags/1x1/mv.svg)}.flag-icon-mw{background-image:url(../flags/4x3/mw.svg)}.flag-icon-mw.flag-icon-squared{background-image:url(../flags/1x1/mw.svg)}.flag-icon-mx{background-image:url(../flags/4x3/mx.svg)}.flag-icon-mx.flag-icon-squared{background-image:url(../flags/1x1/mx.svg)}.flag-icon-my{background-image:url(../flags/4x3/my.svg)}.flag-icon-my.flag-icon-squared{background-image:url(../flags/1x1/my.svg)}.flag-icon-mz{background-image:url(../flags/4x3/mz.svg)}.flag-icon-mz.flag-icon-squared{background-image:url(../flags/1x1/mz.svg)}.flag-icon-na{background-image:url(../flags/4x3/na.svg)}.flag-icon-na.flag-icon-squared{background-image:url(../flags/1x1/na.svg)}.flag-icon-nc{background-image:url(../flags/4x3/nc.svg)}.flag-icon-nc.flag-icon-squared{background-image:url(../flags/1x1/nc.svg)}.flag-icon-ne{background-image:url(../flags/4x3/ne.svg)}.flag-icon-ne.flag-icon-squared{background-image:url(../flags/1x1/ne.svg)}.flag-icon-nf{background-image:url(../flags/4x3/nf.svg)}.flag-icon-nf.flag-icon-squared{background-image:url(../flags/1x1/nf.svg)}.flag-icon-ng{background-image:url(../flags/4x3/ng.svg)}.flag-icon-ng.flag-icon-squared{background-image:url(../flags/1x1/ng.svg)}.flag-icon-ni{background-image:url(../flags/4x3/ni.svg)}.flag-icon-ni.flag-icon-squared{background-image:url(../flags/1x1/ni.svg)}.flag-icon-nl{background-image:url(../flags/4x3/nl.svg)}.flag-icon-nl.flag-icon-squared{background-image:url(../flags/1x1/nl.svg)}.flag-icon-no{background-image:url(../flags/4x3/no.svg)}.flag-icon-no.flag-icon-squared{background-image:url(../flags/1x1/no.svg)}.flag-icon-np{background-image:url(../flags/4x3/np.svg)}.flag-icon-np.flag-icon-squared{background-image:url(../flags/1x1/np.svg)}.flag-icon-nr{background-image:url(../flags/4x3/nr.svg)}.flag-icon-nr.flag-icon-squared{background-image:url(../flags/1x1/nr.svg)}.flag-icon-nu{background-image:url(../flags/4x3/nu.svg)}.flag-icon-nu.flag-icon-squared{background-image:url(../flags/1x1/nu.svg)}.flag-icon-nz{background-image:url(../flags/4x3/nz.svg)}.flag-icon-nz.flag-icon-squared{background-image:url(../flags/1x1/nz.svg)}.flag-icon-om{background-image:url(../flags/4x3/om.svg)}.flag-icon-om.flag-icon-squared{background-image:url(../flags/1x1/om.svg)}.flag-icon-pa{background-image:url(../flags/4x3/pa.svg)}.flag-icon-pa.flag-icon-squared{background-image:url(../flags/1x1/pa.svg)}.flag-icon-pe{background-image:url(../flags/4x3/pe.svg)}.flag-icon-pe.flag-icon-squared{background-image:url(../flags/1x1/pe.svg)}.flag-icon-pf{background-image:url(../flags/4x3/pf.svg)}.flag-icon-pf.flag-icon-squared{background-image:url(../flags/1x1/pf.svg)}.flag-icon-pg{background-image:url(../flags/4x3/pg.svg)}.flag-icon-pg.flag-icon-squared{background-image:url(../flags/1x1/pg.svg)}.flag-icon-ph{background-image:url(../flags/4x3/ph.svg)}.flag-icon-ph.flag-icon-squared{background-image:url(../flags/1x1/ph.svg)}.flag-icon-pk{background-image:url(../flags/4x3/pk.svg)}.flag-icon-pk.flag-icon-squared{background-image:url(../flags/1x1/pk.svg)}.flag-icon-pl{background-image:url(../flags/4x3/pl.svg)}.flag-icon-pl.flag-icon-squared{background-image:url(../flags/1x1/pl.svg)}.flag-icon-pm{background-image:url(../flags/4x3/pm.svg)}.flag-icon-pm.flag-icon-squared{background-image:url(../flags/1x1/pm.svg)}.flag-icon-pn{background-image:url(../flags/4x3/pn.svg)}.flag-icon-pn.flag-icon-squared{background-image:url(../flags/1x1/pn.svg)}.flag-icon-pr{background-image:url(../flags/4x3/pr.svg)}.flag-icon-pr.flag-icon-squared{background-image:url(../flags/1x1/pr.svg)}.flag-icon-ps{background-image:url(../flags/4x3/ps.svg)}.flag-icon-ps.flag-icon-squared{background-image:url(../flags/1x1/ps.svg)}.flag-icon-pt{background-image:url(../flags/4x3/pt.svg)}.flag-icon-pt.flag-icon-squared{background-image:url(../flags/1x1/pt.svg)}.flag-icon-pw{background-image:url(../flags/4x3/pw.svg)}.flag-icon-pw.flag-icon-squared{background-image:url(../flags/1x1/pw.svg)}.flag-icon-py{background-image:url(../flags/4x3/py.svg)}.flag-icon-py.flag-icon-squared{background-image:url(../flags/1x1/py.svg)}.flag-icon-qa{background-image:url(../flags/4x3/qa.svg)}.flag-icon-qa.flag-icon-squared{background-image:url(../flags/1x1/qa.svg)}.flag-icon-re{background-image:url(../flags/4x3/re.svg)}.flag-icon-re.flag-icon-squared{background-image:url(../flags/1x1/re.svg)}.flag-icon-ro{background-image:url(../flags/4x3/ro.svg)}.flag-icon-ro.flag-icon-squared{background-image:url(../flags/1x1/ro.svg)}.flag-icon-rs{background-image:url(../flags/4x3/rs.svg)}.flag-icon-rs.flag-icon-squared{background-image:url(../flags/1x1/rs.svg)}.flag-icon-ru{background-image:url(../flags/4x3/ru.svg)}.flag-icon-ru.flag-icon-squared{background-image:url(../flags/1x1/ru.svg)}.flag-icon-rw{background-image:url(../flags/4x3/rw.svg)}.flag-icon-rw.flag-icon-squared{background-image:url(../flags/1x1/rw.svg)}.flag-icon-sa{background-image:url(../flags/4x3/sa.svg)}.flag-icon-sa.flag-icon-squared{background-image:url(../flags/1x1/sa.svg)}.flag-icon-sb{background-image:url(../flags/4x3/sb.svg)}.flag-icon-sb.flag-icon-squared{background-image:url(../flags/1x1/sb.svg)}.flag-icon-sc{background-image:url(../flags/4x3/sc.svg)}.flag-icon-sc.flag-icon-squared{background-image:url(../flags/1x1/sc.svg)}.flag-icon-sd{background-image:url(../flags/4x3/sd.svg)}.flag-icon-sd.flag-icon-squared{background-image:url(../flags/1x1/sd.svg)}.flag-icon-se{background-image:url(../flags/4x3/se.svg)}.flag-icon-se.flag-icon-squared{background-image:url(../flags/1x1/se.svg)}.flag-icon-sg{background-image:url(../flags/4x3/sg.svg)}.flag-icon-sg.flag-icon-squared{background-image:url(../flags/1x1/sg.svg)}.flag-icon-sh{background-image:url(../flags/4x3/sh.svg)}.flag-icon-sh.flag-icon-squared{background-image:url(../flags/1x1/sh.svg)}.flag-icon-si{background-image:url(../flags/4x3/si.svg)}.flag-icon-si.flag-icon-squared{background-image:url(../flags/1x1/si.svg)}.flag-icon-sj{background-image:url(../flags/4x3/sj.svg)}.flag-icon-sj.flag-icon-squared{background-image:url(../flags/1x1/sj.svg)}.flag-icon-sk{background-image:url(../flags/4x3/sk.svg)}.flag-icon-sk.flag-icon-squared{background-image:url(../flags/1x1/sk.svg)}.flag-icon-sl{background-image:url(../flags/4x3/sl.svg)}.flag-icon-sl.flag-icon-squared{background-image:url(../flags/1x1/sl.svg)}.flag-icon-sm{background-image:url(../flags/4x3/sm.svg)}.flag-icon-sm.flag-icon-squared{background-image:url(../flags/1x1/sm.svg)}.flag-icon-sn{background-image:url(../flags/4x3/sn.svg)}.flag-icon-sn.flag-icon-squared{background-image:url(../flags/1x1/sn.svg)}.flag-icon-so{background-image:url(../flags/4x3/so.svg)}.flag-icon-so.flag-icon-squared{background-image:url(../flags/1x1/so.svg)}.flag-icon-sr{background-image:url(../flags/4x3/sr.svg)}.flag-icon-sr.flag-icon-squared{background-image:url(../flags/1x1/sr.svg)}.flag-icon-ss{background-image:url(../flags/4x3/ss.svg)}.flag-icon-ss.flag-icon-squared{background-image:url(../flags/1x1/ss.svg)}.flag-icon-st{background-image:url(../flags/4x3/st.svg)}.flag-icon-st.flag-icon-squared{background-image:url(../flags/1x1/st.svg)}.flag-icon-sv{background-image:url(../flags/4x3/sv.svg)}.flag-icon-sv.flag-icon-squared{background-image:url(../flags/1x1/sv.svg)}.flag-icon-sx{background-image:url(../flags/4x3/sx.svg)}.flag-icon-sx.flag-icon-squared{background-image:url(../flags/1x1/sx.svg)}.flag-icon-sy{background-image:url(../flags/4x3/sy.svg)}.flag-icon-sy.flag-icon-squared{background-image:url(../flags/1x1/sy.svg)}.flag-icon-sz{background-image:url(../flags/4x3/sz.svg)}.flag-icon-sz.flag-icon-squared{background-image:url(../flags/1x1/sz.svg)}.flag-icon-tc{background-image:url(../flags/4x3/tc.svg)}.flag-icon-tc.flag-icon-squared{background-image:url(../flags/1x1/tc.svg)}.flag-icon-td{background-image:url(../flags/4x3/td.svg)}.flag-icon-td.flag-icon-squared{background-image:url(../flags/1x1/td.svg)}.flag-icon-tf{background-image:url(../flags/4x3/tf.svg)}.flag-icon-tf.flag-icon-squared{background-image:url(../flags/1x1/tf.svg)}.flag-icon-tg{background-image:url(../flags/4x3/tg.svg)}.flag-icon-tg.flag-icon-squared{background-image:url(../flags/1x1/tg.svg)}.flag-icon-th{background-image:url(../flags/4x3/th.svg)}.flag-icon-th.flag-icon-squared{background-image:url(../flags/1x1/th.svg)}.flag-icon-tj{background-image:url(../flags/4x3/tj.svg)}.flag-icon-tj.flag-icon-squared{background-image:url(../flags/1x1/tj.svg)}.flag-icon-tk{background-image:url(../flags/4x3/tk.svg)}.flag-icon-tk.flag-icon-squared{background-image:url(../flags/1x1/tk.svg)}.flag-icon-tl{background-image:url(../flags/4x3/tl.svg)}.flag-icon-tl.flag-icon-squared{background-image:url(../flags/1x1/tl.svg)}.flag-icon-tm{background-image:url(../flags/4x3/tm.svg)}.flag-icon-tm.flag-icon-squared{background-image:url(../flags/1x1/tm.svg)}.flag-icon-tn{background-image:url(../flags/4x3/tn.svg)}.flag-icon-tn.flag-icon-squared{background-image:url(../flags/1x1/tn.svg)}.flag-icon-to{background-image:url(../flags/4x3/to.svg)}.flag-icon-to.flag-icon-squared{background-image:url(../flags/1x1/to.svg)}.flag-icon-tr{background-image:url(../flags/4x3/tr.svg)}.flag-icon-tr.flag-icon-squared{background-image:url(../flags/1x1/tr.svg)}.flag-icon-tt{background-image:url(../flags/4x3/tt.svg)}.flag-icon-tt.flag-icon-squared{background-image:url(../flags/1x1/tt.svg)}.flag-icon-tv{background-image:url(../flags/4x3/tv.svg)}.flag-icon-tv.flag-icon-squared{background-image:url(../flags/1x1/tv.svg)}.flag-icon-tw{background-image:url(../flags/4x3/tw.svg)}.flag-icon-tw.flag-icon-squared{background-image:url(../flags/1x1/tw.svg)}.flag-icon-tz{background-image:url(../flags/4x3/tz.svg)}.flag-icon-tz.flag-icon-squared{background-image:url(../flags/1x1/tz.svg)}.flag-icon-ua{background-image:url(../flags/4x3/ua.svg)}.flag-icon-ua.flag-icon-squared{background-image:url(../flags/1x1/ua.svg)}.flag-icon-ug{background-image:url(../flags/4x3/ug.svg)}.flag-icon-ug.flag-icon-squared{background-image:url(../flags/1x1/ug.svg)}.flag-icon-um{background-image:url(../flags/4x3/um.svg)}.flag-icon-um.flag-icon-squared{background-image:url(../flags/1x1/um.svg)}.flag-icon-us{background-image:url(../flags/4x3/us.svg)}.flag-icon-us.flag-icon-squared{background-image:url(../flags/1x1/us.svg)}.flag-icon-uy{background-image:url(../flags/4x3/uy.svg)}.flag-icon-uy.flag-icon-squared{background-image:url(../flags/1x1/uy.svg)}.flag-icon-uz{background-image:url(../flags/4x3/uz.svg)}.flag-icon-uz.flag-icon-squared{background-image:url(../flags/1x1/uz.svg)}.flag-icon-va{background-image:url(../flags/4x3/va.svg)}.flag-icon-va.flag-icon-squared{background-image:url(../flags/1x1/va.svg)}.flag-icon-vc{background-image:url(../flags/4x3/vc.svg)}.flag-icon-vc.flag-icon-squared{background-image:url(../flags/1x1/vc.svg)}.flag-icon-ve{background-image:url(../flags/4x3/ve.svg)}.flag-icon-ve.flag-icon-squared{background-image:url(../flags/1x1/ve.svg)}.flag-icon-vg{background-image:url(../flags/4x3/vg.svg)}.flag-icon-vg.flag-icon-squared{background-image:url(../flags/1x1/vg.svg)}.flag-icon-vi{background-image:url(../flags/4x3/vi.svg)}.flag-icon-vi.flag-icon-squared{background-image:url(../flags/1x1/vi.svg)}.flag-icon-vn{background-image:url(../flags/4x3/vn.svg)}.flag-icon-vn.flag-icon-squared{background-image:url(../flags/1x1/vn.svg)}.flag-icon-vu{background-image:url(../flags/4x3/vu.svg)}.flag-icon-vu.flag-icon-squared{background-image:url(../flags/1x1/vu.svg)}.flag-icon-wf{background-image:url(../flags/4x3/wf.svg)}.flag-icon-wf.flag-icon-squared{background-image:url(../flags/1x1/wf.svg)}.flag-icon-ws{background-image:url(../flags/4x3/ws.svg)}.flag-icon-ws.flag-icon-squared{background-image:url(../flags/1x1/ws.svg)}.flag-icon-ye{background-image:url(../flags/4x3/ye.svg)}.flag-icon-ye.flag-icon-squared{background-image:url(../flags/1x1/ye.svg)}.flag-icon-yt{background-image:url(../flags/4x3/yt.svg)}.flag-icon-yt.flag-icon-squared{background-image:url(../flags/1x1/yt.svg)}.flag-icon-za{background-image:url(../flags/4x3/za.svg)}.flag-icon-za.flag-icon-squared{background-image:url(../flags/1x1/za.svg)}.flag-icon-zm{background-image:url(../flags/4x3/zm.svg)}.flag-icon-zm.flag-icon-squared{background-image:url(../flags/1x1/zm.svg)}.flag-icon-zw{background-image:url(../flags/4x3/zw.svg)}.flag-icon-zw.flag-icon-squared{background-image:url(../flags/1x1/zw.svg)}.flag-icon-es-ca{background-image:url(../flags/4x3/es-ca.svg)}.flag-icon-es-ca.flag-icon-squared{background-image:url(../flags/1x1/es-ca.svg)}.flag-icon-es-ga{background-image:url(../flags/4x3/es-ga.svg)}.flag-icon-es-ga.flag-icon-squared{background-image:url(../flags/1x1/es-ga.svg)}.flag-icon-eu{background-image:url(../flags/4x3/eu.svg)}.flag-icon-eu.flag-icon-squared{background-image:url(../flags/1x1/eu.svg)}.flag-icon-gb-eng{background-image:url(../flags/4x3/gb-eng.svg)}.flag-icon-gb-eng.flag-icon-squared{background-image:url(../flags/1x1/gb-eng.svg)}.flag-icon-gb-nir{background-image:url(../flags/4x3/gb-nir.svg)}.flag-icon-gb-nir.flag-icon-squared{background-image:url(../flags/1x1/gb-nir.svg)}.flag-icon-gb-sct{background-image:url(../flags/4x3/gb-sct.svg)}.flag-icon-gb-sct.flag-icon-squared{background-image:url(../flags/1x1/gb-sct.svg)}.flag-icon-gb-wls{background-image:url(../flags/4x3/gb-wls.svg)}.flag-icon-gb-wls.flag-icon-squared{background-image:url(../flags/1x1/gb-wls.svg)}.flag-icon-un{background-image:url(../flags/4x3/un.svg)}.flag-icon-un.flag-icon-squared{background-image:url(../flags/1x1/un.svg)}.flag-icon-xk{background-image:url(../flags/4x3/xk.svg)}.flag-icon-xk.flag-icon-squared{background-image:url(../flags/1x1/xk.svg)} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ad.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ad.svg new file mode 100644 index 00000000000..e7fc56abbca --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ad.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ae.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ae.svg new file mode 100644 index 00000000000..739c5d4646e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/af.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/af.svg new file mode 100644 index 00000000000..90c34b8d5a6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ag.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ag.svg new file mode 100644 index 00000000000..d0b2a83cbe6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ai.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ai.svg new file mode 100644 index 00000000000..472be200e76 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ai.svg @@ -0,0 +1,763 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/al.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/al.svg new file mode 100644 index 00000000000..75995ecde62 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/am.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/am.svg new file mode 100644 index 00000000000..1198be035ff --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ao.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ao.svg new file mode 100644 index 00000000000..a5a25bf1075 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aq.svg new file mode 100644 index 00000000000..80e682abd63 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ar.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ar.svg new file mode 100644 index 00000000000..1730ecac9e0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ar.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/as.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/as.svg new file mode 100644 index 00000000000..b8d8162d0a3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/as.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/at.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/at.svg new file mode 100644 index 00000000000..649d6efe0a7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/at.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/au.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/au.svg new file mode 100644 index 00000000000..ca5d607ea0f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/au.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aw.svg new file mode 100644 index 00000000000..248a08d69b8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ax.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ax.svg new file mode 100644 index 00000000000..cdeb07e2736 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/az.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/az.svg new file mode 100644 index 00000000000..0119e1ab4e0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ba.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ba.svg new file mode 100644 index 00000000000..5b92b0ab54a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bb.svg new file mode 100644 index 00000000000..9d627842f1e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bd.svg new file mode 100644 index 00000000000..4cb38cf503e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/be.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/be.svg new file mode 100644 index 00000000000..01496c3cace --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bf.svg new file mode 100644 index 00000000000..a3c7c44a4fa --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bg.svg new file mode 100644 index 00000000000..5abe67f6424 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bh.svg new file mode 100644 index 00000000000..22fba621a99 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bh.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bi.svg new file mode 100644 index 00000000000..cc11dcff2c4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bj.svg new file mode 100644 index 00000000000..07c4c117ca6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bl.svg new file mode 100644 index 00000000000..0fa74e1c3cc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bm.svg new file mode 100644 index 00000000000..a7057d24c03 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bm.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bn.svg new file mode 100644 index 00000000000..2e93aea3267 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bo.svg new file mode 100644 index 00000000000..52a534fe2b7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bo.svg @@ -0,0 +1,678 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bq.svg new file mode 100644 index 00000000000..cc872ef1b88 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/br.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/br.svg new file mode 100644 index 00000000000..8353e823fcd --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bs.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bs.svg new file mode 100644 index 00000000000..decdebb1efc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bt.svg new file mode 100644 index 00000000000..3bbbfaac749 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bv.svg new file mode 100644 index 00000000000..01c9ee147d7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bw.svg new file mode 100644 index 00000000000..0bc5d3d34f5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/by.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/by.svg new file mode 100644 index 00000000000..73e14f7a236 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/by.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bz.svg new file mode 100644 index 00000000000..0e9a27ca6a0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ca.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ca.svg new file mode 100644 index 00000000000..6882f6da65a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cc.svg new file mode 100644 index 00000000000..dd6e20003eb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cd.svg new file mode 100644 index 00000000000..5da2a96892d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cf.svg new file mode 100644 index 00000000000..e924621528c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cg.svg new file mode 100644 index 00000000000..a52ba7e2114 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ch.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ch.svg new file mode 100644 index 00000000000..773cdc8a3eb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ci.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ci.svg new file mode 100644 index 00000000000..bd1e3f41418 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ck.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ck.svg new file mode 100644 index 00000000000..f2df0dbe345 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ck.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cl.svg new file mode 100644 index 00000000000..b8088967210 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cm.svg new file mode 100644 index 00000000000..08b710bb87d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cn.svg new file mode 100644 index 00000000000..7873c1b4fad --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/co.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/co.svg new file mode 100644 index 00000000000..18d1c5f450e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cr.svg new file mode 100644 index 00000000000..a60a6dd6144 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cu.svg new file mode 100644 index 00000000000..396817620db --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cv.svg new file mode 100644 index 00000000000..a8311b2f83c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cw.svg new file mode 100644 index 00000000000..d7ba21865b4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cx.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cx.svg new file mode 100644 index 00000000000..ef82c453631 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cy.svg new file mode 100644 index 00000000000..ba2b0f89086 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cz.svg new file mode 100644 index 00000000000..9557b6e88da --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/de.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/de.svg new file mode 100644 index 00000000000..b9ea8a61348 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dj.svg new file mode 100644 index 00000000000..3f6b2e4f351 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dk.svg new file mode 100644 index 00000000000..51ff69feb05 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dm.svg new file mode 100644 index 00000000000..405a4b6b96e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/do.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/do.svg new file mode 100644 index 00000000000..03d3f3547b6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/do.svg @@ -0,0 +1,6745 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dz.svg new file mode 100644 index 00000000000..37df0c8bbab --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ec.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ec.svg new file mode 100644 index 00000000000..65fd0bad2e6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ee.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ee.svg new file mode 100644 index 00000000000..fbc9e339439 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ee.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eg.svg new file mode 100644 index 00000000000..2965b6afa07 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eh.svg new file mode 100644 index 00000000000..4c3feba1b33 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eh.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/er.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/er.svg new file mode 100644 index 00000000000..86343349e32 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/er.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg new file mode 100644 index 00000000000..2a50685ddb3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg new file mode 100644 index 00000000000..5c55ff855ba --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es-ga.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es.svg new file mode 100644 index 00000000000..d7030eb2921 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/es.svg @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/et.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/et.svg new file mode 100644 index 00000000000..8b02f6b7cad --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eu.svg new file mode 100644 index 00000000000..b031d2d3365 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fi.svg new file mode 100644 index 00000000000..aff1304c6bf --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fj.svg new file mode 100644 index 00000000000..9d9c3029e1b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fj.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fk.svg new file mode 100644 index 00000000000..12a34c46dc8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fk.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fm.svg new file mode 100644 index 00000000000..791fde99298 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fo.svg new file mode 100644 index 00000000000..b28915c013a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fr.svg new file mode 100644 index 00000000000..f8e3ca0d57f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/fr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ga.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ga.svg new file mode 100644 index 00000000000..16c81b3029a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg new file mode 100644 index 00000000000..18026d29413 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg new file mode 100644 index 00000000000..6d8a3a39745 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-nir.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg new file mode 100644 index 00000000000..6987b0886b7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg new file mode 100644 index 00000000000..3931a17954e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb.svg new file mode 100644 index 00000000000..ef048dc2a14 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gd.svg new file mode 100644 index 00000000000..cca37ba483f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ge.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ge.svg new file mode 100644 index 00000000000..ac1d87bb490 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gf.svg new file mode 100644 index 00000000000..c00a576342f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gg.svg new file mode 100644 index 00000000000..2d06a9f86f0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gh.svg new file mode 100644 index 00000000000..4b6446d645a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gi.svg new file mode 100644 index 00000000000..39f5b2770c2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gl.svg new file mode 100644 index 00000000000..7a026d995fe --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gm.svg new file mode 100644 index 00000000000..b06ab6cb585 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gm.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gn.svg new file mode 100644 index 00000000000..8f8855da4b8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gp.svg new file mode 100644 index 00000000000..0a5bdb0056c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gq.svg new file mode 100644 index 00000000000..8149406de41 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gr.svg new file mode 100644 index 00000000000..4bc68fc1fa3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gs.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gs.svg new file mode 100644 index 00000000000..48f68b8b67a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gs.svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L + + + E + + + O + + + T + + + E + + + R + + + R + + + R + + + R + + + R + + + E + + + O + + + O + + + A + + + A + + + A + + + M + + + P + + + P + + + P + + + I + + + T + + + T + + + M + + + G + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gt.svg new file mode 100644 index 00000000000..761801ca47f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gt.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gu.svg new file mode 100644 index 00000000000..d6f5d535ca5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gu.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + G + + + U + + + A + + + M + + + + + + + + G + + + U + + + A + + + M + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gw.svg new file mode 100644 index 00000000000..064a5934732 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gy.svg new file mode 100644 index 00000000000..57eb5209035 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hk.svg new file mode 100644 index 00000000000..024c070555b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hk.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hm.svg new file mode 100644 index 00000000000..7e1f7e7e647 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hm.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hn.svg new file mode 100644 index 00000000000..c7c4c4acfd1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hr.svg new file mode 100644 index 00000000000..7ea00410d5a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hr.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ht.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ht.svg new file mode 100644 index 00000000000..920833a66ec --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hu.svg new file mode 100644 index 00000000000..94bc29f134c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/id.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/id.svg new file mode 100644 index 00000000000..6d2cf0941ea --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/id.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ie.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ie.svg new file mode 100644 index 00000000000..60448a9ded5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/il.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/il.svg new file mode 100644 index 00000000000..6cb4b1c1f79 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/im.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/im.svg new file mode 100644 index 00000000000..0f487f67d7f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/in.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/in.svg new file mode 100644 index 00000000000..e6557cd01a9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/io.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/io.svg new file mode 100644 index 00000000000..4d809e03e65 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/io.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/iq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/iq.svg new file mode 100644 index 00000000000..6b96774d970 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ir.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ir.svg new file mode 100644 index 00000000000..79f66324f18 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/is.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/is.svg new file mode 100644 index 00000000000..08d1e683835 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/it.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/it.svg new file mode 100644 index 00000000000..615c58fb8f9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/je.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/je.svg new file mode 100644 index 00000000000..c63ccb29ec9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/je.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jm.svg new file mode 100644 index 00000000000..c261da09718 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jo.svg new file mode 100644 index 00000000000..ab1c62aaa15 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jp.svg new file mode 100644 index 00000000000..dc7a64a5c75 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ke.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ke.svg new file mode 100644 index 00000000000..0b82f3a6c39 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kg.svg new file mode 100644 index 00000000000..71ee7b8df55 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kg.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kh.svg new file mode 100644 index 00000000000..8c888f16811 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ki.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ki.svg new file mode 100644 index 00000000000..bfc5ccab46e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/km.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/km.svg new file mode 100644 index 00000000000..8f842ea8c0b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kn.svg new file mode 100644 index 00000000000..4b2a2488be8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kp.svg new file mode 100644 index 00000000000..8eda6be8741 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kr.svg new file mode 100644 index 00000000000..2db51b02a64 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kr.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kw.svg new file mode 100644 index 00000000000..3d4047fff5e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ky.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ky.svg new file mode 100644 index 00000000000..b4ae00aa861 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ky.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kz.svg new file mode 100644 index 00000000000..f17bd6e0f85 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/kz.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/la.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/la.svg new file mode 100644 index 00000000000..1e7686a9350 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lb.svg new file mode 100644 index 00000000000..a047b0b9480 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lc.svg new file mode 100644 index 00000000000..b13b8852aac --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/li.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/li.svg new file mode 100644 index 00000000000..cbed5cc84cb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lk.svg new file mode 100644 index 00000000000..2b112155f66 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lr.svg new file mode 100644 index 00000000000..0ae34e72824 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ls.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ls.svg new file mode 100644 index 00000000000..e71bb5bb70e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lt.svg new file mode 100644 index 00000000000..aa96cf3236e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lu.svg new file mode 100644 index 00000000000..62936716027 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lv.svg new file mode 100644 index 00000000000..5556de1a3d9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ly.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ly.svg new file mode 100644 index 00000000000..fe0ed81b607 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ma.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ma.svg new file mode 100644 index 00000000000..85c99b3b9e0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mc.svg new file mode 100644 index 00000000000..d38822ddacd --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/md.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/md.svg new file mode 100644 index 00000000000..86b2a961498 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/md.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/me.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/me.svg new file mode 100644 index 00000000000..56a19ed0a07 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/me.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mf.svg new file mode 100644 index 00000000000..310afce4074 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mg.svg new file mode 100644 index 00000000000..f0375cc6bee --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mh.svg new file mode 100644 index 00000000000..97f34631af6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mh.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mk.svg new file mode 100644 index 00000000000..da2e9a4c408 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ml.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ml.svg new file mode 100644 index 00000000000..1e4d98900cd --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mm.svg new file mode 100644 index 00000000000..5076184c320 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mm.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mn.svg new file mode 100644 index 00000000000..568fda088a9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mo.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mo.svg new file mode 100644 index 00000000000..83d04ea28a4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mp.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mp.svg new file mode 100644 index 00000000000..54a0ede9f23 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mq.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mq.svg new file mode 100644 index 00000000000..7a69fb58429 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mq.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mr.svg new file mode 100644 index 00000000000..7da23e5f4e3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ms.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ms.svg new file mode 100644 index 00000000000..d7d910d020f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ms.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mt.svg new file mode 100644 index 00000000000..96acc15e730 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mt.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mu.svg new file mode 100644 index 00000000000..773d3d59eec --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mv.svg new file mode 100644 index 00000000000..aa5ed5333ef --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mw.svg new file mode 100644 index 00000000000..a9521a08c1a --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mx.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mx.svg new file mode 100644 index 00000000000..a4406568073 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mx.svg @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/my.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/my.svg new file mode 100644 index 00000000000..7ebe064b74b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/my.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mz.svg new file mode 100644 index 00000000000..113a2057925 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/na.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/na.svg new file mode 100644 index 00000000000..b934fc157c7 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nc.svg new file mode 100644 index 00000000000..2bdf6ee5b5c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nc.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ne.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ne.svg new file mode 100644 index 00000000000..e76e44c0bbc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nf.svg new file mode 100644 index 00000000000..21495222f65 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nf.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ng.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ng.svg new file mode 100644 index 00000000000..57d65d380a0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ni.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ni.svg new file mode 100644 index 00000000000..8f68d422554 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nl.svg new file mode 100644 index 00000000000..9db233dd4ba --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/no.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/no.svg new file mode 100644 index 00000000000..08ea5728d27 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/np.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/np.svg new file mode 100644 index 00000000000..f34ee8c6387 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/np.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nr.svg new file mode 100644 index 00000000000..282d80fa14e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nu.svg new file mode 100644 index 00000000000..aced440dc1d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nu.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nz.svg new file mode 100644 index 00000000000..5283a96ed48 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/nz.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/om.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/om.svg new file mode 100644 index 00000000000..055d1e69867 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pa.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pa.svg new file mode 100644 index 00000000000..57965b9ea22 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pa.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pe.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pe.svg new file mode 100644 index 00000000000..40b87badbb9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pe.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pf.svg new file mode 100644 index 00000000000..94ff90cb2c4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pf.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pg.svg new file mode 100644 index 00000000000..73977541821 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pg.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ph.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ph.svg new file mode 100644 index 00000000000..681cf23ff50 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ph.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pk.svg new file mode 100644 index 00000000000..06b6022f0c2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pl.svg new file mode 100644 index 00000000000..f7c12a1843d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pm.svg new file mode 100644 index 00000000000..3d4014a4143 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pm.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pn.svg new file mode 100644 index 00000000000..47b0749a0ab --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pn.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pr.svg new file mode 100644 index 00000000000..79cf4c09917 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ps.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ps.svg new file mode 100644 index 00000000000..7c1ea3f9a6d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ps.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pt.svg new file mode 100644 index 00000000000..425515054ad --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pw.svg new file mode 100644 index 00000000000..83bc3f71d53 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/py.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/py.svg new file mode 100644 index 00000000000..88f55e6f020 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/py.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/qa.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/qa.svg new file mode 100644 index 00000000000..0bf30ea37ff --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/re.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/re.svg new file mode 100644 index 00000000000..027c9f32ce5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/re.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ro.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ro.svg new file mode 100644 index 00000000000..994992ab662 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rs.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rs.svg new file mode 100644 index 00000000000..3270f304c4e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rs.svg @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ru.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ru.svg new file mode 100644 index 00000000000..d6430874302 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ru.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rw.svg new file mode 100644 index 00000000000..26e41f6ad79 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sa.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sa.svg new file mode 100644 index 00000000000..1cc41b80bfd --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sa.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sb.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sb.svg new file mode 100644 index 00000000000..f61bafd6a90 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sc.svg new file mode 100644 index 00000000000..65d8943d64d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sc.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sd.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sd.svg new file mode 100644 index 00000000000..72a729708b1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/se.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/se.svg new file mode 100644 index 00000000000..e824395ebb1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/se.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sg.svg new file mode 100644 index 00000000000..1444e5b6ab1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sh.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sh.svg new file mode 100644 index 00000000000..599a09d73bb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sh.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/si.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/si.svg new file mode 100644 index 00000000000..6de77ef4730 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sj.svg new file mode 100644 index 00000000000..f4e5829735d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sk.svg new file mode 100644 index 00000000000..fd728680b0e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sl.svg new file mode 100644 index 00000000000..18c76d781bc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sl.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sm.svg new file mode 100644 index 00000000000..1ed18eed6cb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sm.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L + + + I + + + B + + + E + + + R + + + T + + + A + + + S + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sn.svg new file mode 100644 index 00000000000..fbbad5e026c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/so.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/so.svg new file mode 100644 index 00000000000..96d88a992a1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sr.svg new file mode 100644 index 00000000000..a0ca03e367b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ss.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ss.svg new file mode 100644 index 00000000000..7e6a47ffd9f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/st.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/st.svg new file mode 100644 index 00000000000..da5df2990d1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sv.svg new file mode 100644 index 00000000000..65b44baeec8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sv.svg @@ -0,0 +1,596 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sx.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sx.svg new file mode 100644 index 00000000000..5d9fadfa2ec --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sy.svg new file mode 100644 index 00000000000..904dc1f65c1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sz.svg new file mode 100644 index 00000000000..b3009e4d92f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/sz.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tc.svg new file mode 100644 index 00000000000..1029615f551 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tc.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/td.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/td.svg new file mode 100644 index 00000000000..e3e81ce2fd1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tf.svg new file mode 100644 index 00000000000..2061867c96b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tg.svg new file mode 100644 index 00000000000..2c1fd98fd48 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/th.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/th.svg new file mode 100644 index 00000000000..86850f5fbf6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tj.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tj.svg new file mode 100644 index 00000000000..853a4a4555b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tj.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tk.svg new file mode 100644 index 00000000000..c5ff6b4cb43 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tl.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tl.svg new file mode 100644 index 00000000000..ec6d44bd139 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tm.svg new file mode 100644 index 00000000000..d856424fe68 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tm.svg @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tn.svg new file mode 100644 index 00000000000..d46a1cd9aad --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tn.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/to.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/to.svg new file mode 100644 index 00000000000..201d6bc39d2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tr.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tr.svg new file mode 100644 index 00000000000..861d4ea5800 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tt.svg new file mode 100644 index 00000000000..87e439a07d2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tv.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tv.svg new file mode 100644 index 00000000000..f30c8f37107 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tv.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tw.svg new file mode 100644 index 00000000000..5f284fc6124 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tz.svg new file mode 100644 index 00000000000..f993ff15d69 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/tz.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ua.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ua.svg new file mode 100644 index 00000000000..18ebe0d49dc --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ug.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ug.svg new file mode 100644 index 00000000000..d9be9459452 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/um.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/um.svg new file mode 100644 index 00000000000..25b08ce6ab3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/um.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/un.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/un.svg new file mode 100644 index 00000000000..1d50ea92508 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/us.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/us.svg new file mode 100644 index 00000000000..31f90c6c3a8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/us.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uy.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uy.svg new file mode 100644 index 00000000000..0194a7cb0b6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uz.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uz.svg new file mode 100644 index 00000000000..641af1b8269 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/va.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/va.svg new file mode 100644 index 00000000000..7da6d3e7391 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/va.svg @@ -0,0 +1,479 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vc.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vc.svg new file mode 100644 index 00000000000..ee72f781ac8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ve.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ve.svg new file mode 100644 index 00000000000..205fe848a3b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vg.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vg.svg new file mode 100644 index 00000000000..9572de34805 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vg.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vi.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vi.svg new file mode 100644 index 00000000000..2740f24ffac --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vn.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vn.svg new file mode 100644 index 00000000000..6b158145ad0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vu.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vu.svg new file mode 100644 index 00000000000..397d30e60ba --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/vu.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/wf.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/wf.svg new file mode 100644 index 00000000000..bb726a7c2e1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/wf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ws.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ws.svg new file mode 100644 index 00000000000..155ad7b5580 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/xk.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/xk.svg new file mode 100644 index 00000000000..69146ca449f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/xk.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ye.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ye.svg new file mode 100644 index 00000000000..d49d2c414ee --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/yt.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/yt.svg new file mode 100644 index 00000000000..7bf38373797 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/yt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/za.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/za.svg new file mode 100644 index 00000000000..9bae96fe3ed --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zm.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zm.svg new file mode 100644 index 00000000000..105f1076ad8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zw.svg b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zw.svg new file mode 100644 index 00000000000..ca5b7a20f9d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/flag-icon/flags/1x1/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/css/all.css b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/css/all.css new file mode 100644 index 00000000000..1893247a7d9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/css/all.css @@ -0,0 +1,8003 @@ +/*! + * Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-pixiv:before { + content: "\e640"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-brave:before { + content: "\e63c"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-opensuse:before { + content: "\e62b"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-square-letterboxd:before { + content: "\e62e"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-shoelace:before { + content: "\e60c"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-google-scholar:before { + content: "\e63b"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-signal-messenger:before { + content: "\e663"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-mintbit:before { + content: "\e62f"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-brave-reverse:before { + content: "\e63d"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-letterboxd:before { + content: "\e62d"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-upwork:before { + content: "\e641"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-webflow:before { + content: "\e65c"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); + unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); + unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.ttf b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.ttf new file mode 100644 index 00000000000..5efb1d4f964 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.ttf differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.woff2 b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.woff2 new file mode 100644 index 00000000000..36fbda7d334 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-brands-400.woff2 differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.ttf b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.ttf new file mode 100644 index 00000000000..838b4e2cfec Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.ttf differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.woff2 b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.woff2 new file mode 100644 index 00000000000..b6cabbacb67 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-regular-400.woff2 differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.ttf b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.ttf new file mode 100644 index 00000000000..ec24749db90 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.woff2 b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.woff2 new file mode 100644 index 00000000000..824d518eb4c Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.ttf b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.ttf new file mode 100644 index 00000000000..b175aa8ece8 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.ttf differ diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.woff2 b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 00000000000..e09b5a55009 Binary files /dev/null and b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor/wwwroot/libs/fontawesome/webfonts/fa-v4compatibility.woff2 differ diff --git a/framework/src/Volo.Abp.MudBlazorUI/AbpMudBlazorMessageLocalizerHelper.cs b/framework/src/Volo.Abp.MudBlazorUI/AbpMudBlazorMessageLocalizerHelper.cs new file mode 100644 index 00000000000..007db40ca63 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/AbpMudBlazorMessageLocalizerHelper.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.Extensions.Localization; + +namespace Volo.Abp.MudBlazorUI; + +public class AbpMudBlazorMessageLocalizerHelper +{ + private readonly IStringLocalizer _localizer; + + public AbpMudBlazorMessageLocalizerHelper(IStringLocalizer localizer) + { + _localizer = localizer; + } + + public string Localize(string message, params object[] arguments) + { + return _localizer[message, arguments]; + } + + public string? LocalizeOrNull(string? message, params object[] arguments) + { + if (message.IsNullOrEmpty()) + { + return null; + } + + return _localizer[message!, arguments]; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/AbpMudBlazorUIModule.cs b/framework/src/Volo.Abp.MudBlazorUI/AbpMudBlazorUIModule.cs new file mode 100644 index 00000000000..74c425c2142 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/AbpMudBlazorUIModule.cs @@ -0,0 +1,43 @@ +using Microsoft.Extensions.DependencyInjection; +using MudBlazor; +using MudBlazor.Services; +using Volo.Abp.Application; +using Volo.Abp.AspNetCore.Components.Web; +using Volo.Abp.Authorization; +using Volo.Abp.Features; +using Volo.Abp.GlobalFeatures; +using Volo.Abp.Modularity; + +namespace Volo.Abp.MudBlazorUI; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebModule), + typeof(AbpDddApplicationContractsModule), + typeof(AbpAuthorizationModule), + typeof(AbpGlobalFeaturesModule), + typeof(AbpFeaturesModule) +)] +public class AbpMudBlazorUIModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + ConfigureMudBlazor(context); + } + + private void ConfigureMudBlazor(ServiceConfigurationContext context) + { + context.Services.AddMudServices(config => + { + config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomEnd; + config.SnackbarConfiguration.PreventDuplicates = false; + config.SnackbarConfiguration.NewestOnTop = true; + config.SnackbarConfiguration.ShowCloseIcon = true; + config.SnackbarConfiguration.VisibleStateDuration = 5000; + config.SnackbarConfiguration.HideTransitionDuration = 500; + config.SnackbarConfiguration.ShowTransitionDuration = 500; + config.SnackbarConfiguration.SnackbarVariant = Variant.Filled; + }); + + context.Services.AddSingleton(typeof(AbpMudBlazorMessageLocalizerHelper<>)); + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/AbpMudCrudPageBase.cs b/framework/src/Volo.Abp.MudBlazorUI/AbpMudCrudPageBase.cs new file mode 100644 index 00000000000..cd97bc07dc7 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/AbpMudCrudPageBase.cs @@ -0,0 +1,718 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using MudBlazor; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.Web.Extensibility.EntityActions; +using Volo.Abp.AspNetCore.Components.Web.Extensibility.TableColumns; +using Volo.Abp.Authorization; +using Volo.Abp.Localization; +using Volo.Abp.MudBlazorUI.Components; +using Volo.Abp.ObjectExtending; +using Volo.Abp.ObjectExtending.Modularity; + +namespace Volo.Abp.MudBlazorUI; + +public abstract class AbpMudCrudPageBase< + TAppService, + TEntityDto, + TKey> + : AbpMudCrudPageBase< + TAppService, + TEntityDto, + TKey, + PagedAndSortedResultRequestDto> + where TAppService : ICrudAppService< + TEntityDto, + TKey> + where TEntityDto : class, IEntityDto, new() +{ +} + +public abstract class AbpMudCrudPageBase< + TAppService, + TEntityDto, + TKey, + TGetListInput> + : AbpMudCrudPageBase< + TAppService, + TEntityDto, + TKey, + TGetListInput, + TEntityDto> + where TAppService : ICrudAppService< + TEntityDto, + TKey, + TGetListInput> + where TEntityDto : class, IEntityDto, new() + where TGetListInput : new() +{ +} + +public abstract class AbpMudCrudPageBase< + TAppService, + TEntityDto, + TKey, + TGetListInput, + TCreateInput> + : AbpMudCrudPageBase< + TAppService, + TEntityDto, + TKey, + TGetListInput, + TCreateInput, + TCreateInput> + where TAppService : ICrudAppService< + TEntityDto, + TKey, + TGetListInput, + TCreateInput> + where TEntityDto : IEntityDto + where TCreateInput : class, new() + where TGetListInput : new() +{ +} + +public abstract class AbpMudCrudPageBase< + TAppService, + TEntityDto, + TKey, + TGetListInput, + TCreateInput, + TUpdateInput> + : AbpMudCrudPageBase< + TAppService, + TEntityDto, + TEntityDto, + TKey, + TGetListInput, + TCreateInput, + TUpdateInput> + where TAppService : ICrudAppService< + TEntityDto, + TKey, + TGetListInput, + TCreateInput, + TUpdateInput> + where TEntityDto : IEntityDto + where TCreateInput : class, new() + where TUpdateInput : class, new() + where TGetListInput : new() +{ +} + +public abstract class AbpMudCrudPageBase< + TAppService, + TGetOutputDto, + TGetListOutputDto, + TKey, + TGetListInput, + TCreateInput, + TUpdateInput> + : AbpMudCrudPageBase< + TAppService, + TGetOutputDto, + TGetListOutputDto, + TKey, + TGetListInput, + TCreateInput, + TUpdateInput, + TGetListOutputDto, + TCreateInput, + TUpdateInput> + where TAppService : ICrudAppService< + TGetOutputDto, + TGetListOutputDto, + TKey, + TGetListInput, + TCreateInput, + TUpdateInput> + where TGetOutputDto : IEntityDto + where TGetListOutputDto : IEntityDto + where TCreateInput : class, new() + where TUpdateInput : class, new() + where TGetListInput : new() +{ +} + +public abstract class AbpMudCrudPageBase< + TAppService, + TGetOutputDto, + TGetListOutputDto, + TKey, + TGetListInput, + TCreateInput, + TUpdateInput, + TListViewModel, + TCreateViewModel, + TUpdateViewModel> + : AbpComponentBase + where TAppService : ICrudAppService< + TGetOutputDto, + TGetListOutputDto, + TKey, + TGetListInput, + TCreateInput, + TUpdateInput> + where TGetOutputDto : IEntityDto + where TGetListOutputDto : IEntityDto + where TCreateInput : class + where TUpdateInput : class + where TGetListInput : new() + where TListViewModel : IEntityDto + where TCreateViewModel : class, new() + where TUpdateViewModel : class, new() +{ + [Inject] protected TAppService AppService { get; set; } = default!; + [Inject] protected IStringLocalizer UiLocalizer { get; set; } = default!; + [Inject] public IAbpEnumLocalizer AbpEnumLocalizer { get; set; } = default!; + [Inject] protected IDialogService DialogService { get; set; } = default!; + [Inject] protected ISnackbar Snackbar { get; set; } = default!; + [Inject] protected ExtensionPropertyPolicyChecker ExtensionPropertyPolicyChecker { get; set; } = default!; + + protected virtual int PageSize { get; set; } = LimitedResultRequestDto.DefaultMaxResultCount; + + protected int CurrentPage = 1; + protected string CurrentSorting = default!; + protected TGetListInput GetListInput = new TGetListInput(); + protected TCreateViewModel NewEntity; + protected TKey EditingEntityId = default!; + protected TUpdateViewModel EditingEntity; + protected MudForm? CreateFormRef; + protected MudForm? EditFormRef; + protected List BreadcrumbItems = new List(2); + protected MudDataGridEntityActionsColumn EntityActionsColumn = default!; + protected EntityActionDictionary EntityActions { get; set; } + protected TableColumnDictionary TableColumns { get; set; } + + protected string? CreatePolicyName { get; set; } + protected string? UpdatePolicyName { get; set; } + protected string? DeletePolicyName { get; set; } + + public bool HasCreatePermission { get; set; } + public bool HasUpdatePermission { get; set; } + public bool HasDeletePermission { get; set; } + + protected MudDialog? _createDialog; + protected MudDialog? _editDialog; + + protected virtual DialogOptions CreateDialogOptions => new DialogOptions + { + MaxWidth = MaxWidth.Medium, + FullWidth = true, + CloseOnEscapeKey = true, + BackdropClick = false + }; + + protected virtual DialogOptions EditDialogOptions => new DialogOptions + { + MaxWidth = MaxWidth.Medium, + FullWidth = true, + CloseOnEscapeKey = true, + BackdropClick = false + }; + + protected AbpMudExtensibleDataGrid _dataGrid = default!; + + protected AbpMudCrudPageBase() + { + NewEntity = new TCreateViewModel(); + EditingEntity = new TUpdateViewModel(); + TableColumns = new TableColumnDictionary(); + EntityActions = new EntityActionDictionary(); + } + + protected override async Task OnInitializedAsync() + { + await TrySetPermissionsAsync(); + await TrySetEntityActionsAsync(); + await TrySetTableColumnsAsync(); + await InvokeAsync(StateHasChanged); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + await SetToolbarItemsAsync(); + await SetBreadcrumbItemsAsync(); + } + await base.OnAfterRenderAsync(firstRender); + } + + private async Task TrySetPermissionsAsync() + { + if (IsDisposed) + { + return; + } + + await SetPermissionsAsync(); + } + + protected virtual async Task SetPermissionsAsync() + { + if (CreatePolicyName != null) + { + HasCreatePermission = await AuthorizationService.IsGrantedAsync(CreatePolicyName); + } + + if (UpdatePolicyName != null) + { + HasUpdatePermission = await AuthorizationService.IsGrantedAsync(UpdatePolicyName); + } + + if (DeletePolicyName != null) + { + HasDeletePermission = await AuthorizationService.IsGrantedAsync(DeletePolicyName); + } + } + + private IReadOnlyList MapToListViewModel(IReadOnlyList dtos) + { + if (typeof(TGetListOutputDto) == typeof(TListViewModel)) + { + return dtos.As>(); + } + + return ObjectMapper.Map, List>(dtos); + } + + protected virtual string MapSortFieldToPropertyName(string sortBy, List columns) + { + if (string.IsNullOrEmpty(sortBy)) + { + return sortBy; + } + + return sortBy; + } + + protected virtual Task UpdateGetListInputAsync() + { + if (GetListInput is ISortedResultRequest sortedResultRequestInput) + { + sortedResultRequestInput.Sorting = CurrentSorting; + } + + if (GetListInput is IPagedResultRequest pagedResultRequestInput) + { + pagedResultRequestInput.SkipCount = (CurrentPage - 1) * PageSize; + } + + if (GetListInput is ILimitedResultRequest limitedResultRequestInput) + { + limitedResultRequestInput.MaxResultCount = PageSize; + } + + return Task.CompletedTask; + } + + protected virtual async Task SearchEntitiesAsync() + { + var currentPage = CurrentPage; + CurrentPage = 1; + if (currentPage == 1) + { + await _dataGrid.ReloadServerDataAsync(); + } + else + { + await InvokeAsync(StateHasChanged); + } + } + + protected virtual async Task> OnDataGridReadAsync(GridState state) + { + CurrentSorting = state.SortDefinitions + .Select(s => _dataGrid.ResolveSortPropertyName(s) + (s.Descending ? " DESC" : "")) + .JoinAsString(","); + CurrentPage = state.Page + 1; + if (state.PageSize > 0) + { + PageSize = state.PageSize; + } + + try + { + await UpdateGetListInputAsync(); + var result = await AppService.GetListAsync(GetListInput); + var items = MapToListViewModel(result.Items); + + await InvokeAsync(StateHasChanged); + + return new GridData + { + Items = items, + TotalItems = (int)result.TotalCount + }; + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + return new GridData + { + Items = Array.Empty(), + TotalItems = 0 + }; + } + } + + protected virtual async Task OpenCreateDialogAsync() + { + try + { + await CheckCreatePolicyAsync(); + + NewEntity = new TCreateViewModel(); + + if (_createDialog != null) + { + await _createDialog.ShowAsync(); + } + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual async Task CloseCreateDialogAsync() + { + NewEntity = new TCreateViewModel(); + if (_createDialog != null) + { + await _createDialog.CloseAsync(); + } + } + + protected virtual async Task OpenEditDialogAsync(TListViewModel entity) + { + try + { + await CheckUpdatePolicyAsync(); + + var entityDto = await AppService.GetAsync(entity.Id); + + EditingEntityId = entity.Id; + EditingEntity = MapToEditingEntity(entityDto); + + if (_editDialog != null) + { + await _editDialog.ShowAsync(); + } + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual TUpdateViewModel MapToEditingEntity(TGetOutputDto entityDto) + { + return ObjectMapper.Map(entityDto); + } + + protected virtual TCreateInput MapToCreateInput(TCreateViewModel createViewModel) + { + if (typeof(TCreateInput) == typeof(TCreateViewModel)) + { + return createViewModel.As(); + } + + return ObjectMapper.Map(createViewModel); + } + + protected virtual TUpdateInput MapToUpdateInput(TUpdateViewModel updateViewModel) + { + if (typeof(TUpdateInput) == typeof(TUpdateViewModel)) + { + return updateViewModel.As(); + } + + return ObjectMapper.Map(updateViewModel); + } + + protected virtual async Task CloseEditDialogAsync() + { + if (_editDialog != null) + { + await _editDialog.CloseAsync(); + } + } + + protected virtual async Task CreateEntityAsync() + { + try + { + var isValid = true; + if (CreateFormRef != null) + { + await CreateFormRef.Validate(); + isValid = CreateFormRef.IsValid; + } + + if (isValid) + { + await OnCreatingEntityAsync(); + + await CheckCreatePolicyAsync(); + var createInput = MapToCreateInput(NewEntity); + await AppService.CreateAsync(createInput); + + await OnCreatedEntityAsync(); + } + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual Task OnCreatingEntityAsync() + { + return Task.CompletedTask; + } + + protected virtual async Task OnCreatedEntityAsync() + { + await _dataGrid.ReloadServerDataAsync(); + await CloseCreateDialogAsync(); + Snackbar.Add(GetCreateMessage(), Severity.Success); + } + + protected virtual string GetCreateMessage() + { + return UiLocalizer["CreatedSuccessfully"]; + } + + protected virtual async Task UpdateEntityAsync() + { + try + { + var isValid = true; + if (EditFormRef != null) + { + await EditFormRef.Validate(); + isValid = EditFormRef.IsValid; + } + + if (isValid) + { + await OnUpdatingEntityAsync(); + + await CheckUpdatePolicyAsync(); + var updateInput = MapToUpdateInput(EditingEntity); + await AppService.UpdateAsync(EditingEntityId, updateInput); + + await OnUpdatedEntityAsync(); + } + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual Task OnUpdatingEntityAsync() + { + return Task.CompletedTask; + } + + protected virtual async Task OnUpdatedEntityAsync() + { + await _dataGrid.ReloadServerDataAsync(); + await CloseEditDialogAsync(); + Snackbar.Add(GetUpdateMessage(), Severity.Success); + } + + protected virtual string GetUpdateMessage() + { + return UiLocalizer["SavedSuccessfully"]; + } + + protected virtual async Task DeleteEntityAsync(TListViewModel entity) + { + try + { + await CheckDeletePolicyAsync(); + + var confirmed = await ConfirmDeleteAsync(entity); + if (!confirmed) + { + return; + } + + await OnDeletingEntityAsync(); + await AppService.DeleteAsync(entity.Id); + await OnDeletedEntityAsync(); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual Task OnDeletingEntityAsync() + { + return Task.CompletedTask; + } + + protected virtual async Task OnDeletedEntityAsync() + { + await _dataGrid.ReloadServerDataAsync(); + Snackbar.Add(GetDeleteMessage(), Severity.Success); + } + + protected virtual string GetDeleteMessage() + { + return UiLocalizer["DeletedSuccessfully"]; + } + + protected virtual string GetDeleteConfirmationMessage(TListViewModel entity) + { + return UiLocalizer["ItemWillBeDeletedMessage"]; + } + + protected virtual async Task ConfirmDeleteAsync(TListViewModel entity) + { + var result = await DialogService.ShowMessageBox( + UiLocalizer["AreYouSure"], + GetDeleteConfirmationMessage(entity), + yesText: UiLocalizer["Yes"], + cancelText: UiLocalizer["Cancel"]); + + return result == true; + } + + protected virtual async Task CheckCreatePolicyAsync() + { + await CheckPolicyAsync(CreatePolicyName); + } + + protected virtual async Task CheckUpdatePolicyAsync() + { + await CheckPolicyAsync(UpdatePolicyName); + } + + protected virtual async Task CheckDeletePolicyAsync() + { + await CheckPolicyAsync(DeletePolicyName); + } + + /// + /// Calls IAuthorizationService.CheckAsync for the given . + /// Throws if given policy was not granted for the current user. + /// + /// Does nothing if is null or empty. + /// + /// A policy name to check + protected virtual async Task CheckPolicyAsync(string? policyName) + { + if (string.IsNullOrEmpty(policyName)) + { + return; + } + + await AuthorizationService.CheckAsync(policyName); + } + + protected virtual ValueTask SetBreadcrumbItemsAsync() + { + return ValueTask.CompletedTask; + } + + private async ValueTask TrySetEntityActionsAsync() + { + if (IsDisposed) + { + return; + } + + await SetEntityActionsAsync(); + } + + protected virtual ValueTask SetEntityActionsAsync() + { + return ValueTask.CompletedTask; + } + + private async ValueTask TrySetTableColumnsAsync() + { + if (IsDisposed) + { + return; + } + + await SetTableColumnsAsync(); + } + + protected virtual ValueTask SetTableColumnsAsync() + { + return ValueTask.CompletedTask; + } + + protected virtual ValueTask SetToolbarItemsAsync() + { + return ValueTask.CompletedTask; + } + + protected virtual async Task> GetExtensionTableColumnsAsync(string moduleName, string entityType) + { + var tableColumns = new List(); + var properties = ModuleExtensionConfigurationHelper.GetPropertyConfigurations(moduleName, entityType).ToList(); + foreach (var propertyInfo in properties) + { + if (!await ExtensionPropertyPolicyChecker.CheckPolicyAsync(propertyInfo.Policy)) + { + continue; + } + + if (propertyInfo.IsAvailableToClients && propertyInfo.UI.OnTable.IsVisible) + { + if (propertyInfo.Name.EndsWith("_Text")) + { + var lookupPropertyName = propertyInfo.Name.RemovePostFix("_Text"); + var lookupPropertyDefinition = properties.SingleOrDefault(t => t.Name == lookupPropertyName)!; + tableColumns.Add(new TableColumn + { + Title = lookupPropertyDefinition.GetLocalizedDisplayName(StringLocalizerFactory), + Data = $"ExtraProperties[{propertyInfo.Name}]", + PropertyName = propertyInfo.Name + }); + } + else + { + var column = new TableColumn + { + Title = propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory), + Data = $"ExtraProperties[{propertyInfo.Name}]", + PropertyName = propertyInfo.Name + }; + + if (propertyInfo.IsDate() || propertyInfo.IsDateTime()) + { + column.DisplayFormat = propertyInfo.GetDateEditInputFormatOrNull(); + } + + if (propertyInfo.Type.IsEnum) + { + column.ValueConverter = (val) => + AbpEnumLocalizer.GetString(propertyInfo.Type, val.As().ExtraProperties[propertyInfo.Name]!, new IStringLocalizer?[] { StringLocalizerFactory.CreateDefaultOrNull() }); + } + + tableColumns.Add(column); + } + } + } + + return tableColumns; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor new file mode 100644 index 00000000000..2bf9b479350 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor @@ -0,0 +1,133 @@ +@typeparam TItem +@using MudBlazor +@using Volo.Abp.Data + + + + + + + + @UiLocalizer["NoDataAvailableInDatatable"] + + + + @if (Columns != null) + { + @foreach (var column in Columns) + { + if (column.Actions.Any()) + { + + + @{ + var effectiveActions = column.Actions + .Where(a => a.Visible?.Invoke(context.Item!) != false) + .ToList(); + var entityActionType = effectiveActions.Count == 1 ? MudActionType.Button : MudActionType.Dropdown; + } + + @foreach (var action in column.Actions) + { + if (action.ConfirmationMessage != null) + { + + + } + else + { + + + } + } + + + + } + else + { + @if (column.Component != null) + { + + } + else + { + var hasExtensionPropertyData = !string.IsNullOrWhiteSpace(column.Data) && ExtensionPropertiesRegex.IsMatch(column.Data!); + if (!hasExtensionPropertyData) + { + @if (column.ValueConverter == null) + { + + + @if (ShowPager) + { + + } + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor.cs new file mode 100644 index 00000000000..14f834b10e5 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor.cs @@ -0,0 +1,307 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Reflection; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Rendering; +using Microsoft.Extensions.Localization; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Web.Extensibility.TableColumns; +using Volo.Abp.Data; +using Volo.Abp.Timing; + +namespace Volo.Abp.MudBlazorUI.Components; + +public partial class AbpMudExtensibleDataGrid : ComponentBase +{ + protected const string DataFieldAttributeName = "Data"; + + private MudDataGrid? _dataGrid; + + protected Regex ExtensionPropertiesRegex = new Regex(@"ExtraProperties\[(.*?)\]"); + + /// + /// Maps SortBy func references to their corresponding property names. + /// Used to resolve property names from MudBlazor SortDefinition.SortFunc. + /// + private readonly Dictionary, string> _sortFuncToPropertyMap = new(); + + [Parameter] public Func, Task>>? ServerData { get; set; } + + [Parameter] public bool Loading { get; set; } + + [Parameter] public bool ShowPager { get; set; } = true; + + [Parameter] public int PageSize { get; set; } = 10; + + [Parameter] public IEnumerable Columns { get; set; } = default!; + + [Parameter] public int CurrentPage { get; set; } = 1; + + [Parameter] public string? Class { get; set; } + + [Parameter] public string ActionColumnWidth { get; set; } = "150px"; + + protected int ZeroBasedCurrentPage => CurrentPage > 0 ? CurrentPage - 1 : 0; + + [Inject] + public IStringLocalizerFactory StringLocalizerFactory { get; set; } = default!; + + [Inject] + public IStringLocalizer UiLocalizer { get; set; } = default!; + + [Inject] + public IClock Clock { get; set; } = default!; + + public virtual async Task ReloadServerDataAsync() + { + if (_dataGrid != null && ServerData != null) + { + await _dataGrid.ReloadServerData(); + } + } + + /// + /// Resolves the property name for a given SortDefinition by matching its SortFunc reference. + /// When MudBlazor uses Func for SortBy on TemplateColumn, it returns an internal GUID identifier + /// instead of the property name. This method looks up the original property name from the + /// registered sort function mapping. + /// + /// The property name if found in the mapping, otherwise falls back to SortDefinition.SortBy. + public virtual string ResolveSortPropertyName(SortDefinition sortDefinition) + { + if (sortDefinition.SortFunc != null && _sortFuncToPropertyMap.TryGetValue(sortDefinition.SortFunc, out var propertyName)) + { + return propertyName; + } + + return sortDefinition.SortBy; + } + + protected virtual RenderFragment RenderCustomTableColumnComponent(Type type, object data) + { + return (builder) => + { + builder.OpenComponent(0, type); + builder.AddAttribute(1, DataFieldAttributeName, data); + builder.CloseComponent(); + }; + } + + protected virtual string GetConvertedFieldValue(TItem? item, TableColumn columnDefinition) + { + if (item == null) + { + return string.Empty; + } + + var convertedValue = columnDefinition.ValueConverter!.Invoke(item!); + if (!columnDefinition.DisplayFormat.IsNullOrEmpty()) + { + return string.Format(columnDefinition.DisplayFormatProvider, columnDefinition.DisplayFormat!, + convertedValue); + } + + return convertedValue; + } + + protected virtual string GetConvertedFieldValue(object? value, TableColumn columnDefinition) + { + if (value is DateTime dateTime) + { + var converted = Clock.ConvertToUserTime(dateTime); + if (!columnDefinition.DisplayFormat.IsNullOrEmpty()) + { + return string.Format(columnDefinition.DisplayFormatProvider, columnDefinition.DisplayFormat!, converted); + } + + return converted.ToString(columnDefinition.DisplayFormatProvider as CultureInfo ?? CultureInfo.CurrentCulture); + } + + if (value is DateTimeOffset dateTimeOffset) + { + var converted = Clock.ConvertToUserTime(dateTimeOffset); + if (!columnDefinition.DisplayFormat.IsNullOrEmpty()) + { + return string.Format(columnDefinition.DisplayFormatProvider, columnDefinition.DisplayFormat!, converted); + } + + return converted.ToString(columnDefinition.DisplayFormatProvider as CultureInfo ?? CultureInfo.CurrentCulture); + } + + if (value == null) + { + return string.Empty; + } + + if (!columnDefinition.DisplayFormat.IsNullOrEmpty()) + { + return string.Format(columnDefinition.DisplayFormatProvider, columnDefinition.DisplayFormat!, value); + } + + return value.ToString() ?? string.Empty; + } + + protected virtual object GetPropertyValue(TItem item, string propertyPath) + { + ArgumentNullException.ThrowIfNull(item); + + var properties = propertyPath.Split('.'); + object value = item; + + foreach (var prop in properties) + { + var propertyInfo = value.GetType().GetProperty(prop, BindingFlags.Public | BindingFlags.Instance) + ?? throw new ArgumentException($"Property '{prop}' not found on type '{value.GetType().Name}'", nameof(propertyPath)); + + var propertyValue = propertyInfo.GetValue(value); + + // Allow null property values and treat them as empty for display/sorting purposes + if (propertyValue == null) + { + return string.Empty; + } + + value = propertyValue; + } + + if (value is DateTime dateTime) + { + return Clock.ConvertToUserTime(dateTime); + } + + if (value is DateTimeOffset dateTimeOffset) + { + return Clock.ConvertToUserTime(dateTimeOffset); + } + + return value; + } + + protected virtual string GetColumnStyle(TableColumn column) + { + if (!string.IsNullOrEmpty(column.Width)) + { + return $"width: {column.Width}"; + } + + return string.Empty; + } + + protected virtual Func? GetSortByFunc(TableColumn column) + { + if (!column.Sortable) + { + return null; + } + + // Determine the property path for sorting + string? propertyPath = null; + if (!string.IsNullOrEmpty(column.PropertyName)) + { + propertyPath = column.PropertyName; + } + else if (!string.IsNullOrEmpty(column.Data) && !ExtensionPropertiesRegex.IsMatch(column.Data)) + { + propertyPath = column.Data; + } + + if (string.IsNullOrEmpty(propertyPath)) + { + return null; + } + + var properties = propertyPath.Split('.'); + + // Build a lambda expression that directly accesses the property + var parameter = System.Linq.Expressions.Expression.Parameter(typeof(TItem), "x"); + System.Linq.Expressions.Expression expression = parameter; + + Func? sortFunc = null; + foreach (var prop in properties) + { + var propertyInfo = expression.Type.GetProperty(prop, BindingFlags.Public | BindingFlags.Instance); + if (propertyInfo == null) + { + // Fallback to GetPropertyValue if property not found + sortFunc = item => GetPropertyValue(item, propertyPath); + break; + } + expression = System.Linq.Expressions.Expression.Property(expression, propertyInfo); + } + + if (sortFunc == null) + { + var convertExpression = System.Linq.Expressions.Expression.Convert(expression, typeof(object)); + var lambda = System.Linq.Expressions.Expression.Lambda>(convertExpression, parameter); + sortFunc = lambda.Compile(); + } + + // Register the mapping so we can resolve property name from SortDefinition.SortFunc later + _sortFuncToPropertyMap[sortFunc] = propertyPath; + + return sortFunc; + } + + protected virtual Func? GetExtensionPropertySortFunc(TableColumn column) + { + if (!column.Sortable || string.IsNullOrWhiteSpace(column.Data)) + { + return null; + } + + var match = ExtensionPropertiesRegex.Match(column.Data); + if (!match.Success) + { + return null; + } + + var propertyName = match.Groups[1].Value; + Func sortFunc = item => + { + var entity = item as IHasExtraProperties; + return entity?.GetProperty(propertyName) ?? string.Empty; + }; + + // Register the mapping so we can resolve property name from SortDefinition.SortFunc later + _sortFuncToPropertyMap[sortFunc] = propertyName; + + return sortFunc; + } + + protected virtual Color GetColor(object? color) + { + if (color == null) + { + return Color.Primary; + } + + // Handle if it's already a MudBlazor Color + if (color is Color mudColor) + { + return mudColor; + } + + // Handle string color names + if (color is string colorString) + { + return colorString.ToLowerInvariant() switch + { + "primary" => Color.Primary, + "secondary" => Color.Secondary, + "success" => Color.Success, + "warning" => Color.Warning, + "error" or "danger" => Color.Error, + "info" => Color.Info, + "dark" => Color.Dark, + _ => Color.Primary + }; + } + + return Color.Primary; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/AlertWrapper.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/AlertWrapper.cs new file mode 100644 index 00000000000..9466ced6090 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/AlertWrapper.cs @@ -0,0 +1,9 @@ +using Volo.Abp.AspNetCore.Components.Alerts; + +namespace Volo.Abp.MudBlazorUI.Components; + +internal class AlertWrapper +{ + public AlertMessage AlertMessage { get; set; } = default!; + public bool IsVisible { get; set; } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/MudDataGridEntityActionsColumn.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/MudDataGridEntityActionsColumn.razor new file mode 100644 index 00000000000..4b0eb0efd96 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/MudDataGridEntityActionsColumn.razor @@ -0,0 +1,6 @@ +@typeparam TItem +@using MudBlazor + + + @ChildContent + diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/MudDataGridEntityActionsColumn.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/MudDataGridEntityActionsColumn.razor.cs new file mode 100644 index 00000000000..cedf0a74bf3 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/MudDataGridEntityActionsColumn.razor.cs @@ -0,0 +1,36 @@ +using System.Threading.Tasks; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; + +namespace Volo.Abp.MudBlazorUI.Components; + +public partial class MudDataGridEntityActionsColumn : ComponentBase +{ + [Parameter] + public RenderFragment? ChildContent { get; set; } + + [Parameter] + public string? Title { get; set; } + + [Parameter] + public string Width { get; set; } = "150px"; + + [Parameter] + public bool Displayable { get; set; } = true; + + [Inject] + public IStringLocalizer UiLocalizer { get; set; } = default!; + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + await SetDefaultValuesAsync(); + } + + protected virtual ValueTask SetDefaultValuesAsync() + { + Title ??= UiLocalizer["Actions"]; + return ValueTask.CompletedTask; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor new file mode 100644 index 00000000000..c1ae598b89a --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor @@ -0,0 +1,29 @@ +@typeparam TItem +@using MudBlazor + +@if (ParentActions != null && Visible && HasPermission) +{ + if (ParentActions.Type == MudActionType.Dropdown) + { + if (Primary == false) + { + + @if (!string.IsNullOrEmpty(Icon)) + { + + } + @Text + + } + } + else + { + + @if (!string.IsNullOrEmpty(Icon)) + { + + } + @Text + + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor.cs new file mode 100644 index 00000000000..8afef98fb27 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor.cs @@ -0,0 +1,86 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Messages; + +namespace Volo.Abp.MudBlazorUI.Components; + +public partial class MudEntityAction : ComponentBase +{ + [Parameter] + public bool Visible { get; set; } = true; + + [Parameter] + public bool Disabled { get; set; } = false; + + internal bool HasPermission { get; set; } = true; + + [Parameter] + public string Text { get; set; } = default!; + + [Parameter] + public bool Primary { get; set; } + + [Parameter] + public EventCallback Clicked { get; set; } + + [Parameter] + [Obsolete("Use Visible to hide actions based on permissions. Check the permission yourself. It is more performant. This option might be removed in future versions.")] + public string? RequiredPolicy { get; set; } + + [Parameter] + public Color Color { get; set; } = Color.Primary; + + [Parameter] + public Func? ConfirmationMessage { get; set; } + + [Parameter] + public string? Icon { get; set; } + + [CascadingParameter(Name = "ParentActions")] + public IMudEntityActions? ParentActions { get; set; } = default!; + + [Inject] + protected IAuthorizationService AuthorizationService { get; set; } = default!; + + [Inject] + protected IUiMessageService UiMessageService { get; set; } = default!; + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + await SetDefaultValuesAsync(); + +#pragma warning disable CS0618 + if (!RequiredPolicy.IsNullOrEmpty()) + { + HasPermission = await AuthorizationService.IsGrantedAsync(RequiredPolicy!); + } +#pragma warning restore CS0618 + + ParentActions?.AddAction(this); + } + + protected internal virtual async Task ActionClickedAsync() + { + if (ConfirmationMessage != null) + { + if (await UiMessageService.Confirm(ConfirmationMessage())) + { + await InvokeAsync(async () => await Clicked.InvokeAsync()); + } + } + else + { + await Clicked.InvokeAsync(); + } + } + + protected virtual ValueTask SetDefaultValuesAsync() + { + Color = Color.Primary; + return ValueTask.CompletedTask; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityActions.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityActions.razor new file mode 100644 index 00000000000..e60654fdf12 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityActions.razor @@ -0,0 +1,24 @@ +@typeparam TItem +@using MudBlazor +@using Volo.Abp.MudBlazorUI.Components + +@if (Type == MudActionType.Dropdown || DisabledOrNoActions()) +{ + + + @ChildContent + + +} +else +{ + + + @ChildContent + + +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityActions.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityActions.razor.cs new file mode 100644 index 00000000000..35b09f83f33 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityActions.razor.cs @@ -0,0 +1,95 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using MudBlazor; + +namespace Volo.Abp.MudBlazorUI.Components; + +/// +/// Non-generic interface for MudEntityActions to allow cascading parameter matching +/// regardless of the generic type argument. +/// +public interface IMudEntityActions +{ + MudActionType Type { get; } + void AddAction(object action); +} + +public partial class MudEntityActions : ComponentBase, IMudEntityActions +{ + protected readonly List> Actions = new List>(); + protected bool HasPrimaryAction => Actions.Any(t => t.Primary); + protected MudEntityAction? PrimaryAction => Actions.FirstOrDefault(t => t.Primary); + + [Parameter] + public Color ToggleColor { get; set; } = Color.Primary; + + [Parameter] + public string? ToggleText { get; set; } + + [Parameter] + public RenderFragment ChildContent { get; set; } = default!; + + [Parameter] + public MudDataGridEntityActionsColumn EntityActionsColumn { get; set; } = default!; + + [Parameter] + public MudActionType Type { get; set; } = MudActionType.Dropdown; + + [Parameter] + public bool Disabled { get; set; } = false; + + [CascadingParameter] + public MudDataGridEntityActionsColumn? ParentEntityActionsColumn { get; set; } + + [Inject] + public IStringLocalizer UiLocalizer { get; set; } = default!; + + internal void AddAction(MudEntityAction action) + { + Actions.Add(action); + } + + void IMudEntityActions.AddAction(object action) + { + if (action is MudEntityAction typedAction) + { + AddAction(typedAction); + } + } + + protected virtual bool DisabledOrNoActions() + { + return Disabled || (Actions.Any() && Actions.All(t => !t.Visible || !t.HasPermission)); + } + + protected override void OnInitialized() + { + base.OnInitialized(); + ToggleText = UiLocalizer["Actions"]; + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + if (ParentEntityActionsColumn != null) + { + ParentEntityActionsColumn.Displayable = Actions.Any(t => t.Visible && t.HasPermission); + } + + await InvokeAsync(StateHasChanged); + } + + await base.OnAfterRenderAsync(firstRender); + } +} + +public enum MudActionType +{ + Dropdown, + Button +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/ExtensionPropertyModalType.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/ExtensionPropertyModalType.cs new file mode 100644 index 00000000000..0a9c8810100 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/ExtensionPropertyModalType.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public enum ExtensionPropertyModalType : byte +{ + CreateModal = 0, + EditModal = 1 +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudCheckExtensionProperty.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudCheckExtensionProperty.razor new file mode 100644 index 00000000000..1fe1d6352a2 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudCheckExtensionProperty.razor @@ -0,0 +1,14 @@ +@typeparam TEntity +@typeparam TResourceType +@using Volo.Abp.Localization +@inherits MudExtensionPropertyComponentBase + +@if (PropertyInfo != null && Entity != null) +{ + +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudCheckExtensionProperty.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudCheckExtensionProperty.razor.cs new file mode 100644 index 00000000000..7e098005b75 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudCheckExtensionProperty.razor.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Data; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public partial class MudCheckExtensionProperty + where TEntity : IHasExtraProperties +{ + protected bool Value + { + get => Entity.GetProperty(PropertyInfo.Name); + set => Entity.SetProperty(PropertyInfo.Name, value, validate: false); + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeExtensionProperty.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeExtensionProperty.razor new file mode 100644 index 00000000000..142ebcc181b --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeExtensionProperty.razor @@ -0,0 +1,32 @@ +@typeparam TEntity +@typeparam TResourceType +@using Volo.Abp.Localization +@using Volo.Abp.ObjectExtending +@inherits MudExtensionPropertyComponentBase + +@if (PropertyInfo != null && Entity != null) +{ + @if (PropertyInfo.IsDate()) + { + + } + else + { + + + + + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeExtensionProperty.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeExtensionProperty.razor.cs new file mode 100644 index 00000000000..00de58baa54 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeExtensionProperty.razor.cs @@ -0,0 +1,60 @@ +using System; +using Volo.Abp.Data; +using Volo.Abp.ObjectExtending; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public partial class MudDateTimeExtensionProperty + where TEntity : IHasExtraProperties +{ + protected DateTime? Value + { + get => PropertyInfo.GetInputValueOrDefault(Entity.GetProperty(PropertyInfo.Name)); + set => Entity.SetProperty(PropertyInfo.Name, value, false); + } + + protected DateTime? DateValue + { + get => Value?.Date; + set + { + if (value.HasValue) + { + var time = Value?.TimeOfDay ?? TimeSpan.Zero; + Value = value.Value.Date + time; + } + else + { + Value = null; + } + } + } + + protected TimeSpan? TimeValue + { + get => Value?.TimeOfDay; + set + { + if (Value.HasValue && value.HasValue) + { + Value = Value.Value.Date + value.Value; + } + } + } + + protected string GetDateFormat() + { + var dataFormatString = PropertyInfo.GetDataFormatStringOrNull(); + if (!string.IsNullOrEmpty(dataFormatString)) + { + return dataFormatString.Replace("{0:", "").Replace("}", ""); + } + + return PropertyInfo.IsDate() ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm"; + } + + protected string GetTimeLabel() + { + return "Time"; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeOffsetExtensionProperty.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeOffsetExtensionProperty.razor new file mode 100644 index 00000000000..ef1025f9142 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeOffsetExtensionProperty.razor @@ -0,0 +1,32 @@ +@typeparam TEntity +@typeparam TResourceType +@using Volo.Abp.Localization +@using Volo.Abp.ObjectExtending +@inherits MudExtensionPropertyComponentBase + +@if (PropertyInfo != null && Entity != null) +{ + @if (PropertyInfo.IsDate()) + { + + } + else + { + + + + + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeOffsetExtensionProperty.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeOffsetExtensionProperty.razor.cs new file mode 100644 index 00000000000..ee2a965004b --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudDateTimeOffsetExtensionProperty.razor.cs @@ -0,0 +1,93 @@ +using System; +using Volo.Abp.Data; +using Volo.Abp.ObjectExtending; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public partial class MudDateTimeOffsetExtensionProperty + where TEntity : IHasExtraProperties +{ + protected DateTimeOffset? Value + { + get + { + var raw = Entity.GetProperty(PropertyInfo.Name); + return raw switch + { + null => null, + DateTimeOffset dto => dto, + DateTime dt => dt.Kind switch + { + DateTimeKind.Utc => new DateTimeOffset(dt, TimeSpan.Zero), + DateTimeKind.Local => new DateTimeOffset(dt), + _ => new DateTimeOffset(DateTime.SpecifyKind(dt, DateTimeKind.Utc), TimeSpan.Zero) + }, + _ => null + }; + } + set => Entity.SetProperty(PropertyInfo.Name, value, false); + } + + protected DateTime? DateOnlyValue + { + get => Value?.DateTime.Date; + set + { + if (value.HasValue) + { + Value = new DateTimeOffset(value.Value); + } + else + { + Value = null; + } + } + } + + protected DateTime? DateValue + { + get => Value?.DateTime.Date; + set + { + if (value.HasValue) + { + var time = Value?.DateTime.TimeOfDay ?? TimeSpan.Zero; + var offset = Value?.Offset ?? TimeSpan.Zero; + Value = new DateTimeOffset(value.Value.Date + time, offset); + } + else + { + Value = null; + } + } + } + + protected TimeSpan? TimeValue + { + get => Value?.DateTime.TimeOfDay; + set + { + if (Value.HasValue && value.HasValue) + { + var offset = Value.Value.Offset; + Value = new DateTimeOffset(Value.Value.DateTime.Date + value.Value, offset); + } + } + } + + protected string GetDateFormat() + { + var dataFormatString = PropertyInfo.GetDataFormatStringOrNull(); + if (!string.IsNullOrEmpty(dataFormatString)) + { + return dataFormatString.Replace("{0:", "").Replace("}", ""); + } + + return PropertyInfo.IsDate() ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm"; + } + + protected string GetTimeLabel() + { + return "Time"; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudExtensionProperties.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudExtensionProperties.razor new file mode 100644 index 00000000000..8208f28e8c9 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudExtensionProperties.razor @@ -0,0 +1,32 @@ +@typeparam TEntityType +@typeparam TResourceType +@using Volo.Abp.Data + +@{ + Entity.SetDefaultsForExtraProperties(); + + foreach (var propertyInfo in Properties) + { + if (!propertyInfo.Name.EndsWith("_Text")) + { + if (propertyInfo.IsEnum()) + { + + } + else if (!propertyInfo.Lookup.Url.IsNullOrEmpty()) + { + + } + else + { + var inputType = propertyInfo.GetInputType(); + __builder.OpenComponent(0, inputType.MakeGenericType(new[] { typeof(TEntityType), typeof(TResourceType) })); + __builder.AddAttribute(1, "PropertyInfo", propertyInfo); + __builder.AddAttribute(2, "Entity", Entity); + __builder.AddAttribute(3, "LH", LH); + __builder.AddAttribute(4, "ModalType", ModalType); + __builder.CloseComponent(); + } + } + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudExtensionProperties.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudExtensionProperties.razor.cs new file mode 100644 index 00000000000..6ff16ea0512 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudExtensionProperties.razor.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Immutable; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using Volo.Abp.Data; +using Volo.Abp.ObjectExtending; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public partial class MudExtensionProperties : ComponentBase + where TEntityType : IHasExtraProperties +{ + [Inject] + public IStringLocalizerFactory StringLocalizerFactory { get; set; } = default!; + + [Parameter] + public AbpMudBlazorMessageLocalizerHelper LH { get; set; } = default!; + + [Parameter] + public TEntityType Entity { get; set; } = default!; + + [Inject] + public IServiceProvider ServiceProvider { get; set; } = default!; + + [Parameter] + public ExtensionPropertyModalType? ModalType { get; set; } + + public ImmutableList Properties { get; set; } = ImmutableList.Empty; + + protected override async Task OnInitializedAsync() + { + Properties = + (await ObjectExtensionManager.Instance.GetPropertiesAndCheckPolicyAsync(ServiceProvider)) + .Where(p => ModalType == ExtensionPropertyModalType.CreateModal + ? p.UI.CreateModal.IsVisible + : p.UI.EditModal.IsVisible) + .ToImmutableList(); + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudExtensionPropertyComponentBase.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudExtensionPropertyComponentBase.cs new file mode 100644 index 00000000000..36aa652b7d2 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudExtensionPropertyComponentBase.cs @@ -0,0 +1,64 @@ +using System.ComponentModel.DataAnnotations; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using Volo.Abp.Data; +using Volo.Abp.Localization; +using Volo.Abp.MudBlazorUI.Validation; +using Volo.Abp.ObjectExtending; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public abstract class MudExtensionPropertyComponentBase : OwningComponentBase + where TEntity : IHasExtraProperties +{ + [Inject] + public IStringLocalizerFactory StringLocalizerFactory { get; set; } = default!; + + [Inject] + public IAbpEnumLocalizer AbpEnumLocalizer { get; set; } = default!; + + [Parameter] + public TEntity Entity { get; set; } = default!; + + [Parameter] + public ObjectExtensionPropertyInfo PropertyInfo { get; set; } = default!; + + [Parameter] + public AbpMudBlazorMessageLocalizerHelper LH { get; set; } = default!; + + [Parameter] + public ExtensionPropertyModalType? ModalType { get; set; } + + protected virtual string? Validate(object? value) + { + var validationAttributes = PropertyInfo.GetValidationAttributes(); + var validationContext = new ValidationContext(Entity) + { + DisplayName = PropertyInfo.Name, + MemberName = PropertyInfo.Name + }; + + foreach (var validationAttribute in validationAttributes) + { + var result = validationAttribute.GetValidationResult(value, validationContext); + if (result == ValidationResult.Success || result == null) + { + continue; + } + + var errorMessage = result.ErrorMessage; + if (LH != null && errorMessage != null) + { + var formattedErrorMessage = MudValidationAttributeHelper.GetDefaultErrorMessage(validationAttribute); + var errorMessageString = MudValidationAttributeHelper.RevertErrorMessagePlaceholders(formattedErrorMessage); + errorMessage = LH.Localize(errorMessageString); + } + + return errorMessage; + } + + return null; + } + + protected bool IsReadonlyField => ModalType is ExtensionPropertyModalType.EditModal && PropertyInfo.UI.EditModal.IsReadOnly; +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor new file mode 100644 index 00000000000..812049a795c --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor @@ -0,0 +1,20 @@ +#nullable enable +@typeparam TEntity +@typeparam TResourceType +@using Volo.Abp.Localization +@inherits MudExtensionPropertyComponentBase + +@if (PropertyInfo != null && Entity != null) +{ + +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor.cs new file mode 100644 index 00000000000..a9b75b99b51 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor.cs @@ -0,0 +1,109 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.Web.Extensibility; +using Volo.Abp.Data; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public partial class MudLookupExtensionProperty + where TEntity : IHasExtraProperties +{ + protected List> LookupItems = new(); + + [Inject] + public ILookupApiRequestService LookupApiService { get; set; } = default!; + + public string TextPropertyName => PropertyInfo.Name + "_Text"; + + private MudSelectItem? _selectedItem; + + public MudSelectItem SelectedItem { + get => _selectedItem!; + set => _selectedItem = value; + } + + public object? SelectedValue + { + get => Entity.GetProperty(PropertyInfo.Name); + set + { + Entity.SetProperty(PropertyInfo.Name, value, false); + UpdateLookupTextProperty(value); + } + } + + protected override void OnParametersSet() + { + var value = Entity.GetProperty(PropertyInfo.Name); + var text = Entity.GetProperty(TextPropertyName); + if (value != null && text != null) + { + SelectedItem = new MudSelectItem + { + Text = text.ToString()!, + Value = value + }; + LookupItems = new List> { SelectedItem }; + } + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + await base.OnAfterRenderAsync(firstRender); + + if (firstRender) + { + LookupItems = await GetLookupItemsAsync(string.Empty); + StateHasChanged(); + } + } + + protected virtual void UpdateLookupTextProperty(object? value) + { + var selectedItemText = LookupItems.SingleOrDefault(t => t.Value?.Equals(value) == true)?.Text; + Entity.SetProperty(TextPropertyName, selectedItemText); + } + + protected virtual async Task>> GetLookupItemsAsync(string filter) + { + var selectItems = new List>(); + + var url = PropertyInfo.Lookup.Url; + if (!string.IsNullOrEmpty(filter)) + { + url += $"?{PropertyInfo.Lookup.FilterParamName}={filter.Trim()}"; + } + + var response = await LookupApiService.SendAsync(url); + + var document = JsonDocument.Parse(response); + var itemsArrayProp = document.RootElement.GetProperty(PropertyInfo.Lookup.ResultListPropertyName); + foreach (var item in itemsArrayProp.EnumerateArray()) + { + selectItems.Add(new MudSelectItem + { + Text = item.GetProperty(PropertyInfo.Lookup.DisplayPropertyName).GetString()!, + Value = JsonSerializer.Deserialize(item.GetProperty(PropertyInfo.Lookup.ValuePropertyName).GetRawText(), PropertyInfo.Type)! + }); + } + + return selectItems; + } + + protected virtual Task SelectedItemChanged(MudSelectItem item) + { + SelectedItem = item; + SelectedValue = item?.Value; + return Task.CompletedTask; + } + + protected virtual async Task?>> SearchAsync(string? value, CancellationToken token) + { + LookupItems = await GetLookupItemsAsync(value ?? string.Empty); + return LookupItems!; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudSelectExtensionProperty.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudSelectExtensionProperty.razor new file mode 100644 index 00000000000..902691d5f20 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudSelectExtensionProperty.razor @@ -0,0 +1,18 @@ +@typeparam TEntity +@typeparam TResourceType +@using Volo.Abp.Localization +@inherits MudExtensionPropertyComponentBase + +@if (PropertyInfo != null && Entity != null) +{ + + @foreach (var item in SelectItems) + { + @item.Text + } + +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudSelectExtensionProperty.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudSelectExtensionProperty.razor.cs new file mode 100644 index 00000000000..ee9f5b2bb71 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudSelectExtensionProperty.razor.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using Microsoft.Extensions.Localization; +using Volo.Abp.Data; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public partial class MudSelectExtensionProperty + where TEntity : IHasExtraProperties +{ + protected List> SelectItems = new(); + + public int? SelectedValue + { + get => Entity.GetProperty(PropertyInfo.Name, Nullable.GetUnderlyingType(PropertyInfo.Type!) != null ? null : 0); + set => Entity.SetProperty(PropertyInfo.Name, value, false); + } + + protected virtual List> GetSelectItemsFromEnum() + { + var selectItems = new List>(); + + var isNullableType = Nullable.GetUnderlyingType(PropertyInfo.Type!) != null; + var enumType = isNullableType + ? Nullable.GetUnderlyingType(PropertyInfo.Type)! + : PropertyInfo.Type; + + if (isNullableType) + { + selectItems.Add(new MudSelectItem()); + } + + foreach (var enumValue in enumType.GetEnumValues()) + { + selectItems.Add(new MudSelectItem + { + Value = (int)enumValue, + Text = AbpEnumLocalizer.GetString(enumType, enumValue, new[] { StringLocalizerFactory.CreateDefaultOrNull() }) + }); + } + + return selectItems; + } + + protected override void OnParametersSet() + { + SelectItems = GetSelectItemsFromEnum(); + StateHasChanged(); + + if (!Entity.HasProperty(PropertyInfo.Name)) + { + var isNullableType = Nullable.GetUnderlyingType(PropertyInfo.Type!) != null; + if (!isNullableType) + { + SelectedValue = (int)PropertyInfo.Type.GetEnumValues().GetValue(0)!; + } + } + } +} + +public class MudSelectItem +{ + public string Text { get; set; } = default!; + public TValue Value { get; set; } = default!; +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextAreaExtensionProperty.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextAreaExtensionProperty.razor new file mode 100644 index 00000000000..2aa3e55f752 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextAreaExtensionProperty.razor @@ -0,0 +1,16 @@ +@typeparam TEntity +@typeparam TResourceType +@using Volo.Abp.Localization +@inherits MudExtensionPropertyComponentBase + +@if (PropertyInfo != null && Entity != null) +{ + +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextAreaExtensionProperty.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextAreaExtensionProperty.razor.cs new file mode 100644 index 00000000000..84c8017c74c --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextAreaExtensionProperty.razor.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Data; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public partial class MudTextAreaExtensionProperty + where TEntity : IHasExtraProperties +{ + protected string? Value + { + get => PropertyInfo.GetTextInputValueOrNull(Entity.GetProperty(PropertyInfo.Name)); + set => Entity.SetProperty(PropertyInfo.Name, value, validate: false); + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextExtensionProperty.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextExtensionProperty.razor new file mode 100644 index 00000000000..aaa7326a85d --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextExtensionProperty.razor @@ -0,0 +1,16 @@ +@typeparam TEntity +@typeparam TResourceType +@using Volo.Abp.Localization +@inherits MudExtensionPropertyComponentBase + +@if (PropertyInfo != null && Entity != null) +{ + +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextExtensionProperty.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextExtensionProperty.razor.cs new file mode 100644 index 00000000000..f100372b373 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextExtensionProperty.razor.cs @@ -0,0 +1,101 @@ +using System.ComponentModel.DataAnnotations; +using System.Linq; +using MudBlazor; +using Volo.Abp.Data; +using Volo.Abp.Reflection; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public partial class MudTextExtensionProperty + where TEntity : IHasExtraProperties +{ + protected string? Value + { + get => PropertyInfo.GetTextInputValueOrNull(Entity.GetProperty(PropertyInfo.Name)); + set => Entity.SetProperty(PropertyInfo.Name, value, validate: false); + } + + protected InputType GetInputType() + { + foreach (var attribute in PropertyInfo.Attributes) + { + if (attribute is DataTypeAttribute dataTypeAttribute) + { + return dataTypeAttribute.DataType switch + { + DataType.Password => InputType.Password, + DataType.EmailAddress => InputType.Email, + DataType.Url => InputType.Url, + DataType.PhoneNumber => InputType.Telephone, + _ => InputType.Text + }; + } + + if (attribute is EmailAddressAttribute) + { + return InputType.Email; + } + + if (attribute is UrlAttribute) + { + return InputType.Url; + } + + if (attribute is PhoneAttribute) + { + return InputType.Telephone; + } + } + + return InputType.Text; + } + + protected InputMode GetInputMode() + { + foreach (var attribute in PropertyInfo.Attributes) + { + if (attribute is DataTypeAttribute dataTypeAttribute) + { + return dataTypeAttribute.DataType switch + { + DataType.EmailAddress => InputMode.email, + DataType.Url => InputMode.url, + DataType.PhoneNumber => InputMode.tel, + _ => GetInputModeFromType() + }; + } + + if (attribute is EmailAddressAttribute) + { + return InputMode.email; + } + + if (attribute is UrlAttribute) + { + return InputMode.url; + } + + if (attribute is PhoneAttribute) + { + return InputMode.tel; + } + } + + return GetInputModeFromType(); + } + + private InputMode GetInputModeFromType() + { + if (TypeHelper.IsFloatingType(PropertyInfo.Type)) + { + return InputMode.@decimal; + } + + if (MudBlazorUiObjectExtensionPropertyInfoExtensions.NumberTypes.Contains(PropertyInfo.Type)) + { + return InputMode.numeric; + } + + return InputMode.text; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTimeExtensionProperty.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTimeExtensionProperty.razor new file mode 100644 index 00000000000..2c4c4d79b4c --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTimeExtensionProperty.razor @@ -0,0 +1,13 @@ +@typeparam TEntity +@typeparam TResourceType +@using Volo.Abp.Localization +@inherits MudExtensionPropertyComponentBase + +@if (PropertyInfo != null && Entity != null) +{ + +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTimeExtensionProperty.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTimeExtensionProperty.razor.cs new file mode 100644 index 00000000000..be83d980a97 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTimeExtensionProperty.razor.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Data; + +namespace Volo.Abp.MudBlazorUI.Components.ObjectExtending; + +public partial class MudTimeExtensionProperty + where TEntity : IHasExtraProperties +{ + protected TimeSpan? Value + { + get => PropertyInfo.GetInputValueOrDefault(Entity.GetProperty(PropertyInfo.Name)); + set => Entity.SetProperty(PropertyInfo.Name, value, false); + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/PageAlert.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/PageAlert.razor new file mode 100644 index 00000000000..81798d124f0 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/PageAlert.razor @@ -0,0 +1,18 @@ +@using MudBlazor + +@foreach (var alert in Alerts) +{ + if (alert.IsVisible) + { + + @if (!string.IsNullOrEmpty(alert.AlertMessage.Title)) + { + @alert.AlertMessage.Title + } + @alert.AlertMessage.Text + + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/PageAlert.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/PageAlert.razor.cs new file mode 100644 index 00000000000..bec9130877e --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/PageAlert.razor.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Linq; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Routing; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Alerts; + +namespace Volo.Abp.MudBlazorUI.Components; + +public partial class PageAlert : ComponentBase, IDisposable +{ + private List Alerts = new List(); + + [Inject] + protected IAlertManager AlertManager { get; set; } = default!; + + [Inject] + protected NavigationManager NavigationManager { get; set; } = default!; + + protected override void OnInitialized() + { + base.OnInitialized(); + NavigationManager.LocationChanged += NavigationManager_LocationChanged; + AlertManager.Alerts.CollectionChanged += Alerts_CollectionChanged; + + Alerts.AddRange(AlertManager.Alerts.Select(t => new AlertWrapper + { + AlertMessage = t, + IsVisible = true + })); + } + + //Since Blazor WASM doesn't support scoped dependency, we need to clear alerts on each location changed event. + private void NavigationManager_LocationChanged(object? sender, LocationChangedEventArgs e) + { + AlertManager.Alerts.Clear(); + Alerts.Clear(); + } + + private void Alerts_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) + { + if (e.Action == NotifyCollectionChangedAction.Add) + { + foreach (var item in e.NewItems!) + { + Alerts.Add(new AlertWrapper + { + AlertMessage = (AlertMessage)item, + IsVisible = true + }); + } + } + InvokeAsync(StateHasChanged); + } + + protected virtual Severity GetAlertSeverity(AlertType alertType) + { + return alertType switch + { + AlertType.Info => Severity.Info, + AlertType.Success => Severity.Success, + AlertType.Warning => Severity.Warning, + AlertType.Danger => Severity.Error, + _ => Severity.Normal, + }; + } + + public void Dispose() + { + NavigationManager.LocationChanged -= NavigationManager_LocationChanged; + AlertManager.Alerts.CollectionChanged -= Alerts_CollectionChanged; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/UiMessageAlert.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/UiMessageAlert.razor new file mode 100644 index 00000000000..15233cd198b --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/UiMessageAlert.razor @@ -0,0 +1,68 @@ +@using MudBlazor + + + + @if (!string.IsNullOrEmpty(Title)) + { + @Title + } + + +
+ @if (ShowMessageIcon) + { + + } + + @if (!IsMessageHtmlMarkup) + { + @Message + } + else + { + @((MarkupString)Message) + } + +
+
+ +
+ @if (IsConfirmation) + { + + @if (Options?.CancelButtonIcon != null) + { + + } + @CancelButtonText + + + @if (Options?.ConfirmButtonIcon != null) + { + + } + @ConfirmButtonText + + } + else + { + + @if (Options?.OkButtonIcon != null) + { + + } + @OkButtonText + + } +
+
+
diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/UiMessageAlert.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/UiMessageAlert.razor.cs new file mode 100644 index 00000000000..58ed2fae1b8 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/UiMessageAlert.razor.cs @@ -0,0 +1,155 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Messages; + +namespace Volo.Abp.MudBlazorUI.Components; + +public partial class UiMessageAlert : ComponentBase, IDisposable +{ + private bool _visible; + private readonly DialogOptions _dialogOptions = new() + { + CloseOnEscapeKey = false, + BackdropClick = false, + MaxWidth = MaxWidth.Small, + FullWidth = true + }; + + protected virtual bool IsConfirmation + => MessageType == UiMessageType.Confirmation; + + protected virtual bool CenterMessage + => Options?.CenterMessage ?? true; + + protected virtual bool ShowMessageIcon + => Options?.ShowMessageIcon ?? true; + + protected virtual bool IsMessageHtmlMarkup + => Options?.IsMessageHtmlMarkup ?? false; + + protected virtual string MessageIcon => MessageType switch + { + UiMessageType.Info => Icons.Material.Filled.Info, + UiMessageType.Success => Icons.Material.Filled.CheckCircle, + UiMessageType.Warning => Icons.Material.Filled.Warning, + UiMessageType.Error => Icons.Material.Filled.Error, + UiMessageType.Confirmation => Icons.Material.Filled.Help, + _ => Icons.Material.Filled.Info, + }; + + protected virtual Color MessageIconColor => MessageType switch + { + UiMessageType.Info => Color.Info, + UiMessageType.Success => Color.Success, + UiMessageType.Warning => Color.Warning, + UiMessageType.Error => Color.Error, + UiMessageType.Confirmation => Color.Default, + _ => Color.Default, + }; + + protected virtual string OkButtonText + => Options?.OkButtonText ?? "OK"; + + protected virtual string ConfirmButtonText + => Options?.ConfirmButtonText ?? "Confirm"; + + protected virtual string CancelButtonText + => Options?.CancelButtonText ?? "Cancel"; + + [Parameter] public UiMessageType MessageType { get; set; } + + [Parameter] public string? Title { get; set; } + + [Parameter] public string Message { get; set; } = default!; + + [Parameter] public TaskCompletionSource? Callback { get; set; } + + [Parameter] public UiMessageOptions? Options { get; set; } + + [Parameter] public EventCallback Okayed { get; set; } + + [Parameter] public EventCallback Confirmed { get; set; } + + [Parameter] public EventCallback Canceled { get; set; } + + [Inject] protected MudBlazorUiMessageService? UiMessageService { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + + if (UiMessageService != null) + { + UiMessageService.MessageReceived += OnMessageReceived; + } + } + + private async void OnMessageReceived(object? sender, UiMessageEventArgs e) + { + MessageType = e.MessageType; + Message = e.Message; + Title = e.Title; + Options = e.Options; + Callback = e.Callback; + + await ShowMessageAlert(); + } + + protected virtual async Task ShowMessageAlert() + { + await InvokeAsync(() => + { + _visible = true; + StateHasChanged(); + }); + } + + protected virtual async Task HideMessageAlert() + { + await InvokeAsync(() => + { + _visible = false; + StateHasChanged(); + }); + } + + public void Dispose() + { + if (UiMessageService != null) + { + UiMessageService.MessageReceived -= OnMessageReceived; + } + } + + protected async Task OnOkClicked() + { + await HideMessageAlert(); + await Okayed.InvokeAsync(null); + } + + protected async Task OnConfirmClicked() + { + await HideMessageAlert(); + + if (IsConfirmation && Callback != null) + { + Callback.SetResult(true); + } + + await Confirmed.InvokeAsync(null); + } + + protected async Task OnCancelClicked() + { + await HideMessageAlert(); + + if (IsConfirmation && Callback != null) + { + Callback.SetResult(false); + } + + await Canceled.InvokeAsync(null); + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/UiNotificationAlert.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/UiNotificationAlert.razor new file mode 100644 index 00000000000..fdf1b7cbe4f --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/UiNotificationAlert.razor @@ -0,0 +1 @@ +@using MudBlazor diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/UiNotificationAlert.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/UiNotificationAlert.razor.cs new file mode 100644 index 00000000000..ac5c3a8c0db --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/UiNotificationAlert.razor.cs @@ -0,0 +1,82 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Notifications; +using Volo.Abp.Localization; + +namespace Volo.Abp.MudBlazorUI.Components; + +public partial class UiNotificationAlert : ComponentBase, IDisposable +{ + [Parameter] public UiNotificationType NotificationType { get; set; } + + [Parameter] public string Message { get; set; } = default!; + + [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 MudBlazorUiNotificationService? UiNotificationService { get; set; } + + [Inject] protected ISnackbar Snackbar { get; set; } = default!; + + [Inject] protected IStringLocalizerFactory StringLocalizerFactory { get; set; } = default!; + + protected virtual Severity GetSeverity(UiNotificationType notificationType) + { + return notificationType switch + { + UiNotificationType.Info => Severity.Info, + UiNotificationType.Success => Severity.Success, + UiNotificationType.Warning => Severity.Warning, + UiNotificationType.Error => Severity.Error, + _ => Severity.Normal, + }; + } + + protected override void OnInitialized() + { + base.OnInitialized(); + + if (UiNotificationService != null) + { + UiNotificationService.NotificationReceived += OnNotificationReceived; + } + } + + protected virtual async void OnNotificationReceived(object? sender, UiNotificationEventArgs e) + { + NotificationType = e.NotificationType; + Message = e.Message; + Title = e.Title; + Options = e.Options; + + var message = !string.IsNullOrEmpty(Title) + ? $"{Title}
{Message}" + : Message; + + await InvokeAsync(() => + { + Snackbar.Add(message, GetSeverity(e.NotificationType), config => + { + config.RequireInteraction = false; + config.ShowCloseIcon = true; + config.CloseAfterNavigation = true; + }); + }); + } + + public virtual void Dispose() + { + if (UiNotificationService != null) + { + UiNotificationService.NotificationReceived -= OnNotificationReceived; + } + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/UiPageProgress.razor b/framework/src/Volo.Abp.MudBlazorUI/Components/UiPageProgress.razor new file mode 100644 index 00000000000..d60e4734bef --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/UiPageProgress.razor @@ -0,0 +1,10 @@ +@using MudBlazor + +@if (Visible) +{ + +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/UiPageProgress.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/UiPageProgress.razor.cs new file mode 100644 index 00000000000..e85349b25ad --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/UiPageProgress.razor.cs @@ -0,0 +1,56 @@ +using System; +using Microsoft.AspNetCore.Components; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Progression; + +namespace Volo.Abp.MudBlazorUI.Components; + +public partial class UiPageProgress : ComponentBase, IDisposable +{ + protected int? Percentage { get; set; } + + protected bool Visible { get; set; } + + protected Color Color { get; set; } = Color.Primary; + + [Inject] protected IUiPageProgressService? UiPageProgressService { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + + if (UiPageProgressService != null) + { + UiPageProgressService.ProgressChanged += OnProgressChanged; + } + } + + private async void OnProgressChanged(object? sender, UiPageProgressEventArgs e) + { + Percentage = e.Percentage; + Visible = e.Percentage == null || (e.Percentage >= 0 && e.Percentage <= 100); + Color = GetColor(e.Options.Type); + + await InvokeAsync(StateHasChanged); + } + + public virtual void Dispose() + { + if (UiPageProgressService != null) + { + UiPageProgressService.ProgressChanged -= OnProgressChanged; + } + } + + protected virtual Color GetColor(UiPageProgressType pageProgressType) + { + return pageProgressType switch + { + UiPageProgressType.Info => Color.Info, + UiPageProgressType.Success => Color.Success, + UiPageProgressType.Warning => Color.Warning, + UiPageProgressType.Error => Color.Error, + _ => Color.Primary, + }; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/FodyWeavers.xml b/framework/src/Volo.Abp.MudBlazorUI/FodyWeavers.xml new file mode 100644 index 00000000000..7e9f94ead6f --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.MudBlazorUI/FodyWeavers.xsd b/framework/src/Volo.Abp.MudBlazorUI/FodyWeavers.xsd new file mode 100644 index 00000000000..ffa6fc4b782 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.MudBlazorUI/MudBlazorExtensionPropertyPolicyChecker.cs b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorExtensionPropertyPolicyChecker.cs new file mode 100644 index 00000000000..bd021b593d9 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorExtensionPropertyPolicyChecker.cs @@ -0,0 +1,37 @@ +using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Features; +using Volo.Abp.GlobalFeatures; +using Volo.Abp.ObjectExtending; + +namespace Volo.Abp.MudBlazorUI; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(ExtensionPropertyPolicyChecker))] +public class MudBlazorExtensionPropertyPolicyChecker : ExtensionPropertyPolicyChecker +{ + protected IFeatureChecker FeatureChecker { get; } + protected IPermissionChecker PermissionChecker { get; } + + public MudBlazorExtensionPropertyPolicyChecker(IFeatureChecker featureChecker, IPermissionChecker permissionChecker) + { + FeatureChecker = featureChecker; + PermissionChecker = permissionChecker; + } + + protected override Task CheckGlobalFeaturesAsync(string featureName) + { + return Task.FromResult(GlobalFeatureManager.Instance.IsEnabled(featureName)); + } + + protected async override Task CheckFeaturesAsync(string featureName) + { + return await FeatureChecker.IsEnabledAsync(featureName); + } + + protected async override Task CheckPermissionsAsync(string permissionName) + { + return await PermissionChecker.IsGrantedAsync(permissionName); + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiMessageService.cs b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiMessageService.cs new file mode 100644 index 00000000000..4d329feaec0 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiMessageService.cs @@ -0,0 +1,93 @@ +using System; +using System.Threading.Tasks; +using Localization.Resources.AbpUi; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.AspNetCore.Components.Messages; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.MudBlazorUI; + +[Dependency(ReplaceServices = true)] +public class MudBlazorUiMessageService : IUiMessageService, IScopedDependency +{ + /// + /// An event raised after the message is received. Used to notify the message dialog. + /// + public event EventHandler? MessageReceived; + + private readonly IStringLocalizer _localizer; + + public ILogger Logger { get; set; } + + public MudBlazorUiMessageService(IStringLocalizer localizer) + { + _localizer = localizer; + Logger = NullLogger.Instance; + } + + public Task Info(string message, string? title = null, Action? options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Info, message, title, uiMessageOptions)); + + return Task.CompletedTask; + } + + public Task Success(string message, string? title = null, Action? options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Success, message, title, uiMessageOptions)); + + return Task.CompletedTask; + } + + public Task Warn(string message, string? title = null, Action? options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Warning, message, title, uiMessageOptions)); + + return Task.CompletedTask; + } + + public Task Error(string message, string? title = null, Action? options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Error, message, title, uiMessageOptions)); + + return Task.CompletedTask; + } + + public Task Confirm(string message, string? title = null, Action? options = null) + { + var uiMessageOptions = CreateDefaultOptions(); + options?.Invoke(uiMessageOptions); + + var callback = new TaskCompletionSource(); + + MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Confirmation, message, title, uiMessageOptions, callback)); + + return callback.Task; + } + + protected virtual UiMessageOptions CreateDefaultOptions() + { + return new UiMessageOptions + { + CenterMessage = true, + ShowMessageIcon = true, + OkButtonText = _localizer["Ok"], + CancelButtonText = _localizer["Cancel"], + ConfirmButtonText = _localizer["Yes"], + }; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiNotificationService.cs b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiNotificationService.cs new file mode 100644 index 00000000000..e8fd9b493ab --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiNotificationService.cs @@ -0,0 +1,60 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Components.Notifications; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.MudBlazorUI; + +[Dependency(ReplaceServices = true)] +public class MudBlazorUiNotificationService : IUiNotificationService, IScopedDependency +{ + /// + /// An event raised after the notification is received. + /// + public event EventHandler? NotificationReceived; + + public Task Info(string message, string? title = null, Action? options = null) + { + var uiNotificationOptions = CreateDefaultOptions(); + options?.Invoke(uiNotificationOptions); + + NotificationReceived?.Invoke(this, new UiNotificationEventArgs(UiNotificationType.Info, message, title, uiNotificationOptions)); + + return Task.CompletedTask; + } + + 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, 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, 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.MudBlazorUI/MudBlazorUiObjectExtensionPropertyInfoExtensions.cs b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiObjectExtensionPropertyInfoExtensions.cs new file mode 100644 index 00000000000..db55e67058a --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiObjectExtensionPropertyInfoExtensions.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Frozen; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using Volo.Abp.MudBlazorUI.Components.ObjectExtending; +using Volo.Abp.ObjectExtending; +using Volo.Abp.Reflection; + +namespace Volo.Abp.MudBlazorUI; + +public static class MudBlazorUiObjectExtensionPropertyInfoExtensions +{ + private static readonly Type[] DateTimeTypes = + { + typeof(DateTime), + typeof(DateTime?), + typeof(DateTimeOffset), + typeof(DateTimeOffset?) + }; + + internal static readonly FrozenSet NumberTypes = new HashSet + { + typeof(int), + typeof(long), + typeof(byte), + typeof(sbyte), + typeof(short), + typeof(ushort), + typeof(uint), + typeof(ulong), + typeof(float), + typeof(double), + typeof(decimal), + typeof(int?), + typeof(long?), + typeof(byte?), + typeof(sbyte?), + typeof(short?), + typeof(ushort?), + typeof(uint?), + typeof(ulong?), + typeof(float?), + typeof(double?), + typeof(decimal?) + }.ToFrozenSet(); + + private static readonly FrozenSet TextEditSupportedAttributeTypes = new HashSet + { + typeof(EmailAddressAttribute), + typeof(UrlAttribute), + typeof(PhoneAttribute) + }.ToFrozenSet(); + + public static bool IsDate(this IBasicObjectExtensionPropertyInfo property) + { + return DateTimeTypes.Contains(property.Type) && + property.GetDataTypeOrNull() == DataType.Date; + } + + public static bool IsDateTime(this IBasicObjectExtensionPropertyInfo property) + { + return DateTimeTypes.Contains(property.Type) && + !property.IsDate(); + } + + public static DataType? GetDataTypeOrNull(this IBasicObjectExtensionPropertyInfo property) + { + return property + .Attributes + .OfType() + .FirstOrDefault()?.DataType; + } + + public static string? GetDateEditInputFormatOrNull(this IBasicObjectExtensionPropertyInfo property) + { + var dataFormatString = property.GetDataFormatStringOrNull(); + if (dataFormatString != null) + { + return dataFormatString; + } + + if (property.IsDate()) + { + return "{0:yyyy-MM-dd}"; + } + + if (property.IsDateTime()) + { + return "{0:yyyy-MM-ddTHH:mm}"; + } + + return null; + } + + public static string? GetDataFormatStringOrNull(this IBasicObjectExtensionPropertyInfo property) + { + return property + .Attributes + .OfType() + .FirstOrDefault()?.DataFormatString; + } + + public static string? GetTextInputValueOrNull(this IBasicObjectExtensionPropertyInfo property, object? value) + { + if (value == null) + { + return null; + } + + if (TypeHelper.IsFloatingType(property.Type)) + { + return value.ToString()?.Replace(',', '.'); + } + + return value.ToString(); + } + + public static T? GetInputValueOrDefault(this IBasicObjectExtensionPropertyInfo property, object? value) + { + if (value == null) + { + return default; + } + + return (T)value; + } + + public static Type GetInputType(this ObjectExtensionPropertyInfo propertyInfo) + { + foreach (var attribute in propertyInfo.Attributes) + { + var inputTypeByAttribute = GetInputTypeFromAttributeOrNull(attribute, propertyInfo.Type); + if (inputTypeByAttribute != null) + { + return inputTypeByAttribute; + } + } + return GetInputTypeFromTypeOrNull(propertyInfo.Type) + ?? typeof(MudTextExtensionProperty<,>); //default + } + + public static bool IsEnum(this ObjectExtensionPropertyInfo propertyInfo) + { + return propertyInfo.Type.IsEnum || TypeHelper.IsNullableEnum(propertyInfo.Type); + } + + private static Type? GetInputTypeFromAttributeOrNull(Attribute attribute, Type propertyType) + { + var hasTextEditSupport = TextEditSupportedAttributeTypes.Any(t => t == attribute.GetType()); + + if (hasTextEditSupport) + { + return typeof(MudTextExtensionProperty<,>); + } + + if (attribute is DataTypeAttribute dataTypeAttribute) + { + switch (dataTypeAttribute.DataType) + { + case DataType.Password: + case DataType.EmailAddress: + case DataType.Url: + case DataType.PhoneNumber: + return typeof(MudTextExtensionProperty<,>); + case DataType.Date: + case DataType.DateTime: + return propertyType == typeof(DateTimeOffset) || propertyType == typeof(DateTimeOffset?) + ? typeof(MudDateTimeOffsetExtensionProperty<,>) + : typeof(MudDateTimeExtensionProperty<,>); + case DataType.Time: + return typeof(MudTimeExtensionProperty<,>); + case DataType.MultilineText: + return typeof(MudTextAreaExtensionProperty<,>); + } + } + + return null; + } + + private static Type? GetInputTypeFromTypeOrNull(Type type) + { + if (type == typeof(bool)) + { + return typeof(MudCheckExtensionProperty<,>); + } + + if (type == typeof(DateTime) || type == typeof(DateTime?)) + { + return typeof(MudDateTimeExtensionProperty<,>); + } + + if (type == typeof(DateTimeOffset) || type == typeof(DateTimeOffset?)) + { + return typeof(MudDateTimeOffsetExtensionProperty<,>); + } + + if (NumberTypes.Contains(type)) + { + return typeof(MudTextExtensionProperty<,>); + } + + return null; + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiPageProgressService.cs b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiPageProgressService.cs new file mode 100644 index 00000000000..0104eebebfa --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiPageProgressService.cs @@ -0,0 +1,30 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Components.Progression; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.MudBlazorUI; + +[Dependency(ReplaceServices = true)] +public class MudBlazorUiPageProgressService : IUiPageProgressService, IScopedDependency +{ + /// + /// An event raised after the progress is changed. + /// + public event EventHandler? ProgressChanged; + + public Task Go(int? percentage, Action? options = null) + { + var uiPageProgressOptions = CreateDefaultOptions(); + options?.Invoke(uiPageProgressOptions); + + ProgressChanged?.Invoke(this, new UiPageProgressEventArgs(percentage, uiPageProgressOptions)); + + return Task.CompletedTask; + } + + protected virtual UiPageProgressOptions CreateDefaultOptions() + { + return new UiPageProgressOptions(); + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Validation/MudValidationAttributeHelper.cs b/framework/src/Volo.Abp.MudBlazorUI/Validation/MudValidationAttributeHelper.cs new file mode 100644 index 00000000000..40dde703df9 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Validation/MudValidationAttributeHelper.cs @@ -0,0 +1,52 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.Reflection; +using System.Text.RegularExpressions; + +namespace Volo.Abp.MudBlazorUI.Validation; + +public static class MudValidationAttributeHelper +{ + internal static readonly PropertyInfo ValidationAttributeErrorMessageStringProperty = typeof(ValidationAttribute) + .GetProperty("ErrorMessageString", BindingFlags.Instance | BindingFlags.NonPublic)!; + + internal static readonly PropertyInfo ValidationAttributeCustomErrorMessageSetProperty = typeof(ValidationAttribute) + .GetProperty("CustomErrorMessageSet", BindingFlags.Instance | BindingFlags.NonPublic)!; + + private const string PlaceholderPrefix = "__Abp_"; + + public static string SetErrorMessagePlaceholders(string? errorMessage) + { + if (string.IsNullOrEmpty(errorMessage)) + { + return string.Empty; + } + + return Regex.Replace(errorMessage, @"\{(\d+)\}", m => PlaceholderPrefix + m.Groups[1].Value); + } + + public static string RevertErrorMessagePlaceholders(string? errorMessage) + { + if (string.IsNullOrEmpty(errorMessage)) + { + return string.Empty; + } + + return Regex.Replace(errorMessage, PlaceholderPrefix + @"(\d+)", m => "{" + m.Groups[1].Value + "}"); + } + + public static string GetDefaultErrorMessage(ValidationAttribute validationAttribute) + { + if (validationAttribute is StringLengthAttribute stringLengthAttribute && stringLengthAttribute.MinimumLength != 0) + { + var customErrorMessageSet = ValidationAttributeCustomErrorMessageSetProperty.GetValue(validationAttribute) as bool?; + if (customErrorMessageSet != true) + { + return SetErrorMessagePlaceholders("The field {0} must be a string with a minimum length of {2} and a maximum length of {1}."); + } + } + + var errorMessageString = ValidationAttributeErrorMessageStringProperty.GetValue(validationAttribute) as string; + return SetErrorMessagePlaceholders(errorMessageString); + } +} diff --git a/framework/src/Volo.Abp.MudBlazorUI/Volo.Abp.MudBlazorUI.csproj b/framework/src/Volo.Abp.MudBlazorUI/Volo.Abp.MudBlazorUI.csproj new file mode 100644 index 00000000000..16ed2f64232 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/Volo.Abp.MudBlazorUI.csproj @@ -0,0 +1,24 @@ + + + + + + + net10.0 + enable + Nullable + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.MudBlazorUI/_Imports.razor b/framework/src/Volo.Abp.MudBlazorUI/_Imports.razor new file mode 100644 index 00000000000..5a0411ed781 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/_Imports.razor @@ -0,0 +1,2 @@ +@using Microsoft.AspNetCore.Components.Web +@using MudBlazor diff --git a/framework/src/Volo.Abp.MudBlazorUI/wwwroot/volo.abp.mudblazorui.css b/framework/src/Volo.Abp.MudBlazorUI/wwwroot/volo.abp.mudblazorui.css new file mode 100644 index 00000000000..bd6174466b1 --- /dev/null +++ b/framework/src/Volo.Abp.MudBlazorUI/wwwroot/volo.abp.mudblazorui.css @@ -0,0 +1,60 @@ +/* ABP MudBlazor UI Custom Styles */ + +/* Entity Actions Styling */ +.abp-entity-actions .mud-menu-activator { + min-width: auto; +} + +/* Data Grid Customizations */ +.abp-mud-data-grid .mud-table-container { + overflow-x: auto; +} + +/* Extension Property Form Spacing */ +.abp-extension-property { + margin-bottom: 16px; +} + +/* Dialog Customizations */ +.abp-mud-dialog .mud-dialog-title { + padding: 16px 24px; +} + +.abp-mud-dialog .mud-dialog-content { + padding: 0 24px 16px; +} + +.abp-mud-dialog .mud-dialog-actions { + padding: 8px 24px 16px; +} + +/* Message Alert Icon Sizing */ +.abp-message-alert-icon { + font-size: 3rem; +} + +/* Page Progress Bar */ +.abp-page-progress { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 9999; +} + +/* CRUD Page Layout */ +.abp-crud-page-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 16px; +} + +.abp-crud-page-header-title { + margin: 0; +} + +.abp-crud-page-header-actions { + display: flex; + gap: 8px; +} \ No newline at end of file diff --git a/modules/account/Volo.Abp.Account.slnx b/modules/account/Volo.Abp.Account.slnx index 031e142df9c..1beae2db608 100644 --- a/modules/account/Volo.Abp.Account.slnx +++ b/modules/account/Volo.Abp.Account.slnx @@ -2,6 +2,7 @@ + diff --git a/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountBlazorMappers.cs b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountBlazorMappers.cs new file mode 100644 index 00000000000..eda8b42eb91 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountBlazorMappers.cs @@ -0,0 +1,27 @@ +using Riok.Mapperly.Abstractions; +using Volo.Abp.Account.Blazor.MudBlazor.Pages.Account; +using Volo.Abp.Mapperly; +using Volo.Abp.Identity; + +namespace Volo.Abp.Account.Blazor.MudBlazor; + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties] +public partial class ProfileDtoToPersonalInfoModelMapper : MapperBase +{ + [MapperIgnoreTarget(nameof(PersonalInfoModel.PhoneNumberConfirmed))] + [MapperIgnoreTarget(nameof(PersonalInfoModel.EmailConfirmed))] + public override partial PersonalInfoModel Map(ProfileDto source); + + [MapperIgnoreTarget(nameof(PersonalInfoModel.PhoneNumberConfirmed))] + [MapperIgnoreTarget(nameof(PersonalInfoModel.EmailConfirmed))] + public override partial void Map(ProfileDto source, PersonalInfoModel destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties] +public partial class PersonalInfoModelToUpdateProfileDtoMapper : MapperBase +{ + public override partial UpdateProfileDto Map(PersonalInfoModel source); + public override partial void Map(PersonalInfoModel source, UpdateProfileDto destination); +} diff --git a/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountBlazorMudBlazorModule.cs b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountBlazorMudBlazorModule.cs new file mode 100644 index 00000000000..40427f0f43a --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountBlazorMudBlazorModule.cs @@ -0,0 +1,50 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Account.Blazor.MudBlazor.Pages.Account; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.Mapperly; +using Volo.Abp.Modularity; +using Volo.Abp.ObjectExtending; +using Volo.Abp.ObjectExtending.Modularity; +using Volo.Abp.Threading; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.Account.Blazor.MudBlazor; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebThemingMudBlazorModule), + typeof(AbpMapperlyModule), + typeof(AbpAccountApplicationContractsModule) + )] +public class AbpAccountBlazorMudBlazorModule : AbpModule +{ + private readonly static OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddMapperlyObjectMapper(); + + Configure(options => + { + options.MenuContributors.Add(new AbpAccountBlazorUserMenuContributor()); + }); + + Configure(options => + { + options.AdditionalAssemblies.Add(typeof(AbpAccountBlazorMudBlazorModule).Assembly); + }); + } + + public override void PostConfigureServices(ServiceConfigurationContext context) + { + OneTimeRunner.Run(() => + { + ModuleExtensionConfigurationHelper + .ApplyEntityConfigurationToUi( + IdentityModuleExtensionConsts.ModuleName, + IdentityModuleExtensionConsts.EntityNames.User, + editFormTypes: new[] { typeof(PersonalInfoModel) } + ); + }); + } +} diff --git a/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountBlazorUserMenuContributor.cs b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountBlazorUserMenuContributor.cs new file mode 100644 index 00000000000..bbb230938de --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountBlazorUserMenuContributor.cs @@ -0,0 +1,22 @@ +using System.Threading.Tasks; +using Volo.Abp.Account.Localization; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.Account.Blazor.MudBlazor; + +public class AbpAccountBlazorUserMenuContributor : IMenuContributor +{ + public Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name != StandardMenus.User) + { + return Task.CompletedTask; + } + + var accountResource = context.GetLocalizer(); + + context.Menu.AddItem(new ApplicationMenuItem("Account.Manage", accountResource["MyAccount"], url: "account/manage-profile", icon: "fa fa-cog")); + + return Task.CompletedTask; + } +} diff --git a/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountComponentBase.cs b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountComponentBase.cs new file mode 100644 index 00000000000..b2c1f74c67f --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/AbpAccountComponentBase.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Account.Localization; +using Volo.Abp.AspNetCore.Components; + +namespace Volo.Abp.Account.Blazor.MudBlazor; + +public abstract class AbpAccountComponentBase : AbpComponentBase +{ + protected AbpAccountComponentBase() + { + LocalizationResource = typeof(AccountResource); + ObjectMapperContext = typeof(AbpAccountBlazorMudBlazorModule); + } +} diff --git a/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Pages/Account/AccountManage.razor b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Pages/Account/AccountManage.razor new file mode 100644 index 00000000000..c25bc622f82 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Pages/Account/AccountManage.razor @@ -0,0 +1,100 @@ +@page "/account/manage-profile" +@page "/{culture}/account/manage-profile" +@using global::MudBlazor +@using Volo.Abp.Account.Localization +@using Volo.Abp.MudBlazorUI.Components.ObjectExtending +@using Volo.Abp.ObjectExtending + +@inherits AbpAccountComponentBase + + + + + + @if (ChangePasswordModel != null) + { + + + + + + @L["Save"] + + + } + + + @if (PersonalInfoModel != null) + { + + + + + + + + + + + + + + @* Extension Properties *@ + @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) + { + var isAllowed = propertyInfo.Configuration.GetOrDefault(IdentityModuleExtensionConsts.ConfigurationNames.AllowUserToEdit); + + if (isAllowed == null || !isAllowed.Equals(true)) + { + continue; + } + + if (!propertyInfo.Name.EndsWith("_Text")) + { + if (propertyInfo.IsEnum()) + { + + } + else if (!propertyInfo.Lookup.Url.IsNullOrEmpty()) + { + + } + else + { + var inputType = propertyInfo.GetInputType(); + __builder.OpenComponent(0, inputType.MakeGenericType(new[] { typeof(PersonalInfoModel), typeof(AccountResource) })); + __builder.AddAttribute(1, "PropertyInfo", propertyInfo); + __builder.AddAttribute(2, "Entity", PersonalInfoModel); + __builder.AddAttribute(3, "LH", _localizerHelper); + __builder.CloseComponent(); + } + } + } + + + @L["Save"] + + + } + + + + + diff --git a/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Pages/Account/AccountManage.razor.cs b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Pages/Account/AccountManage.razor.cs new file mode 100644 index 00000000000..a4fc96941c7 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Pages/Account/AccountManage.razor.cs @@ -0,0 +1,159 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using MudBlazor; +using Volo.Abp.Account.Localization; +using Volo.Abp.AspNetCore.Components.Messages; +using Volo.Abp.Identity; +using Volo.Abp.MudBlazorUI; +using Volo.Abp.ObjectExtending; + +namespace Volo.Abp.Account.Blazor.MudBlazor.Pages.Account; + +public partial class AccountManage +{ + [Parameter] + public string? Culture { get; set; } + + [Inject] protected IProfileAppService ProfileAppService { get; set; } = default!; + + [Inject] protected IUiMessageService UiMessageService { get; set; } = default!; + + [Inject] protected ISnackbar Snackbar { get; set; } = default!; + + [Inject] protected IStringLocalizer Localizer { get; set; } = default!; + + protected string SelectedTab = "Password"; + + protected ChangePasswordModel? ChangePasswordModel; + + protected PersonalInfoModel? PersonalInfoModel; + + private int _activeTabIndex = 0; + private MudForm? _changePasswordForm; + private MudForm? _personalInfoForm; + private AbpMudBlazorMessageLocalizerHelper? _localizerHelper; + + protected override async Task OnInitializedAsync() + { + _localizerHelper = new AbpMudBlazorMessageLocalizerHelper(Localizer); + await GetUserInformations(); + } + + protected async Task GetUserInformations() + { + var user = await ProfileAppService.GetAsync(); + + ChangePasswordModel = new ChangePasswordModel + { + HideOldPasswordInput = !user.HasPassword + }; + + PersonalInfoModel = ObjectMapper.Map(user); + } + + protected async Task ChangePasswordAsync() + { + if (_changePasswordForm == null) + { + return; + } + + await _changePasswordForm.Validate(); + if (!_changePasswordForm.IsValid) + { + return; + } + + if (ChangePasswordModel == null || string.IsNullOrWhiteSpace(ChangePasswordModel.CurrentPassword)) + { + return; + } + + if (ChangePasswordModel.NewPassword != ChangePasswordModel.NewPasswordConfirm) + { + await UiMessageService.Warn(L["NewPasswordConfirmFailed"]); + return; + } + + if (ChangePasswordModel.CurrentPassword == ChangePasswordModel.NewPassword) + { + await UiMessageService.Warn(L["NewPasswordSameAsOld"]); + return; + } + + await ProfileAppService.ChangePasswordAsync(new ChangePasswordInput + { + CurrentPassword = ChangePasswordModel.CurrentPassword, + NewPassword = ChangePasswordModel.NewPassword + }); + + ChangePasswordModel.Clear(); + + await UiMessageService.Success(L["PasswordChanged"]); + } + + protected virtual async Task UpdatePersonalInfoAsync() + { + if (_personalInfoForm == null) + { + return; + } + + await _personalInfoForm.Validate(); + + if (!_personalInfoForm.IsValid) + { + return; + } + + if (PersonalInfoModel == null) + { + return; + } + + await ProfileAppService.UpdateAsync( + ObjectMapper.Map(PersonalInfoModel) + ); + + await UiMessageService.Success(L["PersonalSettingsSaved"]); + } + +} + +public class ChangePasswordModel +{ + public string CurrentPassword { get; set; } = string.Empty; + + public string NewPassword { get; set; } = string.Empty; + + public string NewPasswordConfirm { get; set; } = string.Empty; + + public bool HideOldPasswordInput { get; set; } + + public void Clear() + { + CurrentPassword = string.Empty; + NewPassword = string.Empty; + NewPasswordConfirm = string.Empty; + } +} + +public class PersonalInfoModel : ExtensibleObject +{ + public string UserName { get; set; } = string.Empty; + + public string Email { get; set; } = string.Empty; + + public string Name { get; set; } = string.Empty; + + public string Surname { get; set; } = string.Empty; + + public string PhoneNumber { get; set; } = string.Empty; + + public bool PhoneNumberConfirmed { get; set; } + + public bool EmailConfirmed { get; set; } + + public string ConcurrencyStamp { get; set; } = string.Empty; +} diff --git a/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Volo.Abp.Account.Blazor.MudBlazor.csproj b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Volo.Abp.Account.Blazor.MudBlazor.csproj new file mode 100644 index 00000000000..8ee2deb5084 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Volo.Abp.Account.Blazor.MudBlazor.csproj @@ -0,0 +1,20 @@ + + + + + + + net10.0 + Volo.Abp.Account.Blazor.MudBlazor + + + + + + + + + + + + diff --git a/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/_Imports.razor b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/_Imports.razor new file mode 100644 index 00000000000..95b2bfdc7f1 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/_Imports.razor @@ -0,0 +1,5 @@ +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Forms +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components +@using MudBlazor diff --git a/modules/basic-theme/Volo.Abp.BasicTheme.slnx b/modules/basic-theme/Volo.Abp.BasicTheme.slnx index 44256584c58..42b7f7973cd 100644 --- a/modules/basic-theme/Volo.Abp.BasicTheme.slnx +++ b/modules/basic-theme/Volo.Abp.BasicTheme.slnx @@ -1,9 +1,13 @@ + + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule.cs new file mode 100644 index 00000000000..9bf19a712e1 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule.cs @@ -0,0 +1,46 @@ +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor; +using Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.Bundling; +using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.Modularity; +using BlazorStandardBundles = Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.Bundling.BlazorServerMudBlazorStandardBundles; + +namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebMudBlazorBasicThemeModule), + typeof(AbpAspNetCoreComponentsServerThemingMudBlazorModule) + )] +public class AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Contributors.Add(new MudBlazorBasicThemeToolbarContributor()); + }); + + Configure(options => + { + options + .StyleBundles + .Add(BlazorMudBlazorBasicThemeBundles.Styles.Global, bundle => + { + bundle + .AddBaseBundles(BlazorStandardBundles.Styles.Global) + .AddContributors(typeof(BlazorServerMudBlazorBasicThemeStyleContributor)); + }); + + options + .ScriptBundles + .Add(BlazorMudBlazorBasicThemeBundles.Scripts.Global, bundle => + { + bundle + .AddBaseBundles(BlazorStandardBundles.Scripts.Global) + .AddContributors(typeof(BlazorServerMudBlazorBasicThemeScriptContributor)); + }); + }); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorMudBlazorBasicThemeBundles.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorMudBlazorBasicThemeBundles.cs new file mode 100644 index 00000000000..8b1efca7eaf --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorMudBlazorBasicThemeBundles.cs @@ -0,0 +1,14 @@ +namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; + +public static class BlazorMudBlazorBasicThemeBundles +{ + public static class Styles + { + public static string Global = "Blazor.MudBlazorBasicTheme.Global"; + } + + public static class Scripts + { + public static string Global = "Blazor.MudBlazorBasicTheme.Global"; + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeScriptContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeScriptContributor.cs new file mode 100644 index 00000000000..d2d6bf6bb9d --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeScriptContributor.cs @@ -0,0 +1,8 @@ +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; + +public class BlazorServerMudBlazorBasicThemeScriptContributor : BundleContributor +{ + +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeStyleContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeStyleContributor.cs new file mode 100644 index 00000000000..8e9ce50beef --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeStyleContributor.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; + +public class BlazorServerMudBlazorBasicThemeStyleContributor : BundleContributor +{ + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("/_content/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/themes/basic/main.css"); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs new file mode 100644 index 00000000000..0ba46719c43 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs @@ -0,0 +1,20 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Themes.Basic; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; + +namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; + +public class MudBlazorBasicThemeToolbarContributor : IToolbarContributor +{ + public Task ConfigureToolbarAsync(IToolbarConfigurationContext context) + { + if (context.Toolbar.Name == StandardToolbars.Main) + { + context.Toolbar.Items.Add(new ToolbarItem(typeof(LoginDisplay))); + context.Toolbar.Items.Add(new ToolbarItem(typeof(LanguageSwitch))); + } + + return Task.CompletedTask; + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor new file mode 100644 index 00000000000..6f68415b1fb --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor @@ -0,0 +1,70 @@ +@using Volo.Abp.Localization +@using System.Globalization +@using System.Collections.Immutable +@using Microsoft.AspNetCore.RequestLocalization +@inject ILanguageProvider LanguageProvider +@inject NavigationManager NavigationManager +@inject IAbpRequestLocalizationOptionsProvider RequestLocalizationOptionsProvider + +@if (_otherLanguages != null && _otherLanguages.Any()) +{ + + + + + + @_currentLanguage.DisplayName + + @foreach (var language in _otherLanguages) + { + @language.DisplayName + } + + +} + +@code { + private IReadOnlyList? _otherLanguages; + private LanguageInfo? _currentLanguage; + + protected override async Task OnInitializedAsync() + { + var languages = await LanguageProvider.GetLanguagesAsync(); + var currentLanguage = languages.FindByCulture( + CultureInfo.CurrentCulture.Name, + CultureInfo.CurrentUICulture.Name + ); + + if (currentLanguage == null) + { + var localizationOptions = await RequestLocalizationOptionsProvider.GetLocalizationOptionsAsync(); + if (localizationOptions.DefaultRequestCulture != null) + { + currentLanguage = new LanguageInfo( + localizationOptions.DefaultRequestCulture.Culture.Name, + localizationOptions.DefaultRequestCulture.UICulture.Name, + localizationOptions.DefaultRequestCulture.UICulture.DisplayName); + } + else + { + currentLanguage = new LanguageInfo( + CultureInfo.CurrentCulture.Name, + CultureInfo.CurrentUICulture.Name, + CultureInfo.CurrentUICulture.DisplayName); + } + } + + _currentLanguage = currentLanguage; + _otherLanguages = languages.Where(l => l != _currentLanguage).ToImmutableList(); + } + + private void ChangeLanguage(LanguageInfo language) + { + var relativeUrl = NavigationManager.Uri.RemovePreFix(NavigationManager.BaseUri).EnsureStartsWith('/').EnsureStartsWith('~'); + + NavigationManager.NavigateTo( + $"Abp/Languages/Switch?culture={language.CultureName}&uiCulture={language.UiCultureName}&returnUrl={relativeUrl}", + forceLoad: true + ); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor new file mode 100644 index 00000000000..295080fa04d --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor @@ -0,0 +1,44 @@ +@namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Themes.Basic +@using Volo.Abp.Users +@using Volo.Abp.MultiTenancy +@using Microsoft.Extensions.Localization +@using global::Localization.Resources.AbpUi +@using Microsoft.AspNetCore.Components.Authorization +@using Volo.Abp.UI.Navigation +@implements IDisposable +@inject ICurrentUser CurrentUser +@inject ICurrentTenant CurrentTenant +@inject NavigationManager Navigation +@inject IStringLocalizer L + + + + + + + + + + @if (CurrentTenant.Name != null) + { + @CurrentTenant.Name\@CurrentUser.UserName + } + else + { + @CurrentUser.UserName + } + + @if (Menu != null) + { + @foreach (var menuItem in Menu.Items) + { + @menuItem.DisplayName + } + } + + + + + @L["Login"] + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor.cs new file mode 100644 index 00000000000..ea1db6a03c2 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -0,0 +1,43 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Routing; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.RequestLocalization; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Themes.Basic; + +public partial class LoginDisplay : IDisposable +{ + [Inject] + protected IMenuManager MenuManager { get; set; } + + [Inject] + protected IHttpContextAccessor HttpContextAccessor { get; set; } + + protected ApplicationMenu Menu { get; set; } + + protected override async Task OnInitializedAsync() + { + Menu = await MenuManager.GetAsync(StandardMenus.User); + + Navigation.LocationChanged += OnLocationChanged; + } + + protected string GetLoginUrl() + { + var culture = AbpRequestCultureCookieHelper.GetRouteCulture(HttpContextAccessor.HttpContext); + return string.IsNullOrEmpty(culture) ? "Account/Login" : $"{culture}/Account/Login"; + } + + protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e) + { + InvokeAsync(StateHasChanged); + } + + public void Dispose() + { + Navigation.LocationChanged -= OnLocationChanged; + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/_Imports.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/_Imports.razor new file mode 100644 index 00000000000..4e91324cd86 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/_Imports.razor @@ -0,0 +1,4 @@ +@using Microsoft.AspNetCore.Components.Web +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor +@using MudBlazor +@using Volo.Abp.MudBlazorUI diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.csproj new file mode 100644 index 00000000000..82741a876ac --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.csproj @@ -0,0 +1,19 @@ + + + + + + + net10.0 + + + + + + + + + + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebMudBlazorBasicThemeModule.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebMudBlazorBasicThemeModule.cs new file mode 100644 index 00000000000..d0bee588e64 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebMudBlazorBasicThemeModule.cs @@ -0,0 +1,24 @@ +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebThemingMudBlazorModule) +)] +public class AbpAspNetCoreComponentsWebMudBlazorBasicThemeModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Themes.Add(); + + if (options.DefaultThemeName == null) + { + options.DefaultThemeName = MudBlazorBasicTheme.Name; + } + }); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/MudBlazorBasicTheme.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/MudBlazorBasicTheme.cs new file mode 100644 index 00000000000..a777bcfc321 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/MudBlazorBasicTheme.cs @@ -0,0 +1,26 @@ +using System; +using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Theming; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme; + +[ThemeName(Name)] +public class MudBlazorBasicTheme : ITheme, ITransientDependency +{ + public const string Name = "MudBlazorBasic"; + + public virtual Type GetLayout(string name, bool fallbackToDefault = true) + { + switch (name) + { + case StandardLayouts.Application: + case StandardLayouts.Account: + case StandardLayouts.Empty: + return typeof(MainLayout); + default: + return fallbackToDefault ? typeof(MainLayout) : typeof(NullLayout); + } + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/App.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/App.razor new file mode 100644 index 00000000000..84edd134d01 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/App.razor @@ -0,0 +1,28 @@ +@using Microsoft.Extensions.Options +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing +@using global::MudBlazor +@inject IOptions RouterOptions + + + + + + @if (!context.User.Identity.IsAuthenticated) + { + + } + else + { + You are not authorized to access this resource. + } + + + + + + Sorry, there's nothing at this address. + + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/AppWithoutAuth.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/AppWithoutAuth.razor new file mode 100644 index 00000000000..1c1d1b1366c --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/AppWithoutAuth.razor @@ -0,0 +1,14 @@ +@using Microsoft.Extensions.Options +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing +@inject IOptions RouterOptions + + + + + + +

Sorry, there's nothing at this address.

+
+
+
diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/MainLayout.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/MainLayout.razor new file mode 100644 index 00000000000..2bcfa890bc8 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/MainLayout.razor @@ -0,0 +1,53 @@ +@using Volo.Abp.Ui.LayoutHooks +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components.LayoutHooks +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout +@using Volo.Abp.Ui.Branding +@inherits LayoutComponentBase +@inject IBrandingProvider BrandingProvider + + + + + + + + + + @BrandingProvider.AppName + + + + + + + + + + + + + @Body + + + + + + + + + +@code { + private bool _drawerOpen = true; + + private void ToggleDrawer() + { + _drawerOpen = !_drawerOpen; + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor new file mode 100644 index 00000000000..1ffc0db3a3f --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor @@ -0,0 +1,19 @@ + + @if(Menu != null && !Menu.Items.IsNullOrEmpty()) + { + foreach (var menuItem in Menu.Items) + { + if (menuItem.Items.IsNullOrEmpty()) + { + + + @menuItem.DisplayName + + } + else + { + + } + } + } + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor.cs new file mode 100644 index 00000000000..83878509701 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor.cs @@ -0,0 +1,38 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.Web.Security; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic; + +public partial class NavMenu : IDisposable +{ + [Inject] + protected IMenuManager MenuManager { get; set; } + + [Inject] + protected ApplicationConfigurationChangedService ApplicationConfigurationChangedService { get; set; } + + protected ApplicationMenu Menu { get; set; } + + protected async override Task OnInitializedAsync() + { + Menu = await MenuManager.GetMainMenuAsync(); + ApplicationConfigurationChangedService.Changed += ApplicationConfigurationChanged; + } + + private void ApplicationConfigurationChanged() + { + _ = InvokeAsync(async () => + { + Menu = await MenuManager.GetMainMenuAsync(); + StateHasChanged(); + }); + } + + public void Dispose() + { + ApplicationConfigurationChangedService.Changed -= ApplicationConfigurationChanged; + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenuItem.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenuItem.razor new file mode 100644 index 00000000000..20d854dcd4e --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenuItem.razor @@ -0,0 +1,78 @@ +@implements IDisposable +@using Volo.Abp.UI.Navigation +@using MudBlazor +@using Microsoft.AspNetCore.Components +@using Microsoft.AspNetCore.Components.Routing +@using System +@{ + var customComponentType = MenuItem.GetComponentTypeOrDefault(); +} + +@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) +{ + +} +else +{ + + + + @MenuItem.DisplayName + + + @foreach (var item in MenuItem.Items) + { + @if (item.Items.Any()) + { + + } + else + { + + + @item.DisplayName + + } + } + + +} + +@code { + [Parameter] + public ApplicationMenuItem MenuItem { get; set; } = default!; + + [Inject] + private NavigationManager NavigationManager { get; set; } = default!; + + protected override void OnInitialized() + { + NavigationManager.LocationChanged += OnLocationChanged; + } + + protected virtual void OnLocationChanged(object? sender, LocationChangedEventArgs e) + { + // Menu will close automatically on navigation + } + + protected virtual bool IsExpanded(ApplicationMenuItem item) + { + if (!item.Url.IsNullOrEmpty()) + { + var menuItemPath = item.Url.Replace("~/", string.Empty).Trim('/'); + var currentPagePath = new Uri(NavigationManager.Uri.TrimEnd('/')).AbsolutePath.Trim('/'); + + if (menuItemPath.TrimEnd('/').Equals(currentPagePath, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + return item.Items.Any(IsExpanded); + } + + public void Dispose() + { + NavigationManager.LocationChanged -= OnLocationChanged; + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavToolbar.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavToolbar.razor new file mode 100644 index 00000000000..91ded03c1e3 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavToolbar.razor @@ -0,0 +1,60 @@ +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars +@using Volo.Abp.AspNetCore.Components.Web.Security +@using System.Collections.Generic +@using System +@using Microsoft.AspNetCore.Components +@using MudBlazor + +@implements IDisposable + +@foreach (var render in ToolbarItemRenders) +{ + @render +} + +@code { + [Inject] + private IToolbarManager ToolbarManager { get; set; } = default!; + + [Inject] + protected ApplicationConfigurationChangedService ApplicationConfigurationChangedService { get; set; } = default!; + + private List ToolbarItemRenders { get; set; } = new List(); + + protected async override Task OnInitializedAsync() + { + await GetToolbarItemRendersAsync(); + ApplicationConfigurationChangedService.Changed += ApplicationConfigurationChanged; + } + + private async Task GetToolbarItemRendersAsync() + { + var toolbar = await ToolbarManager.GetAsync(StandardToolbars.Main); + + ToolbarItemRenders.Clear(); + + var sequence = 0; + foreach (var item in toolbar.Items) + { + ToolbarItemRenders.Add(builder => + { + builder.OpenComponent(sequence++, item.ComponentType); + builder.CloseComponent(); + }); + } + } + + private void ApplicationConfigurationChanged() + { + _ = InvokeAsync(async () => + { + await GetToolbarItemRendersAsync(); + StateHasChanged(); + }); + } + + public void Dispose() + { + ApplicationConfigurationChangedService.Changed -= ApplicationConfigurationChanged; + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NullLayout.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NullLayout.razor new file mode 100644 index 00000000000..ad53deb6491 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NullLayout.razor @@ -0,0 +1,22 @@ +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components +@using Volo.Abp.Ui.LayoutHooks +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components.LayoutHooks +@inherits LayoutComponentBase +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout + + + + + + + + + + @Body + + + + + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/RedirectToLogin.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/RedirectToLogin.razor new file mode 100644 index 00000000000..d241d93470d --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/RedirectToLogin.razor @@ -0,0 +1,9 @@ +@inject NavigationManager Navigation +@using System + +@code { + protected override void OnInitialized() + { + Navigation.NavigateTo($"account/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}", true); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/_Imports.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/_Imports.razor new file mode 100644 index 00000000000..f291088477d --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/_Imports.razor @@ -0,0 +1,9 @@ +@using MudBlazor +@using System.Net.Http +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.JSInterop +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components \ No newline at end of file diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.csproj new file mode 100644 index 00000000000..03c8c3477a5 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.csproj @@ -0,0 +1,14 @@ + + + + + + + net10.0 + + + + + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/wwwroot/themes/basic/main.css b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/wwwroot/themes/basic/main.css new file mode 100644 index 00000000000..03d1488842d --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/wwwroot/themes/basic/main.css @@ -0,0 +1,3 @@ +/* MudBlazor Basic Theme Styles */ + +/* Add any custom theme-specific styles here */ diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule.cs new file mode 100644 index 00000000000..730f3936fc2 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule.cs @@ -0,0 +1,20 @@ +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorBundlingModule) +)] +public class AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + var globalStyles = options.StyleBundles.Get(BlazorWebAssemblyMudBlazorStandardBundles.Styles.Global); + globalStyles.AddContributors(typeof(WebAssemblyMudBlazorBasicThemeBundleStyleContributor)); + }); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling.csproj new file mode 100644 index 00000000000..c71770c8138 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling.csproj @@ -0,0 +1,15 @@ + + + + + + + net10.0 + Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling + + + + + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/WebAssemblyMudBlazorBasicThemeBundleStyleContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/WebAssemblyMudBlazorBasicThemeBundleStyleContributor.cs new file mode 100644 index 00000000000..3fed44f2a07 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/WebAssemblyMudBlazorBasicThemeBundleStyleContributor.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; + +public class WebAssemblyMudBlazorBasicThemeBundleStyleContributor : BundleContributor +{ + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/themes/basic/main.css"); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule.cs new file mode 100644 index 00000000000..907dba6e434 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule.cs @@ -0,0 +1,42 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Components.Web; +using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; +using Volo.Abp.Http.Client.IdentityModel.WebAssembly; +using Volo.Abp.Modularity; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule), + typeof(AbpAspNetCoreComponentsWebMudBlazorBasicThemeModule), + typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule), + typeof(AbpHttpClientIdentityModelWebAssemblyModule) + )] +public class AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.AdditionalAssemblies.Add(typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule).Assembly); + }); + + Configure(options => + { + options.Contributors.Add(new MudBlazorBasicThemeToolbarContributor()); + }); + + if (context.Services.ExecutePreConfiguredActions().IsBlazorWebApp) + { + Configure(options => + { + options.LoginUrl = "Account/Login"; + options.LogoutUrl = "Account/Logout"; + }); + } + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AuthenticationOptions.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AuthenticationOptions.cs new file mode 100644 index 00000000000..9ca7223a83f --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AuthenticationOptions.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; + +public class AuthenticationOptions +{ + public string LoginUrl { get; set; } = "authentication/login"; + + public string LogoutUrl { get; set; } = "authentication/logout"; +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs new file mode 100644 index 00000000000..31282207a42 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs @@ -0,0 +1,30 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Themes.Basic; +using LoginDisplay = Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Themes.Basic.LoginDisplay; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; + +public class MudBlazorBasicThemeToolbarContributor : IToolbarContributor +{ + public Task ConfigureToolbarAsync(IToolbarConfigurationContext context) + { + if (context.Toolbar.Name == StandardToolbars.Main) + { + context.Toolbar.Items.Add(new ToolbarItem(typeof(LanguageSwitch))); + + //TODO: Can we find a different way to understand if authentication was configured or not? + var authenticationStateProvider = context.ServiceProvider + .GetService(); + + if (authenticationStateProvider != null) + { + context.Toolbar.Items.Add(new ToolbarItem(typeof(LoginDisplay))); + } + } + + return Task.CompletedTask; + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Pages/Authentication.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Pages/Authentication.razor new file mode 100644 index 00000000000..dae4938580f --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Pages/Authentication.razor @@ -0,0 +1,20 @@ +@page "/authentication/{action}" +@page "/{culture}/authentication/{action}" +@using Microsoft.AspNetCore.Components.WebAssembly.Authentication +@using Volo.Abp.AspNetCore.Components.Web.Security + +@inject WebAssemblyCachedApplicationConfigurationClient WebAssemblyCachedApplicationConfigurationClient +@code{ + [Parameter] public string? Culture { get; set; } + [Parameter] public string? Action { get; set; } + + private async Task OnLogInSucceeded(RemoteAuthenticationState state) + { + await WebAssemblyCachedApplicationConfigurationClient.InitializeAsync(); + } + + private async Task OnLogOutSucceeded(RemoteAuthenticationState state) + { + await WebAssemblyCachedApplicationConfigurationClient.InitializeAsync(); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor new file mode 100644 index 00000000000..7d059a91ffb --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor @@ -0,0 +1,90 @@ +@using Volo.Abp.Localization +@using System.Globalization +@using System.Collections.Immutable +@using Microsoft.JSInterop +@using Volo.Abp.AspNetCore.Components.Web +@using MudBlazor +@inject ILanguageProvider LanguageProvider +@inject IJSRuntime JsRuntime +@inject ICookieService CookieService + +@if (_otherLanguages != null && _otherLanguages.Any()) +{ + + + + + + @_currentLanguage.DisplayName + + @foreach (var language in _otherLanguages) + { + @language.DisplayName + } + + +} + +@code { + private IReadOnlyList? _otherLanguages; + private LanguageInfo? _currentLanguage; + + protected override async Task OnInitializedAsync() + { + var selectedLanguageName = await JsRuntime.InvokeAsync( + "localStorage.getItem", + "Abp.SelectedLanguage" + ); + + var allLanguages = await LanguageProvider.GetLanguagesAsync(); + _otherLanguages = allLanguages; + + if (!_otherLanguages.Any()) + { + return; + } + + if (!selectedLanguageName.IsNullOrWhiteSpace()) + { + _currentLanguage = _otherLanguages.FirstOrDefault(l => l.UiCultureName == selectedLanguageName); + } + + if (_currentLanguage == null) + { + _currentLanguage = _otherLanguages.FirstOrDefault(l => l.UiCultureName == CultureInfo.CurrentUICulture.Name); + } + + if (_currentLanguage == null) + { + _currentLanguage = _otherLanguages.FirstOrDefault(); + } + + _otherLanguages = _otherLanguages.Where(l => l != _currentLanguage).ToImmutableList(); + } + + private async Task ChangeLanguageAsync(LanguageInfo language) + { + await JsRuntime.InvokeVoidAsync( + "localStorage.setItem", + "Abp.SelectedLanguage", + language.UiCultureName + ); + + await JsRuntime.InvokeVoidAsync( + "localStorage.setItem", + "Abp.IsRtl", + CultureInfo.GetCultureInfo(language.UiCultureName).TextInfo.IsRightToLeft + ); + + await CookieService.SetAsync( + ".AspNetCore.Culture", + $"c={language.CultureName}|uic={language.UiCultureName}", + new CookieOptions + { + Path = "/" + } + ); + + await JsRuntime.InvokeVoidAsync("location.reload"); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor new file mode 100644 index 00000000000..1cb4c417185 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor @@ -0,0 +1,49 @@ +@using Microsoft.Extensions.Localization +@using global::Localization.Resources.AbpUi +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.Extensions.Options +@using Microsoft.JSInterop +@using Volo.Abp.AspNetCore.Components.Web +@using Volo.Abp.AspNetCore.Components.Web.Security +@using Volo.Abp.UI.Navigation +@implements IDisposable +@inherits AbpComponentBase +@inject IJSRuntime JsRuntime +@inject NavigationManager Navigation +@inject IStringLocalizer UiLocalizer +@inject IOptions AuthenticationOptions +@inject IOptions AbpAspNetCoreComponentsWebOptions + + + + + + + + + + @if (CurrentTenant.Name != null) + { + @CurrentTenant.Name\@CurrentUser.UserName + } + else + { + @CurrentUser.UserName + } + + @if (Menu != null) + { + @foreach (var menuItem in Menu.Items) + { + @menuItem.DisplayName + } + } + + @UiLocalizer["Logout"] + + + + + @UiLocalizer["Login"] + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor.cs new file mode 100644 index 00000000000..32c60bd4079 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -0,0 +1,71 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Routing; +using Microsoft.AspNetCore.Components.WebAssembly.Authentication; +using Microsoft.JSInterop; +using Volo.Abp.AspNetCore.Components.Web.Security; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Themes.Basic; + +public partial class LoginDisplay : IDisposable +{ + [Inject] + protected IMenuManager MenuManager { get; set; } + + [Inject] + protected ApplicationConfigurationChangedService ApplicationConfigurationChangedService { get; set; } + + protected ApplicationMenu Menu { get; set; } + + protected async override Task OnInitializedAsync() + { + Menu = await MenuManager.GetAsync(StandardMenus.User); + + Navigation.LocationChanged += OnLocationChanged; + + ApplicationConfigurationChangedService.Changed += ApplicationConfigurationChanged; + } + + protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e) + { + InvokeAsync(StateHasChanged); + } + + private async void ApplicationConfigurationChanged() + { + Menu = await MenuManager.GetAsync(StandardMenus.User); + await InvokeAsync(StateHasChanged); + } + + public void Dispose() + { + Navigation.LocationChanged -= OnLocationChanged; + ApplicationConfigurationChangedService.Changed -= ApplicationConfigurationChanged; + } + + private async Task NavigateToAsync(string uri, string target = null) + { + if (target == "_blank") + { + await JsRuntime.InvokeVoidAsync("open", uri, target); + } + else + { + Navigation.NavigateTo(uri); + } + } + + private void BeginSignOut() + { + if (AbpAspNetCoreComponentsWebOptions.Value.IsBlazorWebApp) + { + Navigation.NavigateTo(AuthenticationOptions.Value.LogoutUrl, forceLoad: true); + } + else + { + Navigation.NavigateToLogout(AuthenticationOptions.Value.LogoutUrl); + } + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/WebAssemblyRedirectToLogin.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/WebAssemblyRedirectToLogin.razor new file mode 100644 index 00000000000..e89235d49ca --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/WebAssemblyRedirectToLogin.razor @@ -0,0 +1,22 @@ +@using Volo.Abp.DependencyInjection +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic +@using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor +@using Microsoft.Extensions.Options +@using Volo.Abp.AspNetCore.Components.WebAssembly +@using Volo.Abp.AspNetCore.Components.Web +@inherits RedirectToLogin +@attribute [ExposeServices(typeof(RedirectToLogin))] +@attribute [Dependency(ReplaceServices = true)] +@inject NavigationManager Navigation +@inject IOptions AuthOptions +@inject IRouteBasedCultureUrlHelper CultureUrlHelper +@inject IOptions AbpAspNetCoreComponentsWebOptions + +@code { + protected override void OnInitialized() { } + + protected override Task OnInitializedAsync() + { + return CultureAwareRedirectToLoginHelper.RedirectAsync(Navigation, AuthOptions.Value.LoginUrl, CultureUrlHelper, AbpAspNetCoreComponentsWebOptions); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/_Imports.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/_Imports.razor new file mode 100644 index 00000000000..4e91324cd86 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/_Imports.razor @@ -0,0 +1,4 @@ +@using Microsoft.AspNetCore.Components.Web +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor +@using MudBlazor +@using Volo.Abp.MudBlazorUI diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.csproj new file mode 100644 index 00000000000..ef36174d1b7 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.csproj @@ -0,0 +1,18 @@ + + + + + + + net10.0 + Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme + + + + + + + + + + diff --git a/modules/feature-management/Volo.Abp.FeatureManagement.slnx b/modules/feature-management/Volo.Abp.FeatureManagement.slnx index f246fb78b09..8b504d625b4 100644 --- a/modules/feature-management/Volo.Abp.FeatureManagement.slnx +++ b/modules/feature-management/Volo.Abp.FeatureManagement.slnx @@ -2,6 +2,9 @@ + + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server/AbpFeatureManagementBlazorMudBlazorServerModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server/AbpFeatureManagementBlazorMudBlazorServerModule.cs new file mode 100644 index 00000000000..68bd8d2a841 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server/AbpFeatureManagementBlazorMudBlazorServerModule.cs @@ -0,0 +1,12 @@ +using Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor; +using Volo.Abp.Modularity; + +namespace Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server; + +[DependsOn( + typeof(AbpFeatureManagementBlazorMudBlazorModule), + typeof(AbpAspNetCoreComponentsServerThemingMudBlazorModule) +)] +public class AbpFeatureManagementBlazorMudBlazorServerModule : AbpModule +{ +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server/Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server/Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server.csproj new file mode 100644 index 00000000000..43bddde3b27 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server/Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server.csproj @@ -0,0 +1,15 @@ + + + + + + + net10.0 + + + + + + + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly/AbpFeatureManagementBlazorMudBlazorWebAssemblyModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly/AbpFeatureManagementBlazorMudBlazorWebAssemblyModule.cs new file mode 100644 index 00000000000..81ff2be458d --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly/AbpFeatureManagementBlazorMudBlazorWebAssemblyModule.cs @@ -0,0 +1,13 @@ +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; +using Volo.Abp.Modularity; + +namespace Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly; + +[DependsOn( + typeof(AbpFeatureManagementBlazorMudBlazorModule), + typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule), + typeof(AbpFeatureManagementHttpApiClientModule) +)] +public class AbpFeatureManagementBlazorMudBlazorWebAssemblyModule : AbpModule +{ +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly.csproj new file mode 100644 index 00000000000..4e5f72aa1a1 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly.csproj @@ -0,0 +1,16 @@ + + + + + + + net10.0 + + + + + + + + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/AbpFeatureManagementBlazorMudBlazorModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/AbpFeatureManagementBlazorMudBlazorModule.cs new file mode 100644 index 00000000000..08d86950d14 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/AbpFeatureManagementBlazorMudBlazorModule.cs @@ -0,0 +1,34 @@ +using Localization.Resources.AbpUi; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor.Settings; +using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.Features; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.SettingManagement.Blazor.MudBlazor; + +namespace Volo.Abp.FeatureManagement.Blazor.MudBlazor; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebThemingMudBlazorModule), + typeof(AbpFeatureManagementApplicationContractsModule), + typeof(AbpFeaturesModule), + typeof(AbpSettingManagementBlazorMudBlazorModule) +)] +public class AbpFeatureManagementBlazorMudBlazorModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Contributors.Add(new FeatureSettingManagementComponentContributor()); + }); + + Configure(options => + { + options.Resources + .Get() + .AddBaseTypes(typeof(AbpUiResource)); + }); + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/AbpFeatureManagementComponentBase.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/AbpFeatureManagementComponentBase.cs new file mode 100644 index 00000000000..68ed6fc8fcf --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/AbpFeatureManagementComponentBase.cs @@ -0,0 +1,12 @@ +using Volo.Abp.AspNetCore.Components; +using Volo.Abp.FeatureManagement.Localization; + +namespace Volo.Abp.FeatureManagement.Blazor.MudBlazor; + +public abstract class AbpFeatureManagementComponentBase : AbpComponentBase +{ + protected AbpFeatureManagementComponentBase() + { + LocalizationResource = typeof(AbpFeatureManagementResource); + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureManagementModal.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureManagementModal.razor new file mode 100644 index 00000000000..57831e25982 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureManagementModal.razor @@ -0,0 +1,83 @@ +@using global::MudBlazor +@using JetBrains.Annotations +@using Volo.Abp.Validation.StringValues +@using Microsoft.Extensions.Localization +@using Volo.Abp.FeatureManagement.Localization +@inherits AbpFeatureManagementComponentBase + + + + @L["Features"]@ProviderKeyDisplayName + + + @if (Groups == null || !Groups.Any()) + { + @L["NoFeatureFoundMessage"] + } + else + { + + @foreach (var group in Groups) + { + + + @group.DisplayName + @foreach (var feature in group.Features) + { + var disabled = IsDisabled(feature); +
+ @if (feature.ValueType is FreeTextStringValueType) + { + + @if (feature.Description != null) + { + @feature.Description + } + } + + @if (feature.ValueType is SelectionStringValueType) + { + var items = ((SelectionStringValueType)feature.ValueType).ItemSource.Items; + var selectedValue = SelectionStringValues[feature.Name]; + + @foreach (var item in items) + { + + @CreateStringLocalizer(item.DisplayText.ResourceName).GetString(item.DisplayText.Name) + + } + + @if (feature.Description != null) + { + @feature.Description + } + } + + @if (feature.ValueType is ToggleStringValueType) + { + + @if (feature.Description != null) + { + @feature.Description + } + } +
+ } +
+
+ } +
+ } +
+ + @L["Cancel"] + @L["ResetToDefault"] + @L["Save"] + +
diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureManagementModal.razor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureManagementModal.razor.cs new file mode 100644 index 00000000000..cfbee7f16f0 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureManagementModal.razor.cs @@ -0,0 +1,263 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Messages; +using Volo.Abp.AspNetCore.Components.Web.Configuration; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor; +using Volo.Abp.Features; +using Volo.Abp.Localization; +using Volo.Abp.Validation.StringValues; + +namespace Volo.Abp.FeatureManagement.Blazor.MudBlazor.Components; + +public partial class FeatureManagementModal +{ + [Inject] protected IFeatureAppService FeatureAppService { get; set; } = default!; + + [Inject] protected IUiMessageService UiMessageService { get; set; } = default!; + + [Inject] protected IStringLocalizerFactory HtmlLocalizerFactory { get; set; } = default!; + + [Inject] protected IOptions LocalizationOptions { get; set; } = default!; + + [Inject] protected ICurrentApplicationConfigurationCacheResetService CurrentApplicationConfigurationCacheResetService { get; set; } = default!; + + [Inject] protected ISnackbar Snackbar { get; set; } = default!; + + [Inject] protected IDialogService DialogService { get; set; } = default!; + + protected bool _isVisible; + protected int _activeTabIndex = 0; + + protected string? ProviderName; + protected string? ProviderKey; + protected string? ProviderKeyDisplayName; + + protected List? Groups { get; set; } + + protected Dictionary ToggleValues = new(); + + protected Dictionary SelectionStringValues = new(); + + public virtual async Task OpenAsync(string providerName, string? providerKey = null, string? providerKeyDisplayName = null) + { + try + { + ProviderName = providerName; + ProviderKey = providerKey; + + ToggleValues = new Dictionary(); + SelectionStringValues = new Dictionary(); + + if (!providerKeyDisplayName.IsNullOrWhiteSpace()) + { + ProviderKeyDisplayName = $" - {providerKeyDisplayName}"; + } + else + { + ProviderKeyDisplayName = string.Empty; + } + + var result = await FeatureAppService.GetAsync(ProviderName, ProviderKey); + + Groups = result?.Groups ?? new List(); + + if (Groups.Any()) + { + _activeTabIndex = 0; + } + + foreach (var featureGroupDto in Groups) + { + foreach (var featureDto in featureGroupDto.Features) + { + if (featureDto.ValueType is ToggleStringValueType) + { + ToggleValues.Add(featureDto.Name, bool.Parse(featureDto.Value)); + } + + if (featureDto.ValueType is SelectionStringValueType) + { + SelectionStringValues.Add(featureDto.Name, featureDto.Value); + } + } + } + + _isVisible = true; + await InvokeAsync(StateHasChanged); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + public virtual Task CloseModal() + { + _isVisible = false; + return InvokeAsync(StateHasChanged); + } + + protected virtual async Task SaveAsync() + { + try + { + if (Groups == null) + { + return; + } + + var features = new UpdateFeaturesDto + { + Features = Groups.SelectMany(g => g.Features).Select(f => new UpdateFeatureDto + { + Name = f.Name, + Value = f.ValueType is ToggleStringValueType ? ToggleValues[f.Name].ToString() : + f.ValueType is SelectionStringValueType ? SelectionStringValues[f.Name] : f.Value + }).ToList() + }; + + await FeatureAppService.UpdateAsync(ProviderName!, ProviderKey, features); + + await CurrentApplicationConfigurationCacheResetService.ResetAsync(); + + _isVisible = false; + await InvokeAsync(StateHasChanged); + Snackbar.Add(L["SavedSuccessfully"], Severity.Success); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + public virtual async Task DeleteAsync(string providerName, string? providerKey = null) + { + try + { + var confirmed = await DialogService.ShowMessageBox( + L["AreYouSure"], + L["AreYouSureToResetToDefault"], + yesText: L["Yes"], + cancelText: L["Cancel"]); + + if (confirmed != true) + { + return; + } + + await FeatureAppService.DeleteAsync(ProviderName!, ProviderKey); + Snackbar.Add(L["ResetedToDefault"], Severity.Success); + + await CloseModal(); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual string GetNormalizedGroupName(string name) + { + return "FeatureGroup_" + name.Replace(".", "_"); + } + + protected virtual string GetFeatureStyles(FeatureDto feature) + { + return $"margin-inline-start: {feature.Depth * 20}px"; + } + + protected virtual bool IsDisabled(FeatureDto feature) + { + return feature.Value != null && + feature.Provider.Name != null && + feature.Provider.Name != ProviderName && + feature.Provider.Name != DefaultValueFeatureValueProvider.ProviderName; + } + + public virtual string GetShownName(FeatureDto featureDto) + { + return !IsDisabled(featureDto) + ? featureDto.DisplayName + : $"{featureDto.DisplayName} ({featureDto.Provider.Name})"; + } + + protected virtual async Task OnFeatureValueChangedAsync(string? value, FeatureDto feature) + { + if (feature?.ValueType?.Validator.IsValid(value) == true) + { + feature.Value = value; + } + else + { + await UiMessageService.Warn(L["Volo.Abp.FeatureManagement:InvalidFeatureValue", feature.DisplayName]); + } + } + + protected virtual Task OnSelectedValueChangedAsync(bool value, FeatureDto feature) + { + ToggleValues[feature.Name] = value; + + if (value) + { + CheckParents(feature.ParentName); + } + else + { + UncheckChildren(feature.Name); + } + + return Task.CompletedTask; + } + + protected virtual void CheckParents(string? parentName) + { + if (parentName.IsNullOrWhiteSpace() || Groups == null) + { + return; + } + + foreach (var featureGroupDto in Groups) + { + foreach (var featureDto in featureGroupDto.Features) + { + if (featureDto.Name == parentName && ToggleValues.ContainsKey(featureDto.Name)) + { + ToggleValues[featureDto.Name] = true; + CheckParents(featureDto.ParentName); + } + } + } + } + + protected virtual void UncheckChildren(string featureName) + { + if (Groups == null) + { + return; + } + + foreach (var featureGroupDto in Groups) + { + foreach (var featureDto in featureGroupDto.Features) + { + if (featureDto.ParentName == featureName && ToggleValues.ContainsKey(featureDto.Name)) + { + ToggleValues[featureDto.Name] = false; + UncheckChildren(featureDto.Name); + } + } + } + } + + protected virtual IStringLocalizer CreateStringLocalizer(string resourceName) + { + return HtmlLocalizerFactory.CreateByResourceNameOrNull(resourceName) ?? + HtmlLocalizerFactory.CreateDefaultOrNull(); + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor new file mode 100644 index 00000000000..b1ebc29502a --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor @@ -0,0 +1,15 @@ +@using global::MudBlazor +@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase + +@if (Settings != null && Settings.HasManageHostFeaturesPermission) +{ + @L["ManageHostFeaturesText"] + + @L["ManageHostFeatures"] + + + +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor.cs new file mode 100644 index 00000000000..8c04c6868d2 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor.cs @@ -0,0 +1,41 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor.Components; +using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.Features; + +namespace Volo.Abp.FeatureManagement.Blazor.MudBlazor.Components.FeatureSettingGroup; + +public partial class FeatureSettingManagementComponent : AbpComponentBase +{ + [Inject] + protected PermissionChecker PermissionChecker { get; set; } = default!; + + protected FeatureManagementModal? FeatureManagementModal; + + protected FeatureSettingViewModel? Settings; + + public FeatureSettingManagementComponent() + { + LocalizationResource = typeof(AbpFeatureManagementResource); + } + + protected async override Task OnInitializedAsync() + { + Settings = new FeatureSettingViewModel + { + HasManageHostFeaturesPermission = await AuthorizationService.IsGrantedAsync(FeatureManagementPermissions.ManageHostFeatures) + }; + } + + protected virtual async Task OnManageHostFeaturesClicked() + { + if (FeatureManagementModal != null) + { + await FeatureManagementModal.OpenAsync(TenantFeatureValueProvider.ProviderName); + } + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureSettingGroup/FeatureSettingViewModel.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureSettingGroup/FeatureSettingViewModel.cs new file mode 100644 index 00000000000..b933647b736 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureSettingGroup/FeatureSettingViewModel.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.FeatureManagement.Blazor.MudBlazor.Components.FeatureSettingGroup; + +public class FeatureSettingViewModel +{ + public bool HasManageHostFeaturesPermission { get; set; } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Settings/FeatureSettingManagementComponentContributor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Settings/FeatureSettingManagementComponentContributor.cs new file mode 100644 index 00000000000..50bec2f38c7 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Settings/FeatureSettingManagementComponentContributor.cs @@ -0,0 +1,41 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor.Components.FeatureSettingGroup; +using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.SettingManagement.Blazor.MudBlazor; + +namespace Volo.Abp.FeatureManagement.Blazor.MudBlazor.Settings; + +public class FeatureSettingManagementComponentContributor: ISettingComponentContributor +{ + public virtual async Task ConfigureAsync(SettingComponentCreationContext context) + { + if (!await CheckPermissionsInternalAsync(context)) + { + return; + } + + var l = context.ServiceProvider.GetRequiredService>(); + context.Groups.Add( + new SettingComponentGroup( + "Volo.Abp.Feature", + l["Permission:FeatureManagement"], + typeof(FeatureSettingManagementComponent) + ) + ); + } + + public virtual async Task CheckPermissionsAsync(SettingComponentCreationContext context) + { + return await CheckPermissionsInternalAsync(context); + } + + protected virtual async Task CheckPermissionsInternalAsync(SettingComponentCreationContext context) + { + var authorizationService = context.ServiceProvider.GetRequiredService(); + + return await authorizationService.IsGrantedAsync(FeatureManagementPermissions.ManageHostFeatures); + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Volo.Abp.FeatureManagement.Blazor.MudBlazor.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Volo.Abp.FeatureManagement.Blazor.MudBlazor.csproj new file mode 100644 index 00000000000..3a568524e3b --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Volo.Abp.FeatureManagement.Blazor.MudBlazor.csproj @@ -0,0 +1,20 @@ + + + + + + + net10.0 + + + + + + + + + + + + + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/_Imports.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/_Imports.razor new file mode 100644 index 00000000000..4e91324cd86 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/_Imports.razor @@ -0,0 +1,4 @@ +@using Microsoft.AspNetCore.Components.Web +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor +@using MudBlazor +@using Volo.Abp.MudBlazorUI diff --git a/modules/identity/Volo.Abp.Identity.slnx b/modules/identity/Volo.Abp.Identity.slnx index 3205de45ba7..968864e7f70 100644 --- a/modules/identity/Volo.Abp.Identity.slnx +++ b/modules/identity/Volo.Abp.Identity.slnx @@ -3,6 +3,9 @@ + + + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.Server/AbpIdentityBlazorMudBlazorServerModule.cs b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.Server/AbpIdentityBlazorMudBlazorServerModule.cs new file mode 100644 index 00000000000..9abc9222f68 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.Server/AbpIdentityBlazorMudBlazorServerModule.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server; + +namespace Volo.Abp.Identity.Blazor.MudBlazor.Server; + +[DependsOn( + typeof(AbpIdentityBlazorMudBlazorModule), + typeof(AbpPermissionManagementBlazorMudBlazorServerModule) +)] +public class AbpIdentityBlazorMudBlazorServerModule : AbpModule +{ +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.Server/Volo.Abp.Identity.Blazor.MudBlazor.Server.csproj b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.Server/Volo.Abp.Identity.Blazor.MudBlazor.Server.csproj new file mode 100644 index 00000000000..544df7438dd --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.Server/Volo.Abp.Identity.Blazor.MudBlazor.Server.csproj @@ -0,0 +1,16 @@ + + + + + + + net10.0 + + + + + + + + + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly/AbpIdentityBlazorMudBlazorWebAssemblyModule.cs b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly/AbpIdentityBlazorMudBlazorWebAssemblyModule.cs new file mode 100644 index 00000000000..7293d59e71a --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly/AbpIdentityBlazorMudBlazorWebAssemblyModule.cs @@ -0,0 +1,14 @@ +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly; + +namespace Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly; + +[DependsOn( + typeof(AbpIdentityBlazorMudBlazorModule), + typeof(AbpPermissionManagementBlazorMudBlazorWebAssemblyModule), + typeof(AbpIdentityHttpApiClientModule) +)] +public class AbpIdentityBlazorMudBlazorWebAssemblyModule : AbpModule +{ +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly/Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly.csproj b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly/Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly.csproj new file mode 100644 index 00000000000..787796d87e2 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly/Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly.csproj @@ -0,0 +1,17 @@ + + + + + + + net10.0 + + + + + + + + + + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/AbpIdentityBlazorMudBlazorMappers.cs b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/AbpIdentityBlazorMudBlazorMappers.cs new file mode 100644 index 00000000000..3edbc1cfa1c --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/AbpIdentityBlazorMudBlazorMappers.cs @@ -0,0 +1,25 @@ +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; + +namespace Volo.Abp.Identity.Blazor.MudBlazor; + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties] +public partial class IdentityUserDtoToIdentityUserUpdateDtoMapper : MapperBase +{ + [MapperIgnoreTarget(nameof(IdentityUserUpdateDto.Password))] + [MapperIgnoreTarget(nameof(IdentityUserUpdateDto.RoleNames))] + public override partial IdentityUserUpdateDto Map(IdentityUserDto source); + + [MapperIgnoreTarget(nameof(IdentityUserUpdateDto.Password))] + [MapperIgnoreTarget(nameof(IdentityUserUpdateDto.RoleNames))] + public override partial void Map(IdentityUserDto source, IdentityUserUpdateDto destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties] +public partial class IdentityRoleDtoToIdentityRoleUpdateDtoMapper : MapperBase +{ + public override partial IdentityRoleUpdateDto Map(IdentityRoleDto source); + public override partial void Map(IdentityRoleDto source, IdentityRoleUpdateDto destination); +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/AbpIdentityBlazorMudBlazorModule.cs b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/AbpIdentityBlazorMudBlazorModule.cs new file mode 100644 index 00000000000..37227e0573b --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/AbpIdentityBlazorMudBlazorModule.cs @@ -0,0 +1,72 @@ +using Localization.Resources.AbpUi; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.Mapperly; +using Volo.Abp.MudBlazorUI; +using Volo.Abp.Identity.Localization; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.ObjectExtending; +using Volo.Abp.ObjectExtending.Modularity; +using Volo.Abp.PermissionManagement.Blazor.MudBlazor; +using Volo.Abp.Threading; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.Identity.Blazor.MudBlazor; + +[DependsOn( + typeof(AbpIdentityApplicationContractsModule), + typeof(AbpMapperlyModule), + typeof(AbpPermissionManagementBlazorMudBlazorModule), + typeof(AbpMudBlazorUIModule) + )] +public class AbpIdentityBlazorMudBlazorModule : AbpModule +{ + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddMapperlyObjectMapper(); + + Configure(options => + { + options.MenuContributors.Add(new AbpIdentityWebMainMenuContributor()); + }); + + Configure(options => + { + options.AdditionalAssemblies.Add(typeof(AbpIdentityBlazorMudBlazorModule).Assembly); + }); + + Configure(options => + { + options.Resources + .Get() + .AddBaseTypes( + typeof(AbpUiResource) + ); + }); + } + + public override void PostConfigureServices(ServiceConfigurationContext context) + { + OneTimeRunner.Run(() => + { + ModuleExtensionConfigurationHelper + .ApplyEntityConfigurationToUi( + IdentityModuleExtensionConsts.ModuleName, + IdentityModuleExtensionConsts.EntityNames.Role, + createFormTypes: new[] { typeof(IdentityRoleCreateDto) }, + editFormTypes: new[] { typeof(IdentityRoleUpdateDto) } + ); + + ModuleExtensionConfigurationHelper + .ApplyEntityConfigurationToUi( + IdentityModuleExtensionConsts.ModuleName, + IdentityModuleExtensionConsts.EntityNames.User, + createFormTypes: new[] { typeof(IdentityUserCreateDto) }, + editFormTypes: new[] { typeof(IdentityUserUpdateDto) } + ); + }); + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/AbpIdentityWebMainMenuContributor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/AbpIdentityWebMainMenuContributor.cs new file mode 100644 index 00000000000..4b2a2313e0a --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/AbpIdentityWebMainMenuContributor.cs @@ -0,0 +1,37 @@ +using System.Threading.Tasks; +using Volo.Abp.Identity.Localization; +using Volo.Abp.UI.Navigation; +using Volo.Abp.Authorization.Permissions; + +namespace Volo.Abp.Identity.Blazor.MudBlazor; + +public class AbpIdentityWebMainMenuContributor : IMenuContributor +{ + public virtual Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name != StandardMenus.Main) + { + return Task.CompletedTask; + } + + var administrationMenu = context.Menu.GetAdministration(); + + var l = context.GetLocalizer(); + + var identityMenuItem = new ApplicationMenuItem(IdentityMenuNames.GroupName, l["Menu:IdentityManagement"], + icon: "far fa-id-card"); + administrationMenu.AddItem(identityMenuItem); + + identityMenuItem.AddItem(new ApplicationMenuItem( + IdentityMenuNames.Roles, + l["Roles"], + url: "~/identity/roles").RequirePermissions(IdentityPermissions.Roles.Default)); + + identityMenuItem.AddItem(new ApplicationMenuItem( + IdentityMenuNames.Users, + l["Users"], + url: "~/identity/users").RequirePermissions(IdentityPermissions.Users.Default)); + + return Task.CompletedTask; + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/IdentityMenuNames.cs b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/IdentityMenuNames.cs new file mode 100644 index 00000000000..eab87289190 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/IdentityMenuNames.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.Identity.Blazor.MudBlazor; + +public class IdentityMenuNames +{ + public const string GroupName = "AbpIdentity"; + + public const string Roles = GroupName + ".Roles"; + public const string Users = GroupName + ".Users"; +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleManagement.razor new file mode 100644 index 00000000000..995b1859de0 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleManagement.razor @@ -0,0 +1,87 @@ +@page "/identity/roles" +@page "/{culture}/identity/roles" +@attribute [Authorize(IdentityPermissions.Roles.Default)] +@using global::MudBlazor +@using Volo.Abp.Identity +@using Microsoft.AspNetCore.Authorization +@using Volo.Abp.PermissionManagement.Blazor.MudBlazor.Components +@using Volo.Abp.Identity.Localization +@using Volo.Abp.MudBlazorUI.Components.ObjectExtending +@using Microsoft.Extensions.Localization +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout +@using Volo.Abp.UI.Navigation.Localization.Resource +@inject IStringLocalizer LUiNavigation + +@inherits AbpMudCrudPageBase + + + + + + + + + +@* ************************* CREATE DIALOG ************************* *@ +@if (HasCreatePermission) +{ + + + @L["NewRole"] + + + + + + + + + + + @L["Cancel"] + @L["Save"] + + +} + +@* ************************* EDIT DIALOG ************************* *@ +@if (HasUpdatePermission) +{ + + + @L["Edit"] + + + + + + + + + + + + @L["Cancel"] + @L["Save"] + + +} + +@if (HasManagePermissionsPermission) +{ + +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleManagement.razor.cs new file mode 100644 index 00000000000..7037b7b5707 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleManagement.razor.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Web.Extensibility.EntityActions; +using Volo.Abp.AspNetCore.Components.Web.Extensibility.TableColumns; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; +using Volo.Abp.Identity.Localization; +using Volo.Abp.MudBlazorUI; +using Volo.Abp.ObjectExtending; +using Volo.Abp.PermissionManagement.Blazor.MudBlazor.Components; + +namespace Volo.Abp.Identity.Blazor.MudBlazor.Pages.Identity; + +public partial class RoleManagement +{ + [Parameter] + public string? Culture { get; set; } + + protected const string PermissionProviderName = "R"; + + protected PermissionManagementModal? PermissionManagementModal; + + protected string? ManagePermissionsPolicyName; + + protected bool HasManagePermissionsPermission { get; set; } + + protected PageToolbar Toolbar { get; } = new(); + + protected List RoleManagementTableColumns => TableColumns.Get(); + + private AbpMudBlazorMessageLocalizerHelper? _localizerHelper; + + [Inject] + protected IStringLocalizer Localizer { get; set; } = default!; + + public RoleManagement() + { + ObjectMapperContext = typeof(AbpIdentityBlazorMudBlazorModule); + LocalizationResource = typeof(IdentityResource); + + CreatePolicyName = IdentityPermissions.Roles.Create; + UpdatePolicyName = IdentityPermissions.Roles.Update; + DeletePolicyName = IdentityPermissions.Roles.Delete; + ManagePermissionsPolicyName = IdentityPermissions.Roles.ManagePermissions; + } + + protected override async Task OnInitializedAsync() + { + _localizerHelper = new AbpMudBlazorMessageLocalizerHelper(Localizer); + await base.OnInitializedAsync(); + } + + protected override ValueTask SetBreadcrumbItemsAsync() + { + BreadcrumbItems.Add(new BreadcrumbItem(LUiNavigation["Menu:Administration"].Value, null, disabled: true)); + BreadcrumbItems.Add(new BreadcrumbItem(L["Menu:IdentityManagement"].Value, null, disabled: true)); + BreadcrumbItems.Add(new BreadcrumbItem(L["Roles"].Value, null, disabled: true)); + return base.SetBreadcrumbItemsAsync(); + } + + protected override ValueTask SetEntityActionsAsync() + { + EntityActions + .Get() + .AddRange(new EntityAction[] + { + new EntityAction + { + Text = L["Edit"], + Visible = (data) => HasUpdatePermission, + Clicked = async (data) => { await OpenEditDialogAsync(data.As()); } + }, + new EntityAction + { + Text = L["Permissions"], + Visible = (data) => HasManagePermissionsPermission, + Clicked = async (data) => + { + if (PermissionManagementModal != null) + { + await PermissionManagementModal.OpenAsync(PermissionProviderName, + data.As().Name); + } + } + }, + new EntityAction + { + Text = L["Delete"], + Visible = (data) => HasDeletePermission && !data.As().IsStatic, + Clicked = async (data) => await DeleteEntityAsync(data.As()), + ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) + } + }); + + return base.SetEntityActionsAsync(); + } + + protected override async ValueTask SetTableColumnsAsync() + { + RoleManagementTableColumns + .AddRange(new TableColumn[] + { + new TableColumn + { + Title = L["Actions"], + Actions = EntityActions.Get(), + }, + new TableColumn + { + Title = L["RoleName"], + Sortable = true, + Data = nameof(IdentityRoleDto.Name), + Component = typeof(RoleNameComponent) + }, + }); + + RoleManagementTableColumns.AddRange(await GetExtensionTableColumnsAsync(IdentityModuleExtensionConsts.ModuleName, + IdentityModuleExtensionConsts.EntityNames.Role)); + + await base.SetTableColumnsAsync(); + } + + protected override async Task SetPermissionsAsync() + { + await base.SetPermissionsAsync(); + + HasManagePermissionsPermission = + await AuthorizationService.IsGrantedAsync(IdentityPermissions.Roles.ManagePermissions); + } + + protected override string GetDeleteConfirmationMessage(IdentityRoleDto entity) + { + return string.Format(L["RoleDeletionConfirmationMessage"], entity.Name); + } + + protected override ValueTask SetToolbarItemsAsync() + { + Toolbar.AddMudButton(L["NewRole"], + OpenCreateDialogAsync, + icon: Icons.Material.Filled.Add.ToString(), + requiredPolicyName: CreatePolicyName); + + return base.SetToolbarItemsAsync(); + } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleNameComponent.razor b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleNameComponent.razor new file mode 100644 index 00000000000..890671d13c4 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleNameComponent.razor @@ -0,0 +1,16 @@ +@using System; +@using Volo.Abp.Identity +@using Microsoft.Extensions.Localization +@using Volo.Abp.Identity.Localization + +@inject IStringLocalizer L + +@(Data.As().Name) +@if (Data.As().IsDefault) +{ + @L["DisplayName:IsDefault"] +} +@if (Data.As().IsPublic) +{ + @L["DisplayName:IsPublic"] +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleNameComponent.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleNameComponent.razor.cs new file mode 100644 index 00000000000..1b209effe0f --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleNameComponent.razor.cs @@ -0,0 +1,8 @@ +using Microsoft.AspNetCore.Components; + +namespace Volo.Abp.Identity.Blazor.MudBlazor.Pages.Identity; + +public partial class RoleNameComponent : ComponentBase +{ + [Parameter] public object Data { get; set; } = default!; +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/UserManagement.razor new file mode 100644 index 00000000000..23ac8872c50 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/UserManagement.razor @@ -0,0 +1,176 @@ +@page "/identity/users" +@page "/{culture}/identity/users" +@attribute [Authorize(IdentityPermissions.Users.Default)] +@using Microsoft.AspNetCore.Authorization +@using Volo.Abp.PermissionManagement.Blazor.MudBlazor.Components +@using Volo.Abp.MudBlazorUI.Components.ObjectExtending +@using Volo.Abp.Identity.Localization +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components +@using Microsoft.Extensions.Localization +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout +@using Volo.Abp.UI.Navigation.Localization.Resource +@inject IStringLocalizer LUiNavigation + +@inherits AbpMudCrudPageBase + + + + + + + + + + + + + + + + +@* ************************* CREATE DIALOG ************************* *@ +@if (HasCreatePermission) +{ + + + @L["NewUser"] + + + + + + + + + + + + + + + + + + + + + + + @if (NewUserRoles != null) + { + @foreach (var role in NewUserRoles) + { + + + } + } + + + + + + @L["Cancel"] + @L["Save"] + + +} + + +@* ************************* EDIT DIALOG ************************* *@ +@if (HasUpdatePermission) +{ + + + @L["Edit"] + + + + + + + + + + + + + @if (!IsEditCurrentUser) + { + + } + + + + + + + + + + @if (EditUserRoles != null && EditUserRoles.Any()) + { + + @foreach (var role in EditUserRoles) + { + + + } + + } + + + + + @L["Cancel"] + @L["Save"] + + +} + +@if (HasManagePermissionsPermission) +{ + +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/UserManagement.razor.cs new file mode 100644 index 00000000000..f657523cc34 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/UserManagement.razor.cs @@ -0,0 +1,285 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Web; +using Microsoft.Extensions.Localization; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Web.Extensibility.EntityActions; +using Volo.Abp.AspNetCore.Components.Web.Extensibility.TableColumns; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Identity.Localization; +using Volo.Abp.MudBlazorUI; +using Volo.Abp.ObjectExtending; +using Volo.Abp.PermissionManagement.Blazor.MudBlazor.Components; +using Volo.Abp.Users; + +namespace Volo.Abp.Identity.Blazor.MudBlazor.Pages.Identity; + +public partial class UserManagement +{ + [Parameter] + public string? Culture { get; set; } + + protected const string PermissionProviderName = "U"; + + protected const string DefaultSelectedTab = "UserInformations"; + + protected PermissionManagementModal? PermissionManagementModal; + + protected IReadOnlyList? Roles; + + protected AssignedRoleViewModel[]? NewUserRoles; + + protected AssignedRoleViewModel[]? EditUserRoles; + + protected string? ManagePermissionsPolicyName; + + protected bool HasManagePermissionsPermission { get; set; } + + protected int _createTabIndex = 0; + protected int _editTabIndex = 0; + protected bool _showPassword; + protected bool IsEditCurrentUser; + + protected PageToolbar Toolbar { get; } = new(); + + private List UserManagementTableColumns => TableColumns.Get(); + private AbpMudBlazorMessageLocalizerHelper? _localizerHelper; + + [Inject] + protected IPermissionChecker PermissionChecker { get; set; } = default!; + + [Inject] + protected IStringLocalizer Localizer { get; set; } = default!; + + public UserManagement() + { + ObjectMapperContext = typeof(AbpIdentityBlazorMudBlazorModule); + LocalizationResource = typeof(IdentityResource); + + CreatePolicyName = IdentityPermissions.Users.Create; + UpdatePolicyName = IdentityPermissions.Users.Update; + DeletePolicyName = IdentityPermissions.Users.Delete; + ManagePermissionsPolicyName = IdentityPermissions.Users.ManagePermissions; + } + + protected override async Task OnInitializedAsync() + { + _localizerHelper = new AbpMudBlazorMessageLocalizerHelper(Localizer); + await base.OnInitializedAsync(); + + try + { + Roles = (await AppService.GetAssignableRolesAsync()).Items; + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected override ValueTask SetBreadcrumbItemsAsync() + { + BreadcrumbItems.Add(new BreadcrumbItem(LUiNavigation["Menu:Administration"].Value, null, disabled: true)); + BreadcrumbItems.Add(new BreadcrumbItem(L["Menu:IdentityManagement"].Value, null, disabled: true)); + BreadcrumbItems.Add(new BreadcrumbItem(L["Users"].Value, null, disabled: true)); + return base.SetBreadcrumbItemsAsync(); + } + + protected virtual async Task OnSearchKeyUp(KeyboardEventArgs e) + { + if (e.Key == "Enter") + { + CurrentPage = 1; + await _dataGrid.ReloadServerDataAsync(); + } + } + + protected override async Task SetPermissionsAsync() + { + await base.SetPermissionsAsync(); + + HasManagePermissionsPermission = + await AuthorizationService.IsGrantedAsync(IdentityPermissions.Users.ManagePermissions); + } + + protected override async Task OpenCreateDialogAsync() + { + _createTabIndex = 0; + + if (Roles != null) + { + NewUserRoles = Roles.Select(x => new AssignedRoleViewModel + { + Name = x.Name, + IsAssigned = x.IsDefault, + IsAssignable = true + }).ToArray(); + } + + _showPassword = false; + await base.OpenCreateDialogAsync(); + + NewEntity.IsActive = true; + NewEntity.LockoutEnabled = true; + } + + protected override Task OnCreatingEntityAsync() + { + // apply roles before saving + if (NewUserRoles != null) + { + NewEntity.RoleNames = NewUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); + } + + return base.OnCreatingEntityAsync(); + } + + protected override async Task OpenEditDialogAsync(IdentityUserDto entity) + { + try + { + _editTabIndex = 0; + IsEditCurrentUser = entity.Id == CurrentUser.Id; + + if (await PermissionChecker.IsGrantedAsync(IdentityPermissions.Users.ManageRoles)) + { + var assignableRoles = Roles ?? (await AppService.GetAssignableRolesAsync()).Items; + var currentRoles = (await AppService.GetRolesAsync(entity.Id)).Items; + + var combinedRoles = assignableRoles + .Concat(currentRoles) + .GroupBy(role => role.Id) + .Select(group => group.First()) + .ToList(); + + var currentRoleIds = currentRoles.Select(r => r.Id).ToHashSet(); + var assignableRoleIds = assignableRoles.Select(r => r.Id).ToHashSet(); + + EditUserRoles = combinedRoles.Select(x => new AssignedRoleViewModel + { + Name = x.Name, + IsAssigned = currentRoleIds.Contains(x.Id), + IsAssignable = assignableRoleIds.Contains(x.Id) + }).ToArray(); + + _showPassword = false; + } + await base.OpenEditDialogAsync(entity); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected override Task OnUpdatingEntityAsync() + { + // apply roles before saving + if (EditUserRoles != null) + { + EditingEntity.RoleNames = EditUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray(); + } + return base.OnUpdatingEntityAsync(); + } + + protected override string GetDeleteConfirmationMessage(IdentityUserDto entity) + { + return string.Format(L["UserDeletionConfirmationMessage"], entity.UserName); + } + + protected override ValueTask SetEntityActionsAsync() + { + EntityActions + .Get() + .AddRange(new EntityAction[] + { + new EntityAction + { + Text = L["Edit"], + Visible = (data) => HasUpdatePermission, + Clicked = async (data) => await OpenEditDialogAsync(data.As()) + }, + new EntityAction + { + Text = L["Permissions"], + Visible = (data) => HasManagePermissionsPermission, + Clicked = async (data) => + { + if (PermissionManagementModal != null) + { + await PermissionManagementModal.OpenAsync(PermissionProviderName, + data.As().Id.ToString(), + data.As().UserName); + } + } + }, + new EntityAction + { + Text = L["Delete"], + Visible = (data) => HasDeletePermission && CurrentUser.GetId() != data.As().Id, + Clicked = async (data) => await DeleteEntityAsync(data.As()), + ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) + } + }); + + return base.SetEntityActionsAsync(); + } + + protected override async ValueTask SetTableColumnsAsync() + { + UserManagementTableColumns + .AddRange(new TableColumn[] + { + new TableColumn + { + Title = L["Actions"], + Actions = EntityActions.Get(), + }, + new TableColumn + { + Title = L["UserName"], + Data = nameof(IdentityUserDto.UserName), + Sortable = true, + }, + new TableColumn + { + Title = L["EmailAddress"], + Data = nameof(IdentityUserDto.Email), + Sortable = true, + }, + new TableColumn + { + Title = L["PhoneNumber"], + Data = nameof(IdentityUserDto.PhoneNumber), + Sortable = true, + } + }); + + UserManagementTableColumns.AddRange(await GetExtensionTableColumnsAsync(IdentityModuleExtensionConsts.ModuleName, + IdentityModuleExtensionConsts.EntityNames.User)); + await base.SetTableColumnsAsync(); + } + + protected override ValueTask SetToolbarItemsAsync() + { + Toolbar.AddMudButton(L["NewUser"], OpenCreateDialogAsync, + icon: Icons.Material.Filled.Add.ToString(), + requiredPolicyName: CreatePolicyName); + + return base.SetToolbarItemsAsync(); + } +} + +public class AssignedRoleViewModel +{ + public string Name { get; set; } = string.Empty; + + public bool IsAssigned { get; set; } + + public bool IsAssignable { get; set; } +} diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Volo.Abp.Identity.Blazor.MudBlazor.csproj b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Volo.Abp.Identity.Blazor.MudBlazor.csproj new file mode 100644 index 00000000000..65d42e06837 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Volo.Abp.Identity.Blazor.MudBlazor.csproj @@ -0,0 +1,21 @@ + + + + + + + net10.0 + enable + Nullable + + + + + + + + + + + + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/_Imports.razor b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/_Imports.razor new file mode 100644 index 00000000000..489189a8c9e --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/_Imports.razor @@ -0,0 +1,6 @@ +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Forms +@using Volo.Abp.AspNetCore.Components.Web +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components +@using global::MudBlazor diff --git a/modules/permission-management/Volo.Abp.PermissionManagement.slnx b/modules/permission-management/Volo.Abp.PermissionManagement.slnx index fbfc4f71b8b..b1220e4a26e 100644 --- a/modules/permission-management/Volo.Abp.PermissionManagement.slnx +++ b/modules/permission-management/Volo.Abp.PermissionManagement.slnx @@ -2,6 +2,9 @@ + + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server/AbpPermissionManagementBlazorMudBlazorServerModule.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server/AbpPermissionManagementBlazorMudBlazorServerModule.cs new file mode 100644 index 00000000000..5b38c312605 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server/AbpPermissionManagementBlazorMudBlazorServerModule.cs @@ -0,0 +1,12 @@ +using Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor; +using Volo.Abp.Modularity; + +namespace Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server; + +[DependsOn( + typeof(AbpPermissionManagementBlazorMudBlazorModule), + typeof(AbpAspNetCoreComponentsServerThemingMudBlazorModule) +)] +public class AbpPermissionManagementBlazorMudBlazorServerModule : AbpModule +{ +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server/Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server/Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server.csproj new file mode 100644 index 00000000000..df904cf169a --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server/Volo.Abp.PermissionManagement.Blazor.MudBlazor.Server.csproj @@ -0,0 +1,15 @@ + + + + + + + net10.0 + + + + + + + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly/AbpPermissionManagementBlazorMudBlazorWebAssemblyModule.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly/AbpPermissionManagementBlazorMudBlazorWebAssemblyModule.cs new file mode 100644 index 00000000000..074a9e7be44 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly/AbpPermissionManagementBlazorMudBlazorWebAssemblyModule.cs @@ -0,0 +1,13 @@ +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; +using Volo.Abp.Modularity; + +namespace Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly; + +[DependsOn( + typeof(AbpPermissionManagementBlazorMudBlazorModule), + typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule), + typeof(AbpPermissionManagementHttpApiClientModule) +)] +public class AbpPermissionManagementBlazorMudBlazorWebAssemblyModule : AbpModule +{ +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly.csproj new file mode 100644 index 00000000000..bf8592660a2 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.PermissionManagement.Blazor.MudBlazor.WebAssembly.csproj @@ -0,0 +1,16 @@ + + + + + + + net10.0 + + + + + + + + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/AbpPermissionManagementBlazorMudBlazorModule.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/AbpPermissionManagementBlazorMudBlazorModule.cs new file mode 100644 index 00000000000..161b8c10c25 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/AbpPermissionManagementBlazorMudBlazorModule.cs @@ -0,0 +1,26 @@ +using Localization.Resources.AbpUi; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement.Localization; + +namespace Volo.Abp.PermissionManagement.Blazor.MudBlazor; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebThemingMudBlazorModule), + typeof(AbpPermissionManagementApplicationContractsModule) + )] +public class AbpPermissionManagementBlazorMudBlazorModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Resources + .Get() + .AddBaseTypes( + typeof(AbpUiResource) + ); + }); + } +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/PermissionManagementModal.razor b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/PermissionManagementModal.razor new file mode 100644 index 00000000000..4c7eba0bfce --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/PermissionManagementModal.razor @@ -0,0 +1,75 @@ +@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase +@using global::MudBlazor +@using JetBrains.Annotations +@using Volo.Abp.PermissionManagement.Localization + + + + @L["Permissions"] - @_entityDisplayName + + + + + + + + + + + + + @L["PermissionGroup"] + + @if (_groups != null && _groups.Any()) + { + + @foreach (var group in _groups) + { + x.IsGranted)})")"> +
+ + + + @foreach (var permission in group.Permissions) + { + var depth = GetPermissionDepthOrDefault(permission.Name); +
+ +
+ } +
+
+ } +
+ } +
+
+ + @L["Cancel"] + @L["Save"] + +
diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/PermissionManagementModal.razor.cs new file mode 100644 index 00000000000..0d2b3d4192b --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/PermissionManagementModal.razor.cs @@ -0,0 +1,375 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Options; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Messages; +using Volo.Abp.AspNetCore.Components.Web.Configuration; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; +using Volo.Abp.PermissionManagement.Localization; + +namespace Volo.Abp.PermissionManagement.Blazor.MudBlazor.Components; + +public partial class PermissionManagementModal +{ + [Inject] protected IPermissionAppService PermissionAppService { get; set; } = default!; + [Inject] protected ICurrentApplicationConfigurationCacheResetService CurrentApplicationConfigurationCacheResetService { get; set; } = default!; + [Inject] protected IOptions LocalizationOptions { get; set; } = default!; + [Inject] protected IDialogService DialogService { get; set; } = default!; + [Inject] protected ISnackbar Snackbar { get; set; } = default!; + + protected bool _isVisible; + + protected string? _providerName; + protected string? _providerKey; + + protected string? _entityDisplayName; + protected List? _allGroups; + protected List? _groups; + + protected int _activeTabIndex = 0; + + protected bool _selectAllDisabled; + + protected string? _permissionGroupSearchText; + + protected bool GrantAll { get; set; } + protected bool GrantAny { get; set; } + + protected Dictionary _permissionDepths = new Dictionary(); + + public PermissionManagementModal() + { + LocalizationResource = typeof(AbpPermissionManagementResource); + } + + public virtual async Task OpenAsync(string providerName, string providerKey, string? entityDisplayName = null) + { + try + { + _providerName = providerName; + _providerKey = providerKey; + _permissionGroupSearchText = null; + + var result = await PermissionAppService.GetAsync(_providerName, _providerKey); + + _entityDisplayName = entityDisplayName ?? result.EntityDisplayName; + _allGroups = result.Groups.OrderBy(x => x.DisplayName).ToList(); + _groups = _allGroups.ToList(); + + NormalizePermissionGroup(); + + GrantAll = _allGroups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + GrantAny = !GrantAll && _allGroups.SelectMany(x => x.Permissions).Any(p => p.IsGranted); + + _isVisible = true; + await InvokeAsync(StateHasChanged); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual async Task GrantAllAsync(bool grantAll) + { + GrantAll = grantAll; + GrantAny = false; + + if (_allGroups == null) + { + return; + } + + await ResetSearchTextAsync(); + + foreach (var permission in _allGroups.SelectMany(x => x.Permissions)) + { + if (IsDisabledPermission(permission)) + { + continue; + } + + permission.IsGranted = grantAll; + } + + await InvokeAsync(StateHasChanged); + } + + protected virtual void NormalizePermissionGroup(bool checkDisabledPermissions = true) + { + if (_groups == null) + { + return; + } + + _selectAllDisabled = _groups.All(IsPermissionGroupDisabled); + + foreach (var group in _groups) + { + SetPermissionDepths(group.Permissions, null, 0); + } + + if (_groups.Count != 0) + { + _activeTabIndex = 0; + } + } + + protected Task CloseModal() + { + _isVisible = false; + return InvokeAsync(StateHasChanged); + } + + protected virtual async Task SaveAsync() + { + try + { + if (_allGroups == null) + { + return; + } + + var updateDto = new UpdatePermissionsDto + { + Permissions = _allGroups + .SelectMany(g => g.Permissions) + .Select(p => new UpdatePermissionDto { IsGranted = p.IsGranted, Name = p.Name }) + .ToArray() + }; + + if (!updateDto.Permissions.Any(x => x.IsGranted)) + { + var confirmed = await DialogService.ShowMessageBox( + L["Warning"], + L["SaveWithoutAnyPermissionsWarningMessage"], + yesText: L["Yes"], + cancelText: L["Cancel"]); + + if (confirmed != true) + { + return; + } + } + + await PermissionAppService.UpdateAsync(_providerName!, _providerKey!, updateDto); + + Guid? userId = null; + if (_providerName == UserPermissionValueProvider.ProviderName && Guid.TryParse(_providerKey, out var parsedUserId)) + { + userId = parsedUserId; + } + + await CurrentApplicationConfigurationCacheResetService.ResetAsync(userId); + + _isVisible = false; + await InvokeAsync(StateHasChanged); + Snackbar.Add(L["SavedSuccessfully"], Severity.Success); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual string GetNormalizedGroupName(string name) + { + return "PermissionGroup_" + name.Replace(".", "_"); + } + + protected virtual void SetPermissionDepths(List permissions, string? currentParent, int currentDepth) + { + foreach (var item in permissions) + { + if (item.ParentName == currentParent) + { + _permissionDepths[item.Name] = currentDepth; + SetPermissionDepths(permissions, item.Name, currentDepth + 1); + } + } + } + + protected virtual int GetPermissionDepthOrDefault(string name) + { + return _permissionDepths.GetValueOrDefault(name, 0); + } + + protected virtual async Task GroupGrantAllChanged(bool value, PermissionGroupDto permissionGroup) + { + foreach (var permission in permissionGroup.Permissions) + { + if (!IsDisabledPermission(permission)) + { + SetPermissionGrant(permission, value); + } + } + + if (_allGroups != null) + { + GrantAll = _allGroups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + GrantAny = !GrantAll && _allGroups.SelectMany(x => x.Permissions).Any(p => p.IsGranted); + } + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task PermissionChanged(bool value, PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) + { + SetPermissionGrant(permission, value); + + if (value) + { + SetParentPermissionGrant(permissionGroup, permission); + } + else + { + var childPermissions = GetChildPermissions(permissionGroup, permission); + + foreach (var childPermission in childPermissions) + { + SetPermissionGrant(childPermission, false); + } + } + + if (_allGroups != null) + { + GrantAll = _allGroups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + GrantAny = !GrantAll && _allGroups.SelectMany(x => x.Permissions).Any(p => p.IsGranted); + } + await InvokeAsync(StateHasChanged); + } + + private void SetParentPermissionGrant(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) + { + if (permission.ParentName == null) + { + return; + } + + var parentPermission = GetParentPermission(permissionGroup, permission); + SetPermissionGrant(parentPermission, true); + + SetParentPermissionGrant(permissionGroup, parentPermission); + } + + private void SetPermissionGrant(PermissionGrantInfoDto permission, bool value) + { + if (permission.IsGranted == value) + { + return; + } + + permission.IsGranted = value; + } + + protected virtual PermissionGrantInfoDto GetParentPermission(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) + { + return permissionGroup.Permissions.First(x => x.Name == permission.ParentName); + } + + protected virtual List GetChildPermissions(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) + { + var childPermissions = new List(); + GetChildPermissions(childPermissions, permissionGroup.Permissions, permission); + return childPermissions; + } + + protected virtual void GetChildPermissions(List allChildPermissions, List permissions, PermissionGrantInfoDto permission) + { + var childPermissions = permissions.Where(x => x.ParentName == permission.Name).ToList(); + if (childPermissions.Count == 0) + { + return; + } + + allChildPermissions.AddRange(childPermissions); + + foreach (var childPermission in childPermissions) + { + GetChildPermissions(allChildPermissions, permissions, childPermission); + } + } + + protected virtual bool IsDisabledPermission(PermissionGrantInfoDto permissionGrantInfo) + { + if (!permissionGrantInfo.IsEditable) + { + return true; + } + + return permissionGrantInfo.IsGranted && + permissionGrantInfo.GrantedProviders.Any() && + permissionGrantInfo.GrantedProviders.All(p => p.ProviderName != _providerName); + } + + protected virtual string GetShownName(PermissionGrantInfoDto permissionGrantInfo) + { + if (permissionGrantInfo.GrantedProviders.All(p => p.ProviderName == _providerName)) + { + return permissionGrantInfo.DisplayName; + } + + var grantedByOtherProviders = permissionGrantInfo.GrantedProviders + .Where(p => p.ProviderName != _providerName) + .ToList(); + + if (!grantedByOtherProviders.Any()) + { + return permissionGrantInfo.DisplayName; + } + + return string.Format( + "{0} ({1})", + permissionGrantInfo.DisplayName, + grantedByOtherProviders + .Select(p => p.ProviderName) + .JoinAsString(", ") + ); + } + + protected virtual bool IsPermissionGroupDisabled(PermissionGroupDto group) + { + return group.Permissions.All(IsDisabledPermission); + } + + protected virtual async Task ResetSearchTextAsync() + { + _permissionGroupSearchText = string.Empty; + if (_allGroups != null) + { + _groups = _permissionGroupSearchText.IsNullOrWhiteSpace() + ? _allGroups.ToList() + : _allGroups.Where(x => x.DisplayName.Contains(_permissionGroupSearchText!, StringComparison.OrdinalIgnoreCase) || x.Permissions.Any(permission => permission.DisplayName.Contains(_permissionGroupSearchText!, StringComparison.OrdinalIgnoreCase))).ToList(); + + NormalizePermissionGroup(false); + } + + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task OnPermissionGroupSearchTextChangedAsync(string? value) + { + if (value == _permissionGroupSearchText) + { + return; + } + + _permissionGroupSearchText = value; + if (_allGroups != null) + { + _groups = _permissionGroupSearchText.IsNullOrWhiteSpace() + ? _allGroups.ToList() + : _allGroups.Where(x => x.DisplayName.Contains(_permissionGroupSearchText!, StringComparison.OrdinalIgnoreCase) || x.Permissions.Any(permission => permission.DisplayName.Contains(_permissionGroupSearchText!, StringComparison.OrdinalIgnoreCase))).ToList(); + + GrantAll = _allGroups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + GrantAny = !GrantAll && _allGroups.SelectMany(x => x.Permissions).Any(p => p.IsGranted); + + NormalizePermissionGroup(false); + } + + await InvokeAsync(StateHasChanged); + } +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor new file mode 100644 index 00000000000..011c5dd9269 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor @@ -0,0 +1,154 @@ +@using global::MudBlazor +@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase + + + + @L["ResourcePermissions"] - @ResourceDisplayName + + + @if (HasAnyResourcePermission && HasAnyResourceProviderKeyLookupService) + { +
+ + @L["AddResourcePermission"] + +
+ + + + + + + @L["Edit"] + + + @L["Delete"] + + + + + + + + + @context.Item.ProviderName + + + @context.Item.ProviderDisplayName + + + + + @foreach (var permission in context.Item.Permissions) + { + + @permission.DisplayName + + } + + + + + @L["NoDataAvailableInDatatable"] + + + } + else + { + + @if (!HasAnyResourcePermission) + { + @L["NoResourcePermissionFound"] + } + else if (!HasAnyResourceProviderKeyLookupService) + { + @L["NoResourceProviderKeyLookupServiceFound"] + } + + } +
+ + @L["Close"] + +
+ +@* Create Resource Permission Dialog *@ +@if (_createDialogVisible) +{ + + + @L["AddResourcePermission"] + + + + @L["ResourcePermissionTarget"] + + @foreach (var keyLookupService in ResourceProviderKeyLookupServices) + { + @keyLookupService.DisplayName + } + + + @L["ResourcePermissionPermissions"] + +
+ @foreach (var permission in CreateEntity.Permissions) + { + + } +
+
+
+ + @L["Cancel"] + @L["Save"] + +
+} + +@* Edit Resource Permission Dialog *@ +@if (_editDialogVisible) +{ + + + @L["UpdateResourcePermission"] + + + + @L["ResourcePermissionPermissions"] + +
+ @foreach (var permission in EditEntity.Permissions) + { + + } +
+
+
+ + @L["Cancel"] + @L["Save"] + +
+} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor.cs new file mode 100644 index 00000000000..1df024471ec --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor.cs @@ -0,0 +1,337 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Messages; +using Volo.Abp.PermissionManagement.Localization; + +namespace Volo.Abp.PermissionManagement.Blazor.MudBlazor.Components; + +public partial class ResourcePermissionManagementModal +{ + [Inject] protected IPermissionAppService PermissionAppService { get; set; } = default!; + + [Inject] protected IUiMessageService UiMessageService { get; set; } = default!; + + [Inject] protected ISnackbar Snackbar { get; set; } = default!; + + [Inject] protected IDialogService DialogService { get; set; } = default!; + + protected bool _isVisible; + protected bool _createDialogVisible; + protected bool _editDialogVisible; + protected MudForm? _createFormRef; + protected MudForm? _editFormRef; + + public bool HasAnyResourcePermission { get; set; } + public bool HasAnyResourceProviderKeyLookupService { get; set; } + protected string? ResourceName { get; set; } + protected string? ResourceKey { get; set; } + protected string? ResourceDisplayName { get; set; } + protected int PageSize { get; set; } = 10; + + protected CreateModel CreateEntity { get; set; } = new CreateModel + { + Permissions = new List() + }; + + protected SearchProviderKeyInfo? _selectedProviderKey; + protected string? ProviderKey => _selectedProviderKey?.ProviderKey; + protected string? ProviderDisplayName => _selectedProviderKey?.ProviderDisplayName; + + public GetResourcePermissionDefinitionListResultDto ResourcePermissionDefinitions { get; set; } = new() + { + Permissions = new List() + }; + protected string? CurrentLookupService { get; set; } + protected List ResourceProviderKeyLookupServices { get; set; } = new(); + protected List ProviderKeys { get; set; } = new(); + protected GetResourcePermissionListResultDto ResourcePermissionList = new() + { + Permissions = new List() + }; + + protected EditModel EditEntity { get; set; } = new EditModel + { + Permissions = new List() + }; + + protected bool _grantAllCreate; + protected bool _grantAllEdit; + + public ResourcePermissionManagementModal() + { + LocalizationResource = typeof(AbpPermissionManagementResource); + } + + public virtual async Task OpenAsync(string resourceName, string resourceKey, string resourceDisplayName) + { + try + { + ResourceName = resourceName; + ResourceKey = resourceKey; + ResourceDisplayName = resourceDisplayName; + + ResourcePermissionDefinitions = await PermissionAppService.GetResourceDefinitionsAsync(ResourceName); + ResourceProviderKeyLookupServices = (await PermissionAppService.GetResourceProviderKeyLookupServicesAsync(ResourceName)).Providers; + + HasAnyResourcePermission = ResourcePermissionDefinitions.Permissions.Any(); + if (HasAnyResourcePermission) + { + HasAnyResourceProviderKeyLookupService = ResourceProviderKeyLookupServices.Count > 0; + } + + await InvokeAsync(StateHasChanged); + + ResourcePermissionList = await PermissionAppService.GetResourceAsync(ResourceName, ResourceKey); + + _isVisible = true; + await InvokeAsync(StateHasChanged); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual Task CloseModal() + { + _isVisible = false; + return InvokeAsync(StateHasChanged); + } + + protected virtual async Task OpenCreateDialogAsync() + { + CurrentLookupService = ResourceProviderKeyLookupServices.FirstOrDefault()?.Name; + + _selectedProviderKey = null; + ProviderKeys = new List(); + if (_createFormRef != null) + { + await _createFormRef.ResetAsync(); + } + + CreateEntity = new CreateModel + { + Permissions = ResourcePermissionDefinitions.Permissions.Select(x => new ResourcePermissionModel + { + Name = x.Name, + DisplayName = x.DisplayName, + IsGranted = false + }).ToList() + }; + + _grantAllCreate = false; + _createDialogVisible = true; + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task SelectedProviderKeyChanged(SearchProviderKeyInfo? value) + { + _selectedProviderKey = value; + + if (value != null && CurrentLookupService != null) + { + var permissionGrants = await PermissionAppService.GetResourceByProviderAsync(ResourceName!, ResourceKey!, CurrentLookupService, value.ProviderKey); + foreach (var permission in CreateEntity.Permissions) + { + permission.IsGranted = permissionGrants.Permissions.Any(p => p.Name == permission.Name && p.Providers.Contains(CurrentLookupService) && p.IsGranted); + } + + _grantAllCreate = CreateEntity.Permissions.All(x => x.IsGranted); + } + + await InvokeAsync(StateHasChanged); + } + + private async Task> SearchProviderKeyAsync(string value, CancellationToken token) + { + if (value.IsNullOrWhiteSpace() || CurrentLookupService == null) + { + ProviderKeys = new List(); + return ProviderKeys; + } + + ProviderKeys = (await PermissionAppService.SearchResourceProviderKeyAsync(ResourceName!, CurrentLookupService, value, 1)).Keys; + + return ProviderKeys; + } + + protected virtual async Task GrantAllCreateAsync(bool value) + { + _grantAllCreate = value; + foreach (var permission in CreateEntity.Permissions) + { + permission.IsGranted = value; + } + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task GrantAllEditAsync(bool value) + { + _grantAllEdit = value; + foreach (var permission in EditEntity.Permissions) + { + permission.IsGranted = value; + } + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task OpenEditDialogAsync(ResourcePermissionGrantInfoDto permission) + { + var resourcePermissions = await PermissionAppService.GetResourceByProviderAsync(ResourceName!, ResourceKey!, permission.ProviderName, permission.ProviderKey); + EditEntity = new EditModel + { + ProviderName = permission.ProviderName, + ProviderKey = permission.ProviderKey, + Permissions = resourcePermissions.Permissions.Select(x => new ResourcePermissionModel + { + Name = x.Name, + DisplayName = x.DisplayName, + IsGranted = x.IsGranted + }).ToList() + }; + + _grantAllEdit = EditEntity.Permissions.All(x => x.IsGranted); + _editDialogVisible = true; + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task CloseCreateDialogAsync() + { + _createDialogVisible = false; + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task CloseEditDialogAsync() + { + _editDialogVisible = false; + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task OnLookupServiceCheckedValueChanged(string? value) + { + CurrentLookupService = value; + _selectedProviderKey = null; + ProviderKeys = new List(); + if (_createFormRef != null) + { + await _createFormRef.ResetAsync(); + } + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task CreateResourcePermissionAsync() + { + if (_createFormRef == null) + { + return; + } + + await _createFormRef.Validate(); + if (!_createFormRef.IsValid) + { + return; + } + + if (ProviderKey == null || CurrentLookupService == null) + { + return; + } + + await PermissionAppService.UpdateResourceAsync( + ResourceName!, + ResourceKey!, + new UpdateResourcePermissionsDto + { + ProviderName = CurrentLookupService, + ProviderKey = ProviderKey, + Permissions = CreateEntity.Permissions.Where(p => p.IsGranted).Select(p => p.Name).ToList() + } + ); + + await CloseCreateDialogAsync(); + ResourcePermissionList = await PermissionAppService.GetResourceAsync(ResourceName!, ResourceKey!); + await InvokeAsync(StateHasChanged); + Snackbar.Add(L["SavedSuccessfully"], Severity.Success); + } + + protected virtual async Task UpdateResourcePermissionAsync() + { + if (_editFormRef == null) + { + return; + } + + await _editFormRef.Validate(); + if (!_editFormRef.IsValid) + { + return; + } + + await PermissionAppService.UpdateResourceAsync( + ResourceName!, + ResourceKey!, + new UpdateResourcePermissionsDto + { + ProviderName = EditEntity.ProviderName, + ProviderKey = EditEntity.ProviderKey, + Permissions = EditEntity.Permissions.Where(p => p.IsGranted).Select(p => p.Name).ToList() + } + ); + + await CloseEditDialogAsync(); + ResourcePermissionList = await PermissionAppService.GetResourceAsync(ResourceName!, ResourceKey!); + await InvokeAsync(StateHasChanged); + Snackbar.Add(L["SavedSuccessfully"], Severity.Success); + } + + protected virtual async Task DeleteResourcePermissionAsync(ResourcePermissionGrantInfoDto permission) + { + var confirmed = await DialogService.ShowMessageBox( + L["AreYouSure"], + L["ResourcePermissionDeletionConfirmationMessage"], + yesText: L["Yes"], + cancelText: L["Cancel"]); + + if (confirmed == true) + { + await PermissionAppService.DeleteResourceAsync( + ResourceName!, + ResourceKey!, + permission.ProviderName, + permission.ProviderKey + ); + + ResourcePermissionList = await PermissionAppService.GetResourceAsync(ResourceName!, ResourceKey!); + Snackbar.Add(L["DeletedSuccessfully"], Severity.Success); + await InvokeAsync(StateHasChanged); + } + } + + public class CreateModel + { + public List Permissions { get; set; } = new(); + } + + public class EditModel + { + public string ProviderName { get; set; } = string.Empty; + + public string ProviderKey { get; set; } = string.Empty; + + public List Permissions { get; set; } = new(); + } + + public class ResourcePermissionModel + { + public string Name { get; set; } = string.Empty; + + public string DisplayName { get; set; } = string.Empty; + + public bool IsGranted { get; set; } + } +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Volo.Abp.PermissionManagement.Blazor.MudBlazor.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Volo.Abp.PermissionManagement.Blazor.MudBlazor.csproj new file mode 100644 index 00000000000..d12603d05f1 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Volo.Abp.PermissionManagement.Blazor.MudBlazor.csproj @@ -0,0 +1,18 @@ + + + + + + + net10.0 + + + + + + + + + + + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/_Imports.razor b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/_Imports.razor new file mode 100644 index 00000000000..bfec4381b3b --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/_Imports.razor @@ -0,0 +1,3 @@ +@using Microsoft.AspNetCore.Components.Web +@using Volo.Abp.AspNetCore.Components.Web +@using MudBlazor diff --git a/modules/setting-management/Volo.Abp.SettingManagement.slnx b/modules/setting-management/Volo.Abp.SettingManagement.slnx index f44b64c8e09..5b73c332f0a 100644 --- a/modules/setting-management/Volo.Abp.SettingManagement.slnx +++ b/modules/setting-management/Volo.Abp.SettingManagement.slnx @@ -5,6 +5,9 @@ + + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.Server/AbpSettingManagementBlazorMudBlazorServerModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.Server/AbpSettingManagementBlazorMudBlazorServerModule.cs new file mode 100644 index 00000000000..8a100a605e2 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.Server/AbpSettingManagementBlazorMudBlazorServerModule.cs @@ -0,0 +1,12 @@ +using Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor; +using Volo.Abp.Modularity; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor.Server; + +[DependsOn( + typeof(AbpSettingManagementBlazorMudBlazorModule), + typeof(AbpAspNetCoreComponentsServerThemingMudBlazorModule) +)] +public class AbpSettingManagementBlazorMudBlazorServerModule : AbpModule +{ +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.Server/Volo.Abp.SettingManagement.Blazor.MudBlazor.Server.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.Server/Volo.Abp.SettingManagement.Blazor.MudBlazor.Server.csproj new file mode 100644 index 00000000000..99c10ba6e08 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.Server/Volo.Abp.SettingManagement.Blazor.MudBlazor.Server.csproj @@ -0,0 +1,15 @@ + + + + + + + net10.0 + + + + + + + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly/AbpSettingManagementBlazorMudBlazorWebAssemblyModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly/AbpSettingManagementBlazorMudBlazorWebAssemblyModule.cs new file mode 100644 index 00000000000..6ecf4db2020 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly/AbpSettingManagementBlazorMudBlazorWebAssemblyModule.cs @@ -0,0 +1,13 @@ +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; +using Volo.Abp.Modularity; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly; + +[DependsOn( + typeof(AbpSettingManagementBlazorMudBlazorModule), + typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule), + typeof(AbpSettingManagementHttpApiClientModule) +)] +public class AbpSettingManagementBlazorMudBlazorWebAssemblyModule : AbpModule +{ +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly.csproj new file mode 100644 index 00000000000..c219f565c9c --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly.csproj @@ -0,0 +1,16 @@ + + + + + + + net10.0 + + + + + + + + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/AbpSettingManagementBlazorMudBlazorModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/AbpSettingManagementBlazorMudBlazorModule.cs new file mode 100644 index 00000000000..2e5f3220475 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/AbpSettingManagementBlazorMudBlazorModule.cs @@ -0,0 +1,51 @@ +using Localization.Resources.AbpUi; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; +using Volo.Abp.Localization; +using Volo.Abp.Mapperly; +using Volo.Abp.Modularity; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Settings; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.SettingManagement.Localization; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor; + +[DependsOn( + typeof(AbpMapperlyModule), + typeof(AbpAspNetCoreComponentsWebThemingMudBlazorModule), + typeof(AbpSettingManagementApplicationContractsModule) +)] +public class AbpSettingManagementBlazorMudBlazorModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddMapperlyObjectMapper(); + + Configure(options => + { + options.MenuContributors.Add(new SettingManagementMenuContributor()); + }); + + Configure(options => + { + options.AdditionalAssemblies.Add(typeof(AbpSettingManagementBlazorMudBlazorModule).Assembly); + }); + + Configure(options => + { + options.Contributors.Add(new EmailingPageContributor()); + options.Contributors.Add(new TimeZonePageContributor()); + }); + + Configure(options => + { + options.Resources + .Get() + .AddBaseTypes( + typeof(AbpUiResource) + ); + }); + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/ISettingComponentContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/ISettingComponentContributor.cs new file mode 100644 index 00000000000..b81cd7f78d7 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/ISettingComponentContributor.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor; + +public interface ISettingComponentContributor +{ + Task ConfigureAsync(SettingComponentCreationContext context); + + Task CheckPermissionsAsync(SettingComponentCreationContext context); +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Menus/SettingManagementMenuContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Menus/SettingManagementMenuContributor.cs new file mode 100644 index 00000000000..477f719a21f --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Menus/SettingManagementMenuContributor.cs @@ -0,0 +1,63 @@ +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.Features; +using Volo.Abp.SettingManagement.Localization; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; + +public class SettingManagementMenuContributor : IMenuContributor +{ + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.Main) + { + await ConfigureMainMenuAsync(context); + } + } + + private async Task ConfigureMainMenuAsync(MenuConfigurationContext context) + { + var settingManagementPageOptions = context.ServiceProvider.GetRequiredService>().Value; + var settingPageCreationContext = new SettingComponentCreationContext(context.ServiceProvider); + if (!settingManagementPageOptions.Contributors.Any() || + !(await CheckAnyOfPagePermissionsGranted(settingManagementPageOptions, settingPageCreationContext)) + ) + { + return; + } + + var l = context.GetLocalizer(); + + /* This may happen if MVC UI is being used in the same application. + * In this case, we are removing the MVC setting management UI. */ + context.Menu.GetAdministration().TryRemoveMenuItem(SettingManagementMenus.GroupName); + + context.Menu + .GetAdministration() + .AddItem( + new ApplicationMenuItem( + SettingManagementMenus.GroupName, + l["Settings"], + "~/setting-management", + icon: "fa fa-cog" + ).RequireFeatures(SettingManagementFeatures.Enable) + ); + } + + protected virtual async Task CheckAnyOfPagePermissionsGranted( + SettingManagementComponentOptions settingManagementComponentOptions, + SettingComponentCreationContext settingComponentCreationContext) + { + foreach (var contributor in settingManagementComponentOptions.Contributors) + { + if (await contributor.CheckPermissionsAsync(settingComponentCreationContext)) + { + return true; + } + } + return false; + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Menus/SettingManagementMenus.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Menus/SettingManagementMenus.cs new file mode 100644 index 00000000000..8c773725e75 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Menus/SettingManagementMenus.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; + +public class SettingManagementMenus +{ + public const string GroupName = "SettingManagement"; +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor new file mode 100644 index 00000000000..e306bebe838 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor @@ -0,0 +1,106 @@ +@using Volo.Abp.SettingManagement.Localization +@using global::MudBlazor +@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase + +@if (EmailSettings != null) +{ + + + + + + + + + + + + + + + + + + + + + @if (!EmailSettings.SmtpUseDefaultCredentials) + { + + + + + + + + + + } + + + +
+ @if (HasSendTestEmailPermission) + { + + @L["SendTestEmail"] + + } + + @L["Save"] + +
+ + @if (HasSendTestEmailPermission) + { + + + @L["SendTestEmail"] + + + + + + + + + + + @L["Cancel"] + @L["Send"] + + + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs new file mode 100644 index 00000000000..9e15fad338d --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs @@ -0,0 +1,207 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Messages; +using Volo.Abp.AspNetCore.Components.Web.Configuration; +using Volo.Abp.Auditing; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.SettingManagement.Localization; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor.Pages.SettingManagement.EmailSettingGroup; + +public partial class EmailSettingGroupViewComponent +{ + [Inject] + protected IEmailSettingsAppService EmailSettingsAppService { get; set; } = default!; + + [Inject] + protected IPermissionChecker PermissionChecker { get; set; } = default!; + + [Inject] + private ICurrentApplicationConfigurationCacheResetService CurrentApplicationConfigurationCacheResetService { get; set; } = default!; + + [Inject] + protected IUiMessageService UiMessageService { get; set; } = default!; + + [Inject] + protected ISnackbar Snackbar { get; set; } = default!; + + protected UpdateEmailSettingsViewModel? EmailSettings; + + protected SendTestEmailViewModel SendTestEmailInput = new(); + + protected MudForm? _emailFormRef; + protected MudForm? _testEmailFormRef; + + protected bool _sendTestEmailDialogVisible; + + protected bool HasSendTestEmailPermission { get; set; } + + public EmailSettingGroupViewComponent() + { + ObjectMapperContext = typeof(AbpSettingManagementBlazorMudBlazorModule); + LocalizationResource = typeof(AbpSettingManagementResource); + } + + protected async override Task OnInitializedAsync() + { + try + { + EmailSettings = ObjectMapper.Map(await EmailSettingsAppService.GetAsync()); + HasSendTestEmailPermission = await PermissionChecker.IsGrantedAsync(SettingManagementPermissions.EmailingTest); + SendTestEmailInput = new SendTestEmailViewModel(); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual async Task UpdateSettingsAsync() + { + try + { + if (_emailFormRef == null) + { + return; + } + + await _emailFormRef.Validate(); + if (!_emailFormRef.IsValid) + { + return; + } + + if (EmailSettings == null) + { + return; + } + + await EmailSettingsAppService.UpdateAsync(ObjectMapper.Map(EmailSettings)); + + await CurrentApplicationConfigurationCacheResetService.ResetAsync(); + + Snackbar.Add(L["SavedSuccessfully"], Severity.Success); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual async Task OpenSendTestEmailDialogAsync() + { + try + { + if (_testEmailFormRef != null) + { + await _testEmailFormRef.ResetAsync(); + } + var emailSettings = await EmailSettingsAppService.GetAsync(); + SendTestEmailInput = new SendTestEmailViewModel + { + SenderEmailAddress = emailSettings.DefaultFromAddress, + TargetEmailAddress = CurrentUser.Email, + Subject = L["TestEmailSubject", new Random().Next(1000, 9999)], + Body = L["TestEmailBody"] + }; + + _sendTestEmailDialogVisible = true; + await InvokeAsync(StateHasChanged); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + protected virtual Task CloseSendTestEmailDialogAsync() + { + _sendTestEmailDialogVisible = false; + return InvokeAsync(StateHasChanged); + } + + protected virtual async Task SendTestEmailAsync() + { + try + { + if (_testEmailFormRef == null) + { + return; + } + + await _testEmailFormRef.Validate(); + if (!_testEmailFormRef.IsValid) + { + return; + } + + await EmailSettingsAppService.SendTestEmailAsync(ObjectMapper.Map(SendTestEmailInput)); + + Snackbar.Add(L["SentSuccessfully"], Severity.Success); + + await CloseSendTestEmailDialogAsync(); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + public class UpdateEmailSettingsViewModel + { + [MaxLength(256)] + [Display(Name = "SmtpHost")] + public string? SmtpHost { get; set; } + + [Range(1, 65535)] + [Display(Name = "SmtpPort")] + public int SmtpPort { get; set; } + + [MaxLength(1024)] + [Display(Name = "SmtpUserName")] + public string? SmtpUserName { get; set; } + + [MaxLength(1024)] + [DataType(DataType.Password)] + [DisableAuditing] + [Display(Name = "SmtpPassword")] + public string? SmtpPassword { get; set; } + + [MaxLength(1024)] + [Display(Name = "SmtpDomain")] + public string? SmtpDomain { get; set; } + + [Display(Name = "SmtpEnableSsl")] + public bool SmtpEnableSsl { get; set; } + + [Display(Name = "SmtpUseDefaultCredentials")] + public bool SmtpUseDefaultCredentials { get; set; } + + [MaxLength(1024)] + [Required] + [Display(Name = "DefaultFromAddress")] + public string? DefaultFromAddress { get; set; } + + [MaxLength(1024)] + [Required] + [Display(Name = "DefaultFromDisplayName")] + public string? DefaultFromDisplayName { get; set; } + } + + public class SendTestEmailViewModel + { + [Required] + public string? SenderEmailAddress { get; set; } + + [Required] + public string? TargetEmailAddress { get; set; } + + [Required] + public string? Subject { get; set; } + + public string? Body { get; set; } + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/SettingManagement.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/SettingManagement.razor new file mode 100644 index 00000000000..785374eb550 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/SettingManagement.razor @@ -0,0 +1,44 @@ +@page "/setting-management" +@page "/{culture}/setting-management" +@using Microsoft.AspNetCore.Authorization +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components +@using Volo.Abp.Features +@attribute [Authorize] +@attribute [RequiresFeature(SettingManagementFeatures.Enable)] +@using Microsoft.Extensions.Localization +@using Volo.Abp.UI.Navigation.Localization.Resource +@inject IStringLocalizer LUiNavigation +@using global::MudBlazor + +@* ************************* PAGE HEADER ************************* *@ + + + + + @if (!string.IsNullOrEmpty(SelectedGroup)) + { + + @foreach (var group in SettingComponentCreationContext.Groups) + { + +
+ @{ + SettingItemRenders.Add(builder => + { + builder.OpenComponent(0, group.ComponentType); + builder.CloseComponent(); + }); + } + + @SettingItemRenders.Last() +
+
+ } +
+ } +
+
diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/SettingManagement.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/SettingManagement.razor.cs new file mode 100644 index 00000000000..f04e62b9fcf --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/SettingManagement.razor.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; +using MudBlazor; +using Volo.Abp.MudBlazorUI; +using Volo.Abp.SettingManagement.Localization; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor.Pages.SettingManagement; + +public partial class SettingManagement +{ + [Parameter] + public string? Culture { get; set; } + + [Inject] + protected IServiceProvider ServiceProvider { get; set; } = default!; + + protected SettingComponentCreationContext SettingComponentCreationContext { get; set; } = default!; + + [Inject] + protected IOptions _options { get; set; } = default!; + + [Inject] + protected IStringLocalizer L { get; set; } = default!; + + protected SettingManagementComponentOptions Options => _options.Value; + + protected List SettingItemRenders { get; set; } = new List(); + + protected string? SelectedGroup; + protected List BreadcrumbItems = new(); + + protected int _activeTabIndex = 0; + + protected async override Task OnInitializedAsync() + { + BreadcrumbItems.Add(new BreadcrumbItem(LUiNavigation["Menu:Administration"].Value, null, disabled: true)); + BreadcrumbItems.Add(new BreadcrumbItem(L["Menu:Settings"].Value, null, disabled: true)); + + SettingComponentCreationContext = new SettingComponentCreationContext(ServiceProvider); + + foreach (var contributor in Options.Contributors) + { + await contributor.ConfigureAsync(SettingComponentCreationContext); + } + SettingComponentCreationContext.Normalize(); + SettingItemRenders.Clear(); + + if (SelectedGroup.IsNullOrEmpty() && SettingComponentCreationContext.Groups.Any()) + { + SelectedGroup = GetNormalizedString(SettingComponentCreationContext.Groups.First().Id); + _activeTabIndex = 0; + } + } + + protected virtual string GetNormalizedString(string value) + { + return value.Replace('.', '_'); + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor new file mode 100644 index 00000000000..f2689862c60 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor @@ -0,0 +1,32 @@ +@using Volo.Abp.SettingManagement.Localization +@using global::MudBlazor +@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase + +@if (TimezoneSettings != null) +{ + + + + + @foreach (var item in TimezoneSettings.TimeZoneItems) + { + @item.Name + } + + @L["TimezoneHelpText"] + + +
+ + @L["Save"] + +
+
+} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor.cs new file mode 100644 index 00000000000..90481994e72 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/TimeZoneSettingGroup/TimeZoneSettingGroupViewComponent.razor.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Messages; +using Volo.Abp.AspNetCore.Components.Web.Configuration; +using Volo.Abp.SettingManagement.Localization; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor.Pages.SettingManagement.TimeZoneSettingGroup; + +public partial class TimeZoneSettingGroupViewComponent +{ + [Inject] + protected ITimeZoneSettingsAppService TimeZoneSettingsAppService { get; set; } = default!; + + [Inject] + private ICurrentApplicationConfigurationCacheResetService CurrentApplicationConfigurationCacheResetService { get; set; } = default!; + + [Inject] + protected IUiMessageService UiMessageService { get; set; } = default!; + + [Inject] + protected ISnackbar Snackbar { get; set; } = default!; + + protected UpdateTimezoneSettingsViewModel? TimezoneSettings; + + public TimeZoneSettingGroupViewComponent() + { + ObjectMapperContext = typeof(AbpSettingManagementBlazorMudBlazorModule); + LocalizationResource = typeof(AbpSettingManagementResource); + } + + protected async override Task OnInitializedAsync() + { + TimezoneSettings = new UpdateTimezoneSettingsViewModel() + { + Timezone = await TimeZoneSettingsAppService.GetAsync(), + TimeZoneItems = await TimeZoneSettingsAppService.GetTimezonesAsync() + }; + } + + protected virtual async Task OnSelectedValueChangedAsync(string? timezone) + { + if (TimezoneSettings != null) + { + TimezoneSettings.Timezone = timezone; + } + await InvokeAsync(StateHasChanged); + } + + protected virtual async Task UpdateSettingsAsync() + { + try + { + if (TimezoneSettings == null) + { + return; + } + + await TimeZoneSettingsAppService.UpdateAsync(TimezoneSettings.Timezone); + await CurrentApplicationConfigurationCacheResetService.ResetAsync(); + Snackbar.Add(L["SavedSuccessfully"], Severity.Success); + } + catch (Exception ex) + { + await HandleErrorAsync(ex); + } + } + + public class UpdateTimezoneSettingsViewModel + { + public string? Timezone { get; set; } + + public List? TimeZoneItems { get; set; } + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingComponentCreationContext.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingComponentCreationContext.cs new file mode 100644 index 00000000000..b032b098415 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingComponentCreationContext.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor; + +public class SettingComponentCreationContext : IServiceProviderAccessor +{ + public IServiceProvider ServiceProvider { get; } + + public List Groups { get; private set; } + + public SettingComponentCreationContext(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + + Groups = new List(); + } + + public void Normalize() + { + Order(); + } + + private void Order() + { + Groups = Groups.OrderBy(item => item.Order).ThenBy(item => item.DisplayName).ToList(); + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingComponentGroup.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingComponentGroup.cs new file mode 100644 index 00000000000..9755b410b19 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingComponentGroup.cs @@ -0,0 +1,40 @@ +using System; +using JetBrains.Annotations; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor; + +public class SettingComponentGroup +{ + public const int DefaultOrder = 1000; + + public string Id { + get => _id; + set => _id = Check.NotNullOrWhiteSpace(value, nameof(Id)); + } + private string _id = string.Empty; + + public string DisplayName { + get => _displayName; + set => _displayName = Check.NotNullOrWhiteSpace(value, nameof(DisplayName)); + } + private string _displayName = string.Empty; + + public Type ComponentType { + get => _componentType; + set => _componentType = Check.NotNull(value, nameof(ComponentType)); + } + private Type _componentType = null!; + + public object? Parameter { get; set; } + + public int Order { get; set; } + + public SettingComponentGroup([NotNull] string id, [NotNull] string displayName, [NotNull] Type componentType, object? parameter = null, int order = DefaultOrder) + { + Id = id; + DisplayName = displayName; + ComponentType = componentType; + Parameter = parameter; + Order = order; + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingManagementBlazorMudBlazorMappers.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingManagementBlazorMudBlazorMappers.cs new file mode 100644 index 00000000000..89b9b23de6f --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingManagementBlazorMudBlazorMappers.cs @@ -0,0 +1,30 @@ +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; +using static Volo.Abp.SettingManagement.Blazor.MudBlazor.Pages.SettingManagement.EmailSettingGroup.EmailSettingGroupViewComponent; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor; + +[Mapper] +public partial class UpdateEmailSettingsViewModelToUpdateEmailSettingsDtoMapper : MapperBase +{ + public override partial UpdateEmailSettingsDto Map(UpdateEmailSettingsViewModel source); + + public override partial void Map(UpdateEmailSettingsViewModel source, UpdateEmailSettingsDto destination); +} + + +[Mapper] +public partial class EmailSettingsDtoToUpdateEmailSettingsViewModelMapper : MapperBase +{ + public override partial UpdateEmailSettingsViewModel Map(EmailSettingsDto source); + + public override partial void Map(EmailSettingsDto source, UpdateEmailSettingsViewModel destination); +} + +[Mapper] +public partial class SendTestEmailViewModelToSendTestEmailInputMapper : MapperBase +{ + public override partial SendTestEmailInput Map(SendTestEmailViewModel source); + + public override partial void Map(SendTestEmailViewModel source, SendTestEmailInput destination); +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingManagementComponentOptions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingManagementComponentOptions.cs new file mode 100644 index 00000000000..7e5e473c3d5 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/SettingManagementComponentOptions.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor; + +public class SettingManagementComponentOptions +{ + public List Contributors { get; } + + public SettingManagementComponentOptions() + { + Contributors = new List(); + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Settings/EmailingPageContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Settings/EmailingPageContributor.cs new file mode 100644 index 00000000000..bdb204e6986 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Settings/EmailingPageContributor.cs @@ -0,0 +1,62 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Volo.Abp.Features; +using Volo.Abp.MultiTenancy; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Pages.SettingManagement.EmailSettingGroup; +using Volo.Abp.SettingManagement.Localization; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor.Settings; + +public class EmailingPageContributor : ISettingComponentContributor +{ + public async Task ConfigureAsync(SettingComponentCreationContext context) + { + if (!await CheckPermissionsInternalAsync(context)) + { + return; + } + + var l = context.ServiceProvider.GetRequiredService>(); + context.Groups.Add( + new SettingComponentGroup( + "Volo.Abp.SettingManagement", + l["Menu:Emailing"], + typeof(EmailSettingGroupViewComponent) + ) + ); + } + + public async Task CheckPermissionsAsync(SettingComponentCreationContext context) + { + return await CheckPermissionsInternalAsync(context); + } + + private async Task CheckPermissionsInternalAsync(SettingComponentCreationContext context) + { + if (!await CheckFeatureAsync(context)) + { + return false; + } + + var authorizationService = context.ServiceProvider.GetRequiredService(); + + return await authorizationService.IsGrantedAsync(SettingManagementPermissions.Emailing); + } + + private async Task CheckFeatureAsync(SettingComponentCreationContext context) + { + var currentTenant = context.ServiceProvider.GetRequiredService(); + + if (!currentTenant.IsAvailable) + { + return true; + } + + var featureCheck = context.ServiceProvider.GetRequiredService(); + + return await featureCheck.IsEnabledAsync(SettingManagementFeatures.AllowChangingEmailSettings); + + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Settings/TimeZonePageContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Settings/TimeZonePageContributor.cs new file mode 100644 index 00000000000..6f812bd6e19 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Settings/TimeZonePageContributor.cs @@ -0,0 +1,36 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Volo.Abp.Features; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Pages.SettingManagement.TimeZoneSettingGroup; +using Volo.Abp.SettingManagement.Localization; +using Volo.Abp.Timing; + +namespace Volo.Abp.SettingManagement.Blazor.MudBlazor.Settings; + +public class TimeZonePageContributor : ISettingComponentContributor +{ + public async Task ConfigureAsync(SettingComponentCreationContext context) + { + var l = context.ServiceProvider.GetRequiredService>(); + if (await CheckPermissionsAsync(context)) + { + context.Groups.Add( + new SettingComponentGroup( + "Volo.Abp.TimeZone", + l["Menu:TimeZone"], + typeof(TimeZoneSettingGroupViewComponent) + ) + ); + } + } + + public async Task CheckPermissionsAsync(SettingComponentCreationContext context) + { + var authorizationService = context.ServiceProvider.GetRequiredService(); + + return context.ServiceProvider.GetRequiredService().SupportsMultipleTimezone + && await authorizationService.IsGrantedAsync(SettingManagementPermissions.TimeZone); + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Volo.Abp.SettingManagement.Blazor.MudBlazor.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Volo.Abp.SettingManagement.Blazor.MudBlazor.csproj new file mode 100644 index 00000000000..93f85f21e9d --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Volo.Abp.SettingManagement.Blazor.MudBlazor.csproj @@ -0,0 +1,19 @@ + + + + + + + net10.0 + Volo.Abp.SettingManagement.Blazor.MudBlazor + + + + + + + + + + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/_Imports.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/_Imports.razor new file mode 100644 index 00000000000..4e91324cd86 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/_Imports.razor @@ -0,0 +1,4 @@ +@using Microsoft.AspNetCore.Components.Web +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor +@using MudBlazor +@using Volo.Abp.MudBlazorUI diff --git a/modules/tenant-management/Volo.Abp.TenantManagement.slnx b/modules/tenant-management/Volo.Abp.TenantManagement.slnx index ee9677787f3..e44ab4110a9 100644 --- a/modules/tenant-management/Volo.Abp.TenantManagement.slnx +++ b/modules/tenant-management/Volo.Abp.TenantManagement.slnx @@ -2,6 +2,9 @@ + + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.Server/AbpTenantManagementBlazorMudBlazorServerModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.Server/AbpTenantManagementBlazorMudBlazorServerModule.cs new file mode 100644 index 00000000000..59c6cb267f8 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.Server/AbpTenantManagementBlazorMudBlazorServerModule.cs @@ -0,0 +1,14 @@ +using Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server; +using Volo.Abp.Modularity; + +namespace Volo.Abp.TenantManagement.Blazor.MudBlazor.Server; + +[DependsOn( + typeof(AbpTenantManagementBlazorMudBlazorModule), + typeof(AbpAspNetCoreComponentsServerThemingMudBlazorModule), + typeof(AbpFeatureManagementBlazorMudBlazorServerModule) +)] +public class AbpTenantManagementBlazorMudBlazorServerModule : AbpModule +{ +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.Server/Volo.Abp.TenantManagement.Blazor.MudBlazor.Server.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.Server/Volo.Abp.TenantManagement.Blazor.MudBlazor.Server.csproj new file mode 100644 index 00000000000..96cf8a86b0d --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.Server/Volo.Abp.TenantManagement.Blazor.MudBlazor.Server.csproj @@ -0,0 +1,16 @@ + + + + + + + net10.0 + + + + + + + + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly/AbpTenantManagementBlazorMudBlazorWebAssemblyModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly/AbpTenantManagementBlazorMudBlazorWebAssemblyModule.cs new file mode 100644 index 00000000000..4258f1a8c43 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly/AbpTenantManagementBlazorMudBlazorWebAssemblyModule.cs @@ -0,0 +1,15 @@ +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor.WebAssembly; +using Volo.Abp.Modularity; + +namespace Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly; + +[DependsOn( + typeof(AbpTenantManagementBlazorMudBlazorModule), + typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule), + typeof(AbpFeatureManagementBlazorMudBlazorWebAssemblyModule), + typeof(AbpTenantManagementHttpApiClientModule) +)] +public class AbpTenantManagementBlazorMudBlazorWebAssemblyModule : AbpModule +{ +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly.csproj new file mode 100644 index 00000000000..f41f2e4ef0d --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly/Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly.csproj @@ -0,0 +1,17 @@ + + + + + + + net10.0 + + + + + + + + + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/AbpTenantManagementBlazorMudBlazorMapperlyMappers.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/AbpTenantManagementBlazorMudBlazorMapperlyMappers.cs new file mode 100644 index 00000000000..83b14746474 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/AbpTenantManagementBlazorMudBlazorMapperlyMappers.cs @@ -0,0 +1,16 @@ +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; + +namespace Volo.Abp.TenantManagement.Blazor.MudBlazor; + +[Mapper] +[MapExtraProperties] +public partial class TenantDtoToTenantUpdateDtoMapper + : MapperBase +{ + [MapperIgnoreSource(nameof(TenantDto.Id))] + public override partial TenantUpdateDto Map(TenantDto source); + + [MapperIgnoreSource(nameof(TenantDto.Id))] + public override partial void Map(TenantDto source, TenantUpdateDto destination); +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/AbpTenantManagementBlazorMudBlazorModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/AbpTenantManagementBlazorMudBlazorModule.cs new file mode 100644 index 00000000000..dfee56fd126 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/AbpTenantManagementBlazorMudBlazorModule.cs @@ -0,0 +1,64 @@ +using Localization.Resources.AbpUi; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Mapperly; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor; +using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.ObjectExtending; +using Volo.Abp.ObjectExtending.Modularity; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.TenantManagement.Localization; +using Volo.Abp.Threading; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.TenantManagement.Blazor.MudBlazor; + +[DependsOn( + typeof(AbpMapperlyModule), + typeof(AbpTenantManagementApplicationContractsModule), + typeof(AbpFeatureManagementBlazorMudBlazorModule) +)] +public class AbpTenantManagementBlazorMudBlazorModule : AbpModule +{ + private static readonly OneTimeRunner OneTimeRunner = new(); + + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddMapperlyObjectMapper(); + + Configure(options => + { + options.MenuContributors.Add(new TenantManagementBlazorMenuContributor()); + }); + + Configure(options => + { + options.AdditionalAssemblies.Add(typeof(AbpTenantManagementBlazorMudBlazorModule).Assembly); + }); + + Configure(options => + { + options.Resources + .Get() + .AddBaseTypes( + typeof(AbpFeatureManagementResource), + typeof(AbpUiResource)); + }); + } + + public override void PostConfigureServices(ServiceConfigurationContext context) + { + OneTimeRunner.Run(() => + { + ModuleExtensionConfigurationHelper + .ApplyEntityConfigurationToUi( + TenantManagementModuleExtensionConsts.ModuleName, + TenantManagementModuleExtensionConsts.EntityNames.Tenant, + createFormTypes: new[] { typeof(TenantCreateDto) }, + editFormTypes: new[] { typeof(TenantUpdateDto) } + ); + }); + } +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Navigation/TenantManagementBlazorMenuContributor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Navigation/TenantManagementBlazorMenuContributor.cs new file mode 100644 index 00000000000..04540c85a69 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Navigation/TenantManagementBlazorMenuContributor.cs @@ -0,0 +1,36 @@ +using System.Threading.Tasks; +using Volo.Abp.TenantManagement.Localization; +using Volo.Abp.UI.Navigation; +using Volo.Abp.Authorization.Permissions; + +namespace Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; + +public class TenantManagementBlazorMenuContributor : IMenuContributor +{ + public virtual Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name != StandardMenus.Main) + { + return Task.CompletedTask; + } + + var administrationMenu = context.Menu.GetAdministration(); + + var l = context.GetLocalizer(); + + var tenantManagementMenuItem = new ApplicationMenuItem( + TenantManagementMenuNames.GroupName, + l["Menu:TenantManagement"], + icon: "fa fa-users" + ); + administrationMenu.AddItem(tenantManagementMenuItem); + + tenantManagementMenuItem.AddItem(new ApplicationMenuItem( + TenantManagementMenuNames.Tenants, + l["Tenants"], + url: "~/tenant-management/tenants" + ).RequirePermissions(TenantManagementPermissions.Tenants.Default)); + + return Task.CompletedTask; + } +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Navigation/TenantManagementMenuNames.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Navigation/TenantManagementMenuNames.cs new file mode 100644 index 00000000000..2f5dda85fa1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Navigation/TenantManagementMenuNames.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; + +public class TenantManagementMenuNames +{ + public const string GroupName = "TenantManagement"; + + public const string Tenants = GroupName + ".Tenants"; +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Pages/TenantManagement/TenantManagement.razor new file mode 100644 index 00000000000..3cbbc614dc7 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Pages/TenantManagement/TenantManagement.razor @@ -0,0 +1,96 @@ +@page "/tenant-management/tenants" +@page "/{culture}/tenant-management/tenants" +@attribute [Authorize(TenantManagementPermissions.Tenants.Default)] +@using global::MudBlazor +@using Microsoft.AspNetCore.Authorization +@using Volo.Abp.FeatureManagement.Blazor.MudBlazor.Components +@using Volo.Abp.MudBlazorUI.Components +@using Volo.Abp.MudBlazorUI.Components.ObjectExtending +@using Volo.Abp.TenantManagement.Localization +@using Microsoft.Extensions.Localization +@using Volo.Abp.UI.Navigation.Localization.Resource +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Layout +@inject IStringLocalizer LUiNavigation +@inherits AbpMudCrudPageBase + + + + + + + + + +@* ************************* CREATE MODAL ************************* *@ +@if (HasCreatePermission) +{ + + + @L["NewTenant"] + + + + + + + + + + + @L["Cancel"] + @L["Save"] + + +} + +@* ************************* EDIT MODAL ************************* *@ +@if (HasUpdatePermission) +{ + + + @L["Edit"] + + + + + + + + + @L["Cancel"] + @L["Save"] + + +} + +@if (HasManageFeaturesPermission) +{ + +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Pages/TenantManagement/TenantManagement.razor.cs new file mode 100644 index 00000000000..4587475f012 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -0,0 +1,190 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using MudBlazor; +using Volo.Abp.AspNetCore.Components.Web.Extensibility.EntityActions; +using Volo.Abp.AspNetCore.Components.Web.Extensibility.TableColumns; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.PageToolbars; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor.Components; +using Volo.Abp.MudBlazorUI; +using Volo.Abp.ObjectExtending; +using Volo.Abp.TenantManagement.Localization; + +namespace Volo.Abp.TenantManagement.Blazor.MudBlazor.Pages.TenantManagement; + +public partial class TenantManagement +{ + [Parameter] + public string? Culture { get; set; } + + protected const string FeatureProviderName = "T"; + + protected bool HasManageFeaturesPermission; + protected string? ManageFeaturesPolicyName; + + protected FeatureManagementModal? FeatureManagementModal; + + protected bool ShowPassword { get; set; } + + protected PageToolbar Toolbar { get; } = new(); + + protected List TenantManagementTableColumns => TableColumns.Get(); + + private AbpMudBlazorMessageLocalizerHelper? _localizerHelper; + + [Inject] + protected IStringLocalizer Localizer { get; set; } = default!; + + private MudForm? _createFormRef; + private MudForm? _editFormRef; + + public TenantManagement() + { + LocalizationResource = typeof(AbpTenantManagementResource); + ObjectMapperContext = typeof(AbpTenantManagementBlazorMudBlazorModule); + + CreatePolicyName = TenantManagementPermissions.Tenants.Create; + UpdatePolicyName = TenantManagementPermissions.Tenants.Update; + DeletePolicyName = TenantManagementPermissions.Tenants.Delete; + + ManageFeaturesPolicyName = TenantManagementPermissions.Tenants.ManageFeatures; + } + + protected override ValueTask SetBreadcrumbItemsAsync() + { + BreadcrumbItems.Add(new BreadcrumbItem(LUiNavigation["Menu:Administration"].Value, null, disabled: true)); + BreadcrumbItems.Add(new BreadcrumbItem(L["Menu:TenantManagement"].Value, null, disabled: true)); + BreadcrumbItems.Add(new BreadcrumbItem(L["Tenants"].Value, null, disabled: true)); + return base.SetBreadcrumbItemsAsync(); + } + + protected override async Task OnInitializedAsync() + { + _localizerHelper = new AbpMudBlazorMessageLocalizerHelper(Localizer); + await base.OnInitializedAsync(); + } + + protected override async Task SetPermissionsAsync() + { + await base.SetPermissionsAsync(); + + HasManageFeaturesPermission = await AuthorizationService.IsGrantedAsync(ManageFeaturesPolicyName!); + } + + protected override string GetDeleteConfirmationMessage(TenantDto entity) + { + return string.Format(L["TenantDeletionConfirmationMessage"], entity.Name); + } + + protected override ValueTask SetToolbarItemsAsync() + { + Toolbar.AddMudButton(L["NewTenant"], + OpenCreateDialogAsync, + icon: Icons.Material.Filled.Add.ToString(), + requiredPolicyName: CreatePolicyName); + + return base.SetToolbarItemsAsync(); + } + + protected override ValueTask SetEntityActionsAsync() + { + EntityActions + .Get() + .AddRange(new EntityAction[] + { + new EntityAction + { + Text = L["Edit"], + Visible = (data) => HasUpdatePermission, + Clicked = async (data) => { await OpenEditDialogAsync(data.As()); } + }, + new EntityAction + { + Text = L["Features"], + Visible = (data) => HasManageFeaturesPermission, + Clicked = async (data) => + { + var tenant = data.As(); + if (FeatureManagementModal != null) + { + await FeatureManagementModal.OpenAsync(FeatureProviderName, tenant.Id.ToString(), tenant.Name); + } + } + }, + new EntityAction + { + Text = L["Delete"], + Visible = (data) => HasDeletePermission, + Clicked = async (data) => await DeleteEntityAsync(data.As()), + ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) + } + }); + + return base.SetEntityActionsAsync(); + } + + protected override async ValueTask SetTableColumnsAsync() + { + TenantManagementTableColumns + .AddRange(new TableColumn[] + { + new TableColumn + { + Title = L["Actions"], + Actions = EntityActions.Get(), + }, + new TableColumn + { + Title = L["TenantName"], + Sortable = true, + Data = nameof(TenantDto.Name), + }, + }); + + TenantManagementTableColumns.AddRange(await GetExtensionTableColumnsAsync( + TenantManagementModuleExtensionConsts.ModuleName, + TenantManagementModuleExtensionConsts.EntityNames.Tenant)); + + await base.SetTableColumnsAsync(); + } + + protected virtual void TogglePasswordVisibility() + { + ShowPassword = !ShowPassword; + } + + protected override async Task CreateEntityAsync() + { + if (_createFormRef == null) + { + return; + } + + await _createFormRef.Validate(); + if (!_createFormRef.IsValid) + { + return; + } + + await base.CreateEntityAsync(); + } + + protected override async Task UpdateEntityAsync() + { + if (_editFormRef == null) + { + return; + } + + await _editFormRef.Validate(); + if (!_editFormRef.IsValid) + { + return; + } + + await base.UpdateEntityAsync(); + } +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Volo.Abp.TenantManagement.Blazor.MudBlazor.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Volo.Abp.TenantManagement.Blazor.MudBlazor.csproj new file mode 100644 index 00000000000..d7748927acd --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Volo.Abp.TenantManagement.Blazor.MudBlazor.csproj @@ -0,0 +1,22 @@ + + + + + + + net10.0 + + + + + + + + + + + + + + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/_Imports.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/_Imports.razor new file mode 100644 index 00000000000..4e91324cd86 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/_Imports.razor @@ -0,0 +1,4 @@ +@using Microsoft.AspNetCore.Components.Web +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor +@using MudBlazor +@using Volo.Abp.MudBlazorUI diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor index 49e4c648220..5efa90dd239 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -25,7 +25,6 @@ @* ************************* DATA GRID ************************* *@ MyCompanyName.MyProjectName.Blazor.Server - + + @@ -26,7 +27,7 @@ - + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Components/Pages/Index.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Components/Pages/Index.razor index c67303f4972..552e6d89e4f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Components/Pages/Index.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Components/Pages/Index.razor @@ -1,281 +1,127 @@ -@page "/" +@page "/" @inherits MyProjectNameComponentBase -
-
-
-
-
-

Getting Started

-

Learn how to create and run - a - new web application using the application startup - template.

- Getting - Started -

Web Application Development Tutorial

-

Learn how to build an ABP based - web - application named Acme.BookStore.

- Explore Tutorial + + + + + @if (!CurrentUser.IsAuthenticated) + { + @L["Welcome"] + @L["LongWelcomeMessage"] + @L["Login"] + } -

Customize Lepton Theme

-

Learn how to customize LeptonX - Theme - as you wish.

- Customize Lepton -
- -
-
-
-
-
-
-
-
- -

You can check for - similar problems and solutions, or open a - new topic to discuss your specific issue.

- Visit Support - -
-
-
-
-
-
- -

You can find content - on .NET development, cross-platform, ASP.NET - application templates, ABP-related news, and - more.

- Visit Blog + Getting Started + Learn how to create and run a new web application using the application startup template. + Getting Started - -
-
-
-
-
-
-
-
- -

A unique community platform - for ABP Lovers!

-

Explore all ABP users' - experiences with the ABP Framework, discover - articles and videos on how to use ABP, and join - raffles for a chance to win surprise gifts!

- Join ABP - Community -
- -
-
-
+ Web Application Development Tutorial + Learn how to build an ABP based web application named Acme.BookStore. + Explore Tutorial + + + + + + + + Community + + A unique community platform for ABP Lovers! + Explore all ABP users' experiences with the ABP Framework, discover articles and videos on how to use ABP, and join raffles for a chance to win surprise gifts! + Join ABP Community -
-
-
-
-
More from ABP.IO
-
-
+ -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
Latest Release Logs
-
- - - -
-
-
Video Courses
-
- - - -
-
-
Samples
-
- - - -
-
-
Books
-
- - - -
-
-
FAQ
-
- - - -
-
-
-
-
-
-
-
-
-
-

THE OFFICIAL GUIDE

-

Mastering ABP Framework

-

Written by the creator of the ABP - Framework, this book will help you gain a complete - understanding of the framework - and modern web application development techniques.

- -
-
- -
-
+ + Blog + + Find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more. + Visit Blog + + + + -
-
-
-
-
-
-
Follow us on Social Media
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - -
- -
X.com
-
- - - -
- -
Discord
-
- - - -
- -
Stack Overflow
-
- - - -
- -
YouTube
-
- - - -
- -
Instagram
-
- - - -
-
-
-
-
-
\ No newline at end of file + + + + + More from ABP.IO + + + + + Latest Release Logs + + + Video Courses + + + Samples + + + Books + + + FAQ + + + + + + + + + Follow us on Social Media + + + + + + + X.com (Twitter) + + + Discord + + + Stack Overflow + + + + + + + YouTube + + + Instagram + + + GitHub + + + + + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Components/Routes.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Components/Routes.razor index fff90cbc35c..9788fed14fc 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Components/Routes.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Components/Routes.razor @@ -1,5 +1,5 @@ -@using Volo.Abp.AspNetCore.Components.Web.LeptonXLiteTheme.Themes.LeptonXLite -@using Volo.Abp.AspNetCore.Components.Web.Theming.Routing +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing @using Microsoft.Extensions.Options @inject IOptions RouterOptions diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Menus/MyProjectNameMenuContributor.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Menus/MyProjectNameMenuContributor.cs index 2a32b76193f..c8c3833fa88 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Menus/MyProjectNameMenuContributor.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Menus/MyProjectNameMenuContributor.cs @@ -1,7 +1,7 @@ using MyCompanyName.MyProjectName.Localization; -using Volo.Abp.Identity.Blazor; -using Volo.Abp.SettingManagement.Blazor.Menus; -using Volo.Abp.TenantManagement.Blazor.Navigation; +using Volo.Abp.Identity.Blazor.MudBlazor; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Menus; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj index a743bcc01c3..ba8600a0125 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj @@ -8,8 +8,6 @@ - - @@ -18,11 +16,11 @@ - - + + + - @@ -45,7 +43,7 @@ - + @@ -59,21 +57,21 @@ - + - + - + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs index 151f57de6cf..df48e3abe56 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyProjectNameModule.cs @@ -1,5 +1,3 @@ -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; @@ -14,10 +12,10 @@ using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Components.Web; using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; @@ -28,10 +26,10 @@ using Volo.Abp.MongoDB; using Volo.Abp.Emailing; using Volo.Abp.FeatureManagement; -using Volo.Abp.FeatureManagement.Blazor.Server; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server; using Volo.Abp.FeatureManagement.MongoDB; using Volo.Abp.Identity; -using Volo.Abp.Identity.Blazor.Server; +using Volo.Abp.Identity.Blazor.MudBlazor.Server; using Volo.Abp.Identity.MongoDB; using Volo.Abp.Localization; using Volo.Abp.Localization.ExceptionHandling; @@ -43,11 +41,11 @@ using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.PermissionManagement.OpenIddict; using Volo.Abp.SettingManagement; -using Volo.Abp.SettingManagement.Blazor.Server; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Server; using Volo.Abp.SettingManagement.MongoDB; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; -using Volo.Abp.TenantManagement.Blazor.Server; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Server; using Volo.Abp.TenantManagement.MongoDB; using Volo.Abp.OpenIddict; using Volo.Abp.Security.Claims; @@ -67,7 +65,7 @@ namespace MyCompanyName.MyProjectName; typeof(AbpSwashbuckleModule), typeof(AbpAspNetCoreSerilogModule), typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), - typeof(AbpAspNetCoreComponentsServerLeptonXLiteThemeModule), + typeof(AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule), // Account module packages typeof(AbpAccountApplicationModule), @@ -81,7 +79,7 @@ namespace MyCompanyName.MyProjectName; typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityMongoDbModule), typeof(AbpOpenIddictMongoDbModule), - typeof(AbpIdentityBlazorServerModule), + typeof(AbpIdentityBlazorMudBlazorServerModule), // Audit logging module packages typeof(AbpAuditLoggingMongoDbModule), @@ -95,19 +93,19 @@ namespace MyCompanyName.MyProjectName; typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementHttpApiModule), typeof(AbpTenantManagementMongoDbModule), - typeof(AbpTenantManagementBlazorServerModule), + typeof(AbpTenantManagementBlazorMudBlazorServerModule), // Feature Management module packages typeof(AbpFeatureManagementApplicationModule), typeof(AbpFeatureManagementMongoDbModule), typeof(AbpFeatureManagementHttpApiModule), - typeof(AbpFeatureManagementBlazorServerModule), + typeof(AbpFeatureManagementBlazorMudBlazorServerModule), // Setting Management module packages typeof(AbpSettingManagementApplicationModule), typeof(AbpSettingManagementMongoDbModule), typeof(AbpSettingManagementHttpApiModule), - typeof(AbpSettingManagementBlazorServerModule) + typeof(AbpSettingManagementBlazorMudBlazorServerModule) )] public class MyProjectNameModule : AbpModule { @@ -181,7 +179,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureSwaggerServices(context.Services); ConfigureNavigationServices(); ConfigureAutoApiControllers(); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMongoDB(context); @@ -221,7 +218,7 @@ private void ConfigureBundles() //BLAZOR UI options.StyleBundles.Configure( - BlazorLeptonXLiteThemeBundles.Styles.Global, + BlazorMudBlazorBasicThemeBundles.Styles.Global, bundle => { bundle.AddFiles("/blazor-global-styles.css"); @@ -296,13 +293,6 @@ private void ConfigureSwaggerServices(IServiceCollection services) ); } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } - private void ConfigureRouter(ServiceConfigurationContext context) { Configure(options => diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/_Imports.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/_Imports.razor index ad711d0c798..063a0594e47 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/_Imports.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/_Imports.razor @@ -8,7 +8,6 @@ @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.JSInterop @using MyCompanyName.MyProjectName -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using global::MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/App.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/App.razor index 9f9aa511303..8b2ce005e7b 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/App.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/App.razor @@ -1,8 +1,8 @@ @using Volo.Abp.Localization @using System.Globalization @using Microsoft.Extensions.Hosting -@using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling -@using Volo.Abp.AspNetCore.Components.Web.Theming.Bundling +@using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Bundling @inject IHostEnvironment Env @{ var rtl = CultureHelper.IsRtl ? "rtl" : string.Empty; @@ -17,7 +17,8 @@ MyCompanyName.MyProjectName.Blazor.Server - + + @@ -26,7 +27,7 @@ - + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/Pages/Index.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/Pages/Index.razor index c67303f4972..552e6d89e4f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/Pages/Index.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/Pages/Index.razor @@ -1,281 +1,127 @@ -@page "/" +@page "/" @inherits MyProjectNameComponentBase -
-
-
-
-
-

Getting Started

-

Learn how to create and run - a - new web application using the application startup - template.

- Getting - Started -

Web Application Development Tutorial

-

Learn how to build an ABP based - web - application named Acme.BookStore.

- Explore Tutorial + + + + + @if (!CurrentUser.IsAuthenticated) + { + @L["Welcome"] + @L["LongWelcomeMessage"] + @L["Login"] + } -

Customize Lepton Theme

-

Learn how to customize LeptonX - Theme - as you wish.

- Customize Lepton -
- -
-
-
-
-
-
-
-
- -

You can check for - similar problems and solutions, or open a - new topic to discuss your specific issue.

- Visit Support - -
-
-
-
-
-
- -

You can find content - on .NET development, cross-platform, ASP.NET - application templates, ABP-related news, and - more.

- Visit Blog + Getting Started + Learn how to create and run a new web application using the application startup template. + Getting Started - -
-
-
-
-
-
-
-
- -

A unique community platform - for ABP Lovers!

-

Explore all ABP users' - experiences with the ABP Framework, discover - articles and videos on how to use ABP, and join - raffles for a chance to win surprise gifts!

- Join ABP - Community -
- -
-
-
+ Web Application Development Tutorial + Learn how to build an ABP based web application named Acme.BookStore. + Explore Tutorial +
+
+
+ + + + + Community + + A unique community platform for ABP Lovers! + Explore all ABP users' experiences with the ABP Framework, discover articles and videos on how to use ABP, and join raffles for a chance to win surprise gifts! + Join ABP Community -
-
-
-
-
More from ABP.IO
-
-
+ -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
Latest Release Logs
-
- - - -
-
-
Video Courses
-
- - - -
-
-
Samples
-
- - - -
-
-
Books
-
- - - -
-
-
FAQ
-
- - - -
-
-
-
-
-
-
-
-
-
-

THE OFFICIAL GUIDE

-

Mastering ABP Framework

-

Written by the creator of the ABP - Framework, this book will help you gain a complete - understanding of the framework - and modern web application development techniques.

- -
-
- -
-
+ + Blog + + Find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more. + Visit Blog + + + + -
-
-
-
-
-
-
Follow us on Social Media
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - -
- -
X.com
-
- - - -
- -
Discord
-
- - - -
- -
Stack Overflow
-
- - - -
- -
YouTube
-
- - - -
- -
Instagram
-
- - - -
-
-
-
-
-
\ No newline at end of file + + + + + More from ABP.IO + + + + + Latest Release Logs + + + Video Courses + + + Samples + + + Books + + + FAQ + + + + + + + + + Follow us on Social Media + + + + + + + X.com (Twitter) + + + Discord + + + Stack Overflow + + + + + + + YouTube + + + Instagram + + + GitHub + + + + + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/Routes.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/Routes.razor index fff90cbc35c..9788fed14fc 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/Routes.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Components/Routes.razor @@ -1,5 +1,5 @@ -@using Volo.Abp.AspNetCore.Components.Web.LeptonXLiteTheme.Themes.LeptonXLite -@using Volo.Abp.AspNetCore.Components.Web.Theming.Routing +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing @using Microsoft.Extensions.Options @inject IOptions RouterOptions diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Menus/MyProjectNameMenuContributor.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Menus/MyProjectNameMenuContributor.cs index 2a32b76193f..c8c3833fa88 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Menus/MyProjectNameMenuContributor.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Menus/MyProjectNameMenuContributor.cs @@ -1,7 +1,7 @@ using MyCompanyName.MyProjectName.Localization; -using Volo.Abp.Identity.Blazor; -using Volo.Abp.SettingManagement.Blazor.Menus; -using Volo.Abp.TenantManagement.Blazor.Navigation; +using Volo.Abp.Identity.Blazor.MudBlazor; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Menus; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index 51f7e486f65..f3ae50c6572 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -8,8 +8,6 @@ - - @@ -18,11 +16,11 @@ - - + + + - @@ -46,7 +44,7 @@ - + @@ -60,21 +58,21 @@ - + - + - + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs index 8bf5f371fe8..fdadb06ae6d 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameModule.cs @@ -1,5 +1,3 @@ -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; @@ -15,10 +13,10 @@ using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Components.Web; using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; @@ -30,10 +28,10 @@ using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; using Volo.Abp.FeatureManagement; -using Volo.Abp.FeatureManagement.Blazor.Server; +using Volo.Abp.FeatureManagement.Blazor.MudBlazor.Server; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Identity; -using Volo.Abp.Identity.Blazor.Server; +using Volo.Abp.Identity.Blazor.MudBlazor.Server; using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.Localization; using Volo.Abp.Localization.ExceptionHandling; @@ -45,11 +43,11 @@ using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.PermissionManagement.OpenIddict; using Volo.Abp.SettingManagement; -using Volo.Abp.SettingManagement.Blazor.Server; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Server; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; -using Volo.Abp.TenantManagement.Blazor.Server; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Server; using Volo.Abp.TenantManagement.EntityFrameworkCore; using Volo.Abp.OpenIddict; using Volo.Abp.Security.Claims; @@ -69,7 +67,7 @@ namespace MyCompanyName.MyProjectName; typeof(AbpSwashbuckleModule), typeof(AbpAspNetCoreSerilogModule), typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), - typeof(AbpAspNetCoreComponentsServerLeptonXLiteThemeModule), + typeof(AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule), // Account module packages typeof(AbpAccountApplicationModule), @@ -83,7 +81,7 @@ namespace MyCompanyName.MyProjectName; typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpOpenIddictEntityFrameworkCoreModule), - typeof(AbpIdentityBlazorServerModule), + typeof(AbpIdentityBlazorMudBlazorServerModule), // Audit logging module packages typeof(AbpAuditLoggingEntityFrameworkCoreModule), @@ -97,19 +95,19 @@ namespace MyCompanyName.MyProjectName; typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementHttpApiModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), - typeof(AbpTenantManagementBlazorServerModule), + typeof(AbpTenantManagementBlazorMudBlazorServerModule), // Feature Management module packages typeof(AbpFeatureManagementApplicationModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementHttpApiModule), - typeof(AbpFeatureManagementBlazorServerModule), + typeof(AbpFeatureManagementBlazorMudBlazorServerModule), // Setting Management module packages typeof(AbpSettingManagementApplicationModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementHttpApiModule), - typeof(AbpSettingManagementBlazorServerModule) + typeof(AbpSettingManagementBlazorMudBlazorServerModule) )] public class MyProjectNameModule : AbpModule { @@ -184,7 +182,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureSwaggerServices(context.Services); ConfigureNavigationServices(); ConfigureAutoApiControllers(); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureEfCore(context); @@ -224,7 +221,7 @@ private void ConfigureBundles() //BLAZOR UI options.StyleBundles.Configure( - BlazorLeptonXLiteThemeBundles.Styles.Global, + BlazorMudBlazorBasicThemeBundles.Styles.Global, bundle => { bundle.AddFiles("/blazor-global-styles.css"); @@ -299,13 +296,6 @@ private void ConfigureSwaggerServices(IServiceCollection services) ); } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } - private void ConfigureRouter(ServiceConfigurationContext context) { Configure(options => diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor index ad711d0c798..063a0594e47 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor @@ -8,7 +8,6 @@ @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.JSInterop @using MyCompanyName.MyProjectName -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using global::MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Menus/MyProjectNameMenuContributor.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Menus/MyProjectNameMenuContributor.cs index efd3a3393ca..f7c3af5da57 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Menus/MyProjectNameMenuContributor.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Menus/MyProjectNameMenuContributor.cs @@ -3,9 +3,9 @@ using MyCompanyName.MyProjectName.MultiTenancy; using Volo.Abp.Account.Localization; using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Identity.Blazor; -using Volo.Abp.SettingManagement.Blazor.Menus; -using Volo.Abp.TenantManagement.Blazor.Navigation; +using Volo.Abp.Identity.Blazor.MudBlazor; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Menus; diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyCompanyName.MyProjectName.Blazor.WebAssembly.Client.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyCompanyName.MyProjectName.Blazor.WebAssembly.Client.csproj index 9a9770df69b..766d307e57f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyCompanyName.MyProjectName.Blazor.WebAssembly.Client.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyCompanyName.MyProjectName.Blazor.WebAssembly.Client.csproj @@ -9,19 +9,17 @@ - - - + - + - + @@ -29,9 +27,9 @@ - - - + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyProjectNameBlazorModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyProjectNameBlazorModule.cs index aeeec931074..0cf8f0e6370 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyProjectNameBlazorModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/MyProjectNameBlazorModule.cs @@ -1,26 +1,22 @@ -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; -using Microsoft.AspNetCore.Components.Web; -using Microsoft.AspNetCore.Components.WebAssembly.Hosting; +using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using MyCompanyName.MyProjectName.Menus; using MyCompanyName.MyProjectName; using OpenIddict.Abstractions; using Volo.Abp.Account; -using Volo.Abp.AspNetCore.Components.Web.LeptonXLiteTheme.Themes.LeptonXLite; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; -using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; using Volo.Abp.Autofac.WebAssembly; using Volo.Abp.Mapperly; using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; -using Volo.Abp.Identity.Blazor.WebAssembly; +using Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly; using Volo.Abp.Modularity; using Volo.Abp.OpenIddict; using Volo.Abp.PermissionManagement; using Volo.Abp.SettingManagement; -using Volo.Abp.SettingManagement.Blazor.WebAssembly; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly; using Volo.Abp.TenantManagement; -using Volo.Abp.TenantManagement.Blazor.WebAssembly; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName; @@ -30,14 +26,14 @@ namespace MyCompanyName.MyProjectName; // ABP Framework packages typeof(AbpAutofacWebAssemblyModule), - typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule), + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule), // Account module packages typeof(AbpAccountHttpApiClientModule), // Identity module packages typeof(AbpIdentityHttpApiClientModule), - typeof(AbpIdentityBlazorWebAssemblyModule), + typeof(AbpIdentityBlazorMudBlazorWebAssemblyModule), typeof(AbpOpenIddictDomainSharedModule), // Permission Management module packages @@ -45,14 +41,14 @@ namespace MyCompanyName.MyProjectName; // Tenant Management module packages typeof(AbpTenantManagementHttpApiClientModule), - typeof(AbpTenantManagementBlazorWebAssemblyModule), + typeof(AbpTenantManagementBlazorMudBlazorWebAssemblyModule), // Feature Management module packages typeof(AbpFeatureManagementHttpApiClientModule), // Setting Management module packages typeof(AbpSettingManagementHttpApiClientModule), - typeof(AbpSettingManagementBlazorWebAssemblyModule) + typeof(AbpSettingManagementBlazorMudBlazorWebAssemblyModule) )] public class MyProjectNameBlazorModule : AbpModule { @@ -65,7 +61,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureAuthentication(builder); ConfigureHttpClient(context, environment); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMenu(context); ConfigureHttpClientProxies(context); @@ -89,13 +84,6 @@ private void ConfigureMenu(ServiceConfigurationContext context) }); } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } - private void ConfigureHttpClientProxies(ServiceConfigurationContext context) { context.Services.AddHttpClientProxies( @@ -119,12 +107,6 @@ private static void ConfigureAuthentication(WebAssemblyHostBuilder builder) }); } - private static void ConfigureUI(WebAssemblyHostBuilder builder) - { - builder.RootComponents.Add("#ApplicationContainer"); - builder.RootComponents.Add("head::after"); - } - private static void ConfigureHttpClient(ServiceConfigurationContext context, IWebAssemblyHostEnvironment environment) { context.Services.AddTransient(sp => new HttpClient diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Pages/Index.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Pages/Index.razor index c67303f4972..fc3312004d8 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Pages/Index.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Pages/Index.razor @@ -1,281 +1,127 @@ -@page "/" +@page "/" @inherits MyProjectNameComponentBase -
-
-
-
-
-

Getting Started

-

Learn how to create and run - a - new web application using the application startup - template.

- Getting - Started -

Web Application Development Tutorial

-

Learn how to build an ABP based - web - application named Acme.BookStore.

- Explore Tutorial + + + + + @if (!CurrentUser.IsAuthenticated) + { + @L["Welcome"] + @L["LongWelcomeMessage"] + @L["Login"] + } -

Customize Lepton Theme

-

Learn how to customize LeptonX - Theme - as you wish.

- Customize Lepton -
- -
-
-
-
-
-
-
-
- -

You can check for - similar problems and solutions, or open a - new topic to discuss your specific issue.

- Visit Support - -
-
-
-
-
-
- -

You can find content - on .NET development, cross-platform, ASP.NET - application templates, ABP-related news, and - more.

- Visit Blog + Getting Started + Learn how to create and run a new web application using the application startup template. + Getting Started - -
-
-
-
-
-
-
-
- -

A unique community platform - for ABP Lovers!

-

Explore all ABP users' - experiences with the ABP Framework, discover - articles and videos on how to use ABP, and join - raffles for a chance to win surprise gifts!

- Join ABP - Community -
- -
-
-
+ Web Application Development Tutorial + Learn how to build an ABP based web application named Acme.BookStore. + Explore Tutorial +
+
+
+ + + + + Community + + A unique community platform for ABP Lovers! + Explore all ABP users' experiences with the ABP Framework, discover articles and videos on how to use ABP, and join raffles for a chance to win surprise gifts! + Join ABP Community -
-
-
-
-
More from ABP.IO
-
-
+ -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
Latest Release Logs
-
- - - -
-
-
Video Courses
-
- - - -
-
-
Samples
-
- - - -
-
-
Books
-
- - - -
-
-
FAQ
-
- - - -
-
-
-
-
-
-
-
-
-
-

THE OFFICIAL GUIDE

-

Mastering ABP Framework

-

Written by the creator of the ABP - Framework, this book will help you gain a complete - understanding of the framework - and modern web application development techniques.

- -
-
- -
-
+ + Blog + + Find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more. + Visit Blog + + + + -
-
-
-
-
-
-
Follow us on Social Media
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - -
- -
X.com
-
- - - -
- -
Discord
-
- - - -
- -
Stack Overflow
-
- - - -
- -
YouTube
-
- - - -
- -
Instagram
-
- - - -
-
-
-
-
-
\ No newline at end of file + + + + + More from ABP.IO + + + + + Latest Release Logs + + + Video Courses + + + Samples + + + Books + + + FAQ + + + + + + + + + Follow us on Social Media + + + + + + + X.com (Twitter) + + + Discord + + + Stack Overflow + + + + + + + YouTube + + + Instagram + + + GitHub + + + + + + + + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Routes.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Routes.razor index 12cf8988f19..c2cefa6cff1 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Routes.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/Routes.razor @@ -1,5 +1,5 @@ @using Volo.Abp.AspNetCore.Components.WebAssembly.WebApp -@using Volo.Abp.AspNetCore.Components.Web.LeptonXLiteTheme.Themes.LeptonXLite +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/_Imports.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/_Imports.razor index cf5e05c00af..50b30731d1f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/_Imports.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Client/_Imports.razor @@ -8,7 +8,6 @@ @using Microsoft.JSInterop @using Volo.Abp.AspNetCore.Components.Web @using MyCompanyName.MyProjectName -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using global::MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Components/App.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Components/App.razor index 9f55084e64d..05dfe4359c2 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Components/App.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Components/App.razor @@ -10,7 +10,7 @@ - + @@ -26,10 +26,6 @@
-
-
-
-
diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj index 95546f4d78f..5ec61c48462 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj @@ -74,7 +74,7 @@ - + diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs index 4985e565ba8..607e26d596f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyProjectNameHostModule.cs @@ -11,7 +11,7 @@ using Volo.Abp; using Volo.Abp.Account; using Volo.Abp.Account.Web; -using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme.Bundling; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Components.WebAssembly.WebApp; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc; @@ -60,7 +60,7 @@ namespace MyCompanyName.MyProjectName; typeof(AbpAutofacModule), typeof(AbpMapperlyModule), typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), - typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeBundlingModule), + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule), typeof(AbpSwashbuckleModule), typeof(AbpAspNetCoreSerilogModule), diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Components/App.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Components/App.razor index 9f55084e64d..23ef58e5994 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Components/App.razor +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Components/App.razor @@ -10,7 +10,7 @@ - + @@ -26,10 +26,6 @@
-
-
-
-
diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj index 4549ab5879c..9c73ca51eff 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj @@ -75,7 +75,7 @@ - +
diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs index c4dade54ccf..0753f5581d5 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyProjectNameHostModule.cs @@ -11,7 +11,7 @@ using Volo.Abp; using Volo.Abp.Account; using Volo.Abp.Account.Web; -using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme.Bundling; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Components.WebAssembly.WebApp; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc; @@ -63,7 +63,7 @@ namespace MyCompanyName.MyProjectName; typeof(AbpMapperlyModule), typeof(AbpEntityFrameworkCoreSqlServerModule), typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), - typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeBundlingModule), + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule), typeof(AbpSwashbuckleModule), typeof(AbpAspNetCoreSerilogModule), diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Menus/MyProjectNameMenuContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Menus/MyProjectNameMenuContributor.cs index fdfdc05cf03..27a5a4f8a2e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Menus/MyProjectNameMenuContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Menus/MyProjectNameMenuContributor.cs @@ -5,9 +5,9 @@ using MyCompanyName.MyProjectName.MultiTenancy; using Volo.Abp.Account.Localization; using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Identity.Blazor; -using Volo.Abp.SettingManagement.Blazor.Menus; -using Volo.Abp.TenantManagement.Blazor.Navigation; +using Volo.Abp.Identity.Blazor.MudBlazor; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Blazor.Client.Menus; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyCompanyName.MyProjectName.Blazor.Client.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyCompanyName.MyProjectName.Blazor.Client.csproj index 491c5b26e77..0c21fc98d55 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyCompanyName.MyProjectName.Blazor.Client.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyCompanyName.MyProjectName.Blazor.Client.csproj @@ -12,19 +12,17 @@ - - - + - + - + @@ -32,9 +30,9 @@ - - - + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyProjectNameBlazorClientModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyProjectNameBlazorClientModule.cs index 13a9d2694bb..96d1707d778 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyProjectNameBlazorClientModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/MyProjectNameBlazorClientModule.cs @@ -1,20 +1,18 @@ -using System; +using System; using System.Net.Http; -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using MyCompanyName.MyProjectName.Blazor.Client.Menus; using OpenIddict.Abstractions; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; -using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; using Volo.Abp.Autofac.WebAssembly; using Volo.Abp.Mapperly; -using Volo.Abp.Identity.Blazor.WebAssembly; +using Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly; using Volo.Abp.Modularity; -using Volo.Abp.SettingManagement.Blazor.WebAssembly; -using Volo.Abp.TenantManagement.Blazor.WebAssembly; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Blazor.Client; @@ -22,10 +20,10 @@ namespace MyCompanyName.MyProjectName.Blazor.Client; [DependsOn( typeof(AbpAutofacWebAssemblyModule), typeof(MyProjectNameHttpApiClientModule), - typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule), - typeof(AbpIdentityBlazorWebAssemblyModule), - typeof(AbpTenantManagementBlazorWebAssemblyModule), - typeof(AbpSettingManagementBlazorWebAssemblyModule) + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule), + typeof(AbpIdentityBlazorMudBlazorWebAssemblyModule), + typeof(AbpTenantManagementBlazorMudBlazorWebAssemblyModule), + typeof(AbpSettingManagementBlazorMudBlazorWebAssemblyModule) )] public class MyProjectNameBlazorClientModule : AbpModule { @@ -36,7 +34,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureAuthentication(builder); ConfigureHttpClient(context, environment); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMenu(context); @@ -59,12 +56,6 @@ private void ConfigureMenu(ServiceConfigurationContext context) }); } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } private static void ConfigureAuthentication(WebAssemblyHostBuilder builder) { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Pages/Index.razor index a932861897a..fc3312004d8 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Pages/Index.razor @@ -1,87 +1,127 @@ @page "/" -@using Volo.Abp.MultiTenancy @inherits MyProjectNameComponentBase -@inject AuthenticationStateProvider AuthenticationStateProvider -
-
-
-
-
-

Getting Started

-

Learn how to create and run - a new web application using the application startup template.

- Getting Started + + + + + @if (!CurrentUser.IsAuthenticated) + { + @L["Welcome"] + @L["LongWelcomeMessage"] + @L["Login"] + } -

Web Application Development Tutorial

-

Learn how to build an ABP based web application named Acme.BookStore.

- Explore Tutorial + Getting Started + Learn how to create and run a new web application using the application startup template. + Getting Started -

Customize Lepton Theme

-

Learn how to customize LeptonX Theme as you wish.

- Customize Lepton -
- -
-
-
+ Web Application Development Tutorial + Learn how to build an ABP based web application named Acme.BookStore. + Explore Tutorial + + + + + + + + Community + + A unique community platform for ABP Lovers! + Explore all ABP users' experiences with the ABP Framework, discover articles and videos on how to use ABP, and join raffles for a chance to win surprise gifts! + Join ABP Community -
-
-
-
-
- -

You can check for similar problems and solutions, or open a new topic to discuss your specific issue.

- Visit Support - -
-
-
-
-
-
- -

You can find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more.

- Visit Blog - -
-
-
-
-
+ -
-

Let's improve your application!

-

Here are some links to help you get started:

-
+ + Blog + + Find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more. + Visit Blog +
+
+
+ -
-
-
-
-
-
Learn the ABP Framework
-

Explore the comprehensive documentation to learn how to build a modern web application.

- See Documents -
-
-
-
-
Samples
-

See the example projects built with the ABP Framework.

- All samples -
-
-
-
-
ABP Community
-

Get involved with a vibrant community and become a contributor.

- Community - Contribute -
-
-
-
-
-
+ + + + + More from ABP.IO + + + + + Latest Release Logs + + + Video Courses + + + Samples + + + Books + + + FAQ + + + + + + + + + Follow us on Social Media + + + + + + + X.com (Twitter) + + + Discord + + + Stack Overflow + + + + + + + YouTube + + + Instagram + + + GitHub + + + + + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Routes.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Routes.razor index 455a0ffcb78..1961b26b076 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Routes.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/Routes.razor @@ -1,4 +1,4 @@ -@using Volo.Abp.AspNetCore.Components.Web.LeptonXLiteTheme.Themes.LeptonXLite +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic @using Volo.Abp.AspNetCore.Components.WebAssembly.WebApp diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/_Imports.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/_Imports.razor index d83d7089efc..e15ae5ff692 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/_Imports.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Client/_Imports.razor @@ -1,4 +1,4 @@ -@using System.Net.Http +@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @@ -9,7 +9,6 @@ @using Microsoft.JSInterop @using Volo.Abp.AspNetCore.Components.Web @using MyCompanyName.MyProjectName.Blazor -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/App.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/App.razor index 73ed17cb7dc..fa004fffc2c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/App.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/App.razor @@ -1,8 +1,8 @@ -@using Volo.Abp.Localization +@using Volo.Abp.Localization @using System.Globalization @using Microsoft.Extensions.Hosting -@using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling -@using Volo.Abp.AspNetCore.Components.Web.Theming.Bundling +@using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Bundling @inject IHostEnvironment Env @{ var rtl = CultureHelper.IsRtl ? "rtl" : string.Empty; @@ -17,7 +17,8 @@ MyCompanyName.MyProjectName.Blazor.Server - + + @@ -26,7 +27,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/Pages/Index.razor index d0a8d0ac7b3..552e6d89e4f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/Pages/Index.razor @@ -1,284 +1,127 @@ -@page "/" -@using Volo.Abp.MultiTenancy +@page "/" @inherits MyProjectNameComponentBase -@inject AuthenticationStateProvider AuthenticationStateProvider -
-
-
-
-
-

Getting Started

-

Learn how to create and run - a - new web application using the application startup - template.

- Getting - Started + + + + + @if (!CurrentUser.IsAuthenticated) + { + @L["Welcome"] + @L["LongWelcomeMessage"] + @L["Login"] + } -

Web Application Development Tutorial

-

Learn how to build an ABP based - web - application named Acme.BookStore.

- Explore Tutorial + Getting Started + Learn how to create and run a new web application using the application startup template. + Getting Started -

Customize Lepton Theme

-

Learn how to customize LeptonX - Theme - as you wish.

- Customize Lepton -
- -
-
-
-
-
-
-
-
- -

You can check for - similar problems and solutions, or open a - new topic to discuss your specific issue.

- Visit Support - -
-
-
-
-
-
- -

You can find content - on .NET development, cross-platform, ASP.NET - application templates, ABP-related news, and - more.

- Visit Blog + Web Application Development Tutorial + Learn how to build an ABP based web application named Acme.BookStore. + Explore Tutorial + + + + + + + + Community + + A unique community platform for ABP Lovers! + Explore all ABP users' experiences with the ABP Framework, discover articles and videos on how to use ABP, and join raffles for a chance to win surprise gifts! + Join ABP Community - -
-
-
-
-
-
-
-
- -

A unique community platform - for ABP Lovers!

-

Explore all ABP users' - experiences with the ABP Framework, discover - articles and videos on how to use ABP, and join - raffles for a chance to win surprise gifts!

- Join ABP - Community -
- -
-
-
+ -
-
-
-
-
More from ABP.IO
-
-
+ + Blog + + Find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more. + Visit Blog + + + + -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
Latest Release Logs
-
- - - -
-
-
Video Courses
-
- - - -
-
-
Samples
-
- - - -
-
-
Books
-
- - - -
-
-
FAQ
-
- - - -
-
-
-
-
-
-
-
-
-
-

THE OFFICIAL GUIDE

-

Mastering ABP Framework

-

Written by the creator of the ABP - Framework, this book will help you gain a complete - understanding of the framework - and modern web application development techniques.

- -
-
- -
-
- -
-
-
-
-
-
-
Follow us on Social Media
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - -
- -
X.com
-
- - - -
- -
Discord
-
- - - -
- -
Stack Overflow
-
- - - -
- -
YouTube
-
- - - -
- -
Instagram
-
- - - -
-
-
-
-
-
\ No newline at end of file + + + + + More from ABP.IO + + + + + Latest Release Logs + + + Video Courses + + + Samples + + + Books + + + FAQ + + + + + + + + + Follow us on Social Media + + + + + + + X.com (Twitter) + + + Discord + + + Stack Overflow + + + + + + + YouTube + + + Instagram + + + GitHub + + + + + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/Routes.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/Routes.razor index d2b6a9be7b8..70a90d221c5 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/Routes.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Components/Routes.razor @@ -1,5 +1,5 @@ -@using Volo.Abp.AspNetCore.Components.Web.LeptonXLiteTheme.Themes.LeptonXLite -@using Volo.Abp.AspNetCore.Components.Web.Theming.Routing +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing @using Microsoft.Extensions.Options @inject IOptions RouterOptions diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Menus/MyProjectNameMenuContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Menus/MyProjectNameMenuContributor.cs index 48d545868f2..a8df05eb568 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Menus/MyProjectNameMenuContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Menus/MyProjectNameMenuContributor.cs @@ -1,16 +1,14 @@ using System; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; using MyCompanyName.MyProjectName.Localization; using MyCompanyName.MyProjectName.MultiTenancy; using Volo.Abp.Account.Localization; -using Volo.Abp.Identity.Blazor; using Volo.Abp.Authorization.Permissions; -using Volo.Abp.SettingManagement.Blazor.Menus; -using Volo.Abp.TenantManagement.Blazor.Navigation; +using Volo.Abp.Identity.Blazor.MudBlazor; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; using Volo.Abp.UI.Navigation; -using Volo.Abp.Users; namespace MyCompanyName.MyProjectName.Blazor.Server.Tiered.Menus; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj index 863ee55e3f6..3e7280602b0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj @@ -14,8 +14,6 @@ - - @@ -27,10 +25,10 @@ - - + + - + @@ -44,9 +42,9 @@ - - - + + +
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyProjectNameBlazorModule.cs index 325ee6805b3..e98ea8659c3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyProjectNameBlazorModule.cs @@ -1,7 +1,5 @@ -using System; +using System; using System.IO; -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Medallion.Threading; using Medallion.Threading.Redis; using Microsoft.AspNetCore.Authentication.Cookies; @@ -23,11 +21,11 @@ using Volo.Abp; using Volo.Abp.AspNetCore.Authentication.OpenIdConnect; using Volo.Abp.AspNetCore.Components.Web; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite; using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI; @@ -43,14 +41,14 @@ using Volo.Abp.Caching.StackExchangeRedis; using Volo.Abp.DistributedLocking; using Volo.Abp.Http.Client.IdentityModel.Web; -using Volo.Abp.Identity.Blazor.Server; +using Volo.Abp.Identity.Blazor.MudBlazor.Server; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.Security.Claims; -using Volo.Abp.SettingManagement.Blazor.Server; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Server; using Volo.Abp.Swashbuckle; -using Volo.Abp.TenantManagement.Blazor.Server; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Server; using Volo.Abp.UI; using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Urls; @@ -65,14 +63,14 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Tiered; typeof(AbpAspNetCoreMvcClientModule), typeof(AbpAspNetCoreAuthenticationOpenIdConnectModule), typeof(AbpHttpClientIdentityModelWebModule), - typeof(AbpAspNetCoreComponentsServerLeptonXLiteThemeModule), + typeof(AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule), typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), typeof(AbpAutofacModule), typeof(AbpSwashbuckleModule), typeof(AbpAspNetCoreSerilogModule), - typeof(AbpIdentityBlazorServerModule), - typeof(AbpTenantManagementBlazorServerModule), - typeof(AbpSettingManagementBlazorServerModule) + typeof(AbpIdentityBlazorMudBlazorServerModule), + typeof(AbpTenantManagementBlazorMudBlazorServerModule), + typeof(AbpSettingManagementBlazorMudBlazorServerModule) )] public class MyProjectNameBlazorModule : AbpModule { @@ -109,7 +107,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureMultiTenancy(); ConfigureAuthentication(context, configuration); ConfigureVirtualFileSystem(hostingEnvironment); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMenu(configuration); ConfigureDataProtection(context, configuration, hostingEnvironment); @@ -150,7 +147,7 @@ private void ConfigureBundles() //BLAZOR UI options.StyleBundles.Configure( - BlazorLeptonXLiteThemeBundles.Styles.Global, + BlazorMudBlazorBasicThemeBundles.Styles.Global, bundle => { bundle.AddFiles("/blazor-global-styles.css"); @@ -272,12 +269,6 @@ private void ConfigureVirtualFileSystem(IWebHostEnvironment hostingEnvironment) } } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } private void ConfigureMenu(IConfiguration configuration) { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/_Imports.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/_Imports.razor index 3bed94b9835..7a1153d81d7 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/_Imports.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/_Imports.razor @@ -1,4 +1,4 @@ -@using System.Net.Http +@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @@ -8,7 +8,6 @@ @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.JSInterop @using MyCompanyName.MyProjectName.Blazor.Server.Tiered -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/App.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/App.razor index 73ed17cb7dc..fa004fffc2c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/App.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/App.razor @@ -1,8 +1,8 @@ -@using Volo.Abp.Localization +@using Volo.Abp.Localization @using System.Globalization @using Microsoft.Extensions.Hosting -@using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling -@using Volo.Abp.AspNetCore.Components.Web.Theming.Bundling +@using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Bundling @inject IHostEnvironment Env @{ var rtl = CultureHelper.IsRtl ? "rtl" : string.Empty; @@ -17,7 +17,8 @@ MyCompanyName.MyProjectName.Blazor.Server - + + @@ -26,7 +27,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/Pages/Index.razor index 008b98b46db..552e6d89e4f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/Pages/Index.razor @@ -1,100 +1,127 @@ @page "/" -@using Volo.Abp.MultiTenancy @inherits MyProjectNameComponentBase -@inject AuthenticationStateProvider AuthenticationStateProvider -
-
-
-
-
-

Getting Started

-

Learn how to create and run a new web application using the application startup template.

- Getting Started + + + + + @if (!CurrentUser.IsAuthenticated) + { + @L["Welcome"] + @L["LongWelcomeMessage"] + @L["Login"] + } -

Web Application Development Tutorial

-

Learn how to build an ABP based web application named Acme.BookStore.

- Explore Tutorial + Getting Started + Learn how to create and run a new web application using the application startup template. + Getting Started -

Customize Lepton Theme

-

Learn how to customize LeptonX Theme as you wish.

- Customize Lepton -
- -
-
-
+ Web Application Development Tutorial + Learn how to build an ABP based web application named Acme.BookStore. + Explore Tutorial + + + + + + + + Community + + A unique community platform for ABP Lovers! + Explore all ABP users' experiences with the ABP Framework, discover articles and videos on how to use ABP, and join raffles for a chance to win surprise gifts! + Join ABP Community -
-
-
- -

You can check for similar problems and solutions, or open a new topic to discuss your specific issue.

- Visit Support - -
-
-
+ -
-
-
- -

A unique community platform for ABP Lovers!

-

Explore all ABP users' experiences with the ABP Framework, discover articles and videos on how to use ABP, and join raffles for a chance to win surprise gifts!

- Join ABP Community -
- -
-
-
+ + Blog + + Find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more. + Visit Blog +
+
+
+ -
-

Let's improve your application!

-

Here are some links to help you get started:

-
- -
-
-
-
-
-
Learn the ABP Framework
-

Explore the comprehensive documentation to learn how to build a modern web application.

- See Documents -
-
-
-
-
Samples
-

See the example projects built with the ABP Framework.

- All samples -
-
-
-
-
ABP Community
-

Get involved with a vibrant community and become a contributor.

- Community - Contribute -
-
-
-
-
-
-
ABP Blog
-

Take a look at our recently published articles.

- See Blog -
-
-
-
-
Github
-

Do you love the ABP Framework? Please give a star to support it!

- See Open Source Framework -
-
-
-
-
+ + + + + More from ABP.IO + + + + + Latest Release Logs + + + Video Courses + + + Samples + + + Books + + + FAQ + + + + + + + + + Follow us on Social Media + + + + + + + X.com (Twitter) + + + Discord + + + Stack Overflow + + + + + + + YouTube + + + Instagram + + + GitHub + + + + + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/Routes.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/Routes.razor index d2b6a9be7b8..70a90d221c5 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/Routes.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Components/Routes.razor @@ -1,5 +1,5 @@ -@using Volo.Abp.AspNetCore.Components.Web.LeptonXLiteTheme.Themes.LeptonXLite -@using Volo.Abp.AspNetCore.Components.Web.Theming.Routing +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing @using Microsoft.Extensions.Options @inject IOptions RouterOptions diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Menus/MyProjectNameMenuContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Menus/MyProjectNameMenuContributor.cs index eeabef69b12..266e0bddda0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Menus/MyProjectNameMenuContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Menus/MyProjectNameMenuContributor.cs @@ -1,9 +1,9 @@ using System.Threading.Tasks; using MyCompanyName.MyProjectName.Localization; using MyCompanyName.MyProjectName.MultiTenancy; -using Volo.Abp.Identity.Blazor; -using Volo.Abp.SettingManagement.Blazor.Menus; -using Volo.Abp.TenantManagement.Blazor.Navigation; +using Volo.Abp.Identity.Blazor.MudBlazor; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Blazor.Server.Menus; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index c885213819c..f8c088bd7ce 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -15,8 +15,6 @@ - - @@ -26,10 +24,10 @@ - - + + - + @@ -41,9 +39,9 @@ - - - + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs index 658d6d80ca0..68946c44933 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs @@ -1,7 +1,5 @@ using System; using System.IO; -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Extensions.DependencyInjection; using Microsoft.AspNetCore.Hosting; @@ -19,11 +17,11 @@ using Volo.Abp; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Components.Web; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite; using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI; @@ -33,12 +31,12 @@ using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Mapperly; -using Volo.Abp.Identity.Blazor.Server; +using Volo.Abp.Identity.Blazor.MudBlazor.Server; using Volo.Abp.Modularity; using Volo.Abp.Security.Claims; -using Volo.Abp.SettingManagement.Blazor.Server; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Server; using Volo.Abp.Swashbuckle; -using Volo.Abp.TenantManagement.Blazor.Server; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Server; using Volo.Abp.OpenIddict; using Volo.Abp.UI; using Volo.Abp.UI.Navigation; @@ -55,11 +53,11 @@ namespace MyCompanyName.MyProjectName.Blazor.Server; typeof(AbpSwashbuckleModule), typeof(AbpAspNetCoreSerilogModule), typeof(AbpAccountWebOpenIddictModule), - typeof(AbpAspNetCoreComponentsServerLeptonXLiteThemeModule), + typeof(AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule), typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), - typeof(AbpIdentityBlazorServerModule), - typeof(AbpTenantManagementBlazorServerModule), - typeof(AbpSettingManagementBlazorServerModule) + typeof(AbpIdentityBlazorMudBlazorServerModule), + typeof(AbpTenantManagementBlazorMudBlazorServerModule), + typeof(AbpSettingManagementBlazorMudBlazorServerModule) )] public class MyProjectNameBlazorModule : AbpModule { @@ -124,7 +122,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureVirtualFileSystem(hostingEnvironment); ConfigureSwaggerServices(context.Services); ConfigureAutoApiControllers(); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMenu(context); @@ -164,7 +161,7 @@ private void ConfigureBundles() //BLAZOR UI options.StyleBundles.Configure( - BlazorLeptonXLiteThemeBundles.Styles.Global, + BlazorMudBlazorBasicThemeBundles.Styles.Global, bundle => { bundle.AddFiles("/blazor-global-styles.css"); @@ -214,12 +211,6 @@ private void ConfigureSwaggerServices(IServiceCollection services) ); } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } private void ConfigureMenu(ServiceConfigurationContext context) { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor index 82279dd28a0..c8d3d02e791 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor @@ -1,4 +1,4 @@ -@using System.Net.Http +@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @@ -8,7 +8,6 @@ @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.JSInterop @using MyCompanyName.MyProjectName.Blazor.Server -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Menus/MyProjectNameMenuContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Menus/MyProjectNameMenuContributor.cs index 93067729fa9..0b5af297929 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Menus/MyProjectNameMenuContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Menus/MyProjectNameMenuContributor.cs @@ -5,9 +5,9 @@ using MyCompanyName.MyProjectName.MultiTenancy; using Volo.Abp.Account.Localization; using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Identity.Blazor; -using Volo.Abp.SettingManagement.Blazor.Menus; -using Volo.Abp.TenantManagement.Blazor.Navigation; +using Volo.Abp.Identity.Blazor.MudBlazor; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Blazor.WebApp.Client.Menus; diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Client.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Client.csproj index a7a7f9001b3..654506d73cc 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Client.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Client.csproj @@ -13,19 +13,17 @@ - - - + - + - + @@ -33,9 +31,9 @@ - - - + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyProjectNameBlazorClientModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyProjectNameBlazorClientModule.cs index d3e28b8e233..b696e312cbc 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyProjectNameBlazorClientModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/MyProjectNameBlazorClientModule.cs @@ -1,21 +1,19 @@ -using System; +using System; using System.Net.Http; -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Components.WebAssembly.Authentication; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using MyCompanyName.MyProjectName.Blazor.WebApp.Client.Menus; using Volo.Abp.AspNetCore.Components.Web; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; -using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; using Volo.Abp.Autofac.WebAssembly; using Volo.Abp.Mapperly; -using Volo.Abp.Identity.Blazor.WebAssembly; +using Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly; using Volo.Abp.Modularity; -using Volo.Abp.SettingManagement.Blazor.WebAssembly; -using Volo.Abp.TenantManagement.Blazor.WebAssembly; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Blazor.WebApp.Client; @@ -23,10 +21,10 @@ namespace MyCompanyName.MyProjectName.Blazor.WebApp.Client; [DependsOn( typeof(AbpAutofacWebAssemblyModule), typeof(MyProjectNameHttpApiClientModule), - typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule), - typeof(AbpIdentityBlazorWebAssemblyModule), - typeof(AbpTenantManagementBlazorWebAssemblyModule), - typeof(AbpSettingManagementBlazorWebAssemblyModule) + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule), + typeof(AbpIdentityBlazorMudBlazorWebAssemblyModule), + typeof(AbpTenantManagementBlazorMudBlazorWebAssemblyModule), + typeof(AbpSettingManagementBlazorMudBlazorWebAssemblyModule) )] public class MyProjectNameBlazorClientModule : AbpModule { @@ -45,7 +43,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureAuthentication(builder); ConfigureHttpClient(context, environment); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMenu(context); @@ -69,12 +66,6 @@ private void ConfigureMenu(ServiceConfigurationContext context) }); } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } private static void ConfigureAuthentication(WebAssemblyHostBuilder builder) { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Pages/Index.razor index b98f41c5c4d..552e6d89e4f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Pages/Index.razor @@ -1,153 +1,127 @@ @page "/" @inherits MyProjectNameComponentBase -@inject AuthenticationStateProvider AuthenticationStateProvider -
-
-
-
-
-

Getting Started

-

Learn how to create and run a new web application using the application startup template.

- Getting Started + + + + + @if (!CurrentUser.IsAuthenticated) + { + @L["Welcome"] + @L["LongWelcomeMessage"] + @L["Login"] + } -

Web Application Development Tutorial

-

Learn how to build an ABP based web application named Acme.BookStore.

- Explore Tutorial + Getting Started + Learn how to create and run a new web application using the application startup template. + Getting Started -

Customize Lepton Theme

-

Learn how to customize LeptonX Theme as you wish.

- Customize Lepton -
- -
-
-
+ Web Application Development Tutorial + Learn how to build an ABP based web application named Acme.BookStore. + Explore Tutorial + + + + + + + + Community + + A unique community platform for ABP Lovers! + Explore all ABP users' experiences with the ABP Framework, discover articles and videos on how to use ABP, and join raffles for a chance to win surprise gifts! + Join ABP Community -
-

Let's improve your application!

-

Here are some links to help you get started:

-
+ -
-
-
-
-
-
Learn the ABP Framework
-

Explore the comprehensive documentation to learn how to build a modern web application.

- See Documents -
-
-
-
-
Samples
-

See the example projects built with the ABP Framework.

- All samples -
-
-
-
-
ABP Community
-

Get involved with a vibrant community and become a contributor.

- Community - Contribute -
-
-
-
-
-
-
ABP Blog
-

Take a look at our recently published articles.

- See Blog -
-
-
-
-
Github
-

Do you love the ABP Framework? Please give a star to support it!

- GitHub -
-
-
-
-
+ + Blog + + Find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more. + Visit Blog +
+
+
+ -
-
-
-
-
- -

You can check for similar problems and solutions, or open a new topic to discuss your specific issue.

- Visit Support - -
-
-
-
-
-
- -

You can find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more.

- Visit Blog - -
-
-
-
-
-
- -
-
-

- ABP is a platform based on the open source ABP framework. It provides pre-built application modules, - rapid application development tooling, professional UI themes, premium support, and more. -

- -
-
-
-
- Startup Templates - Details -
-
-
-
-
-
- Application Modules - Details -
-
-
-
-
-
- Developer
Tools - Details -
-
-
-
-
-
- UI Themes - Details -
-
-
-
-
-
- Support - Details -
-
-
-
-
-
+ + + + + More from ABP.IO + + + + + Latest Release Logs + + + Video Courses + + + Samples + + + Books + + + FAQ + + + + + + + + + Follow us on Social Media + + + + + + + X.com (Twitter) + + + Discord + + + Stack Overflow + + + + + + + YouTube + + + Instagram + + + GitHub + + + + + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Routes.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Routes.razor index d2b6a9be7b8..70a90d221c5 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Routes.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/Routes.razor @@ -1,5 +1,5 @@ -@using Volo.Abp.AspNetCore.Components.Web.LeptonXLiteTheme.Themes.LeptonXLite -@using Volo.Abp.AspNetCore.Components.Web.Theming.Routing +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing @using Microsoft.Extensions.Options @inject IOptions RouterOptions diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/_Imports.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/_Imports.razor index 66c9c872fc1..a31e1e74246 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/_Imports.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Client/_Imports.razor @@ -1,4 +1,4 @@ -@using System.Net.Http +@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @@ -8,7 +8,6 @@ @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.JSInterop @using Volo.Abp.AspNetCore.Components.Web -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Menus/MyProjectNameMenuContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Menus/MyProjectNameMenuContributor.cs index 75dd7244ef0..238a9f8f9fa 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Menus/MyProjectNameMenuContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Menus/MyProjectNameMenuContributor.cs @@ -5,9 +5,9 @@ using MyCompanyName.MyProjectName.MultiTenancy; using Volo.Abp.Account.Localization; using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Identity.Blazor; -using Volo.Abp.SettingManagement.Blazor.Menus; -using Volo.Abp.TenantManagement.Blazor.Navigation; +using Volo.Abp.Identity.Blazor.MudBlazor; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client.Menus; @@ -66,22 +66,26 @@ private Task ConfigureMainMenuAsync(MenuConfigurationContext context) private Task ConfigureUserMenuAsync(MenuConfigurationContext context) { - if (!OperatingSystem.IsBrowser()) - { - return Task.CompletedTask; - } - - var authServerUrl = _configuration["AuthServer:Authority"] ?? ""; var accountStringLocalizer = context.GetLocalizer(); - context.Menu.AddItem(new ApplicationMenuItem( - "Account.Manage", - accountStringLocalizer["MyAccount"], - $"{authServerUrl.EnsureEndsWith('/')}Account/Manage", - icon: "fa fa-cog", - order: 1000, - target: "_blank") - .RequireAuthenticated()); + if (OperatingSystem.IsBrowser()) + { + var authServerUrl = _configuration["AuthServer:Authority"] ?? ""; + + context.Menu.AddItem(new ApplicationMenuItem( + "Account.Manage", + accountStringLocalizer["MyAccount"], + $"{authServerUrl.EnsureEndsWith('/')}Account/Manage", + icon: "fa fa-cog", + order: 1000, + target: "_blank") + .RequireAuthenticated()); + } + else + { + context.Menu.AddItem(new ApplicationMenuItem("Account.Manage", accountStringLocalizer["MyAccount"], "/Account/Manage", icon: "fa fa-cog", order: 1000).RequireAuthenticated()); + context.Menu.AddItem(new ApplicationMenuItem("Account.Logout", accountStringLocalizer["Logout"], url: "/Account/Logout", icon: "fa fa-power-off", order: int.MaxValue - 1000).RequireAuthenticated()); + } return Task.CompletedTask; } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client.csproj index 4c5843ef0ef..3623ef9af4f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client.csproj @@ -13,19 +13,17 @@ - - - + - + - + @@ -33,9 +31,9 @@ - - - + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyProjectNameBlazorClientModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyProjectNameBlazorClientModule.cs index 7f1f464aac1..26b8b8af182 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyProjectNameBlazorClientModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/MyProjectNameBlazorClientModule.cs @@ -1,21 +1,19 @@ -using System; +using System; using System.Net.Http; -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Components.WebAssembly.Authentication; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client.Menus; using Volo.Abp.AspNetCore.Components.Web; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; -using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; using Volo.Abp.Autofac.WebAssembly; using Volo.Abp.Mapperly; -using Volo.Abp.Identity.Blazor.WebAssembly; +using Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly; using Volo.Abp.Modularity; -using Volo.Abp.SettingManagement.Blazor.WebAssembly; -using Volo.Abp.TenantManagement.Blazor.WebAssembly; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client; @@ -23,10 +21,10 @@ namespace MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client; [DependsOn( typeof(AbpAutofacWebAssemblyModule), typeof(MyProjectNameHttpApiClientModule), - typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeModule), - typeof(AbpIdentityBlazorWebAssemblyModule), - typeof(AbpTenantManagementBlazorWebAssemblyModule), - typeof(AbpSettingManagementBlazorWebAssemblyModule) + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule), + typeof(AbpIdentityBlazorMudBlazorWebAssemblyModule), + typeof(AbpTenantManagementBlazorMudBlazorWebAssemblyModule), + typeof(AbpSettingManagementBlazorMudBlazorWebAssemblyModule) )] public class MyProjectNameBlazorClientModule : AbpModule { @@ -45,7 +43,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureAuthentication(builder); ConfigureHttpClient(context, environment); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMenu(context); @@ -68,12 +65,6 @@ private void ConfigureMenu(ServiceConfigurationContext context) }); } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } private static void ConfigureAuthentication(WebAssemblyHostBuilder builder) { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Pages/Index.razor index d0a8d0ac7b3..552e6d89e4f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Pages/Index.razor @@ -1,284 +1,127 @@ -@page "/" -@using Volo.Abp.MultiTenancy +@page "/" @inherits MyProjectNameComponentBase -@inject AuthenticationStateProvider AuthenticationStateProvider -
-
-
-
-
-

Getting Started

-

Learn how to create and run - a - new web application using the application startup - template.

- Getting - Started + + + + + @if (!CurrentUser.IsAuthenticated) + { + @L["Welcome"] + @L["LongWelcomeMessage"] + @L["Login"] + } -

Web Application Development Tutorial

-

Learn how to build an ABP based - web - application named Acme.BookStore.

- Explore Tutorial + Getting Started + Learn how to create and run a new web application using the application startup template. + Getting Started -

Customize Lepton Theme

-

Learn how to customize LeptonX - Theme - as you wish.

- Customize Lepton -
- -
-
-
-
-
-
-
-
- -

You can check for - similar problems and solutions, or open a - new topic to discuss your specific issue.

- Visit Support - -
-
-
-
-
-
- -

You can find content - on .NET development, cross-platform, ASP.NET - application templates, ABP-related news, and - more.

- Visit Blog + Web Application Development Tutorial + Learn how to build an ABP based web application named Acme.BookStore. + Explore Tutorial + + + + + + + + Community + + A unique community platform for ABP Lovers! + Explore all ABP users' experiences with the ABP Framework, discover articles and videos on how to use ABP, and join raffles for a chance to win surprise gifts! + Join ABP Community - -
-
-
-
-
-
-
-
- -

A unique community platform - for ABP Lovers!

-

Explore all ABP users' - experiences with the ABP Framework, discover - articles and videos on how to use ABP, and join - raffles for a chance to win surprise gifts!

- Join ABP - Community -
- -
-
-
+ -
-
-
-
-
More from ABP.IO
-
-
+ + Blog + + Find content on .NET development, cross-platform, ASP.NET application templates, ABP-related news, and more. + Visit Blog + + + + -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
Latest Release Logs
-
- - - -
-
-
Video Courses
-
- - - -
-
-
Samples
-
- - - -
-
-
Books
-
- - - -
-
-
FAQ
-
- - - -
-
-
-
-
-
-
-
-
-
-

THE OFFICIAL GUIDE

-

Mastering ABP Framework

-

Written by the creator of the ABP - Framework, this book will help you gain a complete - understanding of the framework - and modern web application development techniques.

- -
-
- -
-
- -
-
-
-
-
-
-
Follow us on Social Media
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - -
- -
X.com
-
- - - -
- -
Discord
-
- - - -
- -
Stack Overflow
-
- - - -
- -
YouTube
-
- - - -
- -
Instagram
-
- - - -
-
-
-
-
-
\ No newline at end of file + + + + + More from ABP.IO + + + + + Latest Release Logs + + + Video Courses + + + Samples + + + Books + + + FAQ + + + + + + + + + Follow us on Social Media + + + + + + + X.com (Twitter) + + + Discord + + + Stack Overflow + + + + + + + YouTube + + + Instagram + + + GitHub + + + + + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Routes.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Routes.razor index d2b6a9be7b8..70a90d221c5 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Routes.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/Routes.razor @@ -1,5 +1,5 @@ -@using Volo.Abp.AspNetCore.Components.Web.LeptonXLiteTheme.Themes.LeptonXLite -@using Volo.Abp.AspNetCore.Components.Web.Theming.Routing +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing @using Microsoft.Extensions.Options @inject IOptions RouterOptions diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/_Imports.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/_Imports.razor index d83d7089efc..e15ae5ff692 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/_Imports.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client/_Imports.razor @@ -1,4 +1,4 @@ -@using System.Net.Http +@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @@ -9,7 +9,6 @@ @using Microsoft.JSInterop @using Volo.Abp.AspNetCore.Components.Web @using MyCompanyName.MyProjectName.Blazor -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/Components/App.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/Components/App.razor index 06cdb41c0f7..73b58df41b1 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/Components/App.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/Components/App.razor @@ -1,10 +1,10 @@ -@using Volo.Abp.Localization +@using Volo.Abp.Localization @using System.Globalization @using Microsoft.AspNetCore.Authentication @using Microsoft.AspNetCore.Http @using Microsoft.Extensions.Hosting -@using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling -@using Volo.Abp.AspNetCore.Components.Web.Theming.Bundling +@using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Bundling @using Volo.Abp.AspNetCore.Components.WebAssembly.WebApp @inject IHostEnvironment Env @{ @@ -20,7 +20,8 @@ MyCompanyName.MyProjectName.Blazor.Server - + + @@ -29,7 +30,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj index 315cff7dedf..fa9b577dc70 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj @@ -16,8 +16,6 @@ - - @@ -29,10 +27,11 @@ - - + + - + + @@ -47,9 +46,9 @@ - - - + + +
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyProjectNameBlazorModule.cs index 2a31f2a763a..736b7ef7b3d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyProjectNameBlazorModule.cs @@ -1,7 +1,5 @@ -using System; +using System; using System.IO; -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Medallion.Threading; using Medallion.Threading.Redis; using Microsoft.AspNetCore.Authentication.Cookies; @@ -25,10 +23,10 @@ using Volo.Abp; using Volo.Abp.AspNetCore.Authentication.OpenIdConnect; using Volo.Abp.AspNetCore.Components.Web; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; -using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI; @@ -46,13 +44,13 @@ using Volo.Abp.Caching.StackExchangeRedis; using Volo.Abp.DistributedLocking; using Volo.Abp.Http.Client.IdentityModel.Web; -using Volo.Abp.Identity.Blazor.Server; +using Volo.Abp.Identity.Blazor.MudBlazor.Server; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.Security.Claims; -using Volo.Abp.SettingManagement.Blazor.Server; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Server; using Volo.Abp.Swashbuckle; -using Volo.Abp.TenantManagement.Blazor.Server; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Server; using Volo.Abp.UI; using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Urls; @@ -67,15 +65,15 @@ namespace MyCompanyName.MyProjectName.Blazor.WebApp.Tiered; typeof(AbpAspNetCoreMvcClientModule), typeof(AbpAspNetCoreAuthenticationOpenIdConnectModule), typeof(AbpHttpClientIdentityModelWebModule), - typeof(AbpAspNetCoreComponentsServerLeptonXLiteThemeModule), - typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeBundlingModule), + typeof(AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule), + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule), typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), typeof(AbpAutofacModule), typeof(AbpSwashbuckleModule), typeof(AbpAspNetCoreSerilogModule), - typeof(AbpIdentityBlazorServerModule), - typeof(AbpTenantManagementBlazorServerModule), - typeof(AbpSettingManagementBlazorServerModule) + typeof(AbpIdentityBlazorMudBlazorServerModule), + typeof(AbpTenantManagementBlazorMudBlazorServerModule), + typeof(AbpSettingManagementBlazorMudBlazorServerModule) )] public class MyProjectNameBlazorModule : AbpModule { @@ -113,7 +111,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureMultiTenancy(); ConfigureAuthentication(context, configuration); ConfigureVirtualFileSystem(hostingEnvironment); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMenu(configuration); ConfigureDataProtection(context, configuration, hostingEnvironment); @@ -155,7 +152,7 @@ private void ConfigureBundles() //BLAZOR UI options.StyleBundles.Configure( - BlazorLeptonXLiteThemeBundles.Styles.Global, + BlazorMudBlazorBasicThemeBundles.Styles.Global, bundle => { bundle.AddFiles("/blazor-global-styles.css"); @@ -277,12 +274,6 @@ private void ConfigureVirtualFileSystem(IWebHostEnvironment hostingEnvironment) } } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } private void ConfigureMenu(IConfiguration configuration) { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/_Imports.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/_Imports.razor index b2726039272..c88befe37de 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/_Imports.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/_Imports.razor @@ -1,4 +1,4 @@ -@using System.Net.Http +@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @@ -7,8 +7,7 @@ @using Microsoft.AspNetCore.Components.Web.Virtualization @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.JSInterop -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components @using MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.Client diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/Components/App.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/Components/App.razor index 78b81092ca2..d0e68d9c2d1 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/Components/App.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/Components/App.razor @@ -1,8 +1,8 @@ -@using Volo.Abp.Localization +@using Volo.Abp.Localization @using System.Globalization @using Microsoft.Extensions.Hosting -@using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling -@using Volo.Abp.AspNetCore.Components.Web.Theming.Bundling +@using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Bundling @inject IHostEnvironment Env @{ var rtl = CultureHelper.IsRtl ? "rtl" : string.Empty; @@ -17,7 +17,8 @@ MyCompanyName.MyProjectName.Blazor.Server - + + @@ -26,7 +27,7 @@ - + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj index 9ebcd8ff4f8..d6628cf89db 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj @@ -16,8 +16,6 @@ - - @@ -27,12 +25,12 @@ - - + + - + - + @@ -44,9 +42,9 @@ - - - + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyProjectNameBlazorModule.cs index 3a7b435244d..f89ba687563 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyProjectNameBlazorModule.cs @@ -1,7 +1,5 @@ using System; using System.IO; -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Extensions.DependencyInjection; using Microsoft.AspNetCore.Hosting; @@ -20,10 +18,10 @@ using Volo.Abp; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Components.Web; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme; -using Volo.Abp.AspNetCore.Components.Server.LeptonXLiteTheme.Bundling; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; -using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI; @@ -35,13 +33,13 @@ using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Mapperly; -using Volo.Abp.Identity.Blazor.Server; +using Volo.Abp.Identity.Blazor.MudBlazor.Server; using Volo.Abp.Modularity; using Volo.Abp.OpenIddict; using Volo.Abp.Security.Claims; -using Volo.Abp.SettingManagement.Blazor.Server; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Server; using Volo.Abp.Swashbuckle; -using Volo.Abp.TenantManagement.Blazor.Server; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Server; using Volo.Abp.UI; using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Urls; @@ -57,12 +55,12 @@ namespace MyCompanyName.MyProjectName.Blazor.WebApp; typeof(AbpSwashbuckleModule), typeof(AbpAspNetCoreSerilogModule), typeof(AbpAccountWebOpenIddictModule), - typeof(AbpAspNetCoreComponentsServerLeptonXLiteThemeModule), - typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeBundlingModule), + typeof(AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule), + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule), typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), - typeof(AbpIdentityBlazorServerModule), - typeof(AbpTenantManagementBlazorServerModule), - typeof(AbpSettingManagementBlazorServerModule) + typeof(AbpIdentityBlazorMudBlazorServerModule), + typeof(AbpTenantManagementBlazorMudBlazorServerModule), + typeof(AbpSettingManagementBlazorMudBlazorServerModule) )] public class MyProjectNameBlazorModule : AbpModule { @@ -128,7 +126,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureVirtualFileSystem(hostingEnvironment); ConfigureSwaggerServices(context.Services); ConfigureAutoApiControllers(); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMenu(context); @@ -171,7 +168,7 @@ private void ConfigureBundles() //BLAZOR UI options.StyleBundles.Configure( - BlazorLeptonXLiteThemeBundles.Styles.Global, + BlazorMudBlazorBasicThemeBundles.Styles.Global, bundle => { bundle.AddFiles("/blazor-global-styles.css"); @@ -221,12 +218,6 @@ private void ConfigureSwaggerServices(IServiceCollection services) ); } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } private void ConfigureMenu(ServiceConfigurationContext context) { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/_Imports.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/_Imports.razor index 34452bb9c37..868150cfa0b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/_Imports.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/_Imports.razor @@ -1,4 +1,4 @@ -@using System.Net.Http +@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @@ -8,7 +8,6 @@ @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.JSInterop @using MyCompanyName.MyProjectName.Blazor.WebApp.Client -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/App.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/App.razor index ea01bcd33b5..d2193e83336 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/App.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/App.razor @@ -7,6 +7,7 @@ MyCompanyName.MyProjectName.Blazor + @@ -20,15 +21,11 @@ - +
-
-
-
-
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index a0c0672406a..edd7df7c335 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -16,7 +16,7 @@ - +
diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs index dee666c1077..feded4eff7f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs @@ -4,7 +4,7 @@ using Microsoft.Extensions.Hosting; using MyCompanyName.MyProjectName.Blazor.Client; using Volo.Abp; -using Volo.Abp.AspNetCore.Components.WebAssembly.LeptonXLiteTheme.Bundling; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Components.WebAssembly.WebApp; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.Autofac; @@ -15,7 +15,7 @@ namespace MyCompanyName.MyProjectName.Blazor; [DependsOn( typeof(AbpAutofacModule), typeof(AbpAspNetCoreMvcUiBundlingModule), - typeof(AbpAspNetCoreComponentsWebAssemblyLeptonXLiteThemeBundlingModule) + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule) )] public class MyProjectNameBlazorModule : AbpModule { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyCompanyName.MyProjectName.Blazor.Host.Client.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyCompanyName.MyProjectName.Blazor.Host.Client.csproj index 7a79b447cd2..cbe69b3e2c7 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyCompanyName.MyProjectName.Blazor.Host.Client.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyCompanyName.MyProjectName.Blazor.Host.Client.csproj @@ -10,22 +10,20 @@ - - - + - - - + + + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyProjectNameBlazorHostClientModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyProjectNameBlazorHostClientModule.cs index f8f1805ea1b..0f7f3a58b8a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyProjectNameBlazorHostClientModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/MyProjectNameBlazorHostClientModule.cs @@ -1,32 +1,30 @@ using System; using System.Net.Http; -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using MyCompanyName.MyProjectName.Blazor.WebAssembly; using Volo.Abp.Account; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; -using Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; using Volo.Abp.Autofac.WebAssembly; using Volo.Abp.Mapperly; -using Volo.Abp.Identity.Blazor.WebAssembly; +using Volo.Abp.Identity.Blazor.MudBlazor.WebAssembly; using Volo.Abp.Modularity; -using Volo.Abp.SettingManagement.Blazor.WebAssembly; -using Volo.Abp.TenantManagement.Blazor.WebAssembly; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.WebAssembly; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.WebAssembly; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Blazor.Host.Client; [DependsOn( typeof(AbpAutofacWebAssemblyModule), - typeof(AbpAspNetCoreComponentsWebAssemblyBasicThemeModule), + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule), typeof(AbpAccountApplicationContractsModule), - typeof(AbpIdentityBlazorWebAssemblyModule), - typeof(AbpTenantManagementBlazorWebAssemblyModule), - typeof(AbpSettingManagementBlazorWebAssemblyModule), + typeof(AbpIdentityBlazorMudBlazorWebAssemblyModule), + typeof(AbpTenantManagementBlazorMudBlazorWebAssemblyModule), + typeof(AbpSettingManagementBlazorMudBlazorWebAssemblyModule), typeof(MyProjectNameBlazorWebAssemblyModule) )] public class MyProjectNameBlazorHostClientModule : AbpModule @@ -38,7 +36,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) ConfigureAuthentication(builder); ConfigureHttpClient(context, environment); - ConfigureBlazorise(context); ConfigureRouter(context); ConfigureMenu(context); @@ -61,13 +58,6 @@ private void ConfigureMenu(ServiceConfigurationContext context) }); } - private void ConfigureBlazorise(ServiceConfigurationContext context) - { - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - } - private static void ConfigureAuthentication(WebAssemblyHostBuilder builder) { builder.Services.AddOidcAuthentication(options => diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/Routes.razor b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/Routes.razor index d7cc3acec77..61577721a5f 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/Routes.razor +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/Routes.razor @@ -1,5 +1,5 @@ @using Volo.Abp.AspNetCore.Components.WebAssembly.WebApp -@using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/_Imports.razor b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/_Imports.razor index b1ade9c6283..4c76904aee6 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/_Imports.razor +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host.Client/_Imports.razor @@ -7,5 +7,6 @@ @using Microsoft.JSInterop @using Volo.Abp.AspNetCore.Components.WebAssembly @using MyCompanyName.MyProjectName.Blazor -@using Blazorise -@using Blazorise.DataGrid +@using MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/App.razor b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/App.razor index d964f8098a9..980c1f10f9e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/App.razor +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/App.razor @@ -20,10 +20,6 @@
-
-
-
-
diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj index 1eb27289514..3503cd12c61 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host/MyCompanyName.MyProjectName.Blazor.Host.csproj @@ -16,7 +16,7 @@ - +
diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Components/App.razor b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Components/App.razor index 1a129ae90c8..0339a6507de 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Components/App.razor +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Components/App.razor @@ -1,8 +1,8 @@ @using Volo.Abp.Localization @using System.Globalization @using Microsoft.Extensions.Hosting -@using Volo.Abp.AspNetCore.Components.Server.BasicTheme.Bundling -@using Volo.Abp.AspNetCore.Components.Web.Theming.Bundling +@using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Bundling @inject IHostEnvironment Env @{ var rtl = CultureHelper.IsRtl ? "rtl" : string.Empty; @@ -17,7 +17,8 @@ MyCompanyName.MyProjectName.Blazor.Server - + + @@ -26,7 +27,7 @@ - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Components/Routes.razor b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Components/Routes.razor index b2251911fad..edf07d0af54 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Components/Routes.razor +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Components/Routes.razor @@ -1,6 +1,6 @@ -@using Volo.Abp.AspNetCore.Components.Web.Theming.Routing +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing @using Microsoft.Extensions.Options -@using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic @inject IOptions RouterOptions diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Menus/MyProjectNameMenuContributor.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Menus/MyProjectNameMenuContributor.cs index 50b2e293d3d..8ddab69d9ec 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Menus/MyProjectNameMenuContributor.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Menus/MyProjectNameMenuContributor.cs @@ -1,8 +1,8 @@ using System.Threading.Tasks; using MyCompanyName.MyProjectName.MultiTenancy; -using Volo.Abp.Identity.Blazor; -using Volo.Abp.SettingManagement.Blazor.Menus; -using Volo.Abp.TenantManagement.Blazor.Navigation; +using Volo.Abp.Identity.Blazor.MudBlazor; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Menus; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Navigation; using Volo.Abp.UI.Navigation; namespace MyCompanyName.MyProjectName.Blazor.Server.Host.Menus; diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj index 5e0095ed5be..34b63a7da36 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyCompanyName.MyProjectName.Blazor.Server.Host.csproj @@ -13,8 +13,6 @@ - - @@ -27,20 +25,20 @@ - + - + - + - + diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyProjectNameBlazorHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyProjectNameBlazorHostModule.cs index 452eb58b56d..17ab4f1ee0b 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyProjectNameBlazorHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyProjectNameBlazorHostModule.cs @@ -1,8 +1,6 @@ using System; using System.IO; using System.Threading.Tasks; -using Blazorise.Bootstrap5; -using Blazorise.Icons.FontAwesome; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection; @@ -20,9 +18,9 @@ using Volo.Abp.Account; using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Components.Web; -using Volo.Abp.AspNetCore.Components.Server.BasicTheme; -using Volo.Abp.AspNetCore.Components.Server.BasicTheme.Bundling; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; @@ -36,7 +34,7 @@ using Volo.Abp.FeatureManagement; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Identity; -using Volo.Abp.Identity.Blazor.Server; +using Volo.Abp.Identity.Blazor.MudBlazor.Server; using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.Localization; using Volo.Abp.Modularity; @@ -45,11 +43,11 @@ using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.SettingManagement; -using Volo.Abp.SettingManagement.Blazor.Server; +using Volo.Abp.SettingManagement.Blazor.MudBlazor.Server; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; -using Volo.Abp.TenantManagement.Blazor.Server; +using Volo.Abp.TenantManagement.Blazor.MudBlazor.Server; using Volo.Abp.TenantManagement.EntityFrameworkCore; using Volo.Abp.UI.Navigation; using Volo.Abp.UI.Navigation.Urls; @@ -68,20 +66,20 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host; typeof(AbpAccountWebOpenIddictModule), typeof(AbpAccountApplicationModule), typeof(AbpAccountHttpApiModule), - typeof(AbpAspNetCoreComponentsServerBasicThemeModule), + typeof(AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule), typeof(AbpIdentityApplicationModule), typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpAuditLoggingEntityFrameworkCoreModule), - typeof(AbpIdentityBlazorServerModule), + typeof(AbpIdentityBlazorMudBlazorServerModule), typeof(AbpFeatureManagementApplicationModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), - typeof(AbpTenantManagementBlazorServerModule), + typeof(AbpTenantManagementBlazorMudBlazorServerModule), typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpPermissionManagementApplicationModule), - typeof(AbpSettingManagementBlazorServerModule), + typeof(AbpSettingManagementBlazorMudBlazorServerModule), typeof(AbpSettingManagementApplicationModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(MyProjectNameBlazorServerModule) @@ -152,7 +150,7 @@ public override void ConfigureServices(ServiceConfigurationContext context) //BLAZOR UI options.StyleBundles.Configure( - BlazorBasicThemeBundles.Styles.Global, + BlazorMudBlazorBasicThemeBundles.Styles.Global, bundle => { bundle.AddFiles("/blazor-global-styles.css"); @@ -210,10 +208,6 @@ public override void ConfigureServices(ServiceConfigurationContext context) options.IsEnabled = MultiTenancyConsts.IsEnabled; }); - context.Services - .AddBootstrap5Providers() - .AddFontAwesomeIcons(); - Configure(options => { options.MenuContributors.Add(new MyProjectNameMenuContributor()); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/_Imports.razor b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/_Imports.razor index 82279dd28a0..26389b17acd 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/_Imports.razor +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/_Imports.razor @@ -8,7 +8,6 @@ @using static Microsoft.AspNetCore.Components.Web.RenderMode @using Microsoft.JSInterop @using MyCompanyName.MyProjectName.Blazor.Server -@using Blazorise -@using Blazorise.DataGrid -@using Volo.Abp.BlazoriseUI -@using Volo.Abp.BlazoriseUI.Components +@using MudBlazor +@using Volo.Abp.MudBlazorUI +@using Volo.Abp.MudBlazorUI.Components diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index debf160188d..de882113dd6 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -8,7 +8,7 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorServerModule.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorServerModule.cs index 42d94ec462a..cb9703695dd 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorServerModule.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorServerModule.cs @@ -1,10 +1,10 @@ -using Volo.Abp.AspNetCore.Components.Server.Theming; +using Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor; using Volo.Abp.Modularity; namespace MyCompanyName.MyProjectName.Blazor.Server; [DependsOn( - typeof(AbpAspNetCoreComponentsServerThemingModule), + typeof(AbpAspNetCoreComponentsServerThemingMudBlazorModule), typeof(MyProjectNameBlazorModule) )] public class MyProjectNameBlazorServerModule : AbpModule diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/MyCompanyName.MyProjectName.Blazor.WebAssembly.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/MyCompanyName.MyProjectName.Blazor.WebAssembly.csproj index 0eb1577f2dc..f764d2736e3 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/MyCompanyName.MyProjectName.Blazor.WebAssembly.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/MyCompanyName.MyProjectName.Blazor.WebAssembly.csproj @@ -8,7 +8,7 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/MyProjectNameBlazorWebAssemblyModule.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/MyProjectNameBlazorWebAssemblyModule.cs index e705cbabc3a..703ecbb2213 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/MyProjectNameBlazorWebAssemblyModule.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebAssembly/MyProjectNameBlazorWebAssemblyModule.cs @@ -1,4 +1,4 @@ -using Volo.Abp.AspNetCore.Components.WebAssembly.Theming; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; using Volo.Abp.Modularity; namespace MyCompanyName.MyProjectName.Blazor.WebAssembly; @@ -6,7 +6,7 @@ namespace MyCompanyName.MyProjectName.Blazor.WebAssembly; [DependsOn( typeof(MyProjectNameBlazorModule), typeof(MyProjectNameHttpApiClientModule), - typeof(AbpAspNetCoreComponentsWebAssemblyThemingModule) + typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule) )] public class MyProjectNameBlazorWebAssemblyModule : AbpModule { diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 682ca7eaa30..6ec1b992d6f 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -9,7 +9,7 @@ - + diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs index 1dcb64b5c54..7fa03428f97 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using MyCompanyName.MyProjectName.Blazor.Menus; -using Volo.Abp.AspNetCore.Components.Web.Theming; -using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; using Volo.Abp.Mapperly; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; @@ -10,7 +10,7 @@ namespace MyCompanyName.MyProjectName.Blazor; [DependsOn( typeof(MyProjectNameApplicationContractsModule), - typeof(AbpAspNetCoreComponentsWebThemingModule), + typeof(AbpAspNetCoreComponentsWebThemingMudBlazorModule), typeof(AbpMapperlyModule) )] public class MyProjectNameBlazorModule : AbpModule diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor index 43b30f8498e..690be9c8cfc 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor @@ -1,5 +1,4 @@ @using Microsoft.AspNetCore.Components.Web @using Volo.Abp.AspNetCore.Components.Web -@using Volo.Abp.BlazoriseUI -@using Blazorise -@using Blazorise.DataGrid \ No newline at end of file +@using Volo.Abp.MudBlazorUI +@using global::MudBlazor \ No newline at end of file